PLC 基础课 第 7 讲|报警与状态:怎么写出一个好用的报警逻辑 + 保留最后一次故障

浏览量:43 次 发布时间:2025-12-02 23:26 作者:明扬工控商城 下载docx

最近更新:PLC 基础课 第 1 讲|什么是 PLC?扫描周期、I/O 映像区,一次讲明白

PLC 基础课 第 7 讲|报警与状态:怎么写出一个好用的报警逻辑 + 保留最后一次故障


【明扬工控商城 · PLC 基础系列】 很多现场程序“能跑”,但一出问题就没人看得懂报警。不是没有报警,而是:没分类、没互锁、没记录、上位机只有一行模糊提示。这一讲,我们做一件事——教你写一套“工程师+操作工都看得懂”的报警逻辑,并在 PLC 中保留最后一次故障。


一、什么是“好用的报警”?3 个标准

  • 1)知道发生了什么:报警内容清晰、唯一,不模糊(不是“设备故障”,而是“X 轴伺服报警”“气压低于 0.4MPa”)。
  • 2)知道该做什么:是“立刻急停”,还是“提示检查后可继续”,逻辑上要有区别。
  • 3)事后查得到:至少保留最后一次故障代码,最好还有时间和运行状态,方便维修与追责。
一句话:报警不是“亮个灯”,而是一个完整的状态管理机制

二、报警类型与优先级划分

1. 三类常见报警

类别 典型信号 处理方式
致命类(急停) 急停按钮、光栅遮挡、安全门打开、伺服严重故障、变频器故障 立即停止输出,切断危险动作,等待人工确认和复位
工艺类(停机) 气压低、料不足、超行程、超温等 停止当前工艺循环,保留状态,人工处理后可继续
提示类(可运行) 保养到期、生产计数到达、温度趋近上限 仅提示,不影响自动运行

2. 优先级“叠加”原则

  • 致命报警优先级最高,一旦触发,所有低级报警逻辑都应让路(例如强制停机)。
  • 工艺报警在报警状态下禁止重新启动自动循环。
  • 提示类可以由操作员手动确认关闭。

三、一个“标准报警位”的基本结构

无论西门子、三菱、台达还是欧姆龙,报警逻辑都可以抽象为:

// 标准报警位(示意逻辑)
// A_Cond:报警条件(比如气压低)
// A_Latch:报警锁存位
// A_Reset:报警复位按钮(且报警条件已消失)

A_Latch = (A_Latch OR A_Cond) AND (NOT A_Reset)
  • 报警条件 A_Cond:实时反映现场是否异常。
  • 锁存 A_Latch:一旦报警触发,即使条件恢复,也要保持到人工复位。
  • 复位条件:必须满足“复位按钮 ON + 条件已恢复正常”。
要点:报警要“锁住”,但不能“锁死”。 ——锁住:自动清不掉,必须人工确认。 ——不锁死:异常消除前,禁止复位。

四、典型梯形图结构示例(伪代码)

1. 报警锁存 + 复位逻辑

// Rung 1:报警锁存
|---[ A_Cond ]-------------------------(SET A_Latch)---|
|---[ A_Latch ] AND [ NOT A_ResetOK ]--(SET A_Latch)---|

// Rung 2:报警可复位条件
A_ResetOK = A_Reset_Button AND NOT A_Cond

也可以用“自锁触点”的写法:

|---[ A_Cond ]------------------------+----( A_Latch )---|
|                                    |
|---[ A_Latch ] AND [ NOT A_ResetOK ]+ 

2. 总报警 & 急停逻辑

// 各子报警位
A1_Latch:急停
A2_Latch:安全门
A3_Latch:伺服故障
A4_Latch:气压低
...

// 总报警
Alarm_Global = A1_Latch OR A2_Latch OR A3_Latch OR A4_Latch ...

// 致命报警(强制停机)
Alarm_Emergency = A1_Latch OR A2_Latch OR A3_Latch
  • Alarm_Global 用于 HMI 显示“系统有报警”。
  • Alarm_Emergency 用于切断输出、禁止驱动(电机 OFF、气缸停止等)。

五、如何“保留最后一次故障”

很多 PLC 都有错误记录,但工程师自己做一层“最后一次故障记录”很有价值:

