Menemukan sumber data OPC UA menggunakan Pratinjau Azure IoT Akri

Penting

Pratinjau Operasi Azure IoT – diaktifkan oleh Azure Arc saat ini dalam PRATINJAU. Anda tidak boleh menggunakan perangkat lunak pratinjau ini di lingkungan produksi.

Lihat Ketentuan Penggunaan Tambahan untuk Pratinjau Microsoft Azure untuk persyaratan hukum yang berlaku pada fitur Azure dalam versi beta, pratinjau, atau belum dirilis secara umum.

Dalam artikel ini, Anda mempelajari cara menemukan sumber data OPC UA. Setelah menyebarkan Operasi Azure IoT, Anda mengonfigurasi Pratinjau Azure IoT Akri untuk menemukan sumber data OPC UA di tepi. Azure IoT Akri membuat sumber daya kustom ke dalam namespace Operasi Azure IoT di kluster Anda untuk mewakili perangkat yang ditemukan. Kemampuan untuk menemukan sumber data OPC UA menyederhanakan proses konfigurasi secara manual dari cloud dan onboarding ke kluster Anda. Saat ini, Azure IoT Akri tidak dapat mendeteksi dan membuat aset yang dapat diserap ke dalam Pratinjau Azure Device Registry. Untuk informasi selengkapnya tentang fitur yang didukung, lihat Gambaran umum Azure IoT Akri.

Azure IoT Akri memungkinkan Anda mendeteksi dan membuat Assets di ruang alamat server AGEN PENGGUNA OPC. Deteksi aset OPC UA menghasilkan AssetType dan Asset sumber daya kustom (CR) Kubernetes untuk spesifikasi OPC UA Device Integration (DI) yang sesuai Assets.

Prasyarat

  • Pratinjau Operasi Azure IoT terinstal. Penginstalan mencakup Azure IoT Akri. Untuk informasi selengkapnya, lihat Mulai Cepat: Menyebarkan Pratinjau Operasi Azure IoT ke kluster Kubernetes dengan dukungan Arc.

  • Pastikan pod agen Azure IoT Akri dikonfigurasi dengan benar dengan menjalankan kode berikut:

    kubectl get pods -n azure-iot-operations
    

    Anda akan melihat agen dan pod handler penemuan berjalan.

    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
    

Mengonfigurasi handler penemuan OPC UA

