当前位置:首页 期刊杂志

基于UDP通信的VPASXT人机界面工具与Simulink仿真工具的数据交互

时间:2024-05-18

石磊

摘  要:VAPS XT工具用于人机界面的快速设计仿真,开发出来的应用程序主要提供操作人员的人机接口,需要第三方应用将输入指令转换为显示数据,可以采用第三方应用程序作为中继,通过共享内存和UDP的方式实现VAPS XT和Simulink端的数据交互。该文介绍了一种可以直接建立两种工具通信的方式,不需要额外开发专门的中转程序,易于实现,可以用于人机界面联合仿真。

关键词:VAPS XT  UDP  Simulink  nCOM

中图分类号:TP391.9   文献标识码:A 文章编号:1672-3791(2020)06(c)-0005-04

Abstract: VAPS XT tool is used for the rapid design and Simulation of human-machine interface.The developed application program mainly provides the human-machine interface of operators. It needs the third-party application to convert the input instructions into display data. It can use the third-party application program as the relay to realize VAPS by sharing memory and UDP,the data interaction between XT and Simulink is introduced in this paper, which can directly establish the interaction between the two tools.Develop of external data exchange application is not required, thus the communication is easy to be established, and can be used in the joint simulation of human-computer interface.

Key Words: VAPS XT; UDP; Simulink; nCOM

VAPS XT是一款人机界面设计工具,可以快速开展显示画面的设计,通过自带的Code nGEN工具自动生成代码,提升设计效率。VAPS XT还可以用于仿真和演示,可以利用nCOM接口很方便地实现与外部程序环境的数据交互。Simulink作为仿真平台,可以接收来自VAPS XT的驾驶员操作指令,进行数据处理后,驱动VAPS XT显示界面。VAPS XT实现外部通信必须通过nCOM接口,而外部应用必须与nCOM接口定义的数据描述文件兼容,对于Simulink仿真工具来说,就有至少两种方式:一种是将接口数据适配(数据包解析和打包)的模块放到中间应用中,另一种是直接在Simulink中进行数据包解析和打包。两种方式可以需要采用UDP作为网络传输协议。

1  软件和工具介绍

1.1 VAPS XT人机界面设计工具

VAPS XT是一款用于人机界面设计的商用货架软件开发工具,由加拿大Presagis公司开发。目前该软件的最新版本为4.2版。该软件将开发人员的设计精力从编码转向了界面设计,通过一系列内置的图形界面对象、数据流映射、状态机图定义等功能,实现人机界面的快速设计,工具还提供自动代码生成功能,可以快速地进行人机界面设计图形转换为代码。通过与Simulink仿真工具配合使用,学术界和工业界已经将该软件应用于人在环的人机界面仿真设计。VAPS XT提供了内置的nCOM功能,可以实现其与外部应用的双向通信。

1.2 MATLAB Simulink仿真工具

Simulink工具一款用于动态系统建模、仿真、分析的工具,广泛应用于通信、电力、自动控制等多个领域,由Mathworks公司开发,作为MATLAB可视化工具。该工具内置了Aerospace Blockset模块工具箱,可以进一步提供航空航天领域的建模、仿真和分析[1]。借助该模块工具箱,可以对飞机的大气、重力、风、地形、磁场等运行环境、六自由度模型进行建模,结合Simulink模块提供的驾驶杆接口模块,以及FlightGear等飞行视景仿真工具[2],可以搭建出一整套用于对飞行器进行仿真的环境,验证飞行器的操纵品质和人机接口。虽然Simulink内置有仪表界面,在实际应用中使用VAPS XT作为专业的人机界面开发工具[3,4],创建向飞行员显示飞行参数的应用程序,这就需要VAPS XT建立与Simulink仿真工具的通信。

2  通过中转程序实现VAPS XT与Simulink的数据交互

2.1 nCOM的配置

nCOM接口与VAPS XT协同使用,可以用于实现两个VAPS XT应用程序之间,或者VAPS XT应用与外部应用程序之间的通信。例如,在一台服务器上部署了VAPS XT开发的人机界面应用程序,在另外一台服务器上部署了STAGE场景仿真工具,通过nCOM接口,可以將VAPS XT采集到的用户输入传输给STAGE,再将STAGE端生成的数据返回到VAPS XT并显示给用户,具体如图1所示。

