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