AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Serieller Datenempfang Byte-Probleme
Thema durchsuchen
Ansicht
Themen-Optionen

Serieller Datenempfang Byte-Probleme

Ein Thema von skoschke · begonnen am 13. Apr 2023 · letzter Beitrag vom 15. Apr 2023
Antwort Antwort
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#1

Serieller Datenempfang Byte-Probleme

  Alt 13. Apr 2023, 08:40
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:
77
07 01 00 02 08 00 FF
01
72
62 01
65 00 2F 69 CD
62 1E
52 FF
69 00 00 00 00 00 02 20AC 36
01
Da über den seriellen Port eigentlich nur Bytes (0...FF) kommen können, woher kommt da das "20AC"?

Hat jemand eine Idee, was da schief läuft? Die empfangenen Daten werden in einem String gespeichert...

Ciao
Stefan
  Mit Zitat antworten Zitat
EmWieMichael

Registriert seit: 28. Mär 2012
103 Beiträge
 
#2

AW: Serieller Datenempfang Byte-Probleme

  Alt 13. Apr 2023, 08:51
Zeig doch mal die "gebastelete" Funktion.
Ist Dir aufgefallen, dass es sich um das erste Leerzeichen handelt?
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Serieller Datenempfang Byte-Probleme

  Alt 13. Apr 2023, 09:29
Nein, daran lag es nicht!

Hier der Datenempfang:

Delphi-Quellcode:
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);
Das Verarbeiten des Bytearrays (hinzufügen zu completebuffer) machte die Daten kaputt!

Jetzt habe ich die Bytes mal "manuell kopiert":

Delphi-Quellcode:
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);
Und damit scheint es zu funktionieren

Ciao
Stefan
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
701 Beiträge
 
Delphi 12 Athens
 
#4

AW: Serieller Datenempfang Byte-Probleme

  Alt 13. Apr 2023, 14:39
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...
Peter Below
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.452 Beiträge
 
Delphi 12 Athens
 
#5

AW: Serieller Datenempfang Byte-Probleme

  Alt 13. Apr 2023, 15:20
hat man da ein Minenfeld zu überqueren...
Oder man läuft gleich drum herum...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
skoschke

Registriert seit: 6. Jan 2009
523 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Serieller Datenempfang Byte-Probleme

  Alt 15. Apr 2023, 09:40
Zitat:
der Mißbrauch eines Strings zum speichern von Daten, die keine Zeichen sind
Ihr habt ja Recht

Ciao
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz