最近用C++做了个应用,使用Socket TCP与S7-300 PLC通信。
PLC侧功能块用AG_SEND/AG_RECV,对于字符、整型(PC对应是short int)通信没有问题测试成功,且互发的数据都正确。
注:对于整型(2字节)要考虑大、小端字节序的问题。C++中调用ntohs()/htons()函数即可。
但对于浮点型数据(4字节,IEEE 754标准)就碰到问题了,通信正常,可以接收到数据,但接收到的数据非传送的数据(数据不正确)。判断下来,基本应该也是大、小端的问题。但就不知道如何解决了?
难道只能在PLC端做移位操作?
求坛友赐教?
PS:所谓大、小端字节序,也就是字节在处理器中的存储循序,即:高8位/低8位的存储顺序。百度即知。
但对于浮点(C++: float,PLC:real),就不能采用高、低8位对掉的方法解决问题了。附图IEEE 754单精度浮点的存储规则:
