如何從 PI Web Server 取得 PI tag 名稱?尊敬的 JMP 使用者社區,
我和我的同事目前正在開發一個 JMP 插件,該插件允許我們的內部用戶根據需要查詢 PI 標籤,並將它們全部放在一個表中,並附加一些腳本並提前完成一些資料操作步驟。
因此,本質上,我們希望重現並利用 JMP 中的「從 OSIsoft PI 伺服器匯入」功能,但根據我們的需求進行一些調整。
目前,我們正致力於從 PI Web 伺服器動態檢索所需的 PI tag 名稱,然後將其儲存在清單中以在其上執行 PI 用戶端。目前,我們有一些 PI 標記的硬編碼列表,但由於命名可能會更改或可能會添加新的 Pi 標記,因此這不是理想的解決方案。
使用像 % 這樣的通配符將幫助我們創建更精細的 Pitag 類別 - 這些類別將取決於用戶之前選擇的流程步驟、生產線 - 但我們沒有運氣在 jsl 中找到清單的對應。
此外,我們無法使用 SQL 查詢 PI Web 伺服器。
這是我們的 AF 路徑:

Asset_DB和Stat_DB是列表,其內容是基於使用者選擇。 Pitags 目前是一些 pi 標籤的硬編碼列表,但我們希望它也基於用戶選擇。
我的問題:您(JMP 開發人員)如何根據使用者選擇從 Web 伺服器擷取 pi 標籤名稱?
預先非常感謝!
有一個
自動化和腳本編寫資料存取回覆:如何從 PI Web Server 取得 PI tag 名稱?有一個,
為了取得 AF 層次結構特定層級的子元素,JMP 使用「元素 - 取得元素」Web API 方法,該方法記錄在此處: https://docs.aveva.com/bundle/pi-web-api-參考/ page/help/controllers/element/actions/getelements.html
JMP 發出如下所示的請求:
GET 元素/{webId}/elements?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 Server 取得 PI tag 名稱?我已經有一段時間沒有這樣做了...我記得有一種方法可以獲取所有 pi 標籤的 Excel 表。完成後,在 JMP 中打開它並轉置它,使標籤名稱位於第一列。從那裡您可以解析和過濾名稱以產生可在腳本中使用的清單。
..抱歉我不能說得更具體。
回覆:如何從 PI Web Server 取得 PI tag 名稱?嗨拜倫,
非常感謝您的回覆!
我腦子裡也有這個選擇,但我希望有一個更簡單的方法。
最好的,
有一個
回覆:如何從 PI Web Server 取得 PI tag 名稱?嗨邁克爾,
非常感謝您提供這個巧妙的解決方案!
我們將繼續嘗試實施該方法。:)
最好的祝愿,
有一個
回覆:如何從 PI Web Server 取得 PI tag 名稱?你好邁克爾,
我們嘗試了「新 HTTP 請求」功能來從 AF 層次結構中擷取 pi 標籤。
像這樣:

腳本正在執行,但我們收到以下錯誤訊息。您熟悉該錯誤嗎?

由於我們可以使用「New PI Client」功能查詢PI tag,因此缺少授權似乎不是問題。我們的 PI 系統經理確認了我們的存取權限,但找不到缺少存取權限的問題。
預先非常感謝!
有一個
回覆:如何從 PI Web Server 取得 PI tag 名稱?您的 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 Server 取得 PI tag 名稱?謝謝 Bryan,我們使用 Kerberos 實作了您的解決方案。
回覆:如何從 PI Web Server 取得 PI tag 名稱?是不是像這樣:
PI_web = New HTTP Request(
URL([your url]),
Method("GET"),
Secure(0),Authentication Method("KERBEROS"),
QueryString(qrry)
) << Send