Einzelnen Beitrag anzeigen

BergLoewe

Registriert seit: 20. Nov 2005
35 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Tcomport on RXChar Problem

  Alt 27. Jun 2022, 18:26
Also nachdem der Timer -warum auch immer erst so spät- einsieht, dass er sich in der Empfangsroutine starten lassen soll, geht's eigentlich.
Wobei:
Erstens wird das Event OnRxChar nicht mehrfach aufgerufen, sondern immer nur einmal. Ich hatte da einen Zähler laufen, der zeigt nur "1" an.
Zweitens -ich sende/empfange ja ausschließlich Bytes, also keine Chars oder Strings oder Ascii oder so- Auslesen des COMPORT-Buffers funktioniert nur mit ReadBytes. Aber das geht dann. Ich mach das final im Timer-Event.
Eines ist aber doch ganz komisch:
Die Gegenseite ist zunächst eine Sensor-/Kommunikationsbaugruppe mit einem Mikrocontroler, der via USB über einen CP210 und dessen RS232 angesprochen wird. Da hab ich noch Zugriff auf die Software, kann also das Prtokoll bestimmen. Die Baugruppe soll sich zunächst melden, sagen, wie sie heißt und auf weitere Anfrage ihre Software-Versionen bekannt geben. Nun hatte ich offensichtlich Übertragungsfehler, so dass das Delphi-Programm sehr oft zu wenig oder was falsches verstand. Im Controler hab ich deshalb eine Verzögerung zwischen den Sende-Bytes eingebaut, seither geht's mit der eigentlich drei Byte längeren Versions-Abfrage super. Sowohl in 9600 Baud, als auch 19200Baud. Die kürzere Sendung mit der Typnummer aber, da sind die Übertragungsfehler nicht wegzukriegen. Der Fehler liegt aber im PC/Delphiprogramm. Auf dem Oszi gibt's da keine Abweichungen. Ich hoffe nur, dass sich das nicht mit anderen Geschichten fortsetzt, da sollen später 64Byte lange Blöcke über einige hundert Kilobyte übertragen werden. Soweit bin ich aber momentan noch nicht.

Aber noch eine ganz andere Frage, die eigentlich nichts mit der COMPORT-Schnittstelle zu tun hat:
Ich sende an die Baugruppe bestimmte Dinge, die bestimmte Antworten erbringen sollen. Die sind dann recht kompliziert auszuwerten und dann geht das ganze wieder von vorn los. Das heißt, im Timer_Event, was dem Empfang folgt, wird eine Auswerte-Routine aufgerufen, die dann wieder den nächsten Schritt sendet. Was aber eben wieder Empfangs- und Timer-Event aufruft. Wenn jetzt der Quittungssempfang nach dem Senden einer Zeile schon fertig ist, bevor die Auswerteroutine und die Timer-Event-Roiutine abgeschlossen wurden, dann wird das Ding doch rekursiv - oder? Erstens, verträgt Delphi überhaupt sowas und zweitens gibt's da im Delphi so'ne Tricks, wie man eine Art Hauptschleife simuliert?
  Mit Zitat antworten Zitat