??? 摘??要: 設(shè)計(jì)了一種基于LonWorks總線和嵌入式系統(tǒng)的監(jiān)控通信網(wǎng)絡(luò)。系統(tǒng)采用MSP430單片機(jī)作為任務(wù)調(diào)度和嵌入式系統(tǒng)移植的主處理器,,提高了系統(tǒng)運(yùn)行的實(shí)時(shí)性和穩(wěn)定性,。DDE服務(wù)器實(shí)現(xiàn)了數(shù)據(jù)訪問與交換等網(wǎng)絡(luò)通信功能??偩€技術(shù)與Web網(wǎng)絡(luò)相結(jié)合,,使用戶能夠通過信息網(wǎng)絡(luò)監(jiān)控界面方便地了解現(xiàn)場情況,更便于實(shí)現(xiàn)遠(yuǎn)程監(jiān)控,、診斷和維護(hù)功能,。?
??? 關(guān)鍵詞: LonWorks現(xiàn)場總線; MSP430單片機(jī),;嵌入式系統(tǒng),; 監(jiān)控系統(tǒng)?
?
??? 由于LonWorks現(xiàn)場總線良好的開放性和互操作性,在開發(fā)智能通信接口和智能傳感器方面,,LonWorks芯片具有獨(dú)特的優(yōu)勢,,它已被廣泛應(yīng)用在樓宇自動(dòng)化、家庭自動(dòng)化,、保安系統(tǒng),、辦公設(shè)備、交通運(yùn)輸,、工業(yè)過程控制等行業(yè),。本文在LonWorks總線基礎(chǔ)上,設(shè)計(jì)了基于主機(jī)的節(jié)點(diǎn),,并且研究了嵌入式系統(tǒng)在主機(jī)上的移植,,以及通信服務(wù)器的設(shè)置調(diào)試方法,為實(shí)際監(jiān)控節(jié)點(diǎn)的應(yīng)用提供技術(shù)指導(dǎo),。?
1 監(jiān)控節(jié)點(diǎn)硬件平臺(tái)設(shè)計(jì)?
??? 基于LonWorks的監(jiān)控系統(tǒng)設(shè)計(jì)中,,由于Neuron芯片的應(yīng)用處理器的數(shù)據(jù)處理能力有限,通用I/O相對較少,,在一定程度上限制了LonWorks技術(shù)的廣泛應(yīng)用,。采用MSP430單片機(jī)作為主處理器,移植μC/OS_Ⅱ嵌入式操作系統(tǒng)到主處理器上,,可以在擴(kuò)展的CPU上運(yùn)行多個(gè)任務(wù),,各個(gè)任務(wù)并行操作,充分利用了CPU的資源,。采用μC/OS_Ⅱ操作系統(tǒng)作為整個(gè)系統(tǒng)的控制中心,,將系統(tǒng)中的各個(gè)任務(wù)模塊化,提供了靈活的結(jié)構(gòu),,便于進(jìn)一步開發(fā)研究,。MSP430單片機(jī)與LON總線模塊接口采用串行同步通信模式(SPI)接口,需要置位單片機(jī)寄存器SYNC=1。?
??? LonWorks網(wǎng)絡(luò)的每個(gè)可編程節(jié)點(diǎn)可以向其他網(wǎng)絡(luò)節(jié)點(diǎn)發(fā)送信息并對它所接收的信息或事件作出響應(yīng),。系統(tǒng)的功能包括:遠(yuǎn)程主機(jī)(客戶)可以通過瀏覽器在線監(jiān)視底層網(wǎng)絡(luò)設(shè)備的網(wǎng)絡(luò)變量,,可以通過用戶界面向底層設(shè)備發(fā)布命令,實(shí)現(xiàn)遠(yuǎn)程控制,;底層設(shè)備的重要物理量可以隨時(shí)上傳至遠(yuǎn)程主機(jī)進(jìn)行故障報(bào)警等[1],。PCLTA-20網(wǎng)絡(luò)適配卡使得網(wǎng)絡(luò)節(jié)點(diǎn)有聯(lián)網(wǎng)和遠(yuǎn)程監(jiān)控功能。監(jiān)控節(jié)點(diǎn)連接如圖1所示,。?
?
?
??? μC/OS_Ⅱ操作系統(tǒng)作為整個(gè)系統(tǒng)的控制中心,,完成系統(tǒng)中各部分功能模塊硬件電路的初始化及任務(wù)的管理和調(diào)度。首先,,操作系統(tǒng)初始化微處理器,,保證其正常工作;然后,,周期性調(diào)用微處理器與LON網(wǎng)絡(luò)接口函數(shù)任務(wù),,實(shí)時(shí)等待和傳輸數(shù)據(jù);接著設(shè)置LNS DDE服務(wù)器,、Windows操作系統(tǒng)中Web服務(wù)器屬性,,便于連接網(wǎng)絡(luò)數(shù)據(jù)庫服務(wù)器。由于數(shù)據(jù)采集的需要,,設(shè)置相關(guān)數(shù)據(jù)采集和訪問頁面,,實(shí)現(xiàn)Internet遠(yuǎn)程訪問,,確保LON網(wǎng)絡(luò)和微處理器之間通信;最后,,通過LonMaker對整個(gè)過程進(jìn)行監(jiān)控,。監(jiān)控系統(tǒng)總體結(jié)構(gòu)如圖2所示。?
?
?
2 嵌入式操作系統(tǒng)模塊?
??? 嵌入式系統(tǒng)的目標(biāo)硬件平臺(tái)主要分為三部分:處理器核心,、外圍電路,、外部設(shè)備μC/OS_Ⅱ系統(tǒng)。每個(gè)任務(wù)均有一個(gè)優(yōu)先級,,μC/OS_Ⅱ根據(jù)各個(gè)任務(wù)的優(yōu)先級,,動(dòng)態(tài)地切換各個(gè)任務(wù),保證對實(shí)時(shí)性的要求[2],,適合應(yīng)用在實(shí)時(shí)性要求較強(qiáng)的場合,。?
??? 在MSP430單片機(jī)上移植開發(fā)工具使用IAR編譯器,而移植的主要工作量又集中在堆棧的操作,,即當(dāng)一個(gè)任務(wù)退出時(shí)保存當(dāng)前PC指針和當(dāng)前堆棧內(nèi)容,,并且把下一個(gè)任務(wù)的PC指針和堆棧內(nèi)容轉(zhuǎn)化為當(dāng)前CPU的運(yùn)行狀態(tài)。?
??? μC/OS_Ⅱ的全部源代碼,,共16個(gè)文件,。移植工作涉及的源文件分為三部分:與處理器無關(guān)的代碼部分、設(shè)置代碼部分,、包括OS_CFG.H和INCLUDES.H兩個(gè)頭文件,。用戶可以改寫INCLUDES.H文件,增加自己的頭文件,,但必須加在文件末尾,。?
??? 最主要的部分是與處理器有關(guān)部分的代碼,包括一個(gè)頭文件OS_CPU.H,、一個(gè)C代碼文件OS_CPU_C.C及一個(gè)匯編文件OS_CPU_A.ASM[3],。將其移植到MSP430F149處理器上,需要修改這三個(gè)與體系結(jié)構(gòu)相關(guān)的文件,,代碼量大約是500行,。下面分別介紹這三個(gè)文件的移植。?
2.1 OS_CPU.H文件?
??? OS_CPU.? H文件中的OS_CPU_GLOBALE和OS_CPU_EXT允許用戶聲明針對本移植的全局變量,。由于在MSP430實(shí)模式中堆棧都是按字進(jìn)行操作的[4],,所以IAR編譯器中堆棧數(shù)據(jù)類型OS_STK聲明為16位,所有的堆棧都必須用OS_STK聲明,。需要注意的是:MSP430處理器的堆棧由高地址向低地址方向增長,,所以常量OS_STK_GROWTH必須設(shè)置為1。?
2.2? OS_CPU_A.ASM文件?
??? 完成μC/OS_Ⅱ的移植需要把OS_CPU_A.ASM修改為OS_CPU_A.S43文件,此文件包括4個(gè)函數(shù):OSStartHighRdy( ),、OSCtxSw( ),、OSIntCtxSw( )、OSTickISR( ),。?
??? 函數(shù)OSStartHighRdy( )由函數(shù)OSStart( )調(diào)用,,功能是讓進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)運(yùn)行。首先必須調(diào)用函數(shù)OSTaskSwHook( ),,把OS_CFG.H中的OS_CPU_HOOKS_EN設(shè)置為1,這樣OSTaskSwHook( )的代碼才能生效,。?
??? 任務(wù)級的切換是通過執(zhí)行中斷指令或依據(jù)處理器的不同執(zhí)行陷阱(TRAP)指令來實(shí)現(xiàn)的,,中斷服務(wù)子程序、陷阱或異常處理的向量地址必須指向OSCtxSw( ),。?
??? 函數(shù)OSIntCtxSw( )與OSCtxSw( )函數(shù)類似,,不同的是OSIntCtxSw( )函數(shù)所進(jìn)行的是中斷級的任務(wù)切換。?
??? 函數(shù)OSTickISR( )是系統(tǒng)時(shí)鐘節(jié)拍中斷服務(wù)函數(shù),,是周期性的中斷,,為內(nèi)核提供時(shí)鐘節(jié)拍,用來設(shè)置內(nèi)核向應(yīng)用系統(tǒng)提供的最小時(shí)間間隔,。?
2.3 OS_CPU_C.C文件?
??? OS_CPU_C.C文件中包含10個(gè)C語言函數(shù),,其中只有函數(shù)OSTaskStkInit( )在操作系統(tǒng)中是必要的。OSTask?StkInit( )由任務(wù)創(chuàng)建函數(shù)調(diào)用,,用來初始化任務(wù)的堆棧結(jié)構(gòu),,使堆棧看起來就像剛剛發(fā)生過中斷并將所有的寄存器保存到堆棧中一樣,。這樣就可以用中斷返回指令使就緒的任務(wù)運(yùn)行起來,。它與調(diào)用者間有3個(gè)參數(shù)需要傳遞:任務(wù)代碼起始地址(task)、參數(shù)指針(pdata),、任務(wù)堆棧頂?shù)刂?ptos),。?
??? 移植完成之后可以在IAR的C-SPY環(huán)境下進(jìn)行測試。測試時(shí),,只需直接打開移植代碼測試項(xiàng)目工程文件msp149final.eww進(jìn)行測試,,其輸出文件為149last.d43。?
3? 網(wǎng)絡(luò)的通信服務(wù)器LNS DDE?
??? 動(dòng)態(tài)數(shù)據(jù)交換DDE(Dynamic Data Exchange)是Windows平臺(tái)上的一個(gè)完整的通信協(xié)議,。DDE協(xié)議可以使用兩類DDE應(yīng)用程序:第一類是基于消息的DDE,,第二類是動(dòng)態(tài)數(shù)據(jù)交換管理庫應(yīng)用程序。?
??? 當(dāng)使用LonMaker工具進(jìn)行網(wǎng)絡(luò)設(shè)備配置時(shí),,它把配置信息備份于LNS DDE Server中,,等安裝完成后,LNS DDE Server中包含了整個(gè)網(wǎng)絡(luò)的配置圖、所有設(shè)備的名稱,、設(shè)備的網(wǎng)絡(luò)變量,、配置屬性以及LonMark對象。LNS DDE Server使用存儲(chǔ)在LNS服務(wù)器中的名字,、地址和時(shí)序信息來完成監(jiān)控任務(wù),。通過LNS DDE Server,任何作為DDE客戶的應(yīng)用程序都能監(jiān)視和控制一個(gè)或更多的LonWorks網(wǎng)絡(luò),。在運(yùn)行DDE服務(wù)程序時(shí),,要在服務(wù)程序中制定計(jì)算機(jī)名。例如:?
??? =\MYCOMPUTERLNSDDE′MyNet.Subsystem 1.DevNV′!?′MyDev.NV2′,。?
??? 讀寫網(wǎng)絡(luò)變量時(shí),,首先確定主題名是標(biāo)準(zhǔn)格式或者用戶定制格式,然后指定網(wǎng)絡(luò)變量項(xiàng)目名(Network Variable Item),,項(xiàng)目名(Item)的形式取決于它在主題名中的組成,,按慣例為設(shè)備名、網(wǎng)絡(luò)變量(NV)名,、配置屬性名和消息標(biāo)簽名[5],。網(wǎng)絡(luò)變量更新程序如下:?
??? Private Sub btnReadSwitch4_Click( )?
??? Dim channel As Long?? ????????? ??//定義通道數(shù)據(jù)類型?
??? Channel=DDEInitiate(′LNSDDE′, ′LNS DDE Test.HVAC.LMNV′)?????????? ? //發(fā)起DDE會(huì)話?
??? Sheet1.Range(′E21′)=DDERequest(channel,_′DI- 1.SW-4.?
??????????? Digital.State′) ?????????? ??//請求讀取數(shù)字變量?
??????????? DDETerminate (channel)? ???????//終止DDE會(huì)話?
??? End sub?
??? 在LonWorks網(wǎng)絡(luò)中,采用事件驅(qū)動(dòng)更新或者輪詢方式獲得設(shè)備信息交換和查詢,。事件驅(qū)動(dòng)更新是沒個(gè)特定時(shí)間就發(fā)送信息或者直到某個(gè)規(guī)定變量值發(fā)生變化才會(huì)產(chǎn)生消息發(fā)送,,而輪詢則是終端設(shè)備輪詢變量值某些情況下接收信息受終端設(shè)備控制[6]。在遠(yuǎn)程監(jiān)控網(wǎng)絡(luò)中,,輪詢是最恰當(dāng)?shù)谋O(jiān)測方案,。?
??? 在VB開發(fā)環(huán)境中,必須設(shè)置好的屬性是:LinkTopic,、LinkItem和LinkMode[7],。其中,LinkTopic屬性設(shè)置了被請求服務(wù)器的名字和會(huì)話,;LinkItem屬性指定了會(huì)話項(xiàng),,也就是網(wǎng)絡(luò)變量的名稱及其所在節(jié)點(diǎn);LinkMode指定會(huì)話的模式,,可選值為:None(無),、Automatic(自動(dòng))和Notify(確認(rèn))。?
??? 除了控件的這三種屬性外,還有許多函數(shù)和方法可用來操作DDE,如Shell函數(shù),LinkPoke,、LinkRequest,、Link?Execute和LinkSend方法。?
??? 下面具體說明用VB編寫監(jiān)控程序的方法:?
??? Labell. LinkTopic ='LNSDDE/ NET. Subsystem1. DevNV'?
??? Labell. LinkItem ='Device. Value'?
??? Labell. LinkMode = 1 //得到NET 網(wǎng)上Subsystem1 子網(wǎng)中名為Device 節(jié)點(diǎn)的網(wǎng)絡(luò)變量Value的值?
??? Label2 = InputBox $('Please input the SetValue')?
??? Label2. LinkPoke???????? //改變網(wǎng)絡(luò)變量nvoSetValue的值?
??? 本文在LON總線基礎(chǔ)上,,通過擴(kuò)展Neuron芯片的處理能力,,在主機(jī)上移植μC/OS_Ⅱ嵌入式操作系統(tǒng),可以在擴(kuò)展的CPU上運(yùn)行多個(gè)任務(wù),各個(gè)任務(wù)并行操作,,提高了MSP430單片機(jī)的性能,。DDE服務(wù)器與VB監(jiān)控界面的結(jié)合,使得可視化動(dòng)態(tài)的網(wǎng)絡(luò)監(jiān)控系統(tǒng)得以實(shí)時(shí)運(yùn)轉(zhuǎn)?,F(xiàn)場總線與Web相結(jié)合,,提高了系統(tǒng)監(jiān)控網(wǎng)絡(luò)的實(shí)時(shí)性,這也是科技研究的熱門課題,。?
參考文獻(xiàn)?
[1] 馬 莉.智能控制與Lon網(wǎng)絡(luò)開發(fā)技術(shù)[M]. 北京:航空航天大學(xué)出版社, 2003:50-211.?
[2] 李玉天. LonWorks網(wǎng)絡(luò)的遠(yuǎn)程控制技術(shù)的研究與應(yīng)用[D]. 電子科技大學(xué)碩士學(xué)位論文,,2006.?
[3] 鄧燕妮,潘寧. μC/OS_Ⅱ在LonWorks網(wǎng)絡(luò)節(jié)點(diǎn)的移植研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(10):243-245.?
[4] 秦龍. MSP430單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型實(shí)例[M].北京:中國電力出版社, 2005:43-69.?
[5] HUR S H, KIM D. Building automation system via?Lonworks and Linux based personal computer[J].Automation in Construction,2006,15(4):522-530.?
[6] Echelon Corporation. LNS DDE server user’s guide.Echelon,2001:15-70.?
[7] LABROSSE J. μC/OS_Ⅱ源碼公開的實(shí)時(shí)嵌人式操作系統(tǒng)[M].邵貝貝譯.北京:中國電力出版社,2003.