![]() |
Serieller Datenempfang Byte-Probleme
Hallo,
ich bin an einer App welche über einen optischen Tastkopf und FTDI-Chip Daten aus einem elektronischen Zähler auslesen soll. Das verwendete Protokoll ist SML, aber das nur nebenbei... Da die Auswertung nicht so läuft wie erwartet, habe ich mir mal eine Funktion gebastelt, welche die empfangenen Daten in hexadezimaler Form in eine Textdatei schreibt. Und hier fällt nun sofort auf, dass da was nicht stimmen kann: Zitat:
Hat jemand eine Idee, was da schief läuft? Die empfangenen Daten werden in einem String gespeichert... Ciao Stefan |
AW: Serieller Datenempfang Byte-Probleme
Zeig doch mal die "gebastelete" Funktion.
Ist Dir aufgefallen, dass es sich um das erste Leerzeichen handelt? |
AW: Serieller Datenempfang Byte-Probleme
Nein, daran lag es nicht!
Hier der Datenempfang:
Delphi-Quellcode:
Das Verarbeiten des Bytearrays (hinzufügen zu completebuffer) machte die Daten kaputt!
procedure TFormMain.OnReceivedData(Data: TArray<Byte>);
begin CallInUIThread( procedure begin try completebuffer := completebuffer + TEncoding.ANSI.GetString(Data); except on e: Exception do showmessage('Exception: ' + e.Message); end end); Jetzt habe ich die Bytes mal "manuell kopiert":
Delphi-Quellcode:
Und damit scheint es zu funktionieren :-)
procedure TFormMain.OnReceivedData(Data: TArray<Byte>);
begin CallInUIThread( procedure var empfangen: string; i: integer; begin try empfangen := ''; for i := Low(Data) to High(Data) do empfangen := empfangen + chr(Data[i]); completebuffer := completebuffer + empfangen; except on e: Exception do showmessage('Exception: ' + e.Message); end end); Ciao Stefan |
AW: Serieller Datenempfang Byte-Probleme
Die Wurzel des Problems ist (mal wieder) der Mißbrauch eines Strings zum speichern von Daten, die keine Zeichen sind. Das ging noch so einigermaßen gut als String = Ansistring und Sizeof(char) = Sizeof(byte) waren, aber seit String = Unicodestring ist hat man da ein Minenfeld zu überqueren...
|
AW: Serieller Datenempfang Byte-Probleme
Zitat:
|
AW: Serieller Datenempfang Byte-Probleme
Zitat:
Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz