ClientID
Beim Herstellen einer Verbindung mit dem Message Broker übermittelt der Client eine sogenannte ClientID, welche zur eindeutigen Identifizierung des Clients auf dem Message Broker dient. Der MQTT-Kommunikationstreiber aus TwinCAT3 erzeugt automatisch eine eigene ClientID, welche sich an dem folgenden Namensschema orientiert:
PlcProjectName-TcMqttClient%n
%n ist hierbei ein inkrementeller Zähler für die Nummer der jeweiligen MQTT Client Instanz. Jede Instanz des Funktionsbausteins FB_IotMqttClient erhöht hierbei diesen Zähler. In den meisten Fällen ist das Verwenden dieses ClientID Formats ausreichend. In speziellen Fällen, z.B. abhängig vom Message Broker oder auch durch die eigene MQTT Applikation bedingt, muss eine anwendungspezifische ClientID vergeben werden. Dies kann über einen entsprechenden Eingang an den Funktionsbausteinen FB_IotMqttClient und FB_IotMqtt5Client erfolgen.
Soll eine eindeutige ClientID automatisch beim Start des SPS Projekts generiert werden, so bietet sich die Verwendung einer GUID an, welche über den Funktionsbaustein FB_CreateGuid aus der Bibliothek Tc2_System erzeugt werden kann. Der folgende Beispielcode verdeutlicht die Verwendung dieses Funktionsbausteins.
PROGRAM MAIN
VAR
fbGuid : FB_CreateGUID;
objGuid : GUID;
sGuid : STRING;
nState : UINT;
bStart : BOOL; // set to TRUE to start this sample
END_VAR
CASE nState OF
0 :
IF bStart THEN
bStart := FALSE;
nState := nState + 1;
END_IF
1 : // create GUID using FB_CreateGuid from Tc2_System library
fbGuid(bExecute := TRUE, pGuidBuffer := ADR(objGuid), nGuidBufferSize := SIZEOF(objGuid));
IF NOT fbGuid.bBusy THEN
fbGuid(bExecute := FALSE);
IF NOT fbGuid.bError THEN
nState := nState + 1;
ELSE
nState := 255; // go to error state
END_IF
END_IF
2: // GUID has been created, now convert to STRING
sGuid := GUID_TO_STRING(objGuid);
nState := nState + 1;
3: // done
255: // error state
END_CASE
Nach Ausführung dieser State Machine enthält die Variable sGuid die generierte GUID als STRING. Diese kann dann an den Funktionsbausteinen FB_IotMqttClient und FB_IotMqtt5Client als ClientID verwendet werden.