趙 勇,黃 東,張天開,苑 紅
(青島理工大學 自動化學院,山東 青島 266033)
目前,國內外關于機房遠程控制系統的解決方案,主要是通過純軟件技術實現的,諸如IBM、賽門鐵克、HP、東軟等公司都有相關的軟件產品,然而,純粹依靠軟件遠程控制無法操作服務器在死機狀態下重啟,死機時只能采取硬件重啟的方式解決,機房管理員為了確保重啟生效,往往很少使用服務器上的RESET按鍵,而是按下POWER按鍵,帶關閉電源后再開機。幾乎所有的服務器主板都集成帶有遠程喚醒技術(WOL,Wake-on-LAN)功能的網卡[1],但 WOL技術只能在服務器處于關機或者正常運行的時候才能起效,而當服務器處于死機狀態下,服務器重啟就無法通過WOL實現了。
基于此,文中提出利用TCP/IP網絡通信協議,實現機房電源遠程控制系統的軟硬件相結合的解決方案,真正達到“零等待重啟”。
遠程控制系統結構框圖如圖1所示。控制系統并不會改變機房原來的拓撲結構,只是在原有機房管理計算機安裝C/S控制客戶端后,根據機房電源數量,安裝相應數量的電源控制節點(每個節點可以控制32路電源的通斷)。如圖所示,電源控制節點也接入機房所在網絡中,以便接受管理計算機控制[2]。
圖1 機房遠程電源拓撲結構Fig.1 Topological structure of computer room remote power supply
用戶在管理計算機登錄到C/S客戶端后,客戶端將控制指令發送到指定的電源控制節點,電源控制節點控制繼電器通斷實現機房內各種設備的電源開關切斷。同時,用戶每次控制電源通斷的時間、電源持續工作的時間等都會生成日志自動保存到數據庫當中。
電源控制節點的主控芯片采用的是ST公司基于Cortex-M3內核的32位微處理器STM32F103VET6。Cortex-M3處理速度高達72 MHz,RSIC指令結構減少了開發難度。同時擁有的資源包括512 kB Flash、20KB SRAM滴答時鐘Systick、FSMC液晶屏接口、2路SPI等[3]。依靠STM32強大的硬件資源,設計很方便的在其外圍電路中擴展了顯示模塊、網卡模塊、存儲模塊、普通I/O輸入輸出模塊。依據電源控制節點的工作原理與功能,完成如下所示的電路:
1)網卡模塊:ENC28J60是帶有行業標準串行接口(Serial Peripheral Interface,SPI)的獨立以太網控制器,可以作為任何配備有SPI的控制器的以太網接口,符合IEEE 802.3的全部規范,采用了一系列包過濾機制以對傳入數據包進行限制。同時,ENC28J60還提供一個內部DMA模塊,以實現快速數據吞吐和硬件支持的IP校驗和計算。STM32的SPI1接口與ENC28J60實現通信,數據傳輸速率高達10 Mb/s。兩個專用的引腳用于連接LED,進行網絡活動狀態指示[4]。網口插座電路輸出電路采用內置網絡變壓器、狀態指示燈和電阻網絡的RJ45接座HR911105A,具有信號耦合、電氣隔離、阻抗匹配、抑制干擾等作用。電路原理如圖2所示。
圖2 ENC28J60電路原理圖Fig.2 Circuit of ENC28J60
顯示模塊: 通過 接口實現對 的讀寫;SPI2總線實現對觸摸芯片ADS7843的控制。
3)存儲模塊:STM32的PC0和PC1管腳模擬I2C總線時序,實現對掉電存儲芯片AT24C02的控制,AT24C02主要用來保存電源控制節點IP、子網掩碼、默認網關和電源開關延遲時間等信息。
2.2.1 μIP移植
開源的μIP軟件包為嵌入式微處理器建立TCP/IP協議堆棧提供了一種解決方法,μIP代碼都是用C語言編寫的。本系統選用了μIP 1.0版本作為移植版本,移植到了基于STM32控制的ENC28J60網絡模塊上,實現PC和電源控制節點的TCP通信。μIP協議棧與系統底層和高層應用之間的關系如圖3所示[5]。
圖3 μIP各層之間關系Fig.3 Relationship between each layer of μIP
μIP的移植可以分為如下4步:
1)網卡ENC28J60的數據被μIP從物理層分離,ENC28J 60和μIP之間的數據交互通過tapdev.c文件來實現。tapdev.c 文 件 中 包 含 3 個 文 件 :tapdev_init()、tapdev_read()、tapdev_send()。網卡ENC28J60的驅動函數放在tapdev_init()中,主要是用來設置ENC28J60的工作模式和設定以太網的MAC地址;讀包函數tapdev_read()將網卡驅動中enc28j60PacketReceive()函數接收到的數據保存到全局變量uip_buf中,同時返回包的長度,用uip_len表示;發包函數tapdev_send()利用網卡驅動中的enc28j60PacketSend()函數將全局變量uip_buf中的數據發送出去。
2)STM32的定時器為μIP協議棧中的TCP和ARP提供定時器服務,配置STM32定時器20ms中斷,每次進入中斷tick_cnt加1,計數次數到 25次(0.5 s)調用一次 TCP的定時處理程序,10 s后可以調用ARP程序。μIP 1.0版本增加了timer.c和timer.h專門用來管理時鐘。
3)根據需要修改uipopt.h和uip-conf.h文件中的宏,用來配置μIP本地IP地址、網關地址、偵聽數、全局緩沖區的大小ARP表大小等。在此系統中,將UIP_CONNS配置成10,最多同時可以打開10個TCP連接。μIP和底層網卡驅動函數進行數據交互時,都是通過調用UIP_APPCALL()實現的,UIP_APPCALL()將數據送到相應的上層應用程序處理
4)將μIP的主循環架構封裝成一個任務加入main()中。打開PC的DOS界面,利用PING程序測試后,PC和電源控制節點通信良好。μIP的代碼流程圖如圖4所示。
圖4 μIP代碼流程圖Fig.4 Flow chart of μIP code
2.2.2 基于μCGUI人機交互界面實現
μCGUI是一種用于嵌入式應用的圖形支持軟件,它被設計用于為任何一個圖形LCD的應用提供一個有效的不依賴于處理器和LCD控制器的圖形用戶接口。人機交互界面具體過程如圖5所示。電源控制節點上電復位后,首先選擇上是否修改IP設置,如果不修改,則直接從AT24C02中直接讀取IP后連接網絡;否則,重新設置IP地址、子網掩碼、默認網關,并寫入AT24C02中。
圖5 人機交互界面程序框圖Fig.5 Block diagram of human-computer interface
2.2.3 基于μC/OS-II的軟件實現
電源控制節點整個軟件體系是基于STM32硬件在μC/OS-II實時操作系統上實現的。首先進入Bootloader程序,上電后首先運行Bootloader,實現硬件設備初始化,為調用操作系統內核做好準備,引導程序使用vboot[6]。然后初始化μC/OS-II操作系統,調用應用程序。應用層程序主要有:顯示任務、網絡通信任務、普通I/O輸入輸出任務、存儲任務等。μC/OS-II最多可以創建64個任務,所以優先級有64級,用0~63表示,數字越小,優先級級別越高,不建議使用優先級最高4個和最低4個,所以用戶可以有56個自己的任務[7]。系統的各個任務優先級分配與任務說明如表1所示。
表1 系統任務優先級分配與說明Tab.1 Distribution and instructions of system task priority
C#作為C/S客戶端開發語言,結合ASP.NET技術,采用socket通信機制實現PC和電源控制節點的通信。socket工作原理如圖6所示。服務器首先初始化socket,然后與端口綁定,對端口進行監聽,調用accept阻塞,等待電源控制節點連接。在這時如果一個電源控制節點連接服務器成功,這時電源控制節點和客戶端的連接就建立了。
系統測試中,C/S客戶端IP為“192.168.5.110”、子網掩碼為“255.255.255.0”、默認網關為“192.168.5.254”,電源控制節點連接C/S客戶端后,設置好對應繼電器控制電源開關延遲時間[8],遠程控制繼電器的通斷。系統通電后,不同繼電器通
圖6 socket工作原理Fig.6 Socket working principle
表2 繼電器通斷測試數據Tab.2 Relay on-off test data
本系統利用TCP/IP協議完成了機房遠程電源控制系統的設計。通過實際的測試和長時間的運行,本系統具有優秀的穩定性和通用性,能夠快速準確的完成繼電器的通斷。同時,系統不僅可以應用在機房電源,還可以應用到一些危險場合的電源遠程控制。此外,本系統還可以進行二次開發,增加手持設備客戶端,用戶可以通過手機、iPad等設備來實現電源的遠程控制。
[1]辜俊.遠程喚醒技術的探討[J].計算機與網絡,2005(2):46-47.GU Jun.Study of remote wake technology[J].Computer&Network,2005(2):46-47.
[2]陳銘,徐小宇,凌明.遠程機房電源控制系統設計[J].現代電子技術,2007,243(4):49-54.CHEN Ming,XU Xiao-yu,LING Ming.Design of remote power supply control system for computer laboratory[J].Modern Electronics Technique,2007,243(4):49-54.
[3]劉同法,肖志剛,彭繼衛.ARM Cortex-M3內核微控制器快速入門與應用[M].北京:北京航空航天大學出社,2009.
[4]野火團隊.零死角玩轉STM32-高級篇7[DB/OL].[2013-01-17].http://pan.baidu.com/share/link share id=202388&uk=2416814018.
[5]伊文斌,周賢娟,鄢化彪,等.μIP TCP/IP協議分析及其在嵌入式系統中的應用[J].計算機技術與應用,2007,17(4):240-245.YI Wen-bin,ZHOU Xian-juan,YAN Hua-biao,et al.μIP TCP/IP Protocol Analysis and Its application in embedded system[J].Computer Technology and Development,2007,17(4):240-245.
[6]劉子飛,周玉國,宋悅,等.基于ARM嵌入式的聯合站脫水控制系統設計[J].儀表技術與傳感器,2012(12):43-45.LIU Zi-fei,ZHOU Yu-guo,SONG Yue,etal.Designof embedded union station dehydration control system based on ARM[J].Instrument Technique and Sensor,2013(12):43-45.
[7]邵貝貝.嵌入式實時操作系統μC/OS-II[M].2版.北京:北京航空航天大學出版社,2005.
[8]南樹功,邵文權,王妍薇,等.基于虛擬儀器技術的繼電保護功能分析系統[J].陜西電力,2013(9):50-54.NAN Shu-gong,SHAO Wen-quan,WANG Yan-wei,et al.Probe into functional analysis system of relay protection based on Lab VIEW[J].Shaanxi Electric Power,2013(9):50-54.