
Zitat von
pebisoft
erklär das einmal "Du kannst die serielle Schnittstelle doch wie eine Datei ansprechen. "
Unter Windows können manche Schnittstellen (wie z.B. die seriellen Schnittstellen ComX) wie Dateien angesprochen werden (Unter Linux müsste das auch gehen, ich weiß aber nicht wie die Pfade dort heißen).
Das Bedeutet, du kannst in einem Java-Programm ein Objekt für den Zugriff auf das Dateisystem des Rechners anlegen, wobei du allerdings keine Datei referenzierst, sonders das anzusprechende Gerät.
Der Vorteil ist, dass du keine extra Bibliotheken brauchst. Nachteilig ist wiederum, das du keinen Einfluss auf die Statusleitungen, sowie das Übertragungsprotokoll hast.
Da liefert das Betriebssystem allerdings wieder entsprechende Programme mit, die diese Aufgaben übernehmen können.
Das Programm mode.com dient dabei zum setzen aller Einstellungen, welche aus dem Javaprogramm selbst nicht vorgenommen werden können.
Beispiel-Klasse:
Code:
import java.io.*;
public class SerialIO{
private RandomAccessFile ComFile; //serielle Schnittstelle die angesprochen werden soll
public SerialIO(){ //Konstruktor
configComPort(); //initialisiert die serielle Schnittstelle
}
public void destroy(){ //Destruktor
try{
ComFile.close(); //versucht die serielle Schnittstelle zu schließen
}catch(Exception e){ e.printStackTrace(); };
}
public boolean configComPort(){
String[] cmd = {"c:\\WINDOWS\\system32\\cmd.exe /c start /min", //Konsole öffnen
"c:\\WINDOWS\\system32\\mode.com COM1:", //COM1 soll konfiguriert werden
"baud=9600",
"parity=n",
"data=8",
"stop=1"};
try{
Process p = Runtime.getRuntime().exec(cmd); // Befehlszeile ausführen
if( p.waitFor() != 0 ) { //Falls der Prozess nicht gestartet werden kann
System.out.println("Fehler bei der Ausführung: " + cmd );
return false; //Fehler
}
ComFile = new RandomAccessFile("COM1:","rws"); //COM1 öffnen
}catch(Exception e){e.printStackTrace();};
return true; //alles hat geklappt
}
public void sendByte(byte b){ //Gibt ein Datenbyte auf die serielle S. aus
byte[] bytes = new byte[1]; //ByteArray der Länge 1
bytes[0] = b; // Daten einfügen
try{ ComFile.write(bytes); // und in die Datei schreiben
} catch(Exception e){ e.printStackTrace(); };
}
public byte receiveByte(){ //Liest ein Datenbyte aus der seriellen S.
byte[] b = new byte[1]; //Daten-Puffer
try{
ComFile.readFully(b); //Lese-Status bis ein Byte ankommt
} catch(Exception e) { e.printStackTrace(); };
return b[0]; //Byte zurückgeben
}
}
Unter WindowsXP liefs bei mir einwandfrei. Auf nem Schulrechner konnte ich leider nicht auf die mode.com zugreifen(Lag vieleicht an der Rechtevergabe oder einfach an Windows2000).
Hmm... Deine Bibliothek ist aber eleganter. Ist nur blöd, das man auf jedem Rechner die .jar-Datei einbinden und die .dll-Datei mitliefern muss.
Lesezeichen