劉艷群,朱莊生
(1.北京航空航天大學 慣性技術重點實驗室,北京100191;2.北京航空航天大學 新型慣性技術儀表與導航系統(tǒng)技術國防重點學科實驗室,北京100191)
位置姿態(tài)測量系統(tǒng) (position and orientation system,POS)[1,2]主要由慣性測量單元 (inertial measurement unit,IMU)、全球定位系統(tǒng) (global position system,GPS)、POS計算機系統(tǒng) (POS computer system,PCS)和后處理軟件組成[3],因此POS系統(tǒng)是一個復雜且有大量數(shù)據信息傳遞和存儲的系統(tǒng)。從POS工程應用背景的需求來說,需要對POS系統(tǒng)進行實時監(jiān)控,但要實現(xiàn)對POS系統(tǒng)的實時監(jiān)控,首要解決是通信問題。監(jiān)控軟件常用監(jiān)控接口有串口、USB口、網口等。監(jiān)控軟件一般采用單一的接口作為監(jiān)控接口,但這種方式會導致監(jiān)控能力受到接口性能的限制。例如:串口數(shù)據傳輸速度和傳輸距離導致監(jiān)控軟件只能實現(xiàn)低速、短距離的監(jiān)控;以太網雖能實現(xiàn)高速、遠距離監(jiān)控,但大數(shù)據量的傳輸會造成數(shù)據流阻塞和資源浪費。
本文基于Windows Socket的網絡數(shù)據傳輸和MSComm串口通信原理,設計基于TCP/IP 協(xié)議的流式套接字的網絡數(shù)據傳輸和MSComm 串口監(jiān)控多線程通信系統(tǒng),實現(xiàn)對POS系統(tǒng)的數(shù)據傳輸及系統(tǒng)的監(jiān)控,消除了單一監(jiān)控接口的弊端,充分利用了不同通信方式的優(yōu)勢,實現(xiàn)優(yōu)勢互補,具有很好的工程應用價值。
POS的基本工作原理如圖1所示,系統(tǒng)由IMU 和POS導航計算機兩大部分組成,POS導航計算機集成了系統(tǒng)供電單元、GNSS接收單元、數(shù)據處理單元、數(shù)據存儲單元等;IMU 由加速計、陀螺儀和溫度傳感器等各類傳感器構成。利用IMU 可實時連續(xù)地測量載體的角速度和加速度信息,通過積分運算可得載體的位置、速度和姿態(tài)等參數(shù),但由于積分運算會導致誤差的積累而引發(fā)導航結果的發(fā)散;GNSS單元通過獲取衛(wèi)星信號實時解算得到高精度的位置信息,但其數(shù)據更新率低;因此將兩者組合起來,綜合二者的優(yōu)點,實現(xiàn)優(yōu)勢互補,經過平滑、事后差分等后處理,可以獲得更高精度的位置姿態(tài)信息。
圖1 POS的基本工作原理
由于POS應用于各種載荷,POS接口也從單一的串口向多樣的、高速、可靠接口發(fā)展,目前POS 的接口資源有:串口RS-232、串口RS-422、CAN 口、以太網等。
由于串口RS-232和RS-422結構簡單,編程簡易,已廣泛作為工業(yè)通信的一種手段。串口RS-232的最大傳輸距離約為15m,最大傳輸速率為460800b/s;串口RS-422的最大傳輸距離約為1200 多米,最大傳輸速率為10Mb/s。但串口RS-232、RS-422 通信的可靠性低,抗噪聲干擾性弱,以及其傳輸速度和傳輸距離的限制,使其通信能力受到嚴重的局限。
CAN 總線屬于工業(yè)現(xiàn)場總線,是一種有效支持分布式控制或實時控制的串行通信網絡。與一般的通信總線相比,CAN 總線網絡各節(jié)點之間的數(shù)據通信實時性強,通信速率最高可達1Mb/s,但傳輸距離與速率成反比例。CAN 總線適用于大數(shù)據量短距離或者長距離小數(shù)據量,實時性要求比較高的通信。
以太網通信是一種高速、可靠的通信方式,目前10、100Mb/s的快速以太網已開始廣泛應用,1Gb/s以太網技術也逐漸成熟。且通信網絡具有更高的帶寬和性能,通信協(xié)議有更高的靈活性,是任何一種通信手段所無法比擬得。
根據各接口的特點,在POS中串口主要用于器件間的低速數(shù)據傳輸,如與監(jiān)控上位機間的數(shù)據傳輸;CAN 總線通信主要用于與載荷間的高速數(shù)據傳輸;以太網通信主要用于高速數(shù)據的存儲傳輸。本文提出一種多線線程的通信方案,采用以太網通信和串口通信并行使用,解決了高速數(shù)據傳輸和實時監(jiān)控的問題。
MFC中有兩類線程,分別稱之為用戶界面線程和工作者線程。用戶界面線程擁有自己的消息隊列和消息循環(huán)來處理界面消息,可以與用戶進行交互;工作者線程沒有消息循環(huán),一般用來完成后臺計算和維護任務。本文提出的多線程方法總臺方案是:在工作者線程中開啟一個以太網通信工作線程,利用Windows Socket 控件建立了基于TCP/IP協(xié)議的以太網通信[4-7],在軟件后臺運行,實現(xiàn)與POS系統(tǒng)高速數(shù)據的傳輸;在用戶界面線程運行串口通信線程,利用MSComm 控件設計串口通信[8-11],實現(xiàn)與用戶的交互,實現(xiàn)對POS系統(tǒng)狀態(tài)的實時監(jiān)控;利用工作者線程與用戶界面線程擁有各自的消息響應機制,不會產生干擾的特性,實現(xiàn)了以太網和串口并行通信??傮w設計方案流程如圖2所示。
圖2 多線程通信設計流程
MSComm 控件有兩種處理通信的方式,一種是事件驅動方式;另一種是定時或不定時查詢方式。本次設計要實現(xiàn)對POS系統(tǒng)的實時監(jiān)控,因此對程序的實時性和速度要較高要求,所以本次設計選擇了事件驅動方式。串口通信設計流程如圖3所示。
(1)對MSComm 控件的進行初始化配置
將MSComm 控件通信端口設置為端口1;波特率為9600,無校驗位,8位數(shù)據位,1位停止位;以二進制方式接收數(shù)據;當緩沖器有數(shù)據就觸發(fā)OnComm 事件;每次都將緩沖區(qū)的數(shù)據全部接收。
(2)編寫OnComm 事件處理函數(shù)
利用GetCommEvent()函數(shù)獲取串口事件,當返回值為2時表示緩沖區(qū)有數(shù)據;將緩沖區(qū)的數(shù)據提取出來。
(3)利用SetPortOpen函數(shù)打開串口
BOOL CMSComm::SetPortOpen (BOOL Value)
當Value設置為TURE 時串口打開;設置為FALSE則串口關閉。
(4)利用函數(shù)通過串口向POS系統(tǒng)的下位機發(fā)送指令
Windows Socket支持兩種類型的套接字,即流式套接字 (SOCK _STREAM)和數(shù)據報套接字 (SOCK _DGRAM)。因為POS系統(tǒng)的復雜性,和考慮系統(tǒng)安全可靠性要求,本次設計采用的是流式套接字。且采用TCP/IP協(xié)議,上位機監(jiān)控軟件作為客戶端,POS系統(tǒng)作為服務器。以太網通信設計流程如圖4所示。
圖4 以太網通信流程
(1)以太網初始化,加載套接字數(shù)據庫,創(chuàng)建流式套接字,將套接字設為非阻塞模式。
(2)利用WSAAsyncSelect函數(shù)建立套接字的事件通知
(3)添加網絡事件處理函數(shù)OnSockt。
(4)利用connect函數(shù)創(chuàng)建與POS系統(tǒng)服務器的連接
多線程設計流程如圖2所示。串口通信界面線程位于主線程中,完成MSComm 控件的初始化后,就開啟串口通信界面線程,因此多線程的設計主要是針對以太網工作線程設計。
(1)創(chuàng)建Windows Socket工作線程的入口函數(shù)
DWORD WINAPI ThreadFun(LPVOID pThread)
創(chuàng)建工作線程時,首先要先建立線程的入口函數(shù),當工作線程被啟動后會轉入該函數(shù),并且函數(shù)退出時工作線程就會結束。ThreadFun是入口函數(shù)名,也就是工作線程開始執(zhí)行時代碼所在的函數(shù)地址,pThread是工作線程傳遞的入口函數(shù)的參數(shù)。如2.1節(jié)所述WSAAsyncSelect函數(shù)實現(xiàn)套接字自主監(jiān)控網絡事件的功能,一旦啟動該函數(shù),將啟動一個網絡事件監(jiān)控的一個線程,因此若在主線程即界面線程中就調用該函數(shù),則會與串口消息的OnComm 事件處理函數(shù)發(fā)生沖突,因此將在工作線程的入口函數(shù)調用WSAAsyncSelect函數(shù),為其開辟另一個工作線程,實現(xiàn)網絡通信和串口通信的并行執(zhí)行。
(2)利用CreatThread函數(shù)創(chuàng)建Windows Socket工作線程
參數(shù)lpThreadAttributes用來決定線程句柄是否可以被子線程繼承,此處將其設為NULL,令返回的句柄不能被繼承;參數(shù)dwStackSize指定新線程的堆棧的大小,將其設為0,線程將與進程的主線程堆棧相同;參數(shù)lpStartAddress是指向線程的入口函數(shù),即2.3 節(jié) (1)中所建立的函數(shù);參數(shù)lpParameter是線程傳遞給線程入口函數(shù)的參數(shù);參數(shù)dwCreationFlags設為0,使得線程產生后立即執(zhí)行;參數(shù)lpThreadId用來存放返回線程ID。
(3)利用Terminate Thread函數(shù)終止線程
BOOL Terminate Thread (HANDLE hThread,DWORD dwExitCode);
3.1.1 設計通信接口配置界面
界面由兩部分組成,一個是MSComm 串口通信配置;另一個是Windows Socket 套接字的配置。效果如圖5所示。
通過對相關參數(shù)的配置,實現(xiàn)了對MSComm 串口和Windows Socket套接字的初始化,只要啟動連接則建立了與POS系統(tǒng)的連接,可以實現(xiàn)數(shù)據傳輸和系統(tǒng)監(jiān)控。
3.1.2 串口監(jiān)控主界面設計
監(jiān)控界面由三大部分組成,一是系統(tǒng)的通信狀態(tài)顯示;二是系統(tǒng)的工作狀態(tài)顯示;三是系統(tǒng)的工作參數(shù)顯示。效果如圖6所示。
實驗采用北京航空航天大學研制的1.5代光纖POS系統(tǒng),測試系統(tǒng)如圖7所示。
圖5 通信接口配置界面
圖6 串口監(jiān)控主界面
圖7 測試系統(tǒng)結構
測試結果:POS系統(tǒng)靜態(tài)測試實驗驗證了,多方式通信并行性的可行性,上位機既能實時通過串口監(jiān)控POS系統(tǒng)的工作狀態(tài),同時能通過網口實時存儲GPS接收機的實時衛(wèi)星導航結果數(shù)據。圖8和圖9是測試結果。
圖8 上位機實時串口監(jiān)控結果
圖9 網口實時存儲的衛(wèi)星導航結果數(shù)據
本文利用多線程方法,提出開辟工作線程,將以太網通信置于后臺運行,避免了與界面線程的串口通信的沖突,因此實現(xiàn)了以太網通信和串口通信并行通信。該方案有效的利用了網絡通信和串口通信各自的優(yōu)點,使得上位機既能實現(xiàn)與POS系統(tǒng)的高速數(shù)據傳輸,又能實現(xiàn)對POS系統(tǒng)監(jiān)控。但該方案還存在不足之處,這兩種通信方式只是獨自運行,并未進行數(shù)據交流共享,下一步可研究兩種通信方式的數(shù)據交換共享,充分利用數(shù)據信息,擴展其功能。
[1]HAN Rui.Motion compensation system for SAR based on GPS/IMU intetgrated navigation [J].Journal of Chinese Inertial Technology,2013,21 (3):308-311 (in Chinese). [韓銳.一種基于GPS/IMU 組合導航的機載SAR 運動補償方案[J].中國慣性技術學報,2013,21 (3):308-311.]
[2]YANG Sheng,F(xiàn)ANG Jiancheng.Design and realization of POS data acquisition and processing system based on double DSP [J].Chinese Journal of Scientific Instrument,2008,29(9):1822-1826 (in Chinese). [楊勝,房建成.基于雙DSP的POS數(shù)據采集與處理系統(tǒng)的設計與實現(xiàn) [J].儀器儀表學報,2008,29 (9):1822-1826.]
[3]FANG Jiancheng,ZHANG Zhou,GONG Xiaolin.Modeling and simulation of transfer alignment for distributed POS [J].Journal of Chinese Inertial Technology,2012,20 (4):379-385 (in Chinese).[房建成,張舟,宮曉琳.機載分布式POS傳遞對準建模與仿真 [J].中國慣性技術學報,2012,20(4):379-385.]
[4]ZHOU Kun,F(xiàn)U Desheng.Data transmission and security on net based on Windows socket[J].Computer Engineering and Design,2007,28 (22):5381-5383 (in Chinese). [周坤,傅德勝.基于Windows Socket的網絡數(shù)據傳輸及其安全 [J].計算機工程與設計,2007,28 (22):5381-5383.]
[5]GONG Chao,GONG Liang.TCP/IP-based OPC communication between heterogeneous platforms [J].Computer Engineering,2008,44 (21):62-64 (in Chinese).[鞏超,宮亮.基于TCP/IP的異構平臺OPC通信 [J].計算機工程,2008,44 (21):62-64.]
[6]XIAO Meihua,YU Liquan.Model extraction and reliability verification on SOCKET communition program [J].Computer Science,2012,39 (11):102-106 (in Chinese). [肖美華,余立全.SOCKECT 通信程序模型抽取及可靠性驗證 [J].計算機科學,2012,39 (11):102-106.]
[7]WANG Yuanyang,ZHOU Yuanping.The accomplishment of multi-pthread communication based on socket model in the Linux[J].Microcomputer Information,2009,25 (5-3):70-72 (in Chinese).[王遠洋,周淵平.Linux下基于socket多線程并發(fā)通信的實現(xiàn)[J].微計算機信息,2009,25 (5-3):70-72.]
[8]WANG Jianxin,YAN Jun.Application of MSComm and Multthread in data acquisition system [J].Computer Applications and Software,2006,23 (4):134-136 (in Chinese). [王建新,嚴駿.MSComm 和多線程在數(shù)據采集系統(tǒng)中的應用 [J].計算機應用與軟件,2006,23 (4):134-136.]
[9]ZHANG Guolong,XU Xiaosu.Design of simulation inertial measurement units based on multithreading of VC++ [J].Journal of Chinese Inertial Technology,2009,17 (1):20-23(in Chinese).[張國龍,徐曉蘇.基于VC++多線程技術的模擬慣性測量組件設計 [J].中國慣性技術學報,2009,17(1):20-23.]
[10]QU Wenxin,F(xiàn)AN Xiaoya.Research progress in memory technique of the multi-core and multi-thread processor [J].Computer Science,2007,34 (4):13-16 (in Chinese).[屈文新,樊曉椏.多核多線程處理器存儲技術研究進展 [J].計算機科學,2007,34 (4):13-16.]
[11]FENG Junyu,DAI Qingyun.Realtime data collecting system basing on Multi-thread serial communition technology [J].Microcomputer Information,2006,22 (10):149-152 (in Chinese).[馮峻域,戴青云.基于多線程串口通信的生產數(shù)據實時采集系統(tǒng)[J].微計算機信息,2006,22 (10):149-152.]