PC软件与PLC串口通信 奇偶检验问题

时间:2021-03-28 18:01:09
PC软件与PLC进行串口通信
波特率:19200
校验位:偶检验
数据位:8
停止位:1
 

现象

一,PC软件向PLC可以发送1,2,4,5,7,8,但是3,6,9发送出去后,PLC无法收到
二,使用虚拟串口,PC软件与串口调试助手可以正常通信
 

原因

PC软件中,校验位按照Mark(奇偶校验位始终1)位填充。
即,在上述的环境中,PC软件用的是奇偶校验位1发送,PLC使用偶数检验接收,所以根据奇偶检验的原理,可以解释3,6,9无法接收的现象了。
 

奇偶检验原理

 
奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了
 
后面其中有一句开始没看明白:奇数位误码能检出,偶数位误码不能检出
其实是这样的,假设使用奇校验发送数据1,二进制表示0000 0001
 
发送端,计算校验位为0(数据中1的个数为奇数),加上校验位后,发送的数据是:0000 0001 0
 
①奇数位误码的情况
接收端接收到的数据为:0001 0001,接收端计算校验结果为1(数据中1的个数为偶数),
接收端查看接收到数据中校验位为0,而自己计算的校验位为1,因此可以断定接收的数据是错误的。
 
②偶数位不能检出的情况
 
接收端接收到的数据为:0001 1001,接收端计算校验结果为0(数据中1的个数为奇数),
接收端一看接收到的检验位0与自己计算出的检验结果0一致,接收端认为这个接收到的数据是正确的。
其实错误已经发生,要发送0000 0001,接收到的却是0001 1001
 
这就是所谓的"奇数位误码能检出,偶数位误码不能检出"问题。
 

解释现象

一,PC软件向PLC可以发送1,2,4,5,7,8,但是3,6,9发送出去后,PLC无法收到
① PC软件向PLC可以发送1,2,4,5,7,8
以1(0000 0001)为例,校验位按照Mark(奇偶校验位始终1)位填充,PLC偶校验结果1,PLC接收
 
②3,6,9发送出去后,PLC无法收到
以3(0000 0011)为例,校验位按照Mark(奇偶校验位始终1)位填充,PLC偶校验结果0,PLC无法接收
 
二,使用虚拟串口,PC软件与串口调试助手可以正常通信
此结论为猜测无法看到虚拟串口结果。
虚拟串口虚拟出的串口进行串口通信时,校验位不起作用。