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-


Anmelden zum Antworten