吴光华 闫怀海 陈又新 黄玉珍 周忠祖 高大庆
1(中国科学院大学物理学院 北京 100049)
2(中国科学院近代物理研究所 兰州 730000)
电源系统是兰州重离子加速器冷却存储环(Heavy Ion Research Facility in Lanzhou - Cooler Storage Ring, HIRFL-CSR)的重要系统之一,其运行的稳定性将直接影响到加速器束流的质量,进而间接影响加速器物理实验的结果。为了得到质量更好的束流,加速器电源的性能十分重要。近年来,数字控制技术在兰州重离子加速器电源中得到逐步应用,各种在模拟电路中难以实现的功能在数字电源中变得轻而易举[1]。电源实时运行数据记录与保存对加速器磁铁电源故障处理和运行维护十分重要,通过对每一台电源的实时运行数据记录、积累和分析,可以随时掌握了解电源性能,从而提高电源性能。本文将嵌入式数据库MySQL应用在兰州重离子加速器四级磁铁数字电源中,实现加速器电源运行状态采集、储存,然后统计和智能分析等。
兰州重离子加速器四级磁铁数字电源由功率变换器和基于 FPGA组成的数字控制器两部分组成[2]。本文以ARM处理器为基础,设计了一个基于Linux+MySQL 的数据储存方案,通过与 FPGA数字控制器的通讯,实现了四级磁铁数字电源运行状态采集,并存入MySQL数据库中。系统整体结构如图1。
图1 数字电源实时监控系统结构图Fig.1 Structure of the real-time monitoring system of the digital power supply.
ARM11是目前广泛应用的一种嵌入式处理器,其主要特点是以32位的处理成本,提供64位处理器性能的解决方案。在 ARM11处理中,内核和Cache,以及处理器之间的数据通路都是64位。可以每周期读入两条指令或存放两条连续的数据,大大提高数据访问和处理的速度,和64位处理器性能相差无几。而且拥有更多多媒体处理指令使MPEG4编码/解码加快一倍[3],可以方便开发出更友好、智能化的数字电源界面,基于它加速器数字电源实时监控系统可以方便实现。
目前,国内加速器电源运行状态数据管理大都采用基于文件系统的存储结构。由用户直接对记录所在的文件进行操作,I/O开销较大,同时由于应用程序是以独占方式打开数据文件,数据共享和应用软件的可重用性很差[4]。同时有别于远程PC的电源数据库,嵌入式数据库大大减小了互联带宽的要求。在本系统中,以ARM11处理器为核心,与FPAG建立通讯联系,通过规模小(在Linux下编译完成只有约30 MB)、速度快、可移植到ARM上的功能全面的嵌入式MySQL数据库系统来管理数据可以较好解决这些问题,而且支持多个用户通过以太网对数据库进行远程访问[5],使电源数据库的访问、管理效率大大提高,进一步提高电源运行维护效率,是现在加速器电源管理维护的一个创新。
嵌入式数据库MySQL安装在ARM处理器上,通过RS485接口与电源控制系统的FPGA通信。实现过程主要分为用户软件设计、底层硬件驱动开发、底层硬件接口设计。ARM上用户层与FPGA之间数据流通如图2。
图2 数据流通图Fig.2 Data flow between user and FPGA.
2.1.1 用户软件层关键技术
用UART_fd(设备号)和QSocketNotifier::Read(串口可读状态描述)作为参数构造一个QSocketNotifier 实例,配合 Qt 的 signal/slot 机制来监听系统RS485设备文件操作,当有数据可读时,QSocketNotifier对象 m_notifier就发射 ativated 信号,读串口槽函数remoteDataIncoming()就被调用。
QSocketNotifier m_notifier = new QSocket Notifier(UART_fd, QSocketNotifier::Read, this);
connect (m_notifier, SIGNAL(activated(int)), this,SLOT(remoteDataIncoming()))。
2.1.2 底层驱动关键技术
RS485是半双工通信,发送接收共用一个使能端[6]。在读写串口RS485过程中,底层驱动准确、及时切换使能电平信号非常重要,也是本文的一个难点,是否能与FPGA正常通信的关键点。数据要发送时,中断处理函数s3c6410_485_tx_chars()先调用使能端 GPK(5)高电平设置函数s3c6410_485_start_tx(),将使能端 GPK(5)设成高电平;数据发送结束,中断处理函数 s3c6410_485_tx_chars()调用使能端 GPK(5)低电平设置函数s3c6410_485_stop_tx()立即将使能端 GPK(5)设成低电平等待FPAG发送数据,在此期间屏蔽掉其它中断源。
使用arm-linux-gcc 4.3.2作为交叉编译器,目标机ARM芯片为Samsung6410,目标机内核版本为3.0.1,MySQL包版本为Mysql-5.1.51。
2.2.1 Ubuntu下编译 ARM平台 QtEmbedded的
MySQL
(1) 配置环境变量
export
PATH=/usr/local/arm/4.3.2/bin:$PATH
export
CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc
export config_BUILD_CC=gcc
export config_TARGET_CC=arm-linux-gcc
(2) 编译ncurses库
ncurses是MySQL编译的依赖库,因此必须对ncurses进行交叉编译,创建库文件 libncurses.a之后,才能够对MySQL数据库进行交叉编译。本文使用版本为5.6的ncurses。
首先,使用 configure脚本生成 Makefile:“./configure --prefix=/sdcard/ncurses/ncurses
--host=arm-linux --target=arm-linux
--with-build-cc=cc --with-build-cpp=cpp
--with-shared --with-normal”
然后,运行 make和 make install命令完成ncurses交叉编译。
(3) 交叉编译MySQL
首先,配置configure./configure--host=arm-linux--enable-static--with-named-curses-libs=
/sdcard/ncurses/lib/libncurses.a
--prefix=/sdcard/mysql --without
-debug --without-docs --without-man--without-bench --with-charset=gb2312--with-extra-chars ets=ascii, latin1, utf8
运行make和make install命令完成MySQL交叉编译。
(4) 编译MySQL插件
cd /opt/qt4.7.1/src/plugins/sqldrivers/mysql修改mysql.pro文件,添加如下两行:
INCLUDEPATH += /sdcard/mysql/include/mysql LIBS += -L/sdcard/mysql/lib/mysql -lmysqlclient_r
然后在超级终端运行 qmake mysql.pro、make和make install命令完成MySQL插件编译。
2.2.2 移植相应文件到ARM平台
把 PC上交叉编译的 MySQL文件及相应的MySQL插件拷到SD卡和相应的路径,然后在ARM板上插入SD卡、配置MySQL,完成MySQL移植。
2.3.1 硬件设计
电源开机后,ARM 以 1秒钟查询十次的频率向FPGA发送电源运行状态查询指令。每一条查询返回指令解析后转化成电源相应的运行状态记录。运行一年的数据储存空间大小约10个G。利用ARM系统的SD卡接口,把电源运行状态记录储存在SD里。这样一来可将数据存储空间提升到64 G,二来降低内部储存器的占用,提高嵌入式处理器的效率。
2.3.2 软件设计
电源运行状态信息从RS485缓冲区到MySQL数据库处理流程包括装入二级缓冲区、帧完整性及类型判断、帧解析及数据储存。二级缓冲区是一个先进先出的循环缓冲区, 有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针来实现缓冲区的数据读取和写入。当RS485缓冲区数据可读,则调用读 RS485函数remoteDataIncoming(),将数据装入二级缓冲区,并判断读的字符是不是帧尾,如果是则将二级缓冲区的可读字符串读取并传递给帧完整性及类型判断函数。双缓冲区结构确保了指令完整性,是应用层的一个关键点,也是本文的第二个难点。
帧完整性及类型判断处理主要功能是判断帧是否满足通信协议规范,如果满足规范,则判断其类型,是查询返回响应帧就将其传递给指令解析函数。指令解析函数根据相应的电源状态位解析出电源的运行状态、输出模式、电流、电压等。解析结束调用MySQL数据库的C++ API函数,将运行记录对应于MySQL数据库电源运行状态表相应的属性保存到MySQL数据库中。软件流程图如图3。
图3 软件流程图Fig.3 Software flow chart.
数据访问主要有两种:一种是本地访问——即在电源查询界面上直接访问数据库的电源运行状态,这种方式的特点就是直接,数据处理不方便。另一种是远程在线访问,通过网络通信方式访问电源上的MySQL数据库。这种访问方式适合大量数据处理,很方便电源管理员查看电源的运行情况和分析电源的性能。
MySQL数据库远程访问需要更改 "mysql" 数据库里的 "user" 表里的 "host" 项,把"localhost"改成相应的 IP;同时,指定授权(GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION),使用myuser/mypassword设置从主机连接到 mysql数据库的权限。
为了增强MySQL 数据库系统的性能,MySQL数据库为客户端提供了许多应用程序接口,如C、C++、JAVA( JDBC)、Perl、Python、PHP 和 TCL 的API 接口,极大方便了各种用户对数据库的访问[7]。
本文把MySQL数据库和Qt图形界面系统结合起来,通过MySQL数据库系统的C++ API函数调用来实现图形化的方式访问MySQL数据库。从存放电源状态记录的表中查询我们想要的结果,如开机、关机、故障等的时间、电流、电压。管理人员可以在电源上直接通过界面了解电源的运行情况,也可以通过远程在线访问电源的运行情况。可以通过短期的数据来分析某一个时间段的运行效果,也可以通过几年的运行数据来分析电源整体性能。同时,还实现了删除检索出来的全部记录、清空整张表、备份数据库和恢复数据库的功能。MySQL数据库系统从现在的实际运行情况看,取得了理想的效果。电源运行状态查询界面如图4。
图4 电源运行状态查询界面Fig.4 Power supply operation status query interface.
利用ARM11处理器系统和MySQL数据库,在兰州重离子加速器数字四级铁电源上成功实现了电源状态及相关信息的收集和存储。实际应用表明设计的查询界面友好、数据读取速度较快、数据存数可靠性高,达到了设计要求。同时经过实际应用,发现本系统还有许多可改进的地方,例如优化长时间稳定运行时的数据储存,下一步我们将观察与分析电源系统的长期运行情况,以期完善重离子加速器数字化的电源实时监控系统。
1 王进军. 加速器电源的数字化研究与设计[D]. 中国科学院近代物理研究所, 2009: 3–4 WANG Jinjun. Research and design of accelerator digital power[D]. Chinese Academy of Sciences Institute of Modern Physics, 2009: 3–4
2 王荣坤. 医用重离子加速器电源专用数字调节器的研究与设计[D]. 中国科学院近代物理研究所博士学位论文, 2013: 14–27 WANG Rongkun. Research and design of heavy ion medical accelerator power supply special digital regulator[D]. China Academy of Sciences Institute of Modern Physics, 2013: 14–27
3 朱小远, 谢龙汉. Linux嵌入式系统开发[M]. 北京: 电子工业出版社, 2012: 53–54 ZHU Xiaoyuan, XIE Longhan. Linux embedded system development[M]. Beijing: Electronics Industry Publishing House, 2012: 53–54
4 祁继超, 张琳娜, 郑鹏, 等. 嵌入式磨削加工主动测量仪数据管理技术研究[J]. 电力电子应用, 2013, 39: 7–9 QI Jichao, ZHANG Linna, ZHENG Peng,et al. Research on data management technology for active measurement embedded grinding machining[J]. Application of Power Electronics, 2013, 39: 7–9
5 张碧武, 杨丰萍. 基于嵌入式Linux MySQL数据库的图形化管理[J]. 华东交通大学学报, 2007, 24(5):121–124 ZHANG Biwu, YANG Fengping. An embedded Linux MySQL database based on the graphical management[J].Journal of East China Jiaotong University, 2007, 24(5):121–124
6 郑德华, 陶继伟. RS485通信协议在集散控制系统中的应用[J]. 中国仪器仪表, 2005, 25(9): 95 ZHENG Dehua, TAO Jiwei. RS485 communication protocol in distributed control system[J]. China Instrumentation, 2005, 25(9): 95
7 Petrovsky M. Linux数据库宝典[M]. 北京: 电子工业出版社, 2002: 179–200 Petrovsky M. Linux database collection[M]. Beijing:Publishing House of Electronics Industry, 2002: 179–200