Mosquitto Plugin
Speziell für den Mosquitto-Message-Broker wurde ein Plugin entwickelt, um die Definition von Zugriffsrechten zwischen den einzelnen TwinCAT ADS Routern zu ermöglichen.
Beachten Sie auch die Systemvoraussetzungen für den Betrieb dieses Plugins.
Das Plugin wird unter TwinCAT 3.1 Build 4024 mit der TwinCAT-Installation ausgeliefert. Unter Build 4026 ist die Installation des zugehörigen Packages erforderlich (TwinCAT.XAE.MqttPlugin). Das Plugin wird in das folgende Verzeichnis installiert und kann von dort in der Mosquitto Konfiguration referenziert werden.
\TwinCAT\AdsApi\TcMqttPlugin
Das Plugin steht in einer 32-bit und einer 64-bit Variante zur Verfügung, je nachdem in welcher Variante Sie den Mosquitto-Message-Broker verwenden. In der Konfiguration des Mosquitto-Message-Broker wird das Plugin dann wie folgt eingebunden:
auth_plugin <Path>TcMqttPlugin.dll
auth_opt_xml_file <Path>MyACL.xml
Die Datei MyACL.xml stellt auf der einen Seite die Zugriffskonfiguration auf den Broker selbst bereit, wie aber auch die Konfiguration der Kommunikation zwischen den verbundenen TwinCAT ADS Routern. Diese Konfiguration wird nun exemplarisch in dem folgenden Abschnitt näher erläutert.
Konfiguration
Das Plugin bietet die Möglichkeit, virtuelle AMS-Netzwerke 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 auch 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">
<Ams>
<Topic>VirtualAmsNetwork1</Topic>
<User>
<Name>EngineeringStation</Name>
</User>
<User>
<Name>CX-12345</Name>
<Access>EngineeringStation</Access>
</User>
<User>
<Name>CX-56789</Name>
<Access>EngineeringStation</Access>
</User>
</Ams>
</TcMqttAclConfig>
Innerhalb eines <Ams>-Knotens wird der Name des AMS-Netzwerks definiert. Er wird in den genutzten MQTT-Topics zur Identifizierung der Netzwerke verwendet. Einzelne <User>-Elemente beschreiben die Teilnehmer. Diese Elemente besitzen ein <Name>-Attribut, welches die MQTT-Identität beschreibt, mit der die Verbindung aufgebaut wurde. Die Identität kann über verschiedene TLS-Mechanismen übergeben werden, z. B. durch die TLS-PSK Identity oder auch den CommonName (CN) eines Client-Zertifikats. Unsere Beispiele zeigen hier mögliche Konfigurationsvarianten auf.
Zugriffsberechtigte Geräte werden über das <Access>-Element definiert. In dem obigen Beispiel hat die Identität „EngineeringStation“ Zugriff auf zwei CX-Geräte, die CX-Geräte jedoch nicht auf die „EngineeringStation“ und auch nicht untereinander.
![]() | Die Konfigurationsdatei wird zyklisch neu geladen, sodass ein Neustart des Brokers nicht notwendig ist. |
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. Dies kann je nach Bedarf zusätzlich eingeschränkt werden:
<User>
<Name>CX-56789</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. Eine alternative Lösung wäre es, die NetId im CommonName (CN) des Client-Zertifikats einzutragen.