在 Simulink 建模仿真中,很多刚入门的朋友会把注意力集中在 Continuous、Math Operations、Sources、Sinks 这些“大而全”的模块库上,却容易忽略一些看似简单、实则非常实用的基础模块。Relay 模块就是其中之一。它在逻辑判断、滞环控制、抗抖振处理、阈值切换等场景中出镜率极高,尤其在电力电子、电机控制、温度控制、信号调理等模型里,Relay 几乎是“小而美”的代表。本文将以 Relay 模块为主线,完整讲解它的基本用法、工作原理、参数含义、典型应用和工程注意事项,希望能帮你把这个模块用透。
1. 为什么需要 Relay 模块
1.1 从继电器说起
在物理世界里,继电器是一种电气控制器件。当输入量(如电压、电流、温度信号)达到设定阈值时,继电器会动作,使输出发生阶跃变化,从而接通或断开被控电路。Relay 模块正是受物理继电器启发,被设计成了一种带滞环特性的开关型模块。
从建模视角看,Relay 模块就是一个带记忆环节的阈值判断器:它不关心输入信号的连续变化梯度,而是关心输入是否越过了某个临界区间。只要输入跨越了开启阈值,输出就从一个固定值跳到另一个固定值;而输入回落到关闭阈值时,输出再跳回原值。
1.2 为什么不能直接用 Switch 代替
有的读者可能会问:Simulink 不是有 Switch 模块吗?设置一个判断条件,大于多少就给一个值,小于多少就给另一个值,这不也能实现开关逻辑吗?
这里要区分两个概念:
- Switch 模块是无记忆比较器,它只根据当前输入值与阈值的比较结果做选择,过去的状态不影响当前输出。
- Relay 模块是有记忆滞环开关,它内部保存了输出状态,输入跨越不同阈值时触发不同的切换动作。
Relay 的滞环特性决定了它在输入信号在阈值附近出现高频抖动时,不会来回频繁切换。这一点在实际工程中非常重要,因为传感器噪声、数值振荡等都可能让输入信号在阈值附近反复穿越。如果使用 Switch,输出就会出现高频抖振;而使用 Relay,输出只会按照滞环逻辑稳定切换。
1.3 典型应用场景
Relay 模块常见于以下场景:
- 温度控制:当温度低于下限时启动加热器,当温度高于上限时停止加热。
- 电池管理:根据电池电压或 SOC 阈值切换充放电状态。
- 电力电子:滞环电流控制中用于生成 PWM 开关信号。
- 电机控制:转速或转矩的阈值判断与状态切换。
- 信号滞后判断:对超标信号进行延时保护。
- 数值计算中的符号翻转:实现简单的双位控制。
只要模型中出现“状态记忆 + 阈值切换 + 抗抖振”的需求,Relay 往往是最快的解决方案。
2. Relay 模块的位置与基本外观
2.1 模块位置
在 Simulink 库浏览器中,Relay 模块的查找路径是:
Simulink / Discontinuities / Relay建议直接在模型窗口中输入字符Relay,然后从搜索结果中拖入模型,这样效率更高。
Discontinuities 库中包含的都是非连续性质的模块,除了 Relay 之外,还有 Quantizer、Rate Limiter、Saturation、Dead Zone、Coulomb & Viscous Friction 等。Relay 在其中是比较有代表性的一类。
2.2 模块图标与端口
Relay 模块默认有两个输入端、一个输出端:
- 输入端口:接收待判断的信号,支持标量、向量或矩阵(取决于勾选的参数)。
- 输出端口:输出切换后的固定值,通常不是高电平就是低电平。
双击模块打开参数设置窗口,可以看到四个核心参数,如图 1 所示(这里借用模块对话框的标准布局)。
3. Relay 模块的核心参数详解
Relay 模块的四个参数,缺一不可。很多初学者为了图省事只设置前两个参数,结果模型出现异常状态,这往往就是没有理解四个参数间的约束关系。
3.1 Switch on point(开启阈值)
开启阈值指的是输入信号从低向高变化时,触发输出切换为“开启值”的临界点。当输入大于等于该值时,Relay 状态变为 on。
3.2 Switch off point(关闭阈值)
关闭阈值指的是输入信号从高向低变化时,触发输出切换为“关闭值”的临界点。当输入小于等于该值时,Relay 状态变为 off。
3.3 Output when on(开启输出值)
开启阈值被触发后,输出端口输出的数值。这个值一般设置为高电平、控制信号有效电平或逻辑 1。
3.4 Output when off(关闭输出值)
关闭阈值被触发后,输出端口输出的数值。这个值一般设置为低电平、控制信号无效电平或逻辑 0。
3.5 四个参数之间的约束关系
在实际设置时,必须满足:
Switch on point > Switch off point如果开启阈值和关闭阈值相等,模块参数对话框会弹窗提示,或者模型更新时报错。因为当两个阈值相同时,Relay 的行为就退化为一个无滞环的普通比较器,这违背了 Relay 模块的设计初衷。
延迟滞环宽度由两者之差决定:
滞环宽度 = Switch on point - Switch off point这个差值越大,抗抖振能力越强,但输出切换的响应就越迟钝;差值越小,切换灵敏,但容易受噪声干扰。
3.6 参数设置的最小示例
假设我们要设计一个温度区间控制器,要求温度低于 18℃ 时启动加热,温度高于 22℃ 时停止加热。那么 Relay 模块可以设置如下:
- Switch on point:22
- Switch off point:18
- Output when on:1
- Output when off:0
注意这里的反直觉之处:启动加热是在低温端,但切换动作发生在输入(温度)穿过阈值时。在 Relay 的逻辑里,我们以输入为温度信号、输出为加热控制信号来考虑:
- 温度从低到高越过 22℃ 时,输出切换为 on 值(1),表示停止加热。
- 温度从高到低越过 18℃ 时,输出切换为 off 值(0),表示启动加热。
如果输出逻辑被定义为“1 表示停止加热,0 表示启动加热”,则需要将输出值做适当换算,或者直接使用输出值取反的后续逻辑。
为了让模型更直观,下面给出一个基本连接思路。
4. 基于 Relay 模块的加热控制器实战
4.1 问题描述
构建一个简易的温度滞环控制系统,模拟室内温度传感器输入,并使用 Relay 模块控制加热器的启停。系统要求:
- 当温度低于 19℃ 时,加热器启动(控制信号为 1)。
- 当温度高于 21℃ 时,加热器停止(控制信号为 0)。
- 输入信号在阈值附近存在小幅噪声时,控制器仍能稳定工作。
4.2 建立模型
在 Simulink 空白模型中添加以下模块:
- Signal Builder 或 Sine Wave:模拟温度输入。
- Relay:滞环判断。
- Scope:观察输入与输出。
- 可选:Mux 将输入和输出合并显示在同一 Scope 中。
这里为了演示方便,使用一个 20 ± 5℃ 的波动信号来模拟温度变化,并在信号上叠加一个小幅正弦波作为噪声。
模块连接如下:
Temperature Source --> Relay --> Scope4.3 Relay 参数配置
| 参数名 | 值 | 说明 |
|---|---|---|
| Switch on point | 21 | 温度高于 21℃,加热停止 |
| Switch off point | 19 | 温度低于 19℃,加热启动 |
| Output when on | 0 | on 状态输出 0,对应停止加热 |
| Output when off | 1 | off 状态输出 1,对应启动加热 |
有人可能会对“on 状态输出 0”感到困惑。这里的 on/off 是从 Relay 内部状态角度描述的,并不直接等同于物理加热器的开/关。根据实际需求对输出值做语义映射即可。
4.4 温度源信号搭建
模拟温度输入由三部分组成:基准温度 20℃、周期性波动 5sin(0.2πt)、噪声扰动 0.5sin(2πt)。
在 Simulink 中使用 Constant、Sine Wave、Add 模块组合即可:
Constant = 20 Sine Wave1 = 5sin(0.2πt) Sine Wave2 = 0.5sin(2πt) Add: Constant + Sine Wave1 + Sine Wave2 --> Relay如果希望更贴近真实环境,也可以用 Signal Builder 手动绘制温度曲线,或直接导入外部实测数据。
4.5 仿真设置与运行
设置仿真时间为 100 秒,求解器使用默认的变步长求解器即可。运行仿真后,Scope 中可以看到:
- 温度信号在 15℃ 到 25℃ 之间波动。
- Relay 输出在 0 和 1 之间切换。
- 切换点发生在温度穿越 21℃ 和 19℃ 的时刻,而不是温度刚刚到达阈值时就反复跳动。
如果你把 Relay 换成 Switch 并设置相同的阈值,就能明显感受到两种模块的差异:Switch 的输出会在阈值附近产生高频抖动,而 Relay 的输出非常干净。
4.6 输出结果说明
Relay 模块的滞环特性使控制信号只在越过边界时动作一次,这非常像实际的恒温控制器。在工业加热或制冷控制中,这种机制可以显著减少继电器触点机械动作次数,延长设备寿命。
5. 深入理解 Relay 的状态转换逻辑
5.1 状态图描述
Relay 模块的行为可以用以下几个规则概括:
- 当输出状态为 off 时:
- 如果输入 >= Switch on point,输出变为 on。
- 否则,输出保持 off。
- 当输出状态为 on 时:
- 如果输入 <= Switch off point,输出变为 off。
- 否则,输出保持 on。
可以看到,输出状态的改变,取决于当前状态和输入信号的相对关系。这就是 Relay 的“记忆”来源。
5.2 波形图描述
以 Switch on point = 3、Switch off point = 1、Output when on = 1、Output when off = 0 为例:
- 输入从 0 增加到 2.5 时,输出为 0。
- 输入继续增加到 3 时,输出跳变为 1。
- 输入在 3 以上波动时,输出保持 1。
- 输入从 3 降低到 1 时,输出仍为 1。
- 输入降低到 1 以下时,输出跳变为 0。
- 输入在 1 以下波动时,输出保持 0。
这种“从中部区间进入不改变状态,越过边界才改变状态”的行为,就是滞环的核心。
5.3 与状态机的关系
Relay 模块本质上是一个两状态有限状态机(FSM)。如果未来需要更复杂的切换逻辑,可以考虑使用 Stateflow 状态机。但在简单的滞环切换场景下,Relay 模块的轻量级优势非常明显。
6. Relay 模块与其他常见模块的对比
6.1 Relay 与 Switch 的对比
| 对比项 | Relay | Switch |
|---|---|---|
| 判断依据 | 阈值 + 滞环 + 历史状态 | 单一阈值比较 |
| 抗噪声能力 | 强 | 弱 |
| 记忆功能 | 有 | 无 |
| 输出类型 | 固定高/低值 | 任意两个输入之一 |
| 常用场景 | 滞环控制、状态切换 | 信号选择、条件传递 |
6.2 Relay 与 Saturation 的对比
Saturation 模块用于限幅,输出始终在上下限之间连续变化;Relay 输出则固定在两个离散值上。前者用于限制信号范围,后者用于产生开关信号。
6.3 Relay 与 Dead Zone 的对比
Dead Zone 模块将零区间内的输出置为零,本质上是非线性增益变换;Relay 则具备输出状态保持机制,两者要解决的问题并不相同。
6.4 Relay 与 Hysteresis 的对比
有些工具箱提供了专门的 Hysteresis 模块,常见于 Simscape 等物理建模环境。它们的功能与 Relay 在某些场景下相似,但物理语义和参数定义略有差异。常规控制仿真中,Relay 模块足够使用。
7. 常见问题与排查思路
7.1 参数设置报错
现象:点击 OK 后,Simulink 弹窗提示 Switch on point must be greater than Switch off point。
原因:开启阈值小于或等于关闭阈值,不满足滞环条件。
解决:将 Switch on point 调整为大于 Switch off point。
7.2 输出不切换
现象:输入信号明明超过了阈值,但 Relay 输出始终为某个固定值。
排查步骤:
- 检查输入信号是否真实作用在 Relay 端口上,没有断线。
- 检查输入信号的幅值范围是否覆盖了开启阈值。
- 检查 Relay 的 Output when on 和 Output when off 是否设置成了同一个值。
- 检查仿真时间是否足够长,输入是否在仿真区间内到达阈值。
7.3 输出切换过于频繁
现象:Relay 输出在短时间内频繁跳变。
原因:滞环宽度设置过小,输入噪声幅度超过了滞环区间。
解决:增大 Switch on point 与 Switch off point 的差值,或者对输入信号增加滤波环节。
7.4 向量信号处理引发维度错误
现象:模型更新报错,提示输入信号维度与参数不匹配。
说明:Relay 支持向量信号输入,但参数窗口中的阈值参数将被广播到每个输入通道。如果向量中各通道预期使用不同阈值,需要先对输入信号做通道拆分,分别使用独立的 Relay。
7.5 离散求解器下出现不稳定切换
现象:使用固定步长离散求解器时,Relay 切换时刻与采样时刻不一致,导致输出毛刺。
原因:Relay 是连续时间域的模块,采样过程可能发生在阈值穿越之前或之后。
解决:根据系统需要,将 Relay 放在离散子系统中,或者明确选择零阶保持器进行离散化,确保切换逻辑符合离散系统要求。
7.6 代数环问题
现象:Relay 输出直接反馈到输入,而模型中不存在延迟环节,形成代数环。
解决:在反馈回路中添加 Memory、Unit Delay 或滤波环节,打破代数环。
7.7 Relay 与代码生成注意事项
Relay 模块支持 C 代码生成,但在生成嵌入式代码时,需要注意:
- 选择合适的定点数据类型,避免浮点数比较带来的不确定性。
- 设置好代码生成中的数据类型替换规则。
- 在模型配置参数中,将求解器类型与目标硬件匹配。
8. 工程实践中的最佳实践
8.1 合理选择滞环宽度
滞环宽度是 Relay 模块最关键的设计参数。宽度过小,抗干扰能力差;宽度过大,系统响应迟钝。通常需要根据输入信号的噪声幅度、被控对象的控制精度要求来综合确定。
一个经验做法是:将滞环宽度设置为噪声幅度的 3~5 倍,以保证在噪声出现时输出状态不会频繁切换。
8.2 对输入信号做预处理
即使 Relay 本身具备滞环抗抖振能力,也不能完全替代信号滤波。建议在 Relay 输入端之前加入低通滤波器(如 Transfer Fcn 或 Second-Order Filter),先把高频干扰滤掉,再进入阈值判断。
8.3 输出值语义清晰化
使用 Relay 时,最好用 Constant 模块配合 Switch 实现“状态到物理含义”的转换,或者直接定义 Output when on / Output when off 的值为物理语义对应的数值,便于后续仿真分析和代码阅读。
8.4 使用 Data Type Conversion 保证类型一致
如果 Relay 输出的数据与后续模块要求的数据类型不一致,模型会报错或自动插入转换模块。建议在 Relay 输出之后显式添加 Data Type Conversion,避免隐式转换造成精度问题。
8.5 在状态切换时避免突变量过大
Relay 输出在切换瞬间产生的阶跃变化可能是后续模块冲击的来源。若下游有积分环节或执行机构模型,建议在输出端增加 Rate Limiter,限制变化速率。
8.6 合理使用总线信号
在大型模型中,Relay 输入可能来自总线。此时建议使用 Bus Selector 先选取需要的信号,再进入 Relay,保证信号量纲和含义清晰。
8.7 单元测试与验证
工程应用中,Relay 的每个状态都应该有对应的单元测试用例。可以用 Signal Editor 或测试序列(Simulink Test)构造以下输入:
- 低于关闭阈值的恒定信号。
- 高于开启阈值的恒定信号。
- 在滞环区间内振荡的信号。
- 跨越阈值的斜坡信号。
- 带噪声的信号。
确保 Relay 在所有场景下行为符合预期。
9. 一个更复杂的应用案例:滞环电流控制
9.1 应用背景
在电力电子变换器中,滞环电流控制是一种常用的电流控制方法。其基本思想是:将实际电流与参考电流的误差与滞环上下界比较,生成开关信号控制功率管通断,使实际电流在参考值附近以设定带宽波动。
Relay 模块非常适合实现这一功能。
9.2 建模思路
假设参考电流为 5A,允许的滞环带宽为 ±0.5A。那么:
- 误差信号 e = 参考电流 - 实际电流
- 当 e 从下向上穿越 +0.5 时,开关状态切换为 on
- 当 e 从上向下穿越 -0.5 时,开关状态切换为 off
根据 Relay 参数定义,可以设置:
- Switch on point = 0.5
- Switch off point = -0.5
- Output when on = 1
- Output when off = -1
这样输出就是 ±1 的开关信号,可以进一步映射为功率管的驱动信号。
9.3 模型结构
Reference Current (+) ----> Sum ----> Relay ----> Switch/Gate Actual Current (-) ----> Sum关注实际电流状态,可通过一个简单的一阶惯性环节模拟负载响应。
9.4 仿真结果预期
- 实际电流围绕参考电流波动,波动范围由 Relay 的滞环宽度决定。
- 开关频率不稳定,这是滞环控制的特点之一,可通过调整滞环带宽来平衡开关频率与电流纹波。
此类实验非常适合用 Relay 模块快速搭建验证。
10. 总结与继续学习建议
Relay 模块虽然只是 Simulink 众多模块中的一个小成员,但它背后的滞环控制思想,在自动控制、电力电子、过程控制等领域有着广泛应用。通过本文的学习,你应当掌握了以下内容:
- Relay 模块的位置、作用和基本参数设定。
- 滞环逻辑如何决定输出状态切换。
- Relay 与 Switch、Saturation 等模块的差异。
- 如何用 Relay 构建温度滞环控制器。
- 常见报警、参数错误和逻辑问题的排查方法。
- 工程建模时的最佳实践。
学习完 Relay 模块之后,下一步可以继续研究 Discontinuities 库中的其他模块,比如 Rate Limiter、Dead Zone、Quantizer 等;也可以深入了解 Stateflow 状态机,处理更复杂的状态切换与控制逻辑。
在实际项目中,建议先明确控制策略,再决定是否使用 Relay 模块。如果只是简单的阈值判断和状态保持,Relay 是高效的选择;如果需要多状态、多条件组合,则 Stateflow 可能更合适。希望本文能为你的 Simulink 建模之路提供一些实用的参考。