qmodbus记录一下,担心 忘记了

tcp是大端, modbus tcp当然也是大端
一般操作系统都是小端 ,
当操作系统 -》 modbus tcp -> plc时
不用关心plc那边是大端还是小端 , 只要面对modbus tcp转换就行了
16位 大小端翻转

#define BigtoLittle16(A)   (( ((uint16)(A) & 0xff00) >> 8)    | \  
                                       (( (uint16)(A) & 0x00ff) << 8))  

32位

#define BigtoLittle32(A)   ((( (uint32)(A) & 0xff000000) >> 24) | \  
                                       (( (uint32)(A) & 0x00ff0000) >> 8)   | \  
                                       (( (uint32)(A) & 0x0000ff00) << 8)   | \  
                                       (( (uint32)(A) & 0x000000ff) << 24))  

移位符号和大小端无关的, 即上面的转换,不管是大端还是小端都能用

qmodbusdataunit中的 values 是一个list
收发数据时, list 第0个位置都是放低位 和大小端无关 所以qmodbusdataunit,用不到前面讲的代码片段
我们需要做的,
发,用移位把低位 至高位, 依次组16位 放 dataunit的values中的
收,依次把 dataunit的values从0至n 位置的值拿出来,组成想要要的数据就行了
线圈 和 输入离散量, 0为0,非0为1

posted @ 2023-04-26 20:56  马肯尼煤牙巴骨  阅读(172)  评论(0)    收藏  举报