Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: String über Serielle Schnittstelle

  Alt 4. Sep 2006, 22:21
Hi und herzlich Willkommen in der DP

An sich hast du mehrere Möglichkeiten dein Problem zu lösen. Das Erste was mir eingefallen ist (entspricht nicht ganz einer echten Lösung) wäre die Verwendung von TComPort (gibt's bei SourceForge). Hier findest du eine sehr schöne Kapselung, die auch ohne eine Dll auskommt (du brauchst nur die .exe die Delphi erstellt).
Hier gibt sowohl Methoden, die Bytes als auch solche, die Strings verschicken.

Was dein eigentliches Problem angeht, so ist StrToInt einfach die falsche Funktion. StrToInt wandelt den String in eine interpretierte Zahl um. Ist halt dann wichtig, wenn eine Benutzereingabe eine Zahl ist (und als solche interpretiert werden soll).
Was du hier gerne hättest ist der Ordinale Wert des Zeichen. An sich besteht ein String aus einer Menge von Charactern. Ein Character ist (hier) genau ein Byte. Ord liefert dir den Ordinalen Wert dieses Zeichens. Umgekehrt würde Chr dir wiederum das Zeichen liefern, dass hinter einer Zahl steckt.

Was den Code angeht, den du gepostet hast, so gibt es hier im Forum so genannte Tags zur Auszeichnung von Code. Dieser kann dann leichter als solcher erkannt werden. Die Tags findest du über dem Beitragseditor. Delphi-Code ist hier der Knopf den du verwenden kannst. Hier öffnet sich dann der Bereich des Codes und der Schalter trägt ein *. Dieses zeigt dir, dass du das Tag noch nicht geschlossen hast. Ein weiterer Click beendet dann den Codetag.
Das ganze sieht dann so aus:

Delphi-Quellcode:
procedure TForm1.COM41Click(Sender: TObject);
begin
  OpenCom (pchar('com4:19200,N,8,1'));
end;

procedure TForm1.Beenden1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var ziffer : integer;
    s : string;
begin
  if Edit1.Text <> 'then
  begin
   ziffer := strtoint(Edit1.Text);
   sendbyte (ziffer);
  end
  
  else
  begin
   showmessage ('Telefon-Nummer eingeben!');
  end;
end;
Wobei das Einrücken von mir erledigt wurde. Ist doch leserlicher, oder?

Ok, jetzt nochmal zum Senden des String. Du möchtest diesen Byteweise verschicken, was auch heißt, dass du über den gesamten String laufen musst. Hier kannst du dann jedes zeichen einzeln umwandeln:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer;
begin
  if Edit1.Text <> 'then
  begin
   // über den ganzen String iterieren
   // Achtung, Strings sind 1 indiziert, dynamische Arrays beginnen bei 0!
   for i := 1 to length(Edit1.Text) do
   begin
     // Edit1.Text[i] = das i-te Zeichen aus Edit1.Text
     // ord(ZEICHEN) = der Ordinale Wert des ZEICHEN
     sendbyte(ord(Edit1.Text[i]));
   end;
  end
  
  else
  begin
   showmessage ('Telefon-Nummer eingeben!');
  end;
end;
Gruß Der Unwissende
  Mit Zitat antworten Zitat