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