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