|
Die Klasse JavaFish.java
Die Klasse
JavaFish ermöglicht über eine größere Anzahl von Methoden und Eigenschaften
den Zugriff auf die fischertechnik Interfaces. JavaFish nutzt eine javaspezifische Wrapper-DLL
javaFish.DLL / javaFish40.DLL, der eigentliche Interface-Zugriff
geschieht über die umFish20.DLL(Universal/Intelligent Interface) bzw.
umFish40.DLL (ROBO/Intelligent Interface).
Unterstützt werden :
- mit ftcomputing.robo.* die Interfaces der ROBO-Serie
(einschl. RF DataLink (Route Through) und das
Intelligent Interface durch die Klasse JavaFish und - komfortabler - durch
die Klasse FishFace (nur ROBO). Beide Klassen basieren auf javaFish40.DLL / umFish40.DLL
- mit ftcomputing.JavaFish das Intelligent Interface und das Universal
Interface (LPT) auf Basis von javaFish.DLL / umFish20.DLL
ftcomputing.robo.jar
Version 1 : Für Schüler und Studenten, die zum Java-Programmieren
verdonnert wurden
Die erforderlichen Sources. Libs und Beispielprogramme sind in Workspace34.zip
enthalten. Die Klasse JavaFish wurde konsequent auf das Durchreichen der
umFish40.DLL-Funktionen ausgelegt und ist primär als Basis für die Entwicklung
eigener Klassen gedacht. Dazu enthält JavaFish noch die static Methoden escape,
getTickCount und sleep des Win32-API. Die Klasse FishFace ist für den Einsatz
in normalen Java-Programmen gedacht. Sie kann aber auch als Anregung für eine
eigene Klasse dienen. Die Dokumentation dazu in Eclipse34Fish.PDF
(auch in Workspace34.ZIP enthalten. Benötigt man noch mehr Dokumentation, kann
man auch die von C# 2005 nutzten.
Zusätzlich noch Hinweise zum Einsatz der
FishFace-Methoden unter der BlueJ-IDE
Version 2 : Für echte Java-Fans - mit normgerechter Java-(HTML)-Doku
Michael Fennel hat sich der Doku der Source von
Version 1 angenommen und mit FT_Java ein
wunderschönes Päckchen geschnürt. Enthalten sind JAR, Java-Source, Java-Doku,
benötigte DLLs (aber nicht der ROBO USB-Treiber) und Beispiele sowie weitere
Doku. Ein echter Programmierer bleibt nicht beim dokumentieren, so sind auch
noch einige Erweiterungen in die Sources eingeflossen. Außerdem ein Hinweis zur
Nutzung auf 64bit-Systemen.
Ein Klassenbibliothek für das ROBO Interface. Hier wird als Basis die Klasse
FtController - die ihrerseits auf der umFish40.DLL aufsetzt - angeboten. Auf
FtController setzen dann die Klassen für die Ein- und Ausgänge des Interfaces
auf. Sie werden meist in zweifacher Ausführung angeboten : Methoden orientiert
und Ereignis orientiert. Z.B. DigitalIn und DigitalEvent für den Zugriff auf
die I-Eingänge des Interfaces. Hier wird ein stark objektorientiertes Konzept
verwendet wie es auch schon in der C# Assembly FishDevices.DLL
zu finden ist.
Konzipiert und erstellt wurde ch.aplus.ftcontroller von Aegidius Plüss.
Näheres und Downloads über www.aplu.ch/fischertechnik.
ftcomputing.JavaFish
Die
erforderlichen Sources und Objekts gibt es als ZIP-File javaFish.ZIP
in der von Herrn Matthias Taulien um die Standard JavaDoc HTML-Dokumentation ergänzten
Form und als Bestandteil von umFish20Setup.EXE.
Vorteil ZIP normgerechte Doku, Installation nach Gusto, Vorteil EXE : einfachere
Installation, InterfacePanel (Testtool für das Interface) enthalten.
Übersicht der JavaFish Methoden (Variante für die umFish40.DLL)
jrOpenInterfaceUSB
jrOpenInterfaceUSBdis
jrOpenInterfaceCOM |
Verbindung zum ROBO Interface an USB ggf.
über das RF Datalink
Verbindung zum ROBO Interface an USB, ggf. via Datalink, DistanceMode
einstellbar
Verbindung zum Interface an COM (ROBO bzw. Intelligent) |
| jrCloseInterface |
Verbindung Interface schließen |
| jrGetInput |
Auslesen des Zustandes des angegebenen
I(E)-Einganges |
| jrGetInputs |
Auslesen des Zustandes aller
I(E)-Eingänge, ggf. auch von angeschl. Extensions |
| jrGetAnalog |
Auslesen des Analogwertes des angegebenen
A-Einganges (AX / EX, AY / EY ....) |
| jrGetIRKey |
Auslesen des Zustandes des angegebenen
IR-Keys des IR-Senders |
| jrGetVoltage |
Auslesen des Spannungswertes des
angegebenen A-Einganges (A1, A2) |
jrSetMotor
jrSetMotorEx |
Setzen eines M-Ausganges Links/Rechts/Aus,
FullSpeed
Setzen eines M-Ausganges mit Angabe der Geschwindigkeitsstufe |
jrGetMotors
jrSetMotors
jrSetMotorsEx
jrGetModeStatus
jrSetModeStatus |
Einschaltstatus aller M-Ausgänge (auch
der evtl. angeschlossenen Extensions)
Schalten aller M-Ausgänge(einschl. Extensions) FullSpeed
Schalten aller M-Ausgänge mit Angabe der jeweiligen Geschwindigkeitsstufe
Auslesen des Modestatus (Normal, RobModus) aller M-Ausgänge
Setzen des Modestatus(Normal, RobModus) aller M-Ausgänge |
jrSetLamp
jrSetLampEx |
Setzen eines O-Ausganges
Setzen eines O-Ausganges mit Angabe der Intensität |
jrRobMotor
jrRobMotors |
Starten eines M-Ausganges im RobMode (mit
Impulszählung)
Starten aller M-Ausgänge : MotorStatus, SpeedStatus, ModeStatus |
jrGetCounter
jrSetCounter
jrClearCounters |
Auslesen eines ImpulsCounter-Standes
Setzen eines ImpulsCounters
Löschen aller ImpulsCounter |
| jrGetDistanceValue |
Auslesen des aktuellen Distanzwertes (in
cm) des angegebenen D-Einganges (D1, D2) |
jrGetActDeviceType
jrGetActDeviceSerialNr
jrGetActDeviceFirm..Nr |
Auslesen des aktiven DeviceTyps
Auslesen der Seriennummer des aktiven Devices
Auslesen der FirmwareNummer des aktiven Devices |
escape
getTickCount
sleep |
Systemfunktion ESC-Taste
Systemfunktion Timer-Ticks
Systemfunktion Parken des aktuellen Threads um eine angebbare Zeit (mSec) |
Kleines Demoprogramm
Lampen an M1 - M3 werden wechselnd geschaltet (Ampel). Start über Taster an
I1.
import ftcomputing.robo.*;
public class Test40{
public static void main(String[] args){
Test40 test401 = new Test40();
JavaFish ft = new JavaFish();
System.out.println("--- Gestartet ---");
int iHandle;
iHandle = ft.jrOpenInterfaceUSB(0, 0); // --- Bei Version 2 schon mit dem
Konstruktor
do {
ft.jrSetMotor(iHandle, 1, 1);
JavaFish.sleep(1000);
ft.jrSetMotor(iHandle, 2, 1);
JavaFish.sleep(1000);
ft.jrSetMotor(iHandle, 3, 1);
JavaFish.sleep(1000);
ft.jrClearMotors(iHandle);
JavaFish.sleep(1000);
} while(JavaFish.escape() == 0);
ft.jrClearMotors(iHandle);
ft.jrCloseInterface(iHandle);
System.out.println("Programm beendet");
}}
Das Testprogramm ist eine Konsolanwendung.
Weiteres zu Java und fischertechnik
education Line von Firma Knobloch mit dem package
eduLine.jar (Klasse CrossRoads) und Beispielen in Form von BlueJ-Projekten.
Da sind die Vorlesungsskripte von Axel T. Schreiner von der Universität
Osnabrück zum Thema "Roboter programmieren" unter anderem mit Java
Quellen für den Betrieb der fischertechnik Interfaces sowie kleinen Beispielen
: Vorlesungen
UNI Osnabrück
Und hier ein kleines Beispiel zu ftcomputing.JavaFish und Swing : ftSwing
Für die Stanzmaschine 51 663 gibt es auch eine
JavaSwing-Lösung auf Basis des JBuilders5.
Workspace34.zip (s.o.) enthält auch ein Betriebsprogramm für das
ABS-Funktionsmodell von ABS.
Ein "auswärtiges" Plotter-Projekt bei A.
Schatz und A. Gatterthum
Zwei weitere bei
Marcus Schulz
und Sourceforge
zwei
Stand : 09.03.2010 |