任海波,郭 敏,焦靈俠,周 楊,楊 燕
(1.西北機電工程研究所,陜西 咸陽 712099;2.榆林學院,陜西 榆林 719000;3.西安工業大學,陜西 西安 710021)
在火炮伺服系統中,電機調速系統的各項性能直接影響到火炮系統的作戰性能,為達到指標要求,在電機調速系統調試的過程中,需要對其多項高速變化的參數進行實時監測,因此對監測軟件的實時性和穩定性要求較高。目前多采用將數據以文件的形式記錄下來,利用MATLAB進行繪圖,再進行比較分析。存在操作繁瑣、實時性差和調試效率低等缺點。
作為主流的可視化開發環境VC++6.0具有界面友好,功能強大,開發靈活等優點,文獻[1]中采用的CDC類開發繪圖模塊,存在開發周期長和難度高的缺點,而美國NI (National Instuments)公司為VC++6.0開發、提供了一個集成式套件,即Measurement Studio 6.0,包括了各種常用測量和自動化控件、工具和類庫[2],可以補償VC開發圖形控件時存在的缺陷。
筆者提出采用VC++6.0和Measurement Studio 6.0聯合開發的某火炮電機調速系統監測軟件,其具備對系統參數實時數據采集、實時顯示、數據保存和數據回放等功能。
系統連接示意圖如圖1所示,某火炮電機調速系統監測軟件運行在PC機上,調試系統通過USBCANⅡ連接,某火炮電機調速系統和PC機按照約定的通信協議將需要監測的數字量,以曲線、數字或指示燈等方式顯示在人機交互界面上。
PC機和某火炮電機調速系統之間的通信方式為主從問答方式。PC機向某火炮電機調速系統發送命令幀,某火炮電機調速系統接收到命令幀后向PC機發送響應幀,發送頻率為1 ms一幀,從而實現數據交換。

某火炮電機調速系統監測軟件主要由數據收發模塊、數據處理模塊和數據顯示3個模塊組成,如圖2所示。數據接收模塊作為通信接口主要負責數據的實時接收,數據處理模塊負責根據通信協議對數據進行解析,以FIFO的模式進行存取,并將數據以文件的形式記錄下來。數據顯示模塊主要負責為用戶提供一個良好的人機交互界面,在圖形顯示區域連續動態地顯示波形。

某火炮電機調速系統監測軟件在Windows XP操作系統下,采用VC++6.0和Measurement Studio 6.0混合編程的模式開發。VC++6.0為用戶提供類庫和控件快速完成人機交互界面設計。Measurement Studio 6.0作為專業的虛擬儀器控件以ActiveX的形式嵌入到VC++6.0環境中,在CWGraph控件的“屬性”中可以快速地設計出調試軟件需要顯示的各波形的各項屬性,降低了軟件開發難度,縮短了開發周期。
監測軟件為用戶提供了良好的人機交互界面,主要功能有數據采集、數據解析、波形顯示、x軸和y軸動態縮放、數據保存和歷史數據回放等功能。
CAN總線采用CAN 2.0協議規范,波特率為500 Kbit/s,標準信息幀格式;CAN總線網絡采用樹形拓撲結構,由驅動器和上位機兩個通信節點構成。

驅動器向上位機發送工作狀態信息,幀ID: 0x102,共8個字節。幀格式如圖3所示。 Data 0表示幀序列編碼:以0~255循環;Data 1表示A相電流,Data 2表示B相電流,Data 3表示q軸電流,所有電流的數據類型為有符號整數,用0~255表示-128~127 A;Data 4和Data 5高四位表示位置主令,Data 6和Data 7高四位表示位置反饋,所有位置的數據類型為無符號整數,用0~4 095表示0~4 095密位;本文不涉及上位機發送到驅動器的控制命令。
監測軟件的主界面分為波形顯示區、波形控制區和命令控制區,如圖4所示。

