# 使能子系统
# 引言
使能子系统是 Sysblock 中一种重要的条件执行机制,它允许子系统根据使能信号的状态来控制其执行行为。与传统的连续执行不同,使能子系统采用条件驱动的方式,只有当使能信号为真(非零)时,子系统才会执行其内部逻辑。当使能信号为假(零)时,子系统将保持其最后的状态或重置为初始状态。这种设计模式特别适用于需要根据外部条件动态控制子系统运行状态、实现复杂的控制逻辑或优化系统性能的应用场景。通过合理配置使能类型和状态保持选项,使能子系统能够实现灵活的条件执行逻辑,为现代控制系统的设计提供了强大的工具支持。
本示例通过使能子系统来演示不同的配置选项和输出行为,帮助您深入理解这一重要的 Sysblock 功能。
# 模型搭建
单击右侧打开示例按钮,在 Sysplorer 中打开文件。
单击打开示例后,在 Sysblock 中单击用户模型找到 Demo_EnableSystem 的示例,双击打开。

在库浏览器中搜索 UniformRandomNumber(输出均匀分布的随机信号。给定种子的输出可以重复)、LogicalOperator(逻辑运算符)、Scope(显示仿真过程中生成的信号)、Mux(多路复用标量或向量信号)、Merge(Merge 模块可将多个输入合并为单个输出)、Sum(对输入执行加法或减法)。各组件对应的模型库路径如下表所示。
组件名 组件对应的模型库路径 UniformRandomNumber Sysblock.Sources(信号源模型库).UniformRandomNumber LogicalOperator SLogicAndBitOperation(逻辑与位运算模型库)(信号源模型库).LogicalOperator Scope Sysblock.Utilities(实用工具模型库).Scope Mux Sysblock.SignalRouting(信号路由模型库).Mux Merge Sysblock.Utilities(实用工具模型库).Merge Sum Sysblock.MathOperation(数学运算模型库).Sum 在库浏览器中找到上述元器件,并且将它们拖到图中,按照如下位置进行摆放。

双击打开 SuperTwistingLogic1 子系统,放置一个 enable 模块(将此模块放到子系统中生成一个使能系统),它的位置在库浏览器 Sysblock.SubSystems(子系统模型库).Enable 。双击打开 enable 模块,将使能时状态设置为 held,单击确定保存设置。(held 的功能:当 enable 模块被重新使能时,模块内部的状态会保留上一次使能断开时的数值。)

单击键盘上 Backspace 按键回到主系统。
双击打开 SuperTwistingLogic2 子系统,放置一个 enable 模块。双击打开 enable 模块,将使能时状态设置为 reset,单击确定保存设置。(reset 的功能:当 enable 模块被重新使能时,模块内部的状态(比如积分器、状态机的状态)会重置为初始值。)

单击键盘上 Backspace 按键回到主系统。
双击打开 Controller 子系统,放置一个 goto 模块(向具有指定标签的 From 模块发送信号),它的位置在库浏览器 Sysblock.SignalRouting(信号路由模型库).Goto。双击打开 goto 模块,将 Goto 标签设置为 ControlLogic、标签可见性全局。单击确定保存设置。

将 Compare10ToConstant 模块的输出端口连接到 goto 模块的输入端口。

单击键盘上 Backspace 按键回到主系统。
放置一个 From 模块(用指定的标签从 Goto 模块接收信号),它的位置在库浏览器 Sysblock.SignalRouting(信号路由模型库).From。双击打开 from 模块,关联标签设置为 ControlLogic。

# 模块参数设置
双击打开 uniformRandomNumber 模块,设置最小值 -2、最大值 2、种子 0、采样时间 0.001。

双击打开 logicalOperator 模块,将运算符设置为"非",单击确定保存设置。右击 logicalOperator 模块,单击旋转 -90°。

# 连接模块
from 模块的输出端口连接到 SuperTwistingLogic1 子系统的使能输入端口、not 模块的输入端口。not 模块的输出端口连接到 SuperTwistingLogic2 模块的使能输入端口。SuperTwistingLogic1 子系统的输出端口 u21 连接到 merge 模块的第一个输入端口。SuperTwistingLogic2 子系统的输出端口 u21 连接到 merge 模块的第二个输入端口。

merge 模块的输出端口连接到 sum1 模块的第一个输入端口。Controller 子系统的 u1 输出端口连接到 sum1 模块的第二个输入端口,sigma 输出端口分别连接到 SuperTwistingLogic1 和 SuperTwistingLogic2 子系统的 sigma 输入端口。

uniformRandomNumber 的输出端口连接到 System 子系统的 Disturbance_d 输入端口。sum1 模块的输出端口连接到 System 子系统的 ControlInput_u 输入端口。System 子系统的输出端口 x1 连接到 mux 模块的第一个输入端口和 Controller 子系统的输入端口 x1。System 子系统的输出端口 x2 连接到 mux 模块的第二个输入端口和 Controller 子系统的输入端口 x2。mux 模块的输出端口连接到 scope 模块的输入端口。

# 仿真设置
在进行仿真之前需要进行仿真设置,在软件上方功能区,单击主页 > 仿真设置按钮,打开仿真设置界面。在该界面设置开始时间 0,终止时间 15,输出区间步长 0.0001。积分算法的类型设置为变步长,算法为 Dassl (BDF, 变阶,刚性),容差 0.0001,初始积分步长 Default,单击确定并保存到模型。
# 仿真运行
单击主页 > 仿真,等待仿真运行结束。双击 scope 示波器查看仿真运行结果。
