stefandreyer / CODESYS-MQTT

MQTT client library for CODESYS, supporting all QoS
MIT License
113 stars 26 forks source link

Compile Error #37

Closed ptC7H12 closed 4 years ago

ptC7H12 commented 4 years ago

The compiler throws some errors, please have a look at the picture below. What can I do? My PLC ist a Wago PFC200.

image

stefandreyer commented 4 years ago

Hi,

geht deutsch?

du musst in deinem Projekteinstellungen den Dynamischen Speicher aktivieren. so 50kB solltne tun.

siehe

https://github.com/stefandreyer/CODESYS-MQTT/issues/18

Grüße Stefan

ptC7H12 commented 4 years ago

Ich habe es jetzt so weit am laufen, allerdings habe ich noch nicht herausgefunden, wie ich an den Inhalt der Subscribtion komme... Kannst du mir da helfen? image

stefandreyer commented 4 years ago

Hi,

der Inhalt der Empfangenen Daten landet in den FB's die du mit dem collector gesammelt hast. bei den FBs wird die Methode PublishReceived aufgerufen, welche die Daten dann Prüfen kann.

Für einen ersten Eindruck der Daten kannst du einen Breakpoint in publishReceived des collectors setzten und dir unter Data die empfangenen daten anschauen.

Grüße

ptC7H12 commented 4 years ago

Ich bin gerade dabei das mit dem Subscriber zu testen.

Was mir aber gerade auffällt ist:

  1. Wenn der Broker nicht erreichbar ist und der Client in den Timeout geht - wie komme ich da wieder raus?

  2. Wenn ich dann z.B. die Adresse des Brokers wechsle, geht der trotzdem nicht in den connected status über, weil er im MQTT_Client zwischen Schritt 10 und 60 wechselt (fehlender Dynamische Speicher). Ich muss dann erst händisch den Schritt auf 0 setzen und den Speicher erhöhen. Dann erst baut er die Verbindung neu auf. (Der markierte Schritt wechselte zwischen 10 und 60) image

ptC7H12 commented 4 years ago

Habe das hinbekommen, war etwas schwer das Konzept dahinter zu verstehen, aber Respekt, wenn man es mal verstanden hat, ist es echt gut!


Update: Immer wieder das Problem mit den springen zwischen Schritt 0 und 60, obwohl ich den Speicher schon auf 100k erhöht habe. image Nach manuellen setzen auf Schritt 0 geht der wieder in Schritt 40:

Krieg es nicht mehr zum laufen. Auch nicht nach Erhöhung des Speichers. Haltepunkt auf PublishReceived wird nie ausgeführt. image

Habe auch schon mal Manuell des destroy ausgeführt, hat auch nichts gebracht. Im MQTT_Handle werden wenn ich was schicke auch die COM.R_BUF Bytes nicht hochgezählt Das connected Bit ist true

Auch das Publish geht nicht mehr, ging vorhin auch schon.

stefandreyer commented 4 years ago

Hi,

hmm, klingt komisch.

Rufst du immer wieder das put des collector auf? Das darfst du nur einmal(Zeitlich), sonnst mach der das solange bis der Dynamische Speciher alle ist, und dann geht der Rest auch nicht mehr.

Ich mach das immer mit dem Init Bit, wenn nicht gesetzt, put aufrufen und Init bit setzten, so wird das beim Neustart der SPS immer ordentlich verarbeitet.

Wenn es einen Timeout zum Broker gibt sollte er eigentlich reconnecten.

Ja, das mit dem Collector machts sehr einfach. In der Zigbee2MQTT Bibliothekt hab ich das schön ausgereitzt und macht es am Ende sehr Übersichtlich und schön abgetrennt zu dem MQTT Thema.

Noch mehr Erfolg gehapt?

Grüße Stefan

ptC7H12 commented 4 years ago

Habe ich eigentlich schon so gemacht. Anmerkung 2020-03-29 212708

stefandreyer commented 4 years ago

Kannst du das Projekt mal einstellen?

Grüße

stefandreyer commented 4 years ago

Noch was erreicht?

ptC7H12 commented 4 years ago

Noch was erreicht?

Ne, leider nicht, Git.zip

habe noch mal die CPU neu gestartet, lief aber trotzdem nicht.

stefandreyer commented 4 years ago

Hi,

habe mal geschaut. Habe das Projekt auf die Windows SPS umgestellt und so geändert das das läuft. Wenn der publish FB sendet, kommts auch zurück.

Probleme: Falschen receive FB genommen, da muss ich meine Bibliothek aufräumen und dokumentieren.

Bei dem neuen receive FB den compare String gesetzt. SET_MQTT_IN_OUT wieder ein kommentiert.

Wichtige Frage zu deinem Verbindungsproblem: welchen Broker nutzt du? Es gibt Broker die sich nicht an den Standart halten, und ein Problem damit haben, das eine Paket ID sofort wieder verwendet wird, so wie ich das implementiert habe. Wenn Paket für ID 1 durhc ist, wird die wiederverwendet. Problem kenne ich vom IoBroker MQTT Broker. Diese Broker beenden dan die Verbindung.

Ich habe es mit test.mosquitto.org versucht, läuft.

Git.zip

Viel Erfolg! Grüße

stefandreyer commented 4 years ago

Läuft?

ptC7H12 commented 4 years ago

Sorry, komme im Moment nicht dazu das zu testen, melde mich, sobald ich das getan habe...