![]() |
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) |
Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
Zitat:
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 |
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.
|
Re: Verbindung mit COM-Schnittstelle aufbauen über TComPort
Du kannst den Timer doch mit dem Property Intervall auf 250ms oder sonst was einstellen.
|
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??? |
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. |
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 |
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:
nach der Zuweisung an den Label aus.
Application.ProcessMessages;
|
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?? |
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:
du wirst dehen, wie dein Memo anfängt sich mit den Werten zu füllen.
ComPort.Readstr(Str, count); //count = irgendwas zB.30
Memo1.Lines.Add(str); Application.ProcessMessages; 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 01:06 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz