kopia lustrzana https://github.com/Hamlib/Hamlib
283 wiersze
8.3 KiB
Plaintext
283 wiersze
8.3 KiB
Plaintext
SPID Rot1Prog & Rot2Prog Protocol
|
|
=================================
|
|
|
|
This is an attempt at documenting the protocol of the Rot1Prog and
|
|
Rot2Prog rotator controller from SPID Elektronik (spid@alpha.pl).
|
|
|
|
Rot1Prog controls only azimuth, while Rot2Prog controls both azimuth and
|
|
elevation.
|
|
|
|
|
|
|
|
GENERAL INFO
|
|
------------
|
|
|
|
The SPID protocol supports 3 commands: stop, status and set. The stop
|
|
command stops the rotator in its current position. The status command
|
|
returns the current position of the rotator, and the set command tells
|
|
the rotator to rotate to a given position.
|
|
|
|
The rotator controller communicates with the PC using a serial
|
|
port. Communication parameters are 1200 bps (Rot1Prog) or 600 bps
|
|
(Rot2Prog), 8 bits, no parity and 1 stop bit.
|
|
|
|
All commands are issued as 13 byte packets, and responses are received
|
|
as 5 byte packets (Rot1Prog) or 12 byte packets (Rot2Prog).
|
|
|
|
|
|
|
|
COMMAND PACKETS
|
|
---------------
|
|
|
|
Command packets are 13 byte long.
|
|
|
|
Byte: 0 1 2 3 4 5 6 7 8 9 10 11 12
|
|
-----------------------------------------------------------------
|
|
Field: | S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | K | END |
|
|
-----------------------------------------------------------------
|
|
Value: 57 3x 3x 3x 3x 0x 3x 3x 3x 3x 0x xF 20 (hex)
|
|
|
|
|
|
S: Start byte. This is always 0x57 ('W')
|
|
|
|
H1-H4: Azimuth as ASCII characters 0-9
|
|
|
|
PH: Azimuth resolution in pulses per degree (ignored!)
|
|
|
|
V1-V4: Elevation as ASCII characters 0-9
|
|
|
|
PV: Elevation resolution in pulses per degree (ignored!)
|
|
|
|
K: Command (0x0F=stop, 0x1F=status, 0x2F=set)
|
|
|
|
END: End byte. This is always 0x20 (space)
|
|
|
|
|
|
Positions are encoded as number of pulses in ASCII numbers
|
|
'0000'-'9999' (see set command for formula).
|
|
|
|
Rot1Prog does not control elevation and does not support different
|
|
resolutions, so V1-V4, PH and PV are set to 0x00. Also, since only whole
|
|
degrees are supported, H4 is always set to 0x30 (0 tenths of degrees).
|
|
|
|
|
|
|
|
RESPONSE PACKETS
|
|
----------------
|
|
|
|
Rot1Prog response packets are 5 bytes long.
|
|
|
|
Byte: 0 1 2 3 4
|
|
--------------------------
|
|
Field: | S | H1 | H2 | H3 | END |
|
|
--------------------------
|
|
Value: 57 0x 0x 0x 20 (hex)
|
|
|
|
|
|
S: Start byte. This is always 0x57 ('W')
|
|
|
|
H1-H3: Azimuth as byte values
|
|
|
|
END: End byte. This is always 0x20 (space)
|
|
|
|
|
|
Positions are decoded using the following formula:
|
|
|
|
az = H1 * 100 + H2 * 10 + H3 - 360
|
|
|
|
|
|
|
|
Rot2Prog response packets are 12 bytes long.
|
|
|
|
Byte: 0 1 2 3 4 5 6 7 8 9 10 11
|
|
-------------------------------------------------------------
|
|
Field: | S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | END |
|
|
-------------------------------------------------------------
|
|
Value: 57 0x 0x 0x 0x 0x 0x 0x 0x 0x 0x 20 (hex)
|
|
|
|
|
|
S: Start byte. This is always 0x57 ('W')
|
|
|
|
H1-H4: Azimuth as byte values
|
|
|
|
PH: Azimuth resolution in pulses per degree (controller setting)
|
|
|
|
V1-V4: Elevation as byte values
|
|
|
|
PV: Elevation resolution in pulses per degree (controller setting)
|
|
|
|
END: End byte. This is always 0x20 (space)
|
|
|
|
|
|
Positions are decoded using the following formulas:
|
|
|
|
az = H1 * 100 + H2 * 10 + H3 + H4 / 10 - 360
|
|
|
|
el = V1 * 100 + V2 * 10 + V3 + V4 / 10 - 360
|
|
|
|
|
|
The PH and PV values in the response packet reflect the settings of
|
|
the rotator controller. The Rot2Prog supports the following
|
|
resolutions (always the same for azimuth and elevation):
|
|
|
|
1 deg/pulse: PH=0x01, PV=0x01
|
|
0.5 deg/pulse: PH=0x02, PV=0x02
|
|
0.25 deg/pulse: PH=0x04, PV=0x04
|
|
|
|
|
|
|
|
STOP COMMAND
|
|
------------
|
|
|
|
The stop command stops the rotator immediately in the current
|
|
position and returns the current position. (The position returned does
|
|
not seem to be entirely correct, often off by a degree or two.)
|
|
|
|
The H1-H4, PH, V1-V4 and PV fields are ignored, so only the S, K and
|
|
END fields are used. E.g.:
|
|
|
|
Command:
|
|
-----------------------------------------------------------------
|
|
| S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | K | END |
|
|
-----------------------------------------------------------------
|
|
| 57| 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 0F| 20 | (hex)
|
|
-----------------------------------------------------------------
|
|
Rotator stops
|
|
|
|
Rot1Prog response:
|
|
--------------------------
|
|
| S | H1 | H2 | H3 | END |
|
|
--------------------------
|
|
| 57| 03 | 07 | 02 | 20 | (hex)
|
|
--------------------------
|
|
az=372-360=12
|
|
|
|
Rot2Prog response:
|
|
-------------------------------------------------------------
|
|
| S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | END |
|
|
-------------------------------------------------------------
|
|
| 57| 03 | 07 | 02 | 05 | 02 | 03 | 09 | 04 | 00 | 02 | 20 | (hex)
|
|
-------------------------------------------------------------
|
|
az=372.5-360=12.5, el=394.0-360=34.0
|
|
PH=PV=0x02 (pulse for each 0.5 deg)
|
|
|
|
|
|
|
|
STATUS COMMAND
|
|
--------------
|
|
|
|
The status command returns the current position of the antenna.
|
|
|
|
The H1-H4, PH, V1-V4 and PV fields are ignored, so only the S, K and
|
|
END fields are used. E.g.:
|
|
|
|
Command:
|
|
-----------------------------------------------------------------
|
|
| S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | K | END |
|
|
-----------------------------------------------------------------
|
|
| 57| 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 00 | 1F| 20 | (hex)
|
|
-----------------------------------------------------------------
|
|
|
|
Rot1Prog response:
|
|
--------------------------
|
|
| S | H1 | H2 | H3 | END |
|
|
--------------------------
|
|
| 57| 03 | 07 | 02 | 20 | (hex)
|
|
--------------------------
|
|
az=372-360=12
|
|
|
|
Rot2Prog response:
|
|
-------------------------------------------------------------
|
|
| S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | END |
|
|
-------------------------------------------------------------
|
|
| 57| 03 | 07 | 02 | 05 | 02 | 03 | 09 | 04 | 00 | 02 | 20 | (hex)
|
|
-------------------------------------------------------------
|
|
az=372.5-360=12.5, el=394.0-360=34.0
|
|
PH=PV=0x02 (pulse for each 0.5 deg)
|
|
|
|
|
|
Status commands can be issued while the rotator is moving and will
|
|
always return the current position.
|
|
|
|
|
|
|
|
SET COMMAND
|
|
-----------
|
|
|
|
The set command tells the rotator to turn to a specific
|
|
position. The controller does not send a response to this command.
|
|
|
|
Azimuth and elevation is calculated as number of pulses, with a +360
|
|
degree offset (so that negative position can be encoded with positive
|
|
numbers).
|
|
|
|
Rot1Prog supports only whole degree positions:
|
|
|
|
H = 360 + az
|
|
|
|
Rot2Prog supports different resolutions:
|
|
|
|
H = PH * (360 + az)
|
|
|
|
V = PV * (360 + el)
|
|
|
|
H1-H4 and V1-V4 are these numbers encoded as ASCII (0x30-0x39,
|
|
i.e. '0'-'9').
|
|
|
|
E.g., when pointing a Rot1Prog to azimuth 123:
|
|
|
|
H = 360 + 123 = 483
|
|
|
|
-----------------------------------------------------------------
|
|
| S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | K | END |
|
|
-----------------------------------------------------------------
|
|
| 57| 34 | 38 | 33 | 30 | 00 | 00 | 00 | 00 | 00 | 00 | 2F| 20 | (hex)
|
|
-----------------------------------------------------------------
|
|
|
|
Note that H4 is not used and always set to 0x30.
|
|
|
|
E.g., when pointing a Rot2Prog to azimuth 123.5, elevation 77.0 when the
|
|
rotator sends one pulse per 0.5 degree (PH=PV=2):
|
|
|
|
H = 2 * (360 + 123.5) = 967
|
|
|
|
V = 2 * (360 + 77.0) = 874
|
|
|
|
-----------------------------------------------------------------
|
|
| S | H1 | H2 | H3 | H4 | PH | V1 | V2 | V3 | V4 | PV | K | END |
|
|
-----------------------------------------------------------------
|
|
| 57| 30 | 39 | 36 | 37 | 02 | 30 | 38 | 37 | 34 | 02 | 2F| 20 | (hex)
|
|
-----------------------------------------------------------------
|
|
|
|
The PH and PV values sent are ignored. The values used by the rotator
|
|
control unit are set by choosing resolution in the setup
|
|
menu. Luckily, these values can be read using the status command
|
|
(Rot2Prog only).
|
|
|
|
Note that H1-H4 is interpreted differently by Rot1Prog and Rot2Prog in
|
|
the set command:
|
|
|
|
Rot1Prog Rot2Prog
|
|
H1 *100 *1000
|
|
H2 *10 *100
|
|
H3 *1 *10
|
|
H4 *0 *1
|
|
|
|
Rot1Prog does not use H4 and uses H1 for houndres, while Rot2Prog uses
|
|
H4 for ones and H1 for thousands.
|
|
|
|
|
|
|
|
SEE ALSO
|
|
--------
|
|
http://alfaradio.ca/downloads/program_info/
|
|
|
|
|
|
|
|
AUTHOR
|
|
------
|
|
|
|
Norvald H. Ryeng, LA6YKA
|
|
norvald@ryeng.name
|
|
2009-05-21, updated 2011-01-29
|