Broker

Der MQTT Broker wird genutzt, um die ADS-Kommandos zwischen den Routern zu vermitteln. Die verwendete Topic-Struktur ist unter Architektur beschrieben.

Allgemeines

Für ADS-over-MQTT kann ein beliebiger MQTT-Broker mit passender Unterstützung von beispielsweise RETAIN und QoS genutzt werden.

Ist dieser Broker im Sinne von Security schützenswert, da die ADS-Nachrichten schützenswert sind, müssen entsprechende Maßnahmen ergriffen werden. Die Security-Konfiguration auf Seiten von TwinCAT und beispielhaft auch für den Eclipse Mosquitto-Broker ist unter Security beschrieben.

Tc-Plugin TcMqttPlugin.dll für den Eclipse Mosquitto Broker

Um in dem MQTT-Broker ein virtuelles Netzwerk von ADS-Geräten zu definieren, existiert eine Erweiterung für den Eclipse Mosquitto Broker. Mittels dieser Erweiterung können sowohl Zugriffsrechte per PreSharedKey auf den Broker, wie auch Zugriffe zwischen den TwinCAT Routern mittels einer ACL (AccessControlList) eingestellt werden.

Broker 1:

Das Plugin wird mit der TwinCAT-Installation ausgeliefert und befindet sich im Ordner C:\TwinCAT\AdsApi\TcMqttPlugin bzw. C:\TwinCAT\AdsApi\x64\TcMqttPlugin, falls ein 64-bit Mosquitto Broker eingesetzt wird.

In der Mosquitto-Konfiguration wird das Plugin wie folgt eingebunden:

auth_plugin <Path>TcMqttPlugin.dll
auth_opt_xml_file <Path>ACL.xml

Die Mosquitto-Konfigurationsdatei wird beim Starten des Mosquitto Brokers mittels des Parameters „-c“ angegeben, womit das Plugin inkl. der Konfiguration dann geladen wird.

Die Datei ACL.xml wird dabei in den folgenden Abschnitten beschrieben und stellt auf der einen Seite die Zugriffskonfiguration per PreSharedKey auf den Broker selbst bereit, wie aber auch die Konfiguration der Kommunikation zwischen den verbundenen TwinCAT Routern.

Konfiguration „Virtuelles AmsNetzwerk“

Das Plugin TcMqttPlugin bietet die Möglichkeit virtuelle AmsNetzwerke zu konfigurieren. Hierzu wird zu jedem Zielgerät angegeben, welches Gerät Zugriff auf welches andere Gerät hat.
Im Gegensatz zu den klassischen ADS-Routen sind diese Verbindungen gerichtet: Ein Ziel hat also nicht gleichzeitig das Recht auf die Quelle zuzugreifen.

<TcMqttAclConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\TwinCAT\3.1\Config\Modules\TcMqttAclConfig.xsd" AnonymousLogin="true"> 
<!-- PSK Elements, if used -->
<Ams>
<Topic>VirtualAmsNetwork1</Topic>
<User>
<Name>EngineeringStation</Name>
</User>
<User>
<Name>CX-123456</Name>
<Access>EngineeringStation</Access>
</User>
<User>
<Name>CX-567890</Name>
<Access>EngineeringStation</Access>
</User>
</Ams>
</TcMqttAclConfig>

Innerhalb eines <Ams>-Knotens wird der Name des AmsNetzwerks definiert. Er wird in den genutzten MQTT Topics zur Identifizierung der Netzwerke verwendet.
Einzelne <User> Elemente beschreiben die Teilnehmer. Diese Elemente besitzen ein <Name>-Element, welches die MQTT-Identity beschreibt, mit der die Verbindung aufgebaut wurde – im Normalfall der Name des Teilnehmers. Zusätzlich werden zugriffberechtigte Geräte über das <Access>-Element definiert.
In dem Beispiel hat „EngieeringStation“ also Zugriff auf zwei CX-Geräte, die CX-Geräte jedoch nicht auf die „EngieeringStation“ und auch nicht untereinander.

Die Datei wird zyklisch neu geladen, sodass ein Neustart des Brokers nicht nötig ist.

Da in dieser Erklärung keine Verschlüsselung vorgesehen ist, wird AnonymousLogin=“true“ verwendet.

Einschränkungen bzgl. der anzumeldenden AmsNetId

Bei dieser Konfiguration kann jedes gültig verbundene Gerät eine beliebige AmsNetID und damit Identität aus Sicht von ADS annehmen. Dieses kann eingeschränkt werden:

<User>
  <Name>CX-567890</Name>
  <Access>EngineeringStation</Access>
  <NetId>192.168.56.1.1.1</NetId>
</User>

Sobald mindestens eine NetId angegeben ist, kann nur eine NetId aus dieser Liste angemeldet werden.

Mosquitto Einstellungen

Im Zusammenhang mit der Konfiguration mittels TcMqttPlugin sind einige Einstellungen auf Seiten des Mosquitto Brokers wichtig zu beachten. Hierzu gehören:

Minimal-Konfigurationsbeispiele sind in Abhängigkeiten von der genutzten TLS Verbindung in den entsprechenden Abschnitten beschrieben.