摘要:RS-485通訊網(wǎng)絡(luò)通常采用撥碼等手工設(shè)置地址,進行網(wǎng)絡(luò)識別的方法,網(wǎng)絡(luò)地址實現(xiàn)自動分配一直是個難題。本文提出采用隨機函數(shù)避開數(shù)據(jù)沖突,再通過多次沖突檢測的方法避開地址沖突,實現(xiàn)網(wǎng)絡(luò)身份的分配和識別。
關(guān)鍵詞:RS-485通訊地址,自動分配,沖突檢測
0、引 言
RS-485通訊網(wǎng)絡(luò)使用方便、可靠性高、價格低廉,在工業(yè)控制、家用電器等領(lǐng)域均有廣泛的應(yīng)用。在傳統(tǒng)的RS-485網(wǎng)絡(luò)設(shè)計中,通常使用撥碼開關(guān)或者人機輸入方式對從機地址進行設(shè)置,故在實際的工程應(yīng)用中,需要現(xiàn)場手工對地址進行設(shè)置,在某些場合很不方便。也有部分應(yīng)用通過電腦串口軟件對地址進行設(shè)置,但是這種方法只能離線設(shè)置,設(shè)置好再進行工程安裝和組網(wǎng),故難以適用于一般的工程。隨著電器和設(shè)備網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,研究和發(fā)展RS-485通訊網(wǎng)絡(luò)的地址自動分配算法意義重大。
1、RS-485通訊網(wǎng)絡(luò)的結(jié)構(gòu)特點
鑒于需要實現(xiàn)多節(jié)點通訊,RS-485通訊網(wǎng)絡(luò)使用共享總線的半雙工傳送方式(halfduplex):某一時刻A方只能發(fā)送信息,B方只能接收信息,而在另一刻,B方只能發(fā)送信息,A方只能接收信息。網(wǎng)絡(luò)結(jié)構(gòu)上,采用主機——從機結(jié)構(gòu)方式,一個主機,多個從機實現(xiàn)通訊,主機和從機通過RS-485總線連接在一起。系統(tǒng)簡圖如下圖1所示。
基于RS-485通訊網(wǎng)絡(luò)結(jié)構(gòu)特點,要實現(xiàn)通訊首先要進行網(wǎng)絡(luò)身份識別。目前最常用的網(wǎng)絡(luò)身份識別方法有三種:一通過撥碼開關(guān)等硬件設(shè)置;二是通過鍵盤和顯示利用人機界面輸入,三是通過電腦串口軟件對地址進行設(shè)置。這三種方法最主要的問題是都要人工設(shè)置,很多時候現(xiàn)場操作不方便。
2、地址自動分配算法的設(shè)計
2.1 算法設(shè)計目標
首次上電時,實現(xiàn)RS-485通訊網(wǎng)絡(luò)從機地址自動分配和識別,不需要人工干預。以后再次上電記憶原分配的地址。
2.2 算法設(shè)計的基本思路
本算法主要參考計算機互聯(lián)網(wǎng)的CSMA(Carrier Sense Multiple Access,載波檢測多路訪問)思想。在主機發(fā)出地址分配信息時,從機進行數(shù)據(jù)沖突檢測,首先監(jiān)聽信道,看當時是否有其它從機發(fā)送數(shù)據(jù)出來。如果信道忙則一直等待到信道空閑,如果信道空閑則延時一個隨機時間,如果信道依然空閑,則回復發(fā)送一幀數(shù)據(jù)。在地址分配期間從機一直檢測其它從機的數(shù)據(jù),如果發(fā)現(xiàn)有其它從機的地址和本機相同,就檢測到地址沖突,并對沖突的從機重新進行地址分配。隨機時間通過調(diào)用隨機函數(shù)實現(xiàn),根據(jù)RS-485波特率產(chǎn)生一個毫秒為單位的隨機時間。就這樣,通過實時檢測信道數(shù)據(jù)和選擇有效的數(shù)據(jù)發(fā)送時間窗口,從而避開數(shù)據(jù)沖突和地址沖突。這種方法單獨一次不能完全避免沖突,故需要發(fā)現(xiàn)沖突再多次重復檢測。
2.3 算法使用假設(shè)條件
1)總線上每一幀數(shù)據(jù)的時間間隔最小為TO。
2)主機點名從機,如果從機沒有回復數(shù)據(jù),則點名間隔為Tl;如果從機回復數(shù)據(jù),則下一次點名時間為收完從機數(shù)據(jù)延時T2。
3)T分鐘為地址分配時間,根據(jù)網(wǎng)絡(luò)的大小進行選擇,要保證有足夠時間將地址分配完。
4)A為偽隨機函數(shù)產(chǎn)生的時間,范圍0-(T1-TO)。
4)從機有效地址范圍為1-B。B根據(jù)網(wǎng)絡(luò)中連接從機的最大數(shù)量確定。
5)從機具備記憶功能,可以記憶本機地址。
2.4 算法執(zhí)行過程
1)上電,所有從機的本機地址初始化為0x00,表示沒有分配地址。
2)從記憶模塊讀取本機地址。如果為有效信(校驗正確,并且在有效地址范圍),則將記憶的地址作為本機地址。
3)之后的T分鐘內(nèi),進行地址沖突檢測和地址自動分配操作。
4)如果已經(jīng)獲得有效的本機地址,跳到步驟7)進行地址沖突檢測;否則進行地址自動分配。
5)從機本機地址賦值為0x00,表示沒有分配地址。
6)主機依次點名從機,地址從1到B,將有效地址點名一圈。從機監(jiān)聽總線上主機的一個通訊點名循環(huán)數(shù)據(jù),記錄所有在線從機地址。并將沒有在線的地址的最小一個作為本機地址。
7)從機監(jiān)聽總線,發(fā)現(xiàn)主機點名地址與本機地址相符,則延時(TO+A)時間,如果總線空閑則回復主機。
8)如果從機在延時(TO+A)時間里,在總線上收到其它從機的數(shù)據(jù),即發(fā)現(xiàn)數(shù)據(jù)沖突,則取消本次回復。
9)在有效的時間T內(nèi),重復5-9操作,從機在第T分鐘時刻記憶有效本機地址。否則,重復7-9操作。
10)超過T時間,從機無法獲得有效地址,則顯示出錯信息。
2.5 算法流程圖
主機流程圖較簡單,這里不再列出。從機執(zhí)行算法的流程圖如下:
2.6 算法的驗證
對10個從機節(jié)點的小網(wǎng)絡(luò)進行驗證。使用9600的波特率,編程中使用的參數(shù):T0為10毫秒,Tl為500毫秒,T2為10毫秒,T為3分鐘,B為15。每次地址都可以自動分配成功。網(wǎng)絡(luò)規(guī)模增加時,T1、T要相應(yīng)增大,具體要結(jié)合實際應(yīng)用調(diào)整。
3、結(jié)束語
本文為了解決RS-485通訊在實際工程中手工設(shè)置從機通訊地址導致的不方便問題,通過計算機互聯(lián)網(wǎng)通訊的啟發(fā),對RS-485通訊的地址自動分配算法進行了詳細的分析,并給出了具體的實現(xiàn)方法。實踐證明,該算法對中小規(guī)模的RS-485通訊網(wǎng)絡(luò)是可行的。結(jié)合具體的應(yīng)用,需要對算法假定的具體條件進行調(diào)整,特別是參數(shù)T1、T、B的匹配性將影響最終的結(jié)果。