Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi TApdComPort Empfangsprobleme (https://www.delphipraxis.net/159301-tapdcomport-empfangsprobleme.html)

Blamaster 22. Mär 2011 16:12

TApdComPort Empfangsprobleme
 
Hi,

ich habe aktuell ein paar Schwierigkeiten Daten mit der TApdComPort Komponente korrekt zu empfangen. Die Objekteigenschaften habe ich zum Großteil (bis auf Kleinigkeiten wie Port, Baud, usw) auf default gelassen.

Die Hardware sendet nun folgendes:
Ein Startbyte als Char und darauf folgendend ein Kommando ebenfalls als Char. Anschließend folgt dann eine Liste, bei der jede Zeile als String gesendet wird. Die Stringliste wird mit linefeeds gesendet.

Nun möchte ich die gesendete Liste in Delphi in eine TStringlist befördern.

Der aktuelle Code den ich mir zusammengebastelt habe sieht so aus:

Code:
procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
var
  I: Word;
  C: Char;
  S: string;
begin
  S := '';

  for i := 1 to Count do
  begin
    c := ComPort.GetChar;

    case Ord(C) of
      255: test.Clear;
      201: ShowMessage('Liste erfolgreich übertragen');
      202: ShowMessage('Übertragung fehlgeschlagen !');
      203: test.Clear;
    else
      case C of
        #10: ;
        #13:
          begin
            test.Add(trim(s));
            s := '';
          end;
      else
        s := s + c;
      end;
    end;
  end;

  if test.Count = 16 then
    ShowMessage(test.Text);
end;
Eigentlich funktioniert der Code im großen und ganzen auch. Allerdings werden ab und zu zeichen verschluckt und kommen nicht korrekt an so kann aus einem "2500" schonmal ein "500" werden.

Nutze ich zur Kommunikation z.B. Hterm wird alles korrekt angezeigt.
Wo kann das Problem liegen ?

Grüße

shmia 22. Mär 2011 17:35

AW: TApdComPort Empfangsprobleme
 
Die Variable S ist in deinem Code Lokal.
Dieser String muss aber eine Variable des Formulars sein, da ja das Event TriggerAvail öfters aufgerufen werden kann.
Die Daten werden auf der seriellen Schnittstelle quasi zeitlich zerstückelt.
Beispiel - der Sender schickt "abcdefghijklmnopqrstuvwxyz".
Der Empfänger bekommt mehrere Events:
1. "abcdefgh"
2. "ij"
3. "k"
4. "lmnopqrstuvwxyz"

Wie man sieht hat der Empfänger alle Daten bekommen, aber wahrscheinlich nicht so, wie du dir das vorgestellt hast.

Weiterer Lesestoff (englisch): Message Framing
Dort wird über TCP/IP gesprochen, aber alles trifft genauso auf RS232 zu.

Chemiker 22. Mär 2011 18:43

AW: TApdComPort Empfangsprobleme
 
Hallo Blasmaster,

welche Delphi-Version benutzt Du?

Bis bald Chemiker

Blamaster 22. Mär 2011 21:20

AW: TApdComPort Empfangsprobleme
 
@shmia

Danke das hat weitergeholfen :)

@Chemiker

Delphi 7


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:27 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