AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi RS232 - Daten empfangen funktioniert nur halb
Thema durchsuchen
Ansicht
Themen-Optionen

RS232 - Daten empfangen funktioniert nur halb

Ein Thema von PhilippW · begonnen am 31. Jul 2005 · letzter Beitrag vom 31. Jul 2005
Antwort Antwort
PhilippW

Registriert seit: 9. Jun 2005
10 Beiträge
 
#1

RS232 - Daten empfangen funktioniert nur halb

  Alt 31. Jul 2005, 14:45
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;
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;
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
Angehängte Dateien
Dateityp: pas ucom_102.pas (3,5 KB, 31x aufgerufen)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: RS232 - Daten empfangen funktioniert nur halb

  Alt 31. Jul 2005, 16:54
Hallo Philipp,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
PhilippW

Registriert seit: 9. Jun 2005
10 Beiträge
 
#3

Re: RS232 - Daten empfangen funktioniert nur halb

  Alt 31. Jul 2005, 17:14
Hi, marabu!

Wie initialisiert man denn einen String?

Mit freundlichen Grüßen

Philipp
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: RS232 - Daten empfangen funktioniert nur halb

  Alt 31. Jul 2005, 17:49
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
  Mit Zitat antworten Zitat
PhilippW

Registriert seit: 9. Jun 2005
10 Beiträge
 
#5

Re: RS232 - Daten empfangen funktioniert nur halb

  Alt 31. Jul 2005, 17:57
Wow! Super! Es funktioniert!

Vielen Dank für die schnellen Antworten!

Mit freundlichen Grüßen

Philipp
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 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