楊 鵬 卜樂平 王黎明
海軍工程大學(xué)電氣工程學(xué)院,湖北武漢 430033
隨著全電力船舶的發(fā)展,船舶能量管理系統(tǒng)的應(yīng)用逐漸成為未來(lái)發(fā)展的必然趨勢(shì)。電力系統(tǒng)運(yùn)行狀態(tài)信息的獲取是船舶能量管理系統(tǒng)的基礎(chǔ)性問題,是制定能量調(diào)度方案的重要依據(jù)。船舶能量管理系統(tǒng)子站(以下簡(jiǎn)稱“子站”)作為底層數(shù)據(jù)采集裝置,是上述信息的主要來(lái)源,為主站提供通用數(shù)據(jù)幀(電力系統(tǒng)正常運(yùn)行時(shí)的狀態(tài)信息)和故障錄波數(shù)據(jù)幀(故障信息),同時(shí)還作為主站的“執(zhí)行者”根據(jù)主站發(fā)送的命令幀輸出相應(yīng)的數(shù)字量和模擬量控制信號(hào)。此外,子站還需根據(jù)主站發(fā)送的動(dòng)態(tài)配置幀來(lái)對(duì)自身參數(shù)進(jìn)行動(dòng)態(tài)配置。主站根據(jù)子站上傳的信息對(duì)當(dāng)前電力系統(tǒng)運(yùn)行狀態(tài)進(jìn)行監(jiān)控,并對(duì)電力系統(tǒng)故障進(jìn)行處理。
現(xiàn)有的船舶電力采集系統(tǒng)一般是采用上層以太網(wǎng),下層CAN網(wǎng)的組網(wǎng)方式。但CAN網(wǎng)在遠(yuǎn)距離數(shù)據(jù)傳輸時(shí)速率受限[1-2],無(wú)法保證大容量數(shù)據(jù)幀傳輸?shù)膶?shí)時(shí)性。此外,傳統(tǒng)的數(shù)據(jù)集中處理方式也帶來(lái)了巨大的數(shù)據(jù)處理壓力問題。
針對(duì)上述問題,本文提出了一種基于分布式網(wǎng)絡(luò)結(jié)構(gòu)的船舶電力系統(tǒng)運(yùn)行狀態(tài)獲取方法,如圖1所示。系統(tǒng)的上層主干網(wǎng)為環(huán)形工業(yè)以太網(wǎng),下層為子站與供配電系統(tǒng)的各個(gè)局域網(wǎng),上下層之間采用交換機(jī)相連接。系統(tǒng)中的各種信息以以太網(wǎng)的方式在上下層之間流通,同時(shí)電力系統(tǒng)狀態(tài)信息將被保存到海量數(shù)據(jù)庫(kù)中,以供系統(tǒng)分析使用。子站對(duì)電力系統(tǒng)的各種信息進(jìn)行預(yù)處理,再根據(jù)需要采用不同的方式上傳,從而減輕了主站的數(shù)據(jù)處理壓力,提高了系統(tǒng)整體性能。
以太網(wǎng)是當(dāng)前應(yīng)用最普遍的局域網(wǎng)技術(shù),具有通信速率高、信息量大、網(wǎng)絡(luò)管理功能完善等顯著優(yōu)點(diǎn)[3],適用于船舶有限網(wǎng)絡(luò)空間內(nèi)的信息交互。以太網(wǎng)通信建立在TCP/IP協(xié)議的基礎(chǔ)上,TCP/IP協(xié)議的傳輸層提供了兩種服務(wù):用戶數(shù)據(jù)包協(xié)議(UDP)和傳輸控制協(xié)議(TCP)。其中UDP是面向無(wú)連接的協(xié)議,其不與對(duì)方建立通信連接,而是直接將數(shù)據(jù)包發(fā)送過去,因此,UDP協(xié)議通信的實(shí)時(shí)性高、費(fèi)用低、效率高[4]。使用UDP協(xié)議可以保證通信的實(shí)時(shí)性并降低網(wǎng)絡(luò)費(fèi)用,但同時(shí)也降低了通信的可靠性。TCP為面向連接和高可靠性的協(xié)議。TCP協(xié)議通過三次握手在通信雙方之間建立一個(gè)可靠的鏈接,并在通信過程中使用序號(hào)和確認(rèn)機(jī)制,利用超時(shí)重傳、擁塞控制與流控制等機(jī)制來(lái)確保所有發(fā)送的數(shù)據(jù)包都能到達(dá)目的地。因此TCP協(xié)議通信可靠性高,但TCP中用于保證可靠性傳輸?shù)母鞣N機(jī)制也降低了通信的實(shí)時(shí)性[5]。
針對(duì)船舶能量管理系統(tǒng)子站對(duì)數(shù)據(jù)幀實(shí)時(shí)性和可靠性的需求,大容量的通用數(shù)據(jù)幀可采用UDP協(xié)議傳輸以滿足其對(duì)實(shí)時(shí)性的需求。故障錄波數(shù)據(jù)幀作為分析電網(wǎng)故障的重要參考信息和動(dòng)態(tài)配置幀、命令幀,一并采用TCP協(xié)議傳輸,以確保這些重要數(shù)據(jù)和命令能夠準(zhǔn)確送達(dá)主站??紤]到船舶空間資源的有限性,子站采用嵌入式實(shí)現(xiàn)。采用ARM處理器作為子站的主控制器。由于ARM處理器存在資源受限的問題,并考慮到系統(tǒng)多任務(wù)處理的需求,通過使用輕量級(jí)TCP/IP協(xié)議棧LwIP和高實(shí)時(shí)性的操作系統(tǒng)COS-II,可以有效減少存儲(chǔ)空間的占用并提高代碼的運(yùn)行效率。LwIP實(shí)現(xiàn)的重點(diǎn)是在保持TCP/IP協(xié)議主要功能的基礎(chǔ)上減少對(duì)ARM的占用,這使得LwIP很適合在低端嵌入式系統(tǒng)中使用[6]。
子站的通信接口硬件結(jié)構(gòu)如圖2所示。本系統(tǒng)采用Cortex-M3內(nèi)核ARM處理器LM3S8962作為硬件平臺(tái),LM3S8962的以太網(wǎng)控制器由一個(gè)完全集成的媒體訪問控制器 (MAC)和網(wǎng)絡(luò)物理(PHY)接口器件組成。無(wú)需增加外部的MAC芯片或PHY芯片,這使得本系統(tǒng)的以太網(wǎng)接口硬件設(shè)計(jì)大大簡(jiǎn)化,只需添加簡(jiǎn)單的外圍設(shè)備即可實(shí)現(xiàn)以太網(wǎng)通信功能。
通信軟件總體設(shè)計(jì)采用客戶端/服務(wù)器模式,通過該模式可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),將任務(wù)合理分配到客戶端和服務(wù)器來(lái)實(shí)現(xiàn),一方面能降低系統(tǒng)的通信開銷,另一方面可減輕服務(wù)器運(yùn)行數(shù)據(jù)負(fù)荷,而且該模式還使系統(tǒng)易于擴(kuò)展[7-8],滿足船舶能量管理系統(tǒng)大容量數(shù)據(jù)發(fā)送和接收的需求。服務(wù)器和客戶端是一個(gè)相對(duì)的概念。在船舶能量管理系統(tǒng)中,子站在發(fā)送通用數(shù)據(jù)幀和故障錄波數(shù)據(jù)幀時(shí)是作為客戶端,而在接收配置幀和命令幀時(shí)是作為服務(wù)器。在μCOS-II平臺(tái)下完成上述功能只需分別建立任務(wù)作為客戶端和服務(wù)器完成相應(yīng)的功能即可。
子站以太網(wǎng)通信接口整體設(shè)計(jì)結(jié)構(gòu)如圖3所示。在LM3S8962上移植μCOS-II實(shí)時(shí)操作系統(tǒng),針對(duì)片內(nèi)的以太網(wǎng)控制器編寫驅(qū)動(dòng)程序,并移植TCP/IP協(xié)議棧。完成μCOS-II和協(xié)議棧的移植后,由操作系統(tǒng)管理各任務(wù),包括網(wǎng)絡(luò)通信程序和其它應(yīng)用程序。子站的通信軟件設(shè)計(jì)主要包括協(xié)議棧的移植、驅(qū)動(dòng)程序設(shè)計(jì)、數(shù)據(jù)幀結(jié)構(gòu)的定義和嵌入式以太網(wǎng)通信程序設(shè)計(jì)。
協(xié)議棧的移植主要是操作系統(tǒng)模擬層的移植,包含以下兩個(gè)方面:與CPU或編譯器有關(guān)的文件移植和與底層操作系統(tǒng)相關(guān)的結(jié)構(gòu)體和函數(shù)[9]。參照LwIP官方文檔sys_arch.txt可知,LwIP在設(shè)計(jì)時(shí)為了簡(jiǎn)化協(xié)議棧移植,把所有與硬件、操作系統(tǒng)、編譯器等有關(guān)的部分全部獨(dú)立出來(lái)放在了/src/arch 目錄下。因此,LwIP 在 uC/OS-Ⅱ下的移植主要是根據(jù)不同硬件平臺(tái)修改這個(gè)目錄下的相關(guān)文件。
4.1.1 與CPU或編譯器有關(guān)的文件
在/src/arch/目錄下的文件中有一些與 CPU或編譯器相關(guān)的定義,如數(shù)據(jù)長(zhǎng)度、字的高低位順序等。這些與移植μCOS-II時(shí)的定義應(yīng)一致。
4.1.2 與底層操作系統(tǒng)相關(guān)的結(jié)構(gòu)體和函數(shù)
主要包括信號(hào)量及相關(guān)函數(shù)、消息隊(duì)列及相關(guān)函數(shù)、超時(shí)處理函數(shù)以及創(chuàng)建新線程函數(shù)等。這些結(jié)構(gòu)體和函數(shù)在文件 sys_arch.c和 sys_arch.h中實(shí)現(xiàn)。
1)線程間通信。LwIP需要使用信號(hào)量、消息隊(duì)列進(jìn)行線程間同步和通信等操作。在移植COSII時(shí)已經(jīng)實(shí)現(xiàn)了相關(guān)的操作,故只需適當(dāng)?shù)姆庋b和處理μCOS-II中的相關(guān)函數(shù)即可。
2)超時(shí)處理。LwIP中每一個(gè)有網(wǎng)絡(luò)連接作用的線程都具有超時(shí)屬性,即維護(hù)一個(gè)sys_timeouts鏈表。移植時(shí)需要編寫sys_arch_timeouts(void)函數(shù),該函數(shù)返回線程當(dāng)前的sys_timeouts結(jié)構(gòu)體指針。
3)創(chuàng)建線程。LwIP創(chuàng)建線程實(shí)際上就是利用μCOS-II的系統(tǒng)函數(shù)創(chuàng)建了一個(gè)任務(wù),因此sys_thread_new函數(shù)實(shí)現(xiàn)比較簡(jiǎn)單。
LwIP的網(wǎng)絡(luò)驅(qū)動(dòng)有一定的模型,該模型位于目錄 /src/neti/ethernetif.c 文件中,主要包括網(wǎng)卡初始化、數(shù)據(jù)包接收和數(shù)據(jù)包發(fā)送等函數(shù)。LM3S8962的以太網(wǎng)控制芯片完全集成在片內(nèi),因此編寫網(wǎng)絡(luò)驅(qū)動(dòng)程序只需在此框架中完成與底層硬件相關(guān)的部分即可。
本系統(tǒng)的網(wǎng)絡(luò)驅(qū)動(dòng)程序流程如圖4所示。首先由以太網(wǎng)初始化函數(shù)(InitNic)調(diào)用LwIP協(xié)議棧初始化函數(shù)(LwIPInit),同時(shí)建立接收線程并添加數(shù)據(jù)包接收函數(shù)(stellarisif_input),接收函數(shù)調(diào)用ethernet_input()函數(shù)來(lái)處理接收數(shù)據(jù)包。在LwIPInit中,調(diào)用網(wǎng)絡(luò)接口初始化函數(shù)(stellarisif_init)來(lái)初始化與此網(wǎng)絡(luò)接口對(duì)應(yīng)的結(jié)構(gòu)體,同時(shí)向LwIP注冊(cè)發(fā)送函數(shù)(etharp_output)和鏈路層發(fā)送函數(shù)(low_level_output),并調(diào)用 low_level_init函數(shù)來(lái)完成以太網(wǎng)底層硬件驅(qū)動(dòng)。
當(dāng)網(wǎng)絡(luò)接口接收到一個(gè)數(shù)據(jù)包時(shí),通過接收中斷向接收線程發(fā)送信號(hào)量,啟動(dòng)接收線程處理接收數(shù)據(jù)包,若為ARP數(shù)據(jù)包,則調(diào)用ARP接收函數(shù)處理;若為IP數(shù)據(jù)包,則更新ARP緩沖表,將數(shù)據(jù)傳送到傳輸層,判斷是TCP還是UDP方式,再由應(yīng)用層對(duì)數(shù)據(jù)包進(jìn)行處理。
若從網(wǎng)絡(luò)接口發(fā)送一個(gè)數(shù)據(jù)包,便調(diào)用etharp_output函數(shù)從 ARP緩沖表中查找目標(biāo)MAC地址,并添加以太網(wǎng)幀頭部,調(diào)用鏈路層發(fā)送函數(shù)通過底層發(fā)送函數(shù) (low_level_transmit)來(lái)完成實(shí)際的發(fā)送。若無(wú)法找到與IP匹配的MAC地址,則發(fā)送ARP請(qǐng)求數(shù)據(jù)包來(lái)獲取MAC地址。
4.3.1 多任務(wù)模式下的通信程序設(shè)計(jì)
LwIP協(xié)議棧提供3種形式的API函數(shù):BSD API、RAW API和 LwIP API[10]。BSD API要求在協(xié)議棧中將要發(fā)送的數(shù)據(jù)從應(yīng)用程序拷貝到內(nèi)部緩存,效率低且消耗資源多;RAW API要求應(yīng)用程序駐留在TCP/IP進(jìn)程中,這導(dǎo)致通信與應(yīng)用程序不能同時(shí)進(jìn)行,降低了通信性能;LwIP API將負(fù)責(zé)通信的部分駐留在TCP/IP進(jìn)程中,負(fù)責(zé)大量運(yùn)算的部分作為一個(gè)單獨(dú)的進(jìn)程,通過進(jìn)程間通信機(jī)制實(shí)現(xiàn)應(yīng)用進(jìn)程與協(xié)議棧進(jìn)程之間的通信[11]。由于子站既要對(duì)AD采集的大量數(shù)據(jù)進(jìn)行處理,又要立即響應(yīng)接收數(shù)據(jù),故采用LwIP API作為應(yīng)用程序接口,將應(yīng)用程序分成了兩部分,一部分處理通信,一部分處理數(shù)據(jù)。負(fù)責(zé)通信的部分被劃分為3個(gè)任務(wù),即一個(gè)TCP服務(wù)器任務(wù),負(fù)責(zé)接收主站的控制指令;一個(gè)TCP客戶端任務(wù),負(fù)責(zé)故障錄播幀的發(fā)送;一個(gè)UDP客戶端任務(wù),負(fù)責(zé)通用數(shù)據(jù)幀的傳遞。負(fù)責(zé)處理數(shù)據(jù)的部分被劃分為兩個(gè)任務(wù),以分別對(duì)主站指令和AD采樣數(shù)據(jù)進(jìn)行處理。
4.3.2 子站通信程序工作流程
子站通信程序工作流程如圖5所示。AD數(shù)據(jù)采集模塊在定時(shí)器的控制下周期性地對(duì)被測(cè)電力設(shè)備的電壓、電流值進(jìn)行采樣,然后通過郵箱將采樣數(shù)據(jù)傳遞給數(shù)據(jù)處理模塊1,通過對(duì)數(shù)據(jù)的解析,判斷電力設(shè)備是否出現(xiàn)故障,如果出現(xiàn)故障,則立即啟動(dòng)故障錄播模式,詳細(xì)記錄故障點(diǎn)的原始數(shù)據(jù)并打包成故障錄播幀。由于這些數(shù)據(jù)是分析和解決故障的重要判據(jù),必須保證準(zhǔn)確無(wú)誤地傳遞給主站,因此通過TCP方式傳輸。若是正常數(shù)據(jù),便將數(shù)據(jù)封裝成通用數(shù)據(jù)幀,通過UDP方式傳遞給主站。子站采用TCP方式接收來(lái)自主站的控制指令和動(dòng)態(tài)配置幀。TCP一直監(jiān)聽設(shè)定的端口,有數(shù)據(jù)到來(lái)時(shí)對(duì)數(shù)據(jù)進(jìn)行判斷,如果數(shù)據(jù)有效,便通過郵箱發(fā)送給數(shù)據(jù)處理模塊2,經(jīng)解析后執(zhí)行主站的指令。
為了驗(yàn)證本系統(tǒng)設(shè)計(jì)的可行性與正確性,首先在實(shí)驗(yàn)室環(huán)境下搭建簡(jiǎn)單的嵌入式以太網(wǎng)通信系統(tǒng),用來(lái)測(cè)試在多任務(wù)模式下TCP和UDP通信信道的運(yùn)行狀況。將子站設(shè)置成回環(huán)通信調(diào)試模式,即回發(fā)接收到的主站命令,在調(diào)試助手中建立TCP客戶端以向子站發(fā)送命令,可以看到,在接收窗口中可以看到同樣的命令,這說明子站收到了命令,并將此命令回發(fā)給主站。同時(shí),讓子站通過TCP和UDP兩種方式向主站發(fā)送模擬數(shù)據(jù),在調(diào)試助手中分別建立TCP、UDP服務(wù)器以接收子站發(fā)送的數(shù)據(jù)。如圖6所示,兩種方式數(shù)據(jù)上傳正常。
主站的監(jiān)控軟件由Qt編寫,能以圖形和文字兩種方式實(shí)時(shí)顯示電力系統(tǒng)被測(cè)節(jié)點(diǎn)的運(yùn)行狀態(tài),單擊開關(guān)按鈕可以改變子站開關(guān)的狀態(tài),并將開關(guān)變化后的狀態(tài)上傳至主控界面,監(jiān)控軟件界面如圖7所示。通過實(shí)驗(yàn)驗(yàn)證,在子站中采用TCP和UDP方式通信取得了預(yù)想的結(jié)果,點(diǎn)擊界面上的不同菜單,可分別將各被測(cè)節(jié)點(diǎn)的電壓、電流、功率和開關(guān)狀態(tài)顯示到界面上,并且可以查看各數(shù)據(jù)的歷史曲線。
針對(duì)船舶能量管理系統(tǒng)中高實(shí)時(shí)性與低網(wǎng)絡(luò)開銷的大容量通用數(shù)據(jù)幀傳輸和高可靠性與完整性的故障錄播幀、配置幀以及命令幀的傳輸,本文采用基于LwIP協(xié)議棧和μCOS-II實(shí)時(shí)操作系統(tǒng)相結(jié)合的嵌入式以太網(wǎng)通信接口設(shè)計(jì)方法,實(shí)現(xiàn)了分別用TCP和UDP對(duì)不同性質(zhì)數(shù)據(jù)幀的傳輸,并可通過主站監(jiān)控界面對(duì)子站進(jìn)行遠(yuǎn)程監(jiān)控。本系統(tǒng)采用模塊化思想優(yōu)化軟件體系,利用多任務(wù)方式處理各個(gè)模塊,增加了模塊內(nèi)部的內(nèi)聚性,降低了模塊之間的耦合性,提高了系統(tǒng)的靈活性。實(shí)驗(yàn)證明,設(shè)計(jì)方案滿足船舶能量管理系統(tǒng)中對(duì)通信可靠性和實(shí)時(shí)性的需求,實(shí)現(xiàn)了電力系統(tǒng)狀態(tài)信息獲取與數(shù)據(jù)幀傳輸?shù)木W(wǎng)絡(luò)化。
[1]趙浩,李聲晉,蘆剛.基于CAN總線和以太網(wǎng)的遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)[J].測(cè)控技術(shù),2006,25(10):53-56.
[2]甘永梅,李慶豐,劉曉娟,等.現(xiàn)場(chǎng)總線技術(shù)及其應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2005.
[3]ZOU J N,CHEN J,LIN R J.Implementation of access controller for Ethernet passive optical network [J].Journal of Shanghai University,2006,10(5):425-430.
[4]鄭巨明,張和生,賈利民,等.基于 μC/OS-Ⅱ和 Lwip的嵌入式以太網(wǎng)接口設(shè)計(jì) [J].計(jì)算機(jī)測(cè)量與控制,2009,17(11):2238-2242.
[5]SCAGLIA S.嵌入式Internet TCP/IP基礎(chǔ)、 實(shí)行及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.
[6]邱書波,陳偉.基于ARM的輕量級(jí)TCP/IP協(xié)議棧的研究及移植[J].計(jì)算機(jī)應(yīng)用與軟,2009,26(8):90-92.
[7]方濤.基于B/S與C/S混合模式下的電廠燃料管理系統(tǒng)的研究[D].保定:華北電力大學(xué),2005.
[8]李先軍,劉波,余丹,等.一種基于AJAX技術(shù)的B/S與C/S 混合構(gòu)架模式[J].計(jì)算機(jī)應(yīng)用,2009,29(4):1135-1138.
[9]孔棟,鄭建宏.嵌入式TCPIP協(xié)議棧LWIP在ARM平臺(tái)上的移植與應(yīng)用[J].通信技術(shù),2008.41(6):38-40.
[10]焦海波,劉健康.嵌入式系統(tǒng)網(wǎng)絡(luò)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2008.
[11]高強(qiáng).嵌入式WEB發(fā)布平臺(tái)在變電站自動(dòng)化系統(tǒng)中的應(yīng)用研究與實(shí)現(xiàn)[D].成都:西南交通大學(xué),2006.