Описание протоколов SPID Rot1Prog и Rot2Prog

В процессе работы со спутником нам понадобилось отслеживать направление на него для радиосвязи. От NORAD мы получили параметры орбиты в формате TLE. Загрузив наши данные в программу Orbitron, мы воспользовались стандартным драйвером "SpidAlfa", который передаёт данные об азимуте и возвышении в COM-порт компьютера. Далее нам потребовалось спроектировать собственное поворотное устройство, совместимое с данным протоколом.

На этой странице приведено краткое описание протокола взаимодействия контроллеров повортных устройств для антенн, выпускаемых польской фирмой SPID Elektronik, драйвер для которых идёт с Orbitron'ом.

Данные протоколы описывают команды, которые данные контроллеры получают и передают по COM-порту к управляющему компьютеру.

Основная информация

Контроллеры взаимодействуют с PC через последовательный порт (RS-232).

Параметры COM-порта: скорость 1200 bps (Rot1Prog) или 600 bps (Rot2Prog), 8 бит, без контроля чётности, 1 стоповый бит.

Протокол SPID поддерживает три команды: stop, status и set.

Все управляющие команды, отправляемые компьютером, идут пакетами по 13 байт.
контроллер отвечает пакетом по 5 байт при используемом протоколе Rot1Prog или пакетом 12 байт если протокол Rot2Prog.

Command Packets

Все управляющие команды имеют длину 13 байт.

Byte:0123456789101112
Field:SH1H2H3H4PHV1V2V3V4PVKEND
Value:0x570x3?0x3?0x3?0x3?0x0?0x3?0x3?0x3?0x3?0x0?0x?F0x20
S
Стартовый байт. Всегда равен 0x57 ('W' в кодировке ASCII)
H1-H4
Азимут (символы ASCII 0-9)
PH
Разрешение по азимуту в импульсах на градус (ignored!)
V1-V4
Возвышение (символы ASCII 0-9)
PV
Разрешение по возвышению в импульсах на градус (ignored!)
K
Команда (0x0F = stop, 0x1F = status, 0x2F = set)
END
End byte. Всегда равен 0x20 (пробел в кодировке ASCII)

Позиция кодируется как число импульсов в кодах ASCII от '0000' до '9999' (формула приведена в описании команды set).

Rot1Prog не позволяет управлять возвышением и не поддерживает различные разрешения, поэтому поля V1-V4, PH и PV всегда равны 0x00. Кроме того, поскольку поддерживаются только целые значения, H4 всегда устанавливается в 0x30 (0 десятых градусов).



Response Packets

Ответ по протоколу Rot1Prog имеет длину 5 байт.

Byte:01234
Field:SH1H2H3END
Value:0x570x0?0x0?0x0?0x20
S
Start byte. This is always 0x57 ('W')
H1-H3
Azimuth as byte values
END
End byte. This is always 0x20 (space)

Позиция кодируется по следующей формуле:

az = H1 * 100 + H2 * 10 + H3 - 360



Ответ по протоколу Rot2Prog имеет длину 12 байт.

Byte:01234567891011
Field:SH1H2H3H4PHV1V2V3V4PVEND
Value:0x570x0?0x0?0x0?0x0?0x0?0x0?0x0?0x0?0x0?0x0?0x20
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)

Позиция декодируется по следующей формуле:

az = H1 * 100 + H2 * 10 + H3 + H4 / 10 - 360
el = V1 * 100 + V2 * 10 + V3 + V4 / 10 - 360

Значения PH и PV в ответных пакетах сообщают компьютеру параметры контроллера. The Rot2Prog поддерживает следующие значения разрешающей способности (всегда одинаковы по азимуту и возвышению):

Deg/pulsePHPV
10x010x01
0.50x020x02
0.250x040x04


Stop Command

Команда STOP принудительно останавливает поворотное устройство в текущей позиции и возвращает пакет статуса с текущей позицией.

В некоторых источниках упоминается, что моментально возвращаемая позиция не совсем точна, из-за инерции контроллер успевает повернуть устройство ещё на градус-полтора.

Поля H1-H4, PH, V1-V4 и PV игнорируются:

Command:

SH1H2H3H4PHV1V2V3V4PVKEND
0x570x000x000x000x000x000x000x000x000x000x000x0F0x20

Rotator stops.

Ответ по протоколу Rot1Prog:

SH1H2H3END
0x570x030x070x020x20

az = 372 - 360 = 12

Ответ по протоколу Rot2Prog:

SH1H2H3H4PHV1V2V3V4PVEND
0x570x030x070x020x050x020x030x090x040x000x020x20

az = 372.5 - 360 = 12.5, el = 394.0 - 360 = 34.0
PH = PV = 0x02 (импульс на каждые 0.5°)



Status Command

Команда STATUS возвращает текущее положение поворотного устройства.

Поля H1-H4, PH, V1-V4 и PV игнорируются:

SH1H2H3H4PHV1V2V3V4PVKEND
0x570x000x000x000x000x000x000x000x000x000x000x1F0x20

Ответ по протоколу Rot1Prog:

SH1H2H3END
0x570x030x070x020x20

az = 372 - 360 = 12

Ответ по протоколу Rot2Prog:

SH1H2H3H4PHV1V2V3V4PVEND
0x570x030x070x020x050x020x030x090x040x000x020x20

az = 372.5 - 360 = 12.5, el = 394.0 - 360 = 34.0
PH = PV = 0x02 (импульс на каждые 0.5°)

Команда STATUS может быть вызывана в процессе поворота и всегда будет возвращать текущее положение.





Set Command

Команда SET указывает контроллеру нужное положение. Контроллер не отправляет ответа на данную команду.

Азимут и возвышение вычисляются как количество импульсов со смещением +360 градусов (поэтому отрицательное положение может быть закодировано положительными числами).

Rot1Prog поддерживает только целые значения градусов:

H = 360 + az

Rot2Prog поддерживает различные разрешения:

H = PH * (360 + az)
V = PV * (360 + el)

Поля H1-H4 и V1-V4 - это числа, закодированные как ASCII (0x30 - 0x39, т.е. '0' - '9').

Например, азимут 123 Rot1Prog передаст следующим образом:

H = 360 + 123 = 483

SH1H2H3H4PHV1V2V3V4PVKEND
0x570x340x380x330x300x000x000x000x000x000x000x2F0x20

Помните - H4 не используется и всегда равен 0x30.

Например, при передачи протоколом Rot2Prog азимут 123.5, высоты 77.0, и точности один импульс на 0.5° (PH = PV = 2):

H = 2 * (360 + 123.5) = 967
V = 2 * (360 + 77.0) = 874

SH1H2H3H4PHV1V2V3V4PVKEND
0x570x300x390x360x370x020x300x380x370x340x020x2F0x20

Переданные значения PH и PV игнорируются. Блоком управления использует значения, устанавленные выбором разрешения в меню. Эти значения можно прочитать командой status (только для Rot2Prog).

Обратите внимание - в команде set поля H1-H4 интерпретируется по-разному в зависимости от используемого протокола Rot1Prog или Rot2Prog:

FieldRot1ProgRot2Prog
H1*100*1000
H2*10*100
H3*1*10
H4*0*1

Rot1Prog использует H1 для сотен и не использует H4.
Rot2Prog использует H4 для единиц и H1 для тысяч.