von Victor Klein
Moderne Rechner verfügen immer häufiger nur noch über USB-Schnittstellen, die früher stets verfügbare serielle Schnittstelle entfällt immer häufiger. Das CompulabUSB eröffnet die Möglichkeit, Steuerungsaufgaben auch unter Einsatz mehrerer Interfaces zu lösen. Eine für die Schule immer populärere Sprache ist Python. Python unterliegt der GPL-Lizenz und ist damit kostenfrei für die Schule und Schülerinnen und Schüler verfügbar.
Das CompulabUSB der Firma AK-Modulbus lässt sich unter Python 2.4 ansteuern.
Dazu sind einige Vorbereitungen mit Admin-Rechten notwendig.
Voraussetzungen:
Betriebssystem Windows 2000 oder XP
Python ab Version 2.4:
a) Installation der DLL CLUSB4.dll in das Windows-Verzeichnis (als Admin)
b) Installation des Python-Moduls ctypes (ctypes-1.0.1.win32-py2.4_Installer)
(als Admin)
c) Installation des Treibers CompuLAB Interface USB.sys aus dem Verzeichnis
drvclusb1201 (als Admin)
d) Verfügbarkeit des Moduls CompulabUSB4.py im Arbeitsverzeichnis
oder Suchpfad (auch mit User-Rechten nutzbar)
Die vier Installationsdateien stehen in dem Archiv CompulabUSB_Python.zip zur Verfügung.
Wird ein CompulabUSB zum ersten Mal mit einem USB-Port verbunden, so fordert das Betriebssystem den zugehörigen Treiber an. Der Treiber wird für diesen Port installiert, das Zwischenschalten eines Hubs oder die Wahl eines anderen Ports erfordert eine erneute Installation mit Admin-Rechten. Jedoch ist diese Installation nur einmal notwendig.
Das Python-Modul CompulabUSB4.py definiert eine Klasse CompulabUSB4. Die definierten Zugriffsoperation sind :
a) INIT(Nr_des_CompulabUSB) # mit Compulab(Nr) verbinden (beginnt mit
0)
b) DOUT(Wert) # digitalen Ausgang setzen
c) DIN() # digitale Eingänge d0-d7 lesen
d) AIN(Kanalnummer) # Analogen Kanal lesen
Man erzeugt zunächst ein Compulab-Objekt und verbindet es durch INIT mit dem angeschlossenen Interface. Die Nummer ist abhängig von der Reihenfolge, in der mehrere CompulabUSB an den USB-Hub angesteckt werden. Das Betriebssystem weist dem ersten CompulabUSB die Nummer 0 zu, dem zweiten die Nummer 1 usw. Wird der Rechner mit mehreren angeschlossenen CompulabUSB gestartet, so gibt es keine Möglichkeit, eine feste Zuordnung zu erzeugen, da Windows die Nummern beginnend mit 0 willkürlich zuweist.
Beispiel zum Anschluss eines CompulabUSB
from CompulabUSB4 import * Cl_0 = CompulabUSB4() # Interfaceobjekt 0 schaffen Cl_0.INIT(0) # und mit 0-tem CompulabUSB verbinden Cl_0.DOUT(85) # digitalen Ausgang auf 85 setzen
Beispiel zum Anschluss mehrerer CompulabUSB Werden mehrere CompulabUSB über einen USB-Hub angeschlossen, so wird für jedes Interface ein Objekt erzeugt und mit INIT zugeordnet.
from CompulabUSB4 import * Cl_0 = CompulabUSB4() # Interfaceobjekt 0 schaffen Cl_0.INIT(0) # und mit 0-tem CompulabUSB verbinden Cl_0.DOUT(85) # digitalen Ausgang von Interface 0 auf 85 setzen Cl_1 = CompulabUSB4() # Interfaceobjekt 1 schaffen Cl_1.INIT(1) # und mit 1-tem CompulabUSB verbinden Cl_0.DOUT(255) # digitalen Ausgang von Interface 1 auf 255 setzen
Auslesen der analogen Eingänge
Die analogen Eingänge 1 und 2 entsprechen den Anschlüssen A und B auf dem CompulabUSB. Die Auflösung ist 10 Bit, also 0-1023.
Beispiel:
from CompulabUSB4 import * Cl_0 = CompulabUSB4() # Interfaceobjekt 0 schaffen Cl_0.INIT(0) # und mit 0-tem Compulab verbinden wert_A = Cl_0.AIN(1) print wert_A wert_B = Cl_0.AIN(2) print wert_B
Zusätzlich kann man die analogen Kanäle 3 - 12 auslesen.
Kanal 3: Anschluss C auf dem Sammelstecker
Kanal 4: fester Wert der halben Referenzspannung ( = 512)
Kanal 5: digitaler Eingang d0
Kanal 6: digitaler Eingang d1
...
Kanal 12: digitaler Eingang d7
Sind weitere CompulabUSB angeschlossen, so verfährt man wie oben.
Testdateien mit Python:
Test1CLUSB4.py
Durchlaufende Ausgabe von 0- 255 mit DOUT und Auslesen aller analogen Kanäle
aus dem 0-ten CompulabUSB .
Test2CLUSB4.py
Lauflicht an zwei angeschlossenen CompulabUSB
Kreuzungsampel_CLUSB4.py
Testansteuerung des Kreuzungsampelmodells von AK-Modulbus an einem CompulabUSB
Fuss_Ampel_1_CLUSB4.py
Testansteuerung des Fussgängerampelmodells von AK-Modulbus an einem
CompulabUSB
Fuss_u_Kreuzung_1_CLUSB4.py
Testansteuerung der Kreuzungsampel und der Fussgängerampel an zwei
angeschlossen CompulabUSB. Dabei werden die Ampeln nacheinander angesteuert.
Parallele Ansteuerung mehrerer CompulabUSB
Die parallele Ansteuerung von mehreren Modellen erfordert die Verwendung von Prozessen (Threads). Python-Skripte mit Prozessen dürfen nicht aus der IDLE heraus gestartet werden, sondern werden direkt mit dem Interpreter gestartet (Rechtsklick auf die Datei, Öffnen). Das sichtbare DOS-Fenster verwaltet die Testausgaben.
Am Beispiel der Fussgängerampel werden die wesentlichen Änderungen zum bisherigen Vorgehen erläutert. Das Beispiel befindet sich in der Datei Fuss_Ampel_2_CLUSB4.py. Die Modellklasse Fussgaengerampel muss von der Klasse Thread abgeleitet werden. Es sind drei Notwendigkeiten zu beachten
1. Die Initalisierung des Threads erfolgt in __init__ mit Thread.__init__(self)
als erste Anweisung
2. Ein Thread benötigt eine Methode run. Dazu wird einfach die Methode
betrieb umbenannt.
3. Der Thread wird mit f = Fussgaengerampel() erzeugt und mit f.start()
gestartet.
Die Datei Fuss_Ampel_2_CLUSB4.py wird nun direkt mit dem Interpreter gestartet. Genauere Information enthält die Python-Dokumentation 7.5.6 Thread Objects Die tatsächliche parallele Ansteuerung zweier Ampelmodelle zeigt Fuss_u_Kreuzung_2_CLUSB4.py. Beide Modellklassen werden von Thread abgeleitet und wie oben beschrieben angepasst und gestartet. Die beiden Modelle arbeiten jetzt völlig unabhängig voneinander.
Eine gemeinsame Ansteuerung beider Modelle benötigt man bei der "grünen Welle". Eine Anforderung an die Fußgängerampel muss solange warten, bis die "Hauptstrasse" gesperrt ist. Dann kann die Anforderung bearbeitet werden, sowie anschließend die "Hauptstrasse" wieder freigegeben werden. Beispiel: Kreuzungsampel_mit Anforderung_CLUSB4.py
Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus