Benutzer-Werkzeuge

Webseiten-Werkzeuge


virtuelles_java-teleskop

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
virtuelles_java-teleskop [2019/06/27 06:02] torsten.roehlvirtuelles_java-teleskop [2020/11/22 16:19] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 72: Zeile 72:
  
  
-  +===== Quellcode Projekt A =====
  
-== Quellcode Projekt A ==+Das Protokoll kann hier eingesehen werden {{ :telescopeprotocol_lx200.pdf | LX200 Seriell-Protokoll}}
  
 +Das Javaprogramm implementiert nur wenige Kommandos des Protokolls. Nachdem Stellarium sich mit dem "Teleskop" (Javaprogramm) verbunden hat, sendet es permanent Anfragen um die Rektaszension //(#:GR#)// und die Deklination //(#:GE#)// des Telekops zu erhalten.
 +
 +Wenn mit Stellarium geschwenkt werden soll, d.h. ein bestimmtes Objekt angefahren werden soll, werden drei Kommandos geschickt. Die ersten beiden Kommandos übermitteln die Zielkoordinaten, während das dritte Kommando //(:MS#)// eine Bestätigung erwartet um das Teleskop zu schwenken. Diese Befehle sind im {{ :telescopeprotocol_lx200.pdf | LX200 Seriell-Protokoll}} aufgelistet. Damit wir bei Stellarium eine animierte Bewegung sehen, wurde die Methode //simulateMove()// hinzugefügt, die lediglich die RA-Achse in zehn Schritten von den aktuellen Koordinaten //currentRA// zu den Zielkoordinaten //targetRA// bewegt.
 <code java> <code java>
  
Zeile 98: Zeile 101:
  
  static String dev = "/dev/ttyUSB60";  static String dev = "/dev/ttyUSB60";
 +
 + public enum Protocol // some serial lx200 commands
 + {
 + CMD_GR, CMD_GD, CMD_QS, CMD_SD, CMD_MS, CMD_UNKNOWN
 + }
  
  public static void main(String[] args) throws InterruptedException {  public static void main(String[] args) throws InterruptedException {
Zeile 115: Zeile 123:
  while (true) {  while (true) {
  
- // read message 
  String msg = decode(serialPort);  String msg = decode(serialPort);
 + Protocol cmd = protocol(msg);
  
- // run through protocol + switch (cmd) { 
- if (isMessage(msg)) { + case CMD_GR
- + writeMessage(serialPort, currentRA); 
- System.out.println("Received" + msg); + break; 
- + case CMD_GD
- if (msg.startsWith("#:GR#")) { // GET RA + writeMessage(serialPort, currentDE); 
- writeMessage(serialPort, currentRA); + break; 
- } + case CMD_QS
- if (msg.startsWith("#:GD#")) { // GET DEC + targetRA = msg.substring(msg.indexOf(' ')).trim(); 
- writeMessage(serialPort, currentDE); + writeMessage(serialPort, "1"); 
- } + break; 
- if (msg.startsWith("#:Q#:S")) { // SYNC to Slew 1/2 HH:MM:SS + case CMD_SD
- targetRA = msg.substring(msg.indexOf(' ')).trim(); + currentDE = msg.substring(msg.indexOf(' ')).trim(); 
- writeMessage(serialPort, "1"); + targetDE = currentDE; 
- } + writeMessage(serialPort, "1"); 
- if (msg.startsWith(":Sd ")) { // SYNC to Slew 2/2 sDD*MM:SS + break; 
- currentDE = msg.substring(msg.indexOf(' ')).trim(); + case CMD_MS: 
- targetDE = currentDE; + writeMessage(serialPort, "0"); 
- writeMessage(serialPort, "1"); + simulateMove(); 
- } + break; 
- if (msg.startsWith(":MS#")) { // Slew to Target Object + case CMD_UNKNOWN: 
- writeMessage(serialPort, "0"); + if (!msg.startsWith("zero")) 
- simulateMove(); + System.out.println("...received unknown serial command: + msg); 
- + break;
  }  }
  
Zeile 158: Zeile 165:
  }  }
  
 + }
 +
 + private static Protocol protocol(String msg) {
 +
 + if (msg.startsWith("#:GR#"))
 + return Protocol.CMD_GR;
 + if (msg.startsWith("#:GD#"))
 + return Protocol.CMD_GD;
 + if (msg.startsWith("#:Q#:S"))
 + return Protocol.CMD_QS;
 + if (msg.startsWith(":Sd "))
 + return Protocol.CMD_SD;
 + if (msg.startsWith(":MS#"))
 + return Protocol.CMD_MS;
 +
 + return Protocol.CMD_UNKNOWN;
  }  }
  
Zeile 166: Zeile 189:
  // step 2: verify  // step 2: verify
  if (buffer == null)  if (buffer == null)
- return "UNKNOWN COMMAND";+ return "zero buffer";
  
  int numRead = buffer.length;  int numRead = buffer.length;
  if (buffer.length <= 0)  if (buffer.length <= 0)
- return "UNKNOWN COMMAND";+ return "zero length";
  
  // step 3: convert buffer to string  // step 3: convert buffer to string
Zeile 190: Zeile 213:
  }  }
  
- return "UNKNOWN COMMAND";+ return "should not happen"; 
 +
 + 
 + static void writeMessage(SerialPort p, String msg) { 
 + try { 
 + byte[] buffer = msg.getBytes(); 
 + p.writeBytes(buffer); 
 + } catch (SerialPortException e) { 
 + e.printStackTrace(); 
 + }
  }  }
  
Zeile 256: Zeile 288:
  Timer timer = new Timer("Timer");  Timer timer = new Timer("Timer");
  timer.scheduleAtFixedRate(repeatedTask, 0, 250);  timer.scheduleAtFixedRate(repeatedTask, 0, 250);
- } 
- 
- static boolean isMessage(String msg) { 
- if (msg.equals("UNKNOWN COMMAND")) 
- return false; 
- return true; 
- } 
- 
- static void writeMessage(SerialPort p, String msg) { 
- try { 
- byte[] buffer = msg.getBytes(); 
- p.writeBytes(buffer); 
- } catch (SerialPortException e) { 
- e.printStackTrace(); 
- } 
  }  }
  
Zeile 277: Zeile 294:
  
 </code> </code>
 +<WRAP center round info 90%>
 +Das dieses einfache Programm (die nur wenige Kommandos des Protokolls implementiert) funktioniert, verdanken wir den  saloppen Umgang von Stellarium (getestet mit 0.18.0) mit dem Protokoll. Eine verfünftige Initialisierung (Handschake) ist beispielsweise nicht erforderlich.
 +</WRAP>
 +
  
virtuelles_java-teleskop.1561615326.txt.gz · Zuletzt geändert: 2020/11/22 16:53 (Externe Bearbeitung)