Seriellen Port testen



  • Hallo zusammen, ich will ein kleines Programm schreiben um die serielle Schnittstelle, bzw. ein daran angeschlossenen Fusstaster zu testen. Dieser Fusstaster tut eigentlich nichts weiter, ausser die beiden Pole 7 und 8 zu brücken. Alles andere ist unbelegt.

    Jetzt ist mein Ansatz, Daten in einer Schleife zu dem Port zu schicken und so lange zu wiederholen, bis Daten zurück kommen, dann ok-Meldung und Ende, das scheint aber nicht zu klappen. Hat vielleicht jemand einen Tipp oder kann zu einem anderen Lösungsansatz raten. Ich stecke programmiertechnisch noch in den Kinderschuhen 🙂



  • die beiden Pole 7 und 8 zu brücken

    Es sieht so aus, Du meinst sicherlich Nummern in der 9poligen Ausführung, denn die 25polige hat andere Polbelegungen!

    Pins 7 (RTS) und 8 (CTS) sind gut gewählt, unter der Voraussetzung, daß keine anderen Geräte an den seriellen Ports hängen.

    Als Schema schlage ich vor:

    handle_comport = CreateFile( ... );  //Öffnen, COM-Port Namen nach Schema "\\.\COM1" verwenden!
    SetCommState( ... ); //Einstellungen definieren.
    EscapeCommFunction( handle_comport, SETRTS );  //RTS-Signal in definierten Zustand bringen.
    

    Bei Bedarf (z.B. durch ein Timer-Ereignis alle 500ms) pollst Du den Portpin CTS ab.

    GetCommModemStatus( handle_comport, &uint32_modemstatus )
    if ( ( uint32_modemstatus & MS_CTS_ON ) != 0 )     //Nur die Information vom CTS-Signal interessiert uns.
    {
      Fuß-Taste betätigt.
    }
    else
    {
      Fuß-Taste nicht betätigt.
    }
    

    Und zum Schluß (beim Applikation beenden oder besser wenn Fußtaster nicht mehr abgefragt wird):

    CloseHandle( handle_comport );
    

    Auch wenn Du keine Zeichen überträgst, die Einstellungen mit SetCommState() sind grundsätzlich durchzuführen. Dein Programm weiß ja nie, was Dein Vorgänger alles mit der seriellen Schnittstelle angestellt hat 😉

    Aufgrund der Einfachheit (jedenfalls aus der Sicht der seriellen Programmierung!) kann man sich extra Events-Definition sparan, das Pollen alle 500ms ist kein Beinbruch für heutige Systeme. Auf keinen Fall in einer simplen Endlos-Schleife, da sonst die Prozessor-Auslastung auf 100% schnellen würde!

    Gruß
    Martin



  • Prima, das sieht gut aus, wird gleich ausprobiert und besten Dank. Das mit der Prozessorlast unter einer Endlosschleife war mir gar nicht bewußt, leuchtet aber im nach hinein ein 😮



  • ... doppelt ... sorry, kann nicht löschen


Anmelden zum Antworten