跳至主要内容

模板制作与传参:从可复用组件到页面通信

制作可复用模板,配置占位符、实例值、Input、报警和跨页参数。

模板文档修订:2026-10-21

模板: 模板制作与传参:从可复用组件到页面通信

制作可复用模板,配置占位符、实例值、Input、报警和跨页参数。

参数类型与适用场景

按确定值的时机选择机制:实例设备地址用模板变量;运行页临时输入用 Input 或 Runtime Variable;打开页面或弹窗时的上下文用页面参数。

  • 模板实例变量:插入模板后填写,例如 <PLC>、<RUN_TAG>;适合同一设备画面复用到不同点位。
  • Input 模板值:由操作员在运行页输入,通过 template.getValue("实例名") 读取。
  • Runtime Variable:当前运行页面内共享的临时状态,适合同页组件联动。
  • 页面 / 弹窗参数:打开目标页时发送,由目标页 GetPageParameter* 读取。
  • PLC Tag:设备数据绑定;不同页面可以读取同一 Tag,但它不是页面传参。

1. 从零制作一个带参数的模板

绘制外观、文字并配置行为,将需共同复用的对象组合。把实例差异改为尖括号占位符,固定内容保留。占位符可用于文本、Tag 字段和脚本字符串;脚本中须放在字符串字面量内。

  • 普通文本:设备 <DEVICE_NO>。
  • Tag 路径:<PLC>.<RUN_TAG>。
  • 脚本字符串:ReadTagBoolean("<PLC>.<RUN_TAG>", false)。
  • 位引用:<STATUS_TAG>[3];位号放在占位符外。
  • 只把确实因实例而变化的内容做成变量,避免 Template Edit 出现大量无意义字段。
JavaScriptJavaScript
// 运行状态与报警状态都随实例变化
var running = ReadTagBoolean("<PLC>.<RUN_TAG>", false);
var alarming = GetAlarmTags([
  "<PLC>.<ALARM_TAG>"
]);

return running && !alarming;

2. 占位符命名和路径写法

变量名用一对尖括号包住。共享模板建议使用简短的 ASCII 大写名称,例如 <PLC>、<DEVICE_NO>、<RUN_TAG>。变量名也可使用中文,但不能包含点号、横杠或空格;Tag 路径应由变量与固定分隔符组成。

  • 推荐:<PLC>、<DB_01>、<设备编号>。
  • 正确路径:<PLC>.<RUN_TAG>;错误:<PLC.RUN_TAG>。
  • 正确位引用:<STATUS_TAG>[3];错误:<STATUS_TAG[3]>。
  • 不使用:<RUN-TAG>、<RUN TAG>。
  • 变量名大小写不同会被视为不同字段;同一含义统一写法。
TextText
// 实例填写 PLC=LINE01,RUN_TAG=PUMP01.RUN
ReadTagBoolean("<PLC>.<RUN_TAG>", false)
// 导出后对应 LINE01.PUMP01.RUN

3. 保存模板并检查 Captured variables

选中对象组,打开 Templates → Library → Save selection,填写名称、分组和排序。核对 Captured variables:缺失时修正源对象写法,大小写重复时统一名称;列表顺序决定 Template Edit 填写顺序。

  • Template name:写清设备或用途,例如 Pump faceplate。
  • Group:按工艺、设备或项目分类,方便后续搜索。
  • Sort order:数值越小,在模板库中越靠前。
  • Captured variables:逐项核对名称、数量和顺序。
  • 保存后从模板库重新插入一份,不要只在模板源文件中验证。

4. 插入实例并填写模板变量

插入模板后,选中实例根组,打开 Templates → Edit Instance。核对 Instance、Template、Group 和位置尺寸,再填 Template variables。修改仅影响当前实例;复制实例会同时复制这些值。

  • 不要只选中组内的子图形;Template Edit 需要模板实例根组。
  • 实例值填写替换结果,不要再次加尖括号,例如 PLC 填 LINE01。
  • 普通文本、行为 Tag 和脚本字符串中的同名占位符会使用同一个实例值。
  • 空值可以暂存,但用于 Tag 的变量必须在正式导出前补全。
  • 保存后重新打开 Template Edit,确认值、位置和尺寸都保持不变。
