劉艷群,朱莊生
(1.北京航空航天大學 慣性技術重點實驗室,北京100191;2.北京航空航天大學 新型慣性技術儀表與導航系統技術國防重點學科實驗室,北京100191)
位置姿態測量系統 (position and orientation system,POS)[1,2]主要由慣性測量單元 (inertial measurement unit,IMU)、全球定位系統 (global position system,GPS)、POS計算機系統 (POS computer system,PCS)和后處理軟件組成[3],因此POS系統是一個復雜且有大量數據信息傳遞和存儲的系統。從POS工程應用背景的需求來說,需要對POS系統進行實時監控,但要實現對POS系統的實時監控,首要解決是通信問題。監控軟件常用監控接口有串口、USB口、網口等。監控軟件一般采用單一的接口作為監控接口,但這種方式會導致監控能力受到接口性能的限制。例如:串口數據傳輸速度和傳輸距離導致監控軟件只能實現低速、短距離的監控;以太網雖能實現高速、遠距離監控,但大數據量的傳輸會造成數據流阻塞和資源浪費。
本文基于Windows Socket的網絡數據傳輸和MSComm串口通信原理,設計基于TCP/IP 協議的流式套接字的網絡數據傳輸和MSComm 串口監控多線程通信系統,實現對POS系統的數據傳輸及系統的監控,消除了單一監控接口的弊端,充分利用了不同通信方式的優勢,實現優勢互補,具有很好的工程應用價值。
POS的基本工作原理如圖1所示,系統由IMU 和POS導航計算機兩大部分組成,POS導航計算機集成了系統供電單元、GNSS接收單元、數據處理單元、數據存儲單元等;IMU 由加速計、陀螺儀和溫度傳感器等各類傳感器構成。利用IMU 可實時連續地測量載體的角速度和加速度信息,通過積分運算可得載體的位置、速度和姿態等參數,但由于積分運算會導致誤差的積累而引發導航結果的發散;GNSS單元通過獲取衛星信號實時解算得到高精度的位置信息,但其數據更新率低;因此將兩者組合起來,綜合二者的優點,實現優勢互補,經過平滑、事后差分等后處理,可以獲得更高精度的位置姿態信息。

圖1 POS的基本工作原理
由于POS應用于各種載荷,POS接口也從單一的串口向多樣的、高速、可靠接口發展,目前POS 的接口資源有:串口RS-232、串口RS-422、CAN 口、以太網等。
由于串口RS-232和RS-422結構簡單,編程簡易,已廣泛作為工業通信的一種手段。串口RS-232的最大傳輸距離約為15m,最大傳輸速率為460800b/s;串口RS-422的最大傳輸距離約為1200 多米,最大傳輸速率為10Mb/s。但串口RS-232、RS-422 通信的可靠性低,抗噪聲干擾性弱,以及其傳輸速度和傳輸距離的限制,使其通信能力受到嚴重的局限。
CAN 總線屬于工業現場總線,是一種有效支持分布式控制或實時控制的串行通信網絡。與一般的通信總線相比,CAN 總線網絡各節點之間的數據通信實時性強,通信速率最高可達1Mb/s,但傳輸距離與速率成反比例。CAN 總線適用于大數據量短距離或者長距離小數據量,實時性要求比較高的通信。
以太網通信是一種高速、可靠的通信方式,目前10、100Mb/s的快速以太網已開始廣泛應用,1Gb/s以太網技術也逐漸成熟。且通信網絡具有更高的帶寬和性能,通信協議有更高的靈活性,是任何一種通信手段所無法比擬得。
根據各接口的特點,在POS中串口主要用于器件間的低速數據傳輸,如與監控上位機間的數據傳輸;CAN 總線通信主要用于與載荷間的高速數據傳輸;以太網通信主要用于高速數據的存儲傳輸。本文提出一種多線線程的通信方案,采用以太網通信和串口通信并行使用,解決了高速數據傳輸和實時監控的問題。
MFC中有兩類線程,分別稱之為用戶界面線程和工作者線程。用戶界面線程擁有自己的消息隊列和消息循環來處理界面消息,可以與用戶進行交互;工作者線程沒有消息循環,一般用來完成后臺計算和維護任務。本文提出的多線程方法總臺方案是:在工作者線程中開啟一個以太網通信工作線程,利用Windows Socket 控件建立了基于TCP/IP協議的以太網通信[4-7],在軟件后臺運行,實現與POS系統高速數據的傳輸;在用戶界面線程運行串口通信線程,利用MSComm 控件設計串口通信[8-11],實現與用戶的交互,實現對POS系統狀態的實時監控;利用工作者線程與用戶界面線程擁有各自的消息響應機制,不會產生干擾的特性,實現了以太網和串口并行通信。總體設計方案流程如圖2所示。

圖2 多線程通信設計流程
MSComm 控件有兩種處理通信的方式,一種是事件驅動方式;另一種是定時或不定時查詢方式。本次設計要實現對POS系統的實時監控,因此對程序的實時性和速度要較高要求,所以本次設計選擇了事件驅動方式。串口通信設計流程如圖3所示。
(1)對MSComm 控件的進行初始化配置

