跳到主要内容

报警管理

报警是运行期出现异常后的标准化提醒,不是 throw 异常。Darra 内置一套完整报警系统。

截图: 报警面板

定义报警

项目浏览器 → 报警组 → 新建报警,填写:

字段说明
编号唯一 ID,如 A001
类别紧急 / 故障 / 警告 / 信息
触发变量布尔变量,为 TRUE 时报警
描述中文描述,会显示在 HMI 和记录
处理建议操作员提示
确认要求是否需要人工按键确认

分类

按严重度分 4 级:

级别颜色典型用途
紧急急停、人身安全、重大事故
故障设备故障,需停机处理
警告可继续运行,但需关注(接近阈值)
信息提示性,不影响运行(换班、开机)

在线查看

Ribbon → PLC → 报警面板,或 HMI 里放 报警控件:

  • 实时报警列表(按时间倒序)
  • 未确认的加粗显示
  • 双击跳到触发变量
  • 右键 → 确认 / 全部确认

历史记录

每次报警自动存历史,可查:

  • 触发时间
  • 恢复时间
  • 确认时间和确认人

截图: 报警历史记录

  • 持续时长
  • 报警频率统计

通知

报警可触发外部通知(设置 → 报警通知):

  • 邮件
  • MQTT 消息
  • Webhook(HTTP POST)
  • 短信(需配短信网关)

报警屏蔽

调试或维护时可屏蔽某些报警:

  • 右键报警定义 → 暂时屏蔽 N 分钟
  • 屏蔽期过后自动恢复
  • Ribbon 顶部图标会提示「N 个报警被屏蔽」
注意

屏蔽不能代替排查。报警屏蔽清单定期审计。

报警等级详解

4 级报警分类的详细行为:

等级颜色声音行为示例
紧急 (Fatal)红闪警铃立即停机 + 全线停 + 弹窗阻塞急停、门未关、安全限位
故障 (Error)蜂鸣停当前工序 + 弹窗电机过载、通讯中断
警告 (Warn)嘟嘟继续运行 + 顶部提示接近温度阈值、电池低
信息 (Info)静音仅记录换班、启动完成、配方切换

每级的默认行为可在设置 → 报警策略中调整。

报警定义的变量类型

布尔触发 (最常见)

// 变量为 TRUE 时触发
报警: A001_Overheat
触发: rTemp > 80.0
等级: 警告
描述: '炉温过高 (${rTemp}°C)'
建议: '检查冷却系统'

多级阈值触发

同一个变量在不同阈值触发不同等级:

rTemp > 70.0  → A001_HighTemp_Warn  (警告)
rTemp > 80.0 → A002_HighTemp_Error (故障)
rTemp > 100.0 → A003_HighTemp_Fatal (紧急)

状态变化触发

// 正常 → 非正常
R_TRIG(bFault) → 触发故障报警
F_TRIG(bCommOK) → 触发通讯断开报警

超时触发

// 某步骤超过预期时间
S_Homing.T > T#30s → A010_HomeTimeout

复合条件

bMotorRunning AND rCurrent > 10.0 AND tonDurration.Q  
→ A020_MotorOverload

报警消息模板

报警描述支持变量替换:

模板: '炉温过高: 当前 ${rTemp}°C, 上限 ${rTempLimit}°C, 工位 ${iStation}'

实时替换后:
'炉温过高: 当前 85.3°C, 上限 80.0°C, 工位 3'

支持的变量:

  • ${变量名} — 直接替换变量值
  • ${变量名:N} — 浮点保留 N 位小数 (如 ${rTemp:2} = 85.30)
  • ${变量名:X} — 十六进制 (如 ${wStatus:X} = 05F3)
  • ${TIME()} — 当前时间
  • ${USER()} — 当前登录用户

确认机制

自动确认 vs 人工确认

类型说明适用
自动确认触发条件恢复后自动消失临时超限 (如启动冲击)
人工确认必须点"确认"按钮才消失故障 / 紧急
事件序列 (人工确认):
1. 触发: rTemp > 80.0, 报警"炉温过高"激活
2. 用户看到: 红色弹窗, 铃响
3. 条件恢复: rTemp = 70.0, 报警状态变 "已复位, 待确认"
4. 用户点"确认": 报警消失, 写入历史

批量确认

  • 全部确认: 一键清除所有待确认报警
  • 按等级确认: 只确认 Info / Warn, 保留 Error / Fatal 待追究
  • 按组确认: 只确认某一设备的全部报警

确认权限

等级确认权限
Info操作员 / 工程师 / 管理员
Warn操作员 / 工程师 / 管理员
Error工程师 / 管理员
Fatal管理员 (需双重确认 + 原因)

