Konfigurationsdatei

Der TwinCAT ADS Router wird durch eine XML-Datei konfiguriert, um eine ADS-over-MQTT-Verbindung mit einem Message Broker herzustellen. Diese Konfigurationsdatei wird unter einem beliebigen Namen in dem folgenden Verzeichnis abgelegt:

\TwinCAT\3.1\Target\Routes

Im Kapitel Beispiele finden Sie exemplarische Konfigurationsdateien für alle unten beschriebenen Anwendungsfälle.

Konfigurationsdatei 1:

Aktivieren einer neuen ADS-over-MQTT-Konfiguration

Neue oder geänderte ADS-over-MQTT-Konfigurationen werden erst dann übernommen, wenn der TwinCAT ADS Router initialisiert wird. Dies erfolgt beispielsweise in den TwinCAT-Übergängen von RUN nach CONFIG oder auch CONFIG nach CONFIG.

Konfigurationsdatei 2:

Pfadangaben

Bitte beachten Sie, dass Sie bei etwaigen Pfadangaben in der Konfigurationsdatei die für Ihr Betriebssystem korrekte Schreibweise verwenden.

Basis-Konfiguration

Die Basis-Konfiguration enthält immer die folgenden Elemente:
Adresse des Message Brokers, dessen TCP-Port, sowie den Namen des virtuellen Netzwerks.
Die Adresse des Brokers und der TCP-Port, unter dem dieser erreichbar ist, werden hierbei über den <Address>-Knoten angegeben. Das virtuelle Netzwerk wird über den <Topic> Knoten definiert. In dem folgenden Beispiel wird eine Verbindung zu einem lokal (127.0.0.1) installierten Message Broker und dem TCP-Port 1883 hergestellt. Als virtuelles Netzwerk wird „VirtualAmsNetwork1“ definiert“.

<?xml version="1.0" encoding="ISO-8859-1"?>
<TcConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2015/12/TcConfig">
 <RemoteConnections>
  <Mqtt>
   <Address Port="1883">127.0.0.1</Address>
   <Topic>VirtualAmsNetwork1</Topic>
  </Mqtt>
 </RemoteConnections>
</TcConfig>

NoRetain

Über das NoRetain-Attribut lässt sich der Kommunikationsablauf für das Geräte-Discovery anpassen. Durch das Setzen von NoRetain = true, basiert die Geräte-Suchfunktion nicht länger auf Retain-Nachrichten. Stattdessen wird ein Handshake-Mechanismus verwendet, um alle verbundenen ADS-Teilnehmer zu identifizieren.

Konfigurationsdatei 3:

Unidirectional

Über das Unidirectional-Attribut lassen sich eingehende ADS-Nachrichten für dieses System blockieren. Ein typischer Anwendungsfall könnte zum Beispiel ein Engineering-System sein, welches zwar die Runtime-Systeme über ADS erreichen können soll, jedoch nicht umgekehrt.

Konfigurationsdatei 4:

TLS

Über den <TLS>-Knoten lassen sich Einstellungen für eine Absicherung des Transportkanals über TLS definieren. Es stehen diverse Verbindungsmöglichkeiten zur Verfügung, z. B. die Konfiguration von Client-Zertifikaten oder PSK. Unsere Beispiele zeigen alle möglichen Konfigurationsvarianten auf.

TLS IgnoreCn

Über das IgnoreCn-Attribut lässt sich die Überprüfung des CommonName (CN) vom Serverzertifikat deaktivieren.

Konfigurationsdatei 5:

TLS PSK

Bei der Verwendung von TLS mit einem Pre-shared Key (PSK), können Sie den PSK entweder als Hex-kodierten, 64 Zeichen langen String angeben, oder TwinCAT die Konvertierung intern mittels Sha256(Identity + Pwd) überlassen. In letzterem Fall lässt sich über das Attribut IdentityCaseSensitive festlegen, dass TwinCAT die Identity als UpperCase für die Berechnung verwenden soll. Unsere Beispiele zeigen beide möglichen Konfigurationsvarianten auf.

User

<?xml version="1.0" encoding="ISO-8859-1"?>
<TcConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2015/12/TcConfig">
 <RemoteConnections>
  <Mqtt>
   <Address Port="1883">127.0.0.1</Address>
   <Topic>VirtualAmsNetwork1</Topic>
   <User>CX-12345</User>
  </Mqtt>
 </RemoteConnections>
</TcConfig>

Das Element <User> gibt eine Identität an, welche im TcMqttPlugin genutzt werden kann, um Zugriffsrechte zwischen ADS-Geräten zu konfigurieren. Üblicherweise wird die Identität jedoch durch andere Mittel definiert, z. B. den CommonName (CN) eines Clientzertifikats.

Optional kann das <Mqtt>-Element ein ClientId-Attribut enthalten, um die MQTT-ClientID anzugeben. Diese wird ansonsten aus dem <User> und einem beliebigen String gebildet.