Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi RS232 - Daten empfangen funktioniert nur halb (https://www.delphipraxis.net/50772-rs232-daten-empfangen-funktioniert-nur-halb.html)

PhilippW 31. Jul 2005 14:45


RS232 - Daten empfangen funktioniert nur halb
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, an alle!

Ich habe folgendes Problem:
Für ein Roboter-Projekt habe ich an der seriellen Schnittstelle einen Mikro-Controller (C-Control) angeschlossen.
Dieser ist so programmiert, dass er, immer wenn er über die serielle Schnittstelle die Zahl 6 empfängt, einen Wert von einem Distanz-Sensor zurücksendet (Der Wert liegt zwischen 0 und 255).
Soweit klappt das auch alles, nur kommt nicht der komplette Wert im meinem Delphi-Programm an.
Ich habe mir zur Realisierung die Klasse TCOMPort ein wenig vereinfacht und in eine eigene Unit gepackt (Datei ist angehängt).
Aufgerufen wird das ganze folgendermaßen:

Delphi-Quellcode:
const
  D1: PChar = '6' + #13#10;
Delphi-Quellcode:
COM:=TCOM.Init;
Delphi-Quellcode:
function TSensors.Distance1: String;
var
  Distance1: String;
begin
  COM.SendString(D1);
  Distance1:=Trim(COM.ReadString);
  if Distance1='' then Distance1:='0';
  Result:=Distance1;
end;
Delphi-Quellcode:
COM.Destroy;
Die Funktion gibt bei ersten Aufruf 0 zurück.
Beim zweiten beispielsweise 39 (was auch richtig ist) und
bei allen weiteren Aufrufen nur die erste Zahl (also z.B. 3).
Ändert sich die Entfernung bei meinem Distanz-Sensor so, dass der Rückgabewert über 100 kommt, wird die komplette Zahl ausgegeben.

Aber wo liegt nun der Fehler?
Warum gibt er ab dem dritte Aufruf nur die erste Zahl zurück?
Ich hoffe, ihr könnt mir helfen!

Mit freundlichen Grüßen

Philipp

marabu 31. Jul 2005 16:54

Re: RS232 - Daten empfangen funktioniert nur halb
 
Hallo Philipp,

in der Methode TCOM.ReadString() solltest du vor Eintritt in die Schleife den string data initialisieren.

Grüße vom marabu

PhilippW 31. Jul 2005 17:14

Re: RS232 - Daten empfangen funktioniert nur halb
 
Hi, marabu!

Wie initialisiert man denn einen String?

Mit freundlichen Grüßen

Philipp

marabu 31. Jul 2005 17:49

Re: RS232 - Daten empfangen funktioniert nur halb
 
Bist du eigentlich selbst auf die Idee mit dem Rückgabetyp PChar gekommen? Besser ist, wenn du beim Beenden deiner Funktion nicht zwischen String und PChar wechselst:

Delphi-Quellcode:
function TCOM.ReadString: string;
var
  Dat: Integer;
begin
  Dat := 0;
  Result := ''; // hier wird der String initialisiert
  while ((Dat > -1) and (Dat <> 13)) do begin
    Dat := ReadByte();
    if ((Dat > -1) and (Dat <> 13)) then
      Result := Result + Chr(Dat);
  end;
end;
marabu

PhilippW 31. Jul 2005 17:57

Re: RS232 - Daten empfangen funktioniert nur halb
 
Wow! Super! Es funktioniert!
:bounce1: :bounce1: :bounce1: :bounce1: :bounce1: :bounce1: :bounce1:
Vielen Dank für die schnellen Antworten!

Mit freundlichen Grüßen

Philipp


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