APP下载

新型电源装置的嵌入式监控系统的设计与实现

2013-11-30徐红艳佃松宜

计算机工程与设计 2013年12期
关键词:线程嵌入式电源

徐红艳,佃松宜,邓 翔,王 琪

(四川大学 电气信息学院,四川 成都610065)

0 引 言

高压直流供电系统 (high voltage direct current power system,HVDCPS)给数据中心和通信机房设备供电时,在供电可靠性、降低能耗和成本、便于日常维护等方面比传统不间断电源系统显现出较大优势,因而受到业界广泛关注。2012年国际国内相关标准也已颁布实施[1,2]。作者所在课题组成功研制出通信用240VHVDCPS新型电源装置。

电源监控是通信用电源装置中进行实时监控、自动监测、故障早期预警和优化运行等的关键技术。该技术目前的发展趋势是高可靠性、高实时性、可扩展、易维护以及友好人机交互图形用户界面[3]。这就要求监控系统对监控对象的状态变化和用户操作做出更加快速的响应,能够不间断、稳定、可靠、实时地对通信电源设备进行监测与预警。嵌入式技术的应用让这种需求成为可能。本系统从技术需求出发,基于ARM平台和Qt开发工具,采用三级集散式监控结构,应用计算机控制和总线通信技术,模块化设计,实现对新型电源装置的嵌入式实时监控。

1 监控系统功能的需求分析

监控系统需要检测的信号有:交流输入、整流模块、母线和负载支路的各种电压和电流,蓄电池组和各单体电池的电压、电流和温度,以及系统其它状态量等。

根据相关标准技术要求和系统实际需求,监控系统应具有的功能概况如下:

(1)监测交直流电压和电流,对异常状况进行保护并报警。

(2)实时检测蓄电池组及各单体电池的电压和温度,对异常状况进行保护并报警。对蓄电池进行管理,在均充与浮充之间智能切换。

(3)检测母线和各负载支路的绝缘状态,绝缘下降至不符合要求时进行告警。

(4)记录系统历史数据,以及系统正常工作时的关键参数动态曲线显示。

(5)提供人机接口,通过真彩显示屏和触摸屏,实时显示系统运行参数,可进行系统模块配置、参数设置和系统维护等。

(6)支持远程监控功能。

2 系统整体结构设计

本监控系统由ARM主控模块、电池管理模块、绝缘监测模块和配电监控模块4个模块组成。ARM主控模块协调其它各模块,对系统整体性能进行优化分析;电池管理模块,绝缘监测模块和配电监控模块可独立运行,对电源系统各个部分进行独立控制。当某一模块出现故障不会导致系统其它功能丧失;当系统要增加设备时,可增加功能模块的数目,易于扩展;当某一模块出现故障时,可以在不影响整个系统运行的情况下更换模块,迅速排除故障。系统整体结构如图1所示。

图1 监控系统整体结构

系统采用分布式检测结构。电流电压等传感器和其它转换电路在底层通过各模拟量、数字量采集模块,再通过4条CAN总线向ARM主控制器上传。另外,上层也可以通过数字量输出模块来直接控制继电器和相关开关器件的开断。整流模块中的DSP控制器通过CAN总线接受ARM主控制器的管理。

监控系统中ARM处理平台选用Atmel公司的AT91SAM9G45处理器,处理器频率达到400MHz,带有一个7寸LCD显示屏和一个触摸屏[4]。选用抗电磁干扰能力强的CAN总线实现数据通信[5]。操作系统选用嵌入式Linux,并在其上移植Qt/Embedded库。

3 监控系统软件设计

3.1 软件平台的搭建

系统软件平台的搭建比较复杂,包括虚拟机的安装、交叉编译环境的建立、Linux内核的移植、文件系统的制作、NFS系统的搭建、Qt和Qwt的安装以及Qt、Qwt和tslib向开发板的移植等。

