Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:17 Uhr.
Seite 1 von 2  1 2      

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