Matlab-Simulink 2014 'load' 错误:MATLAB 表达式 'load' 没有正确的字段数
Posted
技术标签:
【中文标题】Matlab-Simulink 2014 \'load\' 错误:MATLAB 表达式 \'load\' 没有正确的字段数【英文标题】:Matlab-Simulink 2014 'load' error: MATLAB expression 'load' does not have the correct number of fieldsMatlab-Simulink 2014 'load' 错误:MATLAB 表达式 'load' 没有正确的字段数 【发布时间】:2016-04-08 09:23:38 【问题描述】:我正在使用 Matlab 2014b。我不确定这是否是旧版本的问题,但我认为这是一个新问题。
我想将我的主函数用作 .m 文件,我想在这里设置数据。我将在我的 Simulink 模型 - 用户定义函数中使用这些数据。创建数据后,我在 m 文件中调用“保存”:
保存('engineProperties.mat')
它会在我当前的文件夹中创建一个 .mat 文件。我可以在任何我想要的地方使用它:
加载('engineProperties.mat')
它通常可以正常工作。但是,有时我会收到以下错误:
"MATLAB 表达式 'load' 的字段数不正确:预期为 8;发现为 9。 阻止calculateEngineLoad(#30) 执行时:动作中的状态”
正如错误消息所暗示的,它发生在我添加或删除数据时。我通过创建新的命名 .mat 文件来解决它,但这不可行,因为我创建了很多 .mat 文件,有时我不记得正确的文件了!
或者我通过创建虚拟变量来重新匹配数据的大小来解决它。难度不大。
从当前文件夹中删除 .mat 文件通常不起作用。但有时它会起作用,例如当我重新启动计算机时!
我认为这是一个简单的问题,但在 web.xml 中没有发现任何类似的错误。请帮忙:)
【问题讨论】:
【参考方案1】:您的 MATLAB 功能块中的代码被编译为不支持可变大小结构的 C 代码。每当你的结构发生变化时,都需要重新生成和编译。
如果您只想修复它,请切换到解释型 MATLAB 功能块。请注意,这在许多情况下会导致性能下降。
相反,我会重新考虑您的架构。从文件名我假设您的文件包含一些参数。与其将它们加载到您的功能块中,更好的架构是使用块参数并设置它们。然后您可以继续使用 MATLAB 功能块,无需重新生成代码。
【讨论】:
据我了解,您建议我使用 Simulink Library Browser 中给出的“解释的 MATLAB 函数”。但是我的用户定义函数有点长,大约 20 行。这不仅仅是一个数学运算。您能否详细说明“使用块参数”的含义?我认为您非常接近我的解决方案 可以这样添加参数de.mathworks.com/help/simulink/ug/… 我将在接下来的几周内继续努力。然后我会让你知道我是否可以。提前致谢 是的,按照您的建议添加参数是解决我的问题的好方法。但有时我真的需要将我的数据保存到某个地方,然后从其他任何地方加载它。所以应该有直接的解决办法【参考方案2】:上述建议的解决方案(在http://www.mathworks.com/help/simulink/ug/parameter-arguments-in-matlab-function-block-functions.html 中给出)已经足够好了。但是,有时你可能有很多数据,你只是不想让你的函数变得拥挤。所以这是另一个解决方案:
根据 Daniel 的回答,Matlab 被编译为 C 代码。尽管您没有感觉到,但它会创建一些“.mexw64”文件。关闭您的 matlab 并删除这些文件。就这些
【讨论】:
以上是关于Matlab-Simulink 2014 'load' 错误:MATLAB 表达式 'load' 没有正确的字段数的主要内容,如果未能解决你的问题,请参考以下文章
Matlab-Simulink (Mac OSX) 中的模型加速
MATLAB-simulink 的仿真实验中,怎样将仿真结果中的多个曲线,同时画出啊!
什么叫LOA认证 应急灯申请SANS1464-22测试 法规解读