计算 Tag 在当前 Runtime Unit 内由服务端求值,适合把一个或多个已存在的实时值组合成数字或布尔结果。它不连接 PLC、不写回输入,也不执行脚本;定义、发布、启用和运行诊断彼此分离,便于审核和稳定运行。
- 适合:功率换算、单位换算、运行条件组合、联锁状态判断和简单条件选值。
- 结果类型只支持
number 或 boolean。
- 输入只支持当前 Runtime Unit 的本地 IO TagRef,或已经发布的计算 TagRef。
- 不支持远端输入、时间窗口、Average / Min / Max / Counter、Link 或脚本执行。
- 第一阶段的运行值在计算 Tag 管理页和专用值接口中查看;不要假定它已经进入普通 Tag、画面、报警、趋势或 IO State API 的消费链路。
- 进入“Tag 管理 → 计算 Tag”,选择新建。
- 填写稳定且有业务含义的 Code,例如
<calculated-tag-code>,并选择结果类型。
- 为每个输入填写语义明确的别名,例如
line_voltage、line_current 和 power_factor。
- 从目录选择规范 TagRef,并声明输入值类型。单个定义最多 32 个输入。
# 本地 IO 输入
hq://io/<io-domain-id>/<device-uid>/<tag-uid>
# 已发布计算 Tag 输入
hq://calc/<runtime-unit-id>/<calculated-tag-uid>
表达式支持数值和布尔常量、算术、比较、逻辑、条件选择,以及 if 和 abs。别名就是表达式中的变量,拼写必须与输入列表一致。
- 算术:
+ - * / %
- 比较:
== != < <= > >=
- 逻辑:
&& || !
- 条件:
condition ? yes : no 或 if(condition, yes, no)
- 函数:
abs(value)
# 三相设备的业务功率换算示例
line_voltage * line_current * power_factor / 1000
# 运行允许状态
run_command && !fault_active
# 带条件的轴功率估算
if(motor_running && motor_speed > 0, abs(motor_torque) * motor_speed / 9550, 0)
表达式最大 2048 bytes,最多 256 个 AST 节点、32 层深度和 512 个求值步骤。应把一个定义保持在清晰、可审核的业务计算范围内。
- 先执行服务端验证,检查别名、类型、引用、语法和成本预览。
- 验证通过后保存草稿;草稿可以继续编辑,不会自动进入运行状态。
- 发布生成不可变 generation,记录本次投入运行的确定版本。
- 确认发布版本正确后启用,再查看运行值、质量、求值时间和诊断信息。
输入质量会传播到结果。逻辑短路和条件表达式只传播实际执行分支所使用输入的质量。除零、模零或产生非有限数时,结果质量显示 calculation_error;应先检查诊断,再修改草稿并发布新的 generation。
生产项目宜把编辑、发布和启用分配给相应职责,至少确保发布前有人复核输入、表达式和结果类型。
calculated-tag:view:查看定义、运行值和诊断。
calculated-tag:manage:新建和编辑草稿。
calculated-tag:publish:发布不可变 generation。
calculated-tag:enable:启用或停用运行版本。