Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TComPort Problem (https://www.delphipraxis.net/160549-tcomport-problem.html)

morpheus090682 18. Mai 2011 21:50

TComPort Problem
 
Moin erst mal!
Habe Delphi7 und TComPort4.
Möchte nun den ComPort auslesen und die 5Byte die ich bekomme im Array schreiben.
Nun habe ich dies schon mal:
Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  befehl : array [0..5] of integer;
begin
  ComPort1.Read(befehl,6);
  Label12.Caption:=IntToStr(befehl[0]);
  Label13.Caption:=IntToStr(befehl[1]);
  Label14.Caption:=IntToStr(befehl[2]);
  Label15.Caption:=IntToStr(befehl[3]);
  Label16.Caption:=IntToStr(befehl[4]);

end;
nur so bekomme ich nichts richtiges raus
wo ist mein Fehler!

Cyberbob 18. Mai 2011 22:06

AW: TComPort Problem
 
Was bekommst du denn angezeigt und was sollte angezeigt werden. Ein Paar mehr Infos zum Problem solltest du uns schon geben. Woher kommen die Daten. Ist überhaupt die Menge an daten im Puffer vorhanden... und und und

morpheus090682 18. Mai 2011 22:16

AW: TComPort Problem
 
Zitat:

Zitat von Cyberbob (Beitrag 1101667)
Was bekommst du denn angezeigt und was sollte angezeigt werden. Ein Paar mehr Infos zum Problem solltest du uns schon geben. Woher kommen die Daten. Ist überhaupt die Menge an daten im Puffer vorhanden... und und und

Also ich bekomme in den Labels 47856 und noch vier solche komischen Werte angezeigt!
Die daten schicke ich über HTerm vom anderen PC zu diesem.
Also an den Einstellungen liegt es nicht.
Wenn ich nun das so mache:
Delphi-Quellcode:
procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  befehl : integer;
begin
  ComPort1.Read(befehl,1);
  Label12.Caption:=IntToStr(befehl);
  ComPort1.Read(befehl,1);
  Label13.Caption:=IntToStr(befehl);
  ComPort1.Read(befehl,1);
  Label14.Caption:=IntToStr(befehl);
  ComPort1.Read(befehl,1);
  Label15.Caption:=IntToStr(befehl);
  ComPort1.Read(befehl,1);
  Label16.Caption:=IntToStr(befehl);

end;
Dann zeigt er mir das richtige in den Labels an aber nicht immer
da so die gefahr ist das ein Byte verlohren geht.

Ich sende nur zum test 01hex, 02hex, 03hex, 04hex, 05hex.

Thom 19. Mai 2011 00:17

AW: TComPort Problem
 
Ich benutze die Komponente TComPort nicht. Trotzdem hatte ich nach fünf Minuten (inclusive Goggle Suche und Download) diese Information in der Hilfedatei gefunden:
Zitat:

Call Read function to read Count bytes into Buffer variable. The function does not return until Count bytes are read or timeout elapses.
Ein Integer besteht aber aus 4 Bytes. Damit landen die empfangenen 6 Bytes im ersten und zur Hälfte im zweiten Integer Deines Arrays. Der Rest ist mit irgendwelchen zufälligen Werten belegt, da Du das Array nicht initialisierst. Und da wunderst Du Dich, daß Du nicht die erwarteten Werte angezeigt bekommst?
Korrekt wäre ein
Delphi-Quellcode:
array[0..x] of Byte
. Mal ganz abgesehen davon, daß von Dir der Parameter Count völlig ignoriert wird...

Weshalb ist es nur so schwer, mal in eine Dokumentation hineinzuschauen? :cry:

P.S.:
Du schreibst von 5 einzulesenden Bytes, nimmst aber ein Array mit 6 Elementen ([0..5]) und versuchst auch, 6 Bytes zu lesen (Read(...,6)).
Also was denn nun: 5 oder 6?

morpheus090682 19. Mai 2011 09:44

AW: TComPort Problem
 
Erst mal danke jetzt klappt es!
Nur nächstes mal kann man dies auch freundlicher machen
nicht alle können super gut Programmieren und wenn man mal ne frage hat
ist das ja wohl nicht schlimm. Und ja ich habe auch google benutzt aber es ist immer
noch die sache wie und was man eintippt bei google.


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