【问题标题】:Read simulink signal data into matlab during simulation仿真时将simulink信号数据读入matlab
【发布时间】:2016-07-27 12:58:34
【问题描述】:

我想在仿真运行时不断将 simulink 信号数据读入命令行。 get_param() 似乎是阻塞的,所以当放入无限的 while 循环时,它并不能正常工作。

我现在正在尝试使用 UDP 发送块,但我似乎无法接收数据。我的 UDP 块通过远程端口 25000 和本地端口 25001 将数据发送到 localhost。

在 matlab 中我使用以下代码,但它只是超时而没有数据

u=udp('127.0.0.1', 25001,'LocalPort',25000);
fopen(u)
fread(u)
fclose(u)
delete(u)

有哪些选项可以将 simulink 信号数据连续读取到 Matlab CLI 中?

【问题讨论】:

  • 您是希望仅针对“一两个”信号还是针对可能的多个信号执行此操作?您是想要/需要 MATLAB 工作区中的实际数据,还是只想在命令行窗口中显示数据值(即作为文本消息的一部分)而不是存储它?

标签: matlab simulink


【解决方案1】:

使用“set_param()”命令控制模拟如下:

set_param('sys','SimulationCommand','WriteDataLogs')

对于一个工作示例,在 matlab 命令窗口中键入“sldemo_varsize_basic”。那么上面的命令就变成了

set_param('sldemo_varsize_basic','SimulationCommand','WriteDataLogs')

如果您将模拟时间设置为足够大并开始模拟,则每次发出上述命令时,都会在工作区中创建/更新“simout、simout1”、“tout”和“xout”变量。

很遗憾,我无法找到有关此功能的优质文档。

【讨论】:

  • 嘿,数据日志在模拟期间不可用。它们仅在模拟停止后才可用。
【解决方案2】:

您是否尝试在模拟期间存储模型输出的值?这是不可能的,因为只有在模拟结束后才会创建变量“simout、simout1”、“tout”、“xout”等。

为了在模拟期间读取/存储输出端口的值,您必须将“运行时对象”附加到输出端口。 请参阅 Simulink 文档中的“在仿真期间访问模块数据”或查看此链接:http://in.mathworks.com/help/simulink/ug/accessing-block-data-during-simulation.html?s_tid=gn_loc_drop

希望对你有帮助:)

正如我上面描述的,这个问题已经在这里使用 RunTime Objects 得到了回答: https://stackoverflow.com/a/17006419/6580313

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多