变量变化的数值颜色渐变设置
在电气自动化系统的HMI(人机界面)或SCADA监控画面中,让数值随大小呈现颜色渐变是核心需求。它能帮助操作员在0.3秒内识别异常,远比纯数字更直观。本文覆盖主流工控平台的实现方法,从基础设置到高级数学映射,全部可直接执行。
第一阶段:理解颜色渐变的数学本质
颜色渐变本质是将数值线性映射到RGB色域。任何平台的核心逻辑都遵循以下公式:
$$R = R_{min} + (R_{max} - R_{min}) \times \frac{V - V_{min}}{V_{max} - V_{min}}$$
$$G = G_{min} + (G_{max} - G_{min}) \times \frac{V - V_{min}}{V_{max} - V_{min}}$$
$$B = B_{min} + (B_{max} - B_{min}) \times \frac{V - V_{min}}{V_{max} - V_{min}}$$
其中 $V$ 为实时变量值,$V_{min}$/$V_{max}$ 为量程上下限,$RGB_{min}$/$RGB_{max}$ 为对应极值颜色。
典型应用场景的色标配对
| 场景类型 | $V_{min}$颜色 (RGB) | $V_{max}$颜色 (RGB) | 视觉暗示 |
|---|---|---|---|
| 温度监控 | 0, 112, 192 (蓝) | 192, 0, 0 (红) | 冷→热 |
| 压力/液位 | 0, 176, 80 (绿) | 255, 192, 0 (琥珀) | 正常→警戒 |
| 转速/频率 | 128, 128, 128 (灰) | 255, 255, 0 (黄) | 停机→运行 |
| 能耗/功率 | 0, 128, 0 (深绿) | 255, 0, 0 (纯红) | 高效→过载 |
第二阶段:西门子TIA Portal实现(S7-1200/1500 + WinCC)
2.1 基础方法:动画功能直接绑定
打开 TIA Portal项目,定位 到HMI设备下的"画面"文件夹。
双击 需要配置的对象(IO域、棒图或矩形背景),切换 到"动画"选项卡。
点击 "添加新动画" → 选择 "变量状态"或"外观"。
配置 关键参数:
- 变量:绑定PLC中的
REAL或INT类型变量(如"DB1".Temperature) - 范围类型:选择 "范围"而非"离散值",以实现平滑渐变
- 最小值/最大值:填入工艺量程(如0.0 ~ 100.0)
激活 "颜色"列的单元格,设置 两端颜色。勾选 "使用颜色梯度"复选框,系统自动计算中间色的RGB插值。
编译 项目(Ctrl + K),下载 到HMI设备验证。
2.2 高级方法:VB脚本精确控制(WinCC Professional)
当需要非线性渐变(如对数曲线、分段函数)时,脚本更灵活。
右键 HMI画面 → 选择 "属性" → 找到 "画面打开"事件。
点击 <添加函数> → 选择 "VB函数" → 命名 为ColorGradient_Update。
输入 以下代码框架:
' 定义量程和颜色极值
Dim varValue, varMin, varMax
Dim rMin, gMin, bMin, rMax, gMax, bMax
Dim ratio, rOut, gOut, bOut
varValue = HMIRuntime.Tags("Temperature").Read
varMin = 0.0
varMax = 100.0
' 蓝色(0,112,192)到红色(192,0,0)
rMin = 0 : gMin = 112 : bMin = 192
rMax = 192 : gMax = 0 : bMax = 0
' 计算归一化比例(0~1)
If varValue < varMin Then varValue = varMin
If varValue > varMax Then varValue = varMax
ratio = (varValue - varMin) / (varMax - varMin)
' 线性插值
rOut = CInt(rMin + (rMax - rMin) * ratio)
gOut = CInt(gMin + (gMax - gMin) * ratio)
bOut = CInt(bMin + (bMax - bMin) * ratio)
' 组合RGB并应用
Dim colorHex
colorHex = RGB(rOut, gOut, bOut)
HMIRuntime.Tags("Color_Background").Write colorHex
创建 周期触发的全局脚本:打开 "计划任务" → 新建 任务 → 设置 周期为500ms → 绑定 上述函数。
在画面中添加 矩形对象,绑定 其"背景颜色"动态属性到Color_Background变量。
第三阶段:罗克韦尔FactoryTalk View实现(Allen-Bradley PLC)
3.1 基于表达式编辑器的配置
打开 FactoryTalk View Studio,定位 到目标显示画面。
右键 数值显示对象 → 选择 "Animation" → 选择 "Color"。
在 "Expression"框中输入 条件表达式,语法示例:
If {[PLC]Temperature < 25} Then 0,0,255
ElseIf {[PLC]Temperature < 50} Then 0,128,255
ElseIf {[PLC]Temperature < 75} Then 255,255,0
Else 255,0,0
注意:上述为分段离散变色。如需真渐变,切换 到"Advanced"模式:
启用 "Use gradient"选项,设置 "Minimum color"为0,0,255,"Maximum color"为255,0,0。
定义 "Data minimum"和"Data maximum"为标签的 engineering range(如-40 ~ 150℃)。
3.2 宏指令实现自定义渐变算法
创建 新宏:点击 "Macros" → 新建 → 命名 为GradColorCalc。
输入 宏指令序列,使用Parameter传递变量值:
Param1 {[PLC]Analog_Input}
Param2 0 'Min scale
Param3 100 'Max scale
' 归一化计算
Param4 (Param1 - Param2) / (Param3 - Param2)
If Param4 < 0 Then Param4 = 0
If Param4 > 1 Then Param4 = 1
' 绿到红渐变: (0,255,0) to (255,0,0)
Param5 255 * Param4 'R component
Param6 255 * (1-Param4) 'G component
Param7 0 'B component
' 写回内部标签供显示对象引用
{[System]Grad_R} = Param5
{[System]Grad_G} = Param6
{[System]Grad_B} = Param7
在 显示对象的"Color"动画中,引用 宏计算结果:RGB({[System]Grad_R},{[System]Grad_G},{[System]Grad_B})。
配置 宏的触发:打开 "Display Settings" → 在 "While Display Active"中添加 宏调用,设置 扫描周期为250ms。
第四阶段:三菱GOT2000实现(GT Designer3)
4.1 部件的数值颜色功能
启动 GT Designer3,放置 "数值显示"部件。
双击 部件 → 展开 "数值颜色"设置项。
选择 "根据报警状态更改"或"根据数值更改"。
配置 渐变模式:
- 选择 "渐变"单选按钮
- 设置 "基准色1"为起始颜色(低值),"基准色2"为终止颜色(高值)
- 输入 对应的"基准值1"和"基准值2"
启用 "闪烁"选项(可选):当值超出安全范围时,颜色在渐变色与白色间交替,频率设为1Hz。
4.2 脚本功能实现复杂逻辑(GOT2000高级功能)
打开 "公共设置" → "脚本" → 新建 脚本。
设置 脚本类型为"画面脚本"或"全局脚本"。
编写 梯形图脚本或ST脚本,ST示例如下:
IF SM400 THEN // 常ON
// D100为输入值, D0-D2为输出RGB
REAL_VAL := INT_TO_REAL(D100);
RATIO := (REAL_VAL - 0.0) / (100.0 - 0.0);
IF RATIO < 0.0 THEN RATIO := 0.0; END_IF;
IF RATIO > 1.0 THEN RATIO := 1.0; END_IF;
// 蓝(0,0,255)到红(255,0,0)
D0 := REAL_TO_INT(255.0 * RATIO); // R
D1 := 0; // G
D2 := REAL_TO_INT(255.0 * (1.0-RATIO));// B
END_IF;
在 部件的"数值颜色"设置中,选择 "指定字"模式,绑定 D0-D2到RGB分量。
第五阶段:国产组态软件实现(组态王/力控/MCGS)
5.1 组态王KingView方法
双击 文本对象 → 选择 "属性" → 进入 "颜色动画"页。
勾选 "垂直渐变"或"水平渐变"。
绑定 表达式:直接输入模拟量标签名如\\本站点\温度。
设置 "最小值对应颜色"和"最大值对应颜色",选择 "线性"或"平方"插值方式。
高级技巧:打开 "动画连接" → 选择 "填充" → 绑定 同一变量,可实现棒图高度与颜色同步渐变。
5.2 MCGS昆仑通态方法
放置 "标签"构件,进入 "属性设置"。
找到 "字体颜色"行,点击 右侧按钮进入 动画连接。
选择 "根据变量值变化" → 勾选 "颜色渐变"。
设置 颜色条:点击 "编辑" → 在 色条两端选择 颜色 → 添加 中间控制点(最多7个)实现多段渐变。
输入 对应数值范围,MCGS自动完成HSV或RGB空间的插值计算。
第六阶段:特殊场景与优化技巧
6.1 非线性渐变:对数与指数映射
某些物理量(如pH值、声压级)需要非线性感知。使用 以下变换后再映射到RGB:
对数映射(适合大动态范围):
$$ratio_{log} = \frac{\ln(V/V_{min})}{\ln(V_{max}/V_{min})}$$
指数映射(适合敏感区间需放大):
$$ratio_{exp} = \frac{e^{k \cdot (V-V_{min})/(V_{max}-V_{min})} - 1}{e^k - 1}$$
其中 $k$ 为曲率系数,典型值3~5。
6.2 色盲友好配色方案
约8%男性存在色觉异常。避免 红绿直接渐变,改用 以下安全配色:
| 方案 | 低值色 | 高值色 | 明度差异 |
|---|---|---|---|
| 蓝-黄 | #2166ac |
#fee090 |
60% |
| 紫-橙 | #762a83 |
#f7f7f7→#e08214 |
55% |
| 灰-红 | #404040 |
#ca0020 |
50% |
6.3 性能优化 checklist
- 限制 刷新周期:视觉暂留约100ms,脚本周期设为200~500ms足够
- 避免 浮点运算在PLC中计算颜色:HMI本地脚本或预计算查表更高效
- 使用 整数RGB(0-255)而非浮点:减少50%以上通信负载
- 启用 变化触发而非周期触发:变量未变时不刷新画面
第七阶段:调试与验证流程
准备 测试工具:使用 PLC仿真或强制表,生成 0-100%的斜坡信号。
验证 边界值:
- 输入 等于下限值,确认 颜色严格匹配最小色
- 输入 等于上限值,确认 颜色严格匹配最大色
- 输入 超量程10%,确认 颜色锁定在极值色(无异常闪烁)
检测 渐变平滑度:肉眼观察 无肉眼可见的色阶跳跃,若存在,增加 颜色深度(16位色)或检查 整数截断问题。
测量 响应延迟:对比 PLC变量变化时间与画面颜色变化时间,确保 延迟<500ms。延迟过大时,检查 通信周期和脚本负载。

暂无评论,快来抢沙发吧!