为了建立通信,在nCOM使用过程中需要配置如下对象。

(1)Connections。连接配置文件,此XML文件包含所有连接配置及其属性。当用户在VAPS XT中双击此文件时,可以显示此配置文件的修改页面。每个项目只允许此文件的一个副本,并且VAPS XT接口将对其进行修改。

(2)Mappings。映射配置文件,这个XML文件包含了每个VAPS XT图形应用中所有的描述Connections与I/O缓冲区的映射。请参阅配置nCOM映射。

(3)Data Description。数据定义文件,此数据描述文件(.dd)创建了一个结构化类型,可用于描述I/O缓冲区,构建data sender和data receiver,这些缓冲区可以進一步与VAPS XT中的图形对象交换数据,最终实现VAPS XT与外部应用程序的交换数据[5]。

nCOM需要设计者定义数据缓冲区、连接以及缓冲区和连接的映射,在VAPS XT软件提供的支持文档[6,7]中有关于nCOM配置和使用的详细信息。

2.2 VAPS XT与第三方应用之间的交互

nCOM通信包括3种类型,分别是共享内存、TCP/IP和UDP方式,具体特点如下。

(1)共享内存。在同一硬件平台上运行应用程序时使用此传输。在这种情况下,传输可以提高应用程序之间的传输速度。

(2)TCP/IP。这是一种点对点协议,这意味着数据从网络中的一个点传输到另一个点或主机。

(3)UDP。该协议不将消息分成数据包并在另一端重新组装。当应用程序具有非常小的数据单元进行交换时,这非常有用。

但是,最常用的通信类型是UDP和共享内存。此节演示的基于nCom连接的架构如图2所示。

为了指导开发人员进行中转应用程序的编程,VAPS XT提供了一个模板C++工程和源代码,位于安装路径的Tutorials\Using_nCOM目录下,可以在此模板工程的基础上,创建用户自定义的支持nCOM通信的外部应用程序,在VAPS XT提供的nCOM通信指南中对该模板和代码的编译和运行有详细的说明,模板包括的几个主要的文件说明如下。

(1)anim.cpp。存放包含第三方应用程序特定代码的源文件,用户可以将包括纯UDP通信的代码放在这个文件中。

(2)nComApp.cpp。包含了所有nCOM函数功能的源文件,包括发送器、管理器、定义、初始化等,用户可以对该文件的配置进行修改,如nCOM的连接、映射配置文件的本地存放位置。

(3)nComAppvc12.vcxproj。项目工程文件,该工程文件已经完成了设置,添加了对VAPS XT提供的与nCOM通信相关的头文件和静态库

3  通过直接方式实现VAPS XT与Simulink的数据交互

VAPS XT提供了专门用于Simulink通信的nCOM模块,但此模块不是软件默认提供的,而且可能存在与VAPS XT、Simulink版本不兼容的情况。该章介绍一种比较灵活、兼容性好的VAPX XT与Simulink通信的方案。该方案的通信基于UDP,基本原理就是在Simulink端做好发送给VAPS XT应用的UDP数据包的封装,以及来自VAPS XT应用的UDP数据包的解包。

3.1 建立VAPS XT与Simulink之间的通信

通过中转方式实现VAPS XT与Simulink的数据交互,需要单独定义第三方应用,在这个第三方应用中,引用了nCOM库文件,第三方应用可以与VAPS XT进行通信,而第三方应用程与Simulink之间的数据交换格式是可以预先定义兼容的。如果要取消第三方中转程序,则必须让Simulink打包发送到UDP的数据符合数据描述文件(.dd)的要求,能够被nCOM识别,并且还要按照数据描述文件定义的格式,对nCOM发出的数据进行解析。最终用到了两个数据缓冲区,具体见图3。

3.2 VAPS XT中的nCOM接口数据包解析

由于VAPS XT将根据数据描述文件中的定义打包将通过UDP传输的数据,因此应以相同的方式打包Simulink UDP数据以建立通信,否则,VAPS XT和Simulink之间将无法识别对方发送的数据。

由于通过UDP连接从/到VASP XT的数据是以前缀和特定格式打包的,在研究VAPS-XT-UDP缓冲区数据样本的基础上,得出数据打包的原则如下。

如果VAPS XT通过UDP连接发送50个浮点类型的数据,则发送到UDP缓冲区的最终包应为:

VAPS XT利用nCOM的UDP模式通信时,会根据数据描述文件(*.dd)的内容,对发送至UDP端口的数据进行封装,可以使用UDP端口测试工具,对VAPS XT的nCOM通信数据进行分析,以VAPS XT预定义的50组浮点数据格式为例,其封装格式如图4所示。

如图5所示,UDP包由三部分组成:前缀1表示数据描述类型,总长度为32字节;前缀2表示发送方/接收方对象,总长度为36字节,如果内容较短,则前缀的其余部分将填充零。数据字节将从第69个字节开始,数据部分的总长度取决于数据的类型和数量。例如,50个浮点类型的数据将覆盖50×4字节。

如果Simulink要与VAPS XT通信,将考虑相同的数据打包协议,否则将不接收/发送数据,或出现错误的数据。

在Simulink中,采用UDP发送/接收模块建立UDP缓冲区到Simulink的连接。模块应根据VAPS XT中的配置进行配置。

Simulink中的UDP接收模块应使用VAPS XT中的UDP发送缓冲区,而Simulink中的UDP发送模块应在VAPS XT中应用UDP接收缓冲区。

在将数据发送到UDP缓冲区之前,应该将其与前缀部分打包在一起。数据描述文件名和缓冲区对象名应翻译成ASCII码,例如,“FLOAT50”应翻译成“70108111971165348”。

3.3 在Simulink中搭建数据匹配通信模块

在分析出VAPS XT的nCOM通信的数据打包规则后,只需要在Simulink中创建一个用于适配VAPS XT的接口模块就可以实现数据交互。图5为该文创建的用于从Simulink向VAPS XT發送数据的模块在仿真工程中的连接。

图6为在Simulink中实现的nCOM发送模块的具体细节,该模块通过总线合并的方式,按照nCOM数据打包的要求,将nCOM数据包的字符所对应的16进制ASCII码进行组装,与模块接收到的数据一同发送至Simulink自带的UDP通信模块。该模块的设置与VAPS XT中的nCOM通信的UDP设置匹配即可,包括IP地址、端口、广播方式等。

4  结语

该文介绍了VAPS XT人机界面设计工具与Simulink仿真工具进行数据通信的实现方式,在介绍nCOM端口的配置方法和通信类型的基础上,给出了用中转应用程序间VAPS XT与Simulink间接通信,以及通过在Simulink端创建适配模块实现VAPS XT与Simulink直接通信的两种方式,从实现原理和操作流程方面给出了示例,可作为飞行仿真环境搭建过程中,建立人机界面端与模型仿真端双向通信的一般参考。

参考文献

[1] Chaturvedi D K.Modeling and simulation of systems using MATLAB and Simulink[M].CRC press,2017.

[2] 董鹰.基于Simulink/FlightGear的直升机飞行仿真系统设计[C]//中国航空学会.2019年(第四届)中国航空科学技术大会论文集.中国航空学会:中国航空学会,2019:806-819.

[3] Fedele A,Genito N,Garbarino L,et al.A pilot-in-the-loop facility for avionic concept development[J].Journal of Automation and Control Engineering,2016,4(4):290-294.

[4] Zheng LIU,Fei LI,NIU X.Modular Simulation Design of Human-machine Interaction for Civil Aircraft Cockpit[C]//DEStech Transactions on Computer Science and Engineering,2018.

[5] 秦正运,葛晨,程新满.基于VAPS XT的座舱显示设计与实现[J].电子技术与软件工程,2019(6):75-76.

[6] Presagis Canada Inc.VAPS XT User Guide[Z].2016.

[7] Presagis Canada Inc.VAPS XT Using nCOM Tutorial[Z].2016.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!