FB_IotMqtt5MessageQueue

Dieser Funktionsbaustein bietet eine Message Queue für MQTT-Nachrichten, welche mit dem Baustein FB_IotMqtt5Client empfangen werden. Hierzu wird eine Instanz bereits am Ausgang von FB_IotMqtt5Client bereitgestellt. Der Funktionsbaustein arbeitet nach dem First-in-First-out-Prinzip (FiFo). Es ist möglich, dass mehrere MQTT-Nachrichten innerhalb eines SPS Zyklus empfangen und an der Message Queue bereit gestellt werden.

Im Programmablauf kann mit dem Property nQueuedMessages geprüft werden, ob und wie viele Nachrichten in der Message Queue eingesammelt wurden. Diese Nachrichten werden mit der Methode Dequeue() aus dem FiFo entnommen. Hierbei wird demnach die älteste Nachricht zuerst ausgegeben.

FB_IotMqtt5MessageQueue 1:

Größe der MQTT Message Queue

Die Menge der maximal möglichen Nachrichten in der Queue lässt sich über den Paramater cMaxEntriesInMqttMessageQueue in der Parameterliste der Bibliothek Tc3_IotBase einstellen. Standardmäßig sind dies 1000 Nachrichten. Weil eine zeitnahe Verarbeitung der Nachrichten in den allermeisten Fällen verlangt wird, ist eine Anpassung meist nicht notwendig.

Die MQTT Message Queue allokiert für neue Nachrichten entsprechend der Topic- und Payload-Größe neuen Speicher. Standardmäßig ist die maximale Größe einer Nachricht auf 100 KB und die Größe einer MQTT Message Queue auf 1000 KB begrenzt. Dies kann für Sonderfälle ebenso in der Parameterliste angepasst werden.

FB_IotMqtt5MessageQueue 2: Eigenschaften

Name

Typ

Zugriff

Beschreibung

bOverwriteOldestEntry

BOOL

Get, Set

Hier kann parametriert werden, ob, wenn die Warteschlange voll ist, eine neu empfangene Nachricht die älteste Nachricht überschreiben soll. Wenn ja (TRUE), geht die älteste Nachricht verloren. Wenn nein (FALSE), wird mit dem Empfang der neuen Nachricht gewartet, bis die Warteschlange Platz bietet.

Eine volle Warteschlange ist ein unwahrscheinlicher Fall, wenn der Anwender für ein zügiges Auslesen der Queue mittels Dequeue() Methode sorgt.

nLostMessages

UDINT

Get

Gibt die Anzahl der MQTT-Nachrichten aus, welche vollständig verworfen werden mussten.

Verworfene MQTT-Nachrichten können als Ursache eine volle Queue haben oder auch eine zu große Gesamtgröße einer neu empfangenen Nachricht.

nMaxSizeOfMessage

UDINT

Get

Maximale Größe in Bytes aller empfangenen MQTT-Nachrichten, welche vom FB_IotMqtt5Client empfangen und in die FB_IotMqtt5MessageQueue abgelegt werden sollten.

Wird die mit dem Bibliotheksparameter ParameterList.cMaxSizeOfMqttMessage festgelegte Maximalgröße überschritten, so versucht die Message Queue zuerst die Nachricht ohne User Properties abzuspeichern. Sollte diese Größenreduktion nicht ausreichen, muss die MQTT-Nachricht vollständig verworfen werden.

nQueuedMessages

UDINT

Get

Gibt die Anzahl der aktuell in der Queue gesammelten MQTT-Nachrichten aus.

Die maximal mögliche Anzahl ist mit dem Bibliotheksparameter ParameterList.cMaxEntriesInMqttMessageQueue festgelegt.

FB_IotMqtt5MessageQueue 3: Methoden

Name

Beschreibung

Dequeue()

Entnimmt der Warteschlange eine MQTT-Nachricht.

ResetQueue()

Löscht alle Nachrichten aus der Warteschlange.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4026.0

IPC oder CX (x86, x64, ARM)

Tc3_IotBase (>= v3.4.2.0)