2.2.1 波形顯示區
在火炮伺服系統中,用高低和方位兩個方向分別控制,因此將波形顯示區分為高低和方位兩個區。每個區可同時顯示5條曲線,分別為位置主令、位置反饋、A相電流、B相電流和q軸電流,每條曲線共用時間軸,位置主令和位置反饋共用一個y軸,A相電流、B相電流和q軸電流共用一個y軸,出于簡化軟件考慮,只設置一個y軸,將各項電流值擴大10倍后再顯示,每10 密位的刻度對應1 A的電流。
用戶通過在曲線顯示區域雙擊鼠標左鍵,全屏顯示該曲線顯示區域,也可通過按住鼠標左鍵拖動來移動顯示曲線,通過撥動鼠標滾輪縮放顯示曲線。
2.2.2 波形控制區
用戶可以通過設置x軸和y軸的范圍對曲線進行縮放和拖移,也可用鼠標進行拖移或縮放操作。
2.2.3 命令控制區
用戶在此設置驅動器的執行命令,并通過相應的按鈕實現向驅動器發送命令、暫停、重啟、保存數據和歷史數據回放等操作。
在監測軟件設計過程中,高速實時數據采集、數據處理和顯示的同時進行是軟件設計的難點,為了滿足數據采集、處理和顯示的實時性、可靠性、完整性的要求,筆者采用將數據的采集和處理與數據顯示分開處理,實現軟件實時性;利用數據緩沖技術將數據接收線程的數據暫存,避免丟數,實現數據的完整性;由于NI控件不是線程安全,在線程中刷新數據,會出現不可預知的異常[3],因此,利用MFC的消息機制[4],通過發送消息的模式,通知繪圖控件刷新界面數據。
1)采用數據接收線程讀取CAN總線上的數據,由于數據采集率為1 kHz,按照經驗,Windows XP操作系統允許用戶最多20 ms進入一次線程,且CAN本身自帶數據緩沖功能,數據接收線程每次處理完數據后休眠20 ms,再進行數據接收,當數據接收線程進入休眠時,并達到了重繪點數,即可進行波形重繪,這樣既不會丟失數據,又可分出CPU資源進行數據處理,從而實現數據實時接收與波形實時繪制同時進行。
2) 由于數據采集率為1 kHz,而波形的重繪頻率較低,一般不會超過60 Hz,因此,采用數據緩沖技術,即環形緩沖區[5],將采集到的數據放入環形緩沖區,當檢測到環形緩沖區的數據達到重繪點數(128個)時,便向主界面發送重繪波形的消息,對波形進行刷新。
3) 由于NI控件不是線程安全的,用戶不能在線程中刷新繪圖控件,因此監測軟件自定義了刷新消息,通過發送消息的方式,驅動繪圖控件刷新。
2.4.1 數據接收模塊
首先,在監測軟件初始化程序中完成以下操作:創建并啟動數據接收線程;加載周立功USBCANⅡ驅動程序;設置和啟動CAN。
然后,在數據接收線程中采集循環,循環讀取CAN數據,根據通信協議解析后,將數據依次存放至環形緩沖區中。
在軟件退出時,關閉CAN和退出數據接收線程。
2.4.2 數據處理模塊
數據處理模塊包括數據解析、數據緩存和數據保存3個模塊,數據處理流程如下:
依據通信協議規定,位置主令值的解析方法為:
Pvalue=(float)(X+(Y& 0x0f)*256)
(1)
式中:Pvalue表示實際的位置值;X和Y分別為驅動器向上位機發送的數據第4字節和第5字節,位置反饋值的解析方法同理。
A相電流值的表示范圍壓縮到-128~127,解析方法為
Ivalue=(float)(Z-128)
(2)
式中:Ivalue表示實際的A相電流值;Z表示驅動器向上位機發送的數據第1字節,B相電流值和q軸電流值的解析方法同理。
在監測軟件初始化程序中,完成建立環形緩沖區對象,并設置環形緩沖區的深度為4 K字節,在數據接收線程中,將解析后的數據依次寫入環形緩沖區,在得到更新波形數據的消息時,在消息處理函數中,讀緩沖區數據。當環形緩沖區滿時,將“最早”的數據丟棄,將“最新”的數據寫入緩沖區。
當數據需要保存時,執行數據保存操作時,先新建*.txt類型的文本,文本名按“data”+當前時間的規則命名,將接收到的數據以字符串形式保存在文本中。
數據處理流程圖如圖5所示。

2.4.3 數據顯示模塊
數據顯示模塊主要包括波形顯示單元和波形操控單元。
2.4.3.1 波形顯式單元
波形顯示單元有兩種狀態,即工作狀態和回放狀態,在不同的狀態下,數據源、數據處理和顯示方式不同。當其處于工作狀態時,數據顯示流程如圖6所示。

數據來自CAN總線,為了使波形顯示流暢完整,需要降低波形的刷新頻率,以波形的重繪頻率刷新曲線,圖形控件的繪圖數組長度設置為1 024字節,繪圖數組的大小決定了一屏能顯示波形的最長時間,如果用戶需要顯示更長時間的波形,必須增大繪圖數組。每當緩沖區的數據量達到128個時,將繪圖數組第0~127序列的數據刪除,再將128~1 023序列的數依次前移128位,再將最新的128個數放入數組的最后,如圖7所示[6]。因此,當前圖形控件的數據是實時顯示的,能觀察到的波形數據只有最新的1 024組數據。

