Serielle Schnittstelle



  • Hallo

    Ich bräuchte eine C++ Routine für serielle Kommunikation mit RXD und TXD.
    Ich würde mich sehr feuen wenn mir jemand eine postet.
    Vielen Dank!



  • Hmm ... In der WinAPI-FAQ hats afair was. Und in der MFC-FAQ glaub auch ...



  • hFile = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, NULL, 0, OPEN_EXISTING, 0, NULL);
    ReadFile(hFile, Buffer, BytesToRead, &ReadedBytes, NULL);
    WriteFile(hFile, Buffer, BytesToWrite, &WrittenBytes, NULL);
    CloseHandle(hFile);

    Und noch ein paar für die Einstellungen 😃
    SetupComm(...)
    Get/SetCommTimeouts(...)
    Get/SetComState(...)
    EscapeCommFunction(...)
    FluschFileBuffers(...)
    ClearCommError(...)
    PurgeComm(...)

    Sollte ersmal reichen 🙄



  • Hallo

    MSComm32.ocx (sollte bei VC dabei sein - ist zumindest bei VB dabei)
    ist echt nicht schlecht (fuer MS-Verhaeltnisse)

    MfG
    Klaus



  • Zuerstmal Vielen Dank für die Ratschläge!
    Ich hab auch schon eine funktionierende serial klasse geschreiben. Nur das Empfangen von Daten funktioniert noch nicht so richtig.
    Hab das ganze in einem Timer mit 1ms laufen und trotzdem erhalte ich die Daten mit einer Verzögerung von 1-2 sekunden.
    Kennt jemand dieses Problem?
    Bitte um bladige Antwort,danke 😉



  • Hallo Alex,
    ich habe so eine Klasse mal geschrieben -
    soweit ich mich errinern kann ist die Timer-Auflösung nur 100 ms,
    ich habe die Lese-Funktion in einem Thread realisiert, das ist schnell genug (=> suche nach CreateThread())
    MFG
    TiTaN



  • Hi TITan,

    Hab jetzt den Timer auf 100 ms gestellt und hab jetzt eine Verzögerung von 5 Sekunden !!
    Ich weiß auch nicht was da los ist. Kann nur ein Programmfehler sein.
    Kannst du bitte deinen Code posten.
    Würd mich interessieren wie du das gelöst hast.
    thx 😉



  • Hallo Alex,

    bin wieder im Lande 😉
    Die Serial-Klasse ist bei mir ziemlich groß und mit anderen Sachen überladen (Modem-Anbindung...), kann das schlecht posten.
    Wie gesagt ich habe ein Thread erzeugt mit CreateThread(...)
    und in der Thread-Funktion die Empfangsfunktion aufgerufen und dann den Thread für 100 ms schlafen gelegt...
    Ich habe die Serial-Klasse ursprünlich aus irgedeinem C++ Buch übernommen und dann erweitert... Ich schaue mal nach ob ich das Buch finde...

    Mit dieser Funktion kannst du abfragen wieviele Zeichen empfangen wurden:

    int CAB_Serial::ReadDataWaiting( void )
    {
        if( !m_bOpened || m_hIDComDev == NULL ) 
            return( 0 );
    
        DWORD dwErrorFlags;
        COMSTAT ComStat;
    
        ClearCommError( m_hIDComDev, &dwErrorFlags, &ComStat );
    
        return( (int) ComStat.cbInQue );
    }
    

    und danach kannst du die Zeichen etwa so "abholen":
    [code typ=c++]
    bReadStatus = ReadFile( m_hIDComDev, buffer,dwBytesRead,&dwBytesRead, &m_OverlappedRead );
    [/cpp]
    m_hIDComDev => Handle von CreateFile()
    buffer => Array für die Zeichen
    dwBytesRead => Anzahl der ausgelesenen Zeichen (ist ein Returnwert von ReadDataWaiting())

    Sorry habe nicht viel Zeit
    Gruss
    TiTaN



  • Hallo Alex,

    das Buch heißt "Visual C++ 6 Bible" von Richard C. Leinecker, Tom Archer, Hungry Minds (September 1998) mit CD-ROM.

    Ich hätte Dir die Klasse per email geschickt, Du bist aber nicht registriert -> keine emailadresse...

    Gruss
    TiTaN



  • Hi,
    Danke für deine Hilfe.
    Bin jetzt auch wieder im Lande.
    Falls du noch einmal hier rein schaust kannst mir ja bitte die Klasse schicken an chrisxp@web.de.
    Danke 🙂



  • Hallo Alex und TiTan,

    bin auch mit der seriellen Schnittstelle beschäftigt und eigentlich funzt auch alles, aber wenn ich mein RTS von der Schnittstelle nehme um einen Fehler zu simulieren, so verschwinden bei mir je nachdem wie lange ich das RTS weglasse immer mehr zeichen bei der Übertragung....

    Kann mir einer von euch helfen. Ich weiß sonst nicht an wen ich mich noch alles wenden soll...

    Könnte ich diese Klasse auch bekommen? Vielleicht hilft sie mir auch weiter...

    DANKESCHÖN


Anmelden zum Antworten