Självstudie: Implementera Azure Industrial IoT-referenslösningsarkitekturen

Tillverkarna vill distribuera en övergripande industriell IoT-lösning i global skala och ansluta alla sina produktionsplatser till den här lösningen för att öka effektiviteten för varje enskild produktionsplats.

Dessa ökade effektivitetsvinster leder till snabbare produktion och lägre energiförbrukning, vilket leder till lägre kostnader för de producerade varorna samtidigt som kvaliteten i de flesta fall ökar.

Lösningen måste vara så effektiv som möjligt och aktivera alla nödvändiga användningsfall som villkorsövervakning, OEE-beräkning, prognostisering och avvikelseidentifiering. Från insikterna från dessa användningsfall kan du i ett andra steg skapa en digital feedbackloop som sedan kan tillämpa optimeringar och andra ändringar i produktionsprocesserna.

Samverkan är nyckeln till att uppnå en snabb distribution av lösningsarkitekturen och användningen av öppna standarder som OPC UA bidrar avsevärt till att uppnå denna samverkan.

IEC 62541 Open Platform Communications Unified Architecture (OPC UA)

Den här lösningen använder IEC 62541 Open Platform Communications (OPC) Unified Architecture (UA) för alla ot-data (Operational Technology). Den här standarden beskrivs här.

Referenslösningsarkitektur

Förenklad arkitektur (både Azure- och Infrastrukturalternativ):

Diagram över en enkel IIoT-arkitektur.

Detaljerad arkitektur (endast Azure):

Diagram över en IIoT-arkitektur.

Komponenter

Här är de komponenter som ingår i den här lösningen:

Komponent beskrivning
Industriella tillgångar En uppsättning simulerade OPC-UA-aktiverade produktionslinjer i Docker-containrar
Azure IoT-åtgärder Azure IoT Operations är ett enhetligt dataplan för gränsen. Den innehåller en uppsättning modulära, skalbara och högtillgängliga datatjänster som körs på Azure Arc-aktiverade Kubernetes-gränskluster.
Data Gateway Den här gatewayen ansluter dina lokala datakällor (till exempel SAP) till Azure Logic Apps i molnet.
Azure Kubernetes Services Edge Essentials Den här Kubernetes-implementeringen körs på Gränsen. Den tillhandahåller Kubernetes-kluster med en och flera noder för en feltolerant Edge-konfiguration. Både K3S och K8S stöds. Den körs på inbäddad maskinvara eller maskinvara i PC-klass, som en industriell gateway.
Azure Event Hubs Molnmeddelandekoordinatorn som tar emot OPC UA PubSub-meddelanden från edge-gatewayer och lagrar dem tills de hämtas av prenumeranter.
Azure-datautforskaren Tidsseriedatabasen och frontend-instrumentpanelstjänsten för avancerad molnanalys, inklusive inbyggd avvikelseidentifiering och förutsägelser.
Azure Logic App-appar Azure Logic Apps är en molnplattform som du kan använda för att skapa och köra automatiserade arbetsflöden med lite eller ingen kod.
Azure Arc Den här molntjänsten används för att hantera det lokala Kubernetes-klustret vid gränsen. Nya arbetsbelastningar kan distribueras via Flux.
Azure Storage Den här molntjänsten används för att hantera OPC UA-certifikatarkivet och inställningarna för Edge Kubernetes-arbetsbelastningarna.
Azure Managed Grafana Azure Managed Grafana är en plattform för datavisualisering som bygger på Grafana-programvaran från Grafana Labs. Grafana skapas som en fullständigt hanterad tjänst som hanteras och stöds av Microsoft.
Microsoft Power BI Microsoft Power BI är en samling SaaS-programvarutjänster, appar och anslutningsappar som fungerar tillsammans för att omvandla dina orelaterade datakällor till sammanhängande, visuellt uppslukande och interaktiva insikter.
Microsoft Dynamics 365 Field Service Microsoft Dynamics 365 Field Service är en nyckelfärdig SaaS-lösning för att hantera fältservice begäranden.
UA Cloud Commander Det här referensprogrammet med öppen källkod konverterar meddelanden som skickas till en MQTT (Message Queue Telemetry Transport) eller Kafka Broker (eventuellt i molnet) till OPC UA-klient-/serverbegäranden för en ansluten OPC UA-server. Programmet körs i en Docker-container.
UA-molnåtgärd Det här referensmolnprogrammet med öppen källkod frågar Azure Data Explorer efter ett specifikt datavärde. Datavärdet är trycket i en av de simulerade produktionslinjedatorerna. Den anropar UA Cloud Commander via Azure Event Hubs när ett visst tröskelvärde nås (4 000 mbar). UA Cloud Commander anropar sedan metoden OpenPressureReliefValve på datorn via OPC UA.
UA-molnbibliotek UA Cloud Library är en onlinebutik med OPC UA Information Models som hanteras av OPC Foundation här.
UA Edge Translator Det här referensprogrammet för industriell anslutning med öppen källkod översätts från patentskyddade tillgångsgränssnitt till OPC UA med W3C Web of Things (WoT) Sakbeskrivningar som schema för att beskriva gränssnittet för industriella tillgångar.

