4、本地规则引擎核心概念:事件、条件、动作、规则集、触发机制、优先级与冲突解决

在工业网关的本地规则引擎中,规则并非简单的“如果-那么”语句堆砌,而是一套具备严格语义、执行顺序和冲突消解机制的逻辑系统。理解事件、条件、动作、规则集、触发机制、优先级与冲突解决这七个核心概念,是设计可靠边缘计算策略的前提。本章将逐一拆解这些概念,并重点说明它们如何在RK工业网关的有限算力环境下协同工作,确保数据在断网或云端延迟时仍能做出正确响应。

本地规则引擎核心概念关系与执行链路 事件源 Modbus轮询 MQTT上行/下行 定时器/内部心跳 事件分类 数据点变化 阈值越限 通信状态变更 条件评估 比较运算 逻辑组合(AND/OR) 时间窗口判断 动作执行 写寄存器/DO MQTT发布告警 本地存储/计数 规则集管理(规则A / 规则B / 规则C ...) 规则A(高优先级) 事件: 温度>85℃ 条件: 持续5秒 动作: 停机+告警 优先级: 1 (最高) 规则B(中优先级) 事件: 振动>4.5mm/s 条件: 且转速>800rpm 动作: 降速运行 优先级: 2 规则C(低优先级) 事件: 每日定时 条件: 累计运行>12h 动作: 生成维护提醒 优先级: 3 冲突解决策略: 高优先级覆盖低优先级 | 互斥动作互锁 | 时间戳裁决

4.1 事件:规则触发的源头

事件是规则引擎的输入信号,它代表系统内部或外部环境发生的、可被检测到的状态变化。在RK工业网关中,事件并非抽象概念,而是具体的数据载体。常见的事件类型包括:数据点值变化(如温度从80℃跳变到85℃)、阈值越限(如压力超过设定上限)、通信状态变更(如Modbus从站无响应)、定时器到期(如每10分钟执行一次巡检)以及外部消息到达(如云端下发的控制指令)。

事件在网关内部被封装为统一的数据结构,通常包含事件类型、事件源标识、时间戳、当前值、阈值等字段。例如,一个典型的温度越限事件可以表示为:

{
  "event_type": "THRESHOLD_EXCEED",
  "source": "modbus.slave1.holding_register_0x100",
  "timestamp": 1712345678,
  "current_value": 86.5,
  "threshold": 85.0,
  "unit": "℃"
}

设计事件时需注意:事件应尽量原子化,即一个事件只描述一个状态变化,避免将多个逻辑合并到一个事件中。这有助于后续规则条件的精确匹配和调试。

4.2 条件:规则执行的判断依据

条件是对事件及其上下文进行逻辑判断的表达式。条件可以基于事件本身的属性(如当前值是否大于阈值),也可以引用其他数据点的实时值、历史统计值或系统状态。条件支持比较运算符(>、<、==、!=)、逻辑运算符(AND、OR、NOT)以及时间窗口函数(如持续5秒、过去10分钟内的最大值)。

在RK工业网关的规则引擎中,条件评估遵循短路原则:一旦某个子条件不满足,整个条件表达式立即返回False,不再评估后续子条件。这一设计在资源受限的嵌入式环境中尤为重要,可有效减少计算开销。例如,规则“当温度大于85℃且持续5秒”的条件表达式为:

temp_value > 85.0 AND duration_since_first_exceed >= 5

条件中引用的数据点必须已在网关的数据采集配置中定义,否则规则在编译阶段就会报错。建议在编写规则前,先梳理所有需要引用的数据点及其数据类型,避免运行时类型不匹配。

4.3 动作:规则执行的输出结果

动作是规则条件满足后执行的具体操作。在工业场景中,动作通常分为四类:控制类(写寄存器、控制DO输出、下发指令到PLC)、通知类(通过MQTT发布告警消息、发送邮件或短信)、存储类(将数据写入本地SQLite数据库、更新内存中的统计变量)以及联动类(触发另一条规则的执行)。

动作执行必须考虑幂等性和安全性。例如,写DO输出时,应确认当前状态是否已为目标状态,避免重复写入造成设备抖动。对于涉及设备启停的动作,建议在动作中增加互锁条件,例如:

// 伪代码示例:安全停机动作
if (current_speed > 0) {
    write_register(0x0010, 0);  // 发送停机指令
    log_event("Emergency stop triggered");
    publish_mqtt("alarm/emergency", "{\"code\":\"STOP\"}");
}

动作执行失败时,规则引擎应记录错误日志并触发重试机制(最多重试3次,间隔1秒)。若重试仍失败,则将该事件标记为“未处理”,并通知系统管理员。

4.4 规则集:规则的组织与管理

规则集是若干条规则的逻辑集合,用于实现一个完整的业务场景。例如,“电机保护规则集”可能包含过温停机规则、过流降速规则、振动异常告警规则和每日维护提醒规则。规则集在网关中通常以JSON或Lua脚本的形式存储,并支持动态加载和卸载。

