Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Dark Angel 16. Jul 2008 11:18

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
ja aber sollte es denn nicht beim stesten schon einnigermaßen gehen.


EDIT: Ja du hast recht, bei der exe klappts. Gibt es eine Möglichkeit erkennen zulassen (ohne selbst Daten versenden zu müssen), dass zB
der andere Teilnehmer keine Verbindung mehr hat (etwa durch Stromunterbrechung)

messie 16. Jul 2008 11:34

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

Zitat von Dark Angel
Gibt es eine Möglichkeit erkennen zulassen (ohne selbst Daten versenden zu müssen), dass zB
der andere Teilnehmer keine Verbindung mehr hat (etwa durch Stromunterbrechung)

Ja, Du kannst mit einem Heartbeat arbeiten. Lass Deinen Prozessor im Leerlauf ein Zeichen senden (z.B. jede sec), was sonst nicht vorkommt. Das Programm muss dann unterscheiden, ob das jetzt das Heartbeat-Signal oder das Start/Stopp-Signal ist und entsprechend handeln.
Wenn das Heartbeat-Signal kommt, setzt Du eine Variable auf Null. Dann nimmst Du einen Timer, der die Variable inkrementiert. Wenn im Ontimer der Wert größer als der Alarmwert ist, kannst Du eine Nachricht bringen und die Schnittstelle schliessen.

Grüße, Messie

Dark Angel 16. Jul 2008 12:12

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Ja einen Heartbeat hab ich nur wie mach ich des mitm Timer, der arbeitet doch im sec takt oder nicht mein heartbeat kommt alle 0,568s aber einer darf schon mal verloren gehen, zur Sicherheit.

divBy0 16. Jul 2008 12:19

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Du kannst den Timer doch mit dem Property Intervall auf 250ms oder sonst was einstellen.

Dark Angel 16. Jul 2008 18:42

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Ach das ist ja schön das wüsste ich noch gar nicht.

damit ist das Problem gelöst und ich stehe vorm nächsten. In Comterminal sehe ich die Zeiche und wie bekomme ich die jetzt in eine Variable??

EDIT: Wenn ich schreibe:


ComPort.Readstr(Str, count); //count = irgendwas zB.30
showmessage(str);

Dann sehe ich in der message den str aber wenn ich

label1.caption := str;

mache dann kommt gar nichts


WIESO???

divBy0 16. Jul 2008 20:09

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Eigentlich solltest du den String auch im Label sehen. Setz dir doch mal einen Haltepunkt an der Stelle und schau im Debugger nach, was in dem String drin steht.

Versuch's mal mit einem Sleep(500) vor dem ComPort.ReadStr(...);, nur zu Testzwecken.

Ansonsten schau dir mal die Ereignisse OnRxChar oder OnRxBuf an, die werden ausgelöst wenn ein Zeichen eintrifft oder wenn der Puffer voll ist.

Dark Angel 17. Jul 2008 00:50

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
@ Dicby0

also das mit dem debugger kann ich nicht, aber ich hab nen sleep davor gesetzt und jetzt blinkt ganz kurz der übertragene Wert auf und dann ist im string '' (also nichts) doch das Senden ist alle 0,5sec und das sieht man auch im comterminarl. kann es sein, dass im sting alles steht, also wenn der alle 0,5sec das überträgt und das dann etwa 20ms dauert und der rest der Zeit wird ja nichts übertragen, dass also die meiste zeit nichts im string steht.

Und noch was worein soll ich die ReadStr schreiben, habs nämlich mal bei allen probiert. Klappt nirgens

procedure TForm3.ComPort1RxFlag(Sender: TObject); ODER
procedure TForm3.ComDataPacket1Packet(Sender: TObject; const Str: string); ODER
procedure TForm3.ComPort1RxChar(Sender: TObject; Count: Integer); ODER
procedure TForm3.ComPort1RxBuf(Sender: TObject; const Buffer; Count: Integer);

Danke

mkinzler 17. Jul 2008 05:32

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Möglicherweise ist das Programm so beschäftigt, das es gar nicht auf den Repaint-Request reagiert. Füg mal
Delphi-Quellcode:
Application.ProcessMessages;
nach der Zuweisung an den Label aus.

Dark Angel 17. Jul 2008 05:44

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
Naja es ist nicht unbedingt besser, das label zeigt mir nun zwar manchmal die richtige reihenfolge "MV 26,92km/h 5,76m/s" aber auch manchmal wieder nichts odr nur "V 26,92km/h 5,76m/s" oder nur "M".

ich will daraus ja die beiden Zahlen extrahieren, die sich je nach Messwert ändern, wie kann ich das bei diesen schwankenden werten anstellen??

oki 17. Jul 2008 06:30

Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
 
lese den empfangenen Wert in eine Variable ein (oder adde ihn in eine Stringliste) oder was auch immer. Dann kannst du an anderer Stelle diese Werte anzeigen. Der Einfachheit halber tu es mal in einem Memo.

Für deinen Beispiel-Code sollte das dann so aussehen:
Delphi-Quellcode:
ComPort.Readstr(Str, count); //count = irgendwas zB.30
Memo1.Lines.Add(str);
Application.ProcessMessages;
du wirst dehen, wie dein Memo anfängt sich mit den Werten zu füllen.
Der Hinweis mit Application.ProcessMessages ist berechtigt. Wenn dein Port ständig streamt wird andauernd dein Read-Ereignis aufgerufen und deine Anwendung kommt dann mit dem Neuzeichnen nicht mehr hinterher.

Gruß oki


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.
Seite 2 von 3     12 3      

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