Mingcedar

所属产品: Mingcedar CONTROL

获取与使用其他站点的数据 | Mingcedar

前置条件:B 的 Tag 已采集且有效,A 已加入 B。在 A 选用 B 的 IO、保存 PLC 范围,再引用 Tag;选用 IO 不复制设备、Tag 或数值。

首次发布 最近更新

<div class="manual-doc-article manual-doc-article-section"><h2 id="io-sharing">操作教程: 获取与使用其他站点的数据</h2>

在 A 选择 B 的 IO 与 PLC 范围,取得来源引用并用 Python 读取,再配置报警与趋势。

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

<article class="doc-card">

<h3 id="remote-data-path">1. 准备来源与消费方</h3>

<p>前置条件:B 的 Tag 已采集且有效,A 已加入 B。在 A 选用 B 的 IO、保存 PLC 范围,再引用 Tag;选用 IO 不复制设备、Tag 或数值。</p>

<ul class="doc-related-links">

<li><a href="/hqserver/manual/distributed-deployment/">两台服务器部署</a></li>

<li><a href="/hqserver/manual/sites/#sites-capabilities">来源能力选择</a></li>

</ul>

</article>

<article class="doc-card">

<h3 id="io-sharing-item-1">2. 打开 B 的设备目录</h3>

<ol>

<li>在“站点 → 本站能力 → IO 采集”添加 B 的节点,确认已选用且可用。</li>

<li>点击该节点旁“浏览设备”,或在“站点与设备”中直接选择 B。</li>

<li>在“设备列表”按名称、编号或协议查找目标设备。搜索覆盖已加载设备;点击“加载更多设备”可继续读取。</li>

<li>核对来源站点与设备启用状态,再编辑 PLC 使用范围。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 目录由来源维护,不在 A 新建 PLC 连接。来源中断时保留已存范围,恢复后重新加载目录。</p>

</article>

<article class="doc-card">

<h3 id="io-sharing-item-2">3. 预览并保存 PLC 使用范围</h3>

<ol>

<li>在目标设备的“使用范围”列勾选“使用”(为我所用),查看“已保存 PLC”和“当前选择”数量。</li>

<li>检查“当前选择中未在分页显示”的设备;它们仍在选择中,不会因为当前页没有显示而自动取消。</li>

<li>点击“预览 PLC 范围变更”,核对新增、移除和现有业务依赖。</li>

<li>勾选“我已核对新增、移除及依赖信息”,点击“确认并保存 PLC 使用范围”。</li>

<li>等待“PLC 使用范围已保存并生效”,确认无“范围未生效”或“目录版本待更新”提示。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 保存生效后,本站可在该范围内使用来源 Tag。设备勾选只是草稿,预览也不提交变更。</p>

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

<li>移除会影响现有引用时,预览列出依赖并阻止保存;先修改对应业务引用,再重新预览。</li>

<li>来源目录或配置版本变化时,刷新后重新预览;即使设备集合不变,也可能需要更新目录版本。</li>

<li>切换到另一站点前会询问是否放弃未保存 PLC 选择;仅切换工作区视图会保留草稿。</li>

</ul></div>

</article>

<article class="doc-card">

<h3 id="remote-tagref">4. 从“站点 Tag”取得来源引用</h3>

<p>TagRef 是稳定的来源引用,格式为 <code>hq://io/&lt;io-domain-uuid&gt;/&lt;device-uuid&gt;/&lt;tag-uuid&gt;</code>。可在已同步的站点 Tag 中展开“来源引用”并复制;已有目标点完整引用时可直接进入下一步。</p>

<ol>

<li>打开“Tag 管理 → 站点 Tag”,确认目标站点与目标数据库属于 A。查看目录需 <code>admin:view</code>,以及站点查看或管理权限、IO 或 Tag 查看权限;同步另需 <code>io:manage</code>。</li>

<li>在“来源站点”选择 B,在“来源设备”选择已纳入范围的 PLC;目录有下一页时点击“加载更多设备”。</li>

<li>点击“预览设备 Tag 同步”,查看本批新增、更新、相同或冲突的定义。此操作以设备目录分页,不是仅同步一个勾选 Tag。</li>

<li>核对本批目标与差异,勾选确认并“确认保存本批”;再“预览下一批”,逐批确认。</li>

<li>在“已同步 Tag”中按代码或名称搜索目标点,展开其“来源引用”,选中并复制完整 <code>hq://io/...</code> 文本。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 同步只保存本站 Tag 定义与来源绑定,不新增采集设备、复制值/规则/历史或开放写入。引用从目录复制,不用站点名称或 IP 拼接。</p>

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

<li>本批有冲突时不能保存,核对列出的来源与本站差异后重新预览;此前已确认的批次不受影响。</li>

<li>保存结果待核实时,点击“核实本批保存结果”,确认该批是否已保存后再继续下一批。</li>

</ul></div>

<ul class="doc-related-links">

<li><a href="/hqserver/manual/master-data/">设备与 Tag 管理</a></li>

</ul>

