Update of /cvsroot/uts/uts/src/tel/telgo.paramount In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11912/src/tel/telgo.paramount Added Files: Makefile.am main.c setup-server.py setup.py telgo telgo.paramount.py telgo.server.py Log Message: - new telgo.paramount - telgo wrapper for Paramount ME --- NEW FILE: Makefile.am --- bin_PROGRAMS = telgo.paramount telgo_paramount_SOURCES = main.c telgo_paramount_LDADD = -lm -lcfitsio -lsimpleskts --- NEW FILE: main.c --- /* * telgo.paramount - telgo wrapper for Paramount ME * Copyright (C) 2004 - Paulo Henrique S. de Santana * * Based on telgo.lx200 * Copyright (C) 2000 by Andre Luiz de Amorim * * This file is part of UTS. * UTS is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * UTS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA * */ /* $Id */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <signal.h> #include <math.h> #include <string.h> #include "sockets.h" #ifdef HAVE_CONFIG_H #include "config.h" #endif #define FCS_GAIN 10000 /* 1/100 seconds */ enum { FALSE, TRUE }; typedef enum { BUSY, WAIT } stat_t; struct ras { int hh; int mm; int ss; }; struct decs { int dd; int mm; int ss; }; typedef struct { struct ras ra; float ra_range; struct decs dec; float dec_range; float lat; float lon; stat_t status; int moving; int focus; } tel_info; void wait_tel(tel_info *tel); void usage(char *command); //void status(tel_info *tel, stat_t stat); void setup(void); void controlc(int signumber); void change_focus(int argc, char ** argv); void move_tel(int argc, char **argv); tel_info tel; int ram, rah, decm, decd; float ras, decs; Socket *skt; char buffer[500]; char *targethost = "localhost"; int targetport = 10000; int main(int argc, char ** argv) { signal(SIGINT, controlc); signal(SIGABRT, controlc); fprintf(stderr, "Paramount ME Telescope controller ver. %s\n\n", VERSION); if (argc < 2) usage(argv[0]); if (*argv[1] == 'f') change_focus(argc, argv); else move_tel(argc, argv); exit(0); } void move_tel(int argc, char **argv) { if (argc < 5) usage(argv[0]); setup(); sscanf(argv[3], "%d:%d:%d", &tel.ra.hh, &tel.ra.mm, &tel.ra.ss); sscanf(argv[4], "%d:%d:%d", &tel.dec.dd, &tel.dec.mm, &tel.dec.ss); /* socket stuff */ char sktmode[10]; snprintf(sktmode, 10, "c%d", targetport); skt = Sopen(targethost, sktmode); if (skt == NULL) { printf("Nao foi possivel conectar a %s:%d.\n", targethost, targetport); exit (100); } Sgets(buffer, 500, skt); if(!(strcmp(buffer, "OK") == 0)) { printf("Desconectado pelo servidor.\n"); exit (101); } printf("%s\n", buffer); /*** Write Coords. ***/ tel.moving = TRUE; sprintf(buffer, "%02d:%4.1f %02d:%02d", tel.ra.hh, tel.ra.mm + tel.ra.ss / 60.0, tel.dec.dd, tel.dec.mm); Sputs(buffer, skt); /* Sgets(buffer, 500, skt); */ /* if(!(strcmp(buffer, "OK") == 0)) { */ /* printf("Nao foi possivel mover.\n"); */ /* exit (102); */ /* } */ Sputs("GO", skt); Sgets(buffer, 500, skt); /* if(!(strcmp(buffer, "OK") == 0)) { */ /* printf("Nao foi possivel mover.\n"); */ /* exit (103); */ /* } */ wait_tel(&tel); } void wait_tel(tel_info *tel) { /* int rah; */ /* float ram; */ /* int decd, decm; */ /* float delta_dec; */ /* float delta_ra; */ /* char buf[64]; */ /* while (tel->moving) { */ /* /\* get current RA *\/ */ /* strcpy(buf, ":GR#"); */ /* write_serial(tel->serial, buf, strlen(buf)); */ /* read_serial(tel->serial, buf, 64); */ /* sscanf(buf, "%d:%f#", &rah, &ram); */ /* /\* get current DEC *\/ */ /* strcpy(buf, ":GD#"); */ /* write_serial(tel->serial, buf, strlen(buf)); */ /* read_serial(tel->serial, buf, 64); */ /* sscanf(buf, "%d%*c%d#", &decd, &decm); */ /* /\* are DEC and RA in range? *\/ */ /* decd -= tel->dec.dd; */ /* decm -= tel->dec.mm; */ /* delta_dec = fabs(decd + (decm / 60.0)); */ /* rah -= tel->ra.hh; */ /* ram -= tel->ra.mm; */ /* ram -= ((double)tel->ra.ss / 60.0); */ /* delta_ra = fabs(rah + (ram / 60.0)); */ /* /\* limpa a linha e escreve os deltas *\/ */ /* fprintf(stderr, "\r "); */ /* fprintf(stderr, "\rdelta-dec = %f; delta-ra = %f", delta_dec, delta_ra); */ /* fflush(stderr); */ /* if ((delta_dec < tel->dec_range) && (delta_ra < tel->ra_range)) */ /* tel->moving = FALSE; */ /* sleep(1); */ /* } */ /* /\* ja era pra ter parado, mas ainda esta' tremendo... esperar mais uns 5-10s *\/ */ /* sleep(7); */ } void setup(void) { tel.ra_range = 0.007; /* 1min */ tel.dec_range = 0.007; /* 1min */ tel.moving = FALSE; tel.status = BUSY; tel.focus = FALSE; } void change_focus(int argc, char ** argv) { /* int steps; if (argc < 4) usage(argv[0]); porta = argv[2]; tel.focus = TRUE; setup(); write_serial(tel.serial, ":FF#", 4); sscanf(argv[3], "%d", &steps); if (steps == 0) exit(0); else if (steps < 0) write_serial(tel.serial, ":F-#", 4); else write_serial(tel.serial, ":F+#", 4); usleep(abs(steps) * FCS_GAIN); write_serial(tel.serial, ":FQ#", 4); exit(0); */ } void usage(char *command) { fprintf(stderr, "SYNTAX: %s p terminal_device RA DEC\n", command); fprintf(stderr, " %s f terminal_device steps\n\n", command); fprintf(stderr, "E.g.: %s p /dev/ttyS1 12:12:12 13:12:14\n", command); fprintf(stderr, " %s f /dev/ttyS1 +50\n\n", command); exit(1); } void controlc(int signumber) { if (signumber == SIGINT) fprintf(stderr, "\nControl-C signal caught, exiting.\n"); else fprintf(stderr, "\nAborting...\n"); //if (tel.focus) // write_serial(tel.serial, ":FQ#", 4); exit(2); } --- NEW FILE: setup-server.py --- # setup.py from distutils.core import setup import py2exe setup(console=["server.py"]) --- NEW FILE: setup.py --- # setup.py from distutils.core import setup import py2exe setup(console=["telgo.py"]) --- NEW FILE: telgo --- #! /usr/bin/python2 import sys import string from socket import * import select __description__ = "Paramount ME telgo wrapper" __version__ = "0.1" __date__ = "01/03/2004" # parse arguments if len(sys.argv) < 5: print """ %s - versao %s - %s Usage: %s p server[:port] ra dec Ex. : %s p localhost:1000 +12:12:12 21:21:21 %s p server +12:12:12 21:21:21 %s p - +12:12:12 21:21:21 """ % (__description__, __version__, __date__, sys.argv[0], sys.argv[0], sys.argv[0], sys.argv[0]) sys.exit(-1) # get target host and port from command line if ":" in sys.argv[2]: target = string.split(sys.argv[2], ":") elif sys.argv[2] != "-": target = [sys.argv[2], 10000] else: target = ['localhost', 10000] # helpful names targetRA = sys.argv[3] targetDEC = sys.argv[4] # connect, send coordinates, and wait until telescope stop try: skt = socket(AF_INET, SOCK_STREAM) print "Connecting to %s:%d... wait... " % tuple(target), sys.stdout.flush() skt.connect(tuple(target)) print "OK" skt.sendall("RA*%s" % targetRA) skt.sendall("DEC*%s" % targetDEC) skt.sendall("MOVE") print "Moving to %s %s... wait... " % (targetRA, targetDEC), sys.stdout.flush() # wait until telescope move wait = select.select([skt], [], [skt], 180) if len(wait[0]) or len(wait[2]): data = skt.recv(256) if data == "OK": print "OK" else: print "ERROR (%s)" % data else: print "ERROR (Timeout)" skt.sendall("BYE") skt.close() sys.exit(0) except KeyboardInterrupt: print "Ctrl+C... exiting..." skt.sendall("BYE") skt.close() sys.exit(1) except error, e: print "ERROR (%s)" % (e[1]) skt.sendall("BYE") skt.close() sys.exit(1) --- NEW FILE: telgo.paramount.py --- #! /usr/bin/python2 import sys import string from socket import * import select __description__ = "Paramount ME telgo wrapper" __version__ = "0.1" __date__ = "01/03/2004" # parse arguments if len(sys.argv) < 5: print """ %s - versao %s - %s Usage: %s p server[:port] ra dec Ex. : %s p localhost:1000 +12:12:12 21:21:21 %s p server +12:12:12 21:21:21 %s p - +12:12:12 21:21:21 """ % (__description__, __version__, __date__, sys.argv[0], sys.argv[0], sys.argv[0], sys.argv[0]) sys.exit(-1) # get target host and port from command line if ":" in sys.argv[2]: target = string.split(sys.argv[2], ":") elif sys.argv[2] != "-": target = [sys.argv[2], 10000] else: target = ['localhost', 10000] # helpful names targetRA = sys.argv[3] targetDEC = sys.argv[4] # connect, send coordinates, and wait until telescope stop try: skt = socket(AF_INET, SOCK_STREAM) print "Connecting to %s:%d... wait... " % tuple(target), sys.stdout.flush() skt.connect(tuple(target)) print "OK" skt.sendall("RA*%s" % targetRA) skt.sendall("DEC*%s" % targetDEC) skt.sendall("MOVE") print "Moving to %s %s... wait... " % (targetRA, targetDEC), sys.stdout.flush() # wait until telescope move wait = select.select([skt], [], [skt], 180) if len(wait[0]) or len(wait[2]): data = skt.recv(256) if data == "OK": print "OK" else: print "ERROR (%s)" % data else: print "ERROR (Timeout)" skt.sendall("BYE") skt.close() sys.exit(0) except KeyboardInterrupt: print "Ctrl+C... exiting..." skt.sendall("BYE") skt.close() sys.exit(1) except error, e: print "ERROR (%s)" % (e[1]) skt.sendall("BYE") skt.close() sys.exit(1) --- NEW FILE: telgo.server.py --- #!/bin/python import sys import time import win32com.client from socket import * sk = socket(AF_INET, SOCK_STREAM) sk.bind(('localhost', 10000)) sk.listen(5) try: obj = win32com.client.Dispatch("TheSky.Telescope") util = win32com.client.Dispatch("DriverHelper.Util") thesky = win32com.client.Dispatch("RASCOM.RASCOMTheSky.1") except Exception: print "ERRROOOOO" sys.exit(1) obj.Connected = True #obj.FindHome() targetRA = 0 targetDEC = 0 conn = addr = None try: while 1: conn, addr = sk.accept() print "Entrando... %s:%d" % addr sys.stdout.flush() while 1: data = conn.recv(1024) if not data: continue if data == 'MOVE': print "moving to %s %s" % (targetRA, targetDEC) sys.stdout.flush() obj.SlewToCoordinates(util.HMSToHours(targetRA), util.DMSToDegrees(targetDEC)) conn.send("OK") sys.stdout.flush() elif data.count("RA"): targetRA = data.split('*')[1] print "setting RA to %s" % targetRA sys.stdout.flush() elif data.count("DEC"): targetDEC = data.split('*')[1] print "setting DEC to %s" % targetDEC sys.stdout.flush() elif data == "BYE": conn.close() break elif data == "SHUTDOWN": obj.Park() obj.Connected = False thesky.Quit() break print "Saindo... %s:%d\n" % addr sys.stdout.flush() conn.close() except KeyboardInterrupt: print "Ctrl+C... saindo." if conn: conn.close() sk.close() obj.Park() obj.Connected = False thesky.Quit() sys.exit(1) except error, e: print "error:", e[0],e[1] if conn: conn.close() sk.close() obj.Park() obj.Connected = False thesky.Quit() sys.exit(1) except: if conn: conn.close() sk.close() obj.Park() obj.Connected = False thesky.Quit() sys.exit(1) |