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軟件與串口調試助手可以正常通信
此結論為猜測無法看到虛擬串口結果。
虛擬串口虛擬出的串口進行串口通信時,校驗位不起作用。