主要内容

本页采用了机器翻译。点击此处可查看英文原文。

目标通过使用 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;