![]() |
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 ![]() 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:
Die Funktion gibt bei ersten Aufruf 0 zurück.
COM.Destroy;
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 |
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 |
Re: RS232 - Daten empfangen funktioniert nur halb
Hi, marabu!
Wie initialisiert man denn einen String? Mit freundlichen Grüßen Philipp |
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:
marabu
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; |
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