TextText
PLC       = LINE01
RUN_TAG   = PUMP01.RUN
ALARM_TAG = PUMP01.ALARM
// <PLC>.<RUN_TAG> -> LINE01.PUMP01.RUN

5. Input 取值与页面参数

运行时输入使用 Input,不使用模板占位符。Plain Input 用 template.getValue("输入模板实例名") 读取;Runtime Variable 用于同页共享。跨页传递设备编号、模式等上下文时使用页面参数,目标页用 GetPageParameter 读取,再显式转换数字或布尔值。

  • Plain Input:输入暂存在这个 Input 实例中,适合确认后由按钮脚本读取。
  • Runtime Variable:同页临时联动,不保证跨页面保留。
  • PLC Tag 模式:确认后按宿主权限和写入规则提交到设备 Tag。
  • 页面参数:只在打开目标页或弹窗时携带,字段名由发送页和目标页共同约定。
  • 需要完整的打开页与接收示例时,继续阅读“脚本作用域与参数传递”。
JavaScriptJavaScript
// 读取 Input 模板实例
var setpoint = template.getValue("Speed input");

// 目标页面读取调用方传入的参数
var deviceCode = GetPageParameter("deviceCode", "");
var editMode = GetPageParameter("editMode", "false") === "true";

6. 报警模板的显示列与筛选范围

报警模板既要决定显示哪些列,也要限定显示哪些报警。先勾选 Time、Message、Level、PLC、Function Group、Device Group、Signal Group、Tags、Status、Acknowledged 中实际需要的列,再按项目编码填写筛选范围。多个值可用逗号或换行分隔,字段应填编码而不是界面显示名称。

  • Tags:完整 device-code.tag-code,例如 <PLC>.<ALARM_TAG>。
  • PLC codes:只填 device-code,例如 <PLC>。
  • Function groups:device-code.group-code。
  • Device groups:device-code.group-code。
  • Signal groups:device-code.group-code。
  • 留空的筛选维度不额外限制范围;导出后用一条已知活动报警验证。

7. 在模板脚本中判断活动报警

报警判断方法返回 true / false,表示是否存在匹配范围的活动报警,可驱动图标、颜色或文字。参数接受数组或逗号、换行分隔文本;不查询历史或执行确认。

  • GetAlarmTags(values):按完整 Tag 范围判断。
  • GetAlarmPlcCodes(values):按 PLC / 设备编码判断。
  • GetAlarmFunctionGroupCodes(values):按功能组编码判断。
  • GetAlarmDeviceGroupCodes(values):按设备组编码判断。
  • GetAlarmSignalGroupCodes(values):按信号组编码判断。
JavaScriptJavaScript
var hasTagAlarm = GetAlarmTags([
  "<PLC>.<ALARM_TAG>"
]);

var hasDeviceAlarm = GetAlarmDeviceGroupCodes([
  "<PLC>.<DEVICE_GROUP>"
]);

return hasTagAlarm || hasDeviceAlarm;

8. 导出前验证与常见错误

至少用两个不同实例值验证文字、Tag、报警范围和交互互不串用,并检查 Input 保存位置、参数名和目标页默认值。未解析变量须补值或修正源模板,不能用固定文本掩盖。

  • 出现未解析的 <变量名>:检查实例是否漏填,以及变量是否位于支持替换的位置。
  • Captured variables 少一项:检查是否把点号、横杠、空格或位号写进变量名。
  • 脚本中没有替换:确认占位符位于字符串字面量内。
  • 跳页后值丢失:确认该值本应使用页面参数,而不是 Runtime Variable。
  • 报警范围不对:核对完整 Tag、PLC 编码和各类 group-code 的字段区别。
  • 模板更新后,重新插入新实例验证;旧实例是否需要替换按项目版本管理决定。
Save as template 界面中的模板名称、分组、排序和 Captured variables
图示 1: 保存模板并确认变量

保存模板前,核对名称、分组、排序和 Captured variables 的顺序。

Edit template instance 界面中的位置尺寸和模板变量
图示 2: 填写当前实例参数

Template Edit 只修改当前实例;先确认来源和位置尺寸,再逐项填写模板参数。

Alarm 模板编辑界面中的显示列和筛选范围
图示 3: 配置报警模板

选择需要的报警列,并按 Tag、PLC、功能组、设备组或信号组限定显示范围。

再次点击图片或按 Esc 关闭