| |
Funktioniert
mein COM-Port?
Diese Frage sollte man als erstes
klären, wenn man beginnen
möchte mit der seriellen Schnittstelle unter QuickBasic zu
experimentieren. Immer wieder wird ja z.B. von Schwierigkeiten unter
Windows NT/2000/XP berichtet. Download
comtest.exe
Mit meinem kleinen Testprogramm
"comtest.exe"
lässt sich ganz einfach feststellen, ob der Zugriff auf den
oder die COM-Ports möglich ist. Alles was man dazu braucht,
ist ein Geldstück. Das Programm schaltet alle
Ausgänge ein und liest danach ständig den Zustand der
Eingänge aus. Wird ein Ein- mit einem Ausgang verbunden wird
das registriert, die Nummer (1 oder 2) des getesteten COM-Ports wird
angezeigt und auch eine akustisches Signal wird ausgegeben. Einmal
piepsen für COM1 zweimal für COM2. So weiss man auch
ob's geht, wenn man den Bildschirm beim Testen nicht mehr im Blick hat.
Bequemer ist natürlich ein Verlängerungskabel wie auf
dem Foto.
Am einfachsten kann man den Kontakt herstellen, wenn man
einfach eine
Münze zwischen die Pins der Anschlussbuchse steckt, wie
ebenfalls auf dem Bild zu sehen ist. Eventuell muss man ein bisschen
wackeln, aber in der Regel klappt es schon beim Reinstecken. Wichtig
ist nur, dass man das Programm startet und erst wenn der Test
läuft etwas an der Schnittstelle macht.
Die serielle Schnittstelle ist im Gegensatz zum LPT
kurzschlussfest, darum kann man diesen Test dort so machen. Am
Druckerport (LPT) ist das nicht möglich, dieser ist nicht
kurzschlussfest und kann dabei zerstört werden! Wird
das Programm nicht im Vollbildmodus ausgeführt, kommt es wie
üblich zu kleinen Verzögerungen. Hier noch ein
Screenshot:
Wenn
das Programm beim Versuch eines neuen
Testes
geschlossen wird oder nichts passiert, ist der Zugriff von QBasic auf
die COM Ports nicht möglich. Dies erfordert etwas aufwendigere
Massnahmen. Da unter allen Windows NT Versionen (NT3.5, 40. 2000 und
XP) die Hardware nicht direkt sondern nur über den
entsprechenden Treiber erreichbar ist kann es vorkommen, das die
Dosemulation von NT keinen Zugriff auf die Hardwareadressen des LPTs
und der COMs besitzt. Da man in QBasic auch keine DLLs verwenden kann,
die wiederum den Treiber bedienen, muss man das Problem anders angehen.
Das Programm UserPort von Tomas
Franzon ermöglicht den direkten Zugriff
aus der Dos
Box heraus auf die Schnittstellen. Auf die Funktion will ich jetzt
nicht näher eingehen, denn es gibt genügend Informationen dazu im
Internet und
dieser Artikel soll nicht die Funktionsweise und den Aufbau von Windows
Betriebssystemen erklären, sondern ist eher dafür
gedacht, ganz einfach dieses Problem des Zugriffes zu lösen.
Als erstes wird das Programm und seine entsprechenden Dateien
benötigt, diese kann man hier runterladen:
Download
UserPort.zip
Nun wird das Ganze entpackt und es finden
sich
folgende Dateien:
UserPort.exe (Und die Quellen im Ordner UserPort_EXE)
->
Konfiguration
UserPort.sys (Und die Quellen im Ordner UserPort_SYS) ->
"Treiber"
UserPort.pdf -> Dokumentation
Als erstes muss man die Datei UserPort.sys in folgendes Verzeichnis
kopieren: c:/windows/system32/drivers
(falls euer
Windows auf c:/ installiert ist)
Nun die Datei UserPort.exe starten, nun erscheint folgendes:
Als
erstes markiert man jetzt einen Eintrag
nach
dem Anderen und klickt auf "Remove", bis die beiden Felder leer sind,
dann bekommt man dies:
Nun
kann man im linken Feld die
entsprechenden
Adressbereiche der Hardware eintragen, die man ansprechen will. Die
passenden Adressen bekommt man über den Gerätemanager
von Windows: Rechtsklick
auf "Arbeitsplatz"
-> Eigenschaften -> Hardware ->
Geräte-Manager
Nun die Zeile "Anschlüsse (COM und LPT)" erweitern und ein
Doppelklick auf den entsprechenden Port öffnet das
dazugehörige Eigenschaftsfenster. Dort wählt man
"Ressourcen" aus:
Den
unter "E/A-Bereich" angegebenen Wert
trägt man dann in das UserPort Programm ein. Wenn man mehrer
Ports nutzen will führt man diese Prozedur entspr.
öfters durch.
Hat man alles eingetragen kann man "Update" anklicken (dies
aktualisiert die entspr. Werte in der UserPort.sys) und danach den
"Treiber" starten, indem man auf "Start" klickt. "Exit" beendet nun das
Programm. Nach einem Neustart ist der "Treiber" dann geladen (manchmal
geht es auch ohne Neustart, aber sicher ist sicher). Nun sollte der
Hardwarezugriff aus QBasic heraus unter Windows funktionieren, dies
lässt sich ja dann z.B. mit dem Programm "Comtest.exe" testen.
Bei Windows2000 kann es in seltenen Fällen vorkommen, das man
nach jedem Neustart die UserPort.exe öffnen und "Update"
gefolgt von "Start" klicken muss.
Beim LPT funktionierte es bei mir auf Anhieb, ich benötigte es
auch nur dort, da meine COM Ports bis jetzt unter Windows XP immer ohne
Probleme liefen.
Falls es nicht funktionieren sollte kann es an mehreren Sachen liegen.
Diese Lösungsansätze sind aber rein Spekulativ, da
bei mir, wie schon erwähnt, immer alles astrein lief. Zum
Beispiel könnte es sein, das man Administratorrechte
benötigt um das Programm UserPort.exe zu benutzen, bzw. viell.
muss man Administratorrechte besitzen um eine Anwendung, die die
UserPort.sys benötigt erfolgreich zu starten. Auch wurde schon
berichtet, dass es unter WindowsXP Home gar nicht funktioniert, dies
sind aber alles wage vermutungen, die ich aus eigener Erfahrung nicht
bestätigen kann.
Will man das Programm wieder deinstallieren löscht man einfach
den Userport Ordner und die UserPort.sys in c:/windows/system32/drivers
und entfernt den ensprechenden Eintrag aus der Windows Registry:
Start -> Ausführen
Dort dann regedit eingeben und Enter
drücken. Nun
öffnet sich der Registrierungseditor. Dort klickt man nun
Bearbeiten -> Suchen (oder Strg+F), gibt dort UserPort ein und
drückt erneut Enter. Der dann gefunden Ordner "UserPort" wird
dann einfach gelöscht. Somit ist der PC nach einem Neustart
wieder in dem gleichen Zusatnd, wie er zuvor war.
Erfahrungsberichte,Erfolge sowie Misserfolge können im Forum
geäussert werden, denn es scheint sehr unterschiedliche
Probleme auf unterschiedlichen Systemen mit unterschiedlichen
Windowsversionen zu geben. Vielleicht lassen sich so einige dieser
Probleme lösen. Eine Alternative zu UserPort ist auch GiveIO |
|