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