吳光華 閆懷海 陳又新 黃玉珍 周忠祖 高大慶
1(中國科學院大學物理學院 北京 100049)
2(中國科學院近代物理研究所 蘭州 730000)
電源系統(tǒng)是蘭州重離子加速器冷卻存儲環(huán)(Heavy Ion Research Facility in Lanzhou - Cooler Storage Ring, HIRFL-CSR)的重要系統(tǒng)之一,其運行的穩(wěn)定性將直接影響到加速器束流的質量,進而間接影響加速器物理實驗的結果。為了得到質量更好的束流,加速器電源的性能十分重要。近年來,數(shù)字控制技術在蘭州重離子加速器電源中得到逐步應用,各種在模擬電路中難以實現(xiàn)的功能在數(shù)字電源中變得輕而易舉[1]。電源實時運行數(shù)據(jù)記錄與保存對加速器磁鐵電源故障處理和運行維護十分重要,通過對每一臺電源的實時運行數(shù)據(jù)記錄、積累和分析,可以隨時掌握了解電源性能,從而提高電源性能。本文將嵌入式數(shù)據(jù)庫MySQL應用在蘭州重離子加速器四級磁鐵數(shù)字電源中,實現(xiàn)加速器電源運行狀態(tài)采集、儲存,然后統(tǒng)計和智能分析等。
蘭州重離子加速器四級磁鐵數(shù)字電源由功率變換器和基于 FPGA組成的數(shù)字控制器兩部分組成[2]。本文以ARM處理器為基礎,設計了一個基于Linux+MySQL 的數(shù)據(jù)儲存方案,通過與 FPGA數(shù)字控制器的通訊,實現(xiàn)了四級磁鐵數(shù)字電源運行狀態(tài)采集,并存入MySQL數(shù)據(jù)庫中。系統(tǒng)整體結構如圖1。
圖1 數(shù)字電源實時監(jiān)控系統(tǒng)結構圖Fig.1 Structure of the real-time monitoring system of the digital power supply.
ARM11是目前廣泛應用的一種嵌入式處理器,其主要特點是以32位的處理成本,提供64位處理器性能的解決方案。在 ARM11處理中,內核和Cache,以及處理器之間的數(shù)據(jù)通路都是64位??梢悦恐芷谧x入兩條指令或存放兩條連續(xù)的數(shù)據(jù),大大提高數(shù)據(jù)訪問和處理的速度,和64位處理器性能相差無幾。而且擁有更多多媒體處理指令使MPEG4編碼/解碼加快一倍[3],可以方便開發(fā)出更友好、智能化的數(shù)字電源界面,基于它加速器數(shù)字電源實時監(jiān)控系統(tǒng)可以方便實現(xiàn)。
目前,國內加速器電源運行狀態(tài)數(shù)據(jù)管理大都采用基于文件系統(tǒng)的存儲結構。由用戶直接對記錄所在的文件進行操作,I/O開銷較大,同時由于應用程序是以獨占方式打開數(shù)據(jù)文件,數(shù)據(jù)共享和應用軟件的可重用性很差[4]。同時有別于遠程PC的電源數(shù)據(jù)庫,嵌入式數(shù)據(jù)庫大大減小了互聯(lián)帶寬的要求。在本系統(tǒng)中,以ARM11處理器為核心,與FPAG建立通訊聯(lián)系,通過規(guī)模?。ㄔ贚inux下編譯完成只有約30 MB)、速度快、可移植到ARM上的功能全面的嵌入式MySQL數(shù)據(jù)庫系統(tǒng)來管理數(shù)據(jù)可以較好解決這些問題,而且支持多個用戶通過以太網對數(shù)據(jù)庫進行遠程訪問[5],使電源數(shù)據(jù)庫的訪問、管理效率大大提高,進一步提高電源運行維護效率,是現(xiàn)在加速器電源管理維護的一個創(chuàng)新。
嵌入式數(shù)據(jù)庫MySQL安裝在ARM處理器上,通過RS485接口與電源控制系統(tǒng)的FPGA通信。實現(xiàn)過程主要分為用戶軟件設計、底層硬件驅動開發(fā)、底層硬件接口設計。ARM上用戶層與FPGA之間數(shù)據(jù)流通如圖2。
圖2 數(shù)據(jù)流通圖Fig.2 Data flow between user and FPGA.
2.1.1 用戶軟件層關鍵技術
用UART_fd(設備號)和QSocketNotifier::Read(串口可讀狀態(tài)描述)作為參數(shù)構造一個QSocketNotifier 實例,配合 Qt 的 signal/slot 機制來監(jiān)聽系統(tǒng)RS485設備文件操作,當有數(shù)據(jù)可讀時,QSocketNotifier對象 m_notifier就發(fā)射 ativated 信號,讀串口槽函數(shù)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是半雙工通信,發(fā)送接收共用一個使能端[6]。在讀寫串口RS485過程中,底層驅動準確、及時切換使能電平信號非常重要,也是本文的一個難點,是否能與FPGA正常通信的關鍵點。數(shù)據(jù)要發(fā)送時,中斷處理函數(shù)s3c6410_485_tx_chars()先調用使能端 GPK(5)高電平設置函數(shù)s3c6410_485_start_tx(),將使能端 GPK(5)設成高電平;數(shù)據(jù)發(fā)送結束,中斷處理函數(shù) s3c6410_485_tx_chars()調用使能端 GPK(5)低電平設置函數(shù)s3c6410_485_stop_tx()立即將使能端 GPK(5)設成低電平等待FPAG發(fā)送數(shù)據(jù),在此期間屏蔽掉其它中斷源。
使用arm-linux-gcc 4.3.2作為交叉編譯器,目標機ARM芯片為Samsung6410,目標機內核版本為3.0.1,MySQL包版本為Mysql-5.1.51。
2.2.1 Ubuntu下編譯 ARM平臺 QtEmbedded的
MySQL
(1) 配置環(huán)境變量
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進行交叉編譯,創(chuàng)建庫文件 libncurses.a之后,才能夠對MySQL數(shù)據(jù)庫進行交叉編譯。本文使用版本為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發(fā)送電源運行狀態(tài)查詢指令。每一條查詢返回指令解析后轉化成電源相應的運行狀態(tài)記錄。運行一年的數(shù)據(jù)儲存空間大小約10個G。利用ARM系統(tǒng)的SD卡接口,把電源運行狀態(tài)記錄儲存在SD里。這樣一來可將數(shù)據(jù)存儲空間提升到64 G,二來降低內部儲存器的占用,提高嵌入式處理器的效率。
2.3.2 軟件設計
電源運行狀態(tài)信息從RS485緩沖區(qū)到MySQL數(shù)據(jù)庫處理流程包括裝入二級緩沖區(qū)、幀完整性及類型判斷、幀解析及數(shù)據(jù)儲存。二級緩沖區(qū)是一個先進先出的循環(huán)緩沖區(qū), 有一個讀指針和一個寫指針。讀指針指向環(huán)形緩沖區(qū)中可讀的數(shù)據(jù),寫指針指向環(huán)形緩沖區(qū)中可寫的緩沖區(qū)。通過移動讀指針和寫指針來實現(xiàn)緩沖區(qū)的數(shù)據(jù)讀取和寫入。當RS485緩沖區(qū)數(shù)據(jù)可讀,則調用讀 RS485函數(shù)remoteDataIncoming(),將數(shù)據(jù)裝入二級緩沖區(qū),并判斷讀的字符是不是幀尾,如果是則將二級緩沖區(qū)的可讀字符串讀取并傳遞給幀完整性及類型判斷函數(shù)。雙緩沖區(qū)結構確保了指令完整性,是應用層的一個關鍵點,也是本文的第二個難點。
幀完整性及類型判斷處理主要功能是判斷幀是否滿足通信協(xié)議規(guī)范,如果滿足規(guī)范,則判斷其類型,是查詢返回響應幀就將其傳遞給指令解析函數(shù)。指令解析函數(shù)根據(jù)相應的電源狀態(tài)位解析出電源的運行狀態(tài)、輸出模式、電流、電壓等。解析結束調用MySQL數(shù)據(jù)庫的C++ API函數(shù),將運行記錄對應于MySQL數(shù)據(jù)庫電源運行狀態(tài)表相應的屬性保存到MySQL數(shù)據(jù)庫中。軟件流程圖如圖3。
圖3 軟件流程圖Fig.3 Software flow chart.
數(shù)據(jù)訪問主要有兩種:一種是本地訪問——即在電源查詢界面上直接訪問數(shù)據(jù)庫的電源運行狀態(tài),這種方式的特點就是直接,數(shù)據(jù)處理不方便。另一種是遠程在線訪問,通過網絡通信方式訪問電源上的MySQL數(shù)據(jù)庫。這種訪問方式適合大量數(shù)據(jù)處理,很方便電源管理員查看電源的運行情況和分析電源的性能。
MySQL數(shù)據(jù)庫遠程訪問需要更改 "mysql" 數(shù)據(jù)庫里的 "user" 表里的 "host" 項,把"localhost"改成相應的 IP;同時,指定授權(GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION),使用myuser/mypassword設置從主機連接到 mysql數(shù)據(jù)庫的權限。
為了增強MySQL 數(shù)據(jù)庫系統(tǒng)的性能,MySQL數(shù)據(jù)庫為客戶端提供了許多應用程序接口,如C、C++、JAVA( JDBC)、Perl、Python、PHP 和 TCL 的API 接口,極大方便了各種用戶對數(shù)據(jù)庫的訪問[7]。
本文把MySQL數(shù)據(jù)庫和Qt圖形界面系統(tǒng)結合起來,通過MySQL數(shù)據(jù)庫系統(tǒng)的C++ API函數(shù)調用來實現(xiàn)圖形化的方式訪問MySQL數(shù)據(jù)庫。從存放電源狀態(tài)記錄的表中查詢我們想要的結果,如開機、關機、故障等的時間、電流、電壓。管理人員可以在電源上直接通過界面了解電源的運行情況,也可以通過遠程在線訪問電源的運行情況??梢酝ㄟ^短期的數(shù)據(jù)來分析某一個時間段的運行效果,也可以通過幾年的運行數(shù)據(jù)來分析電源整體性能。同時,還實現(xiàn)了刪除檢索出來的全部記錄、清空整張表、備份數(shù)據(jù)庫和恢復數(shù)據(jù)庫的功能。MySQL數(shù)據(jù)庫系統(tǒng)從現(xiàn)在的實際運行情況看,取得了理想的效果。電源運行狀態(tài)查詢界面如圖4。
圖4 電源運行狀態(tài)查詢界面Fig.4 Power supply operation status query interface.
利用ARM11處理器系統(tǒng)和MySQL數(shù)據(jù)庫,在蘭州重離子加速器數(shù)字四級鐵電源上成功實現(xiàn)了電源狀態(tài)及相關信息的收集和存儲。實際應用表明設計的查詢界面友好、數(shù)據(jù)讀取速度較快、數(shù)據(jù)存數(shù)可靠性高,達到了設計要求。同時經過實際應用,發(fā)現(xiàn)本系統(tǒng)還有許多可改進的地方,例如優(yōu)化長時間穩(wěn)定運行時的數(shù)據(jù)儲存,下一步我們將觀察與分析電源系統(tǒng)的長期運行情況,以期完善重離子加速器數(shù)字化的電源實時監(jiān)控系統(tǒng)。
1 王進軍. 加速器電源的數(shù)字化研究與設計[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 王榮坤. 醫(yī)用重離子加速器電源專用數(shù)字調節(jié)器的研究與設計[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嵌入式系統(tǒng)開發(fā)[M]. 北京: 電子工業(yè)出版社, 2012: 53–54 ZHU Xiaoyuan, XIE Longhan. Linux embedded system development[M]. Beijing: Electronics Industry Publishing House, 2012: 53–54
4 祁繼超, 張琳娜, 鄭鵬, 等. 嵌入式磨削加工主動測量儀數(shù)據(jù)管理技術研究[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數(shù)據(jù)庫的圖形化管理[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通信協(xié)議在集散控制系統(tǒng)中的應用[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數(shù)據(jù)庫寶典[M]. 北京: 電子工業(yè)出版社, 2002: 179–200 Petrovsky M. Linux database collection[M]. Beijing:Publishing House of Electronics Industry, 2002: 179–200