Dela via


Identifiera OPC UA-datakällor med Azure IoT Akri Preview

Viktigt!

Förhandsversion av Azure IoT Operations – aktiverad av Azure Arc finns för närvarande i FÖRHANDSVERSION. Du bör inte använda den här förhandsgranskningsprogramvaran i produktionsmiljöer.

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

I den här artikeln lär du dig att identifiera OPC UA-datakällor automatiskt. När du har distribuerat Förhandsversionen av Azure IoT Operations konfigurerar du Förhandsversionen av Azure IoT Akri för att identifiera OPC UA-datakällor vid gränsen. Azure IoT Akri skapar anpassade resurser i ditt Kubernetes-kluster som representerar de datakällor som identifieras. Möjligheten att identifiera OPC UA-datakällor tar bort behovet av att konfigurera dem manuellt med hjälp av Azure IoT Operations-portalen (förhandsversion).

Viktigt!

För närvarande kan du inte använda Azure Device Registry för att hantera de tillgångar som Azure IoT Akri identifierar och skapar.

Med Azure IoT Akri kan du identifiera och skapa tillgångar i adressutrymmet på en OPC UA-server. OPC UA-tillgångsidentifieringen AssetType genererar och Asset anpassade resurser för OPC UA Device Integration (DI) specifikationskompatibla tillgångar.

Förutsättningar

  • Installera Förhandsversionen av Azure IoT Operations. Information om hur du installerar Azure IoT Operations i demonstrations- och utforskningssyfte finns i Snabbstart: Distribuera Azure IoT Operations Preview till ett Arc-aktiverat Kubernetes-kluster.

  • Kontrollera att Azure IoT Akri-poddarna är korrekt konfigurerade genom att köra följande kommando:

    kubectl get pods -n azure-iot-operations
    

    Utdata innehåller rader som visar att Akri-agenten och identifieringshanterarens poddar körs:

    NAME                                             READY   STATUS    RESTARTS   AGE
    aio-akri-agent-daemonset-hwpc7                   1/1     Running   0          17m
    akri-opcua-asset-discovery-daemonset-dwn2q       1/1     Running   0          8m28s
    

Konfigurera OPC UA-identifieringshanteraren

Om du vill konfigurera OPC UA-identifieringshanteraren för tillgångsidentifiering skapar du en YAML-konfigurationsfil som innehåller de värden som beskrivs i det här avsnittet:

Name Obligatorisk Datatyp Standardvärde Kommentar
EndpointUrl true String NULL OPC UA-slutpunkts-URL:en som ska användas för tillgångsidentifiering
AutoAcceptUntrustedCertificates sant ¹ Boolean falskt Ska klientens autoaccepta ej betrodda certifikat? Ett certifikat kan bara godkännas automatiskt som betrott om inga icke-övertryckbara fel inträffade under kedjevalidering. Ett certifikat med ofullständig kedja accepteras till exempel inte.
UseSecurity sant ¹ Booleskt true Ska klienten använda en säker anslutning?
UserName falskt String NULL Användarnamnet för användarautentisering. ²
Password falskt String NULL Lösenordet för användarautentisering. ²

¹ Den aktuella versionen av identifieringshanteraren stöder UseSecurity=false och kräver autoAcceptUntrustedCertificates=truebara .
² En tillfällig implementering tills Azure IoT Akri kan skicka Kubernetes-hemligheter.

I följande exempel visas identifiering av en OPC PLC-server. Du kan lägga till tillgångsparametrarna för flera OPC PLC-servrar.

  1. Om du vill skapa YAML-konfigurationsfilen kopierar du och klistrar in följande innehåll i en ny fil och sparar den som opcua-configuration.yaml:

    Om du använder den simulerade PLC-servern som distribuerades med Azure IoT Operations-snabbstarten endpointUrlbehöver du inte ändra . Om du har egna OPC UA-servrar som körs eller använder de simulerade PLC-servrarna som distribueras i Azure lägger du till din slutpunkts-URL i enlighet med detta. Url:er för identifieringsslutpunkter ser ut som opc.tcp://<FQDN>:50000/. Om du vill hitta FQDN:erna för dina OPC PLC-servrar går du till distributionen i Azure-portalen. För varje server kopierar och klistrar du in FQDN-värdet i dina slutpunkts-URL:er.

    apiVersion: akri.sh/v0
    kind: Configuration
    metadata:
      name: aio-akri-opcua-asset
    spec:
      discoveryHandler: 
        name: opcua-asset
        discoveryDetails: "opcuaDiscoveryMethod:\n  - asset:\n      endpointUrl: \"	opc.tcp://opcplc-000000:50000\"\n      useSecurity: false\n      autoAcceptUntrustedCertificates: true\n"
      brokerProperties: {}
      capacity: 1
    
  2. Kör följande kommando för att tillämpa konfigurationen:

    kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
    

Kontrollera konfigurationen

