Schnittstellen - USB zu RS232/Seriell
-
Hallo!
Da ich bei meinem Notebook keine Serielle Schnittstelle habe, habe ich mir eine USB-Serielle besorgt. Jetzt hab ich Probleme diese anzusteuern.
Normal sollte dies einfach mit "COM2" etc. funktionieren.
Deshalb meine Bitte: Bitte schickt mir Source Codes wie man generell eine serielle Schnitstelle initialisiert und etwas darüber sendet bzw. empfangt.
Mit dem ActiveX - Komponent von Microsoft (.OCX) MSComm... habe ich auch schon probiert. Wenn ich etwas schicken oder Empfangen will, hängt sich der PC auf (hängt sich richtig auf...KERNEL - Maus übermalt Symbole etc.)
Danke THOMAS
[ Dieser Beitrag wurde am 19.02.2002 um 17:11 Uhr von Jansen editiert. ]
-
Wollen wir was wetten, das du nicht gesucht hast, das Thema steht nähmlich sogar in der FAQ images/smiles/icon_razz.gif
_inp und _outp (Parallelschnittstelle)Es geht hier zwar um die LTP, aber das ganze geht mit der COM genau gleich, blos "LTP1" = "COM1"
[ Dieser Beitrag wurde am 20.01.2002 um 17:58 Uhr von CMatt editiert. ]
-
Ich werde das probieren.
Muss ich denn da nichts mehr initialisieren. z.B.Baut-Rate?
Gibt es nicht vielleicht ein einfaches Komponent das man einfügen kann. Wie bei Visual Basic?
THOMAS
-
Hier ein wenig Code. Sollte Dir weiter helfen images/smiles/icon_wink.gif
bool __fastcall TModem::OpenComm(AnsiString ComPort, DWORD BaudRate, BYTE ByteSize, BYTE Parity, BYTE StopBits) { // Schnittstelle öffnen CommHandle=CreateFile( ComPort.c_str(), GENERIC_READ | GENERIC_WRITE, 0, /* comm devices must be opened w/exclusive-access */ NULL, /* no security attrs */ OPEN_EXISTING, /* comm devices must use OPEN_EXISTING */ 0, // no overlapped I/O NULL /* hTemplate must be NULL for comm devices */ ); // Prüfen ob Schnittstelle geöffnet werden konnte if(CommHandle==INVALID_HANDLE_VALUE) { Application->MessageBox("Fehler beim Ínitialisieren der Schnittstelle.\n\n" "Schnittstelle nicht vorhanden, oder ein anderes\n" "Programm hat diese noch geöffnet.",ComPort.c_str(),MB_ICONEXCLAMATION); return(false); } // Timeout für Read setzen damit nicht auf ein Zeichen // von der Schnittstelle gewartet wird GetCommTimeouts(CommHandle,&CommTimeOut); CommTimeOut.ReadIntervalTimeout=MAXDWORD; CommTimeOut.ReadTotalTimeoutMultiplier=0; CommTimeOut.ReadTotalTimeoutConstant=0; SetCommTimeouts(CommHandle,&CommTimeOut); SetCommMask(CommHandle,EV_RXCHAR); GetCommState(CommHandle,&CommDCB); /* CBR_110 CBR_19200 CBR_300 CBR_38400 CBR_600 CBR_56000 CBR_1200 CBR_57600 CBR_2400 CBR_115200 CBR_4800 CBR_128000 CBR_9600 CBR_256000 CBR_14400 #define NOPARITY 0 #define ODDPARITY 1 #define EVENPARITY 2 #define MARKPARITY 3 #define SPACEPARITY 4 #define ONESTOPBIT 0 #define ONE5STOPBITS 1 #define TWOSTOPBITS 2 typedef struct _DCB { DWORD DCBlength; // sizeof(DCB) DWORD BaudRate; // current baud rate DWORD fBinary: 1; // binary mode, no EOF check DWORD fParity: 1; // enable parity checking DWORD fOutxCtsFlow:1; // CTS output flow control DWORD fOutxDsrFlow:1; // DSR output flow control DWORD fDtrControl:2; // DTR flow control type DWORD fDsrSensitivity:1; // DSR sensitivity DWORD fTXContinueOnXoff:1; // XOFF continues Tx DWORD fOutX: 1; // XON/XOFF out flow control DWORD fInX: 1; // XON/XOFF in flow control DWORD fErrorChar: 1; // enable error replacement DWORD fNull: 1; // enable null stripping DWORD fRtsControl:2; // RTS flow control DWORD fAbortOnError:1; // abort reads/writes on error DWORD fDummy2:17; // reserved WORD wReserved; // not currently used WORD XonLim; // transmit XON threshold WORD XoffLim; // transmit XOFF threshold BYTE ByteSize; // number of bits/byte, 4-8 BYTE Parity; // 0-4=no,odd,even,mark,space BYTE StopBits; // 0,1,2 = 1, 1.5, 2 char XonChar; // Tx and Rx XON character char XoffChar; // Tx and Rx XOFF character char ErrorChar; // error replacement character char EofChar; // end of input character char EvtChar; // received event character WORD wReserved1; // reserved; do not use } DCB; */ CommDCB.BaudRate=BaudRate; CommDCB.ByteSize=ByteSize; CommDCB.Parity=Parity; CommDCB.StopBits=StopBits; CommDCB.fDtrControl=DTR_CONTROL_ENABLE; CommDCB.fRtsControl=RTS_CONTROL_ENABLE; SetCommState(CommHandle, &CommDCB); PurgeComm(CommHandle,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); return(true); }
-
Ach so, ich vergass, obiger Code bezieht sich auf eine "normale" COM. Mit USB hab ich noch nix gemacht.
-
am leichtesten relisierst du ne USB-Verbindung über die COM und nen Konverter dazwischen. Damit lässt sich dann die USB ansprechen wie eine COM-Schnittstelle (es wird eine VIRTUELLE COM eingerichtet...)...
interessant zu diesem thema ist z.B. [url] www.ftdichip.com [/url], die integrieren so einen Umsetzer sogar in einen DB9-Stecker...
mfg
-flo-