教學課程:實作 Azure 工業 IoT 參考解決方案架構

製造商想要在全球範圍內部署整體產業IoT解決方案,並將其所有生產網站連線到此解決方案,以提高每個個別生產網站的效率。

這些提高效率導致更快的生產和較低的能耗,這一切都導致降低生產商品的成本,同時增加其品質在大多數情況下。

解決方案必須盡可能有效率,並啟用所有必要的使用案例,例如條件監視、OEE 計算、預測和異常偵測。 從從這些使用案例取得的深入解析中,可以在第二個步驟中建立數位意見反應迴圈,進而將優化和其他變更套用至生產程式。

互操作性是達成解決方案架構快速推出的關鍵,而且使用 OPC UA 等開放標準可大幅協助達成此互操作性。

IEC 62541 開放平台通訊統一架構 (OPC UA)

此解決方案使用 IEC 62541 開放式平台通訊 (OPC) 統一架構 (UA) 來取得所有操作技術 (OT) 數據。 此處將說明此標準。

參考解決方案架構

簡化的架構 (Azure 和網狀架構選項):

簡單 IIoT 架構的圖表。

詳細架構(僅限 Azure):

IIoT 架構的圖表。

元件

以下是此解決方案所涉及的元件:

元件 描述
工業資產 一組裝載於 Docker 容器中的模擬 OPC-UA 生產線
Azure IoT 作業 Azure IoT 作業是邊緣的統一數據平面。 它包含一組模組化、可調整且高可用性的數據服務,可在已啟用 Azure Arc 的邊緣 Kubernetes 叢集上執行。
資料閘道 此閘道會將內部部署資料來源 (例如 SAP) 連線到雲端中的 Azure Logic Apps。
Azure Kubernetes Services Edge Essentials 此 Kubernetes 實作會在 Edge 上執行。 它提供容錯 Edge 組態的單一節點和多節點 Kubernetes 叢集。 同時支援 K3S 和 K8S。 它會在內嵌或計算機級硬體上執行,例如工業閘道。
Azure 事件中樞 從邊緣閘道接收 OPC UA PubSub 訊息的雲端訊息代理程式,並儲存它們,直到訂閱者擷取為止。
Azure 資料總管 適用於進階雲端分析的時間序列資料庫和前端儀錶板服務,包括內建的異常偵測和預測。
Azure Logic 應用程式 Azure Logic Apps 是一個雲端平臺,可讓您用來建立和執行自動化工作流程,幾乎不需要任何程序代碼。
Azure Arc 此雲端服務可用來管理邊緣的內部部署 Kubernetes 叢集。 新的工作負載可以透過 Flux 部署。
Azure 儲存體 此雲端服務可用來管理Edge Kubernetes工作負載的 OPC UA 證書存儲和設定。
Azure 受控 Grafana Azure 受控 Grafana 是Grafana Labs 在 Grafana 軟體之上所建置的資料視覺效果平台。 Grafana 建置為完全受控的服務,由 Microsoft 裝載及支援。
Microsoft Power BI Microsoft Power BI 是 SaaS 軟體服務、應用程式和連接器的集合,可一起運作,將您的不相關的數據源轉換成一致、視覺沉浸式和互動式深入解析。
Microsoft Dynamics 365 Field Service Microsoft Dynamics 365 Field Service 是用來管理 現場服務 要求的周全 SaaS 解決方案。
UA 雲端指揮官 此開放原始碼參考應用程式會將傳送至消息佇列遙測傳輸(MQTT)或 Kafka 訊息代理程式(可能位於雲端中)的訊息轉換成連線 OPC UA 伺服器的 OPC UA 用戶端/伺服器要求。 應用程式會在 Docker 容器中執行。
UA 雲端動作 此開放原始碼參考雲端應用程式會查詢 Azure 資料總管中的特定資料值。 數據值是其中一部模擬生產線機器的壓力。 當達到特定閾值(4,000 mbar)時,它會透過 Azure 事件中樞 呼叫 UA 雲端指揮官。 UA 雲端指揮官接著會透過 OPC UA 在電腦上呼叫 OpenPressureReliefValve 方法。
UA 雲端連結庫 UA 雲端連結庫是 OPC UA 資訊模型的在線商店,由 OPC Foundation 在這裡裝載。
UA Edge 翻譯工具 此開放原始碼產業連線參考應用程式會使用 W3C 物聯網 (WoT) Thing Descriptions 將專屬資產介面轉譯為 OPC UA,作為描述產業資產介面的架構。

