Kommunikationsablauf
Damit der Datenaustausch und das Device Discovery über ADS-over-MQTT funktionieren können, verwenden alle ADS-Geräte eine einheitliche Topic-Struktur auf dem Message Broker. Die Topic-Struktur ist hierbei abhängig vom Namen des konfigurierten virtuellen Netzwerks und der AMS Net ID des jeweiligen Geräts.
Typ | Topic |
---|---|
Discovery | <NetworkName>/<AmsNetId>/info |
Kommunikation | <NetworkName>/<AmsNetId>/ams <NetworkName>/<AmsNetId>/ams/res |
Jedes ADS-Gerät hat somit seinen eigenen „Topic-Bereich“ auf dem Message Broker. Das folgende Bild veranschaulicht diesen Zusammenhang noch einmal in grafischer Form.

Discovery
Ein sich verbindender TwinCAT ADS Router sendet eine Retain-Nachricht mit Geräteinformationen an sein Discovery-Topic, gleichzeitig subscribed er sich auf das Topic <NetworkName>/+/info, sodass er über alle anderen verbundenen Router informiert wird.

Die Nachrichten an das Discovery-Topic enthalten eine XML-Struktur mit Geräteinformationen, zum Beispiel den Hostnamen und die verwendeten TwinCAT Version:
<info>
<online name="EC2AMAZ-2RRSQS6" osVersion="10.0.20348" osPlatform="2" tcVersion="3.1.4026.10">true</online>
</info>
Unterstützt der Message Broker keine Retain-Nachrichten, so kann dies in der ADS-over-MQTT-Konfigurationsdatei berücksichtigt werden. In diesem Fall würde anstelle einer Retain-Nachricht ein Kommunikationshandshake erfolgen: ein sich neu verbindendes Gerät meldet sich an seinem Discovery-Topic an und alle anderen verbundenen Geräte antworten mit einer weiteren Nachricht auf ihrem Discovery-Topic. Hierdurch ist sichergestellt, dass sich auch bei Message Brokern ohne Unterstützung für Retain-Nachrichten die Geräte gegenseitig auffinden können. Der Nachteil ist ein erhöhtes Nachrichtenaufkommen in größeren Betriebsumgebungen mit häufigen Reconnects.
Kommunikation
Ein TwinCAT ADS Router subscribed sich direkt nach dem Verbindungsaufbau auf sein Kommunikations-Topic (<NetworkName>/<AmsNetId>/ams/#). Die ADS-Kommandos an diesen Router werden dann an <NetworkName>/<AmsNetId>/ams gesendet, wohingegen die Antworten über das Topic <NetworkName>/<AmsNetId>/ams/res empfangen werden.