RS-485的多機通信方案探究
3.4.1 數據混亂
上述方法存在數據混亂的隱患。如果網關節點與終端節點通信過程都是用N個字節進行,那么不會出現數據紊亂問題。但若假設網關節點發送命令用N個字節,而終端節點向網關節點回復數據時,用M(M>N)個字節,此時總線上的其他終端節點都會收到這M個字節。此時,會認為是網關節點發出的,所以只解析前N個字節的數據,那么在FIFO中就剩下了(M—N)個字節,即此時FIFO中并不為空。若網關節點此時再與其他任意一個終端節點通信時,程序會默認先讀出殘留的(M—N)個字節數據,就會造成數據紊亂,網關節點再難與其他節點正常通信。
解決方法是在每次有數據進入FIFO中后,觸發中斷,將所有的數據都讀出,而只解析前N個字節。因為在整個RS-485系統中,只有網關節點才能與終端節點通信,各個終端節點之間不可以通信,而網關節點與終端節點通信是N個字節。一次讀空FIFO的目的就是清空FIFO中的無效數據。
3.4.2 改進型RS-485協議
RS-485通信的最大缺點就是主從式的通信方式,從機只有在收到主機的命令后才可以與之通信。而CAN總線的每個節點可以在任意時刻接收和發送數據,通過其仲裁體制,避免數據沖突,但是CAN總線的成本相對較高,對于實時性和安全性要求不高的場合,不適宜用CAN總線通信。
借鑒CSMA/CD協議,本文提出改進型的通信方式。設置全局變量nesting,如果進入一次RS-485中斷,則nesting加1。在終端需要向網關節點發送數據時,置nesting為0,延遲(address×10)ms;如果總線上沒有數據通信,nesting為0,此時節點可以主動向網關節點發送數據;否則,表示總線上繁忙,則繼續延遲(address)ms。
嘗試K次,K的大小根據用戶需求設定。若此終端節點已經在網關節點的輪詢范圍之內,終端向網關發送的數據為緊急事件包,則K的值應該盡量小;若主動發送失敗,可以等待節點被輪詢之時,再將此數據發送出去。若此終端節點不在網關節點的輪詢范圍之內,是新加入的節點,則主動發送信息的目的是告訴網關,自己是新節點,需要加入總線系統中,此時K值應該盡量大,以保證新節點能夠不在上位機的協助下,自動地加入總線系統中,提高系統的靈活性。終端發送流程圖如5所示。本文引用地址:http://www.104case.com/article/153643.htm
網關節點不能輪循完一遍之后,又立即進行下一次輪詢。這樣,總線上一直都會是忙碌狀態。網關節點必須在輪詢完一次之后,暫停L秒,這個空隙時間就是留給終端主動向網關發送數據。L不宜過大,否則會大大降低系統整體效率,L的選取與系統共有多少終端節點且每個終端節點與網關節點通信時間有關。
使用普通模式進行通信,優點是RS-485通信應用靈活,可以支持更多的節點掛載在總線上;可以改進RS-485通信方式,自動地址識別模式無法監聽總線是否繁忙。缺點是各個節點的工作量增大,將頻繁解析指令,系統整體效率降低。
結語
在使用RS-485方式通信時,選取哪種方式進行通信,需要根據不同場合而定。傳統的自動地址識別模式,適用于嚴格的主從通信系統,可靠性高,系統整體效率高;而普通模式靈活性較好,但是系統整體效率會降低。所以,要因地制宜,選擇當前場合最適合的方式。
數字通信相關文章:數字通信原理
通信相關文章:通信原理
評論