注意

在真實世界的部署中,像打開壓力緩解閥一樣重要的事情將在內部部署完成。 這隻是如何達成數位回饋循環的簡單範例。

雲端式 OPC UA 憑證儲存和儲存的記憶體

當製造商執行 OPC UA 應用程式時,必須保存其 OPC UA 組態檔、金鑰和憑證。 雖然 Kubernetes 能夠在磁碟區中保存這些檔案,但雲端是更安全的地方,尤其是在節點失敗時磁碟區遺失的單一節點叢集上。 此案例為何在此解決方案中使用的 OPC UA 應用程式會將其組態檔、金鑰和憑證儲存在雲端中。 此方法也有針對所有 OPC UA 應用程式提供單一位置給相互信任憑證的優點。

UA 雲端連結庫

您可以直接從 Azure 數據總管讀取 OPC UA 資訊模型。 您可以將 OPC UA 資訊模型中定義的 OPC UA 節點匯入數據表,以查閱查詢內更多元數據,以執行這項操作。

首先,在 ADX 叢集上執行下列查詢,以設定 UA 雲端連結庫的 Azure 數據總管 (ADX) 註標原則 (請確定您是 ADX 叢集管理員,可在 [Azure 入口網站] 的 [ADX] 索引卷標下設定:

.alter cluster policy callout @'[{"CalloutType": "webapi","CalloutUriRegex": "uacloudlibrary.opcfoundation.org","CanCall": true}]'

然後,從 Azure 入口網站 執行下列 Azure 數據總管查詢:

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/\<insert information model identifier from the UA Cloud Library here\>';
let headers=dynamic({'accept':'text/plain'});
let options=dynamic({'Authorization':'Basic \<insert your cloud library credentials hash here\>'});
evaluate http_request(uri, headers, options)
| project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
| mv-expand UAVariable=nodeset.UANodeSet.UAVariable
| project-away nodeset
| extend NodeId = UAVariable.['@NodeId'], DisplayName = tostring(UAVariable.DisplayName.['#text']), BrowseName = tostring(UAVariable.['@BrowseName']), DataType = tostring(UAVariable.['@DataType'])
| project-away UAVariable
| take 10000

您需要在此查詢中提供兩件事:

  • 資訊模型來自UA雲端連結庫的唯一標識碼,並將它 <輸入ADX查詢此處> 的[從雲端連結庫插入資訊模型標識符] 字段。
  • 您的 UA 雲端連結庫認證(在註冊期間產生)基本授權標頭哈希,並將其插入 <ADX 查詢的 [插入您的雲端連結庫認證哈希]> 字段中。 使用之類的 https://www.debugbear.com/basic-auth-header-generator 工具來產生這項功能。

例如,若要在 Kusto Explorer 工具 中轉譯生產線模擬站 OPC UA 伺服器的資訊模型,請執行下列查詢:

let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/1627266626';
let headers=dynamic({'accept':'text/plain'});
let options=dynamic({'Authorization':'Basic \<insert your cloud library credentials hash here\>'});
let variables = evaluate http_request(uri, headers, options)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAVariable = nodeset.UANodeSet.UAVariable
    | extend NodeId = UAVariable.['@NodeId'], ParentNodeId = UAVariable.['@ParentNodeId'], DisplayName = tostring(UAVariable['DisplayName']), DataType = tostring(UAVariable.['@DataType']), References = tostring(UAVariable.['References'])
    | where References !contains "HasModellingRule"
    | where DisplayName != "InputArguments"
    | project-away nodeset, UAVariable, References;
let objects = evaluate http_request(uri, headers, options)
    | project title = tostring(ResponseBody.['title']), contributor = tostring(ResponseBody.contributor.name), nodeset = parse_xml(tostring(ResponseBody.nodeset.nodesetXml))
    | mv-expand UAObject = nodeset.UANodeSet.UAObject
    | extend NodeId = UAObject.['@NodeId'], ParentNodeId = UAObject.['@ParentNodeId'], DisplayName = tostring(UAObject['DisplayName']), References = tostring(UAObject.['References'])
    | where References !contains "HasModellingRule"
    | project-away nodeset, UAObject, References;
let nodes = variables
    | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)
    | join kind=fullouter (objects
        | project source = tostring(NodeId), target = tostring(ParentNodeId), name = tostring(DisplayName)) on source
        | project source = coalesce(source, source1), target = coalesce(target, target1), name = coalesce(name, name1);
