摘 要: 設計了一種功率放大器電源工作狀態遠程監測系統,實現了137路電源的監測。該系統以ARM7處理器、μC/OS-II實時操作系統和uIP協議棧為核心,并在PC上設計了上位機監控軟件。經驗證,系統能正確接收多點監測,可以及時反映電源工作情況,并提供報警信息。
關鍵詞: 電源監測;ARM7;μC/OS-II;uIP協議;VC
固態功率放大器SSPA(Solid State Power Amplifier)具有體積小、重量輕、工作電壓低、穩定性高等優點,被廣泛用于各個領域中,在通信系統中也占據著越來越重要的地位。固態功率放大器需要將多路功率器件進行合成,這就需要多路電源進行穩定供電,在工作中需要對每一路電源的工作狀態進行監測,主要監測電源的工作電流。對固態功率放大器工作時的電源工作狀態進行監測,并通過網絡發送至遠程主機進行分析和處理,以確保系統能夠正常工作。
1 系統硬件結構
SSPA遠程監測系統由電源模塊、模擬開關、嵌入式處理器AT91SAM7X256和DM9161網卡等構成。多路電源的工作電流經過電路轉換為電壓,輸入到系統中,系統通過模擬開關的切換實現分時采樣,得到137路電源的工作電流數據,并將數據打包,然后DM9161通過網絡將數據發送至遠程主機,實現了遠程采集和監測功能,當采集的工作參數超過設定值時實現報警,確保系統工作正常。監測系統構成如圖1所示。
2 系統軟件設計
2.1 μC/OS-II系統移植
μC/OS-II是一個優秀的嵌入式實時操作系統,應用中首先應完成系統的移植。所謂移植,就是使一個實時內核運行在某個微控制器或微處理器上,并對與處理器相關的代碼進行修改。系統移植主要包括以下幾個內容:
(1)在OS_CPU.H頭文件中完成配置和定義。其中主要包括與編譯無關的數據類型的定義;OS_ENTER_CRI-TICAL、OS_EXIT_CRITICAL、OS_TASK_SW 3個宏的定義,這3個宏定義分別表示進入中斷、退出中斷和任務切換;還需要完成堆棧生長方向的定義[1]。
(2)編寫OS_CPU_C.C,其中主要的工作是編寫6個C語言的函數。其中OSTaskStkInit()是任務堆棧初始化函數,這是進行移植時必須重視的函數,其他5個函數都是Hook函數,供系統內核擴展。
(3)編寫OS_CPU_A.ASM,主要需要編寫3個匯編語言函數,分別是高優先級就緒任務啟動函數OSStartHighRdy()、任務級的切換函數OSCtxSw()和中斷下的任務切換函數OSIntCtxSw()[2]。
2.2 uIP網絡協議移植
uIP由瑞典計算機科學學院(網絡嵌入式系統小組)的Adam Dunkels開發,是一種免費的、可實現的、極小的TCP/IP協議棧。它可以看作是一個代碼庫,通過一系列函數為系統底層和應用程序之間提供通信,對于系統本身,它內部的協議是透明的,提高了協議的適用性[3]。
uIP使用前需要進行移植,移植的主要內容就是修改網絡驅動部分的內容,包括以下幾個步驟:
(1)編寫EMAC網絡接口庫,該庫文件中主要提供了一系列對ARM控制器中EMAC接口進行操作的函數,控制器對網卡的操作都是通過該接口進行,包括了EMAC模塊的初始化工作以及與網卡芯片的通信函數等。
EMAC_Init(AT91C_ID_EMAC,MacAddress.addr,EMAC_CAF_ENABLE, EMAC_NBC_DISABLE);//初始化EMAC接口
……
(2)編寫網卡芯片DM9161的驅動程序,包括了DM9161的芯片初始化以及數據發送和數據接收操作等。
MACB_Init(pMacb, BOARD_EMAC_PHY_ADDR);
//初始化DM9161
……
(3)完成本系統uIP的配置選項,包括數據存儲方式、緩存區大小、IP地址、MAC地址、默認路由、子網掩碼、uIP 1 s時間所需要的中斷數和一些基本數據類型的定義,以及最大連接數、數據包長度以及應用層協議的支持等[4]。
(4)編寫應用層函數UIP_APPCALL,uIP協議在接收到底層數據之后,需要上層函數處理時,會調用函數UIP_APPCALL。本系統中通過使用宏定義#define UIP_
APPCALL sample_appcall將該函數定向到sample_appcall。該函數通過查詢當前狀態來實現各種處理機制。當遠程主機建立一個連接后,初始化緩存區給當前連接使用;有新數據到達時讀取數據包,分析數據包的信息后,返回給遠程主機所需要的信息。當連接輪詢次數達到設定值時,中止當前連接,當遠程主機發出斷開連接命令或連接超時后,斷開當前連接[5]。uIP協議棧通過調用該函數實現網絡數據的收發。
2.3 系統任務設計
系統的實際任務有啟動任務AppStartTask()、AD采集任務AD_sampleTask()、網絡主任務Network_MainTask()、網絡周期任務Network_PerioTask()及網絡數據包接收任務Network_PollTask(),其優先級從高到低。
AppStartTask()是在開始時啟動其他任務以及在系統運行時通過LED燈指示系統是否正常工作。AD_sample-
Task()是采樣任務,負責各監測點數據的獲取和處理工作。Network_PollTask()、Network_MainTask()和Network_PerioTask() 3個任務是網絡部分的內容,并且使用一個信號量pNetwork_newdata來實現任務之間的通信。
數據包接收任務Network_PollTask()是3個網絡任務中優先級最低的一個,負責監聽在指定的端口上是否有連接請求或數據請求,當一個新的請求到達該監聽端口后,該任務將收到的數據包緩存到uip_buf中,設置數據長度變量uip_len,然后該任務會發送一個信號量pNetwork_newdata給網絡主任務Network_MainTask()。
網絡主任務Network_MainTask()是網絡任務中優先級最高的,完成網絡數據處理并向應用層分發。平時一直處于掛起的狀態,當收到數據包發送任務發送的信號量之后,該任務調用函數uip_process()處理數據包信息,根據不同信息完成數據包的發送,然后繼續被掛起。
Network_PerioTask()則是周期性運行的任務,其優先級處于另兩個任務之間,用于對連接的管理,處理連接超時數據包重發。這3個任務互相協作,實現了網絡的通信[6]。
3 上位機設計
上位機部分是基于VC6.0編寫的,主要運用網絡套接字和多線程編程技術等實現。上位機運行時,首先讀取注冊表中保存的設定值,然后對保存的指定IP的指定端口發送連接請求,連接建立后,向下位機發送數據請求包,并且在主線程之外創建一個接收線程,接收線程通過Socket套接字接收上傳的網絡數據,主線程中實現各個監測點的數據顯示以及報警信息等,并可以發送相應的功能命令給下位機,以達到一些簡單的控制功能。上位機運行界面如圖2所示。
本系統實現了μC/OS-II操作系統和uIP網絡協議的結合,并運用到電源監測系統中。本系統經調試,軟硬
件工作均正常。實際運行結果證明,本監測系統在穩定性和實時性方面都有很好的表現,完全適用于實際系統的應用。隨著嵌入式技術以及網絡技術的發展,未來數據監測系統的發展和應用將會有更大的空間。
參考文獻
[1] 邵貝貝.μC/OS-II—源代碼公開的實時嵌入式操作系統 [M].北京:中國電力出版社,2001.
[2] 趙偉國,李文軍,梁國偉.實時嵌入式操作系統μC/OS-II 在AT91上的移植[J].中國計量學院學報,2005,16(2):137-139.
[3] DUNKELS A.The uIP 1.0 reference manual[D].Swedish:Swedish Institute of Computer Science,2006.
[4] DUNKELS A.uIP-A free small TCP/IP stack[Z].2004.
[5] 張永濤,黃丹丹,李歐.uIP協議分析及其應用[J].信息工程大學學報,2006,7(2):147-149.
[6] 劉春風,張代遠.?滋C/OS-II下協議棧uIP的移植與應用[J].計算機技術與發展,2012,22(9):143-145.