docs.unavlab.com

ГлавнаяГидроакустические навигационные и трекинговые системыAzimuthConsole: Руководство пользователя

logo AzimuthConsole: Руководство пользователя
www.unavlab.com
support@unavlab.com
AzimuthConsole - Кроссплатформенное приложение для работы с системой Zima2 USBL
Руководство пользователя

AzimuthConsole
Руководство пользователя

Содержание

1. Введение

Приложение предназначено для работы с системами Zima2:

1.1. Поддерживаемые платформы

Репозиторий
Полный список релизов.

1.2. Горячие клавиши

Для удобства использования приложения поддерживаются следующие горячие клавиши для наиболее часто используемых команд:

Сочетание клавиш Действие
F1 Отобразить поддерживаемые команды
F12 Переключение режимов вывода данных в окно терминала: Только сообщения об ошибках, вывод отключен, вывод включен
Ctrl+N Network: Открыть соединение (OCON)
Ctrl+Shift+N Network: Закрыть соединение (CCON)
Ctrl+I Interrogation: Возобновить опрос маяков-ответчиков
Ctrl+Shift+I Interrogation: Приостановить опрос маяков-ответчиков
Ctrl+L Clear screen: очистить экран
Ctrl+E Exit: Закрыть приложение

1.3. Поддерживаемые устройства

1.4. Запись и хранение информации

Приложение не использует никаких алгоритмов шифрования, обфускации, скрытого хранения и передачи информации. Приложение ведет журнал информационного обмена по всем каналам связи, это означает, что в них в открытом виде может содержаться информация о местоположении. По умолчанию запись в журнал обмена с Web-интерфейсом отключена в целях экономии места, для управления включением/отключением записи информационного обмена с Web-интерфейсом служит команда weblog,on=TRUE|FALSE. При старте приложение подсчитывает место на диске, занимаемое всеми файлами журналов, и если оно превышает 100 Мб, то удаляются журналы, начиная с самых старых, до тех пор, пока занимаемое место не станет ниже указанной границы. Новый журнал создается при старте приложения автоматически, согласно текущей системной дате и времени: appPath\log\YYYY-MM-DD\hh-mm-ss.log.

2. Система команд AzimuthConsole

Для управления приложением используется текстовый протокол с именованными параметрами. Такой подход обеспечивает преимущества:

2.1. Характеристики

Свойство Описание
Транспорт Локальный (консоль), UDP (RCTRL), WebSocket (веб-интерфейс)
Кодировка ASCII, UTF-8
Формат запроса CMD_ID[,key=value,...]
Формат ответа CMD_ID,OK[,key=value,...] или CMD_ID,ERR,msg=...
Разделитель Запятая (,)
Типы параметров Целые, вещественные (точка), строки, IP:port
Чувствительность Команды — регистронезависимы, ключи — регистронезависимы, значения — сохраняют регистр
Мнемоника 3-5 символов, верхний регистр
Обратная связь Ответ всегда содержит CMD_ID, что позволяет сопоставлять запрос-ответ при асинхронной работе
Пустые параметры Означают “запросить текущее значение” (для get-команд) или “не менять” (для set-команд)

2.2. Примеры

→ STAT
← STAT,OK,azm_status=Detected,interrogation=True,position_valid=False

→ LHOV,lat=44.5,lon=39.3,hdg=180
← LHOV,OK

→ AUX1,proto=NMEA,port=COM3,baud=115200
← AUX1,OK

→ PORTS
← PORTS,OK,port0=azm|COM4|Detected,port1=aux1|COM3|Detected

2.3. Описание команд

2.3.1. Соединение

Команда Каналы Параметры Ответ Описание
CCON T,R,W - CCON,OK Закрыть все соединения
CNA? T,R,W - CNA?,OK,active=TRUE/FALSE Получить статус соединения
DET? T,R,W id=AZM/AUX1/AUX2/RDT DET?,OK,detected=TRUE/FALSE Получить статус было ли определено устройство
OCON T,R,W - OCON,OK Открыть все соединения (Цепочка AZM » AUX1 » AUX2 » RDT)

2.3.2. Порты