let edges = nodes;
edges
    | make-graph source --> target with nodes on source

為了獲得最佳結果,請將 Layout 選項變更為 Grouped ,並將 Lables 變更為 name

月臺資訊模型的圖表。

生產線模擬

此解決方案使用由數個月台組成的生產線模擬,使用 OPC UA 資訊模型,以及簡單的製造執行系統(MES)。 月臺和 MES 都會容器化,以方便部署。

預設模擬組態

模擬已設定為包含兩條生產線。 預設設定為:

生產線 理想的週期時間(以秒為單位)
幕尼黑 6
西雅圖 10
Shift 名稱 啟動 尾端
上午 07:00 14:00
下午 15:00 22:00
夜間 23:00 06:00

注意

班次是當地時間,特別是裝載生產線仿真的虛擬機 (VM) 所設定的時區。

月臺 OPC UA 伺服器的 OPC UA 節點識別碼

下列 OPC UA 節點識別碼用於月臺 OPC UA 伺服器,以遙測至雲端。

  • i=379 - 製造的產品序號
  • i=385 - 製造的產品數目
  • i=391 - 捨棄的產品數目
  • i=398 - 運行時間
  • i=399 - 錯誤時間
  • i=400 - 狀態 (0=月臺準備工作,1=進行中工作,2=工作完成,良好部分製造,3=工作完成,並已製造廢品,4=站處於故障狀態)
  • i=406 - 能源消耗
  • i=412 - 理想的周期時間
  • i=418 - 實際周期時間
  • i=434 - 壓力

使用UA雲端指揮官和UA雲端動作的數位意見反應迴圈

此參考實作會實作「數位回饋迴圈」,特別是根據達到特定閾值的時間序列數據,在雲端仿真的其中一部 OPC UA 伺服器上觸發命令。 您可以在 Azure 數據總管儀錶板中,定期在西雅圖生產線中看到元件機器的壓力。

安裝生產線模擬和雲端服務

按鍵會在 Microsoft Azure 上部署所有必要的資源:

部署至 Azure

在部署期間,您必須為用來裝載生產線模擬和 UA Cloud Twin 的 VM 提供密碼。 密碼必須具有下列三個屬性:一個小寫字元、一個大寫字元、一個數位和一個特殊字元。 密碼長度必須介於 12 到 72 個字元之間。

注意

為了節省成本,部署只會針對生產線模擬和 Azure Kubernetes Services Edge Essentials 實例的基本 OS 部署單一 Windows 11 企業版 VM。 在生產案例中,不需要生產線模擬,而且對於 Azure Kubernetes Services Edge Essentials 實例的基底 OS,我們建議使用 Windows IoT 企業版長期維護通道 (LTSC)。

部署完成後,請使用 RDP (遠端桌面) 連線到已部署的 Windows VM。 您可以在 VM 的 [Azure 入口網站] 頁面中,於 連線 選項下下載 RDP 檔案。 使用您在部署期間提供的認證登入、開啟 管理員 istrator Powershell 視窗、瀏覽至C:\ManufacturingOntologies-main\Deployment目錄,然後執行:

New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json

命令完成之後,您的 Azure Kubernetes Services Edge Essentials 安裝就會完成,而且您可以執行生產線模擬。

提示

若要隨時從所有 Kubernetes 工作負載和服務取得記錄,請從 管理員 istrator Powershell 窗口執行Get-AksEdgeLogs

若要檢查 Kubernetes 叢集的記憶體使用率,請從 管理員 istrator Powershell 窗口執行Invoke-AksEdgeNodeCommand -Command "sudo cat /proc/meminfo"

執行生產線模擬

從已部署的 VM 中,開啟 Windows 命令提示字元。 藉由提供下列參數,流覽至 C:\ManufacturingOntologies-main\Tools\FactorySimulation 目錄並執行 StartSimulation 命令:

    StartSimulation <EventHubsCS> <StorageAccountCS> <AzureSubscriptionID> <AzureTenantID>

參數:

