吳洪坤,付小娟,吳振遠(yuǎn),郭艷影
(廣州民航職業(yè)技術(shù)學(xué)院飛機(jī)電子與部件系,廣東廣州510403)
?
基于RS485總線的BACnet MS/TP狀態(tài)機(jī)實現(xiàn)
吳洪坤,付小娟,吳振遠(yuǎn),郭艷影
(廣州民航職業(yè)技術(shù)學(xué)院飛機(jī)電子與部件系,廣東廣州510403)
摘要:對主從/令牌傳遞協(xié)議(BACnet MS/TP)的工作流程和工作狀態(tài)轉(zhuǎn)換過程由淺入深地進(jìn)行了描述。該協(xié)議屬于BACnet數(shù)據(jù)鏈路層協(xié)議,運(yùn)行于RS485總線之上。通過對協(xié)議工作狀態(tài)轉(zhuǎn)換的深入分析,給出了MS/TP狀態(tài)機(jī)的實現(xiàn)方法。經(jīng)驗證表明,基于該狀態(tài)機(jī)采用C語言設(shè)計的軟件在總線設(shè)備數(shù)量為60個,RS485波特率為38.4 kbps的條件下,工作穩(wěn)定。
關(guān)鍵詞:BACnet;RS485;狀態(tài)機(jī);主從/令牌傳遞
BACnet(A Data Communication Protocol for Building Automation and Control Network)是一種樓宇自動化控制網(wǎng)絡(luò)的通信協(xié)議,最初是由美國冷暖空調(diào)工程師協(xié)會標(biāo)準(zhǔn)項目委員會為樓宇控制中的暖通控制項目制定的一個行業(yè)標(biāo)準(zhǔn),頒布于1995年6月份。其目的就是使不同廠家生產(chǎn)的暖通空調(diào)設(shè)備之間能夠?qū)崿F(xiàn)設(shè)備的互操作,這樣在一個項目中就可以采購不同廠商的設(shè)備來組成一個完整的系統(tǒng)。BACnet標(biāo)準(zhǔn)在數(shù)據(jù)鏈路層上支持以太網(wǎng)、ARCnet、MS/TP、PTP、LonTalk和BACnet/IP。
本文將對基于RS485總線的數(shù)據(jù)鏈路層協(xié)議MS/TP(Master Slave/Token Passing),即主從/令牌傳遞協(xié)議的工作流程進(jìn)行描述,并對其狀態(tài)機(jī)進(jìn)行設(shè)計。
BACnet MS/TP建立在主從通訊的基礎(chǔ)上,任意時刻,在總線上只有一個節(jié)點(diǎn)擁有令牌,擁有令牌的節(jié)點(diǎn)才可以發(fā)起通信,這就是主設(shè)備,其他節(jié)點(diǎn)就為從設(shè)備。主節(jié)點(diǎn)的任務(wù)完成后,要主動將令牌傳遞給下一個站點(diǎn)。這種通信協(xié)議有一個非常好的機(jī)制,即插即用性。在令牌傳遞過程中,擁有令牌的站點(diǎn)會對本網(wǎng)段的空余站點(diǎn)進(jìn)行輪詢,如果得到正確應(yīng)答,說明有新的控制器申請加入令牌環(huán),就把令牌傳遞給新的控制器,使其自動加入到令牌環(huán)中,也就是即插即用。
為了便于理解BACnet MS/TP的工作流程及工作狀態(tài)轉(zhuǎn)換,本文將采用從簡單到復(fù)雜,逐級深入的方式進(jìn)行描述。
(1)設(shè)備上無令牌
單設(shè)備上電工作流程如圖1所示。
當(dāng)在總線上只有一個設(shè)備時,設(shè)備從上電開始將會作什么是最簡單的流程,設(shè)備上電后會先進(jìn)行各種初始化動作。設(shè)備完成初始化后進(jìn)入空閑狀態(tài),即等待接收數(shù)據(jù)狀態(tài),由于此時總線上沒有其他設(shè)備,該設(shè)備不可能接收到任何數(shù)據(jù),超時(時間可設(shè)定)后,該設(shè)備認(rèn)為總線上令牌已經(jīng)丟失,此時它會自動產(chǎn)生令牌。
(2)設(shè)備上有令牌
設(shè)備擁有令牌后,會執(zhí)行輪詢?nèi)蝿?wù),從本設(shè)備MAC地址的下一個編號進(jìn)行輪詢,一直輪詢到本設(shè)備MAC地址的前一個地址,比如本設(shè)備MAC地址為10,那么它會從11輪詢到127(地址最大值),然后從0輪詢到9,但它不可能接收到應(yīng)答信息,于是它認(rèn)為在總線上只有一個主節(jié)點(diǎn)。因為它擁有令牌,所以如果此時它有數(shù)據(jù)包要發(fā)送,可以立即進(jìn)行發(fā)送。如果沒有數(shù)據(jù),那么它會繼續(xù)履行主節(jié)點(diǎn)的職責(zé),即輪詢其他設(shè)備,單設(shè)備上電后可更直觀地處理。
圖1 單設(shè)備上電工作流程
1.2雙設(shè)備工作流程
把那些小丫頭拖走去禍害!你們藏著是要留給誰呀?留著有人疼有人愛嗎?”她現(xiàn)在像個潑淋的村婦,一句話出口,好幾頭挨罵,但又不能確定她究竟罵誰,“藏著吧,藏到轉(zhuǎn)世投胎,投個好胎,也做女學(xué)生,讓命賤的來給你們狗日的墊背!”
下面來描述總線上有兩個設(shè)備時的工作流程。該流程相對復(fù)雜,但對于描述MS/TP工作狀態(tài)的轉(zhuǎn)換也會更完整。本文以MAC地址分別為1和10的兩個設(shè)備為例對協(xié)議工作流程進(jìn)行詳細(xì)描述,如圖2所示。
圖2 雙設(shè)備上電工作流程
假定設(shè)備1先上電,啟動過程同前述的單設(shè)備工作流程,此處不再贅述。雙設(shè)備工作過程如下。
(1)設(shè)備1在輪詢期間,設(shè)備10開始上電初始化,并進(jìn)入空閑狀態(tài),因為此時總線上有數(shù)據(jù)在傳輸,所以設(shè)備10不用再產(chǎn)生新的令牌,它只需要等待設(shè)備1輪詢到自己。當(dāng)設(shè)備1輪詢到設(shè)備10時,設(shè)備10立即進(jìn)行應(yīng)答。設(shè)備1收到應(yīng)答后,會存儲設(shè)備10的地址,并將令牌傳遞給設(shè)備10。
(2)設(shè)備10得到令牌后,先使用令牌發(fā)起通信任務(wù),比如向總線上發(fā)送一個上線通告。對于更復(fù)雜的情況,比如設(shè)備10向設(shè)備1發(fā)送一個讀取屬性值的請求,然后等待設(shè)備1回復(fù)請求的數(shù)據(jù)。當(dāng)收到設(shè)備1回應(yīng)的屬性數(shù)據(jù)后,設(shè)備10發(fā)起的這一次的通信任務(wù)就完成了。
(3)設(shè)備10發(fā)起的全部通信任務(wù)完成后,開始履行主節(jié)點(diǎn)的職責(zé),即輪詢其他設(shè)備。此時總線上只有兩個設(shè)備,當(dāng)輪詢到設(shè)備1時,才能收到應(yīng)答,然后將令牌傳給設(shè)備1,如此循環(huán)往復(fù)。
如果一切正常,令牌會一圈又一圈輪流傳遞。如果得到令牌的設(shè)備1發(fā)生故障了,這時總線上一片寂靜,設(shè)備10會計算著寂靜時間,一旦寂靜時間超過了BACnet的規(guī)定時間,便會產(chǎn)生令牌,又開始輪詢過程。
2.1狀態(tài)定義及狀態(tài)間轉(zhuǎn)移流程
從雙設(shè)備的工作流程可以看出,MS/TP協(xié)議在工作中有以下9種工作狀態(tài):1)初始化狀態(tài);2)空閑狀態(tài);3)丟失令牌狀態(tài);4)輪詢狀態(tài);5)令牌就緒狀態(tài);6)使用令牌狀態(tài);7)傳遞令牌狀態(tài);8)等待回復(fù)數(shù)據(jù)狀態(tài);9)回復(fù)數(shù)據(jù)狀態(tài)。
為了更直觀的描述各種狀態(tài)之間相互轉(zhuǎn)換的關(guān)系,下面開始狀態(tài)機(jī)的設(shè)計,工作狀態(tài)確定以后,最重要的就是確定各狀態(tài)之間轉(zhuǎn)換的條件。
(1)初始化狀態(tài)。初始化工作完成后,只能進(jìn)入空閑狀態(tài)。
(2)空閑狀態(tài)。設(shè)備在空閑狀態(tài)時,主要是監(jiān)聽總線上有無數(shù)據(jù),并根據(jù)接收數(shù)據(jù)的情況進(jìn)行相應(yīng)的處理或者進(jìn)行狀態(tài)轉(zhuǎn)換。
狀態(tài)轉(zhuǎn)換主要包括以下7方面的內(nèi)容:1)收到不完整幀直接丟棄,保持在空閑狀態(tài);2)收到不是發(fā)給自己幀,丟棄,保持空閑狀態(tài);3)收到主節(jié)點(diǎn)的輪詢幀,應(yīng)答,保持在空閑狀態(tài);4)收到不需要應(yīng)答的數(shù)據(jù)幀,保存數(shù)據(jù),保持在空閑狀態(tài);5)收到需要應(yīng)答的數(shù)據(jù)幀,轉(zhuǎn)移到回復(fù)數(shù)據(jù)狀態(tài);6)超過500 ms,總線上無數(shù)據(jù),進(jìn)入丟失令牌狀態(tài);7)收到令牌,進(jìn)入使用令牌狀態(tài)。
(3)丟失令牌狀態(tài)。在該狀態(tài)下,設(shè)備產(chǎn)生令牌,此時,本設(shè)備就變?yōu)橹鞴?jié)點(diǎn),進(jìn)入主節(jié)點(diǎn)輪詢狀態(tài)。
(4)輪詢狀態(tài)。在該狀態(tài)下,有5種狀態(tài)轉(zhuǎn)換可能:1)收到意外幀,進(jìn)入空閑狀態(tài);2)收到輪詢應(yīng)答幀,進(jìn)入傳遞令牌狀態(tài);3)沒有收到輪詢回應(yīng),輪詢一遍,認(rèn)為總線上只有自己一個主節(jié)點(diǎn),設(shè)單獨(dú)主節(jié)點(diǎn)標(biāo)志位,進(jìn)入使用令牌狀態(tài);4)沒有收到輪詢回應(yīng),已知自己為單獨(dú)主節(jié)點(diǎn),進(jìn)入使用令牌狀態(tài);5)沒有收到輪詢回應(yīng),已知有其他主節(jié)點(diǎn)存在,進(jìn)入傳遞令牌狀態(tài)。
(5)令牌就緒狀態(tài)。在該狀態(tài)下,有4種狀態(tài)轉(zhuǎn)換可能:1)如果本節(jié)點(diǎn)發(fā)送的最大幀數(shù)還沒到,進(jìn)入使用令牌狀態(tài),繼續(xù)發(fā)送數(shù)據(jù)幀;2)如果自己不是單獨(dú)主節(jié)點(diǎn),并且自己也不知道下一個節(jié)點(diǎn)的地址,發(fā)送輪詢命令,進(jìn)入輪詢狀態(tài);3)如果下一個輪詢節(jié)點(diǎn)就是自己保存的下一個主節(jié)點(diǎn),進(jìn)入傳遞令牌狀態(tài);4)除了上述3種情況外,還發(fā)送輪詢命令,進(jìn)入輪詢狀態(tài)。
(6)使用令牌狀態(tài)。主節(jié)點(diǎn)使用令牌來發(fā)送數(shù)據(jù)幀,主要分成下面3種情況:1)沒有待發(fā)送的數(shù)據(jù)幀,進(jìn)入令牌就緒狀態(tài);2)發(fā)送不需要回復(fù)的數(shù)據(jù)幀,進(jìn)入令牌就緒狀態(tài);3)發(fā)送需要回復(fù)的數(shù)據(jù)幀,進(jìn)入等待回復(fù)數(shù)據(jù)狀態(tài)。
(7)傳遞令牌狀態(tài)。在該狀態(tài)下,主要完成令牌傳出確認(rèn)工作:1)如果看到有其他節(jié)點(diǎn)在使用令牌傳遞數(shù)據(jù),確認(rèn)令牌已經(jīng)傳遞出去,進(jìn)入空閑狀態(tài);2)如果總線上在限定時間內(nèi)沒有看到有數(shù)據(jù)幀發(fā)送,認(rèn)為令牌沒有傳遞出去,則重新傳遞令牌,重發(fā)次數(shù)有限定;3)如果重發(fā)次數(shù)超過限定值,依然沒有傳遞出去,則輪詢新的主節(jié)點(diǎn),進(jìn)入輪詢狀態(tài)。
(8)等待回復(fù)數(shù)據(jù)狀態(tài)。在該狀態(tài)下,本節(jié)點(diǎn)主要是等待應(yīng)答,如果等待應(yīng)答超時、收到應(yīng)答錯誤幀、收到正確應(yīng)答,則進(jìn)入令牌就緒狀態(tài);如果收到意外幀,認(rèn)為有其他節(jié)點(diǎn)在使用令牌,則進(jìn)入空閑狀態(tài)。
(9)回復(fù)數(shù)據(jù)狀態(tài)。本狀態(tài)處理相對簡單,只需回復(fù)收到的數(shù)據(jù)請求,回復(fù)完畢,進(jìn)入空閑狀態(tài)。
通過對上述各種狀態(tài)下工作流程以及狀態(tài)間轉(zhuǎn)換的描述,可以設(shè)計出MS/TP的狀態(tài)轉(zhuǎn)換圖,如圖3所示。
圖3 MS/TP狀態(tài)轉(zhuǎn)換
2.2軟件實現(xiàn)方法
上述狀態(tài)機(jī)采用C語言來實現(xiàn),首先定義主節(jié)點(diǎn)的9種工作狀態(tài),如表1所示。然后定義主節(jié)點(diǎn)工作狀態(tài)變量char Master_State,函數(shù)主體采用switch結(jié)構(gòu)實現(xiàn),便于各種狀態(tài)任務(wù)的處理及狀態(tài)間轉(zhuǎn)移。
表1 工作狀態(tài)常量定義
通過C語言實現(xiàn)上述狀態(tài)機(jī),并添加部分Bacnet標(biāo)準(zhǔn)協(xié)議,如I-AM,WHO-IS及部分讀寫屬性等數(shù)據(jù)幀,程序編譯完成后,下載到控制器MCU內(nèi)部自帶FLASH中,MCU為ATMEL公司的AT91SAM7S256芯片,并將60個控制器連接在總線上,波特率設(shè)為38.4 kbps,通過監(jiān)控軟件在總線上對數(shù)據(jù)幀進(jìn)行監(jiān)測,發(fā)現(xiàn)通信過程流暢,穩(wěn)定,說明本文設(shè)計的狀態(tài)機(jī)能夠穩(wěn)定工作,可靠運(yùn)行,具有實用價值。
參考文獻(xiàn):
[1]傅海軍.樓宇自動化[M].北京∶機(jī)械工業(yè)出版社,2011.
[2]張少軍. BACnet標(biāo)準(zhǔn)與樓宇自控系統(tǒng)技術(shù)[M].北京∶機(jī)械工業(yè)出版社,2012.
[3]譚浩強(qiáng). C語言程序設(shè)計[M].北京∶清華大學(xué)出版社,2008.
[4]石東海.單片機(jī)數(shù)據(jù)通信技術(shù)入門到精通[M].西安∶西安電子科技大學(xué)出版社,2002.
[5]楊明福.計算機(jī)網(wǎng)絡(luò)原理[M].北京∶經(jīng)濟(jì)科學(xué)出版社,2007.
【責(zé)任編輯:任小平renxp90@163.com】
Design of BACnet MS/TP state machine based on RS485 bus
WU Hong-kun,F(xiàn)U Xiao-juan,WU Zhen-yuan,GUO Yan-ying
(Department of Aircraft Electronics and Components,Guangzhou Civil Aviation College,Guangzhou 510403,China)
Abstract∶The work process and work state transition of the master-slave / token passing protocol(BACnet MS/TP)were described developmentally in this paper. This protocol belongs to the BACnet data link layer protocol,and runs on the RS485 bus. The realization method of MS/TP state machine was worked out through analyzing the work state transition of the protocol. After verification,a conclusion was obtained∶the state machine designed using C language had a stable work performance under the condition of 60 bus devices and 38.4 kbps.
Key words∶BACnet;RS485;State machine;MS/TP
中圖分類號:TU855
文獻(xiàn)標(biāo)志碼:A
文章編號:1008-0171(2016)03-0065-05
收稿日期:2015-05-21
基金項目:廣東省高等職業(yè)教育教學(xué)改革資助項目(20130301051)
作者簡介:吳洪坤(1980-),男,河南泌陽人,廣州民航職業(yè)技術(shù)學(xué)院講師。