Untuk mengonfigurasi handler penemuan OPC UA kustom dengan deteksi aset, pertama-tama Anda membuat file konfigurasi YAML menggunakan nilai yang dijelaskan di bagian ini. Sebelum Anda membuat file, perhatikan detail konfigurasi berikut:

  • Server yang ditentukan berisi model alamat sampel yang menggunakan spesifikasi pendamping Robotika, yang didasarkan pada spesifikasi DI. Model yang menggunakan spesifikasi ini diperlukan untuk deteksi aset. Robot berisi lima aset dengan variabel yang dapat diamati dan node DeviceHealth yang secara otomatis terdeteksi untuk pemantauan.

  • Anda dapat menentukan server lain dengan menyediakan endpointUrl dan memastikan bahwa profil keamanan None diaktifkan.

  • Untuk mengaktifkan Azure IoT Akri untuk menemukan server, konfirmasikan bahwa Anda menentukan URL titik akhir penemuan yang benar selama penginstalan.

  • URL penemuan muncul sebagai opc.tcp://<FQDN>:50000/. Untuk menemukan FQDN server OPC PLC Anda, navigasikan ke penyebaran Anda di portal Azure. Untuk setiap server, salin dan tempel nilai FQDN ke dalam URL penemuan Anda. Contoh berikut menunjukkan penemuan dua server PLC OPC. Anda dapat menambahkan parameter aset untuk setiap server PLC OPC. Jika Anda hanya memiliki satu server OPC PLC, hapus salah satu aset.

    Nama Wajib Tipe data Default Komentar
    EndpointUrl benar String nihil URL titik akhir OPC UA yang akan digunakan untuk penemuan aset
    AutoAcceptUntrustedCertificates benar ¹ Boolean salah Apakah klien secara otomatis menerima sertifikat yang tidak tepercaya. Sertifikat hanya dapat diterima secara otomatis sebagai tepercaya jika tidak ada kesalahan yang tidak dapat ditekan selama validasi rantai. Misalnya, sertifikat dengan rantai yang tidak lengkap tidak diterima.
    UseSecurity benar ¹ Boolean benar Apakah klien harus menggunakan koneksi aman
    UserName salah String nihil Nama pengguna untuk autentikasi pengguna. ²
    Password salah String nihil Kata sandi pengguna untuk autentikasi pengguna. ²

    ¹ Versi handler penemuan saat ini hanya mendukung tidak ada keamanan UseSecurity=false dan memerlukan autoAcceptUntrustedCertificates=true.
    ² Implementasi sementara hingga Azure IoT Akri dapat meneruskan rahasia K8S.

  1. Untuk membuat file konfigurasi YAML, salin dan tempel konten berikut ke dalam file baru, dan simpan sebagai opcua-configuration.yaml:

    Jika Anda menggunakan server PLC simulasi yang disebarkan dengan Mulai Cepat Operasi Azure IoT, Anda tidak perlu mengubah endpointUrl. Jika Anda memiliki server OPC UA Anda sendiri yang berjalan atau menggunakan server PLC yang disimulasikan yang disebarkan di Azure, tambahkan URL titik akhir Anda yang sesuai.

    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. Terapkan YAML untuk mengonfigurasi Azure Iot Akri untuk menemukan aset:

    kubectl apply -f opcua-configuration.yaml -n azure-iot-operations
    
  3. Untuk mengonfirmasi bahwa kontainer penemuan aset dikonfigurasi dan dimulai, periksa log pod dengan perintah berikut:

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

    Log dari aio-akri-opcua-asset-discovery pod menunjukkan setelah beberapa detik bahwa handler penemuan mendaftarkan dirinya dengan 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
    

    Setelah sekitar satu menit, Azure IoT Akri mengeluarkan permintaan penemuan pertama berdasarkan konfigurasi:

    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
    
    

    Setelah penemuan selesai, hasilnya dikirim kembali ke Azure IoT Akri untuk membuat sumber daya kustom instans Akri dengan informasi aset dan variabel yang dapat diamati. Handler penemuan mengulangi penemuan setiap 10 menit untuk mendeteksi perubahan pada server.

  4. Untuk melihat instans Azure IoT Akri yang ditemukan, jalankan perintah berikut:

    kubectl get akrii -n azure-iot-operations
    

    Mungkin perlu beberapa menit agar instans muncul.

    Output dari perintah sebelumnya terlihat seperti contoh berikut. Anda mungkin perlu menunggu beberapa detik agar instans Akri dibuat:

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

    Anda dapat memeriksa sumber daya kustom instans dengan menggunakan editor seperti OpenLens, di bawah CustomResources/akri.sh/Instance.

    Anda juga dapat melihat YAML definisi sumber daya kustom dari instans yang dibuat:

    kubectl get akrii -n azure-iot-operations -o yaml
    

    Supervisor Koneksi or OPC UA mengawasi sumber daya kustom instans Azure IoT Akri baru jenis opc-ua-asset, dan menghasilkan jenis aset awal dan sumber daya kustom aset untuk mereka. Anda dapat memodifikasi sumber daya kustom aset untuk menambahkan pengaturan seperti memperluas penerbitan untuk lebih banyak titik data, atau untuk menambahkan pengaturan pengamatan OPC UA Broker.

  5. Untuk mengonfirmasi bahwa instans Akri terhubung dengan benar ke OPC UA Broker, salin dan tempel nama instans Akri yang merupakan output dari langkah sebelumnya, ke dalam perintah berikut:

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

    Output perintah terlihat seperti contoh berikut. Contoh output ini menunjukkan nilai instans brokerProperties Akri dan mengonfirmasi bahwa OPC UA Broker terhubung.

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