Java-Ecke

ftComputing : Programme für die fischertechnik-Interfaces und -konstruktionskästen
  
ftComputing.de
Home
Back
JavaSwing
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 die javaspezifische Wrapper-DLL javaFish.DLL, der eigentliche Interface-Zugriff geschieht über die umFish20.DLL. Um zuverlässig alle Veränderungen der E-Eingänge mitzubekommen pollt umFish20 (über den MultiMediaTimer) mit hoher Priorität in ca. 10 msec Abständen die E-Eingänge, macht dabei gleichzeitig ein Refresh der M-Ausgänge und liest bei Bedarf auch die A-Eingänge ein. Die Zustände werden in einem internen Kontrollblock gespeichert (er kann bei der Instanzierung festgelegt werden). Zusätzlich werden die Veränderungen (Ein/Ausschalten) der E-Eingänge gezählt und in speziellen Counterfeldern geführt. Diese Counter können zur Positionsbestimmung von Modellen herangezogen werden (Schlagwort : Impulsrädchen auf der Antriebswelle). 

Die erforderlichen Sources und Objekts gibt es vorerst zweimal : 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.

sind in zu finden, oder, wenn man ein komplettes Setup-Programm lieber hat in . Hier die Eigenschaften und Methoden des package ftcomputing.javaFish :

JavaFish(ftInstanz) Konstruktor, Angabe des (internen)Interface (0-3) Kontrollblocks, optional, nur erforderlichen bei mehreren Instanzen
setAnalogScan true, die Analogeingänge EX (0) und EY (1) werden  gescannt (default = false).
setSlave true, am Intelligenten Interface ist ein Extensionmodul angeschlossen (default = false).
setPollInterval  Zeit (msec) in der das Interface abgefragt wird
setLPTAnalog  paralleles Interface, Faktor für die A-Eingänge
setLPTDelay  paralleles Interface, Faktor für die E-Eingänge
openInterface  Herstellen der Verbindung zum Interface 
closeInterface  Schließen der Verbindung zum Interface
getVersion  Version der eingesetzten javaFish.DLL
showStatus  KonsolAusgabe der akt. Daten
setMotor  Schalten der M-Ausgänge M1-M4(M8), (1-4(8)) 
Linkslauf = 1, Rechtlauf = 2, Ein = 1, Aus = 0
clearMotors  Ausschalten aller M-Ausgänge
setLamp  Schalten der M-Ausgänge in "Lampenschaltung" 
(ein Bein an Erde) 1-8(16), true/false
getAnalog  Auslesen eines A-Einganges EX(0) /EY(1)
getInput  Auslesen eines E-Einganges E1-E8(E16) 1-8(16), true/false
getOutputs  Auslesen aller M-Ausgänge M1-M4(M8), M1 = niedrigstes bit
setOutputs  Setzen aller M-Ausgänge M1-M4(M8), M1 = niedrigstes bit
getInputs  Auslesen aller E-Eingänge E1-E8(E16), E1 = niedrigstes bit
clearCounter Löschen aller Counter ( = 0 )
setCounter  Setzen eines Counters auf einen Anfangswert
Beginn der Zählung mit 1 (also Counter 1 = E1), kann in JavaFish.java auf Beginn 0 geändert werden : Konstante 12 statt 11)
getCounter Auslesen eines aktuellen Counterwertes
siehe auch setCounter
pause  Anhalten des Programmablaufs um n mSekunden.
finish  Feststellen Ende-Wunsch (ESC-Taste oder E-Eingang)

Kleines Demoprogramm

public class FishTest{
public static void main(String[] args){
boolean res = false; int R;
ftcomputing.JavaFish ft = new ftcomputing.JavaFish(3);

ft.setAnalogScan(true);
System.out.println("Versionsnr : " + ft.getVersion());
R = ft.openInterface("COM1");
System.out.println("OpenStatus : " + R);
ft.showStatus();

do{
    ft.setMotor(1,1);
    ft.pause(1000);
    ft.setMotor(2,1);
    ft.pause(1000);
    ft.setMotor(3,1);
    ft.pause(1000);
    ft.clearMotors();
    ft.pause(1000);
} while(!ft.finish(1));
ft.clearMotors();

System.out.println("Analog EX : " + ft.getAnalog(0));
ft.closeInterface();
System.out.println("Programm beendet");
}}

Das Testprogramm ist eine Konsolanwendung.

  1. ftcomputing.JavaFish ft = new ftcomputing.JavaFish();
    Anlegen einer neuen Instanz von javaFish
    ft.setAnalogScan(true);
    auch die A-Eingäng (EX, EY) sollen regelmäßig eingelesen werden.
  2. ft.openInterface("COM1");
    Herstellen der Verbindung zum Interface. Hier ein Intelligent Interface an COM1.
    ft.showStatus
    Anzeige der aktuellen Werte auf der Konsole.
  3. do{ ... } while(!ft.finish(1));
    Endlosschleife, Ende durch E1 = true oder ESC-Taste.
  4. ft.setMotor() | ft.pause() ...
    Die M-Ausgänge (mit Lampe) werden der Reihe nach mit 1 Sekunde Abstand eingeschaltet und dann alle gleichzeitig ausgeschaltet.
  5. Wenn die ESC-Taste gedrückt oder E1 = true wurde, wird die Schleife beendet.
  6. ft.closeInterface
    Die Verbindung zum Interface wird beendet.

HINWEIS : Das vorgegebene Packaging beibehalten, sonst spielt die javaFish.DLL nicht mit.

Weiteres zu Java und fischertechnik

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.

Stand : 20.08.2003