多条件颜色 Multi-State Color

“多条件颜色”是一个视觉状态行为(Visual States 分类),用于一个组件存在多个互斥工况、需要按优先级显示的场景。最多可配置 8 个条件,每个条件是一句返回真/假的表达式;运行时从第 1 条往下逐条判断,第一个成立的条件就是当前状态,对应这一行配置的填充色、边框色、显示状态会被套用到组件上。第 1 条优先级最高(编辑器提示 “Rule 1 has top priority.”)。当 8 个条件都不成立时,可选的 Else 兜底行接管。它和“State Color(两态)”的区别是:State Color 只有真/假两态,而本行为是多条件按优先级取第一个命中,更适合三种以上的工况。

颜色

颜色: 多条件颜色 Multi-State Color

按优先级排列最多 8 个条件,从上往下取第一个成立的条件作为当前状态,并据此切换填充色、边框色和显示隐藏;适合“报警优先、其次手动、再次自动、最后空闲”这类互斥的多工况显示。

功能说明

“多条件颜色”是一个视觉状态行为(Visual States 分类),用于一个组件存在多个互斥工况、需要按优先级显示的场景。最多可配置 8 个条件,每个条件是一句返回真/假的表达式;运行时从第 1 条往下逐条判断,第一个成立的条件就是当前状态,对应这一行配置的填充色、边框色、显示状态会被套用到组件上。第 1 条优先级最高(编辑器提示 “Rule 1 has top priority.”)。当 8 个条件都不成立时,可选的 Else 兜底行接管。它和“State Color(两态)”的区别是:State Color 只有真/假两态,而本行为是多条件按优先级取第一个命中,更适合三种以上的工况。

使用方法:编辑器里要填的字段

把行为从右侧目录拖到左侧组件节点完成绑定,双击打开编辑器后按下面填写。条件列从上到下就是优先级顺序,动作列按勾选的通道为每一行设置输出。

  • Definition(可选):准备区,读标签、定义中间变量;不需要时可留空。
  • Conditions(条件 1~8):每行一句返回真/假的表达式,行号即优先级,第 1 行最高,运行时取第一个为真的行。
  • Use Else(使用兜底):勾选后在条件区底部启用一行 Else,所有条件都不成立时用它。
  • Fill(填充,列头勾选开启):为每个状态行各设一个填充色。
  • Border(边框,列头勾选开启):为每个状态行各设一个边框色。
  • Visible(显示,列头勾选开启):为每个状态行各设显示或隐藏。
  • Quality Override(质量边框):勾选 Quality Border 后,可设通讯质量好/坏两种边框色,并可勾选“质量坏时隐藏组件”。
// Definition(准备)
var st = ReadTagInteger("PLC1.PUMP.STATE", 0);
var alarm = ReadTagBoolean("PLC1.PUMP.ALARM", false);

// 条件 1(最高优先级,报警)
alarm === true
// 条件 2(手动)
st === 2
// 条件 3(自动运行)
st === 1
// Else 兜底:空闲

适用场景

当一个组件需要表达三种以上互斥工况、而且这些工况有明确优先级时使用。

  • 泵/设备状态灯:报警优先显示红色,其次手动显示橙色,再次自动运行显示绿色,最后空闲显示灰色。
  • 多档运行状态:停机 / 低速 / 高速 / 故障,用一个图形按优先级切换颜色,而不必叠多个行为。

常见配置误区

几个与“按优先级取第一个命中”相关、容易出错的点:

  • 顺序决定结果:第一个成立的条件就生效,把更重要的工况(如报警)放在前面,否则会被前面成立的条件抢先。
  • 条件写表达式、不是写颜色:条件行只返回真/假,颜色在右侧动作列设置;空条件按不成立处理。
  • 都不成立又没开 Else:组件不会被本行为改色,保持原样;需要兜底就勾上 Use Else。
  • 通道要先在列头勾选:没勾 Fill / Border / Visible,那一列对所有行都不生效。
  • 质量是通讯质量:Quality Border 反映的是标签通讯好坏,不是工艺值;质量坏时不应继续按有效值显示。
Multi-State Color 多条件颜色编辑器
图示 1: Multi-State Color 编辑器

按优先级排列最多 8 个条件,从上往下取第一个成立的,套用该行的填充、边框和显隐。