本系统程序的开发是在装有Ubuntu 11.10版本Linux操作系统的宿主机上完成的。在宿主机上建立Qt/Embedded开发环境是开发GUI程序的首要步骤[6]。

3.2 程序设计

本监控系统程序由数据采集与控制程序和人机交互界面程序两部分组成,并通过Linux进程间共享内存的方式完成数据的传递,实现原理如图2所示。

图2 共享内存方式原理

管道和消息队列等通信方式,需要在内核和用户空间进行四次数据拷贝。而共享内存只拷贝两次:一次从输入文件到共享内存区;另一次从共享内存区到输出文件。因此,共享内存是一种较快的进程通信方式。系统使用mmap(内存映射)方式传递数据,mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存[7]。共享内存区由一个进程创建,其余进程也可以访问这块内存,直接读写数据,数据不需要在进程间进行复制操作。为了达到进程间的同步及互斥,需要与其它通信机制结合使用[8]。

设计中采用Mutex技术实现进程同步[9]。当一个线程尝试操作共享内存区域前,先检查是否已被Mutex锁定。如果已被锁定,则进入等待状态,同时启动超时计数器,当线程等待超时完毕,则重新尝试访问共享内存区域;如果未被锁定,则创建一个Mutex,以锁定共享内存,同时启动超时计数器,然后开始操作共享内存,当线程的锁定超时完毕,则对Mutex执行解锁,以释放共享区域的操作权限,以避免死锁。

3.2.1 数据采集

本嵌入式系统采用多线程和多进程技术实现数据采集、控制、数据处理等同时进行,从而提高程序的处理效率。程序流程图如图3所示。

图3 数据采集程序流程

监控系统在Linux下建立一个读取CAN数据采集模块的程序。系统首先进行初始化,建立共享内存,然后打开串口设备和CAN接口设备,并设置初始值。主节点(ARM主控模块)向从节点 (CAN数据采集模块)发送请求数据命令,各数据采集模块通过CAN总线将数据上传到ARM主控模块的接收缓存区。ARM主控模块从缓存区读取数据,根据帧头判断数据类型和数据长度并进行处理,将数据保存在共享内存中。

系统创建一个线程通过事件驱动实现数据接收,并将数据保存在缓冲区中,防止因数据量过大造成界面假死[10]。Qt自身拥有QThread线程类,并提供创建新线程的方法。线程通过重载QThread::run()函数完成其操作。通过调用QThread::start()开启线程,线程一直循环读取共享内存中的数据,为界面刷新提供即时数据。Qt线程中无法直接操作主进程中的GUI控件,即无法在线程中对一个具体的标签或者文本栏做修改,只能依靠 “信号与槽”的方式,每当线程完整的读一次共享内存中的结构体,就发出信号。

不同的界面需要刷新的数据不同,因此线程必须针对不同界面定义相应的信号。本文采用自定义结构化消息的方式来实现采集数据的异步显示。自定义的结构化消息包括消息编码、通道编码、数据类型、采集内容。系统所有的采集数据在发送前按照统一的消息结构进行组包,然后发送到数据接收线程;数据接收线程按照消息编码进行分拣,分别调用对应的消息处理函数进行解包、数据转换和动态显示。

3.2.2 现场数据预处理

为防止干扰信号引起错误报警,对现场采集数据进行数字滤波预处理。以直流母线电压为例介绍软件滤波器的设计过程。

电池并联在直流母线上,因此直流母线电压等于电池电压。根据电池充、放电特性,直流母线电压的波动频率在1Hz以下,留有一定裕量将截止频率设为10Hz。系统采样频率为100Hz,采用文献[11]的方法计算出对应的离散传递函数为

根据传递函数式 (1)可得

按照式 (2)实现滤波器方法如下:

3.2.3 数据存储与管理