參數 描述
EventHubCS 複製事件中樞命名空間 連接字串,如這裡所述
儲存體 AccountCS 在 Azure 入口網站 中,流覽至此解決方案所建立 儲存體 帳戶。 從左側導覽功能表中選取 [存取金鑰]。 然後,複製key1的連接字串。
AzureSubscriptionID 在 Azure 入口網站 中,流覽您的訂用帳戶,並複製此解決方案中使用的訂用帳戶標識碼。
AzureTenantID 在 Azure 入口網站 中,開啟 [Microsoft 項目標識符] 頁面,然後複製您的租用戶標識碼。

下列範例顯示具有所有參數的 命令:

    StartSimulation Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh= DefaultEndpointsProtocol=https;AccountName=ontologiesstorage;AccountKey=abcdefgh==;EndpointSuffix=core.windows.net <your-subscription-id> <your-tenant-id>

注意

如果您有數個 Azure 訂用帳戶的存取權,建議您先透過網頁瀏覽器從 VM 登入 Azure 入口網站。 您也可以透過 Azure 入口網站 UI 切換 Active Directory 租使用者(右上角),以確保您已登入部署期間使用的租使用者。 登入之後,讓瀏覽器視窗保持開啟狀態。 這可確保 StartSimulation 腳本可以更輕鬆地連線到正確的訂用帳戶。

在此解決方案中,適用於UA Cloud Publisher的 OPC UA 應用程式證書存儲,以及模擬生產線的 MES 和個別機器存放區,位於已部署 Azure 儲存體 帳戶的雲端中。

啟用 Kubernetes 叢集以透過 Azure Arc 進行管理

  1. 在您的虛擬機上,開啟 管理員 istrator PowerShell 視窗。 瀏覽至目錄並 C:\ManufacturingOntologies-main\Deployment 執行 CreateServicePrincipal。 這兩個參數subscriptionIDtenantID可以從 Azure 入口網站 擷取。

  2. 執行 notepad aksedge-config.json 並提供下列資訊:

    屬性 描述
    Location 資源群組的 Azure 位置。 您可以在針對此解決方案部署的資源群組下 Azure 入口網站 中找到此位置,但移除名稱中的空格! 目前支持的區域為 eastus、eastus2、westus、westus2、westus3、westeurope 和 northeurope。
    SubscriptionId 您的訂用帳戶識別碼。 在 Azure 入口網站 中,選取您使用的訂用帳戶,並複製/貼上訂用帳戶標識符。
    TenantId 您的租用戶識別碼。 在 Azure 入口網站 中,選取 [Azure Active Directory],然後複製/貼上租用戶標識符。
    ResourceGroupName 為此解決方案部署的 Azure 資源群組名稱。
    ClientId 先前建立的 Azure 服務主體名稱。 Azure Kubernetes Services 會使用此服務主體將叢集連線至 Arc。
    ClientSecret Azure 服務主體的密碼。
  3. 儲存盤案、關閉 PowerShell 視窗,然後開啟新的 管理員 istrator Powershell 視窗。 巡覽回目錄並 C:\ManufacturingOntologies-main\Deployment 執行 SetupArc

您現在可以透過新部署的 Azure Arc 實例,從雲端管理 Kubernetes 叢集。 在 Azure 入口網站 中,流覽至 Azure Arc 實例,然後選取 [工作負載]。 您可以從虛擬機上的 管理員 istrator Powershell 視窗擷Get-AksEdgeManagedServiceToken必要的服務令牌。

Azure 入口網站 中 Azure Arc 的螢幕快照。

在邊緣部署 Azure IoT 作業

