通过 matlab 编辑器调用 level-2 sfunction

call a level-2 sfunction via the matlab editor

我开发了一个simulink模型。我将其编译为具有 2 级功能:'sfun.mexw32'。 我想在 Matlab 编辑器的 .m 文件中调用这个函数。

我为如何实现它而苦恼,所以我首先尝试了解如何使用 matlab 中已有的插图函数来实现它:timestwo.

您可以通过输入 open('sfuntmpl.m') 获取更多信息,这是 sfunction 的模板。

[sys,x0,str,ts] =timestwo(0,0,1,3)

我收到这个错误: “使用 timestwo 时出错 MEX level2 S-function "timestwo" 调用时左手参数过多

我不明白为什么会出现这个错误,我希望输入 1 的结果应该是 2

并且还知道是否可以给出一个输入向量和一个表示时间的输入来模拟信号并得到结果。

如果您的 s-function 有一个 .mexw32 扩展名,那么它是一个已编译的 Level-2 C-code S-function。 不是而是m-codeS-function。

我认为您会发现无法调用 Level-2 M-code S-function 或 Level-2 C-code S-function 来自 Simulink 模型以外的任何模型。 level-2 m-code S-function 有一个输入,它是由 Simulink 执行引擎创建并传递给它的 block 对象,而 level-2 c-code S-function 由许多函数组成,每个函数都传递一个 simStruct (c-code) 结构,该结构也是由 Simulink 执行引擎创建的。

你必须用你的 S-function 创建一个模型,大概连同适当的 inportoutport 块,然后使用 sim 调用型号。

请注意,您提供的 link(即 open('sfuntmpl.m'))是 Level-1[=37 的模板=] m-code S-function。这些可以从 MATLAB 中调用,因为它们 只是 一个常规的 m-code 函数。 如果你有一个Level-1 m-code S-function(你似乎没有)那么你应该可以以您在问题中尝试做的方式来调用它。

2 级 m-code S-function 的模板是:edit('msfuntmpl.m');

2 级 c-code S-function 的模板是:edit(fullfile(matlabroot,'simulink','src','sfuntmpl_basic.c'));