2. 中国科学院云南天文台, 云南 昆明 650011
2. Yunnan Observatories, Chinese Academy of Sciences, Kunming 650011, China
随着嵌入式技术、自动控制技术以及互联网技术的发展,天文选址设备的管理和监控逐渐向自主运行和远程监控方向发展。对当前天文选址设备进行自主运行改造并实现远程监控,不仅可以提高天文选址设备的运行效率,更可以显著节约管理成本和人力资源。
电源控制与现场环境状态监测是当前天文选址设备自主运行改造中的共性需求。以选址定点观测为例,此时站址已经具有一定条件,有供电设施(设备),一般情况下互联网也已经接入(有线或无线接入)。如果可以通过技术手段,实现每天自动开机、自动关机、现场状态的视频监控,观测人员可以在条件较好的地区远程对选址设备进行控制,并可以在意外发生时实现远程紧急断电;选址现场只需要委托当地普通人员进行必要的硬件维护即可。显然,远程控制技术,可以大大降低野外恶劣环境下的天文选址工作难度,使得选址人员可以在环境较好的远程工作室进行现场控制,改善了工作环境,保障了人员健康,降低了人力成本,更提高了数据产出。
因此,在现阶段,研制一套可以在电池供电情况下可靠运行的远程电源控制与现场环境状态监测系统,实现远程自动开关机和现场视频监控,显然是有意义的。
1 硬件系统设计系统基于ARM9开发设计,采用一款以S3C2440(http://www.witech.com.cn)处理器为核心的高性能综合开发板。S3C2440是SAMSUNG生产的一款32位低功耗、高性能、低成本的SAMSUNG ARM9(ARM920T)处理器。系统包括RS-232通信端口,电源开关控制电路,COMS摄像头,以太网接口以及无线网卡USB接口,LED显示屏。其中,RS-232通信端口实现ARM9开发板与系统其它模块通信;电源开关控制电路用于控制接入设备的开关;COMS摄像头采用的是OV9655控制芯片,像素高达130万,用以视频采集;以太网络采用DM9000A以太网接口控制芯片,支持100 Mbits以太网络;无线网卡接口是防备在有线网没有接通的地方插入无线网卡实现网线连接;LED屏是一块4.3寸的彩色液晶屏(可以根据需要关闭输出以免影响观测,同时降低能耗),用于现场近程显示并可在上面进行电源开关控制操作。
1.1 电源开关控制设计选址设备工作电压一般为220 V的交流高压,而ARM9开发板的工作电压是5 V的直流。实现低电压对高电压的控制必然采用继电器。
系统实现中,选择4路开关量输入、4路继电器输出工控模块。工控模块集成了4路AC270V-10A的JOC-3FF继电器,每路可控制最高270 V的交流电压,可承受最大10A的交流电流,常闭端、公共端、常开端3端输出。模块工作电压是DC8V-DC24V,适合不同场合。每块工控模块上有一个8位的拨码开关,开关拨到ON,该位代表的二进制数为“1”,反之为“0”,用以设置模块的地址和波特率。其中,前两位设置模块的波特率,控制通信波特率范围为00-11(0~3),一共4种:4 800、9 600、19 200、38 400。3~8位为设置模块的地址,范围为:0000 0001-0011 1111(1~63),即可以实现最多63个工控模块串联。系统设计中将2块工控模块串联一起组成系统的电源开关控制电路模块,最多可控制8路仪器设备的电源开关,也为系统以后的拓展做准备。工控模块的结构图如图 1。
|
| 图 1 工控模块结构图 Fig. 1 Illustration of the structure of an industrial control module |
工控模块遵守Modbus-RTU协议,受RS-485接口电平控制,接收4路开关量输入,控制4路接入设备的电源开关。采用标准的Modbus-RTU通信协议,接收一组16进制指令可对工控模块进行独立或批量读写控制。其中,第1个字节表示模块地址,可控制同一网络上256个这样的模块;第2个字节表示功能,有5种功能码;3~4字节选择模块地址;5~6字节是操作码;7~8字节为校检码(Modbus-RTU采用CRC-16校验,用模2法则计算校检码)。Modbus-RTU规约中,5种功能码与其对应的功能如表 1。
| 功能码 | 功能 | |
| 0x01 | 读1路或多路开关量输出状态 | |
| 0x02 | 读1路或多路开关量输入状态 | |
| 0x03 | 读模块地址和波特率参数 | |
| 0x05 | 写单路开关量输出状态 | |
| 0x0F | 写多路开关量输出状态 |
当功能码为0x01、0x02、0x03或0x05时,控制指令为一组8字节的指令,如指令(以16进制说明,下同):
01 05 0002 FF00 6C 39
第1字节“01”表示对模块1进行操作,“05”表示写单路开关量输出状态,“00 02”表示对模块的第3路开关进行控制,“FF 00”表示打开操作对象,“6C 39”是根据前面6个字节的16进制数计算出的校检码,整个指令实现的操作是:打开模块1的第3路开关。
当功能码为0x0F时,控制指令为一组10个字节的16进制指令,如指令:
02 0F 0000 00 04 01 0F 7E 83
第1字节“02”表示对模块2进行操作,“0F”表示写多路开关量输出状态,“00 00”表示起始位,“00 04”表示同时控制4路开关,“01”表示字节计数,“0F”表示开关量,“7E 83”是根据前面8字节的16进制数计算出的校检码,整个指令实现的操作是同时打开模块2的4路开关。
为实现远距离高效率的传输,考虑到现场有可能出现多个电源控制点,同时各个点之间存在一定的距离。实际系统中,在ARM9开发板和电源开关控制模块之间连接一块RS-232转RS-458的SC-NC RS232<- ->RS485转换器。该转换器体积小,使用DB9连接器,无需外部的流量控制信号(RTS),自动发送/接收收据。采用异步半双工的工作方式,通讯距离远达1 200 m,通讯速率达300BPS-115.2KBPS。电源控制流程如图 2。
|
| 图 2 电源控制过程图 Fig. 2 Illustration of the control process of an industrial control module |
本远程电源与监控系统是基于ARM9的Linux嵌入式系统,软件编程选用C语言和HTML语言。可以在其官网①(① Linux内核,http://www.kernel.org)上下载Linux内核源码包进行裁剪,搭建开发平台。为简化操作人员流程,系统采用B/S模式,即使用人员可以通过浏览器远程访问本系统,直接在浏览器下进行开关电源等相关操作。结合开发板与硬件资源情况,最终选用了Boa作为网络服务器,该软件具有小巧、高效的特点,支持通用网关接口,是ARM-Linux嵌入式系统的较好选择。源代码可在官网②(② Boa服务器,http://www.boa.org)下载。
2.1 远程电源控制实现 2.1.1 CGI技术与硬件控制为实现对硬件资源的控制,系统采用C语言进行开发。但直接采用C语言提供浏览器访问是非常困难的。为了解决用户端采用浏览器界面进行控制,而具体的控制部分采用C语言,系统采用了通用网关技术,即通用网关接口(Common Gateway Interface,CGI)技术。
通用网关接口是外部扩展应用程序与网络服务器交互的一个标准接口。通用网关接口规范定义了网络服务器如何向通用网关接口程序发送消息并接收处理结果。按照通用网关接口标准编写的通用网关接口程序[1, 2]在嵌入式网络服务器中以函数的形式实现,支持HTTP协议,编译后与网络服务器一起作为一个整体运行。当网络服务器收到网络浏览器提交的CET和POST请求,就调用通用网关接口程序,通用网关接口程序会依照请求的内容对请求进行相应处理,其工作流程如图 3。
|
| 图 3 通用网关接口工作流程图 Fig. 3 A block diagram of the CGI |
采用通用网关接口技术后,远端用户提交的各类控制参数,就可以传入C语言编写的底层控制代码中,由C代码实现硬件的控制。
2.1.2 远程电源控制的实现如前所述,远程电源控制部分的实现包括两个方面,一是HTML实现的网页部分,二是C语言实现的底层控制部分。分别说明如下:
(1)HTML的设计与表单
远程控制的网络界面采用HTML编程设计,点击不同的开关控制按钮会产生相应的参数传递给通用网关接口程序,为达到比较好的用户体验,本系统采用了Ajax技术,其中与通用网关接口参数相关的部分说明如下:
|
var state=$(btn).attr("class")=="switchOff"?1′:′0′; //开关的两种操作 $.ajax({url: "/cgi-bin/relay.cgi?n="+idx+"&s="+state,//操作后向CGI传递参数n,s type: "get", dataType:"text/html", |
如打开模块1的开关3,,就会把“n=3,s=1”传递给通用网关接口程序;关闭模块2的开关3,则吧“n=7,s=0”传递给通用网关接口程序。
(2)底层C语言控制
当本系统采用ARM9[3, 4]开发板232串口与电源开关控制电路模块进行通信,通过发送相应的二进制码流实现硬件状态的查询、开关的控制。在具体编程中,由于涉及RS232接口、485转换单元以及模块等多个部件,在通用网关接口程序中,先打开RS232串口,再将tcgetattr、tcsetattr两个用于获取与终端相关参数的函数里面的这些参数设置相同即可实现对其初始化并使用,关键代码如下:
|
struct termios options; /*定义指向termios结构类型的指针options*/
serial_port=open(PORT_NAME,O_RDWR | O_NOCTTY | O_NDELAY);
cfsetospeed(&options,(speed_t)B9600); /*指定输出波特率,9600bps*/ options.c_cflag &=~CSIZE; //屏蔽其他标志 options.c_cflag |=CS8; //将数据位修改为8bit options.c_oflag &=~(OPOST); //原始数据(RAW)输出 options.c_cflag &=~PARENB; options.c_cflag &=~CSTOPB; //设置奇偶校验位 options.c_lflag &=~(ICANON|ISIG|ECHO|IEXTEN); options.c_iflag &=~(INPCK|BRKINT|ICRNL|ISTRIP|IXON); options.c_cflag &=~CRTSCTS; //不使用数据流控制 options.c_cc[VMIN]=1; //读取字符的最小数量为1 options.c_cc[VTIME]=0; //读取第1个字符的等待时间为0 options.c_cflag |=CREAD | CLOCAL; cfmakeraw(&options); tcflush (serial_port,TCIFLUSH); //丢弃所有未读取的接收的数据 if (tcsetattr(serial_port,TCSANOW,&options)==-1) printf("Error in setting attribute\\n"); //提示串口没打开 fcntl(serial_port,F_SETFL,FNDELAY); |
先打开系统的串口,然后对其初始化。串口通信的参数设置和电源开关控制电路模块的参数保持一致。
通用网关接口脚本程序[5, 6]的核心部分,就是获取HTML提交的表单数据,判断进行操作的目标以及需要的控制状态(开或关),通过串口发送相应的二进制码流。由于参数较少,因此通用网关接口程序直接利用环境变量QUERY_STRING获得网络表单所提交的用户数据,核心具体说明如下:
|
…… printf("Content-type: text/html; charset=utf-8\\n\\n"); serial_port_open(); //初始化串口 data=getenv("QUERY_STRING"); on=atoi(n); num=atoi(s);; //分析处理参数 ralay_change(on,num); //调用控制函数发送相应的控制命令 } |
这里的环境变量QUERY_STRING就是点击网络操作产生并传递过来的参数,后面的程序则根据参数发送相应的控制指令。
2.2 远程视频监控实现视频监控是嵌入式Linux操作系统调度V4L(video4linux)和开启COMS摄像头驱动完成视频采集,借助以太网络传给远程的网络浏览器。V4L是Linux中关于视频设备的内核驱动,挂载在ARM9开发板上的COMS摄像头采用的是OV9655芯片,裁剪的Linux内核已经包含了V4L和OV9655驱动,驱动程序在/etc/init.d/rcS目录文件里,如下:
insmod /lib/modules/2.6.33.6/ov9655.ko &。
视频在远程端网络浏览器上的显示则是通过读取mjpeg-streamer推送的图片,命令如下:
mjpg_streamer-i "/lib/modules/input_cmoscamera.so-y"-o"/lib/modules/output_http.so-w
xxx.xxx.xxx.xxx: 8080"(“xxx.xxx.xxx.xxx”为系统设置的IP,下同)。
HTML程序如下:
<img src="http://xxx.xxx.xxx.xxx: 8080/?action=stream"/>
2.3 LED显示实现
系统中,LED触摸显示屏的功能是现场近距离实现电源控制和视屏监控。一块4.3寸的LED彩色液晶触摸显示屏通过GPIO口与ARM9开发板连接,加载LED显示屏驱动,即可同在远程端的PC机上一样,在网络浏览器上对接入系统的设备电源开关进行控制。可以通过S3C2440的GPG4引脚控制LCD的背光,在现场工作时置1,点亮LCD屏;在远程端控制时置0,关闭LED屏,实现低功耗。
3 系统测试与使用将编译好的通用网关接口可执行文件和HTML程序移植到系统/home/web目录中,设置系统的IP地址,打开系统电源开关并启动系统。在PC机的网络浏览器上输入配置的IP地址,可以看到系统首页如图 4;进入远程电源控制网页,点击2、4、5、7开关可看到2、4、5、7开关按钮变为红色,说明开关打开如图 5 ,此时电源开关控制模块的2、4、5、7(从右到左)路开关也被打开,如图 6。反复点击不同的电源控制按钮,均能精确实现设备电源开关的控制;进入视频监控网页即可看到COMS摄像头拍摄的流畅视频如图 5。打开LED,执行相同操作,最终得到相同的理想效果。
|
| 图 4 系统首页界面 Fig. 4 A display of the homepage of the Web interface of our system |
|
| 图 5 远程电源控制和视屏监控(Web页效果) Fig. 5 A Web-interface display of remote control of electric power and remote video monitoring of our system |
|
| 图 6 远程电源控制(实物效果) Fig. 6 A picture of the unit for remote control of electric power of our system |
远程电源控制和视屏监控系统是嵌入式系统的一个重要应用设计,在自主望远镜的监控和管理系统中有很好的实用价值。本设计利用Linux系统中的Boa型网络服务器的原理和性能,结合继电器小电流控制大电流的“开关特性”,实现了远程电源控制和视屏监控的Linux嵌入式系统。采用高度集成的ARM9开发板,达到了低功耗、高效率的设计目的,电源开关控制电路模块中工控模块的串联使用也为以后系统的拓展做好了准备。
| [1] | 王宝忠, 马成. 基于CGI技术的嵌入式动态Web的研究与实现[J]. 电子设计工程, 2012, 20(18): 161-163+166. Wang Baozhong, Ma Cheng. Study and implementation of the embedded dynamic Web based on CGI technology[J]. Electronic Design Engineering, 2012, 20(18): 161-163+166. |
| [2] | 蓝箭, 徐亮亮, 陈锋. 基于CGI技术远程网络控制方法的研究[J]. 仪表技术, 2012(2): 1-4. Lan Jian, Xu Liangliang, Chen Feng. CGI based remote network control method[J]. Instrumentation Technology, 2012(2): 1-4. |
| [3] | 郭凯凯. 基于ARM9和Linux的网络远程监控系统在机车上的应用[J]. 煤矿机械, 2012, 33(10): 211-213. Guo Kaikai. Locomotive network remote monitoring system based on ARM9 and Linux[J]. Coal Mine Machinery, 2012, 33(10): 211-213. |
| [4] | 祝红军, 朱霞. 基于ARMlinux的嵌入式远程测控系统设计[J]. 成都纺织高等专科学校学报, 2006, 23(4): 34-35. Zhu Hongjun, Zhu Xia. Embedded remote measure-control system design based on ARMlinux[J]. Journal of Chengdu Textile College, 2006, 23(4): 34-35. |
| [5] | 赵立辉, 霍春宝. 基于ARM9的远程视频监控系统的设计与实现[J].沈阳大学学报, 2009, 21(3): 108-110. Zhao Lihui, Huo Chunbao. Design and implementation of remote video monitoring system based on ARM9[J]. Journal of Shenyang University, 2009, 21(3): 108-110. |
| [6] | 曲波. 嵌入式系统安全CGI技术研究与编程[J]. 南京晓庄学院学报, 2011(3): 83-86. Qu Bo. A study on embedded system secure CGI and its programming[J]. Journal of Nanjing Xiaozhuang University, 2011(3): 83-86. |