规则集的设计应遵循高内聚、低耦合原则。每条规则只负责一个独立的判断逻辑,规则之间通过事件或共享变量进行通信,避免直接调用。以下是一个规则集的配置示例:

{
  "rule_set_id": "motor_protection_v1",
  "rules": [
    {
      "rule_id": "R001",
      "name": "over_temp_stop",
      "event": "temp_exceed",
      "condition": "temp_value > 85 AND duration > 5",
      "action": "emergency_stop",
      "priority": 1
    },
    {
      "rule_id": "R002",
      "name": "over_current_slowdown",
      "event": "current_exceed",
      "condition": "current_value > 120 AND speed > 800",
      "action": "reduce_speed",
      "priority": 2
    }
  ]
}

规则集的版本管理非常重要。当现场工艺调整时,可能需要修改规则参数。建议在规则集中增加version字段,并在修改时保留历史版本,以便回滚。

4.5 触发机制:事件如何驱动规则执行

触发机制定义了事件与规则之间的匹配和调度方式。RK工业网关支持三种触发模式:立即触发(事件到达后立即评估所有匹配的规则)、延迟触发(事件到达后等待一段时间,若状态持续则触发,用于消抖)和周期触发(按固定时间间隔评估规则,适用于周期性巡检场景)。

在实际应用中,立即触发和延迟触发常组合使用。例如,对于温度越限事件,可设置“立即触发”用于快速告警,同时设置“延迟触发”(持续5秒)用于确认故障是否真实存在,避免瞬时干扰造成误报。触发机制的选择直接影响系统的响应速度和稳定性,需要根据设备的重要性和故障危害程度权衡。

4.6 优先级与冲突解决

当多个规则同时满足条件时,优先级决定了执行顺序。优先级通常用整数表示,数值越小优先级越高。高优先级规则可以抢占低优先级规则的执行,也可以抑制低优先级规则的动作。在RK工业网关中,优先级冲突解决遵循以下策略:

冲突类型 解决策略 示例
动作互斥 高优先级动作覆盖低优先级动作 规则A要求停机,规则B要求降速,执行停机
资源竞争 按优先级顺序排队执行 两条规则同时要写同一寄存器,高优先级先写
逻辑矛盾 以时间戳最新的规则为准 规则A说开阀,规则B说关阀,后触发的生效

为避免冲突,建议在规则设计阶段就明确各规则的优先级和互斥关系。例如,紧急停机规则的优先级应设为最高(1),且其动作应包含“锁定”标志,防止其他规则在短时间内覆盖停机指令。

实战场景:空压机联控规则集设计
某工厂空压站有3台空压机,要求根据管网压力自动启停。初始现象:压力波动大,频繁启停导致设备磨损。关键参数:压力设定值0.7MPa,启泵压力0.65MPa,停泵压力0.75MPa,单台运行时间上限2小时。
设计规则集:
规则1(优先级1):若压力<0.65MPa且运行台数<3,启动一台空闲时间最长的空压机。
规则2(优先级2):若压力>0.75MPa且运行台数>1,停止一台运行时间最长的空压机。
规则3(优先级3):若单台运行时间>2小时,切换至另一台空闲设备。
实施后,压力波动范围缩小至±0.02MPa,设备启停次数减少60%。复盘经验:优先级1和2互斥,不会同时触发;规则3的切换动作需在规则1和2不满足时才执行,因此优先级设为3合理。

4.7 常见误区与总结复盘

误区一:事件与条件混淆。事件是“发生了什么”,条件是“是否满足要求”。例如,“温度大于85℃”是事件,“温度大于85℃且持续5秒”是条件。将阈值判断放在事件中会导致规则无法复用。

误区二:优先级设置随意。优先级不是简单的数字排序,它决定了故障处理的安全边界。建议将涉及人身安全、设备损坏的规则设为最高优先级,并定期审查优先级设置。

误区三:忽略动作的副作用。动作执行可能引发新的事件,从而触发其他规则,形成循环触发。例如,写DO输出导致设备状态变化,又触发状态变更事件。设计时应使用“事件去重”或“状态锁存”机制避免死循环。

误区四:规则集无版本管理。现场调试时经常需要调整规则参数,若无版本记录,出现问题后难以回溯。建议每次修改都保存历史版本,并记录修改人和修改原因。

总结:本地规则引擎的七个核心概念构成了一个完整的闭环——事件驱动、条件判断、动作执行、规则集管理、触发机制调度、优先级仲裁、冲突消解。在RK工业网关的实际部署中,建议先绘制规则逻辑流程图,再编写配置,最后通过模拟事件进行充分测试。只有深入理解这些概念的内在联系,才能设计出既灵敏又稳定的边缘控制策略。