摘 要:監(jiān)控系統(tǒng)是數(shù)字化陀螺穩(wěn)定平臺的重要組成部分,本文針對穩(wěn)定平臺高波特率、高數(shù)據(jù)更新率的通信需求,設(shè)計(jì)了基于MOXA多串口卡的通信策略。介紹了MOXA多串口卡的工作原理及特點(diǎn),設(shè)計(jì)了通信程序流程,基于VC++編程實(shí)現(xiàn)了串行通信。實(shí)驗(yàn)結(jié)果表明,監(jiān)控系統(tǒng)軟件工作穩(wěn)定可靠。
關(guān)鍵詞:穩(wěn)定平臺;MOXA;串口通信;VC++
中圖分類號:TP273.5 文獻(xiàn)標(biāo)識碼: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 引 言
陀螺穩(wěn)定平臺是航空、航天、車船和導(dǎo)彈系統(tǒng)工程中的重要設(shè)備,在現(xiàn)代軍、民用領(lǐng)域中發(fā)揮著越來越重要的作用[1-3]。它的主要功能是隔離載體角運(yùn)動,在載體機(jī)動狀態(tài)下建立穩(wěn)定基準(zhǔn)面,保證安裝在平臺上的測量設(shè)備具有穩(wěn)定的工作狀態(tài),隔離振動等干擾因素對測量或探測的影響,例如現(xiàn)代武器要求具備行進(jìn)間穩(wěn)瞄、跟蹤、射擊能力,載體(飛機(jī)、坦克、艦艇等)運(yùn)動過程中需要使用穩(wěn)定平臺,保持武器系統(tǒng)的姿態(tài)基準(zhǔn),從而減小載體運(yùn)動對武器系統(tǒng)精度的影響[4];另外,在海洋、航空重力測量過程中也需要將重力傳感器安裝在穩(wěn)定平臺上,從而保證重力傳感器始終保持垂直,減小載體角運(yùn)動對重力測量精度的影響[5]。
陀螺穩(wěn)定平臺數(shù)字化控制回路相比于傳統(tǒng)的模擬電子系統(tǒng)具有體積小、成本低、可靠性高等優(yōu)勢,而上位機(jī)監(jiān)控系統(tǒng)是陀螺穩(wěn)定平臺控制系統(tǒng)的重要組成部分,其主要功能是實(shí)現(xiàn)上位機(jī)與穩(wěn)定平臺之間的數(shù)據(jù)通信,從而實(shí)時(shí)監(jiān)控平臺狀態(tài)。上位機(jī)與穩(wěn)定平臺之間的通信可以通過串口實(shí)現(xiàn)。文獻(xiàn)[6,7]介紹了在VC++開發(fā)平臺下,基于MSComm進(jìn)行串口編程的方法。MSComm是VC++的一個ActiveX控件,它高度集成化的特點(diǎn)使串口編程更為簡單;文獻(xiàn)[8]設(shè)計(jì)了一種永磁同步電機(jī)控制器串口通信上位機(jī)程序,它基于VC++6.0開發(fā)環(huán)境,利用Windows API讀寫串口函數(shù),通過定時(shí)器消息響應(yīng)查詢串口來實(shí)現(xiàn)數(shù)據(jù)的接收;文獻(xiàn)[9]測試分析了基于Visual Basic中的Active X控件、Visual C++中的Active X控件和Win32 API函數(shù)的3種Visual Studio平臺上串行通信方法性能。通過對文獻(xiàn)的分析可知,在高波特率和高數(shù)據(jù)更新頻率的情況下,用MSComm控件進(jìn)行串口通信編程,主機(jī)CPU的負(fù)荷較重,可靠性也不高。本文研究的陀螺穩(wěn)定平臺上位機(jī)監(jiān)控系統(tǒng)需要滿足高波特率和高數(shù)據(jù)更新率的通信需求,鑒于此,本文利用MOXA公司推出的C218Turbo PCI多串口卡以及PComm函數(shù)庫實(shí)現(xiàn)實(shí)時(shí)通信。使用PComm進(jìn)行通信編程,較之MSComm32,降低了程序開發(fā)難度,縮短了程序開發(fā)周期,同時(shí)也提高了程序的可靠性。實(shí)驗(yàn)證明C218Turbo PCI在高波特率、高數(shù)據(jù)更新率下通信可靠。
1 C218Turbo PCI多串口卡簡介
C218Turbo PCI多串口卡是一款智能MOXA卡[10-12],它專為PCI總線設(shè)計(jì),特別適合遠(yuǎn)程接入、工業(yè)控制和辦公自動化工程,可用于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操作系統(tǒng)。
C218Turbo采用了MOXA定制ASIC芯片,使電路板面積大大縮小,減少和縮短了系統(tǒng)連線,使該板具有較高的可靠性和較低的功耗,同時(shí)系統(tǒng)性能與老產(chǎn)品相比有很大提高,C218Turbo之所以被稱為智能MOXA卡,是因?yàn)樗褂昧薚MS320BC203 RISC處理器對輸入輸出數(shù)據(jù)進(jìn)行管理,這將會減少主機(jī)CPU的通信開銷。512KB的On-board雙口RAM為輸入輸出數(shù)據(jù)提供了較大的緩存區(qū),有效地減少了主機(jī)CPU用于通信的開銷,較大緩沖區(qū)的使用也防止了數(shù)據(jù)丟失。由于有上述強(qiáng)大的硬件配置,C218Turbo系列可以在8個串口同時(shí)工作的情況下,保持高吞吐量,而這只占用主機(jī)處理器很少一部分時(shí)間。
UART采用TI550C芯片作為異步通信控制器,可支持50b/s到921.6Kb/s的全雙工異步通信,TI550C帶有16B的片內(nèi)FIFO和硬件數(shù)據(jù)流控制部件大大提高了數(shù)據(jù)吞吐量,同時(shí)也減輕了TMS320BC203RISC處理器的通信控制開銷。C218Turbo PCI本身只支持RS-232接口規(guī)范,通過外接的轉(zhuǎn)換器可支持RS-422和RS-485串口標(biāo)準(zhǔn)。
在使用智能MOXA卡時(shí),需要正確理解驅(qū)動緩存和用戶緩存的概念。以C218Turbo PCI為例,使用C218Turbo PCI進(jìn)行串口通信的數(shù)據(jù)流程如圖1所示。
圖1 C218Turbo PCI通信原理
對于數(shù)據(jù)輸入的情況,外部數(shù)據(jù)首先進(jìn)入U(xiǎn)ART控制器的FIFO中,然后RISC處理器從FIFO中讀取接收到的數(shù)據(jù),并將這些數(shù)據(jù)放入驅(qū)動緩存(雙端口RAM)中,雙端口RAM中的數(shù)據(jù)由RISC處理器管理。用戶通過調(diào)用PComm庫函數(shù)可以將雙端口RAM中的數(shù)據(jù)讀入用戶緩存。對于數(shù)據(jù)輸出的情況,數(shù)據(jù)流反向。由于用于驅(qū)動緩存的是雙端口RAM,雙口RAM最大的特點(diǎn)是存儲數(shù)據(jù)共享,它擁有兩套獨(dú)立的地址、數(shù)據(jù)和控制線,允許兩個獨(dú)立的CPU或控制器同時(shí)異步訪問存儲單元。因此,主機(jī)的CPU可以直接訪問這一存儲單元。這樣主機(jī)CPU與C218Turbo PCI之間的數(shù)據(jù)交換速度很快,可將大量數(shù)據(jù)一次讀出或?qū)懭耄蟠鬁p輕了主機(jī)用于通信的資源消耗,可以使系統(tǒng)工作效率顯著提高。
2 串行通信指標(biāo)及程序流程
本文中的陀螺穩(wěn)定平臺監(jiān)控系統(tǒng)的上位機(jī)采用工控機(jī),下位機(jī)為以陀螺儀和加速度計(jì)為核心傳感器的穩(wěn)定平臺,下位機(jī)主要輸出根據(jù)陀螺儀和加速度計(jì)解算得到的穩(wěn)定平臺的姿態(tài)信息以及速度位置信息。上位機(jī)實(shí)時(shí)采集陀螺穩(wěn)定平臺輸出的數(shù)據(jù),將數(shù)據(jù)幀解包之后,使用姿態(tài)角和角速率信息控制穩(wěn)定平臺,使之實(shí)時(shí)追蹤當(dāng)?shù)氐乩硭矫妗?/p>
陀螺穩(wěn)定平臺采用RS-232串口輸出導(dǎo)航數(shù)據(jù)。通信波特率設(shè)置為921.6Kbps,數(shù)據(jù)更新率為500Hz。普通串口或串口卡難以可靠地接收這樣高波特率和高更新率的數(shù)據(jù),即使能正確接收,通信程序也將占用大量的上位機(jī)CPU資源,通信程序運(yùn)行后,上位機(jī)難以可靠地完成其他任務(wù)。因此,本文中使用C218Turbo PCI多串口卡實(shí)現(xiàn)穩(wěn)定、可靠、智能化的串口通信。
利用MOXA C218Turbo PCI多串口卡實(shí)現(xiàn)陀螺穩(wěn)定平臺與上位機(jī)之間通信的程序流程如圖2所示。
通信程序采用了多線程技術(shù)。主線程主要負(fù)責(zé)根據(jù)用戶指令打開通信板卡、創(chuàng)建讀數(shù)據(jù)線程、關(guān)閉讀數(shù)據(jù)線程以及關(guān)閉通信板卡。子線程主要負(fù)責(zé)對陀螺穩(wěn)定平臺輸出的數(shù)據(jù)進(jìn)行處理,包括按協(xié)議對數(shù)據(jù)進(jìn)行解析、顯示數(shù)據(jù)、保存數(shù)據(jù)以及轉(zhuǎn)發(fā)有用數(shù)據(jù)。
3 基于VC++的串行通信的實(shí)現(xiàn)
在MFC下的32位串口通信程序可以使用兩種方法,即利用ActiveX控件和使用API通信函數(shù)。MSComm通信控件有一系列的屬性和用戶接口,使用ActiveX控件,程序?qū)崿F(xiàn)非常簡單,結(jié)構(gòu)清晰,缺點(diǎn)是不夠靈活,而使用API通信函數(shù)進(jìn)行串口通信編程的方法比較復(fù)雜,需要開設(shè)一個輔助線程,用于實(shí)時(shí)監(jiān)控串口狀態(tài),接收和發(fā)送數(shù)據(jù)。在MFC下的串口通信中,多數(shù)使用的是API通信函數(shù)。以上兩種方法雖然都能用來編寫串口通信程序,但程序設(shè)計(jì)復(fù)雜,對編程人員的要求較高,特別是使用API通信函數(shù)時(shí)更為復(fù)雜。
MOXA公司為Windows系統(tǒng)提供了PComm函數(shù)庫。使用PComm進(jìn)行通信編程,程序的可靠性較之使用MSComm32控件有明顯提高,而相對直接使用Win32 Comm API函數(shù)編程,則降低了程序開發(fā)難度,縮短了程序開發(fā)周期,同時(shí)它還支持多進(jìn)程多線程的串行通信編程,適用于所有的Win32下的串行通信端口。目前該函數(shù)庫專門應(yīng)用于Windows2000、WindowsXP/2003/Vista x86/x64和Windows9X/ME/NT,支持多種編程語言,如Visual Basic、C++、Delphi等。
要使用PComm.Dll中的函數(shù),必須在編譯選項(xiàng)中指明它所在的路徑。在Visual C++環(huán)境下使用PComm,需要進(jìn)行以下操作:
(1)將
(2)將PComm.lib文件導(dǎo)出到連接庫列表中;
(3)將PComm.h和PComm.lib文件放到執(zhí)行路徑中。
3.1 PComm串行通信函數(shù)
本文主要用到了以下幾個PComm.dll庫函數(shù):
串口設(shè)置函數(shù):sio_ioctl(int port、int baud、int mode)。port表示串口號,baud表示波特率,mode表示數(shù)據(jù)位、停止位和校驗(yàn)位;
打開串口函數(shù):sio_open(int port)。port表示串口號;
關(guān)閉串口函數(shù):sio_close(int port)。port表示串口號;
寫串口函數(shù):sio_write(int port,char*buf,int len)。port表示串口號,buf表示傳輸緩沖區(qū)指針,len表示傳輸緩沖區(qū)的長度;
讀串口函數(shù):sio_read(int port,char*buf,int len)。port表示串口號,buf表示傳輸緩沖區(qū)指針,len表示傳輸緩沖區(qū)的長度;
串口中斷觸發(fā)函數(shù):sio_cnt_irq(int port,VOID(CALLBACK *func)(int port),int count)。port表示串口號,func表示中斷服務(wù)程序的入口地址,count表示數(shù)據(jù)長度。
3.2 部分程序代碼
本文的軟件程序中,基于PComm庫函數(shù)的部分通信程序代碼及注釋如下:
#define BaudRate2 B115200 // 綜控口波特率
#define DataBits BIT_8 // 數(shù)據(jù)位
#define Parity P_NONE // 效驗(yàn)位
#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);
// 設(shè)置串口1的波特率,數(shù)據(jù)位,停止位和校驗(yàn)位
sio_cnt_irq(1,CntIrq2,1); // 設(shè)置串口1的中斷觸發(fā)函數(shù)
SetDlgItemText(IDC_BTN_PORTOPEN,\"關(guān)閉綜控口\");
}
}
else
{
sio_close(1); // 關(guān)閉串口1
SetDlgItemText(IDC_BTN_PORTOPEN,\"打開綜控口\");
}
……
VOID CALLBACK CntIrq2(int port) // 中斷服務(wù)程序定義
{
……..
}
通過測試實(shí)驗(yàn),本文研究的基于MOXA C218Turbo PCI多串口卡的陀螺穩(wěn)定平臺監(jiān)控軟件能夠?qū)崿F(xiàn)平臺與上位機(jī)的高速、穩(wěn)定通信。
4 結(jié) 論
陀螺穩(wěn)定平臺在軍、民用領(lǐng)域都有重要應(yīng)用,上位機(jī)監(jiān)控系統(tǒng)是數(shù)字化穩(wěn)定平臺的重要組成部分。要準(zhǔn)確監(jiān)控和分析陀螺穩(wěn)定平臺的狀態(tài),需要監(jiān)控系統(tǒng)能夠高速采集和保存穩(wěn)定平臺輸出的數(shù)據(jù)。針對這一問題,本文為數(shù)字化陀螺穩(wěn)定平臺設(shè)計(jì)了一種基于MOXA多串口卡的通信策略,從而實(shí)現(xiàn)了高速、穩(wěn)定、可靠的數(shù)據(jù)通信。
MOXA C218Turbo PCI是一款智能型多串口卡,它使用了TMS320BC203 RISC處理器對輸入輸出數(shù)據(jù)進(jìn)行管理,這將會減少主機(jī)CPU的通信開銷,為高速串口實(shí)時(shí)通信提供了可能性。同時(shí)PComm庫函數(shù)為用戶提供了相對簡潔,并且高度可靠的串口通信方式,因此可以滿足不同用戶的工業(yè)測量和自動化控制需求。本文利用MOXA多串口卡實(shí)現(xiàn)了高波特率和高數(shù)據(jù)更新率的串行通信,測試試驗(yàn)證明,本文設(shè)計(jì)的通信策略能夠滿足陀螺穩(wěn)定平臺的數(shù)據(jù)通信需求,監(jiān)控系統(tǒng)軟件工作穩(wěn)定可靠。
參考文獻(xiàn):
[1] 樊苗.船載雷達(dá)穩(wěn)定平臺的設(shè)計(jì) [D].大連:大連海事大學(xué),2017.
[2] 于麗.機(jī)載陀螺穩(wěn)定平臺的自抗擾控制算法研究 [D].長春:長春理工大學(xué),2017.
[3] 孫立志.光電穩(wěn)定平臺視軸穩(wěn)定技術(shù)研究 [D].哈爾濱:哈爾濱工業(yè)大學(xué),2017.
[4] 王凌欣.陀螺穩(wěn)定平臺分?jǐn)?shù)階系統(tǒng)建模及控制方法研究 [D].長春:長春理工大學(xué),2017.
[5] 朱倚嫻,陸源,許江寧,等.一種陀螺穩(wěn)定平臺自適應(yīng)模糊-PID復(fù)合控制方法 [J].中國慣性技術(shù)學(xué)報(bào),2014,22(3):317-321.
[6] 李薇,耿淑琴.基于VC實(shí)現(xiàn)MSP430與PC之間的異步串行通信 [J].微型機(jī)與應(yīng)用,2012,31(5):23-25.
[7] 周小剛,單斌,汪立新,等.基于PC104的嵌入式轉(zhuǎn)臺控制系統(tǒng)設(shè)計(jì) [J].自動化應(yīng)用,2013(1):62-63+66.
[8] 龔寄,何雅槐.永磁同步電機(jī)控制器串口通信上位機(jī)軟件設(shè)計(jì) [J].自動化應(yīng)用,2016(8):21-23.
[9] 董圣友,肖繼學(xué),廖旋,等.Visual Studio中串行通信方法實(shí)時(shí)性能測試 [J].中國測試,2015,41(2):124-128.
[10] 趙素娟.基于Moxa多串口卡的多串口通信的VC++實(shí)現(xiàn) [J].計(jì)算機(jī)與現(xiàn)代化,2011(8):117-119+123.
[11] 丁云霞,曾連蓀.基于VC++6.0的RS-422串口通信設(shè)計(jì) [J].信息技術(shù),2010,34(9):73-75.
[12] 李瑞先.VC++中基于MOXA多串口卡串行通信的實(shí)現(xiàn) [J].通信技術(shù),2009,42(11):63-64+184.
作者簡介:李昂(1988-),男,漢族,北京人,助理工程師,碩士。研究方向:慣性導(dǎo)航技術(shù)及應(yīng)用;雷肖劍(1987-),男,畬族,浙江溫州人,助理工程師,碩士。研究方向:軍事運(yùn)籌學(xué)。