赵 勇,黄 东,张天开,苑 红
(青岛理工大学 自动化学院,山东 青岛 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.