Main Content

Simulink 子系统作为状态

通过在 Stateflow® 状态内使用 Simulink® 子系统,您可以对混合动态系统和在周期性或连续时间动态之间切换的系统进行建模。在您的 Stateflow 图中,您可以使用基于 Simulink 的状态,并结合使用转移的切换逻辑,对周期性或连续动态系统进行建模。您可以在每个基于 Simulink 的状态下访问图中的输入和输出。MATLAB® 中的独立 Stateflow 图不支持基于 Simulink 的状态。

要在基于 Simulink 的状态之间切换时初始化 Simulink 模块,请使用 Stateflow 文本表示法或 Simulink State Reader 和 State Writer 模块。

要创建基于 Simulink 的链接状态,请使用库保存执行子系统。当您将执行子系统从库模型复制到 Stateflow 图中时,它将显示为基于 Simulink 的链接状态。在更新库模块后,更改会反映在包含该模块的所有 Stateflow 图中。

使用基于 Simulink 的状态意味着您不必在 Stateflow 中使用复杂的文本语法对混合系统进行建模。

何时使用基于 Simulink 的状态

在以下情况下,使用基于 Simulink 的状态:

  • 您要对包括连续或周期性动态的混合动态系统建模。

  • 系统动态模型的结构在不同工作模式之间变化很大,例如,PID 控制器模型就是如此。

对于间歇调用逻辑的系统,请使用 Simulink 函数。

当 Simulink 算法的结构基本保持不变,但某些增益或参数在不同模型之间切换时,请在 Stateflow 之外使用 Simulink 逻辑。此类型的算法的一个示例是增益调度。请参阅Model Gain-Scheduled Control Systems in Simulink (Simulink Control Design)

使用基于 Simulink 的状态为撑竿跳高运动员建模

此 Stateflow 图通过使用基于 Simulink 的状态对历经撑杆跳高各阶段的运动员建模。

第一个阶段是撑竿跳高运动员的助跑,在基于 Simulink 的状态 Run_up 中建模。第二个阶段是撑杆跳高运动员的撑杆起跳,通过基于 Simulink 的状态 Take_off 建模。最后一个阶段是撑竿跳高运动员越过横杆并放开杆,通过基于 Simulink 的状态 Fly 建模。

Run_upFly 这两个状态更易于使用笛卡尔坐标建模。状态 Take_off 更易于使用极坐标建模。要从一个坐标系切换到另一个坐标系,请使用 Simulink 函数 InitTakeOffInitFly

对撑竿跳高运动员的助跑建模

PoleVaulter 中的默认状态是 Run_up。此状态对撑竿跳高运动员在起跳之前的地面助跑过程进行建模。撑杆跳高运动员从 $x$ 轴上的 -10 处起跑,向 0 处跑去。当撑杆跳高运动员在地面上跑动时,该运动员在 xy 平面上的位置不断变化,但运行状态保持不变。在此模型中,积分器模块 PositionVelocity 是 Simulink 函数 InitTakeOff 中 State Reader 模块的状态所有者模块。此子系统输出撑杆跳高运动员的笛卡尔坐标。

将笛卡尔坐标转换为极坐标

当撑竿跳高运动员沿 $x$ 轴的位置 Run_up.p(1) 变得大于 -4 时,就会发生从 Run_upTake_off 的转移。在转移期间,会初始化 InitTakeOff,State Reader 模块连接到其所有者模块,并执行该函数。此函数将笛卡尔坐标 PositionVelocity 转换为极坐标 rthetardottheta_dot。这些坐标输出为 State Writer 模块,这些模块连接到 Take_off 状态的所有者模块。Simulink 函数 InitTakeOff 包含以下逻辑:

对撑杆跳高运动员的起跳建模

当撑杆跳高运动员沿 $x$ 轴的位置 Run_up.p(1) 变得大于 -4 时,基于 Simulink 的状态 Take_off 变为激活状态。此状态为撑杆跳高运动员的起跳阶段建模。此子系统输出撑杆跳高运动员的笛卡尔坐标。

将极坐标转换为笛卡尔坐标

当撑杆跳高运动员的角度 theta 变得小于 $\pi/2$ 时,就会发生从 Take_offFly 的转移。在转移期间,会初始化 InitFly,State Reader 模块连接到其所有者模块,并执行该函数。此函数将极坐标 rthetardottheta_dot 转换为笛卡尔坐标 xy_integxydot。这些坐标输出为 State Writer 模块,这些模块连接到 Fly 状态的所有者模块。Simulink 函数 InitFly 包含以下逻辑:

对撑杆跳高运动员的自由落体建模

当撑杆跳高运动员的角度 theta 小于 $\pi/2$ 时,基于 Simulink 的状态 Fly 就变为激活状态。此状态对撑竿跳高运动员完成跳跃后的落地阶段进行建模。当撑杆跳高运动员处于落地阶段时,该运动员在 x-y 平面上的位置不断变化,但下落状态保持不变。在此模型中,积分器模块 xydot 和 xy_integ 是 Simulink 函数 InitFly 中 State Writer 模块的状态所有者模块。此子系统输出撑杆跳高运动员的笛卡尔坐标。

Record 模块显示此仿真的结果。

限制

您不能将基于 Simulink 的状态用于:

  • 摩尔图

  • 离散事件图

  • HDL Coder

  • PLC Coder

  • Simulink Code Inspector

  • 超时间步转移

基于 Simulink 的状态不支持调试。

相关主题