外观
柴发逻辑组态:停电后,系统怎样自动恢复供电
正常情况下,负载由上级电源(如市电或厂区主电源)供电,柴油发电机处于待机状态。当上级电源失效,控制系统需要自动完成:
text
确认供电母线失电
→ 启动柴发
→ 等待发电稳定
→ 合上柴发出口断路器
→ 恢复负载供电这里的母线,是汇集并向各用电设备分配电能的公共通道。
逻辑组态,就是把这套操作规程变成控制器能够自动判断和执行的规则。
本文通过三个动画回答三个问题:
- 停电后,系统整体发生什么?
- 控制系统怎样决定是否启动和合闸?
- PLC程序怎样连接真实的输入与输出?
文中的时间和电压范围只用于解释原理,不是具体项目定值。
一、停电后,系统整体发生什么
先看完整过程。暂时不用理解每个变量,只观察现场变化怎样进入控制器,控制命令又怎样返回设备。
动画中有哪些设备
text
柴油发动机 → 1号发电机G1 → 出口断路器QF1 → 母线 → 负载- 柴油发动机提供机械动力。
- 发电机G1把机械能转换成电能,G1表示1号发电机。
- QF1是柴发出口断路器,决定柴发是否接入母线。
- **GCU(柴发控制器)**负责供油、启动马达和机组本体保护。
- **PLC(可编程逻辑控制器)**负责系统协调,判断什么时候启动、合闸和停机。
系统中同时存在两条路径:
text
一次回路:柴发 → QF1 → 母线 → 负载
控制回路:检测装置 → PLC → 继电器 → GCU或QF1一次回路承担主电能传输;控制回路传递检测结果和操作命令。
从动画中抓住一条主线
text
母线失电
→ 电压检测装置把结果转换成0/1信号
→ PLC收到输入
→ PLC发出远程启动命令
→ GCU启动柴发
→ 柴发返回运行和就绪反馈
→ PLC控制QF1合闸
→ 母线恢复供电PLC通常不直接驱动启动马达,而是向GCU发出远程启动请求。GCU控制柴发本体,PLC协调整个供电过程。
二、控制系统怎样作出决定
检测到一次低电压还不能立即启动。控制系统还要确认低电压持续时间、安全条件和设备反馈。
下面的动画把整个过程拆成“待机、请求、许可、启动、建压、合闸和运行”。
五个核心概念
所有控制动作都可以拆成五个问题:
| 概念 | 要回答的问题 | 柴发启动示例 |
|---|---|---|
| Request 请求 | 为什么要动作? | 母线持续失电 |
| Permit 许可 | 现在能否动作? | 自动模式、无故障、QF1处于断开位置 |
| Command 命令 | 最终发出什么要求? | 向GCU发出远程启动 |
| Feedback 反馈 | 设备真的完成了吗? | GCU返回柴发运行 |
| Timeout/Fault 超时与故障 | 没有完成怎么办? | 启动超时并报警 |
最小启动逻辑是:
text
母线失电持续5秒
→ StartRequest = TRUEtext
自动模式
AND 急停回路正常
AND 无停机故障
AND QF1确认分位
→ StartPermit = TRUEtext
StartRequest
AND StartPermit
→ DG_Start_CMD延时用于滤除短时电压波动;确认QF1分位,是为了让柴发先在与母线断开的状态下启动和建压。“分位”就是断路器的断开位置。
命令不等于完成
text
DG_Start_CMD = TRUE
≠
DG_Running = TRUE前者表示PLC已经提出启动要求,后者才表示柴发已经运行。因此,程序必须:
text
发出命令
→ 等待独立反馈
→ 反馈按时到达:进入下一步
→ 反馈超时未到:进入故障处理用状态机组织顺序
柴发控制不是一次布尔运算,而是一段有明确先后关系的过程:
text
待机
→ 确认失电
→ 启动柴发
→ 暖机建压
→ QF1合闸
→ 带载运行
→ 卸载分闸
→ 冷却停机熟悉C语言时,可以把它理解为enum + switch:
c
typedef enum {
DG_IDLE,
DG_STARTING,
DG_WARMING,
DG_CLOSING_BREAKER,
DG_RUNNING,
DG_FAULT
} DG_State;
switch (dg_state)
{
case DG_IDLE:
if (StartRequest && StartPermit)
dg_state = DG_STARTING;
break;
case DG_STARTING:
DG_Start_CMD = true;
if (DG_Running)
dg_state = DG_WARMING;
else if (StartTimeout)
dg_state = DG_FAULT;
break;
case DG_WARMING:
if (DG_Ready && BusNoVoltage)
dg_state = DG_CLOSING_BREAKER;
break;
}PLC的ST语言可以使用CASE表达相同状态机。
母线失电和母线无压不是一回事
- 母线失电用于决定是否启动柴发,通常带欠压阈值和延时。
- 母线无压用于决定能否直接合闸,通常要求母线残余电压接近零。
如果母线已经带电,QF1不能按无压条件直接合闸,必须经过同期判断。
三、PLC程序怎样连接真实设备
PLC并不天然认识“母线”或“柴油机”。它首先看到的只是输入模块上的0和1。
下面的动画把输入过程映像区I和输出过程映像区Q分别展示。重点观察:现场输入何时进入I区,程序结果何时从Q区送到物理输出。
输入方向
text
现场触点
→ DI输入模块
→ 输入过程映像区I
→ PLC程序变量例如:
| 物理来源 | 示例地址 | 程序变量 | TRUE的含义 |
|---|---|---|---|
| 电压检测触点 | %IX0.0 | BusDeadRaw | 母线失电 |
| GCU运行触点 | %IX0.1 | DG_Running | 柴发运行 |
| QF1辅助触点52b | %IX0.2 | QF1_Open | QF1在分位 |
硬件组态负责把每个物理通道绑定到有意义的变量名。PLC程序读取BusDeadRaw,而不是直接理解母线电压。
输出方向
text
PLC程序变量
→ 输出过程映像区Q
→ DO输出模块
→ 中间继电器
→ 现场设备例如:
| 程序变量 | 示例地址 | 物理去向 |
|---|---|---|
DG_Start_CMD | %QX0.0 | 柴发远程启动继电器 |
QF1_Close_CMD | %QX0.1 | QF1合闸继电器 |
QF1_Open_CMD | %QX0.2 | QF1分闸继电器 |
在典型循环模型中,PLC运行过程可以近似理解为:
c
while (1)
{
copy_physical_inputs_to_I_image();
run_control_logic();
copy_Q_image_to_physical_outputs();
wait_next_cycle();
}因此:
- 输入映像区是本次扫描读取的现场快照。
- 输出映像区保存程序准备提交给硬件的结果。
- 程序写入输出命令,不代表设备已经完成动作。
- 后续扫描读到的反馈,才证明现场动作结果。
不同PLC和现场总线可能采用不同的I/O更新时间。动画展示的是便于入门的典型循环模型。
四、把三个动画合成一条闭环
现在可以把柴发逻辑组态概括为:
text
现场发生变化
→ PLC获得输入
→ 程序产生请求
→ 检查动作许可
→ 状态机发出命令
→ 设备执行
→ 反馈返回PLC
→ 成功进入下一步,失败进入超时或故障处理逻辑组态不只是一条AND语句,而是由四部分共同组成:
- 物理设备和控制边界;
- 输入输出和变量映射;
- 请求、许可、命令与反馈;
- 顺序、超时、故障和保护。
急停、超速、短路等关键保护通常由硬接线、GCU和专用保护装置承担。PLC负责顺控、协调和报警,不能作为唯一保护。
如果能沿着“现场输入—程序判断—输出命令—设备反馈”解释完整过程,就已经建立了柴发逻辑组态的基本框架。
参考资料
- Phoenix Contact, PLCnext Engineer Data List:I/Q过程数据方向与PLC变量映射。
- Phoenix Contact, Defining the I/O update task for PROFINET。
- IEC, IEC 61131-3:2025 — Programmable controllers, Part 3: Programming languages,第4版,2025。