一个持续的变量是MATLAB中的局部变量吗®在两次调用之间将其值保留在内存中的函数。如果从模型生成代码,则必须为MATLAB函数初始化一个持久变量。有关更多信息,请参见持续的
.
在Simulink中使用包含持久变量的MATLAB函数时金宝app®模型,您应该遵循以下准则:
仅通过访问常量来初始化函数中的持久变量。
确保函数的控制流不依赖于初始化是否发生。
如果你不遵循这些准则,以下几个条件会产生初始化错误:
MATLAB函数块包含持久变量,其中允许直接引线财产被清除
MATLAB函数在模型中使用State Control块的具有持久变量的块国家控制被设置为同步
Stateflow®图,实现摩尔机器语义和使用MATLAB函数与持久变量
例如,函数fcn
下面使用一个持久变量,n
.fcn
违反准则。的初始值n
取决于输入u
和返回
语句中断函数的正常控制流。因此,当在具有上述条件之一的模型中使用此代码时,将产生错误。
函数y = fcn (u)持续的n如果Isempty (n) n = u;y = 1;返回结束y = n;N = N + u;结束
为了防止错误,初始化持久变量,将其设置为常量值并删除返回
声明。这个修改的版本fcn
初始化持久变量而不产生错误:
函数y = fcn (u)持续的n如果Isempty (n) n = 1;结束y = n;N = N + u;结束
这个模型包含一个MATLAB函数块,使用的第一个版本fcn
前面描述的。MATLAB函数块输入是一个方波,它是由符号和正弦波块提供的。MATLAB函数块增加的值u
到持久变量n
在每个时间步骤。
模拟模型。模拟返回一个错误,因为:
持久变量的初始值n
取决于输入u
.
的返回
语句中断函数的正常控制流。
的允许直接引线属性的MATLAB函数块清除。
修改MATLAB函数块代码,如修正版所示fcn
.再次模拟模型。
这个模型包含一个MATLAB函数块,使用的第一个版本fcn
前面描述的。MATLAB函数块输入是一个方波,它是由符号和正弦波块提供的。MATLAB函数块增加的值u
到持久变量n
在每个时间步骤。模型包含一个State Control块国家控制被设置为同步
.
模拟模型。模拟返回一个错误,因为:
持久变量的初始值n
取决于输入u
.
的返回
语句中断函数的正常控制流。
模型包含一个State Control块国家控制被设置为同步
.
修改MATLAB函数块代码,如修正版所示fcn
.再次模拟模型。
这个模型包含一个状态流图和一个MATLAB函数,使用的第一个版本fcn
前面描述的。MATLAB函数将值(1
或-1
),由持久化变量的活动状态决定n
在每个时间步骤。
模拟模型。模拟返回一个错误,因为:
持久变量的初始值n
取决于输入u
.
的返回
语句中断函数的正常控制流。
图表实现了摩尔语义。
修改MATLAB函数代码,如修正版所示fcn
.再次模拟模型。
持续的
|MATLAB函数|国家控制(高密度脂蛋白编码器)|图表(Stateflow)