Kommentar

I en verklig distribution skulle något så viktigt som att öppna en tryckreduceringsventil göras lokalt. Det här är bara ett enkelt exempel på hur du uppnår den digitala feedbackloopen.

Ett molnbaserat OPC UA-certifikatarkiv och sparad lagring

När tillverkare kör OPC UA-program måste deras OPC UA-konfigurationsfiler, nycklar och certifikat bevaras. Kubernetes har möjlighet att spara dessa filer i volymer, men en säkrare plats för dem är molnet, särskilt på kluster med en nod där volymen skulle gå förlorad när noden misslyckas. Det här scenariot är anledningen till att de OPC UA-program som används i den här lösningen lagrar sina konfigurationsfiler, nycklar och certifikat i molnet. Den här metoden har också fördelen att tillhandahålla en enda plats för ömsesidigt betrodda certifikat för alla OPC UA-program.

UA-molnbibliotek

Du kan läsa OPC UA Information Models direkt från Azure Data Explorer. Du kan göra detta genom att importera OPC UA-noderna som definierats i OPC UA Information Model till en tabell för sökning efter fler metadata i frågor.

Konfigurera först en ADX-pratbubblaprincip (Azure Data Explorer) för UA Cloud Library genom att köra följande fråga i DITT ADX-kluster (kontrollera att du är ADX-klusteradministratör och konfigurerbar under Behörigheter på fliken ADX i Azure-portalen):

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

Kör sedan följande Azure Data Explorer-fråga från Azure-portalen:

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

Du måste ange två saker i den här frågan:

  • Informationsmodellens unika ID från UA-molnbiblioteket och ange det i <fältet Infoga informationsmodellidentifierare från molnbiblioteket i> ADX-frågan.
  • Autentiseringsuppgifterna för UA-molnbiblioteket (som genererades under registreringen) hash för grundläggande auktoriseringshuvud och infoga den i <hashen infoga dina autentiseringsuppgifter för molnbiblioteket här> i ADX-frågan. Använd verktyg som https://www.debugbear.com/basic-auth-header-generator för att generera detta.

Kör till exempel följande fråga för att återge produktionslinjesimuleringen Station OPC UA Server's Information Model i kusto Explorer-verktyget som är tillgängligt för nedladdning här:

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

För bästa resultat ändrar du alternativet Layout till Grouped och Lables till name.

Diagram över stationsinformationsmodellen.

Simulering av produktionslinje

Lösningen använder en produktionslinjesimulering som består av flera stationer, med hjälp av en OPC UA-informationsmodell och ett enkelt tillverkningskörningssystem (MES). Både Stationerna och MES är containerbaserade för enkel distribution.

Standardkonfiguration för simulering

Simuleringen är konfigurerad att innehålla två produktionslinjer. Standardkonfigurationen är:

Produktionslinje Ideal cykeltid (i sekunder)
München 6
Seattle 10
Skiftnamn Början Sluta
Morgon 07:00 14:00:00
Eftermiddag 15:00:00 22:00
Natt 23:00 06:00

Kommentar

Skifttiderna är i lokal tid, särskilt tidszonen som den virtuella datorn (VM) som är värd för produktionslinjesimuleringen är inställd på.

