Python-Ecke ALT

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
FishStep
Sitemap
Index
Links
Impressum
Mail

 

Allgemeines

Python ist eine Sprache, die von Praktikern für Praktikern entwickelt wurde. Sie läßt alldas linksliegen über das man bei Java so schön und weltanschaulich diskutieren kann. Variablen-Deklarationen : wozu?, explizite Typkonversionen warum, Klammernzählen nee : Man muß halt ein wenig aufpassen, wenn mans bequem haben will. Trotzdem gibts OO-satt, sogar mehrfach. Und weil Python sich nun mal so einfach  und kostenlos anläßt sieht man auch Möglichkeiten für den Einsatz im Informatik-Unterricht an Schulen.

Python-SymbolDiese Seite gibt einen Überblick auf die Zugriffsmöglichkeiten aus Python auf die fischertechnik Interfaces. Sie bietet keine Einführung in Python.

Dazu werden vier Alternativen angeboten :

  1. Die ActiveX.DLL FishFa30.DLL (Intelligent und Universal Interface)
    FishFa40AX.DLL (ROBO und Intelligent Interface)
  2. Der Python Modul FishFa30.py (Intelligent und Universal Interface)
    FishFa40.py (ROBO und Intelligent Interface)
  3. Der Python Modul FishFa40.py (Robo und Intelligent Interface) in einer Version,die für Python 3.1.1 upgedated wurde
  4. Der Python Modul FishFaTX.py (Robo TX Controller / Python 3.1.1)
    Zum ROBO TX Controller siehe auch die ROBO TX Seiten

Die Alternativen basieren auf der umFish30.DLL / umFish40.DLL / umFish50.DLL

Die FishFa30.DLL / FishFa40AX.DLL-Alternative ist insgesamt die komfortablere, da sie auch von sich aus für die Unterbrechbarkeit der Anwendungsprogramme sorgt. Es muß aber allerhand installiert werden.

Die FishFa30.py / FishFa40.py-Alternative erwartet außer einem installierten Python-Sytem nur noch die Installation von T.Hellers ctypes. Sie ist auch technisch interessanter, da hier der Zugriff auf umFish30.DLL /umFish40.DLL offen über die Python-Klasse FishFace geschieht.
Hier kommen noch die Klassen FishRobot zur Programmierung von Industry Robots und die
Klasse FishStep zur Programmierung von Schrittmotoren hinzu.

Elefanten-Rennen

Der Funktionsumfang der Basis-Klasse FishFace ist im Falle FishFa40AX.DLL etwas größer (z.B. RF-Funktionen).

Downloads

Außer einem installierten Python-System ab v2.2 werden weitere Komponenten benötigt. Das ist zunächst das Download-Päckchen PythonFish30.ZIP mit dem Modul FishFa30.py, einem Handbuch und einigen Beispielen. 

Im beiliegenden Handbuch wird dann die Installation der zusätzlich erforderlichen Komponenten (win32all / FishFa30.DLL bzw. ctypes / umFish30.DLL) beschrieben. Die Download-Adressen sind dort ebenfalls zu finden.

Für FishFa40.py entsprechend PythonFish40.ZIP und das Handbuch separat.

Für FishFaTX.py entsprechend PythonFish311.ZIP und die Handbücher 40 und TX separat.

Klaus Merkert für das Universal Interface

Klaus Merkert hat für das Universal Interface eine Lösung erarbeitet, die gleichermaßen unter Windows wie auch Linux läuft : www.hsg-kl.de/faecher/inf/python/ft/index.php

Programmierung

Hier ein paar kleine Beispiele (mit Version 30, für das Intelligent Interface. für 40 muß meist nur 30 durch 40 ersetzt werden, die beiliegenden Beispiele sind aktualisiert), die entweder an der "Python Shell" (von IDLE) direkt ausgeführt wurden oder über ein mit IDLE erstelltes Programm (wenns dann doch zu unübersichtlich wurde). Es wurde die Alternative  2 genutzt. Ausführliche Programmier-Beispiele finden sich im Handbuch von PythonFish30.ZIP. Bis auf die import und die Instanzierungszeile besteht zwischen den Alternativen keine gravierenden Unterschiede :

