This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tcs:legacy_tcs_socket_communction [2014/02/09 12:14] scott created |
tcs:legacy_tcs_socket_communction [2017/02/10 17:14] (current) scott |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | =====Legacy TCS Network Communication===== | ||
+ | |||
===Overview=== | ===Overview=== | ||
- | Legacy TCS only allows remote telescope communication and control through a serial port on the main TCS computer. In order to allow network communication and control of the telescope we have built software called Telcom to convert tcp/ip sockets to serial communication. To make sure this software is up and running on the BOK telescope you can check the website http://bokpop.as.arizona.edu and look for the table marked telemetry. This webpage queries the telcom server about once a second. | + | Legacy TCS only allows remote telescope communication and control through a serial port on the main TCS computer. In order to allow network communication and control of the telescope we have built software called Telcom to convert tcp/ip sockets to serial communication. To make sure this software is up and running on the BOK telescope you can check the website http://bok.as.arizona.edu: |
+ | |||
+ | === === | ||
+ | You can find a list of legacy TCS commands [[tcs: | ||
+ | ===== Request syntax ===== | ||
+ | ==== ==== | ||
+ | |||
+ | The Telcom server makes 14 pieces of information available. | ||
+ | |||
+ | ^ Description ^ Key Word ^ return synax ^ | ||
+ | | Motion Status | MOT | 0=No motion 1=RA Motion 2=Dec Motion 3=RA and Dec Motion | | ||
+ | | Right Ascension | RA | [hhmmss.ss] | | ||
+ | | Declination | DEC | [+/ | ||
+ | | Hour Angle | HA | [+/ | ||
+ | | Secant z (Air Mass) | SECZ | [s.ss] | | ||
+ | | Epoch | EQ | D[YYYY.YYY] | | ||
+ | | Julian Date | JD | [DDDDDDD.D] | | ||
+ | | Universal Time | UT | [hh: | ||
+ | | IIS position | IIS | [DDD.D] angle in degrees | | ||
+ | | Local Sidereal Time | ST | [hh: | ||
+ | | Elevation Angle | EL | [DD.D] | | ||
+ | | Azimuth Angle | AZ | [DDD.D] | | ||
+ | | Dome positoin | DOME | [DDD.D] this position is relative to the telescope azimuth. To get absolute dome position add this angle to the telescope azimuth. | | ||
+ | | WOBBLE | WOBBLE | ??? | | ||
+ | |||
+ | To retrieve these values simply open a TCP socket to the Telcom server and send a request. The syntax is as follows. | ||
+ | |||
+ | ^< | ||
+ | For Example: | ||
+ | ^BOK TCS 123 REQUEST RA^ | ||
+ | |||
+ | The telcom server will return: | ||
+ | ^< | ||
+ | For Example: | ||
+ | |||
+ | ^BOK TCS 123 214412.79^ | ||
+ | |||
+ | As you can see the RA units are not seperated by colons. | ||
+ | |||
+ | ==== " | ||
+ | If you want to get multiple pieces of data from the telcom server rapidly you can use the ALL keyword. This will return a string containing all the telemetry data described above which will have to be parsed. The string gives values seperated by 1 or more white spaces. The table below shows the order the values are placed in the string. | ||
+ | |||
+ | ^Return Values | MOT | RA | DEC | HA | ST | EL | AZ | SECZ | EQ | JD | WOBBLE | DOME | UT | IIS | | ||
+ | ^Example Value |0 | 221941.92 | +314308.8 | -00:00:00 | 22:20:19 | 90.0 | +7.6 | 1.00 | D2000.000 | 2456698.3 | 1 |-78.6 | 20:27:19.1 | 0.0 | | ||
+ | |||
+ | An example string: | ||
+ | ^ BOK TCS 123 0 2231:27.64 +314312.0 | ||
+ | |||
+ | It should be noted that all strings returned on the Telcom socket will end with a carriage return (\r). | ||
+ | |||
+ | |||
+ | ===== Command Syntax ===== | ||
+ | |||
+ | ==== ==== | ||
+ | The syntax for sending commands to the Telcom server is very similar to sending requests. The syntax looks like: | ||
+ | |||
+ | |||
+ | ^< | ||
+ | |||
+ | For Example | ||
+ | ^BOK TCS 123 BIASRA 12.5^ | ||
+ | |||
+ | This example sets the Right Ascension bias rate at 12.5 seconds per second. | ||
+ | |||
+ | Each command will return: | ||
+ | |||
+ | ^ < | ||
+ | |||
+ | For Example | ||
+ | ^BOK TCS 123 OK^ | ||
+ | |||
+ | The < | ||
+ | |||
+ | ^BOK TCS 123 TRACKON^ (command for turning tracking on) | ||
+ | |||
+ | Telcom server will return : | ||
+ | |||
+ | ^BOK TCS 123 OK^ | ||
+ | |||
+ | But the telescope will not start tracking because it can't when the drives are off. | ||
+ | |||
+ | ***For brevity sake the complete list of TCS commands will not be written here. Instead they can be found [[tcs:list of network commands]] | ||
+ | |||
+ | |||
+ | ===== Example Scripts ===== | ||
+ | Below are some sample scripts to communicate with Telcom server | ||
+ | |||
+ | ==== telem_example.py ==== | ||
+ | This program gets the telemetry from The Telcom server and stores it in a python dictionary object and prints it | ||
+ | out in a clean format. | ||
+ | |||
+ | < | ||
+ | # | ||
+ | |||
+ | """ | ||
+ | Author: Scott Swindell, Steward Observatory | ||
+ | |||
+ | A short example script to grab telemetry from the BOK Telcom server | ||
+ | the Telcom server and store that information in a python | ||
+ | dictionary object""" | ||
+ | |||
+ | IPADDR = "" | ||
+ | PORT = "" | ||
+ | |||
+ | TELID = " | ||
+ | REF_NUM = 123 | ||
+ | REQUEST = " | ||
+ | |||
+ | keyList = [ | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | |||
+ | |||
+ | ] | ||
+ | |||
+ | import socket | ||
+ | |||
+ | # | ||
+ | telSock = socket.socket( socket.AF_INET, | ||
+ | telSock.settimeout( 0.5 ) | ||
+ | |||
+ | #IPADDR = telSock.gethostbyname(HOST) | ||
+ | telSock.connect( ( IPADDR, PORT ) )#open the socket | ||
+ | |||
+ | reqString = "%s TCS %i REQUEST %s" %( TELID, REF_NUM, REQUEST ) | ||
+ | |||
+ | |||
+ | telSock.send( reqString ) #send the request | ||
+ | |||
+ | resp = "" | ||
+ | test = True | ||
+ | |||
+ | #Grab 100 bytes at a time | ||
+ | #from the socket and check for | ||
+ | #timeouts. | ||
+ | while test: | ||
+ | try: | ||
+ | inStuff = telSock.recv( 100 ) | ||
+ | |||
+ | except socket.timeout: | ||
+ | if resp: | ||
+ | print "No Telem Recieved" | ||
+ | test = False | ||
+ | break | ||
+ | |||
+ | if inStuff: | ||
+ | resp+=inStuff | ||
+ | |||
+ | else: | ||
+ | test=False | ||
+ | |||
+ | #turn string into list, seperate by whitespace | ||
+ | resp = resp.split(' | ||
+ | |||
+ | cleanResp = [] | ||
+ | |||
+ | #remove all empty elements and new line | ||
+ | #and put everything else in cleanResp | ||
+ | for char in resp: | ||
+ | if char != '' | ||
+ | cleanResp.append( char ) | ||
- | ===Request syntax=== | + | #gather the telemetry into a dictionary |
- | Legacy TCS makes 14 pieces of information available these are | + | #for easy referencing |
+ | telemDict | ||
+ | II = 0 | ||
+ | for key in keyList: | ||
+ | telemDict[key] | ||
+ | II+=1 | ||
- | -Motion Status | + | #print them all out in |
- | -Right Ascension | + | #a nice clean way |
- | -Declination | + | for (key, value) in telemDict.iteritems(): |
- | -Hour Angle | + | print " |
- | -Secantz | + | |
- | -Epoch | + | |
- | -Julian Date | + | |
- | -Universal Time | + | |
- | -IIS position | + | |
+ | </ |