POS实时监控软件多线程通信设计及实现
2015-12-23刘艳群朱庄生
刘艳群,朱庄生
(1.北京航空航天大学 惯性技术重点实验室,北京100191;2.北京航空航天大学 新型惯性技术仪表与导航系统技术国防重点学科实验室,北京100191)
0 引 言
位置姿态测量系统 (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系统的数据传输及系统的监控,消除了单一监控接口的弊端,充分利用了不同通信方式的优势,实现优势互补,具有很好的工程应用价值。
1 多线程通信方法
1.1 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 总线通信主要用于与载荷间的高速数据传输;以太网通信主要用于高速数据的存储传输。本文提出一种多线线程的通信方案,采用以太网通信和串口通信并行使用,解决了高速数据传输和实时监控的问题。
1.2 多线程通信设计总体方案
MFC中有两类线程,分别称之为用户界面线程和工作者线程。用户界面线程拥有自己的消息队列和消息循环来处理界面消息,可以与用户进行交互;工作者线程没有消息循环,一般用来完成后台计算和维护任务。本文提出的多线程方法总台方案是:在工作者线程中开启一个以太网通信工作线程,利用Windows Socket 控件建立了基于TCP/IP协议的以太网通信[4-7],在软件后台运行,实现与POS系统高速数据的传输;在用户界面线程运行串口通信线程,利用MSComm 控件设计串口通信[8-11],实现与用户的交互,实现对POS系统状态的实时监控;利用工作者线程与用户界面线程拥有各自的消息响应机制,不会产生干扰的特性,实现了以太网和串口并行通信。总体设计方案流程如图2所示。
图2 多线程通信设计流程
2 多线程通信设计
2.1 串口通信设计
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系统的下位机发送指令
2.2 以太网通信设计
Windows Socket支持两种类型的套接字,即流式套接字 (SOCK _STREAM)和数据报套接字 (SOCK _DGRAM)。因为POS系统的复杂性,和考虑系统安全可靠性要求,本次设计采用的是流式套接字。且采用TCP/IP协议,上位机监控软件作为客户端,POS系统作为服务器。以太网通信设计流程如图4所示。
图4 以太网通信流程
(1)以太网初始化,加载套接字数据库,创建流式套接字,将套接字设为非阻塞模式。
(2)利用WSAAsyncSelect函数建立套接字的事件通知
(3)添加网络事件处理函数OnSockt。
(4)利用connect函数创建与POS系统服务器的连接
2.3 多线程设计
多线程设计流程如图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 界面设计及实验验证
3.1 界面设计
3.1.1 设计通信接口配置界面
界面由两部分组成,一个是MSComm 串口通信配置;另一个是Windows Socket 套接字的配置。效果如图5所示。
通过对相关参数的配置,实现了对MSComm 串口和Windows Socket套接字的初始化,只要启动连接则建立了与POS系统的连接,可以实现数据传输和系统监控。
3.1.2 串口监控主界面设计
监控界面由三大部分组成,一是系统的通信状态显示;二是系统的工作状态显示;三是系统的工作参数显示。效果如图6所示。
3.2 实验验证
实验采用北京航空航天大学研制的1.5代光纤POS系统,测试系统如图7所示。
图5 通信接口配置界面
图6 串口监控主界面
图7 测试系统结构
测试结果:POS系统静态测试实验验证了,多方式通信并行性的可行性,上位机既能实时通过串口监控POS系统的工作状态,同时能通过网口实时存储GPS接收机的实时卫星导航结果数据。图8和图9是测试结果。
图8 上位机实时串口监控结果
图9 网口实时存储的卫星导航结果数据
4 结束语
本文利用多线程方法,提出开辟工作线程,将以太网通信置于后台运行,避免了与界面线程的串口通信的冲突,因此实现了以太网通信和串口通信并行通信。该方案有效的利用了网络通信和串口通信各自的优点,使得上位机既能实现与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.]