import win32com.client
ft = win32com.client.Dispatch("FishFa30.FishFace")

Bei Alternative 2 hieße es dann :

from FishFa30 import *
ft = FishFace()

In beiden Fällen ist dann ein Open und bei Ende der Experimente ein Close erforderlich :

ft.OpenInterface("COM1")

ft.CloseInterface()

Der Portname ist auf die eigenen Gegebenheiten zu ändern ("LPT", "COM1" - "COM8", "LPT1" - "LPT3")

Blinker 

Lampe an M1 blinkt im Sekundentakt :

Ein, Aus = 1, 0

while not ft.Finish():
  ft.SetMotor(1, Ein)
  ft.Pause(555)
  ft.SetMotor(1, Aus)
  ft.Pause(333)

Beenden duch ESC-Taste

WechselBlinker

Lampen an M1 und M2 blinken im Wechsel :

while not ft.Finish():
  ft.SetMotors(0x1)
  ft.Pause(444)
  ft.SetMotors(0x4)
  ft.Pause(444)

Hier werden alle M-Ausgänge gleichzeitig geschaltet. Jeweils zwei bit pro M-Ausgang. Also 00000001 für M1 Ein und 00000100 für M2 ein. Alle anderen Ausgänge sind Aus.

StatusAnzeige

Der Schaltzustand eines ausgewählten E-Eingangs (hier E3) wird angezeigt (Abbruch durch ESC-Taste):

while not ft.Finish():
  print "Status E3 : ", ft.GetInput(3)
  ft.Pause(1000)

Anzeige 1 steht für ein, Anzeige im Sekundentakt.

Der Schaltzustand aller E-Eingänge wird permanent angezeigt :

while not ft.Finish():
  print "Status der E-Eingaenge : ", hex(ft.GetInputs())
  ft.Pause(1234)

Die Anzeige erfolgt Hexa im Sekundentakt.

Analoganzeige

Der Wert von EX wird laufend angezeigt :

while not ft.Finish():
  print "Wert EX : ", ft.GetAnalog(0)
  ft.Pause(1234)

Dabei ist zu beachten, dass das Open mit ft.OpenInterface("COM1", 1) für "mit AnalogScan" erfolgen muß.
Achtung vorher mit ft.CloseInterface() schließen, wenn bereits offen.

Nutzen der FishRobot-Funktionen

Bei Verwendung der Klasse FishRobot anstelle von FishFace stehen zusätzich noch einige Robot-Methoden zur Verfügung :

from FishFa30 import *
ft = FishRobot([[3,222],[4,88]])

ft.OpenInterface("COM2")

ft.Home()

ft.MoveTo(ft.PosPrint, [23,34])
ft.MoveTo(None, [23,34])
ft.MoveTo(ft.PosPrint, [23,23])

ft.CloseInterface()

Bei der Instanzierung wird die Roboter-Konfiguration mitgeteilt Motore an M3 und M4 mit maximalem Fahrweg ab Endtaster von 222 bzw. 88 Impulsen.
Nach dem Open wird die Home-Position (die Position an den Endtastern) angefahren und der interne Positionszähler in ft.MotCntl auf 0 gesetzt.
Anschließend wird auf die Position M3 = 23 und M4 = 34 gefahren. Die laufende Position wird über PosPrint auf der Konsole ausgegeben. Dann wird nochmal die gleiche Position angefahren – um zu zeigen, daß da nichts ruckelt – und dann die Position M4 = 23, also wieder in Richtung Endtaster. Siehe auch "Anmerkungen zu den Rob-Funktionen".

Nutzen der FishStep-Funktionen

Beispiel siehe Elefanten-Runde

Der Hanoi-Roboter

Hanoi Roboter Ein größeres Beispiel findet sich auf der Hanoi-Seite : Ein interessantes Programm zur Lösung der Problems "Der Turm von Hanoi". Das Beipiel verwendet eine Klasse HanoiRobot, die von der hier beschriebenen Basisklasse FishFace (FishFa30.PY) abgeleitet ist.

Weitere Modelle

Die Modelle Alarmanlage und Garagentor des Kastens Profi E-Tec

Stand : 16.01.2010