Skip to content

9.5 多个触发条件与与或非 ​

一条流程可以放多个触发条件,再用「与 / 或 / 非」把多路条件组合起来。 这一节讲清楚它们是怎么算的,以及几个最容易接错的地方。

9.5.1 一次触发 = 把流程扫一遍 ​

服务器的算法和 PLC 梯形图扫描很像:

任意一个触发条件成立,就以"这次是它触发的"为前提,把整张流程图算一遍。

  • 一次扫描里,只有把流程叫起来的那个触发条件是"成立",其它触发条件都算"不成立"。
  • 每个中间节点的值由它输入端连进来的线算出来。
  • 输出节点像线圈:只要有一条输入线送来"成立",就执行动作。
  • 本次触发条件顺着连线走不到的节点,一律算不成立,不会掺进这次结果里。

所以「多个触发条件」的含义是多个入口,不是"它们要同时成立",也不是默认的"或"关系。 真正的组合关系由您连的与 / 或 / 非决定。

与或非的六种接法:三种对的、两种错的,以及数值比较的双出口

9.5.2 多个入口,同一套动作 ​

最常见的用法:几个不同的情况都要发同一条通知(图中 ①)。

水位变化时扫一遍:水位那个触发条件成立 → 「或」成立 → 发邮件。 温度变化时同理。两条线互不影响。

只是多个入口的话,「或」可以省掉

把两个触发条件直接连到同一个输出节点也一样:输出节点本身就是"任一输入成立就动作"。 用「或」的好处是后面还能再接「与」「非」继续组合。

9.5.3 用「与」要求同时满足 ​

「与」组合的应该是状态判断,不是触发条件本身。

正确写法:A 变化时,并且 B 当前值超过阈值,才发邮件(图中 ②)

两条线都从同一个触发条件出来:一条直接进「与」,另一条经过「数值比较」读水泵状态的当前值再进「与」。 水位变化时,只有水泵也在运行才发邮件。

两个触发条件不能直接连到「与」上(编译会报错)

见图中 ③。触发条件表示"这一刻发生了这件事",一次扫描只会有一个成立, 要求两个同时成立等于永远不满足。点「编译」会直接报错。

想表达"水位变了,而且温度也高",正确做法是把温度改成「数值比较」读温度点位的当前值。

9.5.4 用「非」表示"不满足" ​

「非」用来给判断结果取反(图中 ⑤):定时启动 → 数值比较(水泵状态 == 1)→ 非 → 发送邮件。

意思是"每 10 分钟检查一次,水泵不在运行状态就发邮件"。

触发条件不能直接取反(编译会报错)

见图中 ④。在"水位变化"这次扫描里它恒为成立,取反后恒为不成立,这条线永远走不下去。 点「编译」会直接报错。

9.5.5 「数值比较」的两个出口 ​

「数值比较」有满足 / 不满足两个出口。多数「取反」的需求用「不满足」出口即可实现,不必再加「非」节点,见图中最后一组。

9.5.6 编译会自动拦截的错误 ​

点顶部「编译」(保存时也会自动查一遍),下面这些会报错,必须改:

情况原因
缺少触发条件 / 缺少输出动作流程没有入口或没有动作
两个以上触发条件直接连到「与」一次只有一个触发条件成立,永远不满足
触发条件直接连到「非」触发那一刻恒成立,取反后恒不成立
「与」「或」「非」没有输入连线算不出结果,永远不成立
流程里有环节点连成了闭环
必填参数为空如没选数据点、没填收件人

下面这些是警告,可以保存,但最好看一眼:

情况说明
「与」「或」只连了一个输入等于直通,没起到组合作用
同一个点位配了多个「数据变化」触发条件一次变化会扫多遍,输出会重复执行(发两封邮件)。值变大 + 值变小 这一对互斥,不算重复
同一台设备配了多个「设备离线」触发条件掉一次线会重复触发
参数完全相同的多个「定时启动」到点会同时扫多遍
某个触发条件往下走不到任何输出它触发时不会产生动作,等于白配
某个节点没有输出连线算出来的结果没人用
多个触发条件时用了 $trigger.*它取的是本次触发的那个条件的值;要固定某个点位请直接填点位名

9.5.7 用「测试运行」验证 ​

多触发流程建议先用「测试运行」看一遍。它会逐个触发条件各演练一遍, 每条前面标的是节点编号,后面是这个节点算出来是成立还是不成立、以及为什么:

===== 假设由触发条件「水位变化」触发 =====
本次由它触发
856 > 300 成立
或:有输入成立
输出:out.email
[演练] 将发送邮件(测试运行不真发)
===== 假设由触发条件「温度变化」触发 =====
本次由它触发
25 > 60 不成立
或:所有输入都不成立
上游条件不成立,不动作
[演练] 该触发条件本次不会产生任何动作

绿色是成立、红色是不成立,点位取的是当前实时值。邮件和短信只演练不真发,可以放心点。

哪个触发条件配了却"不会产生任何动作",这里一眼就能看出来。


LPPLC 工业物联网云平台 · 软硬件与云平台全栈自研