OPC UA-nod-ID:n för Station OPC UA-servern

Följande OPC UA-nod-ID:n används i Station OPC UA Server för telemetri till molnet.

  • i=379 – tillverkat produktserienummer
  • i=385 – antal tillverkade produkter
  • i=391 – antal kasserade produkter
  • i=398 – körningstid
  • i=399 – felaktig tid
  • i= 400 - status (0 = station redo att göra arbete, 1 = pågående arbete, 2 = utfört arbete och bra del tillverkas, 3 = arbete gjort och skrot tillverkas, 4 = station i feltillstånd)
  • i=406 – energiförbrukning
  • i=412 – idealisk cykeltid
  • i=418 – faktisk cykeltid
  • i=434 - tryck

Digital feedback-loop med UA Cloud Commander och UA Cloud Action

Den här referensimplementeringen implementerar en "digital feedback-loop" som specifikt utlöser ett kommando på en av OPC UA-servrarna i simuleringen från molnet, baserat på tidsseriedata som når ett visst tröskelvärde (det simulerade trycket). Du kan se trycket från sammansättningsdatorn på produktionslinjen i Seattle som släpps regelbundet i Azure Data Explorer-instrumentpanelen.

Installera produktionslinjesimuleringen och molntjänsterna

När du klickar på knappen distribueras alla nödvändiga resurser i Microsoft Azure:

Distribuera till Azure

Under distributionen måste du ange ett lösenord för en virtuell dator som används som värd för produktionslinjesimuleringen och för UA Cloud Twin. Lösenordet måste ha tre av följande attribut: Ett gemener, ett versaler, ett tal och ett specialtecken. Lösenordet måste vara mellan 12 och 72 tecken långt.

Kommentar

För att spara kostnader distribuerar distributionen bara en enda virtuell Windows 11 Enterprise-dator för både produktionslinjesimuleringen och basoperativsystemet för Azure Kubernetes Services Edge Essentials-instansen. I produktionsscenarier krävs inte produktionslinjesimuleringen och för basoperativsystemet för Azure Kubernetes Services Edge Essentials-instansen rekommenderar vi Windows IoT Enterprise Long Term Servicing Channel (LTSC).

När distributionen är klar ansluter du till den distribuerade virtuella Windows-datorn med en RDP-anslutning (fjärrskrivbord). Du kan ladda ned RDP-filen på azure-portalsidan för den virtuella datorn under alternativen för Anslut. Logga in med de autentiseringsuppgifter som du angav under distributionen, öppna ett Powershell-administratörsfönster, navigera till C:\ManufacturingOntologies-main\Deployment katalogen och kör:

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

När kommandot är klart är installationen av Azure Kubernetes Services Edge Essentials klar och du kan köra simuleringen av produktionslinjen.

Dricks

Om du vill hämta loggar från alla dina Kubernetes-arbetsbelastningar och -tjänster när som helst kör du Get-AksEdgeLogs från ett Powershell-administratörsfönster.

Om du vill kontrollera minnesanvändningen för kubernetes-klustret kör du Invoke-AksEdgeNodeCommand -Command "sudo cat /proc/meminfo" från ett Powershell-administratörsfönster.

Köra produktionslinjesimuleringen

Öppna en Windows-kommandotolk från den distribuerade virtuella datorn. Gå till C:\ManufacturingOntologies-main\Tools\FactorySimulation katalogen och kör kommandot StartSimulation genom att ange följande parametrar:

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

Parametrar:

Parameter Description
EventHubCS Kopiera Event Hubs-namnområdet anslutningssträng enligt beskrivningen här.
StorageAccountCS I Azure-portalen går du till lagringskontot som skapats av den här lösningen. Välj "Åtkomstnycklar" på den vänstra navigeringsmenyn. Kopiera sedan anslutningssträng för key1.
AzureSubscriptionID I Azure-portalen bläddrar du i dina prenumerationer och kopierar ID:t för prenumerationen som används i den här lösningen.
AzureTenantID Öppna sidan Microsoft Entry ID i Azure-portalen och kopiera ditt klientorganisations-ID.

