所属产品: Mingcedar Studio DESIGNER
标签读写方法:先明确类型,再决定写入方式 | Mingcedar Studio
Tag 方法可以分成三组:读值、读质量、写值。理解这三组后,大多数对象逻辑都能按职责连接起来。
<section id="tag-methods" class="docs-block docs-block-intro docs-block-current"> <span class="section-kicker">Tag</span> <h2>标签读写方法:先明确类型,再决定写入方式</h2> <p>Tag 方法可以分成三组:读值、读质量、写值。理解这三组后,大多数对象逻辑都能按职责连接起来。</p> <div class="docs-detail-list"> <article id="tag-methods-item-1" class="docs-detail-row"> <strong>ReadTagBoolean:读取布尔量</strong> <p>ReadTagBoolean(name, fallback) 读取开关量、反馈、允许状态或状态位。数据缺失或不可用时返回 fallback,通常设为 false。</p> <ul> <li>适合开关量、启停反馈和允许状态</li><li>位读取也使用该方法</li><li>回退值只用于页面默认显示,不代表真实采集值</li> </ul> <pre class="docs-code-block"><code>var running = ReadTagBoolean("PLC_LINE01.PUMP01.RUN", false);
var ready = ReadTagBoolean("PLC_LINE01.PUMP01.STATUS[0]", false);</code></pre> </article><article id="tag-methods-item-2" class="docs-detail-row"> <strong>ReadTagInteger:读取整数与状态码</strong> <p>ReadTagInteger(name, fallback) 读取状态码、模式、步骤、计数或整型设定值,可用于状态文本和颜色映射。fallback 通常设为 0。</p> <ul> <li>适合模式号、状态码、步骤号和计数</li><li>适合 Discrete Color 和 Multi-State Color 的输入</li><li>不要把状态码先读成字符串再自行转换</li> </ul> <pre class="docs-code-block"><code>var mode = ReadTagInteger("PLC_LINE01.PUMP01.MODE", 0);
var count = ReadTagInteger("PLC_LINE01.PUMP01.COUNT", 0);</code></pre> </article><article id="tag-methods-item-3" class="docs-detail-row"> <strong>ReadTagDouble:读取模拟量</strong> <p>ReadTagDouble(name, fallback) 读取温度、压力、液位等连续数值,适用于 Move、Rotate、Scale 和 Range Color。fallback 通常设为 0.0。</p> <ul> <li>适合连续数值和工程量</li><li>适合几何动画和区间颜色输入</li><li>显示单位和格式化建议在文本表达中处理</li> </ul> <pre class="docs-code-block"><code>var pressure = ReadTagDouble("PLC_LINE01.PUMP01.PRESSURE", 0.0);
var level = ReadTagDouble("PLC_LINE01.PUMP01.LEVEL", 0);</code></pre> </article><article id="tag-methods-item-4" class="docs-detail-row"> <strong>ReadTagString:读取文本</strong> <p>ReadTagString(name, fallback) 读取配方名、批次号等文本,可直接显示或用于 Script Text 拼接。fallback 通常为空字符串。</p> <ul> <li>适合名称、模式文案、批次号和备注</li><li>文本为空时应准备清晰回退显示</li><li>不建议用字符串读取替代布尔、整数或浮点读取</li> </ul> <pre class="docs-code-block"><code>var recipe = ReadTagString("PLC_LINE01.PUMP01.RECIPE", "");
var batchNo = ReadTagString("PLC_LINE01.PUMP01.BATCH_NO", "");</code></pre> </article><article id="tag-methods-item-5" class="docs-detail-row"> <strong>ReadTagJson:读取结构化数据</strong> <p>ReadTagJson(name, fallback) 读取对象或数组。fallback 须符合页面所需结构,如空数组或空对象。</p> <ul> <li>JSON 数组:表格行、趋势摘要、分页结果</li><li>JSON 对象:页面配置、设备摘要、统计结果</li><li>默认值应与页面使用方式一致</li> </ul> <pre class="docs-code-block"><code>var rows = ReadTagJson("PLC_LINE01.REPORT01.ROWS", []);
var config = ReadTagJson("PLC_LINE01.REPORT01.PAGE_CONFIG", {});</code></pre> </article><article id="tag-methods-item-6" class="docs-detail-row"> <strong>ReadTagDateTime:读取时间值</strong> <p>ReadTagDateTime(name, fallback) 读取更新、确认、批次等时间。fallback 可为 null 或默认时间;按页面语言和项目要求格式化。</p> <ul> <li>适合更新时间、确认时间和事件时间</li><li>无时间值时可以返回 null</li><li>格式化应放在文本表达或页面函数中</li> </ul> <pre class="docs-code-block"><code>var updatedAt = ReadTagDateTime("PLC_LINE01.PUMP01.UpdatedAt", null);
var confirmedAt = ReadTagDateTime("PLC_LINE01.PUMP01.CONFIRMED_AT", null);</code></pre> </article><article id="tag-methods-item-7" class="docs-detail-row"> <strong>Tag 点名和位读取语法</strong> <p>完整点名为 device.tag,不含空格。整数位读取使用 TAG[bit],如 PLC_LINE01.PUMP01.STATUS[0]。bit 为 0–31,且须小于父 Tag 位宽;16 位数据仅支持 0–15,[0] 为最低位。可用于 ReadTagBoolean、State Color 或布尔表达式。</p> <ul> <li>完整点名:`PLC_LINE01.PUMP01.STATUS`</li><li>语法模板:`TAG[bit]` / `PLC_LINE01.PUMP01.TAG[0]`</li><li>读取最低位:`PLC_LINE01.PUMP01.STATUS[0]`</li><li>读取第 31 位:`PLC_LINE01.PUMP01.STATUS[31]`</li><li>模板写法:`'<PLC>.<STATUS_TAG>[3]'`</li><li>位索引范围为 0 到 31</li> </ul> <pre class="docs-code-block"><code>var ready = ReadTagBoolean("PLC_LINE01.PUMP01.STATUS[0]", false);
var fault = ReadTagBoolean("PLC_LINE01.PUMP01.STATUS[3]", false);</code></pre> </article><article id="tag-methods-item-8" class="docs-detail-row"> <strong>ReadTagQuality:读取质量状态</strong> <p>ReadTagQuality(name, fallback) 返回数据质量,不代表业务或报警状态。可据此显示灰态、边框、提示或隐藏对象。</p> <ul> <li>质量状态不是工艺值</li><li>质量异常不等同于业务报警</li><li>只返回 good 或 bad;建议 fallback 使用 bad</li><li>质量文本适合用于提示和诊断显示</li> </ul> <pre class="docs-code-block"><code>var quality = ReadTagQuality("PLC_LINE01.PUMP01.PRESSURE", "bad");
var text = quality === "good" ? "数据可用" : "数据待确认";</code></pre> </article><article id="tag-methods-item-9" class="docs-detail-row"> <strong>ReadTagQualityGood:判断质量是否 good</strong> <p>ReadTagQualityGood(name) 返回质量是否为 good,可用于 Condition、Visibility 或显示表达式。质量异常时显示回退提示,不将回退值当作实时值。</p> <ul> <li>返回 true / false</li><li>适合控制显隐、禁用、颜色和边框</li><li>质量不是 good 时,应按数据不可确认处理</li> </ul> <pre class="docs-code-block"><code>var qualityGood = ReadTagQualityGood("PLC_LINE01.PUMP01.PRESSURE");
var displayText = qualityGood ? ReadTagDouble("PLC_LINE01.PUMP01.PRESSURE", 0).toFixed(1) : "--";</code></pre> </article><article id="tag-methods-item-10" class="docs-detail-row"> <strong>WriteTagBoolean:写入布尔值</strong> <p>WriteTagBoolean(name, value, options) 写入布尔命令;options 可携带权限、确认和审计上下文。也可使用 Write Tag 行为或 hqVisuDesigner.WriteTag(payload)。关键写入由用户操作触发,并核对宿主结果。</p> <ul> <li>适合启停、允许、复位和确认</li><li>value 应为 true / false</li><li>最终写入结果由运行端和宿主机确认</li> </ul> <pre class="docs-code-block"><code>WriteTagBoolean("PLC_LINE01.PUMP01.START", true);
WriteTagBoolean("PLC_LINE01.PUMP01.RESET", true);</code></pre> </article><article id="tag-methods-item-11" class="docs-detail-row"> <strong>WriteTagInteger:写入整数值</strong> <p>WriteTagInteger(name, value, options) 写入模式、步骤、枚举或整型设定值;options 提供权限和确认上下文。值须符合目标类型与现场约定,状态码使用整数。</p> <ul> <li>适合模式号、步骤号和枚举值</li><li>value 应为整数</li><li>写入前应确认目标 Tag 支持该取值范围</li> </ul> <pre class="docs-code-block"><code>WriteTagInteger("PLC_LINE01.PUMP01.MODE", 2);
WriteTagInteger("PLC_LINE01.PUMP01.STEP", 10);</code></pre> </article><article id="tag-methods-item-12" class="docs-detail-row"> <strong>WriteTagDouble:写入浮点值</strong> <p>`WriteTagDouble(name, value)` 用于写入设定值、比例、速度、温度、压力等连续数值。页面输入值应先完成范围、单位和格式处理,再提交写入。</p> <ul> <li>适合设定值和连续工程量</li><li>value 应为数字</li><li>输入框写值前应处理单位、上下限和空值</li> </ul> <pre class="docs-code-block"><code>WriteTagDouble("PLC_LINE01.PUMP01.SETPOINT", 12.5);
WriteTagDouble("PLC_LINE01.PUMP01.SPEED_SET", 80);</code></pre> </article><article id="tag-methods-item-13" class="docs-detail-row"> <strong>WriteTagString:写入文本值</strong> <p>`WriteTagString(name, value)` 用于写入配方名、批次号、备注和文本参数。写入前应确认文本长度、允许字符和目标系统处理方式,避免把显示文案误写为设备控制值。</p> <ul> <li>适合配方名、批次号和备注</li><li>value 应为字符串</li><li>文本输入应先处理空值和长度</li> </ul> <pre class="docs-code-block"><code>WriteTagString("PLC_LINE01.PUMP01.RECIPE", "RCP-001");
WriteTagString("PLC_LINE01.PUMP01.REMARK", "READY");</code></pre> </article><article id="tag-methods-item-14" class="docs-detail-row"> <strong>WriteTagJson:写入结构化数据</strong> <p>`WriteTagJson(name, value)` 用于写入结构化参数、组合输入结果、页面配置或报表条件。结构应保持稳定,字段名应与运行端或脚本约定一致。</p> <ul> <li>适合结构化参数和组合输入</li><li>value 可以是对象或数组</li><li>字段结构应稳定,便于运行端处理</li> </ul> <pre class="docs-code-block"><code>WriteTagJson("PLC_LINE01.PUMP01.PARAMS", {
speed: 80,
enabled: true
});</code></pre> </article><article id="tag-methods-item-15" class="docs-detail-row"> <strong>WriteTagDateTime:写入时间值</strong> <p>WriteTagDateTime(name, value) 写入操作、批次等时间。value 可为 new Date() 或运行端认可的时间值;须符合项目时区和记录规则。</p> <ul> <li>适合确认时间、操作时间和批次时间</li><li>value 可使用 Date 对象</li><li>关键记录仍应由运行端审计链路确认</li> </ul> <pre class="docs-code-block"><code>WriteTagDateTime("PLC_LINE01.PUMP01.CONFIRMED_AT", new Date());
WriteTagDateTime("PLC_LINE01.PUMP01.BATCH_START", new Date());</code></pre> </article><article id="tag-methods-item-16" class="docs-detail-row"> <strong>hqVisuDesigner.WriteTag(payload):显式传递写入上下文</strong> <p>hqVisuDesigner.WriteTag(payload) 或全局 WriteTag(payload) 接收目标、值、权限、确认和审计信息。类型化写入方法也支持 options,均由宿主处理。</p> <ul> <li>适合权限、确认、审计类写入</li><li>适合正式项目关键操作</li><li>字段越明确,宿主机越容易按规则接管</li> </ul> <pre class="docs-code-block"><code>hqVisuDesigner.WriteTag({
TagName: "PLC_LINE01.PUMP01.CMD",
Value: 1,
PermissionCode: "io:write",
RequireConfirm: true,
ConfirmText: "确认发送启动命令?"
});</code></pre> </article><article id="tag-methods-item-17" class="docs-detail-row"> <strong>hqVisuDesigner.WriteTag(payload) 常用字段</strong> <p>页面提供 TagName、Value、PermissionCode、RequireConfirm、ConfirmText、RequireReason、AuditAction 等字段;运行端执行权限校验、确认、原因输入、审计并返回异步结果。关键写入须由用户操作触发,不能随页面加载下发。</p> <ul> <li>TagName:目标完整 Tag 点名</li><li>Value:要写入的值</li><li>PermissionCode:运行端权限码</li><li>RequireConfirm / ConfirmText:确认提示</li><li>RequireReason:要求填写原因</li><li>AuditAction:审计动作名称</li> </ul> <pre class="docs-code-block"><code>hqVisuDesigner.WriteTag({
TagName: "PLC_LINE01.PUMP01.CMD_START",
Value: true,
PermissionCode: "io:write",
RequireConfirm: true,
ConfirmText: "确认启动设备?",
RequireReason: true,
AuditAction: "device-start"
});</code></pre> </article><article id="tag-methods-item-18" class="docs-detail-row"> <strong>读取方法、类型和默认值</strong> <p>ReadCalculatedTag(name, fallbackValue?) 及其 hqVisuDesigner 同名方法读取已发布计算 Tag,保留 0 和 false。不可用时返回 fallbackValue,省略则返回 null。</p> <pre class="docs-code-block"><code>var totalFlow = ReadCalculatedTag("Line01TotalFlow", null);
var ready = ReadCalculatedTag("Line01Ready", false);</code></pre> </article><article id="tag-methods-item-19" class="docs-detail-row"> <strong>模板参数和变量组合</strong> <p>CALCULATED_TAG 填 Line01TotalFlow;Setup Script 保存名称并读取,Display Text 引用结果。计算 Tag 不可写入。</p> <pre class="docs-code-block"><code>// Setup Script
var calculatedTagName = "<CALCULATED_TAG>";
var totalFlow = ReadCalculatedTag(calculatedTagName, null);
// Display Text
totalFlow === null ? "--" : totalFlow.toFixed(1) + " m³/h"</code></pre> </article><article id="tag-methods-item-20" class="docs-detail-row"> <strong>只读与质量要求</strong> <p>计算 Tag 不支持写入或位后缀,仅读取来源正确且质量为 good 的结果,不回退到同名普通 Tag。不可用时显示提示,并检查名称、发布、权限和订阅。</p> </article> </div> <div class="docs-note-grid"> <figure id="tag-methods-image-1" class="docs-note-card manual-doc-image-card"> <img src="/WEB_img/HQPPT/TextBehaviorEditorFormTagText.png" alt="文本绑定" loading="lazy" decoding="async"> <figcaption> <strong>文本绑定</strong> <p>文本类对象往往同时会配到读值方法和脚本文本逻辑。</p> </figcaption> </figure><figure id="tag-methods-image-2" class="docs-note-card manual-doc-image-card"> <img src="/WEB_img/HQPPT/IoClickWriteBehaviorEditorForm.png" alt="写值动作" loading="lazy" decoding="async"> <figcaption> <strong>写值动作</strong> <p>如果动作是通过行为编辑器配置的,底层仍然会走统一写入链。</p> </figcaption> </figure> </div> </section>