与施耐德仿真PLC通信成功后,不难发现%MW0和%MW1均与PLC上一一对应,但是REAL类型的a3变量不能显示,a4类型的DINT变量与PLC侧的DINT数据不一样。通过对比不难发现在WINCC侧DINT和REAL的存储结构是高字储存在低位,而在PLC侧是高字储存在高位,这样就造成这种双字类型的变量显示异常。(三)输出值处理为了能正确显示,需要在IO域输出中利用C脚本进行高低字转化,具体过程如下图:通过上述C脚本处理后REAL类型显示值就与PLC侧一致了,DINT类型的处理过程类似,就不在赘述。(四)输入值处理
通过上述方法处理后,这样虽然可以正常的显示,但是无法通过上位IO域输入修改PLC侧的变量数据。
因此本文通过监听输入值改变的事件,然后在事件中利用脚本将输入的值按照小端模式进行重新组合后再写给变量,从而改变相应变量的值并且与PLC侧数据同步。具体过程如下:(五)IO域输入/输出连接不同变量的间接方法在西门子论坛中看到过两个咨询帖子,关于IO域的输出和输入连接不同变量的问题,通过官方的回复,基本确定目前并不支持该功能。通过前面解决浮点数显示和输入问题的思路,我们同样可以可以利用C脚本间接实现一个IO域输出、输入关联不同的变量。具体实现过程,各位网友可以按上述思路完成。(六)博途WINCC Modbus TCP驱动默认情况在博途WINCC中新建Modbus TCP驱动时,有一个改变字顺序复制框,默认情况是没有勾选的。
同时在博途WINCC下建立相同的变量进行测试,结果如下:(1)不勾选更改字顺序,按小端处理,与PLC侧数据一致。(2)勾选更改字顺序,按大端处理,显示数据异常。