I följande exempel visas kommandot med alla parametrar:

    StartSimulation Endpoint=sb://ontologies.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abcdefgh= DefaultEndpointsProtocol=https;AccountName=ontologiesstorage;AccountKey=abcdefgh==;EndpointSuffix=core.windows.net 9dd2eft0-3dad-4aeb-85d8-c3adssd8127a 6e660ce4-d51a-4585-80c6-58035e212354

Kommentar

Om du har åtkomst till flera Azure-prenumerationer är det värt att först logga in på Azure-portalen från den virtuella datorn via webbläsaren. Du kan också växla Active Directory-klienter via Azure-portalens användargränssnitt (i det övre högra hörnet) för att se till att du är inloggad på den klientorganisation som användes under distributionen. När du har loggat in lämnar du webbläsarfönstret öppet. Detta säkerställer att StartSimulation-skriptet enklare kan ansluta till rätt prenumeration.

I den här lösningen finns OPC UA-programcertifikatarkivet för UA Cloud Publisher och den simulerade produktionslinjens MES- och enskilda datorarkiv i molnet i det distribuerade Azure Storage-kontot.

Aktivera Kubernetes-klustret för hantering via Azure Arc

  1. Öppna ett PowerShell-fönster för administratör på den virtuella datorn. Gå till C:\ManufacturingOntologies-main\Deployment katalogen och kör CreateServicePrincipal. De två parametrarna subscriptionID och tenantID kan hämtas från Azure-portalen.

  2. Kör notepad aksedge-config.json och ange följande information:

    Attribut beskrivning
    Location Azure-platsen för resursgruppen. Du hittar den här platsen i Azure-portalen under resursgruppen som distribuerades för den här lösningen, men ta bort blankstegen i namnet! Regioner som stöds för närvarande är eastus, eastus2, westus, westus2, westus3, westeurope och northeurope.
    SubscriptionId Ditt prenumerations-ID. I Azure-portalen väljer du den prenumeration du använder och kopierar/klistrar in prenumerations-ID:t.
    TenantId Ditt klientorganisations-ID. I Azure-portalen väljer du i Azure Active Directory och kopierar/klistrar in klientorganisations-ID:t.
    ResourceGroupName Namnet på den Azure-resursgrupp som distribuerades för den här lösningen.
    ClientId Namnet på azure-tjänstens huvudnamn som skapades tidigare. Azure Kubernetes Services använder tjänstens huvudnamn för att ansluta klustret till Arc.
    ClientSecret Lösenordet för Azure-tjänstens huvudnamn.
  3. Spara filen, stäng PowerShell-fönstret och öppna ett nytt powershell-fönster för administratör. Gå tillbaka till C:\ManufacturingOntologies-main\Deployment katalogen och kör SetupArc.

Nu kan du hantera ditt Kubernetes-kluster från molnet via den nyligen distribuerade Azure Arc-instansen. I Azure-portalen bläddrar du till Azure Arc-instansen och väljer Arbetsbelastningar. Den nödvändiga tjänsttoken kan hämtas via Get-AksEdgeManagedServiceToken från ett Powershell-administratörsfönster på den virtuella datorn.

Skärmbild av Azure Arc i Azure-portalen.

Distribuera Azure IoT-åtgärder på gränsen

