EnvSafe.Comm 简介
框架结构

EnvSafe.Comm 是由一系列.Net程序集组成通信框架。 它的目的是统一不同设备与上位机之间的实时通信接口, 以简化上位机通信设置,并能够快速适配不同的硬件设备。 例如,若用于实时控制的控制器从PLC更改为数据采集卡, 则只需更改通信配置文件,而不需要重新编程。 框架结构逻辑结构如下图所示。

“传输层”类型用于控制连接和数据的收发; “应用层”类型用于定义读写帧,规范解析应用协议; 两者配合实现一台设备。 例如,在局域网网络中使用Modbus协议进行数据通信, 需要定义基于TCP/IP的传输层,以及构建和解析Modbus协议的应用层。 一个传输层类型可能适合多个应用层,反之亦然。 但对于特殊通信,尤其是使用中间层API的设备,往往需要特殊定义的传输层与应用层类型, 这时两者均是只适用于特定设备。 开发者可以直接在程序中使用已经定义的各传输层与应用层, 也可以根据需要自行开发符合要求的传输层与应用层。 “模块适用场景”一节介绍了可以使用已定义类型的典型场景, 这些场景多为适合某特定品牌型号产品。 要使用特定的传输层或应用层,需要加载类型定义所在的程序集。 各已定义的传输层或应用层类型所在的程序集在“通信层设置”一节分别说明。 各程序集的依赖项以及使用配置方式见“配置方式”节。 若需要自行开发模块,请参考“开发指南”

配置方式

EnvSafe.Comm 支持运行时的设备加载,即在实例化宿主(OtHost)之后, 可以手动创建新的设备实例(OtProvider),并将其添加到宿主中。 在实例化新的设备时,需要事先定义实例化设备所需的配置(以字典Dictionary<string, string>的形式), 并依次实例化关注的数据项(OtItem)。 这种运行时手动加载的方式,仅适合确定硬件设备类型,且设备数量较少的情况。 另外一种设备加载方式是基于xml文件,此种方式可通过宿主实例加载文件或输入的xml文本流, 并根据xml配置的内容自动创建设备实例并加载。 这种保存有设备、数据项定义的xml文件,称为“OT文件”。 一个典型的OT文件以“EnvSafe.OT”为根节点,其下包含多个“Device”节点, 每个“Device”节点包含必要的设备设置(“Settings”节点)以及数据项定义(“Items”节点)。 关于OT文件的详细格式定义,见“配置文件”。 OtHost提供了实例方法,直接读取文本; 而在桌面辅助类型EnvSafe.Comm.Shell.Host中提供了从文件位置直接加载的方法, 见“辅助类型”

除OT文件外,要加载正确的通信层类型,当然还需要加载相应程序集。 如果确知程序可能需要使用的硬件设备型号,则可直接在项目中引用程序集模块。 对于EnvSafe公司内部人员,可通过访问内部nuget服务器获取特定的模块包进行安装 (核心库辅助类库已发布在nuget官方网站)。 采取nuget安装的好处在于,包会根据依赖项关系自动安装前置的程序集。 对于硬件设备无法在编译时确定的,还可以根据需要动态加载程序集, 此时需要开发者对程序集文件的依赖关系有所了解以便满足引用程序集运行的要求。 一般情况下,程序所需要的程序集及其依赖项都应事先部署在程序运行的目录下。 下表列举了EnvSafe.Comm 套件的组件程序集文件加载时需要前置引用的依赖项程序集文件, 注意:部分组件仅建议从Nuget添加,常用平台无关.net framework依赖并未列出。

程序集文件名说明依赖项文件名(按顺序)
EnvSafe.Comm.dll核心库仅建议从Nuget添加
EnvSafe.Comm.ADAM.dll研华亚当模块组件System.Windows.Forms.dll
Advantech.Protocol.dll
Advantech.Common.dll
Advantech.Adam.dll
EnvSafe.Comm.Advantech.dll研华采集卡组件System.Drawing.dll
Advantech.BDaq327.dll
EnvSafe.Comm.Backwards.dll旧版本类型兼容组件仅建议从Nuget添加
EnvSafe.Comm.ClientAce.dll使用凯普华ClientAce的OPC通信组件System.Drawing.dll
System.Windows.Forms.dll
Kepware.ClientAce.OpcClient.dll
EnvSafe.Comm.Compolet.dll使用欧姆龙Compolet的PLC通信组件System.Drawing.dll
System.Windows.Forms.dll
FgwDotnet.dll
SysmacCompolet.dll
EnvSafe.Comm.DeltaModbus.dll使用台达DMT类库的PLC通信组件DMT.dll (Native Code)
EnvSafe.Comm.Distribridge.dll实现了Distribridge接口的客户端组件System.ServiceModel.dll
EnvSafe.Distribridge.Contract.dll
EnvSafe.Comm.GPS.dll串行GPS设备组件
EnvSafe.Comm.OPCNET2.dll使用了OPC基金会2.0类库的OPC通信组件OpcRcw.Ae.dll
OpcRcw.Batch.dll
OpcRcw.Cmd.dll
OpcRcw.Comn.dll
OpcRcw.Da.dll
OpcRcw.Dx.dll
OpcRcw.Hda.dll
OpcRcw.Sec.dll
OpcNetApi.dll
OpcNetApi.Xml.dll
OpcNetApi.Com.dll
EnvSafe.Comm.TechnOPC.dll使用Technosoft OPC类库的OPC通信组件System.Drawing.dll
System.Windows.Forms.dll
OpcDaNet.dll
EnvSafe.Comm.Zhigeng.dll串行的智耕在线水质采样设备通信组件
EnvSafe.Comm.Shell.dll辅助类型库仅建议从Nuget添加

在使用特定的设备通信组件之前,还应确保符合程序运行的前置条件,例如安装必要的第三方软件, 此内容在“模块适用场景”描述。 辅助类型库中提供了通过“模块配置文件”实现自动程序集加载的方法。

快速示例

DataMonitor是一款依赖于EnvSafe.Comm框架的类组态桌面软件, 支持非软件开发者对程序的界面、通信方式和内容、数据展现形式等进行配置,详见“实用工具”。 下面以配置DataMonitor的EnvSafe.Comm相关文件为例,列举了各个步骤。

  1. 获取DataMonitor程序压缩包,解压到希望位置。
  2. 采用手动配置,获取EnvSafe.Comm套件压缩包,解压到任意位置。
  3. 明确可能与DataMonitor配合使用的硬件设备,参考“使用场景”,根据设备确定要使用的组件。
  4. 复制所需组件程序集文件及其依赖项(查询“组件程序集表”确认)到DataMonitor程序文件夹。
  5. 根据“在线宿主模块加载”节编写辅助类型的模块加载配置文件。
  6. 根据“配置文件”说明,编写OT文件。