如何基于RS485研究總線集散式測控系統?
2.3通信時序
由于RS-485通信是一種半雙工通信,發送和接受共用同一物理通道,在任意時刻只允許一臺單片機處于發送狀態,因此要求應答的單片機必須在偵聽到總線上呼叫信號己經發送完畢,并且在沒有其他單片機應答信號的情況下才能應答。如果在時序上配合不好,就會發生總線沖突,使整個系統的通信癱瘓,無法正常工作。上位機與下位機之間如何進行數據傳輸,怎么提高通信的效率和可靠性,以及對通信過程中的故障處理,幀格式的約定,都需要一套詳盡的通信協議。
由于RS-485標準只制定了物理層電氣標準,對上層通信協議沒有規定,這給設計者提供了很大的靈活性。一套完整的通信協議既要求結構簡單,功能完備,又要求具有可擴充性與兼容性,并且盡量標準化。
3報文通信時的簡單協議
SLIP(Serial?Line?Intemet?Protocol)協議是串行線路網際協議,它是最早的、也是僅有的兩個串行IP協議之一。它實現了在串行通信線路上運行TCP/IP協議及其應用服務的功能,為用戶上網提供了撥號IP模式。這里由它派生出改進協議:
(1)發送數據時的報文組裝
●取一個關鍵字0x55,一個報文的傳輸以0x55為引導,中間可以有任意多的字節數,最后以0xAA結束一個報文。關鍵字0x55和0xAA不參與檢驗和運算。
●如果傳輸的原始數據中含有0x55,則將其替換成0xFF+0x05,求校驗和時仍按一個0x55計算。
●如果傳輸的原始數據中含有0xAA,則將其替換成0xFF+0x0A,求校驗和時仍按一個0xAA計算。
●如果傳輸的原始數據中含有0xFF,則將其替換成0xFF+0x00,求校驗和時仍按一個0xFF計算。
●其余數據原樣發送。
例如:當有0x55、,0x5A,0xAA,0xAS,0xFF這5個字節數據需要發送時,加上它們的算術校驗和0xFD,原始數據總共6個字節。按上述方法整合成的一個報文為:0x55,0xFF,0x05,0x5A,0xFF,0x0A,0xAS,0xFF,0x00,0xFD,0xFF,總共11 個字節。
(2)接收數據時的報文解讀
接受方將接收所有的數據并存入數組,主程序從數組中逐個取出數據并進行解讀,其過程如下:
●等待出現第一個0x55,以判斷一個數據包的開始。一旦讀到0x55,立即進行一個報文接收的初始化工作,包括數組單元清0,字節計數器清0等工作。
●從隊列中讀取一個數據,如果不是0x55、0xAA或0xFF,則直接將數據存入數組。
●如果讀到0xFF,則繼續讀其下一個數據,若是0x05,則替換回原始數據0x55;若是0x0A,則替換回原始數據xAA,若是0x00,則替換回原始數據0xFF。若都不是,則數據傳輸出錯。
●當讀到xAA時,一個報文結束,關串口接收中斷,串口中斷流程圖如圖4所示。

圖4接收數據幀時的串口中斷流程圖
4結論
本文作者創新點:在多MCU之間中長距離通信的諸多方案中,RS-485因硬件設計簡單、控制方便、成本低廉等優點。本文完成了基于RS-485的單主機一多從機的集散式控制系統的設計,包括上位機主控端與下位機從動端,并詳細分析了其通信時序。
評論