在主控程序中实现对数据库的操作,数据库主要对实时数据进行保存和处理,对历史数据进行维护和访问,完成数据的查询、修改、设置、浏览等功能。电源监控软件在运行时,自动建立一个SQLite数据库,然后在数据库中创建数据表,数据表中创建报警、日期、蓄电池状态等字段。对于大批量数据,引用数据库中 “事务”的概念,将其当做一次事务从而大大加快批量数据的操作速度。数据保存在以 “.db”为后缀的数据库文件中方便备份和转移,只需要拷贝该数据库文件就可实现整个数据库的备份。

3.2.4 人机界面设计

采用Qt Designer工具绘制用户界面[12],利用独有的布局系统使窗口和组件自动根据屏幕空间的大小改变布局。根据监控系统的基本功能,制定了图4所示电源监控系统 的界面应用程序开发框架方案。

图4 基于Qt/Embedded的界面应用程序开发框架

监控系统的主界面包括设置、操作、状态、系统信息、历史记录、通信连接、时间、语言、帮助等界面。各界面又包含其它子界面。为了便于界面修改且易于灵活扩展,将主界面 (MainWindow)分成3个子项:TitleBar、CenterView、StatuBar,同时这3个子项内部管理各自的视图。MainWindow通知TitleBar切换页面,TitleBar负责切换主窗口和其他各界面;CenterView通知MainWindow页面切换后做必要的处理,负责内部页面的切换逻辑以及当界面切换时通过信号告诉MainWindow做相应反应。当某个界面只需由TitleBar和CenterView组成时,可发送信号隐藏StatuBar。

3.2.5 Qwt绘制动态曲线

本文采用Qwt工具库完成电源电压、电流、温度等动态曲线的绘制。下面是曲线类的关键代码:

Qwt画曲线是先建立画图区域qwtPlot,然后往上面添加曲线和点,在一个特定区间所计算的数目越大画出来的曲线越平滑。曲线需绘制在画布上,它继承自QwtPlot-Curve类。由于是实时显示,图形与横坐标随着时间平移,利用QObject的timerEvent()函数来实现此功能[13]。每经过一定的周期,图形的横坐标发生平移,曲线需要重绘,时间间隔由QTimerEvent类型的参数决定,将默认值设为每秒刷新一次。

除了要动态监控波形外,还需要对电源电压、电流及温度波形进行分析,以测评效果的优劣,所以波形的滚动缩放查看效果是必不可少的。这个功能主要用QwtPlotZoomer类来实现,下面是实现曲线滚动缩放的关键代码:

4 测试结果

将整个工程交叉编译并下载到目标机上运行。在测试过程中,主要观察了监控系统的状态主界面以及实时曲线界面。经过长期运行测试,在未出现市电异常或断电报警的情况下,状态主界面显示如图5所示,状态主界面显示了整个电源装置各主要组成部分的运行状态,点击图标可以切换到其它界面了解各组成部分的状态或进行设置等相关操作。界面之间可以自如切换和刷新各种数据。

图5 状态主界面

图6 为直流母线电压的实时曲线波形。由波形可以看出,在开机至1秒后,整流模块的电压能够迅速上升到240 V的标称电压值。另外系统达到稳态之后,输出电压的平均值稳定在239.5V,满足直流母线电压240±2.4V的要求。

图6 直流母线电压实时曲线

5 结束语

本文给出了新型电源监控系统的功能需求分析和整体结构,基于ARM9+Linux+CAN总线的平台,使用Qt编程技术,充分利用 “信号与槽”的独特机制和丰富的控件资源。采用进程间共享内存和Mutex技术实现进程同步来完成数据的传递,有效提高进程间数据通信效率;采用软件滤波方法对现场数据进行预处理,并通过SQLite数据库实现数据存储管理。经测试,本嵌入式监控系统能够稳定运行于课题组开发的240VHVDCPS新型电源中,实现了可靠、实时地对电源设备各种状态参数进行嵌入式监测与预警,人机交互界面友好,对类似电源装置或其它工业嵌入式监控系统有一定的借鉴作用和较好的应用前景。

[1]ITU-TL.1200,Direct current power feeding interface up to 400 V at the input to telecommunication and ICT equipment[S].2012.

