Sdílet prostřednictvím


Zjišťování zdrojů dat OPC UA pomocí Azure IoT Akri Preview

Důležité

Azure IoT Operations Preview – Služba Azure Arc je aktuálně ve verzi PREVIEW. Tento software ve verzi Preview byste neměli používat v produkčních prostředích.

Právní podmínky, které platí pro funkce Azure, které jsou ve verzi beta, verzi Preview nebo které zatím nejsou veřejně dostupné, najdete v Dodatečných podmínkách použití pro Microsoft Azure verze Preview.

V tomto článku se dozvíte, jak automaticky zjišťovat zdroje dat OPC UA. Po nasazení Azure IoT Operations Preview nakonfigurujete Azure IoT Akri Preview tak, aby na hraničních zařízeních objevila zdroje dat OPC UA. Azure IoT Akri vytváří vlastní prostředky v clusteru Kubernetes, které představují zdroje dat, které zjistí. Možnost zjistit zdroje dat OPC UA eliminuje potřebu je ručně nakonfigurovat pomocí portálu Azure IoT Operations (Preview).

Důležité

V současné době nemůžete azure Device Registry použít ke správě prostředků, které Azure IoT Akri zjišťuje a vytváří.

Azure IoT Akri umožňuje detekovat a vytvářet prostředky v adresních prostorech serveru OPC UA. Detekce prostředků OPC UA generuje AssetType a Asset vlastní prostředky pro prostředky kompatibilní se specifikací OPC UA Device Integration (DI).

Požadavky

  • Nainstalujte Azure IoT Operations Preview. Pokud chcete nainstalovat operace Azure IoT pro demonstrační a průzkumné účely, projděte si rychlý start: Nasazení Azure IoT Operations Preview do clusteru Kubernetes s podporou arc.

  • Spuštěním následujícího příkazu ověřte, že jsou pody Azure IoT Akri správně nakonfigurované:

    kubectl get pods -n azure-iot-operations
    

    Výstup obsahuje řádky, které zobrazují pody agenta Akri a obslužné rutiny zjišťování jsou spuštěné:

    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
    

Konfigurace obslužné rutiny zjišťování OPC UA

Pokud chcete nakonfigurovat obslužnou rutinu zjišťování OPC UA pro detekci prostředků, vytvořte konfigurační soubor YAML, který obsahuje hodnoty popsané v této části:

Název Povinné Datatype Výchozí Komentář
EndpointUrl true String null Adresa URL koncového bodu OPC UA, která se má použít ke zjišťování prostředků
AutoAcceptUntrustedCertificates true ¹ Logický false (nepravda) Má klient automaticky přijímat nedůvěryhodné certifikáty? Certifikát může být automaticky považován za důvěryhodný pouze v případě, že během ověřování řetězu nedošlo k žádným nestisknutelným chybám. Certifikát s neúplným řetězem například není přijat.
UseSecurity true ¹ Logická hodnota true Má klient používat zabezpečené připojení?
UserName false (nepravda) String null Uživatelské jméno pro ověřování uživatelů. ²
Password false (nepravda) String null Heslo pro ověřování uživatelů. ²

¹ Aktuální verze obslužné rutiny zjišťování podporuje UseSecurity=false a vyžaduje autoAcceptUntrustedCertificates=true.
² Dočasná implementace, dokud Azure IoT Akri nedokáže předat tajné kódy Kubernetes.

Následující příklad ukazuje zjišťování serveru OPC PLC. Můžete přidat parametry assetu pro více serverů OPC PLC.

  1. Chcete-li vytvořit konfigurační soubor YAML, zkopírujte a vložte následující obsah do nového souboru a uložte ho takto opcua-configuration.yaml:

    Pokud používáte simulovaný server PLC nasazený pomocí rychlého startu Azure IoT Operations, nemusíte měnit endpointUrl. Pokud máte spuštěné vlastní servery OPC UA nebo používáte simulované servery PLC nasazené v Azure, přidejte odpovídajícím způsobem adresu URL koncového bodu. Adresy URL koncového bodu zjišťování vypadají takto opc.tcp://<FQDN>:50000/. Pokud chcete najít plně kvalifikované názvy domén serverů OPC PLC, přejděte na webu Azure Portal k nasazení. Pro každý server zkopírujte a vložte hodnotu plně kvalifikovaného názvu domény do adres URL koncového bodu.

    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. Konfiguraci použijete spuštěním následujícího příkazu:

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

Ověření konfigurace

Pokud chcete ověřit, že je kontejner zjišťování prostředků nakonfigurovaný a spuštěný:

  1. Pomocí následujícího příkazu zkontrolujte protokoly podů:

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

    Protokol z podu aio-akri-opcua-asset-discovery označuje po několika sekundách, že se obslužná rutina zjišťování zaregistrovala v 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
    

    Přibližně za minutu Azure IoT Akri vydá první požadavek na zjišťování na základě konfigurace:

    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
    

    Po dokončení zjišťování obslužná rutina zjišťování odešle výsledek zpět do Azure IoT Akri a vytvoří vlastní prostředek instance Akri s informacemi o prostředku a pozorovatelnými proměnnými. Obslužná rutina zjišťování opakuje zjišťování každých 10 minut, aby zjistila všechny změny na serveru.

  2. Pokud chcete zobrazit zjištěné instance Azure IoT Akri, spusťte následující příkaz:

    kubectl get akrii -n azure-iot-operations
    

    Výstup z předchozího příkazu vypadá jako v následujícím příkladu. Možná budete muset několik sekund počkat, než se instance Akri vytvoří:

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

    OPC UA Připojení or supervisor sleduje nové vlastní prostředky instance Azure IoT Akri typu opc-ua-asseta vygeneruje pro ně počáteční typy prostředků a vlastní prostředky prostředků. Vlastní prostředky prostředku můžete upravit přidáním nastavení, jako je rozšířené publikování pro více datových bodů nebo nastavení pozorovatelnosti Zprostředkovatele OPC UA.

  3. Pokud chcete ověřit, že instance Akri je správně připojená ke zprostředkovateli OPC UA, spusťte následující příkaz. Zástupný symbol nahraďte názvem instance Akri, která byla zahrnuta ve výstupu předchozího příkazu:

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

    Výstup příkazu obsahuje oddíl, který vypadá jako v následujícím příkladu. Fragment kódu zobrazuje hodnoty instance brokerProperties Akri a potvrzuje, že je zprostředkovatel OPC UA připojený.

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