Så här bekräftar du att containern för tillgångsidentifiering är konfigurerad och körs:

  1. Använd följande kommando för att kontrollera poddloggarna:

    kubectl logs <insert aio-akri-opcua-asset-discovery pod name> -n azure-iot-operations
    

    En logg från aio-akri-opcua-asset-discovery podden anger efter några sekunder att identifieringshanteraren registrerade sig med Azure IoT Akri:

    2023-06-07 10:45:27.395 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Akri OPC UA Asset Detection (0.2.0-alpha.203+Branch.main.Sha.cd4045345ad0d148cca4098b68fc7da5b307ce13) is starting with the process id: 1
    2023-06-07 10:45:27.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Got IP address of the pod from POD_IP environment variable.
    2023-06-07 10:45:28.695 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Registered with Akri system with Name opcua-asset for http://10.1.0.92:80 with type: Network as shared: True
    2023-06-07 10:45:28.696 +00:00 info: OpcUaAssetDetection.Akri.Program[0]      Press CTRL+C to exit
    

    Efter ungefär en minut utfärdar Azure IoT Akri den första identifieringsbegäran baserat på konfigurationen:

    2023-06-07 12:49:17.344 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[10]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Reading message.
    2023-06-07 12:49:18.046 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Got discover request opcuaDiscoveryMethod:
            - asset:
                endpointUrl: "opc.tcp://opcplc-000000:50000"
                useSecurity: false
                autoAcceptUntrustedCertificates: true
           from ipv6:[::ffff:10.1.7.47]:39708
    2023-06-07 12:49:20.238 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Start asset discovery
    2023-06-07 12:49:20.242 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Discovering OPC UA endpoint opc.tcp://opcplc-000000:50000 using Asset Discovery
    ...
    2023-06-07 14:20:03.905 +00:00 info: OpcUa.Common.Dtdl.DtdlGenerator[6901]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Created DTDL_2 model for boiler_1 with 35 telemetries in 0 ms
    2023-06-07 14:20:04.208 +00:00 info: OpcUa.AssetDiscovery.Akri.CustomResources.CustomResourcesManager[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Generated 1 asset CRs from discoveryUrl opc.tcp://opcplc-000000:50000
    2023-06-07 14:20:04.208 +00:00 info: OpcUa.Common.Client.OpcUaClient[1005]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Session ns=8;i=1828048901 is closing
    ...
    2023-06-07 14:20:05.002 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sending response to caller ...
    2023-06-07 14:20:05.003 +00:00 dbug: Grpc.AspNetCore.Server.ServerCallHandler[15]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sending message.
    2023-06-07 14:20:05.004 +00:00 info: OpcUa.AssetDiscovery.Akri.Services.DiscoveryHandlerService[0]
          => SpanId:603279c62c9ccbb0, TraceId:15ad328e1e803c55bc6731266aae8725, ParentId:0000000000000000 => ConnectionId:0HMR7AMCHHG2G => RequestPath:/v0.DiscoveryHandler/Discover RequestId:0HMR7AMCHHG2G:00000001
          Sent successfully
    

    När identifieringen är klar skickar identifieringshanteraren tillbaka resultatet till Azure IoT Akri för att skapa en anpassad Akri-instansresurs med tillgångsinformation och observerbara variabler. Identifieringshanteraren upprepar identifieringen var 10:e minut för att identifiera eventuella ändringar på servern.

  2. Om du vill visa de identifierade Azure IoT Akri-instanserna kör du följande kommando:

    kubectl get akrii -n azure-iot-operations
    

    Utdata från föregående kommando ser ut som i följande exempel. Du kan behöva vänta några sekunder tills Akri-instansen har skapats:

    NAMESPACE              NAME                      CONFIG             SHARED   NODES            AGE
    azure-iot-operations   akri-opcua-asset-dbdef0   akri-opcua-asset   true     ["my-aio-vm"]   35m
    

    OPC UA Anslut eller-övervakaren bevakar nya anpassade Azure IoT Akri-instansresurser av typen opc-ua-assetoch genererar de första tillgångstyperna och anpassade resurser för dem. Du kan ändra anpassade resurser genom att lägga till inställningar som utökad publicering för fler datapunkter eller inställningarna för OPC UA Broker-observabilitet.

  3. Kontrollera att Akri-instansen är korrekt ansluten till OPC UA Broker genom att köra följande kommando. Ersätt platshållaren med namnet på akri-instansen som ingick i utdata från föregående kommando:

    kubectl get akrii <AKRI_INSTANCE_NAME> -n azure-iot-operations -o json
    

    Kommandoutdata innehåller ett avsnitt som ser ut som i följande exempel. Kodfragmentet visar Akri-instansvärdena brokerProperties och bekräftar att OPC UA Broker är ansluten.

    "spec": {
    
            "brokerProperties": {
                "ApplicationUri": "Boiler #2",
                "AssetEndpointProfile": "{\"spec\":{\"uuid\":\"opc-ua-broker-opcplc-000000-azure-iot-operation\"……