Einzelnen Beitrag anzeigen

BergLoewe

Registriert seit: 20. Nov 2005
37 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Tcomport on RXChar Problem

  Alt 10. Jun 2022, 10:01
Hallo,


ich greif mal den alten Tröt auf, weil er meinem aktuellen Problem am nächsten kommt.

Ich habe eine FMX-Anwednung und dazu die Winsoft-Komponente installiert:
https://www.winsoft.sk/comport.htm

Nun will ich Hex-Daten zu einem Controller schicken und welche empfangen. Nur Hex, also Bytes, keine Ansi-Chars oder ähnliches. Weshalb ich keine Ende-Erkennung habe. Das Protokoll, das der Controller verwendet, läßt sich nicht ändern, weil ich Geräte mit einbeziehen muß, die seit Jahren im Feld sind.

Nun hab ich das Problem, dass OnRxChar eigentlich das einzige Event ist, das sich zum Empfang nutzen läßt. Aber es tritt nach jedem empfangenen Byte auf. Nur, wenn ich nach jedem Byte selbiges einsammeln und in ein TByte-Array oder ähnliches schreiben will, tritt zwangsläufig der Fall auf, dass während des Ausführens dieser Routine der Empfang ja weiterläuft und sich die empfangenen Daten ändern. Das führt zu Fehlern.
Weshalb ich nun die Erleuchtung hatte, die einem der obigen Kommentatoren auch kam - ich setze einen Timer auf 100ms und lese dann erst die Daten aus. Nach 100ms müßte jede denkbare Sendung durch sein. Das hieße, dass OnRxChar meinen Timer starten müßte.

UNd da kommt das Problem: In dieser OnRxChar-Routine reagiert der Timer.Enable nicht.
Code:
procedure TForm1.CP1RxChar(Sender: TObject);
begin
     Timer1.Enabled := True;
end;
Das macht der nicht.

Nehm ich einen Button, kann ich den Enabled ein- und ausschalten, wie ich will.
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
    Timer1.Enabled := not Timer1.Enabled;
end;
Da klappt das bestens. Aber in der OnRxChar gar nicht. Genau genommen ändert sich das Property auf True aber der Timer löst kein Event aus.

Gäb's dazu eine Erklärung?

Geändert von BergLoewe (10. Jun 2022 um 10:08 Uhr)
  Mit Zitat antworten Zitat