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