孟益民
(上海飞机设计研究院民用飞机模拟飞行国家重点实验室,上海 201210)
在民用飞机航电系统的集成过程中,除了真实机载设备外,大量使用仿真模型来替代一些外围飞机系统[1],这些仿真模型之间存在大量的数据交互。由于试验设施由不同的供应商制造,内部采用的通信协议不尽相同,因此需要一个面向应用层的软件中间件,利用已有的公共网络将各个试验设施中的仿真模型连接起来,实现数据和物理传输层的隔离,使技术人员在开发软件或试验的过程中,只需面对他们所关心的数据,而无需关注这些数据是如何传输的。传统的航电仿真平台软件与硬件有较强的关联性,难以兼容不同的通信协议[2-3]。为了解决上述问题,本文设计了一种基于DDS协议的分布式仿真网络,实现了一个通用的仿真模型运行环境。
不同于传统 C/S架构的协议(如 CORBA协议)[4],DDS协议规范了分布式实时系统中数据发布、传递和接收的接口和行为[5]。并提出了以数据为中心的发布/订阅(Data-Centric Publish/Subscribe DCPS)机制[6],提供了一个与平台无关的数据模型。DCPS层是DDS规范的核心,它提供了数据发布的基础架构。DDS的结构如图1所示[7]。
图1 DDS基本网络结构
仿真网络的设计思路是在应用层虚拟一个数据列表,将仿真模型或其他应用程序与物理传输网络隔离开。对于每一个仿真模型,其输出数据反映在仿真网络的虚拟数据列表中,并可被其他应用或仿真模型读取。对于仿真模型的输入数据,均来源于其他仿真模型的输出,即从虚拟数据列表中找到并读取相应的数据即可。这样,所有仿真模型只需关心其输入输出的数据而不用关心数据的来源以及传输方式。虚拟数据列表遵循一个写入读取的原则,即虚拟数据列表中的同一个数据只能存在一个数据源,该数据只能被一个数据源修改,但可同时被多个模型进行读取。
图2 仿真网络架构
仿真网络的底层数据通信使用DDS协议,必须给所有参与通信的节点所收发的数据配置Topic和数据类型。Topic为字符串类型,采用的命名规则为只有数据源节点有对发送数据Topic的命名权力,命名由数据源ID/名称和数据属性描述共同组成,所有命名在同一命名空间内,所有节点需要提交自己的Topic,供接收数据节点选择使用。
为了提供仿真网络的灵活性,在系统设计时并不制定Topic的内容。具体Topic的内容可在仿真网络应用的过程中进行制定。
仿真网络为每一个仿真模型提供5种状态的控制,状态图如图3所示。
图3 仿真模型状态图
模型状态分为初始化状态、运行状态、冻结状态、解冻状态和停止状态这5个状态。其中,初始化状态用于模型自身的载入以及模型预设参数的载入。之后,当模型进入运行状态时,仿真网络便可通过设置时间间隔(步长)从模型获取/发送数据。在冻结状态下,模型将无法进行数据的接收和发送,仿真网络每次获取的数据为冻结前最后一次更新的数据。同样,每次发送的数据模型将不能接收。数据通信的恢复需要进行解冻操作。当模型得到解冻指令后,模型重新处于运行状态。当模型进入停止状态后,模型将不能进行数据的接收和发送,数据通信的恢复需要将模型重新初始化。
模型的5个状态由模型本身通过接口函数的方式提供,仿真网络通过调用接口函数,将仿真模型提供的控制函数注册进入仿真网络,从而控制模型在5个状态之间进行切换。
仿真网络对模型的控制原理如图4所示,仿真模型的控制数据,通过仿真网络解析后,转换为对模型本身的调用操作。仿真模型的控制数据可来源于用户界面或其他控制程序。
图4 仿真网络对模型的控制原理
仿真网络通过IDL文件定义,在DDS网络上自动生成控制数据或状态数据的数据结构,在允许重新编译的前提下,数据结构可任意更改,增加整个仿真网路的兼容性。仿真网络定义了开始、暂停、保持、参数设置、文件推送等5种控制状态。
同时,仿真网络可获取模型当前的状态信息,并把该信息反馈给控制程序。事实上,状态数据可用于反映任何一个运行于仿真网络下的软件实例的当前状态,任意软件实例都可以使用状态数据发布自身的状态。实例的状态数据分为开始、加载、空闲、初始化、初始化完成、设置、就绪、运行、保持、卸载和结束等11种。
当仿真网络接收到控制指令,并对控制指令进行解析后,通过调用相应的函数对仿真模型的状态进行控制,其中int initial()函数用于完成仿真模型的初始化。int run()函数使仿真模型进入运行状态,此时仿真模型可以正常接收和发送数据。int stop()函数完成仿真模型停止运行和设置模型状态操作,此时仿真模型将删除所有实体,当需要再次运行模型时,需重新初始化。int freeze()函数完成仿真模型由运行状态到冻结状态的配置,此时仿真模型实例仍然存在,但不能进行数据交换,即发送数据和接收数据的操作仍可正常使用,但新数据不会被发送,模型也不会接收到任何新数据。使用int resume()函数则可将仿真模型从冻结状态恢复至运行状态。使用int getStatus()函数,可实现在任何情况下返回仿真模型当前的状态给仿真平台。
仿真网络除了能够控制仿真模型的运行状态,还提供了模型之间的数据传输通道。当仿真模型进入初始化状态后,仿真网络首先需要为模型的输入/输出数据在DDS网络上进行注册,初始化完成后,生成两个线程DDS reader和DDS writer作为仿真数据的周期性读写器。之后,仿真网络通过read和write函数对仿真网络上的数据进行读写操作。仿真网络数据收发的流程如图5所示。
图5 仿真网络数据收发的流程
DDS_Reader_Init函数实现了DDS reader的初始化。按照调用层指定,在给定的DDS domain,使用给定的Topic接收一个指定数据结构的网络数据。在DDS网络的封装层内创建子线程,使用多路复用方式使DDS网络自行监视新数据是否到达。当新数据到达后,通过全局变量通知主线程。DDS_Writer_Init函数实现了 DDS writer的初始化。在给定的 DDS domain,使用给定的Topic发送一个指定数据结构的数据。DDS reader和DDS writer建立后即按照指定的周期开始工作,并返回仿真数据的句柄(Handle),通过该句柄便可对仿真网络上的数据进行读写操作。DDS_read函数用于读取指定DDS reader接收到的数据。每次读取1个数据,放入用户指定地址。DDS_write函数用于将指定地址上的数据发送给指定的DDS writer。每次发送1个数据,如图6所示。
图6 仿真网络发送和接收数据流程
在分布式系统中,应采用全局时钟来调度各参数的传输[8]。仿真网络的物理层基于以太网,因此本文采用IEEE1588协议作为整个分布式仿真网络的授时协议[9]。为了保证时钟同步不受干扰,仿真网络在设计上采用独立的时钟同步网络,与数据网络分开。因此在构建仿真系统过程中,所有接入仿真网络的节点需要配备一块。1588PCI板卡用于连接时钟同步网络。时钟同步网络采用PTP协议进行对时,各节点用于发送和接收数据的时间戳信息均来自于时钟同步网络的标准时间。时钟校对不修改操作系统的系统时间,因此不会对操作系统造成影响,也不会影响系统的稳定性。时钟同步后,在1588板卡端的同步精度可达到ns级[9]。受操作系统的影响,可保障数据传输延时在标准场景下最高不超过20 ms[10]。时钟同步系统结构如图7所示。
图7 1588授时系统结构图
根据民用飞机航电系统集成过程中的实际需求,提出了一种基于DDS协议的分布式仿真网络。该仿真网络使用以太网作为传输介质提供了一个统一的仿真模型运行环境,能实现对分布在不同试验设施上的仿真模型进行统一的控制,使工程人员在系统集成过程中能够专注于数据,简化了系统集成的工作难度。
[1] 赵红军,蔡志勇,程海峰.现代飞机航电系统集成验证方法研究[C].南昌:第五届中国航空学会青年科技论坛,2012.
[2] 诸文洁.综合航电仿真系统关键技术研究[J].民用飞机设计与研究,2010(1):15-18.
[3] 白曦,张鹏.基于反射内存网的通用航电仿真平台设计[J].电子科技,2013,26(6):137 -139.
[4] Object Management Group.Real- time CORBA specification[R].USA:Object Management Group,2005
[5] Object Management Group.Data distribution service for real-time systems specification[EB/OL].(2004-10-12)[2015 -01 -13]www.omg.org.
[6] 张大海,赖兰剑,陈鼎才.DDS在分布式系统仿真中的应用[J].计算机技术与发展,2011,21(3):250 -253.
[7] 姚兵,蔡婷,李峻林,等.基于DDS模型的数据分发中间件的设计与实现[J].计算机工程与设计,2009,30(3):619-623.
[8] 桂本烜,刘锦华.IEEE1588高精度同步算法的研究和实现[J].电光与控制,2006,13(5):90 -94.
[9] John C Eidson,Mike Fischer,Joe White.IEEE - 1588TM standard for a precision clock synchronization protocol for network measurement and control systems[C].USA:34th Annual Precise Time and Time Interval (PTTI)Meeting,2002.
[10]宋波,孙超,姜守达.一种基于PTP协议的局域网高精度时钟同步方法[J].自动化技术与应用,2010,29(1):67-70.