Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Verbindung mit COM-Schnittstelle aufbauen über TComPort (https://www.delphipraxis.net/117298-verbindung-mit-com-schnittstelle-aufbauen-ueber-tcomport.html)

messie 17. Jul 2008 06:33

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Scheint an Deiner Übertragunsgsstruktur zu liegen. Du musst Anfang und Ende finden. Was schickst Du denn für eine Abschlusssequenz, wenn die Übertragung des Prozessors beendet ist? CR/LF oder so?

Grüße, Messie

Dark Angel 17. Jul 2008 07:36

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
so nun hab ichs das schon mal geschafft, der string ist mit den richtigen daten gefüllt. es wird die zeichenkette im memo und im label agezeigt allerdings kommt es im memo noch manchmal zu störungen, bei denen dann nicht die ganze zeil erichtig übretragen wird.

Code dazu:
Delphi-Quellcode:
procedure TForm3.ComPort1RxBuf(Sender: TObject; const Buffer; Count: Integer);
var
RXStr_LS1 : string;
begin
sleep(568);
ComPort1.Readstr(Strx, 20);
 Memo1.Lines.Add(strx);
if Strx = 'MV 26,92km/h 5,76m/s' then
 label24.caption := strx;

Application.ProcessMessages;
end;

JETZT würde ich aber noch gerne aus der zeichenkette die beiden geschwindigkeiten auslesen und einzelen in einem label anzeigen lassen. dazu hab ich mir mal so möglichkeiten zur extraction angesehen, wie expect(),.... aber ich kenn mich da gar nicht aus. Wie könnt ich das am besten machen??

oki 17. Jul 2008 07:44

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Na denn, prüfe auf Vorkommen MV + #$20, lese erste Geschwindigkeit mittels Pos und Copy bis zum nächsten Leerzeichen und zweite Geschwindigkeit in gleicher Form aus und die Welt ist wieder in Ordnung.

oki

messie 17. Jul 2008 07:51

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Zitat:

Zitat von oki
Na denn, prüfe auf Vorkommen MV + #$20, lese erste Geschwindigkeit mittels Pos und Copy bis zum nächsten Leerzeichen und zweite Geschwindigkeit in gleicher Form aus und die Welt ist wieder in Ordnung.

oki

Zusätzlich hilft noch delete(). Aber ich würde auch prüfen, ob Du auch genug Zeichen im Puffer hast. Gibt es variable Längen (z.B. 5m/s ist kürzer als 111 m/s, füllt Du das mit Nullen auf?). Wenn Du am Ende der Sequenz vom µC ein #13 schickst, kannst Du das Ende erkennen (und damit ob Du eine vollständige Sequenz hast), das ist eins der üblichen Verfahren.

Grüße, Messie

oki 17. Jul 2008 07:54

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Zitat:

Zitat von messie
Zusätzlich hilft noch delete(). Aber ich würde auch prüfen, ob Du auch genug Zeichen im Puffer hast. Gibt es variable Längen (z.B. 5m/s ist kürzer als 111 m/s, füllt Du das mit Nullen auf?). Wenn Du am Ende der Sequenz vom µC ein #13 schickst, kannst Du das Ende erkennen (und damit ob Du eine vollständige Sequenz hast), das ist eins der üblichen Verfahren.

Grüße, Messie

Richtisch!

Dark Angel 17. Jul 2008 09:28

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Danke für die schnellen Anworten Leute, aber ich check nicht wie ich pos() und copy() richtig einsetzen soll.

Und das funzt auch nicht:

Delphi-Quellcode:
if Strx = ('MV' + #$20) then
 label24.caption := strx;
@messie
ich fülle die werte mit nullen auf also an der stellenanzahl und belegung ändert sich gar nichts, Wie hilft mir das weiter?

messie 17. Jul 2008 15:57

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Zitat:

Zitat von Dark Angel
das funzt auch nicht:
Delphi-Quellcode:
if Strx = ('MV' + #$20) then
 label24.caption := strx;

Logisch, denn Du liest ja 20 Zeichen in die Variable ein und fragst dann, ob die Variable GLEICH der 3 Zeichen ist. Kann also nicht gehen.
Eher mit Pos:
Delphi-Quellcode:
if Pos('MV'+#20,strx) = 1 then
begin
  //aha, Du bist am Beginn Deiner Sequenz
end;

//andere Variante

if Pos('MV'+#20,strx) > 0 then //ist die 3er-Squenz in der Variable enthalten?
begin
  i := Pos('MV'+#20,strx); //Anfang suchen
  strZ := copy(strx,i+4,5);//damit solltest Du "26,92" im Kasten haben.
end;
Alles ungetestet.

Grüße, Messie

Dark Angel 17. Jul 2008 17:34

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
WOW vielen herzlichen DANK es klappt. JUHU :hello: :bounce2: :dancer:


Aber leider wars das noch nicht. Ich muss ja auch was senden. mit:

Delphi-Quellcode:
  ComPort1.WriteStr('TEST');
müsste doch eigentlich klappen oder? nur wie überprüf ichs am PC obs auch rausgegangen ist. Terminalprob hätt ich versucht aber ich kann ja nicht mit dem Programm und dem Hterm eine Verbindung aufbauen.

Habt Ihr ne idee??

messie 17. Jul 2008 18:06

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Also eine Überprüfung der gesendeten Sachen ist nicht vorgesehen. Die Daten werden ins COM-Register geschrieben und dann irgendwie umgesetzt. Das macht unter Windows der Treiber und jeder macht es anders (sonst gäbe es keine virtuellen Ports einer BT-Hardware :wink: ). Da musst Du tatsächlich einen anderen Rechner mit Hyperterminal dranhängen (oder etwas Vergleichbares). Ich hab' für solche Zwecke immer ein ein Lauscherkabel bei mir - Du verbindest Deinen µC mit dem PC und lässt es laufen - am Lauscherport hängst Du Dein Notebook oder notfalls ein Oszi dran. Funzt meistens prima.

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.
Seite 3 von 3     123   

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