使用共享以太网卡进行 UDP 数据交换
本示例演示了如何利用一块同时用于开发计算机与目标计算机之间连接的以太网卡,来建立双向数据交换。使用此配置,您可以在两个 Simulink® Real-Time™ 系统之间、Simulink Real-Time 与 Simulink® 产品之间,或者两个 Simulink 型号之间进行通信。当其中一个或两个系统均以非实时 Simulink 模型运行时,请务必设置采样时间。
此示例无需配置专用以太网卡,因为该示例利用了开发计算机与目标计算机之间的连接。
示例模型的名称分别为 slrt_ex_udpsendreceiveA 和 slrt_ex_udpsendreceiveB。请根据您的网络要求,将示例中的端口和 IP 地址替换为相应的端口和地址。此示例使用位于 IP 地址 192.168.7.5 的目标计算机,并使用位于 IP 地址 192.168.7.2 的开发计算机。
UDP 数据传输
这些模型在彼此之间传输两组不同的数据集,一组数据集从 slrt_ex_udpsendreceiveA 传输到 slrt_ex_udpsendreceiveB,另一组数据集则沿相反方向传输。
在此示例中,输入是通过使用 Simulink® Constant 模块生成的,这些模块调用了 MATLAB® 随机数函数 (rand)。Simulink® Coder[tm] 软件在代码生成过程中会使用此函数来生成随机数。要生成一个 uint8 类型的向量(3×3),请使用 MATLAB® 函数:
uint8(255 * rand(3,3))
ans =
3×3 uint8 matrix
208 233 71
231 161 139
32 25 244
使用 255,因为这是无符号 8 位整数的最大值。其他值也是以类似的方式生成的。
slrt_ex_udpsendreceiveA 到 slrt_ex_udpsendreceiveB
要发送的 UDP 数据长度为 75 字节。待传输的数据采用以下格式:
[3 3] 的 uint8 类型(9 字节)
[1 1] 的 uint16 类型(2 字节)
[2 4] 的 double 类型(64 字节)
数据在打包时会按 1 字节边界进行对齐。
slrt_ex_udpsendreceiveB 到 slrt_ex_udpsendreceiveA
待发送的 UDP 数据长度为 79 字节。待传输的数据采用以下格式:
[4 1] 的 single 类型(16 字节)
[2 2] 的 double 类型(32 字节)
[2 2] 的 uint32 类型(16 字节)
[5 3] 的 int8 类型(15 字节)
数据在打包时会按 2 字节边界进行对齐。在打包过程中会添加值为零的填充字节。
设置 slrt_ex_udpsendreceiveA
要打开 slrt_ex_udpsendreceiveA 最终模型,请在 MATLAB® 命令行窗口中输入:
modelA = 'slrt_ex_udpsendreceiveA';
open_system(modelA);

这些表格列出了该模型发送端和接收端的参数。
slrt_ex_udpsendreceiveA 发送端

“长度”输入端口接收来自 Width 模块的输出,该模块用于计算连接到“数据”端口的信号的宽度。
Byte Packing 模块的设置与 slrt_ex_udpsendreceiveB 中的 Byte Unpacking 模块一致。
slrt_ex_udpsendreceiveA 接收端

UDP Receive 模块的第二个输出端口连接到一个终端电阻。您可以利用此输出结果来判断数据包何时到达。Byte Unpack 模块的输出也是如此。
UDP Receive 模块的接收宽度与 slrt_ex_udpsendreceiveB 中 Byte Packing 模块的输出端口宽度相匹配。
Byte Unpacking 模块的设置与 slrt_ex_udpsendreceiveB 中的 Byte Packing 模块的设置一致。
解包的字节数为 79。字节对齐为 2。Byte Unpacking 模块假设输入向量包含一个填充值 0,以将向量对齐到偶数边界。
设置 slrt_ex_udpsendreceiveB
要打开 slrt_ex_udpsendreceiveB 最终模型,请在 MATLAB 命令行窗口中输入:
modelB = 'slrt_ex_udpsendreceiveB';
open_system(modelB);

这些表格列出了该模型接收端和发送端的参数。
slrt_ex_udpsendreceiveB 接收端

UDP Receive 模块的第二个输出端口连接到一个终端电阻。您可以利用此输出结果来判断数据包何时到达。Byte Unpack 模块的输出也是如此。
UDP Receive 模块的接收宽度与 slrt_ex_udpsendreceiveA 中 Byte Packing 模块的输出端口宽度相匹配。
Byte Unpacking 模块的设置与 slrt_ex_udpsendreceiveA 中的 Byte Packing 模块一致。
slrt_ex_udpsendreceiveB 发送端

“长度”输入端口接收来自 Width 模块的输出,该模块用于计算连接到“数据”端口的信号的宽度。
Byte Packing 模块的设置与 slrt_ex_udpsendreceiveA 中的 Byte Unpacking 模块的设置一致。
解包的字节数为 79。字节对齐为 2。Byte Packing 模块会用 0 填充输出向量,使其对齐到偶数边界。
关闭模型
bdclose(modelA); bdclose(modelB);