基于DDS中间件的数据分发平台的设计与实现

2021-08-09 03:23何旭张国超代中华
电子技术与软件工程 2021年11期
关键词:报文串口通讯

何旭 张国超 代中华

(上海船舶电子设备研究所 上海市 201108)

1 引言

随着我国对海军装备的投入,舰载装备朝着信息化发展,装备系统面临软件开发周期越来越短、系统组成越来越复杂、不同设备间传输规模越来越大、数据传输定制性越来越高的现状。传统基于套接字的编程方式越来越无法满足现有的通讯需求,为了适应通讯层面的变化,国外装备软件开始广泛使用DDS 以数据为中心的通讯新架构。2004年对象管理组织发布第一版基于发布/订阅结构的通讯规范[1],如图1,DDS 中间件位于顶层应用软件和底层系统中间[2],独立于操作系统和编程语言,屏蔽底层通讯细节[3],极大地方便异构设备间的通讯,简化软件开发细节。目前应用范围十分广泛,包括军事、航天航空、金融交易以及工业自动化等领域[4]。

2 系统总体设计

2.1 需求分析

声纳系统是一个典型的分布式实时系统,数据分发平台是声纳系统中的一个重要组成部分,接收来自传感器的战场数据、系统内部状态数据和外部系统控制数据等,经过数据校验、处理后转发给上级系统和系统内部的各上网节点。数据分发平台的网络传输要求:

2.1.1 实时性 高吞吐

为实现对战场环境感知,舰载装备软件必须通过传感器接收、转发大容量的战场环境数据,这些数据具有高频、数据量大、实时处理、接收处理顺序等特点,同时为了保证各种战术指标,数据传输模块必须要在规定的时间内完成相应的处理,这就要求设计的系统要满足高实时、高吞吐的要求。

2.1.2 可靠性

某些传感器传过来的实时环境数据对可靠性要求并不高,即使出现丢包也不会对整个系统造成影响,但对于诸如命令、武器控发等报文,可靠性就尤为重要,这些关键数据不仅不能出现丢包现象,并且对于报道接收顺序也极为敏感。

2.1.3 低耦合 可扩展性

图1:DDS 中间件层次结构

图2:通讯架构

图3:软件模块关系图

同一系统由于不同舰船的性质或者在开发过程中增减内部设备导致在编写程序时经常会遇到设备上网节点的增减带来代码重写的情况,为减少应用程序开发难度,需降低不同上网节点的耦合度,实现当删减网络节点时,减少对其他节点的影响。

2.1.4 动态配置

由于各上网节点的任务功能有差别,对于传感器数据看重是其实时性,而命令、状态数据则更多的是保证收方可靠地接收,这就要求装备软件能够动态配置数据传输的方式,以便软件能快速升级维护。

2.2 总体设计

作为一个典型的分布式复杂系统,声呐系统由大量的异构设备组成,包括类Linux 和类VxWorks 计算机、DSP、FPGA 等硬件设备、公共计算服务设备等。数据分发平台是作为声呐系统的通讯核心进行设计,它需要完成系统内部多类型数据的适配转换,对系统内部各设备的上网节点的中转,对显控软件、传感器、数据库等的控制,产生波形控制数据,作为声呐系统唯一与外部系统通信的平台完成对内部数据的向外转发。对数据分发平台设计时,考虑到尽量不去修改复杂设备已有的成熟设计,对这些设备软件依旧通过传统套接字或者串口独立进行通讯,但向外转送时使用DDS 中间件。同时为减少转发时的相互干扰并保持系统内外部模块间的独立运行,将通讯通道分为内部域和外部域分别进行DDS 通讯,具体通讯设计如图2 所示。

3 软件实现

数据分发平台基于国产中标麒麟系统、RTI DDS5.1.0,采用模块化设计思想,将软件分为主控模块、串口通讯模块、UDP通讯模块、DDS 通讯模块、数据处理模块。各软件模块间接口关系如图3 所示。

3.1 主控模块

主控模块是数据分发系统的控制中心,主要完成初始化并管理系统内的软硬件资源、创建并启动各任务和信号量消息队列、执行系统时钟任务等。当软件启动/关闭时自动加载/卸载主控模块。

isError = iniitialize(); //资源的初始化

QtConcurrent::run(com,&cCom::tcomRecv ); //创建串口数据接收处理任务

QtConcurrent::run(socket,&cUdpSocket::udpTask ); // 启动内部udp 通讯任务

QtConcurrent::run(dds ,&cDDS::internalTask );// 启动内部DDS通讯任务

QtConcurrent::run(dds,&cDDS:: externalTask );//启动外部DDS通讯接收任务

3.2 串口通讯模块

