Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I produttori vogliono distribuire una soluzione IoT industriale complessiva su scala globale e connettere tutti i siti di produzione a questa soluzione per aumentare l'efficienza per ogni singolo sito di produzione.
L’aumento di efficienza assicura una produzione più rapida e un ridotto consumo energetico, con una riduzione dei costi dei beni prodotti e, nella maggior parte dei casi, un aumento della qualità di questi ultimi.
La soluzione deve essere il più efficiente possibile e abilitare tutti i casi d'uso necessari, ad esempio il monitoraggio delle condizioni, il calcolo complessivo dell'efficacia delle apparecchiature (OEE), la previsione e il rilevamento anomalie. Usando le informazioni dettagliate ottenute da questi casi d'uso, è quindi possibile creare un ciclo di feedback digitale che può quindi applicare ottimizzazioni e altre modifiche ai processi di produzione.
L'interoperabilità è la chiave per ottenere un'implementazione rapida dell'architettura della soluzione. L'uso di standard aperti come OPC UA contribuisce significativamente a raggiungere questa interoperabilità.
Questa esercitazione illustra come distribuire una soluzione IoT industriale usando i servizi di Azure. Questa soluzione usa iec 62541 Open Platform Communications (OPC) Unified Architecture (UA) per tutti i dati della tecnologia operativa (OT).
Prerequisiti
Per completare i passaggi di questa esercitazione, è necessaria una sottoscrizione di Azure. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Architettura della soluzione di riferimento
I diagrammi seguenti illustrano l'architettura della soluzione IoT industriale:
Architettura semplificata che mostra le opzioni di Azure e Microsoft Fabric:
Architettura dettagliata che mostra l'opzione Azure:
Nella tabella seguente vengono descritti i componenti chiave di questa soluzione:
Componente | Descrizione |
---|---|
Asset industriali | Set di linee di produzione abilitate per OPC UA simulate ospitate nei contenitori Docker. |
Operazioni di Azure IoT | Le operazioni di Azure IoT sono un piano dati unificato per l’analisi di flusso in dispositivi perimetrali. Include un set di servizi dati modulari, scalabili e a disponibilità elevata eseguiti nei cluster Kubernetes perimetrali abilitati per Azure Arc. |
Gateway dati | Questo gateway connette le origini dati locali, ad esempio SAP, a App per la logica di Azure nel cloud. |
Hub eventi di Azure | Gestore di messaggi cloud che riceve i messaggi pub/sub OPC UA dai gateway perimetrali e li archivia fino a quando non viene recuperato dai sottoscrittori. |
Esplora dati di Azure | Il database di serie temporale e il servizio dashboard front-end per l’analisi cloud avanzata, tra cui il rilevamento e le stime delle anomalie predefiniti. |
App per la logica di azure | App per la logica di Azure è una piattaforma cloud che è possibile usare per creare ed eseguire flussi di lavoro automatizzati senza codice. |
Azure Arc | Il servizio cloud viene usato per gestire il cluster Kubernetes locale nell’analisi di flusso di Azure in IoT Edge. |
Grafana con gestione Azure | Grafana con gestione Azure è una piattaforma di visualizzazione dei dati basata sul software Grafana di Grafana Labs. Grafana è un servizio completamente gestito che Microsoft ospita e supporta. |
Microsoft Power BI | Microsoft Power BI è una raccolta di servizi software SaaS, app e connettori che interagiscono per trasformare le origini dati non correlate in informazioni dettagliate coerenti, visivamente accattivanti e interattive. |
Microsoft Dynamics 365 Field Service | Microsoft Dynamics 365 Field Service è una soluzione SaaS chiavi in mano per la gestione delle richieste di Field Service. |
UA Cloud Commander | Questa applicazione di riferimento open source converte i messaggi inviati a un broker MQTT o Kafka (possibilmente nel cloud) in richieste client/server OPC UA per un server OPC UA connesso. L'applicazione è eseguita da un contenitore Docker. |
Azione cloud UA | L’applicazione cloud di riferimento open source esegue una query in Esplora dati di Azure per un valore di dati specifico. Il valore di dati è la pressione in uno dei computer della linea di produzione simulata. Chiama l’UA Cloud Commander tramite Hub eventi di Azure quando viene raggiunta una determinata soglia (4.000 mbar). UA Cloud Commander chiama quindi il metodo OpenPressureReliefValve sul computer tramite OPC UA. |
Raccolta cloud UA | La libreria cloud UA è un archivio online di modelli informativi OPC UA, ospitati da OPC Foundation. |
Traduttore Edge UA | Questa applicazione di riferimento per la connettività industriale open source si traduce da interfacce di asset proprietarie a OPC UA. La soluzione usa le descrizioni W3C Web of Things come schema per descrivere l'interfaccia degli asset industriali. |
Nota
Nella distribuzione reale, un’operazione fondamentale come l’apertura di una valvola di limitazione della pressione verrebbe eseguita localmente. Questo esempio illustra semplicemente come ottenere il ciclo di feedback digitale.
Simulazione della linea di produzione
La soluzione usa una simulazione della linea di produzione costituita da diverse stazioni, utilizzando il modello informativo OPC UA della stazione e un semplice sistema di esecuzione della produzione (MES). Sia le stazioni che mes sono incluse in contenitori per semplificare la distribuzione.
La simulazione è configurata per includere due linee di produzione. La configurazione predefinita è:
Linea di produzione | Durata ciclo ideale (in secondi) |
---|---|
Monaco | 6 |
Seattle | 10 |
Nome turno | Inizia | Fine |
---|---|---|
Morning | 07:00 | 14:00:00 |
Afternoon | 15:00:00 | 22:00 |
Notte | 23:00 | 06:00 |
Nota
Gli orari del turno si basano sull'ora locale, in particolare il fuso orario su cui è impostata la macchina virtuale che ospita la simulazione della linea di produzione.
Il server OPC UA della stazione usa gli ID dei nodi OPC UA seguenti per la telemetria nel cloud:
- i=379 - numero di serie del prodotto realizzato
- i=385 - numero di prodotti realizzati
- i=391 - numero di prodotti scartati
- i=398 - tempo di esecuzione
- i=399 -tempo di errore
- i=400 - stato (0=stazione pronta per eseguire il lavoro, 1=lavoro in corso, 2=lavoro eseguito e gran parte del prodotto realizzato, 3=lavoro eseguito e scarti prodotti, 4=stazione in stato di errore)
- i=406 - consumo energetico
- i=412 - durata ciclo ideale
- i=418 - durata ciclo effettivo
- i=434 - pressione
Ciclo di feedback digitale con UA Cloud Commander e UA Cloud Action
La soluzione usa un ciclo di feedback digitale per gestire la pressione in una stazione simulata. Per implementare il ciclo di feedback, la soluzione attiva un comando dal cloud in uno dei server OPC UA nella simulazione. Il trigger viene attivato quando i dati di pressione delle serie temporali simulati raggiungono una determinata soglia. È possibile visualizzare la pressione del computer dell'assembly nel dashboard di Azure Esplora dati. La pressione viene rilasciata a intervalli regolari per la linea di produzione di Seattle.
Installare la simulazione della linea di produzione e i servizi cloud
Selezionare il pulsante Distribuisci per distribuire tutte le risorse necessarie nella sottoscrizione di Azure:
Il processo di distribuzione richiede di specificare una password per la macchina virtuale (VM) che ospita la simulazione della linea di produzione e l'infrastruttura perimetrale. La password deve includere tre di: un carattere minuscolo, un carattere maiuscolo, un numero e un carattere speciale. La lunghezza della password deve essere compresa tra 12 e 72 caratteri.
Nota
Per ridurre i costi, la distribuzione crea una singola macchina virtuale Windows 11 Enterprise sia per la simulazione della linea di produzione che per l'infrastruttura Perimetrale. In uno scenario di produzione, la simulazione della linea di produzione non è necessaria e per il sistema operativo di base è consigliabile usare Windows IoT Enterprise Long Term Servicing Channel.
Al termine della distribuzione, usare RDP per connettersi alla macchina virtuale Windows distribuita. È possibile scaricare il file RDP dalle opzioni Connetti nella pagina della macchina virtuale nel portale di Azure. Accedere usando le credenziali specificate durante la distribuzione, aprire un prompt dei comandi di Windows e usare il comando seguente per installare il sottosistema Windows per Linux (WSL):
wsl --install
Al termine del comando, riavviare la macchina virtuale ed eseguire di nuovo l'accesso. Un prompt dei comandi completa l'installazione di WSL e viene richiesto di immettere un nuovo nome utente e una nuova password per WSL. In WSL usare quindi il comando seguente per installare K3S, un runtime Kubernetes leggero:
curl -sfL https://get.k3s.io | sh
La macchina virtuale è ora pronta per eseguire la simulazione della linea di produzione.
Eseguire la simulazione della linea di produzione
Nella macchina virtuale aprire un prompt dei comandi di Windows, immettere wsl e premere INVIO. Passare alla /mnt/c/ManufacturingOntologies-main/Tools/FactorySimulation
directory ed eseguire lo script della shell StartSimulation :
sudo ./StartSimulation.sh "<Your Event Hubs connection string>"
<Your Event Hubs connection string>
è lo spazio dei nomi di Hub eventi stringa di connessione. Per altre informazioni, vedere Ottenere una stringa di connessione di Hub eventi. Un stringa di connessione ha un aspetto simile al seguente:Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh=
Nota
Se l'indirizzo IP esterno per un servizio Kubernetes viene visualizzato come <pending>
, usare il comando seguente per assegnare l'indirizzo IP esterno del traefik
servizio: sudo kubectl patch service <theService> -n <the service's namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["<the traefik external IP address>"]}}'
.
Suggerimento
Per impedire l'arresto automatico di WSL e K3s, mantenere aperto il prompt dei comandi WSL.
Raccolta cloud UA
Per leggere i modelli di informazioni OPC UA direttamente da Azure Esplora dati, è possibile importare i nodi OPC UA definiti in un modello di informazioni OPC UA in una tabella. È possibile usare le informazioni importate per la ricerca di altri metadati all'interno delle query.
Prima di tutto, configurare un criterio di callout di Azure Esplora dati per la libreria cloud UA eseguendo la query seguente nel cluster di Azure Esplora dati. Prima di iniziare, assicurarsi di essere membri del ruolo AllDatabasesAdmin nel cluster, che è possibile configurare nel portale di Azure passando alla pagina Autorizzazioni per il cluster di Azure Esplora dati.
.alter cluster policy callout @'[{"CalloutType": "webapi","CalloutUriRegex": "uacloudlibrary.opcfoundation.org","CanCall": true}]'
Eseguire quindi la query di Azure Esplora dati seguente dal portale di Azure. Nella query:
- Sostituire
<INFORMATION_MODEL_IDENTIFIER_FROM_THE_UA_CLOUD_LIBRARY>
con l'ID univoco del modello informativo da importare dalla libreria cloud UA. È possibile trovare questo ID nell'URL della pagina del modello di informazioni nella libreria cloud UA. Ad esempio, l'ID del set di nodi della stazione usato da questa esercitazione è1627266626
. - Sostituire
<HASHED_CLOUD_LIBRARY_CREDENTIALS>
con un'intestazione di autorizzazione di base con le credenziali della libreria cloud UA. Usare uno strumento come https://www.debugbear.com/basic-auth-header-generator per generare l'hash. È anche possibile usare il comando bash seguente:echo -n 'username:password' | base64
.
let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/<INFORMATION_MODEL_IDENTIFIER_FROM_THE_UA_CLOUD_LIBRARY>';
let headers=dynamic({'accept':'text/plain', 'Authorization':'Basic <HASHED_CLOUD_LIBRARY_CREDENTIALS>'});
evaluate http_request(uri, headers)
| 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
Per visualizzare una rappresentazione grafica di un modello di informazioni OPC UA, è possibile usare lo strumento Kusto Explorer. Per eseguire il rendering del modello di stazione, eseguire la query seguente in Kusto Explorer. Per ottenere risultati ottimali, modificare l'opzione Layout
in Grouped
e in Labels
name
:
let uri='https://uacloudlibrary.opcfoundation.org/infomodel/download/1627266626';
let headers=dynamic({'accept':'text/plain', 'Authorization':'Basic <HASHED_CLOUD_LIBRARY_CREDENTIALS>'});
let variables = evaluate http_request(uri, headers)
| 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)
| 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
Facoltativamente, distribuire le operazioni di Azure IoT sul perimetro
Per impostazione predefinita, la simulazione della linea di produzione invia i dati direttamente all'endpoint dell'hub dati nello spazio dei nomi di Hub eventi.
Per gestire questo processo, è invece possibile usare operazioni IoT di Azure sul perimetro. Le operazioni di Azure IoT sono un piano dati unificato per l’analisi di flusso in dispositivi perimetrali. Include un set di servizi dati modulari, scalabili e a disponibilità elevata eseguiti nei cluster Kubernetes perimetrali abilitati per Azure Arc.
Prima di distribuire Le operazioni IoT di Azure, verificare di aver avviato la simulazione della linea di produzione. Seguire quindi questa procedura nei dettagli della distribuzione di Operazioni IoT di Azure.
Suggerimento
È possibile usare la macchina virtuale e l'istanza K3S distribuite in precedenza in questa esercitazione per distribuire ed eseguire operazioni IoT di Azure.
Configurare la distribuzione di Azure IoT Operations
È possibile configurare la distribuzione di Operazioni IoT di Azure usando l'interfaccia utente Web dell'esperienza operativa. Aggiungere gli endpoint, gli asset e i flussi di dati degli asset per elaborare i dati dalla simulazione della linea di produzione e indirizzarli all'hub dati nello spazio dei nomi di Hub eventi.
Nella distribuzione di Azure IoT Operations creare endpoint asset che definiscono le connessioni ai server OPC UA seguenti nella simulazione di produzione:
opc.tcp://assembly.munich/
opc.tcp://test.munich/
opc.tcp://packaging.munich/
opc.tcp://assembly.seattle/
opc.tcp://test.seattle/
opc.tcp://packaging.seattle/
Monitoraggio delle condizioni dei casi d'uso, calcolo OEE, rilevamento anomalie e stime in Azure Esplora dati
Per informazioni su come creare dashboard senza codice per il monitoraggio delle condizioni, la produzione o la manutenzione o il rilevamento anomalie, vedere la documentazione di Azure Esplora dati. È anche disponibile un dashboard di esempio che è possibile distribuire. Per informazioni su come distribuire un dashboard, vedere Visualizzare i dati con i dashboard > di Azure Esplora dati creati da file. Dopo aver importato il dashboard, aggiornarne l'origine dati. Specificare l'endpoint HTTPS del cluster del server di Azure Esplora dati nell'angolo superiore destro del dashboard. L'endpoint HTTPS è simile al seguente: https://<ADXInstanceName>.<AzureRegion>.kusto.windows.net/
.
Nota
Per visualizzare OEE per uno specifico turno, selezionare Intervallo di tempo personalizzato nell'elenco a discesa Intervallo di tempo nell'angolo in alto a sinistra del dashboard di Azure Esplora dati e immettere la data e l'ora dall'inizio alla fine del turno a cui si è interessati.
Eseguire il rendering del grafico del modello Unified NameSpace (UNS) e ISA-95 in Kusto Explorer
Questa soluzione di riferimento implementa uno spazio dei nomi unificato (UNS), in base ai metadati OPC UA inviati al database time series di Azure Esplora dati nel cloud. Questi metadati OPC UA includono la gerarchia di asset ISA-95. È possibile visualizzare il grafico risultante nello strumento Kusto Explorer.
Aggiungere una nuova connessione all'istanza di Azure Esplora dati e quindi eseguire la query seguente in 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
Per risultati ottimali, modificare l'opzione Layout
in Grouped
.
Usare Grafana gestito di Azure
È anche possibile usare Grafana gestito di Azure per creare un dashboard in Azure per la soluzione descritta in questo articolo. Usare Grafana all'interno della produzione per creare dashboard che visualizzano dati in tempo reale. I passaggi seguenti illustrano come abilitare Grafana in Azure e creare un dashboard con i dati della linea di produzione simulati da Azure Esplora dati.
Abilitare il servizio Grafana gestito di Azure
Per creare un servizio Grafana gestito di Azure e configurarlo con le autorizzazioni per accedere al database di onlogi:
Nella portale di Azure cercare Grafana e quindi selezionare il servizio Grafana gestito di Azure.
Per creare il servizio, nella pagina Crea area di lavoro Grafana immettere un nome per l'istanza. Scegliere tutte le opzioni predefinite.
Dopo aver creato il servizio, assicurarsi che l'istanza di Grafana abbia un'identità gestita assegnata dal sistema, passare al pannello Identità dell'istanza di Grafana gestita di Azure nella portale di Azure. Se l'identità gestita assegnata dal sistema non è abilitata, abilitarla. Prendere nota del valore ID Oggetto (entità), necessario in un secondo momento.
Per concedere all'identità gestita l'autorizzazione per accedere al database di onlogi in Azure Esplora dati:
- Passare al pannello Autorizzazioni nell'istanza di Azure Esplora dati nel portale di Azure.
- Selezionare Aggiungi > TuttiDatabasesViewer.
- Cercare e selezionare il valore ID Oggetto (entità), annotato in precedenza.
Aggiungere una nuova origine dati in Grafana
Aggiungere una nuova origine dati per connettersi ad Azure Esplora dati. In questo esempio viene usata un'identità gestita assegnata dal sistema per connettersi ad Azure Esplora dati. Per configurare l'autenticazione, seguire questa procedura:
Per aggiungere l'origine dati in Grafana, seguire questa procedura:
Passare all'URL dell'endpoint per l'istanza di Grafana. È possibile trovare l'URL dell'endpoint nella pagina Grafana gestita di Azure per l'istanza nel portale di Azure. Accedere quindi all'istanza di Grafana.
Nel dashboard di Grafana selezionare Connessioni > origini dati e quindi selezionare Aggiungi nuova origine dati. Scorrere verso il basso e selezionare Azure Esplora dati Origine dati.
Scegliere Identità gestita come menu di autenticazione. Aggiungere quindi l'URL del cluster di Azure Esplora dati. È possibile trovare l'URL nel menu dell'istanza di Azure Esplora dati nel portale di Azure in URI.
Selezionare Salva e testa per verificare la connessione all'origine dati.
Importare un dashboard di esempio
A questo momento è possibile importare il dashboard di esempio.
Scaricare il dashboard sample Grafana Manufacturing Dashboard (Dashboard di produzione Grafana).
Nel menu Grafana passare a Dashboard e quindi selezionare Nuova > importazione.
Selezionare Carica file JSON del dashboard e selezionare il file samplegrafanadashboard.json scaricato in precedenza. Selezionare Importa.
Nel pannello Stazione OEE selezionare Modifica e quindi selezionare l'origine dati di Azure Esplora dati configurata in precedenza. Selezionare quindi KQL nel pannello query e aggiungere la query seguente:
print round (CalculateOEEForStation('${Station}', '${Location}', '${CycleTime}', '${__from:date:iso}', '${__to:date:iso}') * 100, 2)
. Selezionare Applica per applicare le modifiche e tornare al dashboard.Nel pannello Linea OEE selezionare Modifica e quindi selezionare l'origine dati di Azure Esplora dati configurata in precedenza. Selezionare quindi KQL nel pannello query e aggiungere la query seguente:
print round(CalculateOEEForLine('${Location}', '${CycleTime}', '${__from:date:iso}', '${__to:date:iso}') * 100, 2)
. Selezionare Applica per applicare le modifiche e tornare al dashboard.Nel pannello Prodotti rimossi selezionare Modifica e quindi selezionare l'origine dati di Azure Esplora dati configurata in precedenza. Selezionare quindi KQL nel pannello query e aggiungere la query seguente:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry| where Name == "NumberOfDiscardedProducts"| where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend numProd = toint(Value)| summarize max(numProd)
. Selezionare Applica per applicare le modifiche e tornare al dashboard.Nel pannello Prodotti prodotti selezionare Modifica e quindi selezionare l'origine dati di Azure Esplora dati configurata in precedenza. Selezionare quindi KQL nel pannello query e aggiungere la query seguente:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry| where Name == "NumberOfManufacturedProducts"| where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend numProd = toint(Value)| summarize max(numProd)
. Selezionare Applica per applicare le modifiche e tornare al dashboard.Nel pannello Consumo energia selezionare Modifica e quindi selezionare l'origine dati di Azure Esplora dati configurata in precedenza. Selezionare quindi KQL nel pannello query e aggiungere la query seguente:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry | where Name == "Pressure" | where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend energy = todouble(Value)| summarize avg(energy)); print round(toscalar(averageEnergyConsumption) * 1000, 2)
. Selezionare Applica per applicare le modifiche e tornare al dashboard.Nel pannello Pressione selezionare Modifica e quindi selezionare l'origine dati di Azure Esplora dati configurata in precedenza. Selezionare quindi KQL nel pannello query e aggiungere la query seguente:
opcua_metadata_lkv| where Name contains '${Station}'| where Name contains '${Location}'| join kind=inner (opcua_telemetry | where Name == "Pressure" | where Timestamp > todatetime('${__from:date:iso}') and Timestamp < todatetime('${__to:date:iso}')) on DataSetWriterID| extend NodeValue = toint(Value)| project Timestamp1, NodeValue
. Selezionare Applica per applicare le modifiche e tornare al dashboard.
Configura avvisi
In Grafana è anche possibile creare avvisi. In questo esempio viene creato un avviso OEE basso per una delle linee di produzione.
Nel menu Grafana passare a **Regole di avviso per l'invio di >avvisi.
Selezionare Nuova regola di avviso.
Assegnare un nome all'avviso e selezionare Azure Esplora dati come origine dati. Selezionare KQL nel riquadro Definisci query e condizione di avviso.
Immettere la query seguente nel campo query. In questo esempio viene usata la linea di produzione seattle:
let oee = CalculateOEEForStation("assembly", "seattle", 10000, now(), now(-1h)); print round(oee * 100, 2)
Selezionare Imposta come condizione di avviso.
Scorrere verso il basso fino alla sezione Espressioni . Eliminare l'espressione Reduce , non è necessaria.
Per la soglia di avviso selezionare A come Input. Selezionare IS BELOW (IS BELOW) e immettere 10.
Scorrere verso il basso fino alla sezione Imposta comportamento di valutazione. Creare una nuova cartella per salvare gli avvisi. Creare un nuovo gruppo di valutazione e specificare 2m.
Selezionare il pulsante Salva regola e esci in alto a destra.
Nella panoramica degli avvisi è ora possibile osservare che un avviso viene attivato quando l'ambiente operatività è minore di 10.
Connettere la soluzione di riferimento a Microsoft Power BI
Per connettere la soluzione di riferimento a Power BI, è necessario accedere a una sottoscrizione di Power BI.
Per creare il dashboard di Power BI, seguire questa procedura:
Accedere all'app Power BI Desktop usando l'utente con accesso alla sottoscrizione di Power BI.
Nella portale di Azure passare al database di Azure Esplora dati denominato onlogies e aggiungere autorizzazioni di amministratore del database a un utente di Microsoft Entra ID con accesso solo alla sottoscrizione usata per l'istanza distribuita di questa soluzione di riferimento. Se necessario, creare un nuovo utente in Microsoft Entra ID.
Da Power BI creare un nuovo report e selezionare Azure Esplora dati dati di serie temporali come origine dati: Recupera dati > di Azure Esplora dati (Kusto) di Azure>.
Nella finestra popup immettere l'endpoint Esplora dati di Azure del cluster (
https://<your cluster name>.<location>.kusto.windows.net
), il nome del database (ontologies
) e la query seguente: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
Accedere ad Azure Esplora dati usando l'utente microsoft Entra ID concesso l'autorizzazione per accedere al database di Azure Esplora dati in precedenza.
Nota
Se la colonna Timestamp contiene lo stesso valore per tutte le righe, modificare l'ultima riga della query come indicato di seguito:
| project Timestamp1, NodeValue
.Seleziona Carica. Questa azione importa il tempo effettivo del ciclo della stazione di assemblaggio della linea di produzione di Monaco per l'ultima ora.
Table view
Selezionare la colonna NodeValue e selezionare Non riepilogare nella voce di menu Riepilogo.Passare a
Report view
.In Visualizzazioni selezionare la visualizzazione Grafico a linee.
In Visualizzazioni spostare l'oggetto
Timestamp
dall'origineData
aX-axis
, selezionarlo e selezionare Timestamp.In Visualizzazioni spostare l'oggetto
NodeValue
dall'origineData
aY-axis
, selezionarlo e selezionare Median.Salvare il nuovo report.
Suggerimento
Usare lo stesso approccio per aggiungere altri dati da Azure Esplora dati al report.
Connettere la soluzione di riferimento a Microsoft Dynamics 365 Field Service
Questa integrazione mostra gli scenari seguenti:
- Caricare gli asset dalla soluzione di riferimento per le onlogi di produzione in Dynamics 365 Field Service.
- Creare avvisi in Dynamics 365 Field Service quando viene raggiunta una determinata soglia sui dati di telemetria della soluzione di riferimento per le ontlogi di produzione.
L'integrazione usa le app per la logica di Azure. Con App per la logica è possibile usare flussi di lavoro senza codice per connettere app e servizi business-critcal. Questo esempio illustra come recuperare i dati da Azure Esplora dati e attivare azioni in Dynamics 365 Field Service.
Se non si è già un cliente di Dynamics 365 Field Service, attivare una versione di valutazione di 30 giorni.
Suggerimento
Per evitare la necessità di configurare l'autenticazione tra tenant, usare lo stesso ID Microsoft Entra usato per distribuire la soluzione di riferimento per le onlogi di produzione.
Creare un flusso di lavoro App per la logica di Azure per creare asset in Dynamics 365 Field Service
Per caricare gli asset dalla soluzione di riferimento per le onlogi di produzione in Dynamics 365 Field Service:
Passare al portale di Azure e creare una nuova risorsa dell'app per la logica.
Assegnare al App per la logica di Azure un nome e inserirlo nello stesso gruppo di risorse della soluzione di riferimento per le ontologie di produzione.
Selezionare Flussi di lavoro.
Assegnare un nome al flusso di lavoro. Per questo scenario, usare il tipo di stato con stato perché gli asset non sono flussi di dati.
Nella finestra di progettazione del flusso di lavoro selezionare Aggiungi un trigger. Creare un trigger ricorrenza da eseguire ogni giorno. È possibile modificare il trigger in modo che si verifichi più frequentemente.
Aggiungere un'azione dopo il trigger di ricorrenza. In Aggiungi un'azione cercare
Azure Data Explorer
e selezionare il comando Esegui query KQL. Lasciare l'autenticazione predefinita OAuth. Immettere l'URL del cluster Esplora dati di Azure eontologies
come nome del database. In questa query si controlla il tipo di asset disponibili. Usare la query seguente per ottenere gli asset dalla soluzione di riferimento per le onlogi di produzione:opcua_telemetry | join kind=inner ( opcua_metadata | distinct Name, DataSetWriterID | extend AssetList = split(Name, ';') | extend AssetName = tostring(AssetList[0]) ) on DataSetWriterID | project AssetName | summarize by AssetName
Per ottenere i dati relativi agli asset in Dynamics 365 Field Service, è necessario connettersi a Microsoft Dataverse. In Aggiungi un'azione cercare
Dataverse
e selezionare il comando Aggiungi una nuova riga . Lasciare l'autenticazione predefinita OAuth. Connettersi all'istanza di Dynamics 365 Field Service, quindi usare la configurazione seguente:- Nel campo Nome tabella selezionare Asset cliente
- Nel campo Nome selezionare Immetti dati da un passaggio precedente e selezionare AssetName.
Salvare il flusso di lavoro, quindi eseguirlo. È possibile vedere che i nuovi asset vengono creati in Dynamics 365 Field Service:
Creare un flusso di lavoro App per la logica di Azure per creare avvisi nel servizio Dynamics 365 Field
Questo flusso di lavoro crea avvisi in Dynamics 365 Field Service, quando l'oggetto FaultyTime
per un asset nella soluzione di riferimento delle ontlogi di produzione raggiunge una soglia.
Per recuperare i dati, creare una funzione di Esplora dati di Azure. Nel pannello di query di Azure Esplora dati nel portale di Azure eseguire il codice seguente per creare una
FaultyFieldAssets
funzione nel database di ontlogi:.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}
Creare un nuovo flusso di lavoro con stato nell'app per la logica.
Nella finestra di progettazione del flusso di lavoro creare un trigger di ricorrenza che viene eseguito ogni tre minuti. Aggiungere quindi un'azione e selezionare l'azione Esegui query KQL.
Immettere l'URL del cluster di Azure Esplora dati, quindi immettere onlogies come nome del database e usare il nome della
FaultyFieldAssets
funzione come query.Per ottenere i dati relativi agli asset in Dynamics 365 Field Service, è necessario connettersi a Microsoft Dataverse. In Aggiungi un'azione cercare
Dataverse
e selezionare il comando Aggiungi una nuova riga . Lasciare l'autenticazione predefinita OAuth. Connettersi all'istanza di Dynamics 365 Field Service, quindi usare la configurazione seguente:- Nel campo Nome tabella selezionare Avvisi IoT
- Nel campo Descrizione usare Immettere i dati di un passaggio precedente per compilare un messaggio "[AssetName] ha un [Nome] di [Valore]". AssetName, Name e Value sono i campi del passaggio precedente.
- Nel campo Ora avviso selezionare Immettere i dati da un passaggio precedente e selezionare Timestamp.
- Nel campo Tipo di avviso selezionare Anomalia.
Eseguire il flusso di lavoro e per visualizzare i nuovi avvisi generati nel dashboard degli avvisi IoT di Dynamics 365 Field Service: