基于Qt和OpenDDS的船舶电力模拟训练系统指令处理方法
2019-01-08,,,
,,,
(1.海军驻大连426厂军代表室,辽宁 大连 116001;2.中国舰船研究设计中心,武汉 430064;3.海军工程大学 电气工程学院,武汉 430033)
随着电力监控系统在船舶中的应用及部队训练需求,亟须建立船舶电力虚拟模拟训练系统[1-3],对船员进行相应的培训辅导,使其尽快掌握必要的基础知识和实际的操作技能。在船舶电力虚拟模拟训练系统中,训练人员主要通过人机交互接口,点击与实船一致的虚拟操控面板上的按键,实时触发相关的指令处理逻辑,以实现正常的模拟训练功能。因此,对于上述在模拟训练系统中经常出现的指令实时处理问题,需要寻求一种实时的指令处理方法,以便舰员在操作时能够体验到与实际系统操作时完全一致的实时操作,只有设计出这样的训练系统,才能真正实现“训战一致”[4]。基于以上需求,提出一种基于Qt和OpenDDS的船舶电力模拟训练系统指令处理方法,以满足船舶电力虚拟模拟训练系统对指令处理的实时性需求。
1 指令信息流传递方法
Qt是一个跨平台的C++图形用户界面库[5], OpenDDS为对象管理组织OMG的实时数据分发系统的C++开源实现[6],基于Qt和OpenDDS的船舶电力模拟训练系统指令信息流传递方法见图1。参与指令信息流传递的对象如下。
1)训练客户端,类型为参与者(participant),在模拟训练系统中直接与用户进行交互。
2)客户端仿真模型,类型为实体(entity),为电力模拟训练系统在客户端的一个数据缓存模型,用于实时同步服务器仿真模型的数据。
3)DDS指令发送接口,类型为实体(entity),为电力模拟训练系统中的DDS指令数据分发模型接口,用于向指令数据分发接口写指令数据。
4)DDS指令应答接收接口,类型为实体(entity),为电力模拟训练系统中的DDS指令应答数据分发模型接口,用于从指令应答数据分发接口读指令应答数据。
5)DDS指令接收接口,类型为实体(entity),为电力模拟训练系统中的DDS指令数据分发模型接口,用于从指令数据分发接口读指令数据。
6)DDS指令应答发送接口,类型为实体(entity),为电力模拟训练系统中的DDS指令应答数据分发模型接口,用于向指令应答数据分发接口写指令应答数据。
7)服务器仿真模型,类型为实体(entity),为电力模拟训练系统在服务器端的一个数据缓存模型。用于建立服务器端电力系统仿真模型,是客户端仿真模型实时数据的来源。服务器仿真模型与客户端仿真模型在构建时同属于一个类XiTong,具有相同的属性和方法。只是在运行时为不同实体,其调用XiTong类中不同的方法电力系统仿真服务器,类型为参与者(participant)。作为仿真服务器,接收指令并做出正确的响应,同时为客户端提供模拟训练所需的电力系统仿真数据。
图1 指令信息流传递方法
8)DDS信息仓库,类型为参与者(participant),为电力模拟训练系统在客户端的一个数据缓存模型,用于实时同步服务器仿真模型的数据。
整个信息流传递流程如下。
训练客户端->客户端仿真模型:调用faSongZhiLing()方法发送指令
客户端仿真模型->客户端仿真模型:将指令存入待发送缓存列表
客户端仿真模型->DDS指令发送接口:发射指令待发送信号
DDS指令发送接口->DDS信息仓库:写指令数据
DDS信息仓库->DDS指令接收接口:读指令数据
DDS指令接收接口->服务器仿真模型:发射指令到达信号
服务器仿真模型->服务器仿真模型:将指令存入指令接收缓存列表
服务器仿真模型->电力系统仿真服务器:发射指令到达信号
电力系统仿真服务器->电力系统仿真服务器:处理指令
电力系统仿真服务器->服务器仿真模型:指令处理结果反馈
服务器仿真模型->DDS指令应答发送接口:发射指令应答到达信号
DDS指令应答发送接口->DDS信息仓库:写指令应答数据
DDS信息仓库->DDS指令应答接收接口:读指令应答数据
DDS指令应答接收接口->客户端仿真模型:发射指令应答到达信号
客户端仿真模型->客户端仿真模型:将指令应答存入指令应答接收缓存列表
客户端仿真模型->训练客户端:发射指令应答到达信号
训练客户端->训练客户端:将指令应答结果反馈用户
2 指令合法性判断方法
当指令信息流被传递到电力系统仿真服务器时,仿真服务器需要对指令进行处理,即需要完成以下任务。
从指令接收缓存列表头部取出一条待处理指令。
根据指令类型和当前模拟电力系统的控制方式和指令的操作部位,判断指令的合法性。
若指令合法,继续根据指令类型和电力系统当前的运行状态,判断指令的合法性。
若指令合法,则执行指令。
将指令的处理结果反馈给训练客户端,若指令执行失败(包括指令不合法等情况),在指令应答信息中给出执行失败的原因。
指令合法性判断方法见图2。
图2 指令合法性判断流程
3 指令处理架构负载测试与分析
为了对设计的指令架构的性能进行比较与分析,必须通过定量化、通用的一些性能测试工具与方法,对上述方法进行测试,并对结果进行比较与分析。软件其他功能可以通过检验验证,不需要测试[7]。负载测试是为了检验系统在给定负载下是否能达到预期性能指标。文中将主要采用Windows资源监视器进行负载测试。
分别同时启动单个客户端、50个客户端,访问相应的仿真电力系统实时数据包以及典型的指令实时数据包,对OpenDDS数据分发方法进行测试,得到相应的测试结果。
随着并行客户端访问量的增加,传输的平均总数据也相应增加,由于并行客户端访问量的增加,服务器的响应时间也在相应增大,其由单客户端的,增大至100客户端。由于在所有实时分发数据中,仿真电力系统数据帧属于最长的数据帧,其大小为16.7 K,而指令数据帧均比较短,其大小在1 K以内。仿真电力系统数据帧为周期数据,模拟训练服务器每100 ms发送一次。指令数据帧为间歇性随机数据,由客户端根据用户的操作随机发送。通过测试可知,对于实际情况中最常用的1-10个并行客户端场景,通信延迟时间不大于2 ms,对于极限情况下的100个并行客户端场景,通信延迟时间不大于100 ms。上述实时数据分发性能是完全满足船舶电力模拟训练系统实际应用的需求。
4 结论
文中提出一种基于Qt和OpenDDS的船舶电力模拟训练系统指令处理方法。首先,基于指令信息流传递方法,对参与到指令实时处理中的多个对象进行分别解耦建模,并对多个实体间消息相互传递的相互作用和关系进行描述;然后,根据系统当前状态对指令的合法性进行实时判定;最后,对基于Qt和OpenDDS的船舶电力模拟训练系统指令处理方法进行负载测试。测试结果表明,该方法能满足船舶电力模拟训练系统实际应用需求。