請確定您已啟動生產線模擬,並啟用 Kubernetes 叢集以透過 Azure Arc 進行管理,如先前段落所述。 然後,請遵循下列步驟:

  1. 從 Azure 入口網站,流覽至此參考解決方案中部署的 金鑰保存庫,然後按下 Access policiesKeys, Secrets & Certificate ManagementCreate選取範本、Next選取範本、搜尋並選取您自己的使用者身分識別、選取 Next、將 [應用程式] 區段保留空白、選取Next最後Create
  2. 藉由先從 管理員 istrator PowerShell Window 登入 Azure az login 訂用帳戶,然後az connectedk8s enable-features -n "ontologies_cluster" -g "<resourceGroupName>" --features cluster-connect custom-locations部署的參考解決方案提供 ,resourceGroupName以啟用 Arc 連線 Kubernetes 叢集的自定義位置(稱為 ontologies_cluster)。
  3. 從 Azure 入口網站,流覽至 Arc 連線的 kubernetes 叢集,選取 ExtensionsAdd、選取 Azure IoT Operations,然後選取 Create。 在 [基本] 頁面上,保留所有專案。 在 [組態] 頁面上,將 設定 MQ ModeAuto。 您不需要部署仿真的可程式化邏輯控制器 (PLC),因為此參考解決方案已包含更大量的生產線模擬。 在 [自動化] 頁面上,選取為此參考解決方案部署的 金鑰保存庫,然後自動複製az iot ops init命令。 從已部署的 VM 中,開啟新的 管理員 istrator PowerShell Window,執行 az login ,然後使用來自 Azure 入口網站 的自變數執行 az iot ops init 命令,以登入正確的 Azure 訂用帳戶。 命令完成之後,請選取 Next 並關閉精靈。

設定 Azure IoT 作業的 OPC UA 安全性和連線能力

流覽至 Azure 入口網站 中已啟用 Arc 的 Kubernetes 資源,確定您已成功部署 Azure IoT 作業,且所有 Kubernetes 工作負載都已啟動並執行。

  1. 從 Azure 入口網站,流覽至此參考方案中部署的 Azure 儲存體,開啟 ,然後Blob containers開啟 Storage browser 。 您可以在這裡存取此解決方案中使用的雲端式 OPC UA 證書存儲。 Azure IoT 作業會使用 Azure 金鑰保存庫 作為雲端式 OPC UA 證書存儲,因此必須複製憑證:
    1. 從 Azure 儲存體 瀏覽器的 Blob 容器內,針對每個模擬生產線,流覽至 app/pki/trusted/certs 資料夾、選取元件、封裝和測試憑證檔案並下載。
    2. 管理員 istrator PowerShell 視窗登入您的 Azure 訂az login用帳戶,然後執行 az keyvault secret set --name "<stationName>-der" --vault-name <keyVaultName> --file .<stationName>.der --encoding hex --content-type application/pkix-cert,並提供keyVaultName您在上一個步驟中下載 .der 憑證檔案的 6 個站台中的 和 stationName
  2. 從已部署的 VM 中,開啟 Windows 命令提示字元,並使用目錄中提供的C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station更新秘密提供者資源文件來執行kubectl apply -f secretsprovider.yaml,並提供您先前上傳至 Azure 金鑰保存庫 的 金鑰保存庫 名稱、Azure 租使用者識別符,以及月台憑證檔名和別名。
  3. 從網頁瀏覽器登入 https://iotoperations.azure.com,挑選正確的 Azure 目錄(右上角),並開始從生產線模擬建立資產。 解決方案隨附兩條生產線(慕尼克和西雅圖),各有三個月臺(元件、測試和包裝):
    1. 針對資產端點,在慕尼黑生產線元件站的 OPC UA Broker URL 欄位中輸入 opc.tcp://assembly.munich 等。選取 Do not use transport authentication certificate [Azure IoT 作業與任何連線的 OPC UA 伺服器之間的 OPC UA 憑證型相互驗證] 仍在使用中。
    2. 針對資產標籤,選取 Import CSV file 並開啟 StationTags.csv 位於 目錄中的 C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station 檔案。
  4. 從 Azure 入口網站,流覽至此參考方案中部署的 Azure 儲存體,開啟 ,然後Blob containers開啟 Storage browser 。 針對仿真的每個生產線,流覽至 app/pki/rejected/certs 資料夾並下載 Azure IoT 作業憑證檔案。 然後刪除檔案。 流覽至資料夾, app/pki/trusted/certs 並將 Azure IoT Operations 憑證檔案上傳至此目錄。
  5. 從已部署的 VM 中,開啟 Windows 命令提示字元,然後瀏覽至C:\ManufacturingOntologies-main\Tools\FactorySimulation目錄並執行 StopSimulation 命令,然後執行 StartSimulation 命令,然後重新啟動生產線模擬。
  6. 依照這裡所述的指示,確認數據是否從生產線模擬流動。
  7. 最後一個步驟是,將 Azure IoT 作業連線至此參考解決方案中部署的事件中樞,如這裡所述

使用案例條件監視、計算 OEE、偵測異常,以及在 Azure 數據總管中做出預測

