Discrete Color 离散颜色

Discrete Color(离散颜色)是 Visual States(视觉状态)里的一种颜色行为。它把脚本算出的一个数值,按设定的若干阈值落到 8 个固定状态中的某一个,再用这个状态对应的填充色、边框色和显示/隐藏来渲染组件。和 Range Color(区间颜色)不同:Range 适合温度、压力这种连续模拟量分段;Discrete 适合取值本来就有限、一个数对应一种状态的场景,比如设备状态码 0/1/2/4、报警等级、位组合。

颜色

颜色: Discrete Color 离散颜色

把一个数值结果映射到 8 个固定离散状态,每个状态对应独立的填充色、边框色和显示/隐藏;适合状态码、位组合等取值有限的场景。

功能说明

Discrete Color(离散颜色)是 Visual States(视觉状态)里的一种颜色行为。它把脚本算出的一个数值,按设定的若干阈值落到 8 个固定状态中的某一个,再用这个状态对应的填充色、边框色和显示/隐藏来渲染组件。和 Range Color(区间颜色)不同:Range 适合温度、压力这种连续模拟量分段;Discrete 适合取值本来就有限、一个数对应一种状态的场景,比如设备状态码 0/1/2/4、报警等级、位组合。

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

在组件上添加 Visual States 行为,选 Discrete Color,然后填写下面这些字段。规则(Rule)必须返回一个数值,最终落到哪个状态由 Condition Limits 的阈值决定。

  • Definition(准备区):读标签、定义变量、做中间计算,例如把状态码读进来。
  • Rule(规则):返回一个数值结果,系统用它去比对阈值。注意必须是数值,不是 true/false。
  • Condition Limits(条件阈值):一组递增的分界值,把数值切成 8 段(默认 0,1,2,4,8,16,32 共 7 个阈值,对应 8 个状态)。
  • Fill(填充):8 个状态各自的填充颜色;可整体开关。
  • Border(边框):8 个状态各自的边框颜色;可整体开关。
  • Visibility(可见性):8 个状态各自显示或隐藏;可整体开关。
  • Quality Border(质量边框):开启后,通信质量好用 GOOD 色、质量差用 BAD 色显示边框;也可设为质量差时直接隐藏。
// Definition
var stateValue = ReadTagDouble("Device.TAGNAME", 0);

// Rule(必须返回数值)
stateValue;

适用场景

当一个数值的取值是有限、离散的、且每个取值要对应一种固定外观时使用。

  • 设备状态码:0=停机(灰)、1=运行(绿)、2=故障(红)、4=维护(黄),每个码一种颜色。
  • 报警等级或位组合:把整型状态映射成几个固定档位,不同档位用不同填充/边框/显隐。

常见误区

常见边界:

  • Rule 必须返回数值。返回 true/false 这类布尔结果时映射不会按预期工作,两态请改用 State Color。
  • 最多 8 个状态。状态数超过 8 个无法用它表达。
  • 不要和 Range Color 混淆:连续模拟量分段用 Range Color;取值有限、一个数对应一种状态才用 Discrete Color。
  • Condition Limits 是离散数值落到哪个状态的分界,要按递增填写。
  • Quality Border 反映的是通信质量,不是过程值本身;质量差时不应继续当作有效值渲染。
Discrete Color 离散颜色编辑器
图示 1: Discrete Color 编辑器

把一个数值按阈值落到最多 8 个固定状态,每个状态配置独立的填充、边框和显隐。