Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Seriell Flusssteuerung einstellen (https://www.delphipraxis.net/114317-seriell-flusssteuerung-einstellen.html)

TUX_der_Pinguin 23. Mai 2008 11:00


Seriell Flusssteuerung einstellen
 
In meinem Programm lese ich von der Seriellenschnittstelle Daten ein, die Schnittstellen Parameter
stelle ich zur Laufzeit ein mit dem Typ TDCB, was alles kein Problem ist, funktioniert alles.

Delphi-Quellcode:
DCB.Baudrate := 38400;
DCB.ByteSize := 8;
...
Nur müßte ich noch die Flusssteuerung auf Xon / Xoff einstellen, dazu habe ich auch schon herrausgefunden
das man dies mit "DBC.Flags" macht, nur wie weiß ich noch nicht.

Was muß ich angeben um die 3 möglichkeiten zu bekommen. (Xon/Xoff, Hardware, Keine). Ich habe schon im Forum
gesucht aber höchstens mal sowas wie $1011 o.ä. gefunden jedoch was das heißt stand nie dabei.

titanic 23. Mai 2008 15:51

Re: Seriell Flusssteuerung einstellen
 
Hallo TUX_der_Pinguin,

Hier: http://www.hsg-kl.de/faecher/inf/msr...owo04/TCPD.php
gibt es eine tolle Dokumentation zu TCOMPort. Dort steht u.a.:
Zitat:

Delphi-Quellcode:
//--Konstanten zum einfachen Setzen der Portflags----------------------------------------------
     dcb_Binary             = $00000001; // Binärer Modus - In Windows immer auf 1!
     dcb_ParityCheck        = $00000002; // Paritätsüberprüfung

     dcb_OutxCtsFlow        = $00000004; // CTS Flusskontrolle - Sendekontrolle mit Hilfe von CTS
     dcb_OutxDsrFlow        = $00000008; // DSR Flusskontrolle - Sendekontroll mit Hilfe von DSR

     dcb_DtrControlDisable  = $00000000; // DTR Flusskontrolle - Schließt DTR auf 0 bei Verbindung und hält es auf 0
     dcb_DtrControlEnable   = $00000010; // DTR Flusskontrolle - Öffnet  DTR auf 1 bei Verbindung und hält es auf 1
     dcb_DtrControlHandshake = $00000020; // DTR Flusskontrolle - Handshake-Funktion.
     dcb_DtrControlMask     = $00000030;

     dcb_DsrSensitvity      = $00000040; // Zustandsänderung auf DSR überwachen

     dcb_TXContinueOnXoff   = $00000080; // Stellt ein, ob die Übertragung bei XOff angehalten wird oder nicht

     dcb_OutX               = $00000100; // Flusskontrolle mit XOn/XOff beim Senden
     dcb_InX                = $00000200; // Flusskontrolle mit XOn/XOff beim Empfangen
     dcb_ErrorChar          = $00000400; // Bestimmt, ob Bytes mit falscher Parität durch den Error-Char ersetzt wird.

     dcb_NullStrip          = $00000800; // Null-Bytes werden beim Empfangen ignoriert

     dcb_RtsControlDisable  = $00000000; // RTS-Flusskontrolle - Schließt RTS auf 0 bei Verbindung und hält es auf 0
     dcb_RtsControlEnable   = $00001000; // RTS-Flusskontrolle - Öffnet  RTS auf 1 bei Verbindung und hält es auf 1
     dcb_RtsControlHandshake = $00002000; // RTS-Flusskontrolle - Handshake-Funktion
     dcb_RtsControlToggle   = $00003000; // RTS-Flusskontrolle - RTS ist an wenn Bytes zu senden sind, wenn keine zu senden sind ist RTS auf 0
     dcb_RtsControlMask     = $00003000; // RTS-Flusskontrolle

     dcb_AbortOnError       = $00004000; // Wenn ein Fehler auftritt, stoppt jede Transmission und der
                                          // Fehler muss mit Hilfe von ClearCommError beseitigt werden.

     dcb_Reserveds          = $FFFF8000; // Reserviert! Nicht benutzen!
//------------------------------------------------------------------------------------------------------------------------

Das sind die Flags für deinen TDCB-Typen:

Hier: http://www.delphipraxis.net/internal...ct.php?t=67342
gibt es ein komplettes Beispiel mit TDCB. Dort steht u.a.:
Zitat:

Delphi-Quellcode:
  DCB.Flags := 5123; { Wenn 2 Pins belegt sind }

5123 ist in diesen fall eine dezimale Zahl (d.h. man zählt 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-...)
in das hexadezimale System übertragen ergibt sich $1403 ($00001403).
Im hexadezimalen System zählt man 0-1-2-3-4-5-6-7-8-9-A-B-C-D-E-F-10-11-12-13-14-15-16-17-18-19-1A-1B-...
Nun ist $1430 oder 5123 nichts anderes als eine mögliche Summe der obigen Flag-codes, das heisst konkret, das $1403 die Summe von:
Delphi-Quellcode:
dcb_RtsControlEnable   = $00001000; // RTS-Flusskontrolle - Öffnet  RTS auf 1 bei Verbindung und hält es auf 1;
     dcb_ErrorChar          = $00000400; // Bestimmt, ob Bytes mit falscher Parität durch den Error-Char ersetzt wird.;
     dcb_ParityCheck        = $00000002; // Paritätsüberprüfung; und
     dcb_Binary             = $00000001; // Binärer Modus - In Windows immer auf 1!
ist.
Für dich ist dabei erst einmal nur der erste Wert - $1000 - interessant. das veränderst du für Xon/Xoff so:
Delphi-Quellcode:
dcb_InX                = $00000200; // Flusskontrolle mit XOn/XOff beim Empfangen
dcb_OutX               = $00000100; // Flusskontrolle mit XOn/XOff beim Senden
     dcb_ErrorChar          = $00000400; // Bestimmt, ob Bytes mit falscher Parität durch den Error-Char ersetzt wird.;
     dcb_ParityCheck        = $00000002; // Paritätsüberprüfung; und
     dcb_Binary             = $00000001; // Binärer Modus - In Windows immer auf 1!#
die summe ist $703 (hex!) oder 1795 (dez).
Wie du dcb.flags zuweist (ob nun $703 oder 1795) spielt dabei keine Rolle, denn beide Darstellungen meinen ein und dasselbe.

Frohes Programmieren :coder:

Titanic

TUX_der_Pinguin 26. Mai 2008 09:27

Re: Seriell Flusssteuerung einstellen
 
Vielen dank das hat mir schon recht gut geholfen, ich habe ein mini Test Programm geschrieben wo ich die Schnittstelle
per Windows Dialog einstellen kann, dort habe ich dann die Flusssteuerung auf die 3 Möglichkeiten (Keine, Xon/Xoff und Hardware)
gesetzte und mir anschließend DCB.Flags ausgeben lassen ( ShowMessage(IntToStr(DCB.Flags)); ) und kam zu folgendem Ergebnis.

Keine = 4113
Xon/XOff = 785
Hardware = 8213

Ich nehme daher an das da noch ein paar andere Optionen gesetzt werden, welcher Art auch immer. So weiß ich jedoch
was ich setzten muß wenn ich die Flusssteuerung einstellen muß.


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