丁 昊,谭美景,王万历,张晓楠
(1.信息工程大学 测绘学院,河南 郑州 450052;2.65015部队,辽宁 大连 116000;3.68011部队,甘肃 兰州 730020)
作为软件行业新兴的一个分支,中间件技术越来越受到广泛的关注。中间件的核心思想在于分层,即通过在应用层和底层基础软件之间增加一层,来屏蔽底层软件复杂的细节,减少程序设计的复杂性。
鉴于以往的北斗应用系统的设计,在数据的获取和访问上通常与特定的北斗硬件设备绑定在一起。对于软件的开发人员来说,需要根据特定的北斗硬件设备开发北斗定位数据的访问模块,当系统移植到新的硬件平台上时,就必须重新编写大量的北斗数据的访问代码。因为不同厂商的北斗设备具有不同的调用方式,更换不同的厂家的设备意味着要重新编写大量的代码,增加了应用系统开发的复杂度和工作量。而对于软件的最终用户来说,已投入使用的软件系统无法与新的硬件一起工作,从而无法得到硬件升级和降价带来的好处。
基于以上分析,本文提出和设计了北斗数据接入中间件,通过对不同厂商北斗硬件设备的描述和分析,设计了一个通用的北斗数据接入具体实现层,从而屏蔽了北斗数据的接入、通信和传输细节,以及北斗数据接收终端硬件的差异。对于开发人员来说减少了开发难度和工作量,对于终端用户来说,也方便了系统的升级,节约了用户的成本。
对于通常的基于北斗用户机开发应用系统的用户来说,典型的研发环境如图1所示。
图1 北斗应用系统典型研发环境
在该典型研发环境下,北斗用户机工作的基本原理是:应用系统根据功能发送相应操作指令,北斗用户机接收指令并处理,如果处理结果不需要返回给应用系统,则本次北斗应用结束,否则北斗用户机返回处理结果,应用系统接收结果进行业务处理完成功能,本次北斗应用结束。
因此,这种开发方式存在的问题是,针对不同厂商的北斗用户机,开发人员都要针对性的开发一套应用系统,一旦用户机设备发生变化,那么系统也将跟着改变,这种开发方式存在着很大的弊端。
北斗数据接入中间件是要在不同的北斗用户机硬件平台上运行的统一的北斗数据访问接口,其设计上不仅要考虑到怎样向外界的应用系统提供统一的功能接口,还要考虑到不同指挥机硬件设备数据接口的差异,所以,北斗数据接入中间件要坚持以下几个设计原则:
1)符合需求。北斗数据接入中间件是提供给指挥监控系统开发应用的,所以最基本的原则是要满足客户的需求。
2)可移植性。北斗数据接入中间件必须提供统一的编程接口,屏蔽北斗指挥机硬件平台的差异,这样,指挥监控系统的应用才具有极强的可移植性,容易与不同的指挥机硬件配合使用。
3)稳定性。北斗数据接入中间件的使用不能影响指挥监控系统的运行效率,且必须能保证系统正确稳定的运行。
4)可扩充性。北斗数据接入中间件建成后会有一段较长的使用周期,在周期范围内,应用系统的功能不断增加,应用的层次不断升级,因此在设计上应充分考虑升级、扩充的可行性和便利性。
北斗数据接入中间件在北斗应用系统中所处的位置如图2所示。
图2 北斗数据接入中间件整体结构设计
目前,应用最广泛的北斗指挥机硬件平台主要为国星北斗指挥机和星地恒通北斗指挥机,而不同的设备厂商所提供的二次开发平台SDK是不一致的,因此,将这些不同的功能函数封装为统一的北斗数据访问接口,从而为上层的应用系统提供服务。
北斗数据接入中间件向下屏蔽了不同厂商的北斗指挥机硬件平台的差异,向上为应用系统提供统一的北斗数据访问服务,使开发人员将注意力集中在系统的业务功能上,不必再为系统在不同硬件上的移植而重复工作,大大降低了开发成本和复杂度,也减少了系统维护的工作量。
不同厂商提供的北斗功能接口主要区别在于接口的命名和参数的传递上,完成的主要功能大体相同,主要有以下5个功能:
1)设备初始化。该接口一般在系统初始化的时候调用,现有的北斗指挥机硬件都是基于串口通信,通过该接口完成串口的打开,以及一些相关参数的设置,如:设置注册数据收发的窗口,或者设置数据接收的回调函数接口。
2)定位申请。北斗系统其中一项最大的功能就是申请定位数据,传递包括入站波束号、定位类别、入站频度等参数。系统通过调用定位申请接口向北斗硬件设备请求定位数据,硬件设备通过系统回调函数或者消息的方式把用户当前位置发送给用户系统。
3)通信申请。通信申请是完成北斗用户机向其他用户机通信的功能,通过向北斗硬件设备发送通信申请命令完成通信,主要包括入站波束号、通信类别、通信信息类型、编码方式、接收方用户地址以及通信内容等参数。
4)授时申请。主要完成标准时间的获取。
5)设备自毁。该接口用于收发管理模块的销毁,释放资源,通常在程序退出时调用。
北斗数据接入中间件是专为指挥监控系统开发的数据访问接口,其作用主要是提供指挥监控业务过程中的功能函数。为了满足实际的应用需求,根据前一节的分析,北斗数据接入中间件应具备以下几个方面的功能:北斗设备打开、用户信息请求、定位请求、通信请求、查询请求、北斗设备关闭、设备自销毁。
两家北斗系统硬件供应厂商虽然在提供的二次开发接口上有很大差别,例如:国星公司的定位申请、通信申请以及授时服务都是调用同一接口,通过传递参数的类型来判断不同的申请命令,完成相应的功能。而星地恒通公司提供的接口则是按照具体的业务功能来划分。而且两家公司的回调方式也是有很大区别的,因此,如何设计一套统一的接口针向上为系统应用层屏蔽底层的实现细节,向下对各家平台都能提供支持和扩展是中间件设计的关键。
类的设计结构图如图3所示。
图3 北斗数据接入中间件接口设计
中间件的接口定义主要包括两部分,即命令发送接口(IC_BDRequest)与业务逻辑功能回调接口(IC_BDRespond)。其中命令发送接口由中间件层实现,而业务逻辑功能回调接口具体实现是在业务系统中,因为不同的业务系统针对不同业务完成的功能不一样,因此,业务逻辑回调接口由业务系统实现,中间件通过业务逻辑功能回调接口通知系统完成相应功能。
2.2.1 IC_BDRequst接口
IC_BDRequest接口中定义了8个函数,图3中上方的4个结构体是请求接口用到的4个打包参数,接口定义函数描述如下:
openDevice函数是设备打开函数,完成北斗硬件系统的打开以及初始化工作,传递的参数结构设备信息tagDevinfo,其中,port表示连接串口号;baud表示传输波特率;config表示设备配置信息(也可用于扩展传递其他类型的信息,比如接入其他种类的设备或者模拟器之类)。
respondCall函数是注册回调对象,前面已经讲过回调对象接口是由业务系统实现,在系统初始化的时候,调用该函数注册对象。
requestICinfo函数是查询当前用户机的IC卡信息。
requestPosinfo函数是申请定位函数,申请当前用户的位置,其中定位申请数据结构为tagDwsq。结构中urgency表示是否紧急定位;infoType表示信息类别,0表示有高程,1表示无测高;hbH表示海拔高度;antennaH表示天线高度;freq表示入站频度,单位为s,0时为单次入站,否则为连续定位。
requestCommunication函数是申请通信函数,向其他用户机发送通信内容,如果当前是用户指挥机也可以向下辖机广播通信内容。通信申请参数数据结构为tagTxsq。其中,posthaste表示是否为特快通信;bcd表示是否为BCD编码方式;bResponse表示是否应答,0为否,1为是;srcID表示发送信息源的卡号;destID表示目标机的卡号,如果使用的是指挥卡,且该地址为通播地址,则为广播,下辖用户均可收到;content表示电文内容。
requstQuery函数是申请查询函数,查询目标机的位置或者通信信息等内容。查询申请数据结构为tagQuery。其中,destID表示被查询的目标机的卡号;type表示查询类别,0为定位,1为通信;para定位查询时表示“定位次数”,00为1次,01为2次,02为3次,通信查询时表示“查询方式”,00为最新查询,01为按发送方地址查询,02为回执。
2.2.2 IC_BDRespond接口
IC_BDRespond的接口定义主要针对业务系统的业务需求来定制,比如本实验系统主要针对北斗用户机的信息获取,北斗定位申请以及北斗通信3个业务功能有需求,因此设计3个函数完成相应的功能。
respondICinfo函数响应查询IC卡信息请求,返回参数中用户IC卡信息数据结构为tagICinfo。其中,localID表示本机IC卡卡号;broadcastID表示通播地址;freq表示入站频度;userNum表示下辖机个数;userIDs表示下辖机卡号。
respondPosinfo函数响应查询用户的位置信息,返回参数中定位信息数据结构为tagPosinfo。其中,bQuery表示是否被查询;id表示定位信息的卡号;lTime表示定位时间;dL表示经度;dB表示纬度;iH表示高程。
respondCommuinfo函数响应用户通信的信息,当有用户向本机通信时会被调用,返回参数中通信信息数据结构为tagCommuinfo。其中,bQuery表示是否被查询;sendID表示发送方卡号;inceptID表示接收方卡号;lTime表示通信时间;bBCD表示是否为BCD编码方式;len表示通信内容长度;szContent表示通信内容。
北斗数据接入中间件的工作流程如图4所示。
图4 北斗数据接入中间件工作流程
在确定北斗指挥机硬件类型的基础上,将相关参数传入北斗数据接入中间件对其进行初始化,同时系统调用中间件接口IC_BDRequest中的respondCall函数设置系统实现的业务逻辑回调对象,该对象实现了IC_BDRespond接口。当需要完成某一业务功能时,系统调用中间件的IC_BDRequest的接口,并发送相应的命令请求数据,经过北斗系统处理后,中间件调用IC_BDRespond接口,接收响应的信息数据,并完成IC_BDRespond的功能。
综上所述,本文主要综合分析了几家北斗指挥机的数据接口的描述,提出并设计了北斗数据接入中间件的接口结构以及存储传递的数据结构,该结构基本包容了北斗指挥机数据接口的描述,功能全面且易于使用。
[1]华一新,吴升,赵军喜.地理信息系统原理与计数[M].北京:解放军出版社,2001.
[2]Erich Gamma,Richard Helm,Ralph Johnson,等.设计模式:可复用面向对象软件的基础[M].李英军,马晓星,蔡敏,等译.北京:机械工业出版社,2000.
[3]袁力.基于北斗卫星技术的军交运输指挥系统关键技术研究[D].吉林:吉林大学,2009.
[4]武丽丽,华一新,陈艳丽,等.基于“北斗一号”虚拟机管理型用户机系统的设计与实现[J].测绘科学,2011,36(6):227-229.
[5]武丽丽,华一新,张亚军,等.“北斗一号”监控管理网设计与实现[J].测绘科学,2008,33(5):7-9.
[6]张习国,刘建.基于北斗导航系统的移动监控管理系统研究[J].武汉理工大学学报:信息与管理工程版,2005,27(5):63-65.