跳至主要内容

先做选型:该用哪一种状态色行为 | Mingcedar Studio

根据数据类型和状态数量选择颜色行为,再配置对应字段。布尔状态、数值区间和离散状态码分别使用适合的行为。

状态色与文本选型
选型

先做选型:该用哪一种状态色行为

根据数据类型和状态数量选择颜色行为,再配置对应字段。布尔状态、数值区间和离散状态码分别使用适合的行为。

State Color:最适合真 / 假两态

如果对象只有两个明确状态,例如运行 / 停止、开 / 关、自动 / 手动,优先考虑 State Color。它的优势是结构直观,后续维护人员可以直接理解状态来源和显示结果。

  • 适合二值状态
  • 适合按钮、灯、开关、启停件
  • 优先于复杂脚本色
var running = ReadTagBoolean("PLC_LINE01.PUMP01.RUN", false);
running
State Color 字段填写

在 Setup Script 中准备状态变量,Condition 返回 true 或 false。在 Action → Apply result 中选择需要应用的 TRUE / FALSE 状态,并为启用的 Fill color、Border color、Visibility 通道配置结果。需要质量边框时,在 Quality Override 中启用 Follow data quality (border / hide)。

  • Setup Script:读取 running、alarm、quality 等变量
  • Condition:返回布尔值
  • TRUE state / FALSE state:分别设置显示结果
  • Quality Override:表达数据质量,不替代业务状态
Blink Color:不是普通状态色,而是带闪烁节奏的二值提示

Blink Color 最适合报警灯、强提醒块、二值告警提示。它和普通二值状态色的区别,不在于状态来源,而在于它会在 true / false 或 on / off 之间做闪烁节奏表达。

  • 适合报警和提醒
  • 不建议大面积滥用
  • 闪烁只该服务重点状态
var alarm = ReadTagBoolean("PLC_LINE01.PUMP01.ALARM", false);
alarm
Range Color:模拟量区间映射

当一个数值要映射成多个颜色区间时,用 Range Color 最合适。温度、压力、负载、电流、液位这类连续数值都很适合。核心不是写很多 if,而是先定 limits,再定每个区间的颜色。

  • 适合模拟量和区间显示
  • 优先让规则落在 limits 上
  • 将区间边界与显示规则集中配置
var temp = ReadTagDouble("PLC_LINE01.PUMP01.TEMP", 0);
temp
Range Color 的区间数量

Range Color 的颜色和显隐配置应与区间数量对应。4 个 Limits 会形成 5 个区间。用户应先按工艺单位确定边界,再配置低、正常、偏高、报警等区间状态。

  • 先确认单位:例如 °C、bar、%、rpm
  • 再确定 Limits:例如 20, 40, 60, 80
  • 最后配置每个区间颜色和显隐
  • 固定状态码不使用 Range Color
Discrete Color:固定离散状态映射

Discrete Color 用七个递增阈值划分八个区间。特定枚举值匹配或未知状态分支应使用 Multi-State Color。

  • 适合状态码和枚举值
  • 适合离散状态而不是连续区间
  • 比 Range Color 更适合固定状态列表
Discrete Color 的状态表

State actions 的 Value < 使用阈值。默认 0、1、2、4、8、16、32 中,2 和 3 同属 [2, 4),32 及以上进入 Final (+∞)。未定义状态码没有独立默认分支。

  • State value 返回数值
  • 按“小于”阈值依次匹配区间
  • 最终状态包含最后阈值及以上的数值
  • 需要严格枚举判断时使用 Multi-State Color
Multi-State Color:多个条件按优先级命中

如果一个对象同时可能有报警、手动、自动、待机等多个互斥状态,而且这些状态之间有优先级,就该用 Multi-State Color。第一个命中的条件优先,后面的条件不会再继续覆盖。

  • 适合多条件互斥状态
  • 第一命中优先
  • 适合 alarm > manual > auto > idle 这种顺序
var alarm = ReadTagBoolean("PLC_LINE01.PUMP01.ALARM", false);
var manual = ReadTagBoolean("PLC_LINE01.PUMP01.MANUAL", false);
var running = ReadTagBoolean("PLC_LINE01.PUMP01.RUN", false);
Multi-State Color 的优先级

Multi-State Color 按条件顺序命中,前面的条件优先级更高。配置时应把报警、故障、禁用等高优先级状态放在前面,把运行、待机、普通状态放在后面,并明确 Else 状态。

  • Condition1 优先级最高
  • 报警和故障通常放在前面
  • 运行和待机通常放在后面
  • Use Else 用于未命中时的默认状态