將MSComm 控件通信端口設置為端口1;波特率為9600,無校驗位,8位數據位,1位停止位;以二進制方式接收數據;當緩沖器有數據就觸發OnComm 事件;每次都將緩沖區的數據全部接收。
(2)編寫OnComm 事件處理函數

利用GetCommEvent()函數獲取串口事件,當返回值為2時表示緩沖區有數據;將緩沖區的數據提取出來。
(3)利用SetPortOpen函數打開串口
BOOL CMSComm::SetPortOpen (BOOL Value)
當Value設置為TURE 時串口打開;設置為FALSE則串口關閉。
(4)利用函數通過串口向POS系統的下位機發送指令


Windows Socket支持兩種類型的套接字,即流式套接字 (SOCK _STREAM)和數據報套接字 (SOCK _DGRAM)。因為POS系統的復雜性,和考慮系統安全可靠性要求,本次設計采用的是流式套接字。且采用TCP/IP協議,上位機監控軟件作為客戶端,POS系統作為服務器。以太網通信設計流程如圖4所示。

圖4 以太網通信流程
(1)以太網初始化,加載套接字數據庫,創建流式套接字,將套接字設為非阻塞模式。

(2)利用WSAAsyncSelect函數建立套接字的事件通知


(3)添加網絡事件處理函數OnSockt。

(4)利用connect函數創建與POS系統服務器的連接

多線程設計流程如圖2所示。串口通信界面線程位于主線程中,完成MSComm 控件的初始化后,就開啟串口通信界面線程,因此多線程的設計主要是針對以太網工作線程設計。
(1)創建Windows Socket工作線程的入口函數
DWORD WINAPI ThreadFun(LPVOID pThread)
創建工作線程時,首先要先建立線程的入口函數,當工作線程被啟動后會轉入該函數,并且函數退出時工作線程就會結束。ThreadFun是入口函數名,也就是工作線程開始執行時代碼所在的函數地址,pThread是工作線程傳遞的入口函數的參數。如2.1節所述WSAAsyncSelect函數實現套接字自主監控網絡事件的功能,一旦啟動該函數,將啟動一個網絡事件監控的一個線程,因此若在主線程即界面線程中就調用該函數,則會與串口消息的OnComm 事件處理函數發生沖突,因此將在工作線程的入口函數調用WSAAsyncSelect函數,為其開辟另一個工作線程,實現網絡通信和串口通信的并行執行。
(2)利用CreatThread函數創建Windows Socket工作線程

參數lpThreadAttributes用來決定線程句柄是否可以被子線程繼承,此處將其設為NULL,令返回的句柄不能被繼承;參數dwStackSize指定新線程的堆棧的大小,將其設為0,線程將與進程的主線程堆棧相同;參數lpStartAddress是指向線程的入口函數,即2.3 節 (1)中所建立的函數;參數lpParameter是線程傳遞給線程入口函數的參數;參數dwCreationFlags設為0,使得線程產生后立即執行;參數lpThreadId用來存放返回線程ID。
(3)利用Terminate Thread函數終止線程
BOOL Terminate Thread (HANDLE hThread,DWORD dwExitCode);
3.1.1 設計通信接口配置界面
界面由兩部分組成,一個是MSComm 串口通信配置;另一個是Windows Socket 套接字的配置。效果如圖5所示。
通過對相關參數的配置,實現了對MSComm 串口和Windows Socket套接字的初始化,只要啟動連接則建立了與POS系統的連接,可以實現數據傳輸和系統監控。
3.1.2 串口監控主界面設計
監控界面由三大部分組成,一是系統的通信狀態顯示;二是系統的工作狀態顯示;三是系統的工作參數顯示。效果如圖6所示。
實驗采用北京航空航天大學研制的1.5代光纖POS系統,測試系統如圖7所示。

圖5 通信接口配置界面

圖6 串口監控主界面

圖7 測試系統結構
測試結果:POS系統靜態測試實驗驗證了,多方式通信并行性的可行性,上位機既能實時通過串口監控POS系統的工作狀態,同時能通過網口實時存儲GPS接收機的實時衛星導航結果數據。圖8和圖9是測試結果。

圖8 上位機實時串口監控結果

圖9 網口實時存儲的衛星導航結果數據
本文利用多線程方法,提出開辟工作線程,將以太網通信置于后臺運行,避免了與界面線程的串口通信的沖突,因此實現了以太網通信和串口通信并行通信。該方案有效的利用了網絡通信和串口通信各自的優點,使得上位機既能實現與POS系統的高速數據傳輸,又能實現對POS系統監控。但該方案還存在不足之處,這兩種通信方式只是獨自運行,并未進行數據交流共享,下一步可研究兩種通信方式的數據交換共享,充分利用數據信息,擴展其功能。
[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,FANG 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數據采集與處理系統的設計與實現 [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,FU 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的網絡數據傳輸及其安全 [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多線程并發通信的實現[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 和多線程在數據采集系統中的應用 [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,FAN 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).[馮峻域,戴青云.基于多線程串口通信的生產數據實時采集系統[J].微計算機信息,2006,22 (10):149-152.]