IotMqttSampleTlsPsk

Beispiel zur MQTT Kommunikation über eine gesicherte TLS Verbindung mittels PSK (PreSharedKey)

In diesem Beispiel wird die Kommunikation zu einem MQTT Broker dargestellt, welcher eine Authentifizierung via TLS-PSK verlangt. Das Beispiel beschränkt sich im Wesentlichen auf das Herstellen der Verbindung und den Publish von Werten.

Projektstruktur

1. Erstellen Sie ein TwinCAT-Projekt mit einer SPS und fügen Sie die Tc3_IotBase als Bibliotheksreferenz hinzu.
2. Legen Sie einen Programmbaustein an und deklarieren Sie eine Instanz von FB_IotMqttClient, sowie zwei Hilfsvariablen, um den Programmablauf bei Bedarf steuern zu können.
PROGRAM PrgMqttCom
VAR
  fbMqttClient    : FB_IotMqttClient;
  bSetParameter   : BOOL := TRUE;
  bConnect : BOOL := TRUE;
END_VAR
3. Deklarieren Sie für die zu verschickende MQTT Nachricht zwei Variablen für Topic und Payload. Im Beispiel soll jede Sekunde eine Nachricht verschickt werden. 
sTopicPub   : STRING(255) := 'MyTopic';
sPayloadPub : STRING(255);
i : UDINT;
fbTimer : TON := (PT:=T#1S);
4. Im Programmteil muss der MQTT Client zyklisch getriggert werden, um den Verbindungsaufbau zum Broker und den Verbindungserhalt zu gewährleisten. Setzen Sie die Parameter der gewünschten Verbindung und initialisieren Sie den Verbindungsaufbau mit dem Übergabeparameter bConnect := TRUE. Im Beispiel werden die Parameter einmalig vor dem Client-Aufruf im Programmcode zugewiesen. Weil dies meist nur einmalig nötig ist, können die Parameter auch bereits im Deklarationsteil bei der Instanziierung des MQTT Client angegeben werden. Nicht alle Parameter müssen zugewiesen werden. Im Beispiel ist der Broker lokal. Sie können auch die IP-Adresse oder den Namen angeben
IF bSetParameter THEN
  bSetParameter                   := FALSE;
  fbMqttClient.stTLS.sPskIdentity := 'my_Identity';
  fbMqttClient.stTLS.aPskKey      := cMyPskKey;
  fbMqttClient.stTLS.nPskKeyLen   := 15;
  fbMqttClient.nHostPort          := 8883;
END_IF

fbMqttClient.Execute(bConnect);
5. Das Strukturelement aPskKey bekommt den PreSharedKey übergeben, welcher für den Verbindungsaufbau zum Broker benötigt wird. Dieser muss entsprechend als ein ARRAY OF BYTE der Länge 64 angegeben werden. Die tatsächliche Länge des Keys wird dann dem Strukturelement nPskKeyLen übergeben.
6. Sobald die Verbindung zum Broker aufgebaut wird, soll der Client jede Sekunde eine Nachricht an ein bestimmtes Topic versenden.
IF fbMqttClient.bConnected THEN
  fbTimer(IN:=TRUE);
  IF fbTimer.Q THEN // publish new payload every second
    fbTimer(IN:=FALSE);
    i := i + 1;
    sPayloadPub := CONCAT('MyMessage', TO_STRING(i));
    fbMqttClient.Publish(sTopic:= sTopicPub, 
                      pPayload:= ADR(sPayloadPub),
                      nPayloadSize:= LEN2(ADR(sPayloadPub))+1,
                      eQoS:= TcIotMqttQos.AtMostOnceDelivery,
                      bRetain:= FALSE,
                      bQueue:= FALSE);
  END_IF
END_IF

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4022.0

IPC oder CX (x86, x64, ARM)

Tc3_IotBase,
Tc2_Utilities (>= v3.3.19.0)