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

浙公网安备 33010602011771号