IBH Link UA:MQTT Konfiguration über XML
Inhaltsverzeichnis
MQTT Anbindung
Konfiguration der MQTT Anbindung
Die Konfiguration erfolgt über eine XML Datei, die über die Weboberfäche unter "Client" eingelesen wird. Es können mehrere Verbindungen zu verschiedenen MQTT Brokern gleichzeitig hergestellt werden.
Ungesicherte Verbindung
<MQTTConfiguration> <MQTTServer MQTTServerAddress="mqtt.brokeradresse.com:1883" MQTTClientID="beliebiger Servername" MQTTClientUserName="Benutzername im MQTT Broker" MQTTClientPassword="passwort"> <MQTTTopicDefinition> <publish> </publish> <subscribe> </subscribe> </MQTTTopicDefinition> </MQTTServer> </MQTTConfiguration>
Beispiel
<MQTTConfiguration> <MQTTServer MQTTServerAddress="mqtt.ibhsoftec.com:1883" MQTTClientID="MQTT-Test" MQTTClientUserName="axel" MQTTClientPassword="password"> <MQTTTopicDefinition> <publish> </publish> <subscribe> </subscribe> </MQTTTopicDefinition> </MQTTServer> </MQTTConfiguration>
Es wird eine MQTT Verbindung zu dem MQTT Broker (RabbitMQ) auf mqtt.ibhsoftec.com aufgebaut. Im OPC UA Server wird parallel die Struktur "MQTT-Test" mit einem eigenen Namespace unter MQTT aufgebaut.
Ansicht der MQTT Struktur im UA Expert
Gesicherte Verbindung
Bei der gesicherten Verbindung kopiert man den Inhalt der Zertifikatsdateien in die XML Datei. Je nach Konfiguration des MQTT Brokers kann man auch Benutzername und Passwort weglassen.
<MQTTConfiguration> <MQTTServer MQTTServerAddress="ssl://mqtt.brokeradresse.com:8883" MQTTClientID="beliebiger Servername" MQTTClientUserName="Benutzername im MQTT Broker" MQTTClientPassword="passwort" MQTTCA_Certificate=" -----BEGIN CERTIFICATE----- .. -----END CERTIFICATE-----" MQTTCertificate=" -----BEGIN CERTIFICATE----- .. -----END CERTIFICATE-----" MQTTPrivateKey=" -----BEGIN RSA PRIVATE KEY----- .. -----END RSA PRIVATE KEY-----" > <MQTTTopicDefinition> <publish> </publish> <subscribe> </subscribe> </MQTTTopicDefinition> </MQTTServer> <MQTTConfiguration>
Verbindung zum Microsoft Azure IoT Hub
Zur Verbindung mit dem Azure IoT Hub benötigt man nur den AzureIoTConnectionString. Der Rest ist in der Software verankert. Man beachte, dass pro Azure IoT Hub nur ein Topic möglich ist.
<MQTTConfiguration> <MQTTServer AzureIoTConnectionString="HostName=IBHLinkUA.azure-devices.net;DeviceId=IBHLinkUA-AzureIoT;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" > <MQTTTopicDefinition> <publish> </publish> <subscribe> </subscribe> </MQTTTopicDefinition> </MQTTServer> <MQTTConfiguration>
Verbindung zu Amazon AWSIoT
MQTTCA_Certificate=[1]
Bei der AWS IoT Verbindung kopiert man den Inhalt der obigen Zertifikatsdateien in die XML Datei. Benutzername und Passwort ist nicht erforderlich.
<MQTTConfiguration> <MQTTServer MQTTServerAddress="ssl://a3tbsmqjzx0901.iot.eu-central-1.amazonaws.com:8883" MQTTClientID="IBHLinkUA-Demo" MQTTCA_Certificate="aus [2]" MQTTCertificate="siehe oben" MQTTPrivateKey="siehe oben" > <MQTTTopicDefinition> <publish> </publish> <subscribe> </subscribe> </MQTTTopicDefinition> </MQTTServer> <MQTTConfiguration>
Weitere Parameter in der MQTTServer Konfiguration
Last Will Message
Der IBH Link UA kann dem Broker mitteilen, was passieren soll, wenn die Verbindung unerwartet abbricht.
<MQTTConfiguration> <MQTTServer . . MQTTWill_Message="Meldung, die der MQTT Broaker an alle verbundenen Clients sendet, wenn die Verbindung unerwartet abbricht" MQTTWill_Topic="Topicname der Verbindung" MQTTWill_QoS="0,1, oder 3" MQTTWill_Retain="true oder false" . >
Zwischenspeicherung von MQTT Meldungen
<MQTTConfiguration> <MQTTServer . . MaxBufferedMessages=1000 PersistDir="mqttpersist" . >
MaxBufferedMessages
Der IBH Link UA ist in der Lage, MQTT Meldungen bei Verbindungsunterbrechungen zwischenzuspeichern. Mit diesem Parameter gibt man die maximale Anzahl der Meldungen, die zwischengespeichert werden können, an.
PersistDir
Wenn man eine SD-Karte auf der Rückseite des IBH Link UA einschiebt, werden bei Angabe dieses Parameters, Meldungen auf der Karte remanent gespeichert. In diesem Fall gehen auch bei Aussschalten der Maschine keine Daten verloren. Das Parameter gibt das Verzeichnis für die Meldungen auf der SD Karte an.
Konfiguration der Topics
Es können eine oder mehrere Topics unter Publish oder Subscribe definiert werden. (Bei Microsoft Azure IoT nur 1 Topic !)
<MQTTTopicDefinition> <publish> <Topicdefinition Topicparameter > <Variablen> <Topicdefinition/> </publish> <subscribe> <Topicdefinition Topicparameter > <Variablen> <Topicdefinition/> </subscribe> </MQTTTopicDefinition>
Topic Parameter
Beispiel:
<MQTTTopicDefinition> <publish> <topicname QoS="0" retain="true" trigger_var="ns=4;s=IBH_OPCUA.PLC.GlobalVars.TriggerVar" trigger_sampling_interval="1000" trigger_mode="rising_edge" status_var="ns=4;s=IBH_OPCUA.PLC.GlobalVars.StatusVar" >
QoS
Dieses Parameter kann "0", "1" oder "2" enthalten. Achtung! Nicht alle MQTT Broker unterstützen alle Stufen.
retain
Kann "true" oder "false" enthalten. Achtung! Nicht alle MQTT Broker unterstützen retain, im Zweifelsfall Parameter weglassen.
Trigger
kein Trigger definiert
Es werden nur Werte vom eigenen OPC Server bei Änderung übertragen.
Konstanten, Werte von externen OPC Server oder Werte ohne Zuweisung werden nicht übertragen.
Die Übertragung erfolgt für jeden Wert separat. Es kann über das Parameter deadband="gleitpunktwert" eine Toleranzgrenze angegeben weden. (ab Firmwareversion 5.3)
Beispiel: deadband="0.1" : Es wird nur bei einer Wertänderung > 0.1 der Wert übertragen.
Trigger definiert
Es werden bei Eintreten der Triggerbedingung alle Variablen auf einmal übertragen. Die Triggerdefinition besteht aus 3 Parametern:
- trigger_mode="rising_edge" oder "falling_edge" oder "value_change"
- trigger_var="Nodedefinition der Triggervariablen"
- trigger_sampling_interval="ms"
bei trigger_mode="value_change" kann eine Toleranzgrenze deadband="gleitpunktwert" angegeben werden (ab Firmwareversion 5.3)
status_var
Dies ist eine Bytevariable für den Übertragungsstatus im OPC Server. Der Wert wird bei erfolgreicher Übertragung bzw. Pufferung auf 1 gesetzt und falls ein Fehler aufgetreten oder der Puffer voll ist auf 2 gesetzt. Die SPS darf einen neuen Wert erst bei 1 übergeben und dann den Wert auf 0 setzen.
Variablen und Strukturen
Beispiel:
<MQTTTopicDefinition> <publish> <topicname name="axel/Hulsch" QoS="0" retain="true" trigger_var="ns=4;s=IBH_OPCUA.PLC.GlobalVars.TriggerVar" trigger_sampling_interval="1000" trigger_mode="rising_edge" status_var="ns=4;s=IBH_OPCUA.PLC.GlobalVars.StatusVar" > <diesel type="UInt16" opcvar="ns=4;s=IBH_OPCUA.PLC.Programs.Diesel.Tank" name="Diesel/Kraftstoff"/> <struct1> <struct11> <E10 type="UInt32" opcvar="ns=4;s=IBH_OPCUA.PLC.Programs.E10.Tank"/> <u2 type="UInt32" const="12345678"/> </struct11> <u1 type="UInt32"/> <u2 type="UInt32"/> </struct1> <topicname/>
Eine Variable wird folgendermassen definiert:
<variablenname type="Variablentype" opcvar="OPC UA Knotendefinition" name="Ersatzname"/>
Der Variablenname kann frei gewählt werden. Die Variable erscheint dann im OPC UA Server under einem eigenen Namespace. Unter dem optionalen Parameter "name" kann man einen Variablenname angeben, der Sonderzeichen wie z.B. '/' enthält. Ein Topic kann beliebig viele Variablen enthalten. Die Variablen werden als JSON - String über MQTT übertragen. Das obige Beispiel wird folgendermassen übertragen:
{ "diesel": 15064, "struct1": { "struct1": { "E10": 63776, "u2": 12345678 }, "u1": 0, "u2": 0 } }
Als Variblentype sind folgende Angaben möglich:
- "Boolean"
- "SByte"
- "Byte"
- "Int16"
- "Uint16"
- "Int32"
- "UInt32"
- "Float"
- "Double"
- "DateTime" (ISO 8601 string format: "YYYY-MM-DDThh:mm:ss")
- "String"
- "SByteArray"
- "ByteArray"
- "Int16Array"
- "Uint16Array"
- "Int32Array"
- "UInt32Array"
- "FloatArray"
- "DoubleArray"
- "StringArray"
Falls keine opcvar angegeben wird, wird die Variable nicht automatisch besprieben. Die Variable kann jedoch mit der Client Funktion beschrieben werden. Eine Variable kann auch eine Konstante enthalten. In diesem Fall wird anstelle opcvar const angegeben. Bei Feldern ist keine Konstante möglich. Beispiel:
<u2 type="UInt32" const="12345678"/>
Eine Struktur wird mit <struct> </struct> aufgebaut. Es sind beliebige Verschachtelungen möglich.
Verbinden von Variablen mit externen OPCUA Server Variablen
Beispiel:
<MQTTConfiguration> <OPCUAServer> <BoilerExample uri="urn:DELL-XPS:UnifiedAutomation:UaServerCpp" EndpointUrl="opc.tcp://DELL-XPS:48011"/> <S7-1500 uri="urn:SIMATIC.S7-1500.OPC-UAServer:CPU1500-Demo" EndpointUrl="opc.tcp://10.0.13.6:4840"/> </OPCUAServer> <MQTTTopicDefinition> <publish> <topicname name="axel/Hulsch" QoS="0" retain="true" trigger_var="ns=4;s=IBH_OPCUA.PLC.GlobalVars.TriggerVar" trigger_sampling_interval="1000" trigger_mode="rising_edge" status_var="ns=4;s=IBH_OPCUA.PLC.GlobalVars.StatusVar" > <BoilerTemperature type="Double" OPCUAServer="BoilerExample" opcvar="ns=3;s=AirConditioner_1.Temperature"/> <ValueFrom_S7-1500 type="UInt32" OPCUAServer="S7-1500" opcvar="ns=3;s="All-Scalar"."Var_UInt32""/> <diesel type="UInt16" opcvar="ns=4;s=IBH_OPCUA.PLC.Programs.Diesel.Tank" name="Diesel/Kraftstoff"/> <struct1> <struct11> <E10 type="UInt32" opcvar="ns=4;s=IBH_OPCUA.PLC.Programs.E10.Tank"/> <u2 type="UInt32" const="12345678"/> </struct11> <u1 type="UInt32"/> <u2 type="UInt32"/> </struct1> <topicname/>
Der OPCUa Server muss mit der Client Funktion eingerichtet werden siehe: IBH_Link_UA:Client_Funktionen#Server_hinzufügen