Ansteuerung des CompulabUSB unter Python

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:

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 :

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

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