Kontrollera att du redan har startat produktionslinjesimuleringen och aktiverat Kubernetes-klustret för hantering via Azure Arc enligt beskrivningen i föregående stycken. Sedan följer du de här stegen:

  1. Från Azure-portalen går du till Key Vault som distribueras i den här referenslösningen och lägger till din egen identitet i åtkomstprinciperna genom att Access policiesklicka på , Createvälj mallen Keys, Secrets & Certificate Management , välja Next, söka efter och välja din egen användaridentitet, välja Next, lämna avsnittet Program tomt, välja Next och slutligen Create.
  2. Aktivera anpassade platser för ditt Arc-anslutna Kubernetes-kluster (kallas ontologies_cluster) genom att först logga in på din Azure-prenumeration via az login från ett PowerShell-administratörsfönster och sedan köra az connectedk8s enable-features -n "ontologies_cluster" -g "<resourceGroupName>" --features cluster-connect custom-locationsoch tillhandahålla resourceGroupName från den distribuerade referenslösningen.
  3. I Azure-portalen distribuerar du Azure IoT Operations genom att gå till ditt Arc-anslutna kubernetes-kluster, välja på Extensions, , välj Azure IoT Operationsoch välj CreateAdd. Lämna allt som det är på sidan Grundläggande. På sidan Konfiguration anger du MQ Mode till Auto. Du behöver inte distribuera en simulerad programmerbar logikkontrollant (PLC), eftersom den här referenslösningen redan innehåller en mycket mer omfattande produktionslinjesimulering. På sidan Automation väljer du nyckelvalvet som distribuerats för den här referenslösningen az iot ops init och kopierar sedan kommandot som genereras automatiskt. Från den distribuerade virtuella datorn öppnar du ett nytt PowerShell-administratörsfönster, loggar in på rätt Azure-prenumeration genom att köra az login kommandot az iot ops init med argumenten från Azure-portalen. När kommandot har slutförts väljer du Next och stänger sedan guiden.

Konfigurera OPC UA-säkerhet och -anslutning för Azure IoT Operations

Kontrollera att du har distribuerat Azure IoT Operations och att alla Kubernetes-arbetsbelastningar är igång genom att gå till den Arc-aktiverade Kubernetes-resursen i Azure-portalen.

  1. Från Azure-portalen går du till Azure Storage som distribueras i den här referenslösningen Storage browser , öppnar och sedan Blob containers. Här kan du komma åt det molnbaserade OPC UA-certifikatarkivet som används i den här lösningen. Azure IoT Operations använder Azure Key Vault som molnbaserat OPC UA-certifikatarkiv så att certifikaten måste kopieras:
    1. Från Azure Storage-webbläsarens blobcontainrar går du till mappen app/pki/trusted/certs för varje simulerad produktionslinje, väljer sammansättningen, paketerar och testar certifikatfilen och laddar ned den.
    2. Logga in på din Azure-prenumeration via az login från ett PowerShell-administratörsfönster och kör az keyvault secret set --name "<stationName>-der" --vault-name <keyVaultName> --file .<stationName>.der --encoding hex --content-type application/pkix-certsedan och för keyVaultName var och stationName en av de 6 stationer som du laddade ned en .der cert-fil för i föregående steg.
  2. Från den distribuerade virtuella datorn öppnar du en Windows-kommandotolk och kör kubectl apply -f secretsprovider.yaml med den uppdaterade resursfilen för hemlighetsprovidern C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station som finns i katalogen, med key vault-namnet, Azure-klient-ID:t och filnamnen och aliasen för stationscertifikat som du laddade upp till Azure Key Vault tidigare.
  3. Från en webbläsare loggar du in https://iotoperations.azure.compå , väljer rätt Azure-katalog (övre högra hörnet) och börjar skapa tillgångar från produktionslinjesimuleringen. Lösningen levereras med två produktionslinjer (München och Seattle) som består av tre stationer vardera (montering, testning och förpackning):
    1. För tillgångsslutpunkterna anger du opc.tcp://assembly.münchen i fältet OPC UA Broker URL för monteringsstationen för produktionslinjen i München osv. Välj Do not use transport authentication certificate (OPC UA-certifikatbaserad ömsesidig autentisering mellan Azure IoT Operations och alla anslutna OPC UA-servrar används fortfarande).
    2. För tillgångstaggar väljer du Import CSV file och öppnar StationTags.csv filen som finns i C:\ManufacturingOntologies-main\Tools\FactorySimulation\Station katalogen.
  4. Från Azure-portalen går du till Azure Storage som distribueras i den här referenslösningen Storage browser , öppnar och sedan Blob containers. För varje simulerad produktionslinje går du till app/pki/rejected/certs mappen och laddar ned Azure IoT Operations-certifikatfilen. Ta sedan bort filen. Gå till app/pki/trusted/certs mappen och ladda upp Azure IoT Operations-certifikatfilen till den här katalogen.
  5. Från den distribuerade virtuella datorn öppnar du en Windows-kommandotolk och startar om produktionslinjesimuleringen genom att navigera till C:\ManufacturingOntologies-main\Tools\FactorySimulation katalogen och köra kommandot StopSimulation följt av kommandot StartSimulation.
  6. Följ anvisningarna nedan för att kontrollera att data flödar från produktionslinjesimuleringen.
  7. Som det sista steget ansluter du Azure IoT Operations till händelsehubbar som distribueras i den här referenslösningen enligt beskrivningen här.