</article>

<article class="doc-card">

<h3 id="remote-python-read">5. 用远端点位事件运行只读 Python</h3>

<p>内置 <code>hqcontrol</code> 读取已采集状态,无需另装包。“Run Test”仅支持本地 Tag;读取远端 TagRef 需使用点位变化事件,将目标纳入动作范围。</p>

<ol>

<li>在 A 按 Python 教程准备项目与权限。在“配置中心 → script → 代码”创建 scripts/read_value.py 并粘贴示例。</li>

<li>将 <code>tags.read(...)</code> 引号内的完整来源引用替换为上一步复制的 URI,保存源文件。再到 Settings → Python → Python 模块 → 高级项目配置 → 项目运行配置中设置此脚本入口与运行限制,查看应用状态。脚本读取的 Tag 必须与下方事件选择的 Tag 相同。</li>

<li>进入“运行”,点击“新增事件”,来源类型选择“点位变化”。在“选择触发点位”中依次选择 B、目标设备和同一个 Tag;设置业务需要的触发条件与最小间隔。</li>

<li>添加“脚本动作”,在“选择脚本”中选中该入口,确认“动作启用”并保存动作绑定。启用事件并点击“保存事件”,查看保存与应用结果。</li>

<li>等待有效变化满足触发条件,在“记录”对照脚本 Value、Quality 与 B 的状态。恢复连接后的首个有效值可能仅建立基线。</li>

<li>不再需要持续读取时,停用并保存该事件。</li>

</ol>

<div class="manual-code" data-code-language="python"><div class="manual-code-toolbar"><span>scripts/read_value.py · 完整只读入口</span><span class="manual-code-tools"><small>Python</small><button type="button" data-copy-code data-copied="已复制" data-failed="请选中代码后复制" aria-label="复制代码: scripts/read_value.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:#6A737D"># scripts/read_value.py</span></span>

<span class="line"><span style="color:#D73A49">from</span><span style="color:#24292E"> hqcontrol </span><span style="color:#D73A49">import</span><span style="color:#24292E"> tags</span></span>

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

<span class="line"><span style="color:#D73A49">def</span><span style="color:#6F42C1"> main</span><span style="color:#24292E">(ctx):</span></span>

<span class="line"><span style="color:#24292E"> response </span><span style="color:#D73A49">=</span><span style="color:#24292E"> tags.read(</span><span style="color:#032F62">"hq://io/&#x3C;io-domain-id>/&#x3C;device-uid>/&#x3C;tag-uid>"</span><span style="color:#24292E">)</span></span>

<span class="line"><span style="color:#D73A49"> if</span><span style="color:#D73A49"> not</span><span style="color:#24292E"> response </span><span style="color:#D73A49">or</span><span style="color:#24292E"> response.get(</span><span style="color:#032F62">"ok"</span><span style="color:#24292E">) </span><span style="color:#D73A49">is</span><span style="color:#D73A49"> not</span><span style="color:#005CC5"> True</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">"Tag read failed"</span><span style="color:#24292E">)</span></span>

<span class="line"><span style="color:#24292E"> snapshot </span><span style="color:#D73A49">=</span><span style="color:#24292E"> response[</span><span style="color:#032F62">"value"</span><span style="color:#24292E">]</span></span>

<span class="line"><span style="color:#D73A49"> if</span><span style="color:#D73A49"> not</span><span style="color:#24292E"> tags.is_good_quality(snapshot):</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">"Tag quality is not good"</span><span style="color:#24292E">)</span></span>

<span class="line"><span style="color:#005CC5"> print</span><span style="color:#24292E">(</span><span style="color:#032F62">"Value:"</span><span style="color:#24292E">, snapshot.get(</span><span style="color:#032F62">"value"</span><span style="color:#24292E">), </span><span style="color:#032F62">"Quality:"</span><span style="color:#24292E">, snapshot.get(</span><span style="color:#032F62">"quality"</span><span style="color:#24292E">))</span></span>

<span class="line"><span style="color:#D73A49"> return</span><span style="color:#24292E"> {</span><span style="color:#032F62">"value"</span><span style="color:#24292E">: snapshot.get(</span><span style="color:#032F62">"value"</span><span style="color:#24292E">)}</span></span>

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

<span class="line"><span style="color:#D73A49">if</span><span style="color:#005CC5"> __name__</span><span style="color:#D73A49"> ==</span><span style="color:#032F62"> "__main__"</span><span style="color:#24292E">:</span></span>

<span class="line"><span style="color:#24292E"> main({})</span></span>

<span class="line"></span></code></pre></div>

<p class="doc-step-result"><strong>完成标志</strong> 触发后,脚本在 A 读取事件范围内的远端值。未触发则查事件启用、条件与来源变化;执行失败则查质量和权限。示例不写 PLC 或归档趋势。</p>

<ul class="doc-related-links">

<li><a href="/hqserver/manual/python-scripting/">Python 项目、公共方法与依赖</a></li>

</ul>

</article>

<article class="doc-card">

