串口1 9600 8 1 N
串口2 9600 8 1 E
串口2向串口1发送数据,由于一些原因 串口1无法改成偶校验接收,所以接收到的数据很混乱
串口1接收到的乱数据 01 03 11 26 D8 75 03 8A 08 6C FF
串口1接收到的正常数据 01 03 04 03 0B 06 8A 09 B2 感觉可以通过位操作把偶校验的数据转化成无校验的数据,但不知道如何转化。
串口2 9600 8 1 E
串口2向串口1发送数据,由于一些原因 串口1无法改成偶校验接收,所以接收到的数据很混乱
串口1接收到的乱数据 01 03 11 26 D8 75 03 8A 08 6C FF
串口1接收到的正常数据 01 03 04 03 0B 06 8A 09 B2 感觉可以通过位操作把偶校验的数据转化成无校验的数据,但不知道如何转化。
听了高手讲解,我还是不明白,如何逆向法呢?
他们之间通讯使用modbus协议。
modbus协议本身是带校验的。
如果说无校验串口往有校验串口发送数据会有丢失,那串口2设备的crc校验就不会正确,串口2设备就不会返回任何数据。
现在的情况是串口2返回了数据,不过数据很乱。
我按照sudianbo所说的方式尝试的改了改,感觉改的不对。可能是改的方法有问题
设你发送十六进制数位数为2N,
则接受的比特位是N*9
第一次把带校验位的数据和 0X1FE 左移(N-1)*9后相与,再向右(N-1)*9+1位。
。。2 2 2
。
n。。 n
然后再把第一次的到的数据*16+ 下次得到的
转成16进制数应该就是的,一个笨办法,不知道对不对,