报警历史详细字段

每条历史记录包含:

字段说明
报警号A001, A002 ...
等级Info / Warn / Error / Fatal
描述报警文字 (含变量替换)
触发时间精确到毫秒
触发变量值快照当时的相关变量
恢复时间条件恢复时刻
确认时间用户确认时刻
确认人登录账号
持续时长恢复 - 触发
处理备注用户输入的处理说明
关联工单MES 工单号

查询与筛选

报警历史面板提供强大的筛选:

  • 按时间范围
  • 按等级
  • 按设备 / 工位
  • 按触发变量
  • 按文字关键字搜索
  • 按确认状态

报警统计

自动生成统计报表:

统计说明
频率排行最常触发的报警 Top 10
累计时间每个报警累计停机时间
MTBF相邻报警的平均间隔 (Mean Time Between Failures)
MTTR平均处理时间 (Mean Time To Repair)
班组对比不同班次的报警数对比

用于发现隐藏的系统性问题: "每周三 14:00 总有 A005 报警, 查对应工艺" 。

通知渠道

邮件

配置 SMTP 服务器, 指定等级触发邮件:

SMTP:
server: smtp.company.com
port: 465
user: alarm@company.com
password: xxx (加密)

Rules:
- level: Fatal
to: [boss@company.com, maintenance@company.com]
subject: '[紧急] ${AlarmName}'
- level: Error
to: [maintenance@company.com]
subject: '[故障] ${AlarmName}'

短信

接入短信网关 (阿里云 / 腾讯云), 按模板发送:

【车间一号线】紧急报警 A001: 炉温过高 95°C. 请立即到场处理.

MQTT 推送

推送到 MES / 云平台:

Topic: factory/plc1/alarm
Payload: {
"id": "A001",
"level": "Fatal",
"message": "炉温过高 95°C",
"timestamp": "2026-04-18T14:32:05.123Z",
"station": 3,
"variables": {"rTemp": 95.0, "rLimit": 80.0}
}

Webhook (HTTP POST)

集成第三方系统 (Slack / 钉钉 / 飞书 / 企业微信):

POST https://api.slack.com/bot/xxx
Body: {"text": "【紧急】炉温过高 95°C @frontline"}

语音电话 (可选)

接入电话网关, 拨打运维工程师:

Fatal 报警 → 自动呼叫 3 人 → 第一个接听后停止

报警组与层级

按设备分组管理:

设备层级:
车间
├── 生产线 1
│ ├── 工位 1 (焊接)
│ │ ├── A001_SpindleFault
│ │ ├── A002_Overtemp
│ │ └── A003_CommLost
│ └── 工位 2 (装配)
│ ├── B001_GripperFault
│ └── B002_CycleTimeout
└── 生产线 2
└── ...

操作:

  • 整个工位的报警一键屏蔽 (调试该工位时)
  • 整条线的报警导出日志 (审计)
  • 按工位分发通知: 工位 1 报警只通知工位 1 维修工

屏蔽管理

时间屏蔽

屏蔽 N 分钟自动恢复:

A001_Overheat [已屏蔽 23:45] 剩余 15 分钟

条件屏蔽

仅在特定条件下屏蔽:

IF bMaintenanceMode THEN
SuppressAlarm('A001') // 维护模式下不触发
SuppressAlarm('A002')
END_IF;

屏蔽审计

所有屏蔽操作写审计日志:

2026-04-18 09:00 [USER=wang] SUPPRESS A001 for 60min reason='调试冷却系统'
2026-04-18 10:00 [SYSTEM] UNSUPPRESS A001 (timeout)

屏蔽清单每日早上自动发邮件给管理员审核。

排错表

问题原因解决
报警不触发触发条件写错在监视表看触发变量
确认按钮灰显权限不足管理员授权
邮件未收到SMTP 配置错测试邮件, 查日志
屏蔽不生效屏蔽列表未应用重启报警服务
历史报警丢失数据库磁盘满定期归档 + 清理
同一报警刷屏未加防抖设置最小触发间隔

最佳实践

  • 等级分明: Fatal 只留真正人命关天的, 别滥用
  • 描述带变量值: 炉温${rTemp}°C温度过高 有用
  • 处理建议必填: 每个报警都要告诉操作员怎么办
  • 防抖动: 同一报警最小间隔 1 秒, 避免高频抖动刷屏
  • 定期审计屏蔽清单: 每周清理过期/不合理的屏蔽
  • 演练报警链路: 每月人为触发 1 次 Fatal, 验证通知是否到达
  • 报警归档: 每月导出历史备份, 满足审计
  • 统计看板: HMI 常驻显示 MTBF / MTTR, 驱动改善

相关文档