Mingcedar

所属产品: Mingcedar CONTROL

计算 Tag:从公式到运行结果 | Mingcedar

本例把原始 0–10000 换算为 0–1 MPa。只有点表确实定义这一量程时才使用该比例,其他工程采用自己的换算。

首次发布 最近更新

<div class="manual-doc-article manual-doc-article-section"><h2 id="calculated-tags">操作教程: 计算 Tag:从公式到运行结果</h2>

从一个本地数值 Tag 开始,使用界面选择输入、编写公式、发布并启用,再配置报警和趋势。计算结果为只读 number 或 boolean。

<div class="doc-card-list doc-tutorial">

<article class="doc-card">

<h3 id="calculated-tags-item-1">1. 准备一个明确的输入点</h3>

<p>本例把原始 0–10000 换算为 0–1 MPa。只有点表确实定义这一量程时才使用该比例,其他工程采用自己的换算。</p>

<ol>

<li>在 Tag 测试确认本地原始压力 Tag 的值、质量和量程;记录稳定 Device Code 与 Tag Code。</li>

<li>执行创建、发布或启停前,确认当前账号拥有对应计算 Tag 权限。</li>

<li>进入 Tag 管理 → 计算 Tag,点击“新增计算 Tag”。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 输入点与权限已确认,编辑窗口打开。计算公式只引用本地 IO 或已发布计算 Tag,不直接访问 PLC。</p>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-2">2. 选择 Tag 并填写公式</h3>

<p>界面维护稳定 TagRef,通常无需手填 UUID 或另建别名。</p>

<ol>

<li>计算 Tag 名称填写 PressureMPa。名称允许英文字母、数字、下划线和分隔点,不能有空格或短横线。</li>

<li>点击“选择 Tag”,先在左侧选择本地 PLC / 设备,再在右侧点击原始压力点。</li>

<li>选择器会在公式中插入“设备编码.Tag 编码”作为输入名,并将它绑定到稳定 TagRef;在该输入名后输入 / 10000。</li>

<li>数字结果显示填写 2 位小数;它只改变显示,不降低内部计算精度。</li>

<li>按点表核对换算比例;修改输入时重新从目录选择,确保公式名称与绑定对应。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 核对输入绑定与除数:原始值 2500 应得到 0.25 MPa。</p>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-3">3. 保存、发布并启用</h3>

<p>保存草稿只保存编辑内容。发布生成确定版本;启用后才参与运行。</p>

<ol>

<li>点击“保存草稿”只保存内容,不改变运行版本。</li>

<li>要让新定义参与运行,点击“保存、发布并启用”。若账号只有发布权限,按钮显示“保存并发布”,之后由有启用权限的账号启用。</li>

<li>等待结果,检查发布版本(generation)和启用状态。若显示已发布但未启用,按页面提示处理后点击“启用并开始计算”。</li>

<li>在“计算结果”点击“刷新结果”,核对值、质量和计算时间。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 输入 2500 应得到 0.25;其他值按相同比例核对,并检查质量和时间。</p>

<div class="doc-step-troubleshooting"><p><strong>如果结果不一致</strong></p><ul>

<li>保存失败:按字段提示检查名称、输入及语法。</li>

<li>结果无效:先检查输入质量,再检查公式、发布和启用状态。</li>

<li>版本冲突:刷新并核对其他修改,再决定新的编辑,不能直接覆盖。</li>

</ul></div>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-4">4. 为计算结果添加报警</h3>

<p>计算 Tag 列表的“报警”按钮配置结果的报警规则,不会再次读取 PLC。</p>

<ol>

<li>在已发布 PressureMPa 行点击“报警”,再点击“新增规则”。</li>

<li>选择与结果类型匹配的条件,填写所需阈值,并选择 Settings 中已定义的报警分类编号。</li>

<li>按需要展开高级参数,设置恢复死区和触发延时,保持单位与 MPa 一致。</li>

<li>启用规则,点击“保存报警规则”,核对列表中出现对应条件。</li>

<li>观察报警状态;计算结果质量异常时,结合质量与规则状态判断,不仅看最后一次数值。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 分别确认规则已保存及报警是否触发。</p>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-5">5. 记录计算结果的历史趋势</h3>

<p>计算 Tag 列表的“趋势”按钮管理历史记录,历史按已计算结果产生。</p>

<ol>

<li>在同一行点击“趋势”,检查当前状态是否为未记录。</li>

<li>点击“记录历史趋势”,默认采用自动选择的推荐策略。</li>

<li>需要明确策略时展开高级趋势参数,选择趋势策略与变化死区,再保存趋势参数。</li>

<li>运行后确认“正在记录”,在历史趋势中选择计算结果和时间。</li>

<li>停止记录时使用“停止记录”;修改公式并发布新版本不会改写之前记录的历史数据。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 已有历史区间能查询到结果;此前未记录的时间不自动补齐。</p>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-9">6. 在 Python 与画面中读取</h3>

<p>使用专用 ReadCalculatedTag 方法,名称与列表保存值完全一致;不要额外加 PLC 或 CALC 前缀。</p>

<ol>

<li>进入脚本工作台 → 代码,选择项目并在 scripts/ 新建 read_calculated.py,粘贴下方代码并保存。</li>

<li>把代码中的名称改为列表中实际保存的计算 Tag 名称;本例为 PressureMPa。</li>

<li>选中该文件后点击“Run Test”;若文件仍有修改,按钮显示“Save &amp; Test”,会先保存并应用当前文件再运行。查看控制台结果并与计算 Tag 列表比较。</li>

<li>在 Mingcedar Studio 运行表达式中使用 ReadCalculatedTag(&quot;PressureMPa&quot;);未发布、停用或无有效权限 / 质量时处理空值。</li>

</ol>

<div class="manual-code" data-code-language="python"><div class="manual-code-toolbar"><span>scripts/read_calculated.py</span><span class="manual-code-tools"><small>Python</small><button type="button" data-copy-code data-copied="已复制" data-failed="请选中代码后复制" aria-label="复制代码: scripts/read_calculated.py">复制代码</button><span class="manual-code-status" role="status"></span></span></div><pre tabindex="0" class="docs-code-block shiki github-light" style="background-color:#fff;color:#24292e" tabindex="0"><code><span class="line"><span style="color:#24292E">value </span><span style="color:#D73A49">=</span><span style="color:#24292E"> ReadCalculatedTag(</span><span style="color:#032F62">"PressureMPa"</span><span style="color:#24292E">, </span><span style="color:#005CC5">None</span><span style="color:#24292E">)</span></span>

<span class="line"><span style="color:#D73A49">if</span><span style="color:#24292E"> value </span><span style="color:#D73A49">is</span><span style="color:#005CC5"> None</span><span style="color:#24292E">:</span></span>

<span class="line"><span style="color:#D73A49"> raise</span><span style="color:#005CC5"> RuntimeError</span><span style="color:#24292E">(</span><span style="color:#032F62">"Calculated value is unavailable"</span><span style="color:#24292E">)</span></span>

<span class="line"><span style="color:#005CC5">print</span><span style="color:#24292E">(value)</span></span></code></pre></div>

<p class="doc-step-result"><strong>完成标志</strong> Python 输出与计算结果一致。普通 Tag 的 SDK 方法与 IO State V2 SignalRef 不自动变为计算 Tag 接口。</p>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-10">7. 修改公式并处理异常</h3>

<p>公式采用 Mingcedar 表达式语法,不能在其中 import Python、执行 SQL 或写入 PLC。</p>

<ol>

<li>编辑已有定义,选择输入和运算符修改公式;布尔条件可用 &amp;&amp;、||、!,条件返回可用 if(condition, yes, no)。</li>

<li>除法前确认分母可能为零时的业务行为;不要随意用 0 掩盖无效测量。</li>

<li>保存并重新发布,核对新发布版本、运行质量和计算时间。</li>

<li>类型变更与已有报警规则不兼容时,先处理规则;删除计算 Tag 前先处理其报警 / 趋势定义及依赖。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 确认新版本已运行,并检查输入质量、除零、引用及依赖错误。</p>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-6">权限参考:查看、编辑、发布与启停</h3>

<p>按钮不可用时,先核对当前账号的权限和计算 Tag 状态。</p>

<ul>

<li>calculated-tag:view:查看定义、运行值和诊断。</li>

<li>calculated-tag:manage:创建、修改和保存草稿。</li>

<li>calculated-tag:publish:发布计算版本。</li>

<li>calculated-tag:enable:启用或停用运行版本。</li>

</ul>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-7">数值核对:压力换算</h3>

<p>下列值说明本页 0–10000 到 0–1 MPa 的换算关系。显示精度不改变计算结果。</p>

<ul>

<li>原始值 0 → 0 MPa;2500 → 0.25 MPa;10000 → 1 MPa。</li>

<li>输入质量不可用时,检查计算结果质量和求值时间,不能将旧值继续作为当前有效值。</li>

<li>恢复后重新核对输入与求值时间,再确认显示结果。</li>

</ul>

</article>

<article class="doc-card">

<h3 id="calculated-tags-item-8">表达式参考:组合状态与零分母</h3>

<p>以下 PumpPLC 为示例设备编码。编辑时从 Tag 选择器插入本项目的输入名,再组合运算符;两行分别是两个独立公式。</p>

<ul>

<li>运行命令为 true 且故障为 false,第一式结果为 true;故障为 true 时结果为 false。</li>

<li>合格数 95、总数 100,第二式结果为 95。总数为 0 时按本例约定返回 0,业务画面应明确区分“无样本”与“合格率为零”。</li>

<li>这是计算表达式语法,不是 Python;不在公式中导入模块、访问数据库或执行写入。</li>

</ul>

<div class="manual-code" data-code-language="text"><div class="manual-code-toolbar"><span>Text</span><span class="manual-code-tools"><small>Text</small><button type="button" data-copy-code data-copied="已复制" data-failed="请选中代码后复制" aria-label="复制代码: Text">复制代码</button><span class="manual-code-status" role="status"></span></span></div><pre tabindex="0" class="docs-code-block shiki github-light" style="background-color:#fff;color:#24292e" tabindex="0"><code><span class="line"><span>PumpPLC.RunCommand &#x26;&#x26; !PumpPLC.FaultActive</span></span>

<span class="line"><span></span></span>

<span class="line"><span>if(PumpPLC.TotalCount > 0, PumpPLC.GoodCount / PumpPLC.TotalCount * 100, 0)</span></span></code></pre></div>

</article>

</div>

</div>