Användningsfall villkorar övervakning, beräknar OEE, identifierar avvikelser och gör förutsägelser i Azure Data Explorer

Du kan också gå till Dokumentationen för Azure Data Explorer för att lära dig hur du skapar instrumentpaneler utan kod för villkorsövervakning, förutsägelser om avkastning eller underhåll eller avvikelseidentifiering. Vi har angett en exempelinstrumentpanel här där du kan distribuera till ADX-instrumentpanelen genom att följa stegen som beskrivs här. Efter importen måste du uppdatera instrumentpanelens datakälla genom att ange HTTPS-slutpunkten för ADX-serverklusterinstansen i formatet https://ADXInstanceName.AzureRegion.kusto.windows.net/ i det övre högra hörnet på instrumentpanelen.

Skärmbild av en Azure Data Explorer-instrumentpanel.

Kommentar

Om du vill visa OEE för ett visst skift väljer du Custom Time Range i Time Range listrutan i det övre vänstra hörnet på ADX-instrumentpanelen och anger datum och tid från början till slutet av det skift som du är intresserad av.

Rendera det inbyggda modelldiagrammet Unified NameSpace (UNS) och ISA-95 i Kusto Explorer

Den här referenslösningen implementerar en Unified NameSapce (UNS), baserat på OPC UA-metadata som skickas till tidsseriedatabasen i molnet (Azure Data Explorer). Dessa OPC UA-metadata innehåller även tillgångshierarkin ISA-95. Det resulterande diagrammet kan enkelt visualiseras i Kusto Explorer-verktyget som är tillgängligt för nedladdning här.

Lägg till en ny anslutning till din Azure Data Explorer-instans som distribuerats i den här referenslösningen och kör sedan följande fråga i 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

För bästa resultat ändrar du alternativet Layout till Grouped.

Diagram som visar en ISA-95-tillgångshierarki.

Använda Azure Managed Grafana Service

Du kan också använda Grafana för att skapa en instrumentpanel i Azure för lösningen som beskrivs i den här artikeln. Grafana används inom tillverkningsindustrin för att skapa instrumentpaneler som visar realtidsdata. Azure erbjuder en tjänst med namnet Azure Managed Grafana. Med detta kan du skapa molninstrumentpaneler. I den här konfigurationshandboken aktiverar du Grafana i Azure och skapar en instrumentpanel med data som efterfrågas från Azure Data Explorer och Azure Digital Twins-tjänsten med hjälp av simulerade produktionslinjedata från den här referenslösningen.

Följande skärmbild visar instrumentpanelen:

Skärmbild som visar en Grafana-instrumentpanel.

Aktivera Azure Managed Grafana Service

  1. Gå till Azure-portalen och sök efter tjänsten Grafana och välj tjänsten "Azure Managed Grafana".

    Skärmbild av aktivering av Grafana på Marketplace.

  2. Ge instansen ett namn och lämna standardalternativen på – och skapa tjänsten.

  3. När tjänsten har skapats navigerar du till den URL där du kommer åt grafanainstansen. Du hittar URL:en på tjänstens startsida.

Lägga till en ny datakälla i Grafana

Efter din första inloggning måste du lägga till en ny datakälla i Azure Data Explorer.

  1. Gå till Konfiguration och lägg till en ny datakälla.

  2. Sök efter Azure Data Explorer och välj tjänsten.

  3. Konfigurera anslutningen och använd appregistreringen (följ den manual som finns överst på den här sidan).

  4. Spara och testa anslutningen längst ned på sidan.

Importera en exempelinstrumentpanel

