Serielle Kommunikation - auf ACK warten

Hallo zusammen,

ich möchte meine Rollos über eine serielle Kommunikation steuern. Dazu sende ich bestimmte HEX Nachrichten und bekomme dann ein ACK Signal (8100000000000000000000) zur Bestätigung. Momentan gehe ich einfach davon aus, dass das ACK immer kommt.

Wie kann ich am Besten bei jeder Nachricht auf das ACK Signal warten und falls keins kommt die Nachricht nochmal senden?

Vielen Dank!

Gruss baba

Moin… ne fertige Lösung habe ich nicht, aber ich würde es über eine Registervariable lösen.
Diese auf deine Serie-Schnittstelle lauschen lassen und per Skript welches die Daten von der Registervariablen
übergeben bekommt auswerten.

Gruß,
Peter

Ja so habe ich mir das auch gedacht. Aber ich weiss nicht, wie ich nach jeder Nachricht auf die Antwort warte. Ich müsste ja das Skript pausieren, dann irgendwie auf ein weiteres Skript der Registervariable warten und dann weitermachen.

Das empfangene Script schreibt die Daten in den Buffer der RegVar (RegVar_SetBuffer).
Das sende Script fragt nach dem Senden in einer Schleife den Buffer mit RegVar_GetBuffer ab.
Wenn das läuft, kannst du beide Scripte in eins kombinieren, musst dann aber je Inhalt der Systemvariable Sender in den sende oder empfange Teil springen.

Michael

Ah okay, das wusste ich nicht, dass es einen Buffer gibt. Vielen Dank, das werde ich ausprobieren. Das Problem ist dann, dass der Cutter nicht einfach auf eine feste Länge von 22 cutten kann. Ich kann kein Sync Zeichen erkennen. Sollte ich dann einfach im Skript das empfängt manuell cutten und dann immer 22 Zeichen in den Buffer schreiben?

Das musst du dir selbst überlegen. Je nach Protokoll kann das entweder sehr einfach oder auch komplex werden.
Meistens gibt es ja immer irgendein EndZeichen.
Oder einfach immer alles in den Buffer schieben (immer anhängen) und der Sende Teil muss die empfangenen Daten in Abhängigkeit der gesendeten Daten prüfen und dann den Buffer leeren bzw. diesen Teil der Antwort entfernen.
Michael

Okay danke, da muss ich nochmal etwas Zeit investieren. Ich bin am überlegen, das gleich als PHP Modul umzusetzen. Kennst du Module die ähnlich sind, wo ich mal reinschauen kann? Ich möchte dann nen Serial Port oder Web Socket vor das Modul hängen können.

Danke

Serielle Schnittstelle habe ich ein simples Modul.
Schau Mal nach dem IPSMS35 bei GitHub.
Komplexere sind dann z.B. das WebSocket Modul. Dort wird nach einem Ping auf den Pong gewartet.
Oder auch das Xbee Modul, eher sehr kompliziert.
Du wirst dann auch nicht umher kommen dich intensiv mit dem Datenaustausch zu beschäftigen, gerade für WebSockets hat mein Modul zwei interne ‚Schnittstellen‘ zum andocken.
Michael

Okay dann habe ich ja jetzt Stoff zum Arbeiten :slight_smile: Es wird mein erstes PHP Modul und soll ein längerfristiges Projekt werden. Der Ping Pong Ansatz ist vielleicht garnicht schlecht, für das warten auf das ACK Signal

Danke!

Danke erstmal