一直对PLC数据格式不是太清楚。目前只知道西门子PLC数据格式是高位低存格式。如下图格式。

但是实际上亚系(日系和国产)数据格式基本都是低位低存格式,还有第三方模块也很多都是这一种格式。经常在项目上会遇到西门子PLC和各大第三方PLC和第三方模块进行数据交换。通常会遇到交换后各自品牌的PLC拿到原始数据是不对,需要通过SWAP 16位或是DSWAP 32位数据指令进行数据置换指令,这是常规做法进行对不同品牌PLC交换后的数据处理。但是我实际测试过西门子1200和三菱或是台达等日系或国产PLC交换数据,当数据大于16位时,用DSWAP指令置换的数据在西门子上面显示也是不对,日系国产用DSWAP也是得到数据不对,这是通过监控两边PLC数据对比出来的结果。如果超过16位数据格式我一般都是用循环左移或是右移16个位的数据才正确。两边PLC需要用循环移位移动16个位数据后,才会得到各自PLC需要的数据格式。但是实际上还会有很多不同数据格式需要处理,当遇到其他数据格式怎样转换成当前PLC需要的数据。
目前各个品牌的控制或是第三方模块或是上位机都有自己的数据存储格式,当不同格式数据进行通讯时,各自需要怎么处理,如何快速知道这些数据存储格式,有什么好的方法来转换成自己需要的数据格式。我目前也就知道上面的方法和上面数据存储格式,但是是时间工作中经常运到各式各样的数据,有些时候需要花大量时间去了解解决这些问题,严重影响工作效率。例如西门子字符串数据格式,和其他控制上位机的字符串格式存储不一样,西门子字字符串的第一个字节为该字符串总长度,第二个字节为当前存储的有效字符数量,第三个字节为当前字符起始字符,这样和上位机通讯或是第三方PLC通讯就会造成对方收到或是字符数据有问题。
对不同数据转换成当前PLC需要的数据格式,请大神们发表自己各自在工作中遇到问题及处理方法分享一下。谢谢!