目标通过使用 UDP 来主持传输
此示例演示了如何使用 UDP 模块将数据从目标计算机发送到开发计算机。此示例使用位于 IP 地址 192.168.7.5 的目标计算机,并使用位于 IP 地址 192.168.7.2 的开发计算机。
实时传输应用程序 slrt_ex_target_to_host_UDP 在目标计算机上运行,并将信号数据发送至开发计算机上 MATLAB® 脚本创建的 UDP 对象。
在使用 UDP 协议与目标计算机进行数据通信时,请考虑以下问题:
开发计算机上的 Simulink® 模型正以最快速度运行。模型运行速度未与实时时钟同步。
UDP 是一种无连接协议,不会检查确认数据包是否已成功传输。数据包可能丢失或被丢弃。
在目标计算机上,UDP 模块以后台任务形式运行,该任务在实时任务完成后于每次时间步执行。如果该模块无法在下次时间步之前运行或完成后台任务,数据可能无法传递。
UDP 数据包通过以太网链路在开发计算机与目标计算机之间传输。这些传输与以太网链路共享带宽。
有关 UDP 和 Simulink Real-Time 的更多信息,请参阅 UDP 通信建立。
创建目标对象并连接
为默认目标计算机创建目标对象,并连接到目标计算机。在命令行窗口中,输入:
tg = slrealtime; connect(tg);
打开模型、构建并加载实时应用程序
该模型驱动一个一阶传递函数,使用方波信号,并通过 UDP 协议将传递函数的输入和输出信号发送至开发计算机。要打开模型,请在 MATLAB 命令行窗口中输入:
model = 'slrt_ex_target_to_host_UDP'; open_system(model); modelSTF = getSTFName(tg); set_param(model,"SystemTargetFile",modelSTF);

构建模型并下载到目标计算机。
配置为非详细输出构建。
标记 Byte Unpacking 模块输出用于数据记录。
构建并下载应用程序。
打开仿真数据检查器。
本代码演示了如何完成这些步骤,并展示了如何标记信号以进行数据记录。您还可以在 Simulink 编辑器中标记信号以进行数据记录。您可以在仿真数据检查器中查看已记录的数据。
set_param(model,'RTWVerbose','off'); set_param(model,'StopTime','20'); targetIP = '192.168.7.5'; set_param([model,'/UDP Receive'],'ipAddress',targetIP); hostIP = '192.168.7.2'; set_param([model,'/UDP Send'],'toAddress',hostIP) set_param([model,'/UDP Receive'],'fmAddress',hostIP) handle = get_param([model,'/Byte Unpacking '],'PortHandles'); Outport = handle.Outport(1); Simulink.sdi.markSignalForStreaming(Outport,'on'); evalc('slbuild(model)'); load(tg,model);
关闭模型。
bdclose(model);
在开发计算机的 MATLAB 中创建 UDP 对象
uByte = udpport("IPV4","LocalHost",hostIP,"LocalPort",8002);
在目标计算机上运行模型
start(tg);
读取数据与写入开发计算机
tic; while (toc<10) data = read(uByte,16); write(uByte,data,targetIP,25000); data = read(uByte,16); end
在仿真数据检查器中查看信号
Simulink.sdi.view;

在开发计算机上断开 UDP 对象连接
clear uByte;