如何将GRM从其他仪器仪表读回来的字分解成位 |
发布时间:2016-02-14 |
有的客户那边的仪器仪表是个性化定制的Modbus, 有可能把寄存器第一个字的某些位作为设备的状态位(譬如位1=运行/停止,位2=故障),然后另外一些位作为设备的控制位(譬如位3=启动/停止), 由于不是标准的Modbus协议,有可能没有做位读写的功能码,或者位读写功能码对应的地址不是映射到相应的寄存器地址上, 这时候就就只能通过读写寄存器的功能码先把这个字关联到GRM变量里,然后再通过GRM模块的内置函数来分解位。 具体步骤如下: 先在GRM开发环境GRMDeveloper的项目的数据字典里新建一个变量,假设为M1, 变量类型为整数, 寄存器类型选“可读写字6x”, I/O数据类型为UINT16, 地址假设为1。这样GRM模块变量M1就跟仪器仪表的寄存器第一个字对应起来了。 接下来可以针对状态位,可以先建立三个GRM内部变量(I/O设备选无),分别为“运行_停止”,“故障位”,“AlwaysOn” ;其中变量"AlwaysOn"的初始值为1,保持选勾, 短信和网络读写都不要勾选。 然后在事件控制里新建事件控制,触发条件为“AlwaysOn”; 表达式为真,周期性触发;触发周期可以设为1s; 事件执行内容为 “运行_停止”=Bit(M1,1), "故障位"=Bit(M1,2). 这样就可通过监控GRM内部变量 “运行_停止”和“故障位” 来监控设备的运行状态和故障状态了。
最后针对启停控制,可以再建立一个GRM内部变量 “启停控制”,然后新建跟上面同样的事件控制,只是表达式改为 M1=BitSet(M1,3,"启停控制"),就可以通过短信或网页远程改变变量"启停控制" 来控制设备的启停了。 |