Script Color:通过表达式配置显示

当填充、边框、显隐需要一起被脚本控制,或者条件组合已经超出简单状态行为的表达能力时,再考虑 Script Color。脚本需要明确的返回类型和可维护的条件结构。

  • 适合复杂组合规则
  • 适合 fill / border / visible 联动
  • 简单状态优先使用标准行为
var state = ReadTagInteger("PLC_LINE01.PUMP01.STATE", 0);
var fillColor = state === 1 ? "#22C55E" : "#EF4444";
var borderColor = "#0f172a";
var isVisible = true;
Script Color:使用模板参数提供颜色字符串

在 Action 中启用 Fill color 或 Border color 后,填写返回颜色字符串的表达式;旧字段名分别为 Fill 和 Stroke。模板参数写成 `'<FILL_COLOR>'` 或 `"<FILL_COLOR>"`,边框颜色同理。Visibility 和 Condition 填写布尔表达式。

Fill: '<FILL_COLOR>'
Stroke: '<STROKE_COLOR>'
Visibility: running === true
显示布尔量或位状态:用 State Color 或 Discrete Color

State Color 的 Condition 返回布尔值,例如 ReadTagBoolean("PLC_LINE01.PUMP01.RUN", false)。读取状态字单个位可用 ReadTagBoolean("PLC_LINE01.PUMP01.STATUS[3]", false)。模板名称作为读取方法的字符串参数,例如 ReadTagBoolean("<PLC>.<RUN_TAG>", false)。完整 Tag 名称字符串本身不是状态值。

  • 两态布尔量优先使用 State Color
  • Discrete Color 的 State value 需要数值,可显式将布尔值转换为 0 / 1
  • 模板占位符先替换,再由读取方法获取数据
读取某个位的语法:TAG[bit]

读取状态字中的单个位时,可在完整 Tag 后追加 `[0]` 到 `[31]`,也就是 `TAG[bit]` 语法;位号还必须落在父 Tag 实际类型位宽内。其中 `[0]` 表示最低位。需要写入单个位时,不在 Tag 表达式中写 `[n]`,应使用 Write Tag Bit 并在 Bit Index 中填写位号。

  • 读取位语法:`TAG[bit]`
  • 读取位:`PLC_LINE01.PUMP01.STATUS[0]`
  • 模板读取位:`'<PLC>.<STATUS_TAG>[3]'`
  • 位号范围:0 到 31,且小于父 Tag 实际类型位宽
  • 写位使用 Write Tag Bit
位读取和位写入的区别

位读取可以直接在 Tag 点名后追加 `[n]`,例如 `PLC_LINE01.PUMP01.STATUS[3]`;位写入不能把 `[n]` 放在写值目标中。Write Tag Bit 的目标应填写父级整数 Tag,例如 `PLC_LINE01.PUMP01.STATUS`,位号填写在 Bit Index 中。这样运行端才能读取当前整数值,计算目标位后的新整数值,再提交写入。

  • 读取位:`ReadTagBoolean("PLC_LINE01.PUMP01.STATUS[3]", false)`
  • 写位目标:`PLC_LINE01.PUMP01.STATUS`
  • 写位位号:Bit Index = 3
  • 写位动作:Set、Reset、Toggle
// 读取状态字第 3 位
ReadTagBoolean("PLC_LINE01.PUMP01.STATUS[3]", false)

// 写位时使用字段
Target Tag: PLC_LINE01.PUMP01.STATUS
Bit Index: 3
Bit Action: Set
State Color
State Color

只要是明确二值状态,优先从 State Color 开始想,而不是先写脚本。

Blink Color
Blink Color

闪烁适合报警和强提醒,不适合作为普通状态色的常态表达。

Range Color
Range Color

连续数值优先用区间映射表达,避免在脚本中堆叠多层判断。

Discrete Color
Discrete Color

离散状态码映射时,比区间色更适合用 Discrete Color。

Multi-State Color
Multi-State Color

多个互斥状态要按优先级命中时,Multi-State Color 更可靠。

Script Color
Script Color

复杂规则可以交给 Script Color,但前提是确实需要这种复杂度。

用 Tag Text 显示位状态
位 / 布尔量的文本显示

想把布尔量或某个位显示成文字用 Tag Text,想显示成颜色用 State Color。

再次点击图片或按 Esc 关闭