我有一个Simulink模型,目前正在从脚本(即不是函数)运行.该脚本将变量值写入MATLAB工作空间,运行模型模拟(使用这些值),然后模型将其他值写入工作空间.如果我尝试将脚本转换为函数(即放置function [output] = runSim()在文件的顶部),那么Simulink会抱怨它不知道变量,可能是因为它们不在MATLAB工作区中,而是它们在功能范围.
是否有一种优雅的方式来提供Simulink模型的输入并从Simulink模型中获取输出而不是将它们粘贴到工作区中?
Jas*_*n S 10
这并不明显,但您可以从sim()命令和调用函数的工作区输入/输出数据.我之前已经完成了并且在工作中有一个例子但是直到星期一才能到达那里进行验证.但是,请尝试Mathworks网站上列出的解决方案:
解:
在Simulink中使用变量掩码参数时,基本工作空间是Simulink的默认源工作空间.但是,通过使用SIMSET命令,可以更改此工作空间.然后,SIM将与SIMSET创建的此选项结构一起使用.以下是如何执行此操作的示例.
Run Code Online (Sandbox Code Playgroud)options = simset('SrcWorkspace','current'); sim('modelname',[],options)
...虽然由于与Parallel Computing Toolbox不兼容而显然在R2009b中被弃用了:(看起来正确的解决方案是将变量明确地推送到模拟的模型工作区(不同于基础工作区),使用assignin().
http://www.mathworks.com/matlabcentral/newsreader/view_thread/292544
你有2个选择:
- 对于R2009b之前的版本,请查看SIMSET文档.它允许您将"SrcWorkspace"属性设置为"current"以使用函数中的数据.
http://www.mathworks.com/support/solutions/en/data/1-1BWDA/?solution=1-1BWDA
- 在较新的版本中,不推荐使用此选项,因为它不符合Parallel Computing Toolbox和PARFOR.我建议的是:
http://www.mathworks.com/support/solutions/en/data/1-ASPEIV/?solution=1-ASPEIV