我有一个Simulink模型,该模型当前正在通过脚本(即不是函数)运行。该脚本将变量值写入MATLAB工作空间,运行模型仿真(使用这些值),然后模型将其他值写入工作空间。如果我尝试将脚本转换为函数(即通过将function [output] = runSim()放在文件顶部),则Simulink会抱怨它不了解变量,大概是因为它们不在MATLAB中工作区,但它们在功能范围内。
除了将Simulink模型粘贴到工作区中之外,是否有一种优雅的方法为Simulink模型提供输入并从Simulink模型获取输出?
回答:
这不是很明显,但是您可以从sim()命令和调用函数的工作区输入/输出数据。我之前已经做过,并且有一个工作示例,但要等到星期一才能进行验证。但是,请尝试
在Mathworks网站上列出的解决方案:
解:
在Simulink中使用可变掩码参数时,基本工作空间是Simulink的默认源工作空间。但是,通过使用SIMSET命令,可以更改此工作空间。然后,将SIM与SIMSET创建的此选项结构一起使用。以下是有关如何执行此操作的示例。
options = simset('SrcWorkspace','current'); sim('modelname',[],options)
...虽然显然由于与Parallel Computing Toolbox不兼容而在R2009b中已弃用> :(似乎正确的解决方案是使用
assignin()将变量显式推入仿真的模型工作空间(不同于基本工作空间
assignin() 。
http://www.mathworks.com/matlabcentr..._thread/292544
您有2个选择:
- 对于R2009b之前的版本,请查看SIMSET文档。它允许您将“ SrcWorkspace”属性设置为“ current”以使用函数中的数据。
http://www.mathworks.com/support/solutions/zh-CN/data/1-1BWDA/?solution=1-1BWDA
- 在较新的版本中,不赞成使用此选项,因为它与Parallel Computing Toolbox和PARFOR不兼容。我推荐的是:
http://www.mathworks.com/support/solutions/zh-CN/data/1-ASPEIV/?solution=1-ASPEIV
更多&回答...