1. 基本思路:

  1. 为每个报警定义一个唯一的 报警代码 ALM_CODE(INT)。
  2. 当任意一个报警从“0→1”上升沿时,把该代码写入Last_Alarm_Code。
  3. 可选:同时记录当前的时间(时/分/秒)和运行模式。

2. 字段定义建议

变量名 类型 说明
Last_Alarm_Code INT/WORD 最后一次触发的报警代码
Last_Alarm_Time TIME/字符串 最后一次报警时间
Last_Alarm_Mode BYTE 报警发生时的模式(手动/自动/调试)

3. 伪代码示例:记录最后一次报警代码

// 假设:A1_Latch = 急停;报警代码为 101
//      A2_Latch = 安全门;报警代码为 102
// 需要检测“从 0 到 1”的上升沿

IF RisingEdge(A1_Latch) THEN
    Last_Alarm_Code := 101;
    Last_Alarm_Time := Now();
    Last_Alarm_Mode := Mode;   // 当前模式变量
END_IF;

IF RisingEdge(A2_Latch) THEN
    Last_Alarm_Code := 102;
    Last_Alarm_Time := Now();
    Last_Alarm_Mode := Mode;
END_IF;

// ……依次对每个报警做相同处理

注意:不同 PLC 的“当前时间获取”“上升沿指令”写法不同,思路是一样的。

要点:“最后一次故障”记录应在报警锁存那一刻写入,而不是在复位时写,避免覆盖。

六、报警屏蔽与维护模式

现场调试时,有些报警需要暂时屏蔽(例如安装阶段没有安全门),但屏蔽本身必须可控。

1. 屏蔽逻辑示意

// A_Cond:原始报警条件
// A_Mask:屏蔽标志(工程师密码进入后才允许改)

A_Effective_Cond = A_Cond AND (NOT A_Mask)
  • 屏蔽只对“逻辑生效”起作用,不应影响诊断(HMI 可以显示“屏蔽中”)。
  • 所有屏蔽状态必须有列表,调试完毕后恢复。

2. 维护模式下的特别注意:

  • 禁止在维护模式下屏蔽致命类报警(如安全门、急停)。
  • 调试过程需要强制旁路时,应增加硬件锁(钥匙开关)。

七、给 HMI / SCADA 的报警结构建议

为了让上位机好用,PLC 侧可以整理出一张“报警表”,包括:

字段 说明 示例
Alarm_ID 整型代码 101、102、201...
Alarm_Bit 对应的 PLC 报警位 M100.0、D200.0
Alarm_Text 报警文本 “X 轴伺服报警,请检查驱动器”
Alarm_Level 等级 1=提示,2=停机,3=急停
Alarm_Group 分组 电气/机械/气动/安全

HMI 只需要循环扫描这些报警位,将“=1”的报警按时间顺序显示即可。


八、完整报警流程小结

  1. 输入信号标准化:传感器/开关信号进来 → 做滤波/防抖。
  2. 报警条件判断:电平判断、计时、组合逻辑。
  3. 报警锁存与分类:根据优先级分为致命/工艺/提示。
  4. 总报警与急停输出:汇总为总报警、急停信号,控制输出。
  5. 记录最后一次故障:写入代码/时间/模式。
  6. 复位策略:“条件消除 + 人工确认”才允许复位。
  7. 上位机显示与打印:文本、时间、措施建议。
一句“工程师用话”: 好的报警系统 = 80% 的维修时间用在解决问题,而不是找问题在哪儿

下一讲预告:PLC 基础课 第 8 讲|配方与参数:如何设计一套易于维护的参数结构,从 D 区/DB 结构,到配方下载与版本管理。


明扬工控商城

推荐阅读:

PLC 基础课 第 8 讲|一个完整小项目:水泵控制柜,从电气原理图到 PLC 梯形图

PLC 基础课 第 7 讲|报警与状态:怎么写出一个好用的报警逻辑 + 保留最后一次故障

PLC基础课 第6讲|PLC 与变频器通讯:DI/DO + 模拟量 + 简单串口的三种常见组合

PLC基础课 第5讲|顺控/步进:从“顺序动作表”到一个简易顺控程序

PLC基础课 第4讲|模拟量:4–20mA/0–10V 是怎么变成“显示 0–100.0℃”的?

PLC 基础课 第 1 讲|什么是 PLC?扫描周期、I/O 映像区,一次讲明白

PLC 基础课 第 7 讲|报警与状态:怎么写出一个好用的报警逻辑 + 保....docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网