| |
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.
- 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.
- ft.openInterface("COM1");
Herstellen der Verbindung zum Interface. Hier ein Intelligent
Interface an COM1.
ft.showStatus
Anzeige der aktuellen Werte auf der Konsole.
- do{ ... } while(!ft.finish(1));
Endlosschleife, Ende durch E1 = true oder ESC-Taste.
- ft.setMotor() | ft.pause() ...
Die M-Ausgänge (mit Lampe) werden der Reihe nach mit 1 Sekunde
Abstand eingeschaltet und dann alle gleichzeitig ausgeschaltet.
- Wenn die ESC-Taste gedrückt oder E1 = true wurde, wird die Schleife
beendet.
- 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 |