本文将介绍如何使用 Visual C# 将 SecsToHost.Net 集成到设备应用软件中。.
在设备控制器中添加 SECS/GEM 功能并不复杂。通过 SecsToHost.Net, 简单地说,只需 3 个简单的步骤(最少的编码),不到一个小时就能完成!
步骤 #1 - 动态配置
使用模型生成器(包含在 SDK 中)添加或定义设备参数(如状态变量、离散变量或设备常量/设置)、事件、警报、远程/主机命令等。.
您可以添加任意多的 GEM 数据项,这些配置将保存到 EquipmentTemplate.xml 文件中。(文件名可以更改)
要完成本文中的示例,需要定义这些 GEM 数据项:
1.
状态变量: 添加 "压力 "和 "温度"
2.
CEID:添加 "SensorDataChanged"
3.
警报:添加 "警报 1"
所有 GEM 数据项 ID 将自动生成
步骤 #2 - 将 SecsToHost.Net 动态链接库整合到您的应用程序中
在步骤 1 中定义了所有所需的 GEM 数据项后,将这些 DLL 添加到项目参考中。.
使用步骤 1 中生成的 EquipmentTemplate.xml 初始化 GEMController 对象。.
private GEMController gemController;
私有 void InitializeSecsToHost() {
gemController = new GEMController();
try {
// 订阅通信状态转换事件
gemController.CommunicationStateChanged += OnCommunicationStateChanged;
// 订阅 GEM 控制状态转换事件
gemController.ControlStateChanged += OnControlStateChanged;
// 订阅主机发送的 GEM 远程命令 (S2F21, S2F41, S2F49)
gemController.RemoteCommandIn += OnRemoteCommandIn;
// 订阅 GEM 食谱下载查询 (S7F1)
gemController.RecipeDownloadInquired += OnRecipeDownloadInquired;
// 订阅主机发送的GEM食谱下载(S7F3)
gemController.RecipeDownloadReceived += OnRecipeDownloadReceived;
// 订阅 GEM 食谱上传请求 (S7F5)
gemController.RecipeUploadRequested += OnRecipeUploadRequested;
// 订阅主机发送的 GEM 终端消息(S10F3)。
gemController.TerminalMessageReceived += OnTerminalMessageReceived;
// 初始化 GEM 控制器
gemController.Initialize("EquipmentTemplate.xml", @"C:\Temp");
}
catch (Exception ex) {
Logger("Error: Failed to initialize SecsToHost.Net");
}
}
上述 gemController.Initialize 方法的代码会接收 EquipmentTemplate.xml 文件,以便在运行时加载 GEM 数据项。.
每当设备的参数值发生变化时,就会调用 gemController.SetAttribute 方法来更新其值。.
例如,更新参数 “压力 ”和 “温度”:
// 更新 SVID:压力
gemController.SetAttribute("Pressure", AttributeType.SV, "89");
// 更新 SVID:温度
gemController.SetAttribute("温度",AttributeType.SV,"122.8");//更新 SVID:温度
// 向主机发出 CEID: SensorDataChanged 事件通知
gemController.SendCollectionEvent("SensorDataChanged");
向主机发出警报或清除警报通知:
// 引发 ALID:Alarm1:向主机发送警报设置通知
gemController.SetAlarm("Alarm1");
// 清除 ALID:Alarm1:向主机发送警报清除通知
gemController.ClearAlarm("Alarm1");
// 订阅主机发送的 GEM 食谱下载 (S7F3)
gemController.RecipeDownloadReceived += OnRecipeDownloadReceived;
在 OnRecipeDownloadReceived 事件处理程序中读取 recipeId 和 recipeBody 参数:
private void OnRecipeDownloadReceived(object sender, RecipeEventArgs e) {
string recipeId = e.RecipeId;
byte[] binPPBody = e.GetRecipeBody();
// 向主机发送 S7F4 ACK。
e.SetReply(ACKC7.Accepted);
}
步骤 #3 - 使用 SWIFT 模拟器测试 GEM 应用程序
SWIFT 模拟器是 SDK 附带的另一个工具,可用于模拟 HOST。.
以主机身份运行 SWIFT 模拟器,测试新创建的 GEM 应用程序:
一旦您的 GEM 应用程序调用了这些代码:
// 更新 SVID:压力
gemController.SetAttribute("Pressure", AttributeType.SV, "89");
// 更新 SVID:温度
gemController.SetAttribute("温度",AttributeType.SV,"122.8");//更新 SVID:温度
在 SWIFT 模拟器中,发送 S1F3 以查询 “压力(SVID:1016)”和 “温度(SVID:1017)”的值,GEMController 将无缝回复 S1F4。.