您也可以流覽 Azure 數據總管檔 ,瞭解如何建立無程式代碼儀錶板,以進行條件監視、產生或維護預測,或異常偵測。 我們在這裡提供範例儀錶板,可讓您遵循此處所述的步驟來部署至 ADX 儀錶板。 匯入之後,您必須以儀錶板右上角的格式 https://ADXInstanceName.AzureRegion.kusto.windows.net/ 指定 ADX 伺服器叢集實例的 HTTPS 端點,以更新儀錶板的數據源。

Azure 數據總管儀錶板的螢幕快照。

注意

如果您想要顯示特定班次的 OEE,請在 ADX 儀錶板左上角的下拉式清單中選取 Custom Time RangeTime Range ,然後輸入您感興趣的班次開始到結尾的日期和時間。

在 Kusto Explorer 中轉譯內建的 Unified NameSpace (UNS) 和 ISA-95 模型圖形

此參考解決方案會根據傳送至雲端中時間序列資料庫的 OPC UA 元數據,實作整合名稱Sapce (UNS)。 此 OPC UA 元數據也包含 ISA-95 資產階層。 您可以在這裡下載的 Kusto Explorer 工具中輕鬆地將產生的圖形可視化。

將新的連線新增至此參考解決方案中部署的 Azure 數據總管實例,然後在 Kusto Explorer 中執行下列查詢:

let edges = opcua_metadata_lkv
| project source = DisplayName, target = Workcell
| join kind=fullouter (opcua_metadata_lkv
    | project source = Workcell, target = Line) on source
    | join kind=fullouter (opcua_metadata_lkv
        | project source = Line, target = Area) on source
        | join kind=fullouter (opcua_metadata_lkv
            | project source = Area, target = Site) on source
            | join kind=fullouter (opcua_metadata_lkv
                | project source = Site, target = Enterprise) on source
                | project source = coalesce(source, source1, source2, source3, source4), target = coalesce(target, target1, target2, target3, target4);
let nodes = opcua_metadata_lkv;
edges | make-graph source --> target with nodes on DisplayName

為了獲得最佳結果,請將 Layout 選項變更為 Grouped

顯示 ISA-95 資產階層的圖表。

使用 Azure 受控 Grafana 服務

您也可以使用 Grafana 為本文所述的解決方案在 Azure 上建立儀錶板。 Grafana 用於製造中,以建立顯示即時數據的儀錶板。 Azure 提供名為 Azure Managed Grafana 的服務。 透過此專案,您可以建立雲端儀錶板。 在此設定手冊中,您會在 Azure 上啟用 Grafana,並使用此參考解決方案的模擬生產線數據,建立具有從 Azure 數據總管和 Azure Digital Twins 服務查詢數據的儀錶板。

下列螢幕快照顯示儀錶板:

顯示 Grafana 儀錶板的螢幕快照。

啟用 Azure 受控 Grafana 服務

  1. 移至 Azure 入口網站 並搜尋服務 'Grafana',然後選取 [Azure 受控 Grafana] 服務。

    在 Marketplace 中啟用 Grafana 的螢幕快照。

  2. 為您的實例指定名稱,並將標準選項保留為 - 並建立服務。

  3. 建立服務之後,流覽至您存取 Grafana 實例的 URL。 您可以在服務的首頁中找到URL。

在 Grafana 中新增數據來源

第一次登入之後,您必須將新的數據源新增至 Azure 數據總管。

  1. 流覽至 [組態] 並新增數據源。

  2. 搜尋 Azure 數據總管並選取服務。

  3. 設定連線並使用應用程式註冊(請遵循此頁面頂端提供的手動操作)。

  4. 儲存並測試頁面底部的連線。

匯入範例儀錶板

現在您已準備好匯入提供的範例儀錶板。

  1. 在這裡下載範例儀錶板: 範例 Grafana 製造儀錶板

  2. 移至 [儀錶板],然後選取 [匯入]。

  3. 選取您已下載的來源,然後選取 [儲存]。 因為尚未設定兩個變數,因此您會在頁面上收到錯誤。 移至儀錶板的 [設定] 頁面。

  4. 選取 [變數] 左側的 ,並使用 Azure Digital Twins 服務的 URL 更新兩個 URL。

  5. 瀏覽回儀表板並按 [重新整理] 按鈕。 您現在應該會看到數據(別忘了點擊儀錶板上的儲存按鈕)。

    頁面頂端的位置變數會自動填入來自 Azure Digital Twins 的數據(ISA95 的區域節點)。 您可以在這裡選取不同的位置,並查看每個處理站的不同數據點。

  6. 如果儀錶板中未顯示數據,請流覽至個別面板,並查看是否已選取正確的數據源。

