如何从 PI Web 服务器获取 PI 标签名称?尊敬的 JMP 用户社区:
我和我的同事目前正在开发一个 JMP 插件,它允许我们的内部用户根据需要查询 PI 标签,并将它们全部放在一个表中,并附加一些脚本和提前完成一些数据操作步骤。
因此,本质上,我们想重现并利用 JMP 中的“从 OSIsoft PI 服务器导入”功能,但根据我们的需求进行一些调整。
我们目前无法从 PI Web 服务器动态检索所需的 PI 标签名称,然后将其存储在列表中以运行 PI 客户端。目前,我们有一些 PI 标签的硬编码列表,但由于命名可能会更改或可能会添加新的 Pi 标签,因此这不是理想的解决方案。
使用像 % 这样的通配符可以帮助我们创建更精细的 pitag 类别 - 这些类别将取决于用户之前的选择,例如工艺步骤、生产线 - 但我们在 jsl 中没有找到列表的对应项。
另外,我们不能使用 SQL 来查询 PI Web 服务器。
这是我们的 AF 路径:

Asset_DB 和 Stat_DB 是列表,其内容基于用户选择。Pitags 目前是几个 pi 标签的硬编码列表,但我们希望它也基于用户选择。
我的问题:您(JMP 开发人员)如何根据用户选择从 Web 服务器检索 pi 标签名称?
提前谢谢您!
有一个
自动化和脚本数据访问回复:如何从 PI Web 服务器获取 PI 标签名称?有一个,
为了获取 AF 层次结构特定级别的子元素,JMP 使用“元素 - 获取元素”Web API 方法,该方法记录在此处: https://docs.aveva.com/bundle/pi-web-api-reference/page/help/controllers/element/actions/getelements.html
JMP 发出如下请求:
获取元素/{webId}/元素?webidtype=idonly&selectedfields=items.webid;items.name;items.description;items.path;items.haschildren;items.templatename
{webId} 将被替换为您想要子元素的路径层次结构的 webId。这将返回子元素的 JSON 描述,包括它们的名称、描述、webId、它们是否有子元素以及它们属于哪个模板(如果有)。您可能不需要所有这些属性,因此您可以将“selectedfields”查询参数精简为您需要的内容。您应该能够使用 JSL 的“HTTP 请求”方法发送这样的请求。然后,您可以使用 JSL 的“解析 JSON”函数解析结果。
希望这可以帮助!
--迈克尔
回复:如何从 PI Web 服务器获取 PI 标签名称?我好久没这么做了……我记得有一种方法可以获取所有 pi 标签的 excel 表。获得该表后,在 JMP 中打开并转置,使标签名称位于第一列。从那里,您可以解析和过滤名称以生成可在脚本中使用的列表。
..抱歉,我不能说得更具体一些。
回复:如何从 PI Web 服务器获取 PI 标签名称?嗨,拜伦,
非常感谢您的回复!
我脑子里也想过这个选择,但我希望有更简单的方法。
最好的,
有一个
回复:如何从 PI Web 服务器获取 PI 标签名称?嗨,迈克尔,
非常感谢您提供这个巧妙的解决方案!
我们将继续尝试实施该方法。:)
最好的祝愿,
有一个
回复:如何从 PI Web 服务器获取 PI 标签名称?你好,迈克尔,
我们已经尝试使用“新 HTTP 请求”功能从 AF 层次结构中检索 pi 标签。
像这样:

脚本正在执行,但我们收到以下错误消息。你熟悉这个错误吗?

由于我们可以使用“新 PI 客户端”功能查询 PI 标签,因此缺少授权似乎不是问题。我们的 PI 系统管理员确认了我们的访问权限,没有发现缺少访问权限的问题。
提前谢谢您!
有一个
回复:如何从 PI Web 服务器获取 PI 标签名称?您的 Pi 服务器是否需要基本授权?如果是这样,那么您需要使用:
PI_web = New HTTP Request(
URL([your url]),
Method("GET"),
Secure(0),<BR />Username([your username]),<BR />Password([your password]),<BR />Authentication Method("BASIC"),
QueryString(qrry)
) << Send
回复:如何从 PI Web 服务器获取 PI 标签名称?谢谢 Bryan,我们使用 Kerberos 实现了您的解决方案。
回复:如何从 PI Web 服务器获取 PI 标签名称?是不是类似这样的:
PI_web = New HTTP Request(
URL([your url]),
Method("GET"),
Secure(0),Authentication Method("KERBEROS"),
QueryString(qrry)
) << Send