先确认字段需要 Tag 名称、变量名称、数值还是文本。等号前缀 = 是部分配置字段的表达式标记,不是通用脚本语法,也不会自动授予 Tag 访问权限。
Tag 由 Mingcedar 提供数据;运行时变量保存当前页面的状态;模板参数在实例配置阶段替换占位符。保存 Tag 名称的变量仍是字符串,读取方法才返回 Tag 的值。本文示例使用产线 PLC_LINE01、设备 PUMP01 和 TANK01;应替换为项目中已经配置的名称。
Tag 完整名称:PLC_LINE01.PUMP01.SPEED。
计算 Tag 名称:Line01TotalFlow,按宿主保存的名称填写。
运行时变量:selectedSpeedTag 保存地址字符串,speedValue 保存数值。
模板占位符:<PLC>、<PUMP_CODE>,在实例中填写后替换。
JavaScript JavaScript 复制代码
// Page Script:保存目标名称
var selectedSpeedTag = "PLC_LINE01.PUMP01.SPEED" ;
// 行为 Setup Script:按行为求值周期读取当前值
var speedValue = ReadTagDouble (selectedSpeedTag, 0 );
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。
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。
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 的名称参数。
Table 的 Rows 和 Headers 等数据字段可以使用数组、页面数组变量或返回数组的函数。= 可明确要求求值;普通标题与变量同名时,可用引号明确表示文字。表格的数组数据与 JSON Chart 的 Tag 名称是不同类型。
Headers:["设备编号", "运行状态"]。
Rows:[["PUMP01", "运行"], ["PUMP02", "停止"]]。
动态行数据:pumpRows 或 =buildPumpRows(),结果应为数组。
固定标题:"泵站运行记录"。
模板参数 PLC 填 PLC_LINE01,Page Script 定义设备编码。模板在设计阶段替换 <PLC>,运行时再读取页面变量,最后得到 Tag 名称。内置模板的表达式使用 Page Script 中的变量,不能依赖其他行为的 Setup Script 局部变量。以下示例按注释分别填写到对应位置,含 = 的行仅用于配置字段,不作为 JavaScript 语句粘贴。
JavaScript JavaScript 复制代码
// 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"
目标由变量决定时,仍需符合导出检查和 Mingcedar 的读写权限。导出工具无法确定动态写入目标时,应在 Page Script 使用 HQVISU_DECLARE_TAGS 声明与表达式对应的有限候选名称,并保证它们在宿主中存在且获准访问。声明不会绕过宿主权限。以下示例按注释分别填写到对应位置,含 = 的行仅用于配置字段,不作为 JavaScript 语句粘贴。
JavaScript JavaScript 复制代码
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
显式表达式求值失败、返回非字符串或仍包含未替换占位符时,不会将表达式原文作为另一个 Tag 目标。先检查变量作用域、返回类型、模板参数和名称大小写。
Input 的目标或绑定模式改变后,旧目标尚未提交的输入会被取消;请按新目标重新输入。
已经发送的写入请求不会因随后切换目标而撤回。
图表动态目标改变时,实时曲线清除旧目标样本,避免混合不同来源。
运行时变量属于当前页面;跨页面传递上下文使用页面参数。