摘 要: 针对箱式变压器监控系统实现采集周围环境温度、湿度、局部放电量以及噪声的目标,将ARM11与温湿度采集模块AM2301相结合,通过对基于ARM11嵌入式开发板驱动程序的编写与加载,实现温、湿度的采集。将温度数据作为无线测温模块的定标数据,通过开发板的串口与无线测温、局部放电和噪声采集设备的通信来实现对输配电线的温度、变压器局部放电量和噪声的实时采集,最后通过网络将实时采集的数据发送给监控中心。
关键词: 变压器;AM2301;嵌入式;环境参数监测;网络传输
城市各居民区的箱式变电站是所辖区用户安全用电的基本设施。随着我国电网建设的发展,对供电系统的要求也越来越高。对箱式变电站环境和设备的监测,是保障变电站设备安全可靠运行的必要手段。传统的远程监测依靠串行总线来完成上位机与数字设备之间的通信,由上位机直接对数字设备进行控制。但这已经越来越显示出它的局限性:成本较高、不易扩展等。嵌入式设备性能的提高及因特网的飞速发展,为这些问题提出了新的解决方案,文中设计了以嵌入式计算机、通信设备、测控单元和传输网络为基本构成的监测系统,为变配电系统建立实时数据采集和数据传输,用监测结果作为对电力系统进行监控的依据,在电力监控系统中发挥了重要作用。
1 嵌入式箱变监测系统方案设计
根据箱变监测环境指标的要求,该箱变监测系统应具有以下基本功能:
(1)稳定可靠地采集各个环境指标数据;
(2)对各环境指标数据的采集相对独立,相互之间无干扰;
(3)与监控中心实现可靠的网络数据传输;
(4)当系统出现故障时能够自动重启,确保系统长期可靠运行。
根据箱变环境的监测需要,本系统采用体积小、功能强大的嵌入式开发板作为主要的硬件环境,与温湿度检测模块、局部放电数据采集模块和噪声采集模块相结合,并通过网络与监控中心远程通信来实现整个系统的功能,硬件总体结构如图1所示。
2 开发板硬件介绍
本系统选用Friendly ARM研制的Tiny6410开发板,其中核心板所用处理器是基于ARM11的S3C6410,板载资源有256 MB DDR RAM,2 GB SLC Nand Flash存储器,底板还提供了LCD触摸屏、USB接口、SD卡、3个通用异步串行口、网络接口等功能支持。
3 软件平台
嵌入式操作系统采用功能强大、多任务而且性能稳定的Linux操作系统,保障了良好的可裁剪和移植性,同时也便于对新增设备驱动程序进行移植开发。内核版本是Linux2.6.38,经实际检测,该系统可在S3C6410硬件平台上可靠运行。
对硬件平台上运行的程序进行编译,需要在PC上建立交叉编译环境,本次设计的交叉编译环境建立在 Linux Fedora 15 操作系统上,使用arm-linux-gcc-v6作为交叉编译器。交叉编译产生的可执行文件和驱动程序模块通过U盘存入嵌入式系统的闪存里。先通过insmod命令加载驱动程序模块到操作系统内核中,再运行数据采集应用程序。
4 系统软件设计
本系统采用C语言编程,以多线程和模块化的设计方法,可以使数据采集、控制输出和系统通信同时进行[1],其主要流程如图2所示。其中采集输配电线温度、噪声和局部放电主要通过串口与设备通信来获得数据。读取环境温、湿度则是应用程序通过Linux文件系统设备节点,驱动AM2301读取温湿度测量数据,最后将采集到的数据经过加工处理后,通过网络传送给监测中心。
4.1 看门狗设计
看门狗程序模块直接调用内核中已经存在的看门狗驱动程序,在应用程序中通过“/dev/watchdog”文件设备节点来进行访问。使用ioctl()来设定看门狗定时器的时间,并及时进行喂狗操作。当因采集或传输等模块发生故障而不能及时进行喂狗操作时,就会在达到设定时间后自动重启开发板,开发板重启后自动运行系统程序,达到长期自动运行的目的。
4.2 网络传输设计
网络传送数据根据实时性需要选择了基于UDP协议的网络传输。本系统采用单播——客户机/服务器模型。为了提高系统的安全性,与监控中心商定了加密密文格式,只有当收到正确命令后才将采集的数据与加密内容发送给监控中心,提高了安全性。在网络传输过程中,当创建套接字并绑定端口后,会一直处于监听状态,当接收到数据后,判断是否为监控端发送来的数据,若是则发送采集的数据,回到监听状态,等下一次命令到来。
4.3 AM2301驱动设计
AM2301数字温湿度传感器采用简化的单总线通信协议,温度的量程范围为:-40 ℃~+80 ℃,湿度的量程范围为:0%~100%RH[2]。3个引脚的功能如表1所示。本系统将DATA引脚接到S3C6410的GPE3,并通过5.1 kΩ上拉电阻与VDD连接后一起接到+5 V电源,将GND引脚接地即完成线路连接。
本系统将AM2301作为一个字符设备进行驱动。在Linux中,字符设备驱动是以文件的形式进行管理,其驱动需要完成打开、读写等类似针对文件的功能操作,而且可以通过在/dev目录下的文件系统设备节点进行访问[3]。字符设备驱动程序主要由字符设备加载与卸载函数和字符设备驱动file_operation结构体中的成员函数组成并通常至少要实现open、write、read和close系统调用[4]。
设计移植AM2301驱动程序时,根据其底层具体硬件特性和单总线通信协议,驱动程序主要由函数am2301_init(设备注册)、am2301_exit(设备注销)、file_operation、ReadByte(读一个字节)、am2301_read(读取完整的温、湿度测量数据)构成。由于内核空间与用户空间的内存是不能直接互访的,应用程序可以通过fd=open()打开文件设备的方式来访问驱动程序,并通过read(fd,&buffer,size)来读取采集到的数据。驱动采集温、湿度的流程图如图3所示。
读取温、湿度数据采用单总线数据格式,一次传输数据为40 bit。传感器中读出的温、湿度值是实际温、湿度值的10倍。具体格式如下:
40 bit数据=16 bit湿度数据+16 bit温度数据+8 bit校验和,例如接收到40 bit数据为:
0000 0010 1000 1101 0000 0001 0010 0001 1011 0001,若前4个字节的累加和与最后1个字节相等,如:0000 0010+1000 1101+0000 0001+0010 0001=1011 0001(校验位),则接收数据正确。由前32位的数据计算可得:
湿度:0000 0010 1000 1101=653 =>65.3%RH
温度:0000 0001 0010 0001=289 =>28.9℃
在驱动程序的编写中,因需要直接访问开发板引脚,故需掌握基于S3C6410的GPIO操作。如配置GPIO方向(gpio_direction_output())、读取GPIO的值(gpio_get_value())、释放GPIO(gpio_free())等。
通过AM2301采集环境的温湿度,其中温度数据作为无线测温设备的定标数据,通过无线测温模块与ARM11的串口通信来采集输配电线的温度。
将驱动模块和交叉编译生成的可执行文件放在开发板“/etc/init.d”目录下的“rcS”脚本文件下运行,这样完成了开发板启动后自动运行系统程序的功能。配合看门狗技术的运用,使系统在异常情况下能自动恢复,提高了系统的可靠性和自维护性。
4.4 数据通信
网络监听传送数据与采集温湿度、局部放电、噪声等模块在不同线程中独立并行运行。其中采集输配电线温度、局部放电与噪声通过开发板的串口通信实现,根据采集设备的通信协议设置其串口。在Linux中,串口文件位于“/dev”下,直接通过open()打开串口,设置串口可通过设置struct termios结构体的各成员来实现。
串口程序设计的基本步骤:(1)打开设备文件open();(2)获取当前设备方式tcgetattr();(3)设置termios成员c_
lflag、c_oflag、c_cflag等;(4)使用cfsetispeed和cfsetospeed通信设置波特率;(5)使用tcsetattr设置设备工作方式。当串口设置好后,直接通过read()和write()即可与采集设备通信,通过发送命令获得采集数据。
4.5 多线程控制
为了使各模块之间独立运行并提高采集的效率和监控的实时性,本系统采用多个线程并行通信的方式来实现控制。不同的线程间可以直接访问其他线程的数据[6],简化了控制的难度,其中采集环境温度和湿度ThreadTH()、输配电线温度Threadtem()、噪声Threadnoise()、局部放电threadJF()分别由4个线程进行控制,另外再创建一个线程Threadcontrl()来控制采集的4个线程。当4个线程中任何一个采集模块出现故障时,控制线程将结束该线程并重新创建新的线程来进行采集。其线程控制结构图如图5所示。控制方法为:各采集模块每完成一次采集就获得一次系统时间,控制模块也实时获得系统时间,将控制模块中获得的时间与采集模块中的时间间隔相比较,超过一定设定值后,则认为该采集模块出现故障,控制线程会结束该线程,延时片刻重新创建新线程进行采集。
本系统选择采用基于S3C6410为主处理器的开发平台和开源的Linux作为嵌入式操作系统,并完成交叉工具链的生成、驱动程序的加载等。完成了AM2301驱动程序的设计与开发,将驱动程序移植到嵌入式开发板中,实现温、湿度数据实时采集功能。将采集温/湿度、局部放电与采集噪声各模块相结合,完成了实时采集箱变环境参数的监测系统,并通过线程实时控制方法和一系列措施确保系统能够长期稳定运行,并具良好的扩展性和通用性。
参考文献
[1] 王彬,程雪.一种基于ARM的温室数据采集系统的设计 [J].安徽农业科学,2011,39(12):7466-7467.
[2] 何燕阳.基于AM2301的消毒熏箱温湿度控制系统设计 [J].智能计算机与应用,2012,2(4):2095-2163.
[3] 黄驰.基于ARM11和Linux的DS18B20温度测量系统设 计及实现[J].软件导航,2012,11(6):1672-7800.
[4] 刘继忠,邱于兵,黄翔.基于ARM的远程温湿度监控系统 的设计[J].仪表技术与传感器,2012(8):1002-1841.
[5] 宋宝华.Linux设备开发详解[M].北京:人民邮电出版社,2007.
[6] 吴宇佳,浦伟,周妍,等.Linux下多线程数据采集研究与实现[J].通信技术,2012(7):1009-8054.