Nu är du redo att importera den angivna exempelinstrumentpanelen.

  1. Ladda ned exempelinstrumentpanelen här: Exempel på Grafana Manufacturing Dashboard.

  2. Gå till Instrumentpanelen och välj Importera.

  3. Välj den källa som du har laddat ned och välj på Spara. Du får ett fel på sidan eftersom två variabler inte har angetts än. Gå till inställningssidan på instrumentpanelen.

  4. Välj till vänster på Variabler och uppdatera de två URL:erna med URL:en för din Azure Digital Twins-tjänst.

  5. Gå tillbaka till instrumentpanelen och tryck på uppdateringsknappen. Nu bör du se data (glöm inte att trycka på knappen Spara på instrumentpanelen).

    Platsvariabeln överst på sidan fylls automatiskt med data från Azure Digital Twins (områdesnoderna från ISA95). Här kan du välja de olika platserna och se de olika datapunkterna för varje fabrik.

  6. Om data inte visas på instrumentpanelen går du till de enskilda panelerna och ser om rätt datakälla har valts.

Konfigurera aviseringar

I Grafana är det också möjligt att skapa aviseringar. I det här exemplet skapar vi en låg OEE-avisering för en av produktionsraderna.

  1. Logga in på Grafana-tjänsten och välj Aviseringsregler på menyn.

    Skärmbild som visar navigering till aviseringar.

  2. Välj Skapa aviseringsregel.

    Skärmbild som visar hur du skapar en aviseringsregel.

  3. Ge aviseringen ett namn och välj "Azure Data Explorer" som datakälla. Välj fråga i navigeringsfönstret.

    Skärmbild av hur du skapar en aviseringsfråga.

  4. I frågefältet anger du följande fråga. I det här exemplet använder vi produktionslinjen "Seattle".

    let oee = CalculateOEEForStation("assembly", "seattle", 6, 6);
    print round(oee * 100, 2)
    
  5. Välj "tabell" som utdata.

  6. Rulla ned till nästa avsnitt. Här konfigurerar du aviseringströskelvärdet. I det här exemplet använder vi "under 10" som tröskelvärde, men i produktionsmiljöer kan det här värdet vara högre.

    Skärmbild som visar en tröskelavisering.

  7. Välj den mapp där du vill spara aviseringarna och konfigurera beteendet För aviseringsutvärdering. Välj alternativet "var 2:e minut".

  8. Välj knappen Spara och avsluta.

I översikten över dina aviseringar kan du nu se en avisering som utlöses när din OEE är under "10".

Skärmbild som visar en aviseringsöversikt.

Du kan integrera den här konfigurationen med till exempel Microsoft Dynamics Field Services.

Anslut referenslösningen till Microsoft Power BI

Om du vill ansluta referenslösningen Power BI behöver du åtkomst till en Power BI-prenumeration.

