2005年1月第27卷第1期系统工程与电子技术SystemsEngineeringandElectronicsJan.2005Vol127No11文章编号:10012506X(2005)0120066204基于Pcomm组合导航系统高效串行通讯技术实现卞鸿巍1,2,金志华1,田蔚风1(1.上海交通大学仪器工程系,上海200030;2.海军工程大学电气工程系,湖北武汉430033)摘要:为使组合导航系统串行通讯满足多通道、稳定、快速等多种特殊要求,在对常规WindowsAPI函数、多线程控制和异步OverlappedI/O等技术利弊分析的基础上,采用面向对象的程序设计方法,对MoxaPcomm函数库功能进行了分析和封装,建立了一种新的高速串行通讯类的通讯程序设计方法。该技术方法在Windows平台的组合导航系统设计中得到了有效的验证和应用,可使通用串行通讯程序的设计更加简便、紧凑、可靠和易于维护。关键词:组合导航系统;串行通讯;面向对象中图分类号:V241.5文献标识码:ADevelopmentofgeneralhigh2speedmulti2portcommunicationbasedonPcommforintegratednavigationsystemBIANHong2wei1,2,JINZhi2hua1,TIANAbstract:Serialcommunication,whichisoneofthemostimportantmethodsfordataaccessandstatecontrolinintegratednavigationsystem(INS),requiresmultiplechannels,highrateandhighmorereliability.Anewwaytoim2plementageneralserialcommunicationdevicewithVC++,MFCandPcommfunctionsbasedonobject2orientedpro2grammingprincipleisdiscussedmainly.Thenewmethodisprovedtobemorecompact,reliableandscalableintheprogrammingofthehigh2speedmulti2portcommunicationforanINSsystem.Keywords:integratednavigationsystem;serialcommunication;object2oriented道高速的数据通讯问题。1引言2常用串行通讯设计方法及问题串行通讯程序设计方法多样而且灵活,适应于不同的应用环境。最常用的方式是在程序中直接调用或使用被类封装的WindowsAPI函数,API函数通过对设备驱动程序的底层控制实现串口操作。进一步采用多线程控制技术和异步OverlappedI/O技术可以使用户实现更复杂的自定义串行通讯类设计。多线程控制技术的采用,可以较好利用Windows操作系统的多任务性能,使被分解的用户工作分别执行,互不影响。在串行通讯的具体设计中,主线程(也称UI线程)用来进行正常的Windows消息处理,完成工序控制和界面操作等任务。初始化时主线程对各串口进行设置,并根据各串口的具体要求创建相应的监控子线程和读写子线程2。当多个串口进行工作时,各线程只单独处理对应串口的通讯任务,完成串口事件的实时监视和数据的预处理,并通过Windows的消息分发机制,将串口事件传递给父窗口,父窗口的消息响应函数实现对数据的进一步处高精度的多功能组合导航系统(integratednavigationsystem,INS),集数据通讯、计算处理、决策规划、监测告警、虚拟仪表、数据管理以及黑匣子等多种功能于一体,可以较好地保障运载体的航行安全、提高控制精度和简化人员作业。INS系统的基本工作方式是在各导航设备独立工作的基础上,对各设备提供的导航数据进行综合处理和信息融合,提供比单一设备精度更高、性能更强的系统导航功能。串行通讯技术是INS系统主要的数据获取和状态控制方式,是其它技术实现的前提。目前在研的某型面向大型舰艇的INS系统需要与GPS系统、惯导系统、计程仪等多种设备通讯连接,设备数多,数据量大;系统串行通讯的精确性和实时性好坏会直接影响INS的整体性能。由于收稿日期:2003-11-06;修回日期:2004-05-10。基金项目:国家自然科学基金资助课题(40125013,40376011)作者简介:卞鸿巍(1972-),男,博士研究生,讲师,主要研究方向为惯性系统与组合导航技术理论及应用。理。线程间的同步则通过事件同步对象完成。在监视子线程中经常使用Win32OverlappedI/O实现对串口的异步控制。该技术可以使程序在系统进行I/O操作的过程中继续处理其它事务,操作系统同样以线程方式执行OverlappedI/O操作。它使用了一个Overlapped数据结构,处理系统和用户程序双向数据传输。程序则在后台等待串口通讯事件,通过WaitCommEvent()API函数检测特定的串行通讯事件。采用多线程技术和OverlappedI/O技术的串行通讯类设计方法应用广泛,其中RemonSpekre...