當其處于回放狀態時,數據來源于文本文件,當用戶按下“打開數據”的按鈕時,按照命名規則找到用戶要回放的數據文件,因為每個文件存儲的數據量不等,因此,根據具體文件的數據量重新設置圖形控件的繪圖數組容量,再將所有數據解析后,依次放入繪圖數組中,繪制波形。用戶可根據實際需求對波形進行縮放和拖移操作,在圖形控件上雙擊后即可全屏顯示。
2.4.3.2 波形操控單元
波形操控單元主要是通過對其x軸和y軸范圍的設置來實現波形的全屏顯示、波形拖移和波形縮放。
在波形顯示之前,軟件會一直記錄波形x軸和y軸向的最大和最小值,只要在鼠標雙擊事件中將x軸和y軸的范圍設置成波形的范圍,即可實現雙擊后波形全屏顯示。
拖移與縮放是在鼠標左鍵按下事件中記錄起始點的坐標,然后在左鍵彈起的事件中記錄終點坐標,波形縮放是將兩個坐標形成的矩形區域范圍設置新的x軸和y軸的范圍,而波形拖放是分別記錄兩個坐標在x軸和y軸方向的相對位移量,然后x軸和y軸分別在各自的方向上平移位移量。
以上主要是通過鼠標操作波形,也可通過波形控制區設置x軸和y軸的范圍進行波形操作。
測試網絡拓撲結構參見圖1,將一個某火炮電機調速系統連接在CANⅡ上,某火炮電機調速系統監測軟件運行在PC機上,為了測試該軟件,設定驅動器以1 kHz的頻率向上位機發送正弦波,發送的正弦波頻率有50、40、30、20、10和1 Hz等選項。軟件運行效果如圖8所示,圖中,在GD Curve中綠色、藍色、紅色曲線分別為50、40和30 Hz正弦曲線,在FW Curve中綠色、藍色、紅色曲線分別為20、10和1 Hz正弦曲線,曲線平滑,無變形,波形的全屏、拖移與縮放功能正常。試驗表明,某火炮電機調速系統監測軟件波形顯示正常而穩定,軟件設計達到預期的使用要求。

筆者設計的基于VC++6.0和NI控件聯合開發的實時監測軟件,用于某火炮電機調速系統的性能測試,并對監測軟件的關鍵技術和關鍵功能做了詳細說明。該軟件具有界面美觀、實時性能好、開
發成本低等特點,具有較強的實用價值和參考價值。但在擴展性、可移植性和通用性方面依然存在不足。
References)
[1]孟玉靜,葉樺,周玲,等.基于CANBUS的高速采樣虛擬示波器軟件的設計與實現[J]. 工業儀表與自動化裝置, 2012(6):26-31. MENG Yujing,YE Hua,ZHOU Ling,et al.The design and implementation of high-speed sampling virtual oscilloscope software[J].Industrial Instrumentation & Automation, 2012(6):26-31.(in Chinese)
[2]李同立.基于VC++的虛擬示波器軟件設計[J].軟件導刊,2013,12(11):56-59. LI Tongli. Design of virtual oscilloscope software based on VC++[J].Software Guide, 2013,12(11):56-59.(in Chinese)
[3]熊啟龍.基于Indy 控件的遙測中心GPRS數據接收軟件應用[J].水利信息化,2012(5):49-52. XIONG Qilong.Application of GPRS data receiving software in telemetry center based on controls of Indy[J].Water Resources Informatization,2012(5):49-52.(in Chinese)
[4]趙欽,黃玲.基于Windows 消息機制的自動檢測系統設計[J].廣西科學院學報,2010,26(4):497-499. ZHAO Qin,HUANG Ling.Design of automatic test system based on Windows messages[J].Journal of Guangxi Aca-demy of Sciences,2010,26(4):497-499.(in Chinese)
[5]姚章俊,陳蜀宇,盧堯.一種高性能環形緩沖區的研究與實現[J].計算機工程,2012,38(8):228-231. YAO Zhangjun,CHEN Shuyu,LU Yao.Research and implementation of high-performance ring buffer[J].Computer Engineering, 2012,38(8):228-231.(in Chinese)
[6]孟玉靜,葉樺,仰燕蘭.雙機時鐘不同步情況下虛擬示波器波形顯示方法的改進[J].工業控制計算機,2012,15(21):11-13. MENG Yujing,YE Hua,YANG Yanlan.Improvement in virtual oscilloscope waveform display on condition of clock asynchronization of dual converters[J].Industrial Control Computer, 2012,15(21):11-13.(in Chinese)