串口模块完成与系统内部设备间的串口数据交互。在软件启动时,创建并激活串口发送、接收任务。串口接收任务定时查询串口接收缓冲区数据并处理;

3.3 UDP通讯模块

UDP 通讯模块完成与系统内部设备间的网络数据交互。软件启动时创建、初始化udp 通讯对象、启动接收任务、注册DDS 转发句柄,接收到数据后进行数据拼装,根据目的设备选择udp 句柄或者dds 句柄向外转送。

3.4 DDS通讯模块

dds 模块完成与系统内外部设备间的网络数据交互。启动时创建、初始化DDS 对象,配置相应的QOS,注册udp 转发句柄,接收到数据后进行数据拼装,根据目的设备选择udp 句柄或者dds 句柄向外转送。

3.5 数据处理模块

图4:性能测试

数据处理模块对发送到分发平台的数据报文进行检查校验,减少错误数据包向外发送,对确认无误的数据包进行相应的处理。

amendData(pAmendedBuf,pRecvBuf,recvSize,DEVICE_RECORD)//校验数据

SetFuncMap(pFuncMap);//配置处理函数指针

pFuncMap[packFlag]((char*)&gRecRecvBuあ.buあer[0]);//使 用 相应函数处理

4 测试验证

为保证满足装备硬性需求,对本设计进行验证。验证包括功能性测试和性能测试两部分。同时使用Windows 端模拟器代替设计阶段尚缺的设备。测试环境下所采用的配置如表1 所示,其中数据分发平台基于国产架构开发。

表1:测试环境

4.1 冗余切换测试

本文的功能测试是指对两台功能一致的设备通过配置QOS,设置不同的优先级,进行网络切换。显示控制软件是系统人机交互的重要节点,正常情况下,两台显控设备各自发布订阅专属的数据报文,现考虑当遇到突发情况,某一主显控设备发生故障(测试时直接断电处理),无法正常发送人机交互数据,从显控设备应立即进行软件层面资源重组,配置主设备相应的交互模块,数据收取设订阅从设备发布的主设备数据。而当主设备恢复了正常运行,数据收取设备恢复订阅主设备发布的数据。对比传统模式的通讯,当某上网节点发生故障时,其他接受节点将得不到任何数据。因此,以数据为中心的通讯模式极大地降低了系统因故障而发生瘫痪的风险性。

4.2 性能测试

考虑装备软件实际应用的特点,性能测试对通讯过程的实时性、稳定性进行验证。实时性是装备软件通信系统最重要的指标,报文的发送接收需在指定的时间内完成,否则超出时间完成也没有意义甚至会导致系统错乱。衡量实时性可以通过系统数传时延(Latency)来衡量,发布端一直循环发数据,其中数据大小可以改变。接收端循环收到数据并进行数据的统计,控制数据长度变量。稳定性是系统通信质量的另一重要的指标,通过测量通讯过程中的丢包率衡量通讯稳定性。测试中统一报文长度,通过控制报文数据量进行对比,测试结果如图4 所示。

从测试结果可以看出,传输时延与数据长度呈现正相关,报文长度在1024 字节以内,时延控制在100us 以内,当长度超过1024字节,传输时延明显增加。同时可靠传输相对于尽力传输,时延增加明显,这是因为可靠传输在内部通信细节上增加了应答等处理步骤,保证数据不丢包,这会使得数据在处理传输过程中有一定的时间开销。在稳定性测试中可靠传输在不同速率条件下,均实现了传输不丢包,而尽力传输为追求传输性能,在报文量超过2000 条/秒是,丢包率大幅上升。在实际应用中,需根据不同设备的通讯需求选择切合的QOS、合理划分报文长度。同时时延、丢包率等传输性能还与CPU 性能、网络带宽等有关,全面国产化后还应对传输性能进行进一步的测试。

5 结束语

本文简要介绍了DDS 中间件,详细分析数据分发平台的需求,确定了采用以DDS 混合udp 的通讯架构,在软件层面上对各个模块进行详细的功能讲解和代码实例,最后对平台进行功能、性能的测试,测试表明,本设计能有效满足系统需求。以数据为中心的DDS 中间件应用在分布式的通讯网络中展现出优于套接字的独特优势,通过选用丰富的DDS 策略适应数据传输在性能、可靠性、耦合度多方面的需求,同时也大大降低软件开发周期。

猜你喜欢
报文串口通讯
《茶叶通讯》简介
《茶叶通讯》简介
基于J1939 协议多包报文的时序研究及应用
通讯报道
浅谈AB PLC串口跟RFID传感器的通讯应用
CTCS-2级报文数据管理需求分析和实现
浅析反驳类报文要点
通讯简史
ATS与列车通信报文分析
USB接口的多串口数据并行接收方法探索