設定警示

在 Grafana 中,您也可以建立警示。 在此範例中,我們會為其中一個生產線建立低 OEE 警示。

  1. 登入 Grafana 服務,然後選取功能表中的 [警示規則]。

    顯示流覽至警示的螢幕快照。

  2. 選取 [建立警示規則]。

    顯示如何建立警示規則的螢幕擷取畫面。

  3. 為您的警示命名,然後選取 [Azure 數據總管] 作為數據源。 在瀏覽窗格中選取查詢。

    建立警示查詢的螢幕快照。

  4. 在查詢欄位中,輸入下列查詢。 在此範例中,我們使用 'Seattle' 生產線。

    let oee = CalculateOEEForStation("assembly", "seattle", 6, 6);
    print round(oee * 100, 2)
    
  5. 選取 [數據表] 作為輸出。

  6. 向下捲動至下一節。 在這裡,您會設定警示閾值。 在此範例中,我們會使用 『below 10』 作為臨界值,但在生產環境中,此值可能更高。

    顯示臨界值警示的螢幕快照。

  7. 選取您要儲存警示的資料夾,並設定 「警示評估行為」。 選取 [每 2 分鐘] 選項。

  8. 選取 [儲存並結束] 按鈕。

在警示概觀中,您現在可以在 OEE 低於 '10' 時看到觸發警示。

顯示警示概觀的螢幕快照。

您可以將此設定與 Microsoft Dynamics Field Services 等整合。

連線 Microsoft Power BI 的參考解決方案

若要連線參考解決方案 Power BI,您需要存取 Power BI 訂用帳戶。

