标签读写方法:先明确类型,再决定写入方式 | HQ VISU Designer

Tag 方法可以分成三组:读值、读质量、写值。理解这三组后,大多数对象逻辑都能按职责连接起来。

脚本方法Tag
Tag

标签读写方法:先明确类型,再决定写入方式

Tag 方法可以分成三组:读值、读质量、写值。理解这三组后,大多数对象逻辑都能按职责连接起来。

ReadTagBoolean:读取布尔量

`ReadTagBoolean(name, fallback)` 用于读取开关量、启停反馈、允许状态、报警位和状态字中的单个位。第二个参数是回退值,通常填写 `false`。当 Tag 尚无值或数据不可用时,页面返回该回退值。

  • 适合开关量、启停反馈和允许状态
  • 位读取也使用该方法
  • 回退值只用于页面兜底显示,不代表真实采集值
var running = ReadTagBoolean("Device.RUN", false);
var ready = ReadTagBoolean("Device.STATUS[0]", false);
ReadTagInteger:读取整数与状态码

`ReadTagInteger(name, fallback)` 用于读取状态码、模式号、步骤号、计数值和整型设定值。第二个参数是回退值,通常填写 `0`。需要按状态码映射颜色或文本时,应优先使用整数读取。

  • 适合模式号、状态码、步骤号和计数
  • 适合 Discrete Color 和 Multi-State Color 的输入
  • 不要把状态码先读成字符串再自行转换
var mode = ReadTagInteger("Device.MODE", 0);
var count = ReadTagInteger("Device.COUNT", 0);
ReadTagDouble:读取模拟量

`ReadTagDouble(name, fallback)` 用于读取温度、压力、液位、流量、转速、电流、比例和连续设定值。第二个参数是回退值,通常填写 `0.0`。Move、Rotate、Scale、Range Color 等数值行为优先使用该方法。

  • 适合连续数值和工程量
  • 适合几何动画和区间颜色输入
  • 显示单位和格式化建议在文本表达中处理
var pressure = ReadTagDouble("Device.PRESSURE", 0.0);
var level = ReadTagDouble("Device.LEVEL", 0);
ReadTagString:读取文本

`ReadTagString(name, fallback)` 用于读取配方名、批次号、模式文案、设备名称和备注。第二个参数是回退值,通常填写空字符串。它适合直接进入文本显示或参与 Script Text 拼接。

  • 适合名称、模式文案、批次号和备注
  • 文本为空时应准备清晰回退显示
  • 不建议用字符串读取替代布尔、整数或浮点读取
var recipe = ReadTagString("Device.RECIPE", "");
var batchNo = ReadTagString("Device.BATCH_NO", "");
ReadTagJson:读取结构化数据

`ReadTagJson(name, fallback)` 用于读取结构化对象或数组,适合报表行、配方参数、页面表格、分页结果和聚合状态。第二个参数应提供与页面渲染匹配的默认结构,例如空数组或空对象。

  • JSON 数组:表格行、趋势摘要、分页结果
  • JSON 对象:页面配置、设备摘要、统计结果
  • 默认值应与页面使用方式一致
var rows = ReadTagJson("Device.ReportRows", []);
var config = ReadTagJson("Device.PageConfig", {});
ReadTagDateTime:读取时间值

`ReadTagDateTime(name, fallback)` 用于读取更新时间、确认时间、批次开始时间、事件时间和设备状态时间。第二个参数可填写 `null` 或默认时间值。显示时应按页面语言和项目习惯格式化。

  • 适合更新时间、确认时间和事件时间
  • 无时间值时可以返回 null
  • 格式化应放在文本表达或页面函数中
var updatedAt = ReadTagDateTime("Device.UpdatedAt", null);
var confirmedAt = ReadTagDateTime("Device.CONFIRMED_AT", null);
Tag 点名和位读取语法

Host Tag 使用完整点名格式 `device.tag`,点名中不包含空格。读取整数 Tag 的某一位时,可在完整点名后追加 `[0]` 到 `[31]`,例如 `Device.STATUS[0]`。通用语法可以记成 `TAG[bit]`,其中 `TAG` 是父级完整点名,`bit` 是 0 到 31 的位号,`[0]` 表示最低位。位读取可配合 `ReadTagBoolean`、State Color 或布尔表达式使用。

  • 完整点名:`Device.STATUS`
  • 语法模板:`TAG[bit]` / `Device.TAG[0]`
  • 读取最低位:`Device.STATUS[0]`
  • 读取第 31 位:`Device.STATUS[31]`
  • 模板写法:`'<PLC>.<STATUS_TAG>[3]'`
  • 位索引范围为 0 到 31
var ready = ReadTagBoolean("Device.STATUS[0]", false);
var fault = ReadTagBoolean("Device.STATUS[3]", false);
ReadTagQuality:读取质量状态

`ReadTagQuality(name, fallback)` 用于读取 Tag 当前质量文本。质量状态用于判断数据可信度,不代表业务状态,也不等同于报警状态。页面可根据质量状态显示灰态、边框、提示或隐藏对象。

  • 质量状态不是工艺值
  • 质量异常不等同于业务报警
  • fallback 可填写 pending 或 bad
  • 质量文本适合用于提示和诊断显示
var quality = ReadTagQuality("Device.PRESSURE", "pending");
var text = quality === "good" ? "在线" : "数据待确认";
ReadTagQualityGood:判断质量是否 good

`ReadTagQualityGood(name)` 用于直接判断质量是否为 good。它适合写在 Condition、Active、Script Color、Quality Border 或按钮 Enabled 中。质量不是 good 时,应避免把回退值继续作为正常实时值强化展示。

  • 返回 true / false
  • 适合控制显隐、禁用、颜色和边框
  • 质量不是 good 时,应按数据不可确认处理
var qualityGood = ReadTagQualityGood("Device.PRESSURE");
var displayText = qualityGood ? ReadTagDouble("Device.PRESSURE", 0).toFixed(1) : "--";
WriteTagBoolean:写入布尔值

`WriteTagBoolean(name, value)` 用于写入启停、允许、复位、确认等布尔命令。该方法适合简单脚本写值;关键设备动作仍建议使用标准 Write Tag 行为或 `qtedit.writeTag(payload)` 携带权限、确认和审计上下文。

  • 适合启停、允许、复位和确认
  • value 应为 true / false
  • 最终写入结果由运行端和宿主机确认
WriteTagBoolean("Device.START", true);
WriteTagBoolean("Device.RESET", true);
WriteTagInteger:写入整数值

`WriteTagInteger(name, value)` 用于写入模式号、步骤号、枚举值和整型设定值。写入值应与目标 Tag 类型和现场约定一致,不建议用字符串承载状态码。

  • 适合模式号、步骤号和枚举值
  • value 应为整数
  • 写入前应确认目标 Tag 支持该取值范围
WriteTagInteger("Device.MODE", 2);
WriteTagInteger("Device.STEP", 10);
WriteTagDouble:写入浮点值

`WriteTagDouble(name, value)` 用于写入设定值、比例、速度、温度、压力等连续数值。页面输入值应先完成范围、单位和格式处理,再提交写入。

  • 适合设定值和连续工程量
  • value 应为数字
  • 输入框写值前应处理单位、上下限和空值
WriteTagDouble("Device.SETPOINT", 12.5);
WriteTagDouble("Device.SPEED_SET", 80);
WriteTagString:写入文本值

`WriteTagString(name, value)` 用于写入配方名、批次号、备注和文本参数。写入前应确认文本长度、允许字符和目标系统处理方式,避免把显示文案误写为设备控制值。

  • 适合配方名、批次号和备注
  • value 应为字符串
  • 文本输入应先处理空值和长度
WriteTagString("Device.RECIPE", "RCP-001");
WriteTagString("Device.REMARK", "READY");
WriteTagJson:写入结构化数据

`WriteTagJson(name, value)` 用于写入结构化参数、组合输入结果、页面配置或报表条件。结构应保持稳定,字段名应与运行端或脚本约定一致。

  • 适合结构化参数和组合输入
  • value 可以是对象或数组
  • 字段结构应稳定,便于运行端处理
WriteTagJson("Device.PARAMS", {
  speed: 80,
  enabled: true
});
WriteTagDateTime:写入时间值

`WriteTagDateTime(name, value)` 用于写入确认时间、操作时间、批次时间和事件时间。value 可使用 `new Date()` 或运行端认可的时间值。时间写入应与项目时区和运行端记录规则保持一致。

  • 适合确认时间、操作时间和批次时间
  • value 可使用 Date 对象
  • 关键记录仍应由运行端审计链路确认
WriteTagDateTime("Device.CONFIRMED_AT", new Date());
WriteTagDateTime("Device.BATCH_START", new Date());
qtedit.writeTag(payload):复杂写入的推荐方式

当写入动作需要携带权限码、确认信息、审计动作或宿主上下文时,优先使用 qtedit.writeTag(payload)。它比简单的 WriteTag* 更适合正式项目,因为它能把写入背景一起带给宿主机。

  • 适合权限、确认、审计类写入
  • 适合正式项目关键操作
  • 字段越明确,宿主机越容易按规则接管
qtedit.writeTag({
  TagName: "Device.CMD",
  Value: 1,
  PermissionCode: "io:write",
  RequireConfirm: true,
  ConfirmText: "确认发送启动命令?"
});
qtedit.writeTag(payload) 常用字段

复杂写值应把运行端需要接管的上下文写清楚。页面侧负责提供 `TagName`、`Value`、`PermissionCode`、`RequireConfirm`、`ConfirmText`、`RequireReason`、`AuditAction` 等字段;运行端负责最终权限、确认、原因输入、审计和异步写入结果。关键写值应由用户点击或明确操作触发,不应在页面加载时自动下发。

  • TagName:目标完整 Tag 点名
  • Value:要写入的值
  • PermissionCode:运行端权限码
  • RequireConfirm / ConfirmText:确认提示
  • RequireReason:要求填写原因
  • AuditAction:审计动作名称
qtedit.writeTag({
  TagName: "Device.CMD_START",
  Value: true,
  PermissionCode: "io:write",
  RequireConfirm: true,
  ConfirmText: "确认启动设备?",
  RequireReason: true,
  AuditAction: "device-start"
});
文本绑定
文本绑定

文本类对象往往同时会配到读值方法和脚本文本逻辑。

写值动作
写值动作

如果动作是通过行为编辑器配置的,底层仍然会走统一写入链。