主要内容

中初始化持久变量MATLAB功能

一个持续的变量是MATLAB中的局部变量吗®在两次调用之间将其值保留在内存中的函数。如果从模型生成代码,则必须为MATLAB函数初始化一个持久变量。有关更多信息,请参见持续的

在Simulink中使用包含持久变量的MATLAB函数时金宝app®模型,您应该遵循以下准则:

  • 仅通过访问常量来初始化函数中的持久变量。

  • 确保函数的控制流不依赖于初始化是否发生。

如果你不遵循这些准则,以下几个条件会产生初始化错误:

  • MATLAB函数块包含持久变量,其中允许直接引线财产被清除

  • MATLAB函数在模型中使用State Control块的具有持久变量的块国家控制被设置为同步

  • Stateflow®图,实现摩尔机器语义和使用MATLAB函数与持久变量

例如,函数fcn下面使用一个持久变量,nfcn违反准则。的初始值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函数块

这个模型包含一个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.再次模拟模型。

另请参阅

||(高密度脂蛋白编码器)|(Stateflow)

相关的话题