Slutför följande steg:

  1. Installera Power BI Desktop-appen härifrån.

  2. Logga in på Power BI Desktop-appen med användaren med åtkomst till Power BI-prenumerationen.

  3. Från Azure-portalen går du till din Azure Data Explorer-databasinstans (ontologies) och lägger till Database Admin behörigheter till en Azure Active Directory-användare med åtkomst till bara en enda Azure-prenumeration, särskilt den prenumeration som används för din distribuerade instans av den här referenslösningen. Skapa en ny användare i Azure Active Directory om du behöver.

  4. Från Power BI skapar du en ny rapport och väljer Tidsseriedata i Azure Data Explorer som datakälla via Get data ->Azure ->Azure Data Explorer (Kusto).

  5. I popup-fönstret anger du Azure Data Explorer-slutpunkten för din instans (till exempel https://erichbtest3adx.eastus2.kusto.windows.net), databasnamnet (ontologies) och följande fråga:

    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. Välj Load. Detta importerar den faktiska cykeltiden för monteringsstationen för Münchens produktionslinje under den senaste timmen.

  7. När du uppmanas att göra det loggar du in på Azure Data Explorer med den Azure Active Directory-användare som du gav behörighet att komma åt Azure Data Explorer-databasen tidigare.

  8. I väljer Data viewdu kolumnen NodeValue och väljer Don't summarize i Summarization menyalternativet.

  9. Växla till Report view.

  10. Under Visualizationsväljer du Line Chart visualiseringen.

  11. Under Visualizationsflyttar du Timestamp från Data källan till X-axis, väljer på den och väljer Timestamp.

  12. Under Visualizationsflyttar du NodeValue från Data källan till Y-axis, väljer på den och väljer Median.

  13. Spara den nya rapporten.

    Kommentar

    Du kan lägga till andra data från Azure Data Explorer i rapporten på samma sätt.

    Skärmbild av en Power BI-vy.

Anslut referenslösningen till Microsoft Dynamics 365 Field Service

Den här integreringen visar följande scenarier:

  • Ladda upp tillgångar från referenslösningen För tillverknings ontologier till Dynamics 365 Field Service.
  • Skapa aviseringar i Dynamics 365 Field Service när ett visst tröskelvärde för telemetridata för tillverknings ontologier nås.

Integreringen använder Azure Logics Apps. Med Logic Apps kan bussiness-critcal-appar och tjänster anslutas via arbetsflöden utan kod. Vi hämtar information från Azure Data Explorer och utlöser åtgärder i Dynamics 365 Field Service.

Om du inte redan är dynamics 365 Field Service-kund aktiverar du först en 30-dagars utvärderingsversion här. Kom ihåg att använda samma Microsoft Entra-ID (tidigare Azure Active Directory) som användes när du distribuerade referenslösningen Manufacturing Ontologies. Annars skulle du behöva konfigurera autentisering mellan klientorganisationer som inte ingår i dessa instruktioner!

Skapa ett Azure Logic App-arbetsflöde för att skapa tillgångar i Dynamics 365 Field Service

Vi börjar med att ladda upp tillgångar från Tillverknings ontologier till Dynamics 365 Field Service:

  1. Gå till Azure-portalen och skapa en ny logikapp.

  2. Ge Azure Logic App ett namn och placera den i samma resursgrupp som referenslösningen För tillverknings ontologier.

  3. Välj "Arbetsflöden".

  4. Ge arbetsflödet ett namn – för det här scenariot använder vi tillståndskänslig tillståndstyp eftersom tillgångar inte är dataflöden.

  5. Skapa en ny utlösare. Vi börjar med att skapa en upprepningsutlösare. Detta kontrollerar databasen varje dag om nya tillgångar skapas. Du kan ändra detta så att det sker oftare.

  6. I åtgärder söker Azure Data Explorer du efter och väljer kommandot Run KQL query . I den här frågan kontrollerar vi vilken typ av tillgångar vi har. Använd följande fråga för att hämta tillgångar och klistra in den i frågefältet:

    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. För att få tillgångsdata till Dynamics 365 Field Service måste du ansluta till Microsoft Dataverse. Anslut till din Dynamics 365 Field Service-instans och använd följande konfiguration:

    • Använd tabellnamnet "Kundtillgångar"
    • Placera "AssetName" i fältet Namn
  8. Spara arbetsflödet och kör det. Om några sekunder senare ser du att nya tillgångar skapas i Dynamics 365 Field Service.

Skapa ett Azure Logic App-arbetsflöde för att skapa aviseringar i Dynamics 365 Field Service

Det här arbetsflödet skapar aviseringar i Dynamics 365 Field Service, särskilt när ett visst tröskelvärde för FaultyTime på en tillgång i referenslösningen Manufacturing Ontologies nås.

  1. Vi måste först skapa en Azure Data Explorer-funktion för att få rätt data. Gå till azure datautforskarens frågepanel i Azure-portalen och kör följande kod för att skapa en FaultyFieldAssets-funktion:

    Skärmbild av hur du skapar en ADX-funktionsfråga.

    .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. Skapa ett nytt arbetsflöde i Azure Logic App. Skapa en upprepningsutlösare för att starta – var 3:e minut. Skapa som åtgärd "Azure Data Explorer" och välj Kör KQL-fråga.

  3. Ange din Azure Data Explorer-kluster-URL och välj sedan databasen och använd funktionsnamnet som skapades i steg 1 som fråga.

  4. Välj Microsoft Dataverse som åtgärd.

  5. Kör arbetsflödet och för att se nya aviseringar som genereras på instrumentpanelen för Dynamics 365 Field Service:

    Skärmbild av aviseringar i Dynamics 365 FS.