VAPS XT开发入门教程50:与simulink通信

系列索引:VAPS XT开发入门教程索引

上一篇:VAPS XT开发入门教程49:VAPS XT接收OpenDDS数据测试

本文介绍VAPS XT程序与Matlab simulink组件通信的方法。

本文使用的Matlab simulink模型是Matlab开发入门教程:Simulink通过UDP发送数据测试

VAPS XT通信使用UDP/共享内存

普通nCOM

经过测试,程序内的nCom好像无法使用。

UserIntegration

创建一个新工程

然后创建一个新数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE dataDescription>

<dataDescription name="SimuData">

<field>
<name>c1</name>
<type>string</type>
<cardinality>1</cardinality>
</field>

<field>
<name>sin</name>
<type>float64</type>
<cardinality>1</cardinality>
</field>

<field>
<name>c2</name>
<type>float64</type>
<cardinality>1</cardinality>
</field>

<field>
<name>c3</name>
<type>string</type>
<cardinality>1</cardinality>
</field>

</dataDescription>

换成C/C++就是

1
2
3
4
char c1;
double sin;
double c2;
char c3;

然后根据此数据结构创建一个Data Sender/Receiver

创建一个测试Format,因为是测试,不需要太复杂的界面。

format

以下内容需要参考VAPS XT开发入门教程48:UserIntegration说明的工程的UserIntegration代码。

先创建一个数据结构

1
2
3
4
5
6
typedef struct _Package{
char c1;
double sin;
double c2;
char c3;
}PackageData;

创建一个类用于循环获取UDP数据

在主文件中的main函数中创建数据线程

1
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,0,0,NULL);

实现数据获取函数,将数据线程获取的数据填充到本地。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void ThreadFunc()
{
ConnectUdp m_ConnectUdp("192.168.50.20",25000);

printf("simdata size is: %d\n",sizeof(&pPKG));

while(1)
{
m_ConnectUdp.RecvPackage(&m_Rcv_Data);
printf("data size is: %d\n",sizeof(m_Rcv_Data));
printf("rcv c1: %d\n",m_Rcv_Data.c1);
printf("rcv sin: %f\n",m_Rcv_Data.sin);
printf("rcv c2: %f\n",m_Rcv_Data.c2);
printf("rcv c3: %d\n",m_Rcv_Data.c3);
memcpy((void*)pPKG,(void*)&(m_Rcv_Data),sizeof(m_Rcv_Data));
}
}

编译运行

1
./CApplication.exe -center -width 800 -center 600

结果为

result

模型的运行时间为2000ms,发送间隔为20ms,最后一组数据发送完成后未更新数据,所以保持显示最后一组数据。

总结

  • VAPS XT通信只接收TCP/UDP/共享内存,也就是说不管你的模型有多复杂,最后都是靠网络方式传输。
  • 与simulink通信只是简单的功能组合,唯一要注意的是数据结构的字节对齐,否则会出现显示异常。
  • 可以查看论文基于UDP通信的VPAS XT人机界面工具与Simulink仿真工具的数据交互 - 石磊 - 中航通飞研究院有限公司 - 2020,可以看到开发思想是差不多的

下一篇:VAPS XT开发入门教程51:VxWorks653移植

如果你有问题,如果是简单的问题可以发邮件给免费解惑,如果涉及难问题或者需要提供附加的服务(比如授权、大工程集成编译、多分区相关,或者作为中间商联系Presagis)可以联系上海亥伯智能科技有限公司 邮箱

技术交流群,欢迎加入讨论。这个圈子很小,大佬可能没兴趣加这些群聊社区之类的。所以只能带你入门,当然,欢迎大佬指导

qq 672991841

VAPS XT开发入门教程50:与simulink通信
https://feater.top/vapsxt/vapsxt-communicate-with-matlab-simulink
作者
JackeyLea
发布于
2022年2月6日
许可协议