如果对象只有两个明确状态,例如运行 / 停止、开 / 关、自动 / 手动,优先考虑 State Color。它的优势是结构直观,后续维护人员可以直接理解状态来源和显示结果。
- 适合二值状态
- 适合按钮、灯、开关、启停件
- 优先于复杂脚本色
var running = ReadTagBoolean("Device.RUN", false);
running 状态色行为最怕选错类型。选错以后,后面所有字段都会越配越绕。
状态色行为最怕选错类型。选错以后,后面所有字段都会越配越绕。
如果对象只有两个明确状态,例如运行 / 停止、开 / 关、自动 / 手动,优先考虑 State Color。它的优势是结构直观,后续维护人员可以直接理解状态来源和显示结果。
var running = ReadTagBoolean("Device.RUN", false);
running Definition 中准备状态变量;Condition 返回 true 或 false;True State 和 False State 分别维护填充、边框和显隐。需要表达数据可信度时,再开启 Quality Border。
Blink Color 最适合报警灯、强提醒块、二值告警提示。它和普通二值状态色的区别,不在于状态来源,而在于它会在 true / false 或 on / off 之间做闪烁节奏表达。
var alarm = ReadTagBoolean("Device.ALARM", false);
alarm 当一个数值要映射成多个颜色区间时,用 Range Color 最合适。温度、压力、负载、电流、液位这类连续数值都很适合。核心不是写很多 if,而是先定 limits,再定每个区间的颜色。
var temp = ReadTagDouble("Device.TEMP", 0);
temp Range Color 的颜色和显隐配置应与区间数量对应。4 个 Limits 会形成 5 个区间。用户应先按工艺单位确定边界,再配置低、正常、偏高、报警等区间状态。
如果输入值不是连续变化,而是一组固定离散状态码,例如 0、1、2、4、8、16 这种状态位或枚举值,就更适合 Discrete Color。它不是看区间,而是看落在哪个离散状态。
Discrete Color 应先列清楚状态码含义,再配置对应颜色。常见做法是把 0、1、2、3 或位值 1、2、4、8 分别映射到停机、运行、手动、故障等状态。未覆盖的值应有默认显示策略。
如果一个对象同时可能有报警、手动、自动、待机等多个互斥状态,而且这些状态之间有优先级,就该用 Multi-State Color。第一个命中的条件优先,后面的条件不会再继续覆盖。
var alarm = ReadTagBoolean("Device.ALARM", false);
var manual = ReadTagBoolean("Device.MANUAL", false);
var running = ReadTagBoolean("Device.RUN", false); Multi-State Color 按条件顺序命中,前面的条件优先级更高。配置时应把报警、故障、禁用等高优先级状态放在前面,把运行、待机、普通状态放在后面,并明确 Else 状态。
当填充、边框、显隐需要一起被脚本控制,或者条件组合已经超出简单状态行为的表达能力时,再考虑 Script Color。它很强,但也意味着后续维护要看脚本,不如简单状态行为直观。
var state = ReadTagInteger("Device.STATE", 0);
var MyFillcolor = state === 1 ? "#22C55E" : "#EF4444";
var MyStrokecolor = "#0f172a";
var MyVisibility = true; Fill 和 Stroke 是颜色字符串表达式字段。由模板变量提供颜色时,应写成 `'<FILL_COLOR>'` 或 `"<FILL_COLOR>"`;Stroke 同理。Visibility、Enabled 这类布尔条件仍按 JavaScript 表达式填写。
Fill: '<FILL_COLOR>'
Stroke: '<STROKE_COLOR>'
Visibility: running === true 如果对象要直接读取布尔 Tag 或某个位,并据此切换颜色和显隐,最直接的方式是把这个布尔量或位送进 State Color(两态开 / 关)或 Discrete Color(开 / 关 / else 多态)。固定 Tag 可填写 `Device.RUN`,读取某个位用 `Device.STATUS[3]`;包含模板变量的 Tag 应写成 `'<PLC>.RUN'` 或 `'<PLC>.<RUN_TAG>'`。
读取状态字中的单个位时,可在完整 Tag 后追加 `[0]` 到 `[31]`,也就是 `TAG[bit]` 语法。其中 `[0]` 表示最低位。需要写入单个位时,不在 Tag 表达式中写 `[n]`,应使用 Write Tag Bit 并在 Bit Index 中填写位号。
位读取可以直接在 Tag 点名后追加 `[n]`,例如 `Device.STATUS[3]`;位写入不能把 `[n]` 放在写值目标中。Write Tag Bit 的目标应填写父级整数 Tag,例如 `Device.STATUS`,位号填写在 Bit Index 中。这样运行端才能读取当前整数值,计算目标位后的新整数值,再提交写入。
// 读取状态字第 3 位
ReadTagBoolean("Device.STATUS[3]", false)
// 写位时使用字段
Tag Expression: "Device.STATUS"
Bit Index: 3
Bit Action: Set
只要是明确二值状态,优先从 State Color 开始想,而不是先写脚本。
闪烁适合报警和强提醒,不适合作为普通状态色的常态表达。
连续数值优先用区间映射表达,避免在脚本中堆叠多层判断。
离散状态码映射时,比区间色更适合用 Discrete Color。
多个互斥状态要按优先级命中时,Multi-State Color 更可靠。
复杂规则可以交给 Script Color,但前提是确实需要这种复杂度。
想把布尔量或某个位显示成文字用 Tag Text,想显示成颜色用 State Color。