Команда Каналы Параметры Ответ Описание
AUX1 T,R,W proto=NMEA/BP,
port=COMx/AUTO/OFF,
baud=N
AUX1,OK Конфигурация порта AUX1 (GNSS/GNSS компас)
AUX2 T,R,W port=COMx/AUTO/OFF,
baud=N
AUX2,OK Конфигурация порта AUX2 (Магнитный компас)
AZM T,R,W port=COMx/AUTO,
baud=N
AZM,OK Конфигурация порта AZM (трансивер)
OUTS T,R,W port=COMx/OFF,
baud=N
OUTS,OK Конфигурация последовательного выходного порта
OUTU T,R,W addr=ip:port/OFF OUTU,OK Конфигурация выходного UDP канала
PORTS T,R,W - PORTS,OK,
port0=id|port|status,…
Получить статус всех соединений
RCTRL T,R,W in=port,out=ip:port RCTRL,OK Конфигурация удаленного UDP терминала
RDT T,R,W port=COMx/AUTO/OFF,
baud=N
RDT,OK Конфигурация последовательного порта поворотного устройства Радант
SIOC T,R,W addr=N,ep=ip:port/OFF SIOC,OK Конфигурация индивидуальных UDP каналов для маяков

2.3.3. Запрос маяков

Команда Каналы Параметры Ответ Описание
ITG? T,R,W - ITG?,OK,
active=TRUE/FALSE
Получить статус запросов
PITG T,R,W - PITG,OK Приостановить запрос маяков
RITG T,R,W - RITG,OK Возобновить запрос маяков

2.3.4. Трансивер

Команда Каналы Параметры Ответ Описание
CREQ T,R,W addr=N,
code=N
CREQ,OK Запрос пользовательских значений от маяка (addr=1-16, code=3-30)
MDST T,R,W val=N MDST,OK,val=N Задать/получить максимальную дальность, м
MSK T,R,W mask=N MSK,OK,mask=N Задать/получить маску адресов маяков*
SLN T,R,W val=N SLN,OK,val=N Задать/получить соленость, PSU
SOS T,R,W val=N SOS,OK,val=N Задать/получить скорость звука (м/с). Пустое значение/NaN = автоматический расчет
2.3.4.1. Определение маски адреса по адресам маяков

Система поддерживает работу с 16-ю маяками, адреса которых соответствуют числам от 1 до 16. Маска задается 16-ти битным числом, например, если опрашивается маяк с адресом 1, то в маске будет установлен только самый младший бит и ее значение будет 1.

Каждому маяку с адресом N можно сопоставить число равное 2^(N-1):

Адрес маяка Число Адрес маяка Число
1 1 9 256
2 2 10 512
3 4 11 1024
4 8 12 2048
5 16 13 4096
6 32 14 8192
7 64 15 16384
8 128 16 32768

Для вычисления маски адреса:

  1. Выберите из таблицы выше числа, соответствующие нужным маякам:
  2. Сложите эти числа, их сумма и будет маской адреса.

Например, если предполагается работать с маяками 1 и 2, то: Маска адреса будет: 1 + 2 = 3

Если нужно работать с маяками 2, 7 и 9 , то: Маска адреса будет: 2 + 64 + 256 = 322

2.3.5. Позиция

Команда Каналы Параметры Ответ Описание
LHO? T,R,W - LHO?,OK,
active=TRUE/FALSE
Получить статус ручного задания положения и ориентации
LHOV T,R,W lat=N,lon=N,hdg=N LHOV,OK Задачть положение и ориентацию антенны вручную (пустые параметры - отдключение функции)
OFS T,R,W x=N,y=N,phi=N OFS,OK,
x=N,y=N,phi=N
Получить/задать смещение антенны от точки топопривязки и угловое смещение нуля антенны от нуля компаса (X,Y в м, Phi в градусах)
SRC3 T,R,W mode=0/1/2,c0..c5=N SRC3,OK Задать координаты опорных маяков для LBL режима (0=discard,1=cartesian,2=geographic)

2.3.6. Конфигурация маяков

Команда Каналы Параметры Ответ Описание
RRA? T,R,W - RRA?,OK Получить текущий адрес маяка
SRRA T,R,W addr=N SRRA,OK Задать адрес маяка

2.3.7. Сервис

