第一种方式:直接文件存取
读取当前数据和历史数据:
当前实时数据和历史数据以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/ 未经允许不得转载