[2]YD/T 2378-2011,240Vdirect current power supply system for telecommunication[S].2011(in Chinese).[YD/T 2378-2011,通信用240V直流供电系统[S].2011.]

[3]ZHOU Xiaoming.Study of network monitoring of UPS power based on ARM[D].Huainan:Anhui University of Technology,2009(in Chinese).[周晓明.基于ARM的UPS电源网络监控系统的研究[D].淮南:安徽理工大学,2009.]

[4]LIU Liang,LAI Wanchang,LI Ming.Design and implementation of image transfer system with GPRS based on ARM9[J].Computer Engineering and Design,2010,31 (7):1477-1480(in Chinese).[刘良,赖万昌,黎明.基于ARM9的GPRS图像传输系统的设计与实现[J].计算机工程与设计,2010,31(7):1477-1480.]

[5]YUE Xiumei,MA Xuejun,KANG Yong.Design on monitoring system of high-power inverter based on CAN bus[J].Electrical Measurement &Instrumentation,2008,45 (10):37-40(in Chinese).[岳秀梅,马学军,康勇.基于CAN总线的大功率逆变电源监控系统设计[J].电测与仪表,2008,45 (10):37-40.]

[6]ZHANG Genbao,PANG Sujuan.An embedded image processing system based on Qt[J].Advances in FCCS,2012:311-316.

[7]WU Zhen,CHEN Yaowu.A kind of message-based interprocess communication[J].Chinese Journal of Electron Devices,2006,29(4):1218-1226(in Chinese).[吴震,陈耀武.一种基于消息的进程间通信机制[J].电子器件,2006,29 (4):1218-1226.]

[8]CHEN Liding,LV Shenglin.Design of lower computer in environment monitoring system based on multilthread[J].Industry and Mine Automation,2010,12(12):13-16(in Chinese).[陈立定,吕盛林.基于多线程的环境监控系统下位机的设计[J].工矿自动化,2010,12 (12):13-16.]

[9]SUN Yingying,ZHENG Kougen.File monitoring system based on minifilter[J].Journal of Computer Applications,2011,30 (11):3115-3117(in Chinese).[孙莹莹,郑扣根.基于微过滤驱动的文件监控系统[J].计算机应用,2011,30 (11):3115-3117.]

[10]GAO Qiang,XU Yong.Design of on-board HMI terminal based on Qt/E and ARM[J].Computer Measurement &Control,2012,20(1):236-238(in Chinese).[高强,许勇.基于ARM和Qt/E的车载HMI终端的设计[J].计算机测量与控制,2012,20(1):236-238.]

[11]CHEN Yong,DU Liang,SONG Ninghua.Fast design method of soft filter[J].Journal of Yancheng Institute of Technology,2006,19 (2):25-27 (in Chinese).[陈勇,堵亮,宋宁化.软件滤波器的快速设计以及用C语言实现滤波器的功能[J].盐城工业学报,2006,19 (2):25-27.]

[12]CHEN Xi,LV Xianghua,LIU Yan.Design of new modular industrial controller based on embedded Linux[J].Instrument Technique and Sensor,2010 (11):27-29 (in Chinese).[陈曦,吕湘晔,刘艳.基于嵌入式Linux新型模块化工业控制器设计[J].仪表技术与传感器,2010 (11):27-29.]

[13]SUN Yifan,GUO Tangyong,ZOU Tong,et al.Developing seismic data processing system using Qt library[J].Journal of Geodesy and Geodynamics,2010,31 (6):138-141(in Chinese).[孙一帆,郭唐永,邹彤,等.使用Qt库开发地震数据处理系统的分析与设计[J].大地测量与地球动力学,2010,31(6):138-141.]

猜你喜欢

线程嵌入式电源
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*
Cool Invention炫酷发明
TS系列红外传感器在嵌入式控制系统中的应用
搭建基于Qt的嵌入式开发平台
哪一款移动电源充电更多?更快?
阳光电源
倍福 CX8091嵌入式控制器