Команда Каналы Параметры Ответ Описание
EXIT T,R,W - EXIT,OK Завершить работу приложения
EXPCR T,R,W file=path EXPCR,OK Экспорт описания команд приложения в формате Markdown
HELP T,R,W cmd=? HELP,OK,commands=… Показать подсказку для всех или указанной команды
HKEYS T,R,W - HKEYS,OK,hotkeys=… Получить подсказку по горячим клавишам
PLAY T,R,W speed=0|1,file=path PLAY,OK Проиграть файл журнала (0=instant, 1=realtime, no params=stop)
RESETINIT T,R,W - RESETINIT,OK Удалить init.cmd - сбросить настроки по умолчанию
SAVE T,R,W file=path SAVE,OK Сохранить текущие настройки в скрипт
SAVEINIT T,R,W - SAVEINIT,OK Сохранить текущие настройки в инициализационный скрипт (init.cmd)
SCRIPT T file=path SCRIPT,OK Выполнить скрипт из указанного файла
STAT T,R,W - STAT,OK,azm_status=…,
interrogation=…,…
Получить краткий статус системы
VER T,R,W - VER,OK,version=… Получить информацию о версии приложения
WAIT T for=ACAL|CAL|OCON|DETECTED|N,
timeout=N,port=id
WAIT,OK Ожидание события: ACAL=завершение угловой калибровки, CAL=завершение поворотной калибровки, OCON=установка соединения, DETECTED=определение порта, N=таймаут мс

2.3.8. Управление файлами журналов

Команда Каналы Параметры Ответ Описание
DELGS T,R,W - DELGS,OK Удалить все файлы журналов и папки, кроме текущего
WEBLOG T,R,W on=TRUE/FALSE WEBLOG,OK Управление логгированием обмена с Веб-интерфейсом (по умолчанию OFF)

2.3.9. Конфигурация выходных данных

Команда Каналы Параметры Ответ Описание
OFMT? T,R,W - OFMT?,OK,format=… Получить описание формата выходных сообщений
PSIMSSB T,R,W on=TRUE/FALSE PSIMSSB,OK Вкл/Выкл эмуляцию протокола PSIMSSB (Simrad/HiPAP)

2.3.10. Калибровки

Команда Каналы Параметры Ответ Описание
ACAL T,R,W start=N,
end=N,step=N,
n=N,addr=N
ACAL,OK Начать калибровку углового смещения нулевого напрвления антенны и компаса
CAL? T,R,W - CAL?,OK,state=…,
points=N,total=N,
angle=N,
acal_state=…,
acal_collected=N,
acal_total=N,
[acal_phi=N]
Получить статус поворотной (SCAL) и угловой (ACAL) калибровок
FCAL T,R,W - FCAL,OK Прервать калибровку
SCAL T,R,W start=N,step=N,n=N SCAL,OK Начать калибровку антенны на поворотном устройстве (default: start=0,step=15,n=20)

Каналы: T=Terminal, R=RCTRL (UDP), W=Web

3. Веб-интерфейс

Приложение AzimuthConsole включает встроенный веб-сервер, который предоставляет графический интерфейс для мониторинга и управления системой Zima2. Веб-интерфейс доступен через любой современный браузер и не требует установки дополнительного ПО на клиентском устройстве.

3.1. Подключение

После запуска приложения веб-интерфейс доступен по адресу:

IP-адрес можно узнать командой:

Если приложение запущено на том же компьютере, с которого открывается браузер, используйте http://localhost:8080.

При проблемах с доступом из локальной сети на Windows-машине может потребоваться открыть порт в брандмауэре (см. раздел Настройка доступа из локальной сети).

3.2. Основные элементы интерфейса

Веб-интерфейс состоит из двух основных областей: карты (слева) и боковой панели (справа).

3.2.1. Карта

На карте отображается:

Элементы управления картой (правый верхний угол):

Кнопка Действие
+ Приблизить
Отдалить
Reset Сбросить масштаб и позицию
A Автомасштабирование (вкл/выкл) — подстраивает масштаб так, чтобы все маяки были видны
Открыть окно настроек

Взаимодействие с картой:

3.2.2. Командная строка

Расположена над картой по центру. Позволяет отправлять любые команды протокола AzimuthConsole напрямую.

Горячие клавиши командной строки:

Статус выполнения команды отображается под кнопками управления в боковой панели.

3.2.3. Боковая панель

Боковая панель (справа) содержит:

📡 Beacons — список обнаруженных маяков-ответчиков с детальной информацией по каждому:

Маяки группируются по адресам, для каждого отображается статус (активен/предупреждение/таймаут) и давность данных.

