跳到主要内容

虚拟标签运行

概述​

虚拟标签是通过其他标签值进行计算而创建的标签。关于虚拟标签是什么以及如何创建,请参阅用户指南中的 虚拟标签。本页仅针对管理员需要掌握的内容 —— 计算在何处运行、何时部署、失败记录在何处以及影响性能的因素。


一个计算 = 一条 CEP 语句​

在标签的 计算 选项卡中输入的 EQL 将作为 一条语句 部署到 CEP。

项目值
语句 IDCALCULATION_ + 标签 ID (例如:CALCULATION_TAG_V_FILTER_DP)
启用/禁用值标签的 use_calculation — 计算选项卡的 适用与否
结果去向每一行结果成为该标签的一个数据点,进入 与采集值相同的流水线 — 存储 · 报警 · 其他计算像读取普通标签一样读取它
结果处理语句产生结果后,异步工作线程将其转换为数据点并放入流水线

计算结果是 唯一允许重新进入 CEP 的 CEP 结果。其他 CEP 结果在 CEP 入口处将被拦截。因此,可以将虚拟标签作为源来创建另一个虚拟标签(链式计算)—— 但 存储时不会检查计算是否读取自身。如果创建循环,语句将重新读取自己的输出。


何时部署​

时机动作失败时
保存计算选项卡 · V5 PATCH /api/v5/tag/{tag_id}/calculation尝试编译 语句后保存,下线旧语句并上线新语句编译失败则不保存。保存成功但部署失败则 响应为失败 — 不会将未部署的语句通知为成功
服务器启动将所有 use_calculation 为开启的标签 每次 4 个地同时 部署跳过该标签并继续部署其余标签。该标签的诊断 «计算标签部署失败» 将开启 — 见下方
删除标签下线该标签的计算语句,并删除该标签的报警设置即使某个步骤失败,后续步骤和 DB 删除仍将继续
删除连接下线该连接所有标签(含虚拟标签)的计算 · 聚合 · 报警,随后与标签一同删除—

保存被拒绝时 — 422​

如果在保存计算选项卡时语句无法编译,将以 HTTP 422 被拒绝,原因将直接显示在屏幕上。

位置内容
EQL 编辑器正下方的提示框标题 «无法读取 EQL»,位置标签 «第 N 行 第 M 列»,原因语句和提示,折叠的 查看引擎原文。光标将移动至该位置(若无具体位置则不显示标签仅显示语句)。不弹出 Toast 通知
服务器的语句 (V5 响应中的 detail)«EQL 编译失败 (第 N 行 第 M 列): …» — 若无位置则为 «EQL 编译失败: …»
V5 响应的扩展栏reason = eql.compile, cause · compiler_message = 整理后的编译器语句, engine_message = 引擎原始语句, line · col = 从 1 开始计数的位置

如果 CEP 未启动而无法检查,则返回 HTTP 503,并在 Toast 中显示 «无法连接到 CEP 引擎,未能验证 EQL.» — 由于并非语句本身错误,因此不显示在编辑器中。 服务器日志中,拒绝记录为 Tag calculation refused: tag_id=[…],因无法连接 CEP 而导致保存失败记录为 Tag calculation not saved - CEP could not check the EQL。

相同的机制 同样适用于接收 EQL 的其他入口。

入口
控制台标签计算选项卡 · 资产语句添加/修改 · 插件语句 · 报警设置保存 · [执行 EQL] 检查 · 查询执行
V5标签计算式 · 资产语句 · 报警设置 · 查询编译/执行
CEP 关闭时无法保存计算式

原则上不允许将未经检查的 EQL 保存至 DB。在 CEP 重启期间,计算选项卡保存失败属于正常现象,请在 CEP 启动后再重新保存。


失败记录在诊断中​

计算失败后,将以两种形式记录在 诊断 中。

代码名称 · 种类 · 严重程度消息时机
diagnostic.tag.calculation_deploy_failed计算标签部署失败 · 状态 · ERROR标签 {target} 的计算未能适用({operation}): {error}在启动或重新部署时,保存的计算式未能加载至引擎。每个标签开启一条,修复并部署后自动消失
diagnostic.tag.calculation_listener_failing状态 · ERROR标签 {target} 的计算失败。将语句产生的结果转换为数据点时失败。下一次结果成功后消失

«计算标签部署失败» 的 {error} 中包含被引擎拒绝的语句,诊断因子 line · col 中包含其位置。 诊断页面的详细面板中设有 «打开修复页面» 链接,可直接跳转至该标签的设置表单 — 在计算选项卡中修改并保存后,将重新部署且诊断记录清除。如果 diagnostic.infra.component_unreachable(cep) 同时开启,请先恢复 CEP。

由于未部署的 EQL 无法运行,因此在其他使用 EQL 的地方也会针对 每个对象 出现相同的诊断。

代码名称对象«打开修复页面» 跳转位置
diagnostic.tag.calculation_deploy_failed计算标签部署失败标签标签设置表单
diagnostic.tag.alarm_deploy_failed标签报警部署失败报警设置 ID (标签为 tag_id)报警设置表单
diagnostic.asset.statement_deploy_failed设备语句部署失败asset_id/statement_name该资产的语句选项卡

如果结果行中缺少 timestamp · value · quality · error_code 之一,或 value 为空,则 记录为警告日志而非错误 并丢弃该结果。如果虚拟标签没有值且诊断中没有记录,请在服务器日志中查找 Calculated point validation failed。


性能​

项目原因
虚拟标签数 = CEP 语句数每个虚拟标签都会多运行一条语句。应避免多个虚拟标签重复计算相同的值
尽量减小源数据的时间窗将两个及以上源数据配对时,时间窗内的值会产生组合。win:length(1) 仅包含最新值,因此只有一种组合;但如果时间窗设置过大,组合数量将呈倍数增加
OUTPUT LAST EVERY n只要任何一个源数据有值就会重新计算,因此源数据越多、频率越快,结果产生的频率就越高。此选项限制 每个时间间隔仅发送最后一个值 — 由于结果即为存储的数据点,这能同步降低存储量
启动时间启动时每次部署 4 条计算语句。如果虚拟标签数量较多,从启动到所有计算运行起来需要一定时间

局限性​

项目内容
源标签数量上限产品无固定上限
链式计算 (虚拟标签的虚拟标签)支持
循环 · 自引用检查无 — 保存时无法检出
计算式长度通过 V5 API 输入时上限 4,000 字符
语法仅部署已启动的 CEP 后端能够接收的语句 — CEP — 后端

配置键​

没有 仅用于虚拟标签计算的独立配置键。计算语句在哪个引擎运行由 CEP 的 cep.backend 决定 (CEP — 后端)。


相关文档​