TIA LMQTT-Client Siemens Baustein

apfelsaft

Level-2
Beiträge
65
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich verwende in mittlerweile 3 Projekten mit unterschiedlichen CPUs (1516, 1511 Soft PLC (OpenController, 1212C) den LMQTT Client Baustein von Siemens.
libraries-for-communication

Damit Abonniere ich eine Topic. Soweit funktioniert auch alles erstmal. Auch Publish geht.
Problematisch wird es wenn viele Nachrichten hintereinander kommen.

Ich schicke fast zeitgleich über einen anderen Client 10 Nachrichten. Nur wenige ms nacheinander. Alle gleich lang und recht easy.

Topic: Test
Payload: {"test":1}

danach Payload test 2 usw.

Leider kommen die Nachrichten zwar im Broker an. Das sehe ich mit einem anderen Client (MQTTX), in der SPS kommen aber nur die 1. und die 10. Nachricht an.

Ein Skope des TRCV im LMQTT Baustein zeigt:
Ein NDR (New Data Received) nach der 1. Nachricht und danach ist mehrere SPS Zyklen (60 Stück) und 116ms lang Ruhe und es kommt nichts mehr an.
Erst dann wieder ein NDR und die 10. Nachricht.

Bildschirmfoto 2025-01-20 um 21.12.57.png

Immer wieder das gleiche Verhalten.
Kein Error und auch der Aufruf des TRCV läuft in jedem Zyklus und der EN ist auch gesetzt.

Was macht der TRCV in der Zeit.
Was passiert im Hintergrund?
Wieso wird das nicht in einen Puffer geschrieben?

So kann keine zuverlässige Kommunikation mit MQTT aufgebaut werden.
 
Mit was für einer Zykluszeit läuft dein Programm? Je kleiner die ist, desto eher kommt die Änderung an dem Tcp Client an..
Mqtt findet im Application Layer statt.. d.h. noch vor dem Transport Layer in dem sich Tcp befindet..

D.h. der Tcp Layer kann eben nur das auswerten was im hardware stack auf dem application layer an Änderungen ankommt
mqtt_osi.png


Mach mal eine Elsif Auswertung für deine subscription data für eben 1..10 und zähl damit mal hoch wie oft welche Zahl bei dir im subscription data fach ankommt
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hätte erwartet dass die Hardware alle Daten zwischenspeichert bis die Daten durch die TRCV abgeholt wurden oder der Cache voll ist.
In meinem Scope ist aber der Zyklus mit drin und es passiert einfach 20 Zyklen lang nichts.
Es kommt immer die 1. und die 10. Nachricht an. In dieser Reihenfolge erscheinen sie auch im Broker. Die dazwischen sind einfach weg.

Irgendwie sieht das so aus als ob die Schnittstelle nach der 1. Nachricht blockiert ist und evtl. ein Timeout läuft. Bis dann die 10te Nachricht kommt ist der evtl. abgelaufen?
 
Ich hätte erwartet dass die Hardware alle Daten zwischenspeichert bis die Daten durch die TRCV abgeholt wurden oder der Cache voll ist.
Ich würde mal sagen dass das mit der quality of service einstellung deiner message auch mitzusammenhängt..

da wird auch nichts zwischengespeichert.. mqtt ist kein protokoll zum zwischenspeichern.. der hardware stack bekommt eine änderung mit und gibt diese an den tcp layer weiter und der wertet das dann aus und diese änderung erscheint dann in dem fach für subscribed data..

hast du qos 0 eingestellt, ist das eine einmalige message die jeder in _dem moment_ lesen kann.. lies dir mal durch was die unterschiede im qos flag bei mqtt sind.. weiterhin gibts auch noch das retained flag

wie gesagt, die zykluszeit hängt auch noch da mit drin.. dein programm kann halt nur jeden zyklus eine änderung wahrnehmen

btw der mqtt explorer https://mqtt-explorer.com/ ist das einzige open source tool zur grafischen darstellung von einem mqtt broker was aktuell noch halbwegs gepflegt wird und besser als das alte mqtt.fx
 
Zuletzt bearbeitet:
Ja Du hast Recht, mit dem QoS=1 oder 2 kommen alle Nachrichten an. Aber trotzdem sind ca. 20 SPS Zyklen bzw. 53ms zwischen den Nachrichten.
Die SPS läuft mit einer Zykluszeit von 1-2ms.

Ist der Netzwerk-Controller nicht schneller und kann das dann nacheinander ans SPS Anwenderprogramm weitergeben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du könntest mal noch in den Hardwareeigenschaften der Cpu falls möglich mehr Ressourcen für die Kommunikationslast freigeben, vielleicht hilft dir das

Aber so tief bin ich jetzt auch nicht in der Netzwerktechnik drin um das von aussen bewerten zu können, wieso es so ist..

Läuft denn dein Broker in einem Container? Mosquitto? Oder was properitäres?

Wie gesagt.. Mqtt ist auch keine Datenhalde.. wenn du mehrere Werte in einer Nachricht verpacken musst.. dann musst du wohl ein Json erstellen, serialisieren und wieder de-serialisieren..

Ansonsten für die einzelnen Werte einzelne Topics anlegen
 
Ich denke auch, dass es an den Hardwareressourcen liegt.
Werde das aber auch noch beim Siemens Support weiter stressen.

Die neueren CPUs haben ja einen extra Prozessor-Kern für solche Aufgaben bekommen. Evtl. hat das damit zu tun.

Der Broker ist ein Mosquitto in dem aber immer alles ankommt.
Wir machen immer JSON draus und deserialisieren aber es hängt schon am Systembaustein TRCV.
 
Zurück
Oben