摘 要:監控系統是數字化陀螺穩定平臺的重要組成部分,本文針對穩定平臺高波特率、高數據更新率的通信需求,設計了基于MOXA多串口卡的通信策略。介紹了MOXA多串口卡的工作原理及特點,設計了通信程序流程,基于VC++編程實現了串行通信。實驗結果表明,監控系統軟件工作穩定可靠。
關鍵詞:穩定平臺;MOXA;串口通信;VC++
中圖分類號:TP273.5 文獻標識碼:A 文章編號:2096-4706(2018)05-0050-03
Research on Communication Strategy of Gyro Stabilized Platform
Based on MOXA Multi Serial Card
LI Ang,LEI Xiaojian
(Military Delegate Office of Navy in Tianjin District,Beijing 100073,China)
Abstract:The monitoring system is an important part of the digital gyroscope stabilization platform. This paper aiming at the high baud rate and high data update rate of the stable platform,a communication strategy based on MOXA multi serial port card is designed. The working principle and characteristics of MOXA multi serial card are introduced,and the communication program flow is designed. Serial communication is realized based on VC++ programming. The experimental results show that the software of the monitoring system works stably and reliably.
Keywords:stabilized platform;MOXA;serial communication;VC++
0 引 言
陀螺穩定平臺是航空、航天、車船和導彈系統工程中的重要設備,在現代軍、民用領域中發揮著越來越重要的作用[1-3]。它的主要功能是隔離載體角運動,在載體機動狀態下建立穩定基準面,保證安裝在平臺上的測量設備具有穩定的工作狀態,隔離振動等干擾因素對測量或探測的影響,例如現代武器要求具備行進間穩瞄、跟蹤、射擊能力,載體(飛機、坦克、艦艇等)運動過程中需要使用穩定平臺,保持武器系統的姿態基準,從而減小載體運動對武器系統精度的影響[4];另外,在海洋、航空重力測量過程中也需要將重力傳感器安裝在穩定平臺上,從而保證重力傳感器始終保持垂直,減小載體角運動對重力測量精度的影響[5]。
陀螺穩定平臺數字化控制回路相比于傳統的模擬電子系統具有體積小、成本低、可靠性高等優勢,而上位機監控系統是陀螺穩定平臺控制系統的重要組成部分,其主要功能是實現上位機與穩定平臺之間的數據通信,從而實時監控平臺狀態。上位機與穩定平臺之間的通信可以通過串口實現。文獻[6,7]介紹了在VC++開發平臺下,基于MSComm進行串口編程的方法。MSComm是VC++的一個ActiveX控件,它高度集成化的特點使串口編程更為簡單;文獻[8]設計了一種永磁同步電機控制器串口通信上位機程序,它基于VC++6.0開發環境,利用Windows API讀寫串口函數,通過定時器消息響應查詢串口來實現數據的接收;文獻[9]測試分析了基于Visual Basic中的Active X控件、Visual C++中的Active X控件和Win32 API函數的3種Visual Studio平臺上串行通信方法性能。通過對文獻的分析可知,在高波特率和高數據更新頻率的情況下,用MSComm控件進行串口通信編程,主機CPU的負荷較重,可靠性也不高。本文研究的陀螺穩定平臺上位機監控系統需要滿足高波特率和高數據更新率的通信需求,鑒于此,本文利用MOXA公司推出的C218Turbo PCI多串口卡以及PComm函數庫實現實時通信。使用PComm進行通信編程,較之MSComm32,降低了程序開發難度,縮短了程序開發周期,同時也提高了程序的可靠性。實驗證明C218Turbo PCI在高波特率、高數據更新率下通信可靠。
1 C218Turbo PCI多串口卡簡介
C218Turbo PCI多串口卡是一款智能MOXA卡[10-12],它專為PCI總線設計,特別適合遠程接入、工業控制和辦公自動化工程,可用于Windows(2000,XP/2003/Vista x86/x64,9X/ME/NT)、DOS、Linux 2.4/2.6、SCO Open Server 5/6、UnixWare 7和QNX 4操作系統。
C218Turbo采用了MOXA定制ASIC芯片,使電路板面積大大縮小,減少和縮短了系統連線,使該板具有較高的可靠性和較低的功耗,同時系統性能與老產品相比有很大提高,C218Turbo之所以被稱為智能MOXA卡,是因為它使用了TMS320BC203 RISC處理器對輸入輸出數據進行管理,這將會減少主機CPU的通信開銷。512KB的On-board雙口RAM為輸入輸出數據提供了較大的緩存區,有效地減少了主機CPU用于通信的開銷,較大緩沖區的使用也防止了數據丟失。由于有上述強大的硬件配置,C218Turbo系列可以在8個串口同時工作的情況下,保持高吞吐量,而這只占用主機處理器很少一部分時間。
UART采用TI550C芯片作為異步通信控制器,可支持50b/s到921.6Kb/s的全雙工異步通信,TI550C帶有16B的片內FIFO和硬件數據流控制部件大大提高了數據吞吐量,同時也減輕了TMS320BC203RISC處理器的通信控制開銷。C218Turbo PCI本身只支持RS-232接口規范,通過外接的轉換器可支持RS-422和RS-485串口標準。
在使用智能MOXA卡時,需要正確理解驅動緩存和用戶緩存的概念。以C218Turbo PCI為例,使用C218Turbo PCI進行串口通信的數據流程如圖1所示。
圖1 C218Turbo PCI通信原理
對于數據輸入的情況,外部數據首先進入UART控制器的FIFO中,然后RISC處理器從FIFO中讀取接收到的數據,并將這些數據放入驅動緩存(雙端口RAM)中,雙端口RAM中的數據由RISC處理器管理。用戶通過調用PComm庫函數可以將雙端口RAM中的數據讀入用戶緩存。對于數據輸出的情況,數據流反向。由于用于驅動緩存的是雙端口RAM,雙口RAM最大的特點是存儲數據共享,它擁有兩套獨立的地址、數據和控制線,允許兩個獨立的CPU或控制器同時異步訪問存儲單元。因此,主機的CPU可以直接訪問這一存儲單元。這樣主機CPU與C218Turbo PCI之間的數據交換速度很快,可將大量數據一次讀出或寫入,大大減輕了主機用于通信的資源消耗,可以使系統工作效率顯著提高。
2 串行通信指標及程序流程
本文中的陀螺穩定平臺監控系統的上位機采用工控機,下位機為以陀螺儀和加速度計為核心傳感器的穩定平臺,下位機主要輸出根據陀螺儀和加速度計解算得到的穩定平臺的姿態信息以及速度位置信息。上位機實時采集陀螺穩定平臺輸出的數據,將數據幀解包之后,使用姿態角和角速率信息控制穩定平臺,使之實時追蹤當地地理水平面。
陀螺穩定平臺采用RS-232串口輸出導航數據。通信波特率設置為921.6Kbps,數據更新率為500Hz。普通串口或串口卡難以可靠地接收這樣高波特率和高更新率的數據,即使能正確接收,通信程序也將占用大量的上位機CPU資源,通信程序運行后,上位機難以可靠地完成其他任務。因此,本文中使用C218Turbo PCI多串口卡實現穩定、可靠、智能化的串口通信。
利用MOXA C218Turbo PCI多串口卡實現陀螺穩定平臺與上位機之間通信的程序流程如圖2所示。
通信程序采用了多線程技術。主線程主要負責根據用戶指令打開通信板卡、創建讀數據線程、關閉讀數據線程以及關閉通信板卡。子線程主要負責對陀螺穩定平臺輸出的數據進行處理,包括按協議對數據進行解析、顯示數據、保存數據以及轉發有用數據。
3 基于VC++的串行通信的實現
在MFC下的32位串口通信程序可以使用兩種方法,即利用ActiveX控件和使用API通信函數。MSComm通信控件有一系列的屬性和用戶接口,使用ActiveX控件,程序實現非常簡單,結構清晰,缺點是不夠靈活,而使用API通信函數進行串口通信編程的方法比較復雜,需要開設一個輔助線程,用于實時監控串口狀態,接收和發送數據。在MFC下的串口通信中,多數使用的是API通信函數。以上兩種方法雖然都能用來編寫串口通信程序,但程序設計復雜,對編程人員的要求較高,特別是使用API通信函數時更為復雜。
MOXA公司為Windows系統提供了PComm函數庫。使用PComm進行通信編程,程序的可靠性較之使用MSComm32控件有明顯提高,而相對直接使用Win32 Comm API函數編程,則降低了程序開發難度,縮短了程序開發周期,同時它還支持多進程多線程的串行通信編程,適用于所有的Win32下的串行通信端口。目前該函數庫專門應用于Windows2000、WindowsXP/2003/Vista x86/x64和Windows9X/ME/NT,支持多種編程語言,如Visual Basic、C++、Delphi等。
要使用PComm.Dll中的函數,必須在編譯選項中指明它所在的路徑。在Visual C++環境下使用PComm,需要進行以下操作:
(1)將
(2)將PComm.lib文件導出到連接庫列表中;
(3)將PComm.h和PComm.lib文件放到執行路徑中。
3.1 PComm串行通信函數
本文主要用到了以下幾個PComm.dll庫函數:
串口設置函數:sio_ioctl(int port、int baud、int mode)。port表示串口號,baud表示波特率,mode表示數據位、停止位和校驗位;
打開串口函數:sio_open(int port)。port表示串口號;
關閉串口函數:sio_close(int port)。port表示串口號;
寫串口函數:sio_write(int port,char*buf,int len)。port表示串口號,buf表示傳輸緩沖區指針,len表示傳輸緩沖區的長度;
讀串口函數:sio_read(int port,char*buf,int len)。port表示串口號,buf表示傳輸緩沖區指針,len表示傳輸緩沖區的長度;
串口中斷觸發函數:sio_cnt_irq(int port,VOID(CALLBACK *func)(int port),int count)。port表示串口號,func表示中斷服務程序的入口地址,count表示數據長度。
3.2 部分程序代碼
本文的軟件程序中,基于PComm庫函數的部分通信程序代碼及注釋如下:
#define BaudRate2 B115200 // 綜控口波特率
#define DataBits BIT_8 // 數據位
#define Parity P_NONE // 效驗位
#define StopBits STOP_1 // 停止位
CString a;
GetDlgItemText(IDC_BTN_PORTOPEN,a);
if(!strcmp(a,\"打開綜控口\"))
{
if(SIO_OK!=sio_open(1)) // 打開串口1
{
MessageBox(\"串口打開錯誤\");
}
else
{
sio_ioctl(1,BaudRate2,DataBits | StopBits | Parity);
// 設置串口1的波特率,數據位,停止位和校驗位
sio_cnt_irq(1,CntIrq2,1); // 設置串口1的中斷觸發函數
SetDlgItemText(IDC_BTN_PORTOPEN,\"關閉綜控口\");
}
}
else
{
sio_close(1); // 關閉串口1
SetDlgItemText(IDC_BTN_PORTOPEN,\"打開綜控口\");
}
……
VOID CALLBACK CntIrq2(int port) // 中斷服務程序定義
{
……..
}
通過測試實驗,本文研究的基于MOXA C218Turbo PCI多串口卡的陀螺穩定平臺監控軟件能夠實現平臺與上位機的高速、穩定通信。
4 結 論
陀螺穩定平臺在軍、民用領域都有重要應用,上位機監控系統是數字化穩定平臺的重要組成部分。要準確監控和分析陀螺穩定平臺的狀態,需要監控系統能夠高速采集和保存穩定平臺輸出的數據。針對這一問題,本文為數字化陀螺穩定平臺設計了一種基于MOXA多串口卡的通信策略,從而實現了高速、穩定、可靠的數據通信。
MOXA C218Turbo PCI是一款智能型多串口卡,它使用了TMS320BC203 RISC處理器對輸入輸出數據進行管理,這將會減少主機CPU的通信開銷,為高速串口實時通信提供了可能性。同時PComm庫函數為用戶提供了相對簡潔,并且高度可靠的串口通信方式,因此可以滿足不同用戶的工業測量和自動化控制需求。本文利用MOXA多串口卡實現了高波特率和高數據更新率的串行通信,測試試驗證明,本文設計的通信策略能夠滿足陀螺穩定平臺的數據通信需求,監控系統軟件工作穩定可靠。
參考文獻:
[1] 樊苗.船載雷達穩定平臺的設計 [D].大連:大連海事大學,2017.
[2] 于麗.機載陀螺穩定平臺的自抗擾控制算法研究 [D].長春:長春理工大學,2017.
[3] 孫立志.光電穩定平臺視軸穩定技術研究 [D].哈爾濱:哈爾濱工業大學,2017.
[4] 王凌欣.陀螺穩定平臺分數階系統建模及控制方法研究 [D].長春:長春理工大學,2017.
[5] 朱倚嫻,陸源,許江寧,等.一種陀螺穩定平臺自適應模糊-PID復合控制方法 [J].中國慣性技術學報,2014,22(3):317-321.
[6] 李薇,耿淑琴.基于VC實現MSP430與PC之間的異步串行通信 [J].微型機與應用,2012,31(5):23-25.
[7] 周小剛,單斌,汪立新,等.基于PC104的嵌入式轉臺控制系統設計 [J].自動化應用,2013(1):62-63+66.
[8] 龔寄,何雅槐.永磁同步電機控制器串口通信上位機軟件設計 [J].自動化應用,2016(8):21-23.
[9] 董圣友,肖繼學,廖旋,等.Visual Studio中串行通信方法實時性能測試 [J].中國測試,2015,41(2):124-128.
[10] 趙素娟.基于Moxa多串口卡的多串口通信的VC++實現 [J].計算機與現代化,2011(8):117-119+123.
[11] 丁云霞,曾連蓀.基于VC++6.0的RS-422串口通信設計 [J].信息技術,2010,34(9):73-75.
[12] 李瑞先.VC++中基于MOXA多串口卡串行通信的實現 [J].通信技術,2009,42(11):63-64+184.
作者簡介:李昂(1988-),男,漢族,北京人,助理工程師,碩士。研究方向:慣性導航技術及應用;雷肖劍(1987-),男,畬族,浙江溫州人,助理工程師,碩士。研究方向:軍事運籌學。