在仿真期间将simulink信号数据读入matlab

时间:2016-07-27 12:58:34

标签: matlab simulink

我想在模拟运行时不断地将simulink信号数据读入命令行。 get_param()似乎是阻塞的,因此当放入无限循环时,它不会很有用。

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

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

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

我可以选择将simulink信号数据连续读入Matlab CLI吗?

2 个答案:

答案 0 :(得分:0)

使用" set_param()"进行控制模拟命令如下:

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

对于一个工作示例,请键入" sldemo_varsize_basic"在matlab命令窗口中。然后上面的命令变为

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

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

不幸的是,我无法找到有关此功能的高质量文档。

答案 1 :(得分:0)

您是否尝试在模拟过程中存储模型输出的值?这是不可能的,因为变量'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