Benutzer-Werkzeuge

Webseiten-Werkzeuge


virtuelles_java-teleskop

Dies ist eine alte Version des Dokuments!


virtelles Java-Teleskop

Übersicht

Die grundsätzliche Arbeitsweise zwischen Linux und dem Teleskop (Steuerung) kann man auch ohne Elektronik (& Teleskop) studieren. Die drei großen Clients (KStart, Skychart und Stellarium) können mit der Indi-Schnittstelle kommunizieren und virtuelle Teleskopmontierungen einbinden. Diese Teleskopsimulatoren sind technisch gesehen INDI-C-Treiber. Ich erzeuge hier z.B. mit Java eine virtuelle serielle Schnittstelle und benutze "täusche" eine rudimentäre LX200 Montierung vor, die mit Stellarium verwendet werden kann. == Software == <WRAP center round info 95%> Um mit Java auf die serielle Schnittstelle zugreifen zu können, verwenden wir die jSSC (Java Simple Serial Connector) API. Sie besteht aus nur einer jar-Datei und wird auch von der Arduino-IDE selbst verwendet. In Eclipse wird sie über Eigenschaften (Java Build Path - Add External JAR's...) dem Projekt hinzugefügt. https://code.google.com/archive/p/java-simple-serial-connector/ oder {{ :serial.zip

socat - universelles Linux Netwerk Tool

==== Installation und Inbetriebnahme ==== - Eclipseprojekt erzeugen und die Datei (unten) SimulatorTeleskop einfügen - jssc-2.0.0.jar als Externe Library dem Projekt hinzufügen - Projekt mit Eclipse übersetzen (kann nicht fehlerfrei gestartet werden, da die Schnittstelle „/dev/ttyUSB60“ nicht vorhanden ist) - Virtuelle serielle Schnittstelle erzeugen - Rechte setzen - Testen == Details == Die folgenden beiden befehle erfordern Rootrechte. Außerdem müssen auf diese Weise angelegte Schnittstellen muss häufig neu eingerichtet werden. Nicht vergessen, dieses Projekt soll zum eigenen Experimentieren anregen und lediglich die grundlegende Kommunikation aufzeigen. Die virtuelle Schnittstelle wird mit dem folgenden Befehl gesetzt

socat -d -d PTY,link=/dev/ttyUSB60 PTY,link=/dev/ttyUSB61

Anschließend werden zum Testen alle Rechte vergeben

# chmod 777 /dev/ttyUSB6*

Überprüfen Sie (Konsole ls-Befehl) ob alles richtig gemacht wurde 8-) == Test 1: Konsole == Ein erste Test erfolgt mit einer User-Konsole, indem folgender Befehlt an das Gerät gesendet wird, zuvor muss das Programm (z.B. über Eclipse gestartet werden).

echo ":GD#" > /dev/ttyUSB61

Auf der Konsole (Eclipse) sollten jetzt die Anzahl der gelesenen Bytes angezeigt werden. Damit funktioniert die Kommunikation über die virtuelle serielle Schnittstelle. == Test 2: Stellarium == Der zweite Test ist spannender, da wir mit Stellarium kommunizieren. lx200 Teleskop einrichten mit /dev/ttyUSB61 als Device

==== Quellcode Projekt A ====

package test;
 
import com.fazecast.jSerialComm.SerialPort;
 
public class Test01 {
 
	public static void main(String[] args) {
		SerialPort comPort = SerialPort.getCommPorts()[2];
		comPort.openPort();
		comPort.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 100, 0);
		try {
			while (true) {
				byte[] readBuffer = new byte[1024];
				int numRead = comPort.readBytes(readBuffer, readBuffer.length);
 
				if (numRead > 0) {
					plot(numRead, readBuffer);
 
					if(getRADEC(numRead,readBuffer)){
						System.out.println("received radec messgage");
						writeRADEC(comPort);
					}
					if (isGetRA(numRead, readBuffer)) {
						System.out.println("received ra messgage");
						writeRa(comPort);
					}
					if (isGetDec(numRead, readBuffer)) {
						System.out.println("received dec messgage");
						writeDec(comPort);
					}
					//
				}
				Thread.sleep(100);
 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		comPort.closePort();
 
	}
 
	static void plot(int numRead, byte[] readBuffer) {
		System.out.println("Read " + numRead + " bytes.");
 
		for (int i = 0; i < numRead; i++) {
			char c = (char) readBuffer[i];
			System.out.print(c);
		}
		System.out.println("");
	}
	static boolean getRADEC(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 1)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == 'e' ) {
			return true;
		}
 
		return false;
	}
 
	static void writeRADEC(SerialPort p) {
 
		String str = "34AB0500,12CE0500#";
		byte[] buffer = new byte[18];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 18; i++)
			buffer[i] = byte_str[i];
 
//		buffer[9] = 0x0D;
//		buffer[10] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
 
 
 
 
 
 
 
	static boolean isGetRA(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 4)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == '#' && c[1] == ':' && c[2] == 'G' && c[3] == 'R' && c[4] == '#') {
			return true;
		}
 
		return false;
	}
 
	static boolean isGetDec(int num, byte[] readBuffer) {
		char c[] = new char[num];
		if (readBuffer.length < 4)
			return false;
 
		for (int i = 0; i < num; i++) {
			c[i] = (char) readBuffer[i];
 
		}
 
		if (c[0] == '#' && c[1] == ':' && c[2] == 'G' && c[3] == 'D' && c[4] == '#') {
			return true;
		}
 
		return false;
	}
 
	static void writeRa(SerialPort p) {
 
		String str = "14:15:00#";
		byte[] buffer = new byte[9];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 9; i++)
			buffer[i] = byte_str[i];
 
//		buffer[9] = 0x0D;
//		buffer[10] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
	static void writeDec(SerialPort p) {
		String str = "+19*10#";
		//"%c%02d%c%02d:%02d#"
		byte[] buffer = new byte[7];
		byte[] byte_str = str.getBytes();
		for (int i = 0; i < 7; i++)
			buffer[i] = byte_str[i];
//
//		buffer[7] = 0x0D;
//		buffer[8] = 0x0A;
 
		p.writeBytes(buffer, (long) buffer.length);
	}
 
}
virtuelles_java-teleskop.1561381043.txt.gz · Zuletzt geändert: 2020/11/22 16:53 (Externe Bearbeitung)