跳至主要内容

变量、Tag 与模板参数:字段填写规则

先确认字段需要 Tag 名称、变量名称、数值还是文本。等号前缀 = 是部分配置字段的表达式标记,不是通用脚本语法,也不会自动授予 Tag 访问权限。

数据绑定文档修订:2026-10-21

数据绑定: 变量、Tag 与模板参数:字段填写规则

先确认字段需要 Tag 名称、变量名称、数值还是文本。等号前缀 = 是部分配置字段的表达式标记,不是通用脚本语法,也不会自动授予 Tag 访问权限。

1. 区分 Tag 名称、运行时变量和模板参数

Tag 由 Mingcedar 提供数据;运行时变量保存当前页面的状态;模板参数在实例配置阶段替换占位符。保存 Tag 名称的变量仍是字符串,读取方法才返回 Tag 的值。本文示例使用产线 PLC_LINE01、设备 PUMP01 和 TANK01;应替换为项目中已经配置的名称。

  • Tag 完整名称:PLC_LINE01.PUMP01.SPEED。
  • 计算 Tag 名称:Line01TotalFlow,按宿主保存的名称填写。
  • 运行时变量:selectedSpeedTag 保存地址字符串,speedValue 保存数值。
  • 模板占位符:<PLC>、<PUMP_CODE>,在实例中填写后替换。
JavaScriptJavaScript
// Page Script:保存目标名称
var selectedSpeedTag = "PLC_LINE01.PUMP01.SPEED";

// 行为 Setup Script:按行为求值周期读取当前值
var speedValue = ReadTagDouble(selectedSpeedTag, 0);

2. Tag Text 与写入行为的目标字段

Tag Text 的 Target tag,以及 Write Tag、Write Tag Bit 的 Target Tag,填写读取或写入的目标名称。完整固定名称可直接填写;地址字符串变量可填变量名。访问对象属性或需要计算地址时,使用 = 明确声明表达式。控件已经负责读写,目标字段无需再调用 ReadTag 或 WriteTag。

  • 固定目标:PLC_LINE01.PUMP01.SPEED。
  • 地址变量:selectedSpeedTag;该变量必须已定义并返回字符串。
  • 对象属性:=bindingConfig.speedTag,避免与固定 Tag 路径混淆。
  • Write Tag Bit 填父 Tag 名称,并在 Bit Index 中单独填写 0 到 31。

3. Input 和图表中的 = 表达式

Input 的 PLC Tag 字段,以及图表各系列的 Tag、Gauge 的 Tag 和 JSON Tag,直接填写固定名称时按名称使用。需要由页面变量决定名称时,填写 =selectedSpeedTag。此处表达式应返回 Tag 名称字符串,不能返回 Tag 当前数值或 JSON 对象。

  • Input 固定目标:PLC_LINE01.PUMP01.SPEED_SETPOINT。
  • Input 动态目标:=selectedSetpointTag。
  • 图表动态目标:=selectedSpeedTag。
  • JSON Tag:PLC_LINE01.REPORT01.CHART_DATA;动态名称可填 =selectedJsonTag。

4. 变量名字段与数值字段

Input 的 Runtime Variable 模式填写待写入的变量名,例如 speedSetpointDraft;动态变量名可填写 =selectedVariableName,表达式必须返回有效变量名字符串。Set Variable on Click 的 Variable 字段填写赋值目标名称,写入内容放在 Value 中。

  • 固定变量名不加引号:speedSetpointDraft。
  • Input 动态变量名:页面先定义 var selectedVariableName = "speedSetpointDraft";,字段填 =selectedVariableName。
  • Value 或 Condition 是表达式字段,直接填写 speedValue、speedValue > 1200 等表达式。
  • 在 JavaScript 中使用 ReadTagDouble(selectedSpeedTag, 0);不要把 "=selectedSpeedTag" 作为 API 的名称参数。

5. 固定文本与表格数据

Table 的 Rows 和 Headers 等数据字段可以使用数组、页面数组变量或返回数组的函数。= 可明确要求求值;普通标题与变量同名时,可用引号明确表示文字。表格的数组数据与 JSON Chart 的 Tag 名称是不同类型。

  • Headers:["设备编号", "运行状态"]。
  • Rows:[["PUMP01", "运行"], ["PUMP02", "停止"]]。
  • 动态行数据:pumpRows 或 =buildPumpRows(),结果应为数组。
  • 固定标题:"泵站运行记录"。

6. 模板参数与页面变量同时使用

模板参数 PLC 填 PLC_LINE01,Page Script 定义设备编码。模板在设计阶段替换 <PLC>,运行时再读取页面变量,最后得到 Tag 名称。内置模板的表达式使用 Page Script 中的变量,不能依赖其他行为的 Setup Script 局部变量。以下示例按注释分别填写到对应位置,含 = 的行仅用于配置字段,不作为 JavaScript 语句粘贴。

JavaScriptJavaScript
// Page Script
var selectedPumpCode = "PUMP01";

// Input 或图表的 Tag 字段
="<PLC>." + selectedPumpCode + ".SPEED"

// Script Text 的 Setup Script
var speedTagName = "<PLC>." + selectedPumpCode + ".SPEED";
var speedValue = ReadTagDouble(speedTagName, 0);

// Script Text 的 Display Text
speedValue.toFixed(0) + " rpm"

7. 动态目标与页面访问范围

目标由变量决定时,仍需符合导出检查和 Mingcedar 的读写权限。导出工具无法确定动态写入目标时,应在 Page Script 使用 HQVISU_DECLARE_TAGS 声明与表达式对应的有限候选名称,并保证它们在宿主中存在且获准访问。声明不会绕过宿主权限。以下示例按注释分别填写到对应位置,含 = 的行仅用于配置字段,不作为 JavaScript 语句粘贴。

JavaScriptJavaScript
var selectedSetpointTag = "PLC_LINE01.PUMP01.SPEED_SETPOINT";
HQVISU_DECLARE_TAGS({
  expression: "selectedSetpointTag",
  read: ["PLC_LINE01.PUMP01.SPEED_SETPOINT", "PLC_LINE01.PUMP02.SPEED_SETPOINT"],
  write: ["PLC_LINE01.PUMP01.SPEED_SETPOINT", "PLC_LINE01.PUMP02.SPEED_SETPOINT"]
});

// Input 的 PLC Tag 字段
=selectedSetpointTag

8. 求值失败与目标切换

显式表达式求值失败、返回非字符串或仍包含未替换占位符时,不会将表达式原文作为另一个 Tag 目标。先检查变量作用域、返回类型、模板参数和名称大小写。

  • Input 的目标或绑定模式改变后,旧目标尚未提交的输入会被取消;请按新目标重新输入。
  • 已经发送的写入请求不会因随后切换目标而撤回。
  • 图表动态目标改变时,实时曲线清除旧目标样本,避免混合不同来源。
  • 运行时变量属于当前页面;跨页面传递上下文使用页面参数。

再次点击图片或按 Esc 关闭