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