Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Senden und Empfangen mit Dejan ComPort (https://www.delphipraxis.net/36612-senden-und-empfangen-mit-dejan-comport.html)

EccoBravo 22. Dez 2004 16:18


Senden und Empfangen mit Dejan ComPort
 
Hallo, ich komme mit dem (?asynchronen?) Datensenden/-empfangen über serielle Schnittstelle nicht klar.
Ich sende über COM1 einen Befehl an ein Messgerät, warte einige Zeit und lese dann den seriellen Port mit der Antwort wieder aus (weil ich es nicht anders kann/weiss). Bei mir sieht es ungefähr so aus

Delphi-Quellcode:
procedure MessgeraetAbfragen;
var
    stri : string;
begin
    ComPort.Open;
    Stri:'WERT'+#13#10;          
    ComPort.WriteStr(Stri);        // senden eines Messbefehls an das Messgerät
    windows.Beep(100,150);         // dem Messgerät Zeit zum Überlegen lassen
    ComPort.ReadStr(Stri,100);     // Messwert vom Messgerät auslesen
    ComPort.Close;
end;
Ja, das ist wohl etwas komisch von mir programmiert
Nun braucht das Messgerät für jede Anfrage unterschiedlich viel Zeit zum Reagieren, und das Messgerät liefert mir öfters falsche Rückantworten, weil es entweder noch nicht so weit ist oder die Frage längst überfällig ist.
Wie kann man dieses Problem lösen, wann weiß man, wann das Messgerät eine fertige Antwort auf dem seriellen Port bereitgestellt hat?

Vielen Dank für Hilfe und ein frohes Fest

EccoBravo

[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

fkerber 22. Dez 2004 16:29

Re: Senden und Empfangen mit Dejan ComPort
 
Hi!

Mit welcher Komponente greifst du denn auf den Com-Port zu?


Ciao Frederic

P.S. Für Code bitte verwenden.

EccoBravo 23. Dez 2004 09:30

Re: Senden und Empfangen mit Dejan ComPort
 
Hallo Frederic,

ich verwende nur die Komponente von Dejan TComPort.

Gruesse

EccoBravo

Generalissimo 23. Dez 2004 10:18

Re: Senden und Empfangen mit Dejan ComPort
 
Hi,

die meisten ComPort Komponenten haben irgendwo ein Ereigniss OnEventChar oder so ähnlich. Das wird ausgelöst sobald ein Zeichen am ComPort eintrifft. Dieses Ereigniss solltes du mit einer Funktion hinterlegen.

EccoBravo 23. Dez 2004 10:29

Re: Senden und Empfangen mit Dejan ComPort
 
Danke aber -

Das Messgerät sender Zeichenketten zurück, wann ist ein Messgerät mit dem Rücksenden einer Zeichenkette fertig?

Gruss

EccoBravo

Generalissimo 23. Dez 2004 12:15

Re: Senden und Empfangen mit Dejan ComPort
 
Sendet das Messgerät verschiedene Zeichenketten?

Normalerweise läuft es so ab:

OnEventChar wird ausgelöst -> mit ComportCompo.ReceiveText oder ähnlicher Funktion Zeichenkette abholen und verarbeiten.

Sollten mehrere Zeichenketten kommen dann wird das OnEventChar öfters ausgelöst, da die meisten Compos nach einer Abholung der Zeichenkette wieder in den Listener-Modus gehen.
Bei mehreren Zeichenketten muss aber der Buffer entsprechend hochgesetzt werden, damit nix verloren geht.

EccoBravo 23. Dez 2004 13:31

Re: Senden und Empfangen mit Dejan ComPort
 
Danke danke,
- (ComPortRxChar) -
nun arbeiten diese Befehle leider asynchron, das heißt, während man auf die Schnittstelle wartet arbeitet das Programm (an einer anderen Stelle) weiter.
Wenn man zeitsensitiv verschiedene Set/Read-Befehle mit dem Messgerät aushandelt, weis das Programm irgendwann nicht mehr welche Antwort zu welcher Frage gehört und alles gerät durcheinander.
Fazit: Funktionieren würde Dein Vorschlag bei synchroner Arbeitsweise der Schnittstellenoperation.
Das sind die Hintergründe meiner NeoGreenhornFrage.
Wie kann man dieses Problem am gescheitesten umgehen ?

Danke

EccoBravo

Hansa 23. Dez 2004 14:49

Re: Senden und Empfangen mit Dejan ComPort
 
Das macht man so, daß der Empfänger dem Sender STOP sagt, bis die Daten empfangen sind und wenn wieder Platz ist, dann sagt er dem Sender wieder START. :mrgreen: Dadurch geht dann nichts verloren. Für so was gibt es Protokolle, Handshake usw. Und das muß auf beiden Seiten richtig eingestellt sein. Die Komponente hat mit Sicherheit ein Feld im OI, wo man das einstellt. Vermutlich was mit Optionen.

Da ich allerdings nur AsyncPro für so was verwende, weiß ich nicht, wie das bei Dir geht. Ich würde mir das mal ansehen, zumal da ein richtiges Handbuch dabei ist. Und das ist bei serieller Kommunikation unverzichtbar.

Generalissimo 23. Dez 2004 15:36

Re: Senden und Empfangen mit Dejan ComPort
 
Ich arbeite auch sehr gerne mit der TSerial Komponente von der Zeitschrift Toolbox.
Ansonsten scließ ich mich Hansa an.

EccoBravo 30. Dez 2004 22:02

Re: Senden und Empfangen mit Dejan ComPort
 
Hallo,

Danke für die Tips, ich arbeite mit D7 und dafür gibt es kein TSerial,

Guten Rutsch

EB

Generalissimo 31. Dez 2004 11:17

Re: Senden und Empfangen mit Dejan ComPort
 
Also wenn du die TSerial Komponente aus der Toolbox jetzt meinst, die ist auch für Delphi 7.


Header der Kompo:
Delphi-Quellcode:
(******************************************************************************)
(*                                                                            *)
(*   Komponenten                                                             *)
(*   TSerial, TSerPort, TSerStdDlg                                           *)
(*                                                                            *)
(*   Komponenten zur Datenübertragung über die serielle Schnittstelle,       *)
(*   serielle Schnittstelle als I/O-Port,                                    *)
(*   Standarddialog zur Konfiguration einer Schnittstelle                    *)
(*                                                                            *)
(*   (c) 1998-2004  Rainer Reusch und Toolbox                                *)
(*   (c) 1998-2004  Rainer Reusch und Computer & Literatur Verlag            *)
(*                                                                            *)
(*   Internet: [url]http://reweb.fh-weingarten.de/toolbox/Projekte/Serial[/url]         *)
(*             [url]http://www.toolbox-mag.de[/url]                                     *)
(*             [url]http://www.cul.de[/url]                                             *)
(*                                                                            *)
(*   E-Mail:  [email]toolbox@reusch-elektronik.de[/email]                                  *)
(*             [email]jb@toolbox-mag.de[/email]                                             *)
(*                                                                            *)
(*   Borland Delphi 2.0, 3.0, 4.03, 5.0, 6.0, [b]7.0[/b]                     *)
(*   Borland C++ Builder 1.0, 3.0, 4.0, 5.0, 6.0                              *)
(*                                                                            *)
(****V4.0***********************************************************Build 6****)

EccoBravo 6. Jan 2005 10:19

Vielen Dank, Lösung TSerial aus Toolbox funktioniert
 
Ein gesundes neues Jahr und vielen Dank an alle Helfer!
Die Komponente TSerial aus Toolbox war ein guter Rat. Diese liess sich zwar nur nach Löschen von Dejan ComPort installieren (alle meine alten Programme!!!), die Tests funktionierten aber von Anfang an und sicher. Ich kannte diese Zeitschrift Toolbox vorher nicht, habe mir diese gleich abonniert.

Also Viele Grüsse aus dem frühlingshaften Neuruppin

EccoBravo :firejump:

bL1nK 6. Aug 2007 16:36

Re: Senden und Empfangen mit Dejan ComPort
 
woher kannn ich denn die Komponente TSerial beziehn?

TwoFace 6. Aug 2007 18:30

Re: Senden und Empfangen mit Dejan ComPort
 
Servus

So wie ich das sehe, braucht man für TSerial eine Lizenz, die man mit dem Erwerb des jeweiligen Magazins bzw. der Jahres-CD hat. :angel:

Ich kann die Komponente des Threaderstellers empfehlen. Das hier müsste sie sein, ansonsten mal googeln.

Greetz


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:22 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