🎮 Control — кнопки управления:

📋 Log — журнал последних сообщений (до 8 записей). Доступны ссылки для скачивания:

В нижней части боковой панели — ссылки на GitHub, документацию и лицензию.

3.2.4. Информационные панели на карте

Панель статуса соединения (левый верхний угол):

Панель системной информации (левый верхний угол, под статусом):

Панель статуса портов — отображает состояние всех настроенных портов (AZM, AUX1, AUX2, RDT) с индикацией:

3.2.5. Панели калибровок

📡 Calibration — панель калибровки на поворотном устройстве (SCAL). Отображается только при подключенном устройстве RDT (поворотное устройство Радант). Содержит:

🔄 Angular Calibration — панель угловой калибровки (ACAL). Отображается при наличии активности (состояние отлично от idle или после завершения). Содержит:

3.3. Окно настроек

Открывается кнопкой на карте. Содержит вкладки:

🔌 Порты:

📤 Вывод:

📍 Позиция:

📡 Трансивер:

Кнопка Apply & Restart применяет настройки трансивера и перезапускает опрос маяков. Кнопка Apply All применяет все настройки и закрывает окно.

Сервисные кнопки:

3.4. Мобильная версия

Веб-интерфейс адаптирован для мобильных устройств. При ширине экрана менее 768px:

3.5. Языковая поддержка

Интерфейс поддерживает русский и английский языки. Язык определяется автоматически по настройкам браузера.

4. Выходные данные

4.1. AZMLOC - локальные параметры

Сообщение передается ~1 раз в секунду, когда открыто соединение с пеленгационной антенной или LBL-трансивером.

Формат сообщения:

@AZMLOC,stPressure_mBar,stDepth_m,waterTemp_C,stPitch_deg,stRoll_deg,age,lat_deg,lon_deg,course_deg,speed_mps,age,heading_deg,age,x_m,y_m,z_m,rerr_m,age,
Наименование параметра Тип Единицы измерения Диапазон значений Описание Источник
1 stPressure_mBar f32 мБар 0 .. 30 Внешнее давление Встроенный сенсор
2 stDepth_m f32 м 0 .. 300 Глубина погружения устройства Встроенный сенсор
3 waterTemp_C f32 °С -4 .. 40 Температура окружающей среды Встроенный сенсор
4 stPitch_deg f32 ° -180 .. 180 Крен Встроенный сенсор
5 stRoll_deg f32 ° -180 .. 180 Дифферент Встроенный сенсор
6 age f32 сек 0 .. Возраст предыдущих значений Системные часы
7 lat_deg f32 ° -90 .. 90 Географическая широта Внешний источник AUX1 или значение, заданное командой LHOV
8 lon_deg f32 ° -180 .. 180 Географическая долгота Внешний источник AUX1 или значение, заданное командой LHOV
9 course_deg f32 ° 0 .. 360 Курс движения Внешний источник AUX1
10 speed_mps f32 м/c 0 .. Скорость движения Внешний источник AUX1
11 age f32 сек 0 .. Возраст предыдущих значений Системные часы
12 heading_deg f32 ° 0 .. 360 Азимутальный угол Внешний источник AUX1 или AUX2 или значение, заданное командой LHOV
13 age f32 сек 0 .. Возраст предыдущего значения Системные часы
14 x_m f32 м   Вычисленное положение: координата X (Режим LBL) Расчетное значение
15 y_m f32 м   Вычисленное положение: координата Y (Режим LBL) Расчетное значение
16 z_m f32 м 0 .. 300 Глубина погружения устройства (Значение аналогично значению поля №2) Встроенный сенсор
17 rerr_m f32 м   Радиальная ошибка определения положения (Режим LBL) Расчетное значение
18 age f32 сек 0 .. Возраст предыдущих значений Системные часы

4.2. AZMREM - данные маяка-ответчика

Сообщение передается отдельно для каждого из маяков при обновлении информации - получении ответа маяка или при возникновении таймаута.

Формат сообщения:

@AZMREM,rem_addr,SRange_m,Azimuth_deg,PTime_s,MSR_dB,age,Depth_m,age,SRangeProjection_m,age,ADistance_m,age,AAzimuth_deg,age,Elevation_deg,age,VCC_V,age,WaterTemp_C,age,Lat_deg,Lon_deg,age,RAzimuth_deg,age,Message,age,X_m,Y_m,Z_m,IsTimeout
Наименование параметра Тип Единицы измерения Диапазон значений Описание Источник
1 rem_addr u8 - 0 .. 15 Адрес маяка-ответчика -
2 SRange_m f32 м 0 .. Наклонная дальность между антенной и маяком. Допускаются отрицательные значения Измерение
3 Azimuth_deg f32 ° 0 .. 360 Горизонтальный угол прихода сигнала маяка-ответчика относительно нулевого направления антенны Измерение
4 PTime_s f32 сек 0 .. Время распространения сигнала от маяка до антенны. Допускаются отрицательные значения Измерение
5 MSR_dB f32 дБ 14 .. Качество приема сигнала маяка-ответчика. Величины менее 20 дБ означают плохие условия Измерение
6 age f32 сек 0 .. Возраст предыдущих значений Cистемные часы
7 Depth_m f32 м 0 .. 300/350/500/1000 Глубина маяка-ответчика Встроенный сенсор маяка-ответчика
8 age f32 сек 0 .. Возраст предыдущего значения Системные часы
9 SRangeProjection_m f32 м 0 .. Проекция наклонной дальности на поверхность Расчетное значение
10 age f32 сек 0 .. Возраст предыдущего значения Системные часы
11 ADistance_m f32 м 0 .. Дальность от точки топопривязки до маяка-ответчика по поверхности воды Расчетное значение
12 age f32 сек 0 .. Возраст предыдущего значения Системные часы
13 AAzimuth_deg f32 ° 0 .. 360 Абсолютный азимут на маяк-ответчик из точки топопривязки Расчетное значение
14 age f32 сек 0 .. Возраст предыдущего значения Системные часы
15 Elevation_deg f32 ° 0 .. 360 Угол места маяка-ответчика Расчетное значение
16 age f32 сек 0 .. Возраст предыдущего значения Системные часы
17 VCC_V f32 В 4 .. 16 Напряжение питания маяка-ответчика Встроенный сенсор маяка-ответчика
18 age f32 сек 0 .. Возраст предыдущего значения Системные часы
19 WaterTemp_C f32 °С -4 .. 46 Температура окружающей среды Встроенный сенсор маяка-ответчика
20 age f32 сек 0 .. Возраст предыдущего значения Системные часы
21 Lat_deg f32 ° -90 .. 90 Географическая широта маяка-ответчика Расчетное значение
22 Lon_deg f32 ° -180 .. 180 Географическая долгота маяка-ответчика Расчетное значение
23 age f32 сек 0 .. Возраст предыдущих значений Системные часы
24 RAzimuth_deg f32 ° 0 .. 360 Абсолютный азимут на станцию от маяка-ответчика Расчетное значение
25 age f32 сек 0 .. Возраст предыдущего значения Системные часы
26 Message string - - Последнее сообщение от маяка-ответчика -
27 age f32 сек 0 .. Возраст предыдущего значения Системные часы
28 X_m f32 м - Положение в локальной декартовой системе координат: координата X (Режим LBL) Заданное пользователем
29 Y_m f32 м - Положение в локальной декартовой системе координат: координата Y (Режим LBL) Заданное пользователем
30 Z_m f32 м 0 .. 300/350/500/1000 Глубина маяка-ответчика Встроенный сенсор маяка-ответчика
31 IsTimeout bool/string   true/false Признак таймаута - превышения интервала ожидания ответа маяка-ответчика -

5. Вспомогательные утилиты

5.1. AzimuthUDPRemote - UDP-терминал

Демонстрационная утилита предназначена для быстрого ознакомления с возможностями удаленного управления приложением AzimuthConsole по протоколу UDP, если такая опция задействована. После старта приложения, пользователь может вводить команды, которые будут переданы в AzimuthConsole, результаты выполнния будут отображаться в окне приложения.

По умолчанию приложение прослушивает порт 28129, а передает данные по адресу 255.255.255.255:28127. Для задания иных значений их необходимо задать в качестве параметров командной строки. формат командной строки следующий:

AzimuthUDPRemote [in_port] [out_address:port]

Т.к. все пользовательские команды передаются по UPD, для управления самим приложением предусмотрены две дополнительные команды:

5.2. AzimuthUDPListener - UDP-приемник

Демонстрационная утилита предназначена для быстрого ознакомления с функцией передачи выходных данных (см. 3. Выходные данные) по протоколу UDP.

