Mengonfigurasi OPC Publisher
Penting
Saat kami memperbarui artikel ini, lihat Azure Industrial IoT untuk konten terbaru.
Anda dapat mengonfigurasi Publisher OPC untuk menentukan:
- Data simpul AGEN PENGGUNA OPC berubah menjadi penerbitan.
- Peristiwa OPC UA untuk dipublikasikan.
- Format telemetri.
Anda dapat mengonfigurasi Publisher OPC menggunakan file konfigurasi atau menggunakan panggilan metode.
Gunakan file konfigurasi
Bagian ini menjelaskan opsi untuk mengonfigurasi penerbitan simpul AGEN PENGGUNA OPC dengan file konfigurasi.
Menggunakan file konfigurasi untuk mengonfigurasi perubahan data penerbitan
Cara termampu untuk mengonfigurasi simpul AGEN PENGGUNA OPC untuk diterbitkan adalah dengan file konfigurasi. Format file konfigurasi di dokumentasikan di publishednodes.json di repositori.
Sintaks file konfigurasi telah berubah dari waktu ke waktu. OPC Publisher masih membaca format lama, tetapi mengonversinya menjadi format terbaru saat mempertahankan konfigurasi.
Contoh berikut menunjukkan format file konfigurasi:
[
{
"EndpointUrl": "opc.tcp://testserver:62541/Quickstarts/ReferenceServer",
"UseSecurity": true,
"OpcNodes": [
{
"Id": "i=2258",
"OpcSamplingInterval": 2000,
"OpcPublishingInterval": 5000,
"DisplayName": "Current time"
}
]
}
]
Menggunakan file konfigurasi untuk mengonfigurasi peristiwa penerbitan
Untuk menerbitkan peristiwa OPC UA, Anda menggunakan file konfigurasi yang sama seperti untuk perubahan data.
Contoh berikut menunjukkan cara mengonfigurasi penerbitan untuk peristiwa yang dihasilkan oleh server SimpleEvents. Server SimpleEvents dapat ditemukan di repositori OPC Foundation adalah:
[
{
"EndpointUrl": "opc.tcp://testserver:62563/Quickstarts/SimpleEventsServer",
"OpcEvents": [
{
"Id": "i=2253",
"DisplayName": "SimpleEventServerEvents",
"SelectClauses": [
{
"TypeId": "i=2041",
"BrowsePaths": [
"EventId"
]
},
{
"TypeId": "i=2041",
"BrowsePaths": [
"Message"
]
},
{
"TypeId": "nsu=http://opcfoundation.org/Quickstarts/SimpleEvents;i=235",
"BrowsePaths": [
"/2:CycleId"
]
},
{
"TypeId": "nsu=http://opcfoundation.org/Quickstarts/SimpleEvents;i=235",
"BrowsePaths": [
"/2:CurrentStep"
]
}
],
"WhereClause": [
{
"Operator": "OfType",
"Operands": [
{
"Literal": "ns=2;i=235"
}
]
}
]
}
]
}
]
Menggunakan panggilan metode
Bagian ini menjelaskan panggilan metode yang dapat Anda gunakan untuk mengonfigurasi Publisher OPC.
Mengonfigurasi menggunakan panggilan metode OPC UA
OPC Publisher mencakup OPC UA Server, yang dapat diakses pada port 62222. Jika nama host adalah penerbit, maka URI titik akhir adalah: opc.tcp://publisher:62222/UA/Publisher.
Titik akhir ini mengekspos empat metode berikut:
- PublishNode
- UnpublishNode
- GetPublishedNodes
- IoT HubDirectMethod
Mengonfigurasi menggunakan panggilan metode langsung IoT Hub
OPC Publisher mengimplementasikan panggilan metode langsung IoT Hub berikut:
- PublishNodes
- UnpublishNodes
- UnpublishAllNodes
- GetConfiguredEndpoints
- GetConfiguredNodesOnEndpoint
- GetDiagnosticInfo
- GetDiagnosticLog
- GetDiagnosticStartupLog
- ExitApplication
- GetInfo
Format payload JSON dari permintaan dan respons metode ditentukan dalam opcpublisher/HubMethodModel.cs.
Jika Anda memanggil metode yang tidak diketahui pada modul, metode merespons dengan string yang mengatakan metode tidak diimplementasikan. Anda dapat memanggil metode yang tidak diketahui sebagai cara untuk melakukan ping modul.
Mengonfigurasi nama pengguna dan kata sandi untuk autentikasi
Mode autentikasi dapat diatur melalui panggilan metode langsung IoT Hub. Payload harus berisi properti OpcAuthenticationMode dan nama pengguna dan kata sandi:
{
"EndpointUrl": "<Url of the endpoint to set authentication settings>",
"OpcAuthenticationMode": "UsernamePassword",
"Username": "<Username>",
"Password": "<Password>"
...
}
Kata sandi dienkripsi oleh IoT Hub Workload Client dan disimpan dalam konfigurasi penerbit. Untuk mengubah autentikasi kembali ke anonim, gunakan metode dengan payload berikut:
{
"EndpointUrl": "<Url of the endpoint to set authentication settings>",
"OpcAuthenticationMode": "Anonymous"
...
}
Jika properti OpcAuthenticationMode tidak diatur dalam payload, pengaturan autentikasi tetap tidak berubah dalam konfigurasi.
Mengonfigurasi penerbitan telemetri
Ketika OPC Publisher menerima pemberitahuan perubahan nilai dalam simpul yang diterbitkan, OPC menghasilkan pesan berformat JSON yang dikirim ke IoT Hub.
Anda dapat mengonfigurasi konten pesan berformat JSON ini menggunakan file konfigurasi. Jika tidak ada file konfigurasi yang ditentukan dengan --tc opsi , konfigurasi default digunakan yang kompatibel dengan akselerator solusi pabrik tersambung.
Jika Publisher OPC dikonfigurasi untuk membuat batch pesan, maka mereka dikirim sebagai array JSON yang valid.
Telemetri berasal dari sumber berikut:
- Konfigurasi simpul Publisher OPC untuk simpul
- Objek MonitoredItem dari tumpukan OPC UA tempat OPC Publisher mendapatkan pemberitahuan.
- Argumen diteruskan ke pemberitahuan ini, yang menyediakan detail tentang perubahan nilai data.
Telemetri yang dimasukkan ke dalam pesan berformat JSON adalah pilihan properti penting dari objek ini. Jika Anda memerlukan lebih banyak properti, Anda perlu mengubah OPC Publisher basis kode.
Sintaks file konfigurasi adalah sebagai berikut:
// The configuration settings file consists of two objects:
// 1) The 'Defaults' object, which defines defaults for the telemetry configuration
// 2) An array 'EndpointSpecific' of endpoint specific configuration
// Both objects are optional and if they are not specified, then publisher uses
// its internal default configuration, which generates telemetry messages compatible
// with the Microsoft Connected factory Preconfigured Solution (https://github.com/Azure/azure-iot-connected-factory).
// A JSON telemetry message for Connected factory looks like:
// {
// "NodeId": "i=2058",
// "ApplicationUri": "urn:myopcserver",
// "DisplayName": "CurrentTime",
// "Value": {
// "Value": "10.11.2017 14:03:17",
// "SourceTimestamp": "2017-11-10T14:03:17Z"
// }
// }
// The 'Defaults' object in the sample below, are similar to what publisher is
// using as its internal default telemetry configuration.
{
"Defaults": {
// The first two properties ('EndpointUrl' and 'NodeId' are configuring data
// taken from the OpcPublisher node configuration.
"EndpointUrl": {
// The following three properties can be used to configure the 'EndpointUrl'
// property in the JSON message send by publisher to IoT Hub.
// Publish controls if the property should be part of the JSON message at all.
"Publish": false,
// Pattern is a regular expression, which is applied to the actual value of the
// property (here 'EndpointUrl').
// If this key is omitted (which is the default), then no regex matching is done
// at all, which improves performance.
// If the key is used you need to define groups in the regular expression.
// Publisher applies the regular expression and then concatenates all groups
// found and use the resulting string as the value in the JSON message to
//sent to IoT Hub.
// This example mimics the default behaviour and defines a group,
// which matches the conplete value:
"Pattern": "(.*)",
// Here some more exaples for 'Pattern' values and the generated result:
// "Pattern": "i=(.*)"
// defined for Defaults.NodeId.Pattern, will generate for the above sample
// a 'NodeId' value of '2058'to be sent by publisher
// "Pattern": "(i)=(.*)"
// defined for Defaults.NodeId.Pattern, will generate for the above sample
// a 'NodeId' value of 'i2058' to be sent by publisher
// Name allows you to use a shorter string as property name in the JSON message
// sent by publisher. By default the property name is unchanged and will be
// here 'EndpointUrl'.
// The 'Name' property can only be set in the 'Defaults' object to ensure
// all messages from publisher sent to IoT Hub have a similar layout.
"Name": "EndpointUrl"
},
"NodeId": {
"Publish": true,
// If you set Defaults.NodeId.Name to "ni", then the "NodeId" key/value pair
// (from the above example) will change to:
// "ni": "i=2058",
"Name": "NodeId"
},
// The MonitoredItem object is configuring the data taken from the MonitoredItem
// OPC UA object for published nodes.
"MonitoredItem": {
// If you set the Defaults.MonitoredItem.Flat to 'false', then a
// 'MonitoredItem' object will appear, which contains 'ApplicationUri'
// and 'DisplayNode' proerties:
// "NodeId": "i=2058",
// "MonitoredItem": {
// "ApplicationUri": "urn:myopcserver",
// "DisplayName": "CurrentTime",
// }
// The 'Flat' property can only be used in the 'MonitoredItem' and
// 'Value' objects of the 'Defaults' object and will be used
// for all JSON messages sent by publisher.
"Flat": true,
"ApplicationUri": {
"Publish": true,
"Name": "ApplicationUri"
},
"DisplayName": {
"Publish": true,
"Name": "DisplayName"
}
},
// The Value object is configuring the properties taken from the event object
// the OPC UA stack provided in the value change notification event.
"Value": {
// If you set the Defaults.Value.Flat to 'true', then the 'Value'
// object will disappear completely and the 'Value' and 'SourceTimestamp'
// members won't be nested:
// "DisplayName": "CurrentTime",
// "Value": "10.11.2017 14:03:17",
// "SourceTimestamp": "2017-11-10T14:03:17Z"
// The 'Flat' property can only be used for the 'MonitoredItem' and 'Value'
// objects of the 'Defaults' object and will be used for all
// messages sent by publisher.
"Flat": false,
"Value": {
"Publish": true,
"Name": "Value"
},
"SourceTimestamp": {
"Publish": true,
"Name": "SourceTimestamp"
},
// 'StatusCode' is the 32 bit OPC UA status code
"StatusCode": {
"Publish": false,
"Name": "StatusCode"
// 'Pattern' is ignored for the 'StatusCode' value
},
// 'Status' is the symbolic name of 'StatusCode'
"Status": {
"Publish": false,
"Name": "Status"
}
}
},
// The next object allows to configure 'Publish' and 'Pattern' for specific
// endpoint URLs. Those will overwrite the ones specified in the 'Defaults' object
// or the defaults used by publisher.
// It is not allowed to specify 'Name' and 'Flat' properties in this object.
"EndpointSpecific": [
// The following shows how a endpoint specific configuration can look like:
{
// 'ForEndpointUrl' allows to configure for which OPC UA server this
// object applies and is a required property for all objects in the
// 'EndpointSpecific' array.
// The value of 'ForEndpointUrl' must be an 'EndpointUrl' configured in
// the publishednodes.json confguration file.
"ForEndpointUrl": "opc.tcp://<your_opcua_server>:<your_opcua_server_port>/<your_opcua_server_path>",
"EndpointUrl": {
// We overwrite the default behaviour and publish the
// endpoint URL in this case.
"Publish": true,
// We are only interested in the URL part following the 'opc.tcp://' prefix
// and define a group matching this.
"Pattern": "opc.tcp://(.*)"
},
"NodeId": {
// We are not interested in the configured 'NodeId' value,
// so we do not publish it.
"Publish": false
// No 'Pattern' key is specified here, so the 'NodeId' value will be
// taken as specified in the publishednodes configuration file.
},
"MonitoredItem": {
"ApplicationUri": {
// We already publish the endpoint URL, so we do not want
// the ApplicationUri of the MonitoredItem to be published.
"Publish": false
},
"DisplayName": {
"Publish": true
}
},
"Value": {
"Value": {
// The value of the node is important for us, everything else we
// are not interested in to keep the data ingest as small as possible.
"Publish": true
},
"SourceTimestamp": {
"Publish": false
},
"StatusCode": {
"Publish": false
},
"Status": {
"Publish": false
}
}
}
]
}
Langkah berikutnya
Sekarang Anda telah mempelajari cara mengonfigurasi Publisher OPC, langkah selanjutnya yang disarankan adalah mempelajari cara Menjalankan OPC Publisher.