2020-02-18-Level 2 M S函数常见问题

  1. 可能提示没有对应的function

看一看对应的function在setup模块中是否被引用。

  1. 可能提示Dwork不能有空的。。。

看一下Dwork设定参数的个数,与实际设定的Dwork参数个数是否相符。

  1. 不同的function中的参数无法互相通用,也是程序无法正确使用的原因。

Dwork有效性试错

如果Dwork可以看做是全局变量,那么在InitializeConditions中的Dwork的值是可以带入到Output子函数的,现在试试。

设置0.1s,step应该变值,但是很显然没有变化,所以这样是不行的。

enter description here

也就是说InitializeConditions并不是执行一次就初始化一次么?

调整将Dwork放到Derivatives模块中,这样就相当于原来的了,应该就好用了。

function Derivatives(block)

tau = block.DialogPrm(1).Data;
Uc = block.DialogPrm(2).Data; 

if block.CurrentTime <= block.DialogPrm(3).Data
    block.Dwork(3).Data = 0;
else
    block.Dwork(3).Data = 1;
end
    
block.Derivatives.Data = block.Dwork(3).Data * 1/tau * (block.InputPort(1).data^2 / Uc^2 - 1);
%endfunction

enter description here

这样是可以的。