Java-Ecke

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
JavaSwing
Java 6 BlueJ
Processing
Sitemap
Index
Links
Impressum
Mail

 

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.

ch.aplu.ftcontroller

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

ROBO LT Beginner Lab : Alle Modellprogramme als Java-Lösung

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 : 13.08.2010