串口MSComm控件五種不同校驗方式對數據收發的影響

在首頁遊蕩看到的一個485串口的問題(http://bbs.csdn.net/topics/390785462?page=1#post-397392251),擴展閱讀下。

轉自:原博客地址

串口MSComm控件有五種校驗方式,分別是無校驗(None),奇校驗(Odd),偶校驗(Even),1校驗(Mark),0校驗(Space)。

在RS232/RS485/RS422通訊中,通過串口發送一字節(8BIT)數據時,首先發送起始位(固定爲0),然後發送8位數據(先低位後高位),如果校驗方式不是無校驗(None),則緊接着會發送一位校驗位,最後發送停止位。停止位固定爲1。

停止位依據串口屬性的設置可爲1位,1.5位或2位。爲了說明簡潔起見,下面均假設停止位位數爲1而數據位位數爲8。

在數據發送時,如果校驗方式設置爲無校驗(None),則不發送校驗位;否則會發送一位校驗位。

具體地,如果校驗方式設置爲1校驗(Mark),校驗位固定爲1;如果校驗方式設置爲0校驗(Space),校驗位固定爲0;如果校驗位爲奇校驗(Odd),或者偶校驗(Even),那麼校驗位可能爲0也可能爲1,依據所發送的數據計算得出。計算方法:如果是奇校驗,那麼8位數據和1位校驗位的累加和必是奇數;對應的,如果是偶校驗,8位數據和1位校驗位的累加和必爲偶數。比如,數據37,其二進制編碼爲00100101,編碼中含有5個0和3個1,5*0+3*1=3,如果採用奇校驗,那麼校驗位爲0;如果使用偶校驗,校驗位則爲1。

使用MSComm控件發送數據時,校驗位無需用戶干預,數據發送時自動地由操作系統計算、添加、發出。

 

串口MSComm控件在接收數據時,如果無校驗,則只要檢測到串口出現了數據,數據總能收到(試驗發現,即使停止位爲0也不會被認爲是錯誤幀而遭遇拋棄);而採用了某種校驗後,只有校驗通碼正確的數據才能被正確地收到。

試驗中發現,發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出值一律爲5BH。

爲什麼是5BH(‘[’)呢?不明白,納悶中…

 

下面是試驗過程中的截圖: 

第一組試驗:發送方發送的1個數據楨有10位組成:1位起始位,8位數據位,1位停止位

試驗(1.1)

發方:9600,N,8,1(發出的數據位數爲8)

收方:9600,N,8,1

解讀:協議完全匹配,所有數據均能被正確收到。 串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(1.2)

發方:9600,N,8,1(發出的數據位數爲8)

收方:9600,O,8,1

解讀:此時發送方的停止位被接收方當作校驗位,由於是奇校驗,而此時的校驗位爲1,所以只有含有偶數個1的那些數據才能被PC正確收到,比如00H,03H,05H,06H,09H,0AH,0CH,0FH等。(發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出爲5BH) 串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(1.3)

發方:9600,N,8,1(發出的數據位數爲8)

收方:9600,E,8,1

解讀:此時發送方的停止位被接收方當作校驗位,由於是偶校驗,而此時的校驗位爲1,所以只有含有奇數個1的那些數據才能被PC正確收到,比如01H,02H,04H,07H,08H,0BH,0DH,0EH等。(發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出爲5BH) 串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(1.4)

發方:9600,N,8,1(發出的數據位數爲8)

收方:9600,M,8,1

解讀:此時發送方的停止位被接收方當作校驗位,由於要求校驗位爲1而此時的校驗位恰好爲1,所以所有數據都能被PC正確收到。

串口MSComm控件五種不同校驗方式對數據收發的影響 

試驗(1.5)

發方:9600,N,8,1(發出的數據位數爲8)

收方:9600,S,8,1

解讀:此時發送方的停止位被接收方當作校驗位,由於要求校驗位爲0而此時的校驗位恰好爲1,所以所有數據都不能被PC正確收到。 串口MSComm控件五種不同校驗方式對數據收發的影響

 

第二組試驗:發送方發送的1個數據楨有11位組成:1位起始位,8位數據位,1位校驗位(該位固定爲1),1位停止位。由於校驗位爲1,所以只要不是數據一個接一個地連續發送,在時序上和不含校驗位的第一組試驗中發出的數據完全一致。

試驗(2.1)

發方:9600,M,8,1(發出的數據位數爲9,第9位爲1)

收方:9600,N,8,1

解讀:此時發送方的第9位爲1,由於接收方使用無校驗,發送方的第9位被接收方當作是停止位,所以發送方發送的所有數據都能被PC正確收到。串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(2.2)

發方:9600,M,8,1(發出的數據位數爲9,第9位爲1)

收方:9600,O,8,1

解讀:此時發送方的第9位即校驗爲1,由於是奇校驗,而此時的校驗位爲1,所以只有含有偶數個1的那些數據才能被PC正確收到,比如00H,03H,05H,06H,09H,0AH,0CH,0FH等。(發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出爲5BH) 串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(2.3)

發方:9600,M,8,1(發出的數據位數爲9,第9位爲1)

收方:9600,E,8,1

解讀:此時發送方的第9位即校驗位爲1,由於是偶校驗,而此時的校驗位爲1,所以只有含有奇數個1的那些數據才能被PC正確收到,比如01H,02H,04H,07H,08H,0BH,0DH,0EH等。(發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出爲5BH)

串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(2.4)

發方:9600,M,8,1(發出的數據位數爲9,第9位爲1)

收方:9600,M,8,1

解讀:此時發送方的第9位即校驗爲1,由於要求校驗位爲1而此時的校驗位恰好爲1,所以所有數據都能被PC正確收到。 串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(2.5)

發方:9600,M,8,1(發出的數據位數爲9,第9位爲1)

收方:9600,S,8,1

解讀:此時發送方的第9位即校驗爲1,由於要求校驗位爲0而此時的校驗位恰好爲1,所以沒有數據能被PC正確收到。串口MSComm控件五種不同校驗方式對數據收發的影響

 

第三組試驗:發送方發送的1個數據楨有11位組成:1位起始位,8位數據位,1位校驗位(該位固定爲0),1位停止位。

試驗(3.1)

發方:9600,S,8,1(發出的數據位數爲9,第9位爲0)

收方:9600,N,8,1

疑惑:此時發送方的第9位爲0,由於接收方使用無校驗,發送方的第9位被接收方當作是停止位,此時停止位爲0,應該發生幀錯誤,怎麼發送方發送的所有數據都能被PC正確收到呢? 串口MSComm控件五種不同校驗方式對數據收發的影響 

試驗(3.2)

發方:9600,S,8,1(發出的數據位數爲9,第9位爲0)

收方:9600,O,8,1

解讀:此時發送方的第9位即校驗爲0,由於是奇校驗,而此時的校驗位爲0,所以只有含有奇數個1的那些數據才能被PC正確收到,比如01H,02H,04H,07H,08H,0BH,0DH,0EH等。(發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出爲5BH)串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(3.3)

發方:9600,S,8,1(發出的數據位數爲9,第9位爲0)

收方:9600,E,8,1

解讀:此時發送方的第9位即校驗爲0,由於是偶校驗,而此時的校驗位爲0,所以只有含有偶數個1的那些數據才能被PC正確收到,比如00H,03H,05H,06H,09H,0AH,0CH,0FH等。(發生校驗錯的那些數據在後面能校驗通過的數據被收到時才被輸出,輸出爲5BH)串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(3.4)

發方:9600,S,8,1(發出的數據位數爲9,第9位爲0)

收方:9600,M,8,1

解讀:此時發送方的第9位即校驗爲0,由於是1校驗,而此時的校驗位爲0,所以收不到任何數據。串口MSComm控件五種不同校驗方式對數據收發的影響

 

試驗(3.5)

發方:9600,S,8,1(發出的數據位數爲9,第9位爲0)

收方:9600,S,8,1

解讀:此時發送方的第9位即校驗位爲0,由於是0校驗,而此時的校驗位爲0,所以所有數據均可正確地收到。串口MSComm控件五種不同校驗方式對數據收發的影響


發佈了22 篇原創文章 · 獲贊 7 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章