第一种方式:直接文件存取

读取当前数据和历史数据:

当前实时数据和历史数据以DAT格式存储在快照表中,快照表一段时间中是输入通道的数据与状态的集合。

默认情况下,当前数据,历史数据,事件存储在C:\SCADA\ArchiveDAT目录下,当前数据以current.dat命名,历史数据以mYYMMDD.dat存储每分钟读取的数据,hYYMMDD.dat存储每小时读取的数据,每一个文件存储了一天的数据,其中YYMMDD代表年月日

为了存取包含快照表的DAT文件,我们设计了Scada.Data.SrezAdapter 这个类,

下面的例子示例从快照表文件中读取数据:

using Scada.Data;

SrezTableLight snapshotTable = new SrezTableLight();

SrezAdapter adapter = new SrezAdapter();

adapter.FileName = @“C:\SCADA\ArchiveDAT\Cur\current.dat”;

adapter.Fill(snapshotTable);

以上的例子使用SrezAdapter适配器的实例将快照表文件的数据填充到SrezTableLight对象中,SrezAdapter适配器支持将数据装载到数据表中。

DataTable是.NET对表的一种基本实现,在速度上DataTable明显慢于SrezTableLight,为了表达清晰你也可以使用DataTable。

为了快速处理某一输入通道的数据,我们设计了Trend类,该类可以将某一通道数据以图表方式显示出来。

如何将快照表的数据输出到控制台?

foreach (SrezTableLight.Srez snapshot in snapshotTable.SrezList.Values)

{

int cnlCnt = snapshot.CnlNums.Length;

Console.WriteLine(“Snapshot {0}, number of channels is {1}:”,

snapshot.DateTime, cnlCnt);

for (int i = 0; i < cnlCnt; i++)

{

Console.WriteLine(” Channel[{0}] = {1}, {2}”, snapshot.CnlNums[i],

snapshot.CnlData[i].Val, snapshot.CnlData[i].Stat);

}

}

读取事件:

从DAT文件中读取事件和读取其他快照方式类似,可使用EventAdapter 对象将数据读到EventTableLight 或者 DataTable 对象中,EventTableLight在性能上有明显优势,事件文件以eYYMMDD.dat命名,其中YYMMDD代表年月日。

下面演示如何读取及输出事件:

// 读取事件示例

EventTableLight eventTable = new EventTableLight();

EventAdapter adapter = new EventAdapter();

adapter.FileName = @“C:\SCADA\ArchiveDAT\Events\e150131.dat”;

adapter.Fill(eventTable);

// 事件的控制台输出

foreach (EventTableLight.Event ev in eventTable.AllEvents)

{

Console.WriteLine(“Number: {0}. Date & time: {1}. Channel: {2}”,

ev.Number, ev.DateTime, ev.CnlNum);

}

本文不涉及对当前及历史数据的写入操作,因为该功能由SCADA-Server负责,其他应用程序不应该直接改变数据文件,而是应该通过SCADA-server 以TCP方式进行交互。

读取配置数据库:

配置数据库可使用SCADA-Administrator应用程序进行编辑,当配置数据库数据变化时,当前正在工作参数的副本将被创建当按下适当的按钮时,该副本被用于其他Rapid SCADA应用,默认情况下,参数存储在C:\SCADA\BaseDAT目录下,该目录下的所有DAT文件都可以通过SCADA-Server查看。

我们设计了Scada.Data.BaseAdapter类用来将配置数据库表DAT文件数据读取到DataTable中,配置数据库表长度不能超过65535行

The example of reading the configuration database table:

下列实例用来读取配置数据库表

DataTable dataTable = new DataTable(“BaseTable”);

BaseAdapter adapter = new BaseAdapter();

adapter.FileName = @“C:\SCADA\BaseDAT\incnl.dat”;

adapter.Fill(dataTable, true);

DataTable详细描述可以参考MSDN

第二种方式: TCP

SCADA-Server支持TCP方式和其他应用程序之间交换数据,例如,SCADA-Communicator ,SCADA-Web,另外,可以使用TCP方式进行远程控制,然后控制命令会被传递到其他控制器。

可以通过配置使SCADA-Server在某个特定端口进行监听,其他的应用程序可以以客户端方式连接SCADA-Server。所用连接的客户端都保存可以在SCADA-Server 状态文件中。

客户端连接时必须提供用户名和命名才能有权请求及发送数据,用户名及密码咋配置文件中指定,用户必须和应用程序角色进行关联。

下面展示如何创建一个可以连接SCADA-Server并读取快照表的的对象:

using Scada.Client;

CommSettings settings = new CommSettings(“localhost”, 10000,

“ScadaServerCtrl”, “12345”, 10000);

ServerComm serverComm = new ServerComm(settings);

SrezTableLight snapshotTable = new SrezTableLight();

bool dataReceived = serverComm.ReceiveSrezTable(“current.dat”, snapshotTable);

serverComm.Close();

if (dataReceived)

Console.WriteLine(“Data received successfully”);

else

Console.WriteLine(“Error receiving data: ” + serverComm.ErrMsg);

以上例程中,为了和通过TCP 方式和SCADA-Server通讯,我们使用Scada.Client.ServerComm类,连接配置信息保存在CommSettings对象中,关于接收到的数据存放在SrezTableLight,数据如何处理不再赘述。

The most useful methods of ServerComm class needed for integration with Rapid SCADA are listed in the following table.

ServerComm类提供了很多实用的方法,下面我把它们列在下面:

方法名 名称

ReceiveBaseTable 接收配置数据库表

ReceiveSrezTable 接收读取快照数据库表

ReceiveTrend Receives a trend of input channel from SCADA-Server

ReceiveEventTable Receives an event table from SCADA-Server

ReceiveFileAge Receives a file’s modification date and time from SCADA-Server

SendStandardCommand Sends a standard command to SCADA-Server

SendBinaryCommand Sends a binary command to SCADA-Server

SendRequestCommand Sends a command of extra request a device to SCADA-Server

ReceiveCommand Receives a command from SCADA-Server

SendSrez Sends a snapshot of the current data to SCADA-Server

SendArchive Sends a snapshot of the archive data to SCADA-Server

SendEvent Sends an event to SCADA-Server

CheckEvent Sends a check event command to SCADA-Server

Close Finalizes interacting with SCADA-Server and releases resources

关于SCADA-Server 模块

SCADA-Server支持插件方式进行扩展,插件是以一定规则使用.NET语言编写的,为了和SCADA-Server内部区别,插件统一以logic为文件结尾。插件可以启动,停止,接收新的数据等。

插件的应用案例:

1, 当接收到数据时传送给第三方软件。

2, 对SCADA-Server接收到的数据进行更复杂的处理。

3, 当条件满足时执行预先定义好的命令

以上开发模块(插件),Microsoft Visual Studio 2010或更高版本是必须的,每个模块必须继承Scada.Server.Modules.ModView 和 Scada.Server.Modules.ModLogic.,ModView是用户界面,主要用于提示用户模块作用,ModLogic实现了具体的功能。

你可以从GitHub上下载模块实现的例程。

模块(插件)的类命名规则:

1,文件必须以Mod作为前缀,例如,ModTest.dll.

2,引用ModView ,ModLogic类的命名空间是Scada.Server.Modules.

3,复制编译好的DLL文件到SCADA-Server模块目录.默认的位置 C:\SCADA\Server\Mod

Then open Modules page of SCADA-Server user interface, add module, save the settings and restart SCADA-Server service.

当前文章链接:https://www.wagoscada.cn/8855.html

文章来源于:https://www.wagoscada.cn/     未经允许不得转载

获取 WAGO SCADA