完成下列步驟:

  1. 從這裡安裝Power BI Desktop 應用程式。

  2. 使用具有Power BI訂用帳戶存取權的使用者登入Power BI Desktop 應用程式。

  3. 從 Azure 入口網站,流覽至您的 Azure 數據總管資料庫實例 (ontologies),並將許可權新增Database Admin至只有單Azure 訂用帳戶的 Azure Active Directory 使用者,特別是用於此參考解決方案已部署實例的訂用帳戶。 如果您需要,請在 Azure Active Directory 中建立新的使用者。

  4. 從 Power BI 建立新的報表,然後透過 Get data - -Azure>>Azure Data Explorer (Kusto),選取 [Azure 數據總管] 時間序列資料作為數據源。

  5. 在彈出視窗中,輸入實例的 Azure 數據總管端點(例如 https://erichbtest3adx.eastus2.kusto.windows.net)、資料庫名稱 (ontologies) 和下列查詢:

    let _startTime = ago(1h);
    let _endTime = now();
    opcua_metadata_lkv
    | where Name contains "assembly"
    | where Name contains "munich"
    | join kind=inner (opcua_telemetry
        | where Name == "ActualCycleTime"
        | where Timestamp > _startTime and Timestamp < _endTime
    ) on DataSetWriterID
    | extend NodeValue = todouble(Value)
    | project Timestamp, NodeValue
    
  6. 選取 Load。 這會將慕尼黑生產線組裝站的實際週期時間匯入過去一小時。

  7. 出現提示時,請使用您稍早授與存取 Azure 數據總管資料庫許可權的 Azure Active Directory 使用者登入 Azure 數據總管。

  8. Data view從 中,選取 [NodeValue] 資料行,Summarization然後在功能表項中選取 Don't summarize

  9. 切換到 Report view

  10. 在 底下 Visualizations,選取視覺效果 Line Chart

  11. 在底下Visualizations,將 從Data來源X-axis移至 Timestamp ,選取它,然後選取 Timestamp

  12. 在底下Visualizations,將 從Data來源Y-axis移至 NodeValue ,選取它,然後選取 Median

  13. 儲存新的報表。

    注意

    您也可以將其他數據從 Azure 數據總管新增至報表。

    Power BI 檢視的螢幕快照。

連線 Microsoft Dynamics 365 Field Service 的參考解決方案

此整合展示了下列案例:

  • 將資產從製造待辦專案參考解決方案上傳至 Dynamics 365 Field Service。
  • 當達到製造待辦專案參考解決方案遙測數據的特定閾值時,在 Dynamics 365 Field Service 中建立警示。

整合會使用 Azure Logics Apps。 透過Logic Apps bussiness-critcal 應用程式和服務,可以透過無程式代碼工作流程連線。 我們會從 Azure 數據總管擷取資訊,並在 Dynamics 365 Field Service 中觸發動作。

首先,如果您還不是 Dynamics 365 Field Service 客戶,請在這裡啟用 30 天的試用版。 請記得使用部署製造待辦專案參考解決方案時所使用的相同 Microsoft Entra ID(先前稱為 Azure Active Directory)。 否則,您必須設定不屬於這些指示的跨租用戶驗證!

建立 Azure 邏輯應用程式工作流程,以在 Dynamics 365 Field Service 中建立資產

讓我們從製造待辦專案將資產上傳至 Dynamics 365 Field Service 開始:

  1. 移至 Azure 入口網站 並建立新的邏輯應用程式。

  2. 為 Azure 邏輯應用程式命名,將其放在與製造待辦專案參考解決方案相同的資源群組中。

  3. 選取 [工作流程]。

  4. 為您的工作流程命名 - 在此案例中,我們會使用具狀態類型,因為資產不是數據流。

  5. 建立新的觸發程式。 我們從建立「週期」觸發程序開始。 這會每天檢查是否已建立新的資產。 您可以將此變更為更頻繁地發生。

  6. 在動作中,搜尋 Azure Data Explorer 並選取 Run KQL query 命令。 在此查詢中,我們會檢查我們所擁有的資產類型。 使用下列查詢來取得資產,並將其貼到查詢欄位中:

    let ADTInstance =  "PLACE YOUR ADT URL";let ADTQuery = "SELECT T.OPCUAApplicationURI as AssetName, T.$metadata.OPCUAApplicationURI.lastUpdateTime as UpdateTime FROM DIGITALTWINS T WHERE IS_OF_MODEL(T , 'dtmi:digitaltwins:opcua:nodeset;1') AND T.$metadata.OPCUAApplicationURI.lastUpdateTime > 'PLACE DATE'";evaluate azure_digital_twins_query_request(ADTInstance, ADTQuery)
    
  7. 若要將資產數據放入 Dynamics 365 Field Service,您需要連線到 Microsoft Dataverse。 連線 Dynamics 365 Field Service 實例,並使用下列組態:

    • 使用「客戶資產」數據表名稱
    • 將 'AssetName' 放入 [名稱] 欄位中
  8. 儲存您的工作流程並加以執行。 您會在幾秒鐘後看到 Dynamics 365 Field Service 中建立新的資產。

建立 Azure 邏輯應用程式工作流程,以在 Dynamics 365 Field Service 中建立警示

此工作流程會在 Dynamics 365 Field Service 中建立警示,特別是當達到製造待辦專案參考解決方案資產的 FaultyTime 特定閾值時。

  1. 我們必須先建立 Azure 數據總管函式,以取得正確的數據。 移至 Azure 入口網站 中的 Azure 數據總管查詢面板,然後執行下列程式代碼來建立 FaultyFieldAssets 函式:

    建立函式 ADX 查詢的螢幕快照。

    .create-or-alter function  FaultyFieldAssets() {  
    let Lw_start = ago(3d);
    opcua_telemetry
    | where Name == 'FaultyTime'
    and Value > 0
    and Timestamp between (Lw_start .. now())
    | join kind=inner (
        opcua_metadata
        | extend AssetList =split (Name, ';')
        | extend AssetName=AssetList[0]
        ) on DataSetWriterID
    | project AssetName, Name, Value, Timestamp}
    
  2. 在 Azure 邏輯應用程式中建立新的工作流程。 建立要啟動的「週期」觸發程式 - 每 3 分鐘一次。 建立為動作 'Azure 數據總管',然後選取 [執行 KQL 查詢]。

  3. 輸入您的 Azure 資料總管叢集 URL,然後選取您的資料庫,並使用在步驟 1 中建立的函式名稱作為查詢。

  4. 選取 [Microsoft Dataverse] 作為動作。

  5. 執行工作流程,並查看 Dynamics 365 Field Service 儀錶板中產生的新警示:

    Dynamics 365 FS 中警示的螢幕快照。