Einzelnen Beitrag anzeigen

Benutzerbild von titanic
titanic

Registriert seit: 17. Mai 2008
4 Beiträge
 
#2

Re: Seriell Flusssteuerung einstellen

  Alt 23. Mai 2008, 16:51
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:
  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

Titanic
  Mit Zitat antworten Zitat