Ветромер

Протокол обмена

Версия 2. Полудуплекс, 19200 бод, 8N1. Ведущий один — шлюз, ведомых на линии до 31.

Формат кадра

+------+------+------+------+-----------+-----------+
| 0xA5 | ADDR | CMD  | LEN  | DATA[LEN] | CRC16 L,H |
+------+------+------+------+-----------+-----------+
  1 б    1 б    1 б    1 б     0..64 б       2 б

Команды

CMDНазваниеЗапросОтвет
0x01PING—версия протокола, версия прошивки
0x02READ_NOW—мгновенные значения, 8 байт
0x03READ_AVGокно, мин (1…60)средние и порывы, 10 байт
0x10GET_REGномер регистразначение uint16
0x11SET_REGномер, значениеэхо
0x20SAVE—код результата
0x7FRESETмагическое 0x5AA5нет

Ответ READ_NOW

Смещ.ТипПолеЕд.
0uint16скорость ветра0,01 м/с
2uint16порыв за 3 с0,01 м/с
4uint8румб, 0…15, С = 0, по часовой—
5uint8флаги: бит 0 — обледенение, бит 1 — ошибка флюгера—
6uint16напряжение питаниямВ

Регистры настроек

№ПараметрУмолч.Диапазон
0адрес станции11…31
1коэффициент скорости, 0,001 м/с на Гц700100…3000
2порог трогания, 0,01 м/с400…200
3смещение севера, градусы00…359
4период усреднения, с6010…3600

Пример обмена

Опрос мгновенных значений станции с адресом 3:

# запрос: адрес 3, READ_NOW, без данных
A5 03 02 00 AE F3

# ответ: 7,24 м/с, порыв 9,80 м/с, румб 6 (ЮВ), флаги 0, 12,31 В
A5 03 82 08 D4 02 D4 03 06 00 16 30 07 12

Числовые поля передаются младшим байтом вперёд. Проверять CRC удобнее по этим примерам: если ваша реализация даёт те же значения, порядок байтов и инициализация выбраны верно.

Обработка ошибок

При неверной CRC станция молчит. На неизвестную команду или неверный аргумент она отвечает кадром с кодом 0xFF и одним байтом причины: 1 — нет такой команды, 2 — неверная длина, 3 — значение вне диапазона. Шлюз повторяет запрос до двух раз и лишь затем отмечает пропуск данных.