m文件
在matlab中,m文件里用以下语句运行simulink模型,将输出结果保存在to workspace模块中:
mdl = 'model_name';
while(1)
action = rand
sim(mdl);
pause(2);
out.observations
end
action是模型的输入值,每次循环都是随机变化的,sim函数这里代表运行一次simulink模型mdl,out.observations是模型的输出值,将输出值放入到to workspace模块中,这样可以将输出值放到工作区workspace中,以便将输出值在m文件里实时调出。
出现的问题:
每次循环,工作区workspace的out.observations都不会变化,但是单独改变action输入值在simulink里运行模型的话,out.observations值在工作区里会变化。
将模型各环节加上display模块可视化,再次运行上述m文件语句,发现数据到to workspace模块前都能正常传输显示。
解决办法
网上查了很长时间,也曾想放弃to workspace这个模块,换其他方法以达到在m文件中调输出值的目的,花了两天尝试了各种方法,但效果都不理想,问题生问题…
然后突然就随意的瞎jb尝试时…就成功了!
其实很简单,将上述语句稍加一个词就行:
mdl = 'model_name';
while(1)
action = rand
simout = sim(mdl);
pause(2);
simout.observations
end
比较发现其实就是多了个simout,就是把sim函数语句赋值给变量值simout,然后在simout里调输出值即simout.observations,重新运行m文件会发现输出会随循环变化。
网上所有的关于这个问题的回复和解决方法都亲测无效,其实就是上面这么简单☝。
至于原理,可能你要不将sim函数赋值的话,模型里面的to workspace模块的变量值被视为常量定值,至于为什么会这样设定我也不知道,希望有明白的大佬能解释一波。