跳转到正文

柴发逻辑组态:停电后,系统怎样自动恢复供电

正常情况下,负载由上级电源(如市电或厂区主电源)供电,柴油发电机处于待机状态。当上级电源失效,控制系统需要自动完成:

text
确认供电母线失电
→ 启动柴发
→ 等待发电稳定
→ 合上柴发出口断路器
→ 恢复负载供电

这里的母线,是汇集并向各用电设备分配电能的公共通道。

逻辑组态,就是把这套操作规程变成控制器能够自动判断和执行的规则。

本文通过三个动画回答三个问题:

  1. 停电后,系统整体发生什么?
  2. 控制系统怎样决定是否启动和合闸?
  3. 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 = TRUE
text
自动模式
AND 急停回路正常
AND 无停机故障
AND QF1确认分位
→ StartPermit = TRUE
text
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.0BusDeadRaw母线失电
GCU运行触点%IX0.1DG_Running柴发运行
QF1辅助触点52b%IX0.2QF1_OpenQF1在分位

硬件组态负责把每个物理通道绑定到有意义的变量名。PLC程序读取BusDeadRaw,而不是直接理解母线电压。

输出方向

text
PLC程序变量
→ 输出过程映像区Q
→ DO输出模块
→ 中间继电器
→ 现场设备

例如:

程序变量示例地址物理去向
DG_Start_CMD%QX0.0柴发远程启动继电器
QF1_Close_CMD%QX0.1QF1合闸继电器
QF1_Open_CMD%QX0.2QF1分闸继电器

在典型循环模型中,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语句,而是由四部分共同组成:

  1. 物理设备和控制边界;
  2. 输入输出和变量映射;
  3. 请求、许可、命令与反馈;
  4. 顺序、超时、故障和保护。

急停、超速、短路等关键保护通常由硬接线、GCU和专用保护装置承担。PLC负责顺控、协调和报警,不能作为唯一保护。

如果能沿着“现场输入—程序判断—输出命令—设备反馈”解释完整过程,就已经建立了柴发逻辑组态的基本框架。

参考资料

  1. Phoenix Contact, PLCnext Engineer Data List:I/Q过程数据方向与PLC变量映射
  2. Phoenix Contact, Defining the I/O update task for PROFINET
  3. IEC, IEC 61131-3:2025 — Programmable controllers, Part 3: Programming languages,第4版,2025。

内容与代码许可证待项目确认