AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String über Serielle Schnittstelle

Ein Thema von GierigeSau · begonnen am 4. Sep 2006 · letzter Beitrag vom 16. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
GierigeSau

Registriert seit: 4. Sep 2006
8 Beiträge
 
#1

String über Serielle Schnittstelle

  Alt 4. Sep 2006, 21:42
Hallo, habe kurze und wichtige frage: Habe Delphi6 und benutze die PORT.DLL. Möchte die im Edit Feld eingegebene Tel. Nr. Seriell an einem Microkontroller übertragen. Die Kommunikation ansonst läuft, nur irgendwie komm ich net weiter. Übertragen wird immer nur ein Byte. Es soll aber Ziffer für Ziffer (Bsp.: 0171 >>> 30h,31h,37h,31h) übertragen werden. (00h,01h,07h,01h würde auch gehen, hauptsache die eigentlichen Zahlen tauchen auf, der rest kann der MC "wegschneiden". Habe auch schon im Forum gesucht, aber nichts passendes gefunden. Hier Programm-"Ausschnitt":

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
showmessage ('Telefon-Nummer eingeben!');
end;
Ich danke jetzt schonmal an dieses schön aufgebaute Forum, finds gut, weiter so...
MFG GierigeSau

[edit=sakura] [delphi]-Tags Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
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
GierigeSau

Registriert seit: 4. Sep 2006
8 Beiträge
 
#3

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 05:29
Sau GEIL... Danke, läuft und habe was dazu gelernt... Nochmals Dankeschön...
MFG GierigeSau
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 08:57
Zitat von GierigeSau:
Sau GEIL... Danke, läuft und habe was dazu gelernt...
Das freut mich! Aber gewöhn dich gleich 'dran, wird dir in der DP häufiger passieren

Na dann viel Spaß damit
Gruß Der Unwissende
  Mit Zitat antworten Zitat
GierigeSau

Registriert seit: 4. Sep 2006
8 Beiträge
 
#5

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 14:53
emm, noch ne kurze frage, wie bekomm ich die Anzahl der stellen raus (i), bevor ich die einzelnen Bytes übertrage, müsste die Anzahl der stellen vorher übertragen. Danke nochmal, ansonsten klappt es jetzt super...
MFG GierigeSau (Delphi-beginner )
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 14:54
Ja, dazu müsstest du zuerst die Anzahl der Stellen übertragen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
GierigeSau

Registriert seit: 4. Sep 2006
8 Beiträge
 
#7

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 14:58
hmm, genau das möcht ich ja, nur erst die Anzahl der Ziffern und dann die einzelnen Ziffern. Letzteres klappt nu ja schon...
MFG GS
  Mit Zitat antworten Zitat
Der_Unwissende

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

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 15:06
length(s) gibt dir die Länge des Strings s zurück. Dies wäre dann aber ein Integer Wert. Hier musst du also aufpassen, da du diese Zahl als Byte überträgst. Wenn du sicher sein kannst, dass du hier nie über 255 Zeichen überträgst kannst du das auch casten:
Delphi-Quellcode:
var laenge : Byte;
begin
  laenge := Byte(length(s));
end;
Hier aber wirklich vorsichtig sein, du schneidest alles andere einfach ab. Ansonsten musst du halt 4 Byte zusammenfassen und als 32 Bit Wert interpretieren.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
GierigeSau

Registriert seit: 4. Sep 2006
8 Beiträge
 
#9

Re: String über Serielle Schnittstelle

  Alt 5. Sep 2006, 15:16
Klappt natürlich wieder... Göttlich... *anbet* Dankeschön...
Der Unwissende =

MFG GS
  Mit Zitat antworten Zitat
GierigeSau

Registriert seit: 4. Sep 2006
8 Beiträge
 
#10

Re: String über Serielle Schnittstelle

  Alt 16. Jun 2007, 11:59
Hi, ich bins wieder. Beim letzten mal hat es auf anhieb geklapt, nur leider hab ich die surce verschlampt . Nu bekomm ich es einfach nicht mehr auf die reihe... Das Prog soll ja zuerst die anzahl der stellen und dann die eigentliche nummer übertragen, letzteres funktioniert auch tadellos, nur das übertragen der stellenanzahl nicht, habe alles probiert, klappt einfach nicht... Vllt habe ich auch nur einen Denkfehler . Beim letzten mal hab ich das Prog so weggetippt. Kann mir jemand helfen???
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:21 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