По умолчанию приложение прослушивает порт 28128 и выводит полученные данные в окно консоли. Для задания другого порта для получения данных от AzimuthConsole необходимо указать номер порта в качестве параметра командной строки при запуске приложения. Формат командной строки:

AzimuthUDPListener [in_port]

Для закрытия приложения необходимо нажать клавишу Enter.

6. Сценарии развертывания приложения

6.1. Настройка доступа из локальной сети

Если приложение запущено на Win-машине и нет доступа к серверу в локальной сети, выполнить:

7. Настройка RaspberryPi с автозапуском приложения

7.1. Что потребуется

7.2. Подготовка системы

7.2.1. Запись образа на SD карту

  1. Скачать Raspberry Pi Imager с официального сайта
  2. Выбрать: Raspberry Pi OS Lite — без рабочего стола, легче и быстрее
  3. В настройках (шестерёнка) можно сразу задать:
    • Имя хоста: myapp-server
    • Включить SSH
    • Логин/пароль
    • Wi-Fi сеть
  4. Записать образ на карту

7.2.2 Первый запуск и базовая настройка

# Подключение по SSH или напрямую и выполнить
sudo raspi-config

Что настроить:

После выхода — перезагрузка.

7.2.3 Обновление пакетов

sudo apt update && sudo apt upgrade -y

7.3. Установка приложения

7.3.1 Создание директории

sudo mkdir -p /opt/ac
sudo chown $USER:$USER /opt/ac

7.3.2 Копирование файлов с флешки

# Посмотреть список устройств
lsblk

# Примонтировать флешку (обычно /dev/sda1)
sudo mkdir -p /mnt/usb
sudo mount /dev/sda1 /mnt/usb