<h3 id="io-sharing-item-3">6. 核对质量与采集需求</h3>

<p>默认复用来源已采集值(<code>reuse-only</code>),不另建 PLC 连接。按需采集点须在来源具备有效采集需求,并满足范围与订阅要求。</p>

<p class="doc-table-hint">左右滑动查看完整表格</p>

<div class="doc-table-scroll" role="region" aria-label="6. 核对质量与采集需求" tabindex="0"><table class="doc-reference-table">

<thead><tr><th scope="col">结果</th><th scope="col">检查位置</th></tr></thead><tbody>

<tr><th scope="row">当前值且质量 good</th><td>对照来源 Tag 的值与时间,再接入业务。</td></tr>

<tr><th scope="row">暂无值 / 未采集</th><td>来源设备和 Tag 的启用状态、采集模式与实际采集需求。</td></tr>

<tr><th scope="row">质量无效 / 来源不可用</th><td>来源设备、IO 服务和站间连接;恢复后等待有效新值。</td></tr>

<tr><th scope="row">范围或权限拒绝</th><td>PLC 使用范围、调用账号和所需能力授权。</td></tr>

<tr><th scope="row">引用不存在</th><td>来源是否删除或重建点位,重新从目录核对稳定引用。</td></tr>

</tbody></table></div>

<p class="doc-step-result"><strong>完成标志</strong> 读到一个远端值不代表已经在 A 建立报警判断或趋势记录;这些消费功能各自配置。</p>

</article>

<article class="doc-card">

<h3 id="remote-results">7. 打开 B 的报警、趋势或画面</h3>

<ol>

<li>在 A 的“站点 → 本站能力”中,分别为所需能力添加 B 的节点,检查来源已选用且可用。</li>

<li>点击节点旁的“查看报警”“查看趋势”或“打开画面”。页面仍通过当前门户访问,并切换到所选来源的运行内容;B 的画面使用 B 的 Tag 绑定。</li>

<li>在历史趋势中选择点位与起止时间,查询 B 在该时段仍保留的记录。普通 LAN 的远端报警只读;确认、搁置或解除搁置时直接登录 B,并使用具备权限的账号。</li>

<li>若提示该来源没有可访问的对应菜单,在 B 核对运行菜单与用户访问权限;若来源不可用,先恢复来源服务或连接。</li>

</ol>

<p class="doc-step-result"><strong>完成标志</strong> 报警与趋势各自有入口,不依赖同时选用画面。结果仍属于 B,来源不会在失败时自动替换为 A 的同名菜单或数据。</p>

</article>

<article class="doc-card">

<h3 id="remote-consumers">8. 在 A 使用远端输入</h3>

<p class="doc-table-hint">左右滑动查看完整表格</p>

<div class="doc-table-scroll" role="region" aria-label="8. 在 A 使用远端输入" tabindex="0"><table class="doc-reference-table">

<thead><tr><th scope="col">用途</th><th scope="col">当前操作入口</th><th scope="col">保存后的含义</th></tr></thead><tbody>

<tr><th scope="row">只读 Python</th><td>配置中心 → script → 代码;用完整来源引用调用 <code>tags.read</code>,再按上文绑定同一远端点位的事件。</td><td>脚本在 A 执行,读取 B 的已采集状态。</td></tr>

<tr><th scope="row">点位变化触发脚本</th><td>配置中心 → script → 运行 → 新增事件,选“点位变化”,在“选择触发点位”中选择 B、设备与一个 Tag。</td><td>配置并启用事件及动作后,连续、当前且有效的值变化才参与触发。</td></tr>

<tr><th scope="row">A 自己的报警与趋势</th><td>Tag 管理 → 站点 Tag → 已同步 Tag → “报警/趋势配置”;同时在本站能力配置对应服务处理的设备。</td><td>A 独立维护规则和留存;不会复制 B 已有的报警规则、趋势策略或历史。</td></tr>

<tr><th scope="row">自写页面</th><td>按页面 SDK 教程声明读取范围与运行上下文。</td><td>页面使用其已授权的接口;参数采用各接口要求的 FullCode 或引用格式。</td></tr>

<tr><th scope="row">外部程序</th><td>按 IO State API 配置凭据、Profile 与读取范围。</td><td>外部接口范围单独授权,站点加入不自动扩大 API Key 权限。</td></tr>

</tbody></table></div>

<p class="doc-step-result"><strong>完成标志</strong> 分别保存设备范围、Tag 定义、报警、趋势和事件,再核对服务、输入质量与结果。同步 Tag 定义不会自动创建运行画面的点位绑定。</p>

<ul class="doc-related-links">

<li><a href="/hqserver/manual/sites/#sites-input-devices">本站报警与趋势设备范围</a></li>

<li><a href="/hqserver/manual/python-scripting/">Python 项目与事件</a></li>

<li><a href="/hqserver/manual/custom-page-tutorial/">页面 SDK</a></li>

<li><a href="/hqserver/manual/io-state-api/">IO State API</a></li>

</ul>

</article>

</div>

</div>