Einzelnen Beitrag anzeigen

sender01

Registriert seit: 3. Dez 2006
6 Beiträge
 
Delphi 7 Personal
 
#1

Buffer auslesen mit SerialNG

  Alt 3. Dez 2006, 14:32
Hallo alle zusammen!

Ich versuche mich schon seit geraumer Zeit daran, Daten mit der seriellen Schnittstele zu versenden und zu empfangen.
Dazu habe ich mir SerialNG runtergeladen und die Beispiele dazu angesehen. Unter anderem "SerialNGadvDemo". In diesem Programm sollen alle Funktionen dieser Komponente vorgestellt werden, sodass man es einfach nachmachen kann.
Mein Problem ist, dass ich nicht verstehe, wie die empfangenen Daten ausgelesen werden. Ein Original-Auszug aus dem Programm:

Delphi-Quellcode:
// All receiving is done here
// See how less Lines!
procedure TForm1.SerialPortNG1RxClusterEvent(Sender: TObject);
begin
  if SerialPortNG1.NextClusterSize >= 0 then // Data available?
    begin
      if SerialPortNG1.NextClusterCCError = 0 then // Error during receiveing?
        Terminal.Lines.Add(FormatDateTime('"Rec " dd.mm.yy hh:mm:ss" :"', Now))
      else
        Terminal.Lines.Add(FormatDateTime('"RecX " dd.mm.yy hh:mm:ss" :"', Now));
      // Read the data and patch them into the editfield
      AddHexString(SerialPortNG1.ReadNextClusterAsString,Terminal.Lines);
    end;

end;
Scheint ja wohl ganz einfach zu sein, verstehe es aber trotzdem nicht...

Kann mir jemand erklären, wie das Programm die Empfangsdaten ausließt?


Hier noch der Text der Prozedur "AddHexString" (hat die überhaupt etwas damit zu tun?!):

Delphi-Quellcode:
procedure AddHexString(S : String; Lines : TStrings );
var AddS, HexS, CopyS : String;
    i : Integer;
const SLen = 8;
begin
  while Length(S) > 0 do
    begin
      AddS := Copy(S,1,SLen);
      HexS := '';
      Delete(S,1,SLen);
      for i := 1 to SLen do
        begin
          CopyS := Copy(AddS,i,1);
          if CopyS <> 'then
            HexS := HexS + ' ' + Format('%2.2x',[Byte(CopyS[1])]) //
          else
            HexS := HexS + ' ';
        end;
       while Length(AddS) < SLen do
         AddS := AddS + ' ';
       for i := 1 to SLen do
         case AddS[i] of
           #0..#31 : AddS[i] := '.';
           #127 : AddS[i] := '.';
         end;
       Lines.Add(HexS+' : '+AddS);
    end;
end;

Danke schonmal für eure Hilfe!
  Mit Zitat antworten Zitat