# Скопировать содержимое
cp -r /mnt/usb/* /opt/ac/

# Дать права на выполнение исполняемому файлу
chmod +x /opt/ac/AzimuthConsole

# Отмонтировать флешку
sudo umount /mnt/usb

7.3.3 Альтернатива: копирование по SCP с компьютера

# Выполняется НА КОМПЬЮТЕРЕ, не на Raspberry Pi
scp -r ./publish/* pi@192.168.1.XXX:/opt/ac/

7.4. Создание скриптов запуска

7.4.1 Скрипт для ручного запуска start.sh

nano /opt/ac/start.sh
#!/bin/bash
cd /opt/ac
./AzimuthConsole 

7.4.2. Скрипт для демона dstart.sh

nano /opt/ac/dstart.sh
#!/bin/bash
cd /opt/ac
./AzimuthConsole "daemon"

7.4.3. Права на выполнение

chmod +x /opt/ac/start.sh
chmod +x /opt/ac/dstart.sh

7.5. Настройка автозапуска (systemd)

7.5.1. Создание службы

sudo nano /etc/systemd/system/ac.service
[Unit]
Description=AzimuthConsole
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/ac
ExecStart=/opt/ac/dstart.sh
Restart=on-failure
RestartSec=10
TimeoutStopSec=30
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

7.5.2. Активация службы

sudo systemctl daemon-reload
sudo systemctl enable ac.service
sudo systemctl start ac.service

7.6. Проверка работы

7.6.1. Статус службы

sudo systemctl status ac.service

Должно быть: Active: active (running)

7.6.2. Просмотр логов

# Последние 50 строк
sudo journalctl -u ac.service -n 50 --no-pager

# В реальном времени
sudo journalctl -u ac.service -f

7.6.3. Узнать IP-адрес

hostname -I

7.6.4. Доступ из браузера

С любого устройства в сети: http://IP_АДРЕС:8080

7.7. Управление приложением

Действие Команда
Запустить sudo systemctl start ac.service
Остановить sudo systemctl stop ac.service
Перезапустить sudo systemctl restart ac.service
Статус sudo systemctl status ac.service
Включить автозапуск sudo systemctl enable ac.service
Отключить автозапуск sudo systemctl disable ac.service
Логи sudo journalctl -u ac.service -f

7.8. Обновление приложения

# 1. Остановить службу
sudo systemctl stop ac.service

# 2. Скопировать новые файлы (с флешки или SCP) в /opt/ac/

# 3. Обновить права
chmod +x /opt/ac/AzimuthConsole

# 4. Запустить службу
sudo systemctl start ac.service

# 5. Проверить статус
sudo systemctl status ac.service

7.9. Полезные команды

# Перезагрузка Raspberry Pi
sudo reboot

# Выключение
sudo shutdown -h now

# Информация о системе
uname -a
cat /etc/os-release

# Свободное место
df -h

# Процессы
htop  # если установлен, иначе top

7.10. Возможные проблемы и решения

Проблема Решение
Служба падает с exited Проверить логи: journalctl -u ac.service -n 50
failed to determine user credentials Исправить User=root в /etc/systemd/system/ac.service
Приложение не запускается вручную Проверить права: chmod +x /opt/ac/AzimuthConsole
Не та архитектура Собрать под linux-arm: dotnet publish -r linux-arm

Дополнительная информация:

Гайд актуален на 2026 год для Raspberry Pi OS Lite

8. Запуск в качестве службы Windows

8.1. Пошаговая инструкция

  1. Открыть командную строку от имени администратора: Нажми Win, введи cmd, кликни правой кнопкой мыши и выбери “Запуск от имени администратора”.

  2. Создать службу (заменить пути на свои): Выполнить следующую команду. Здесь binPath= — это путь к .exe файлу, а start= auto означает автоматический запуск при старте системы .
    sc create "AzimuthConsoleService" binPath= "\"C:\opt\ac\AzimuthConsole.exe\" daemon start= auto
    

    Важно: Пробел после = в параметрах binPath= и start= обязателен.

  3. Настроить службу: Чтобы она перезапускалась при сбоях (как Restart=on-failure в systemd юните):
    sc failure "AzimuthConsoleService" reset= 86400 actions= restart/60000/restart/60000/restart/60000
    
    • reset= 86400 — сброс счётчика ошибок через сутки.
    • actions= restart/60000 — перезапуск через 60 секунд после падения (и так до трёх раз).
  4. Запустить службу:
    sc start "AzimuthConsoleService"
    

8.2. Альтернативный вариант через bat-файл

  1. Создаnm файл C:\opt\ac\dstart.bat
C:\opt\ac\AzimuthConsole.exe daemon
  1. Команда инициализации сервиса
    sc create "AzimuthConsoleService" binPath= "C:\opt\ac\dstart.bat" start= auto
    

8.3. Управление и проверка

Ключевое отличие от Linux: Если приложение имеет графический интерфейс (GUI), создавать службу не нужно — Windows Service не предназначены для взаимодействия с рабочим столом. В этом случае достаточно добавить ярлык приложения в папку автозагрузки (shell:startup), и оно будет запускаться при входе пользователя в систему.

9. Скрипты

Для того, чтобы иметь возможность при запуске задавать требуемый набор настроек или выполнять какие-либо однотипные действия, приложение поддерживает обработку скриптов и сохранение текущих настроек в виде скрипта - последовательности команд, задающих требуемые настройки. По сути скрипты - это файлы, в которых каждая строка представляет одну команду управления.

При запуске приложение пытается выполнить инициализационный скрипт с фиксированным именем init.cmd. При отсутствие такого файла будут использованы настройки по умолчанию. Для удаления инициализирующего скрипта предназначена команда RESETINIT. А для сохранения текущих настроек в инициализирующий скрипт можно воспользоваться командой SAVEINIT.

Выполнение произвольного скрипта осуществляется командой SCRIPT,file=path. Таким образом, чтобы задать все настройки нет необходимости указывать их в командной строке, достаточно лишь указать одну команду SCRIPT с соответствующим файлом в качестве параметра file.

Это удобно, например, когда требуется отработка разных сценариев, подразумевающих разные конфигурации системы - с наличием внешних поставщиков навигационных данных и без, с заданием положения антенны и ее ориентации относительно направления на север вручную или без такового, для работы в режиме USBL или LBL, для разных наборов маяков-ответчиков и т.п.

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

Для полноценной работы скриптов, в частности, для реализации механизма ожидания событий, используется команды WAIT. В качестве события, могут быть:

Полное описание формата команды приведено в таблице 2.3.7. Сервис.

Еще одной важной командой для автоматизации работы является команда SAVE,file=path - данная команда позволяет сохранить текущие настройки приложения в виде скрипта, который затем, может быть использован для запуска приложения с указанными настройками. Команда SAVEINIT эквивалентна команде SAVE,file=init.cmd.

К содержанию