Главная ❯ Гидроакустические навигационные и трекинговые системы ❯ AzimuthConsole: Руководство пользователя
![]() |
|
|---|---|
| www.unavlab.com support@unavlab.com |
AzimuthConsole - Кроссплатформенное приложение для работы с системой Zima2 USBL Руководство пользователя |
Приложение предназначено для работы с системами Zima2:
Репозиторий
Полный список релизов.
Для удобства использования приложения поддерживаются следующие горячие клавиши для наиболее часто используемых команд:
| Сочетание клавиш | Действие |
|---|---|
| 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: Закрыть приложение |
Приложение не использует никаких алгоритмов шифрования, обфускации, скрытого хранения и передачи информации.
Приложение ведет журнал информационного обмена по всем каналам связи, это означает, что в них в открытом виде может содержаться информация о местоположении.
По умолчанию запись в журнал обмена с Web-интерфейсом отключена в целях экономии места, для управления включением/отключением записи информационного обмена с Web-интерфейсом служит команда weblog,on=TRUE|FALSE.
При старте приложение подсчитывает место на диске, занимаемое всеми файлами журналов, и если оно превышает 100 Мб, то удаляются журналы, начиная с самых старых, до тех пор, пока занимаемое место не станет ниже указанной границы.
Новый журнал создается при старте приложения автоматически, согласно текущей системной дате и времени: appPath\log\YYYY-MM-DD\hh-mm-ss.log.
Для управления приложением используется текстовый протокол с именованными параметрами. Такой подход обеспечивает преимущества:
| Свойство | Описание |
|---|---|
| Транспорт | Локальный (консоль), 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-команд) |
→ 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
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| 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) |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| 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 каналов для маяков |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| ITG? | T,R,W | - | ITG?,OK, active=TRUE/FALSE |
Получить статус запросов |
| PITG | T,R,W | - | PITG,OK | Приостановить запрос маяков |
| RITG | T,R,W | - | RITG,OK | Возобновить запрос маяков |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| 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 = автоматический расчет |
Система поддерживает работу с 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 = 3
Если нужно работать с маяками 2, 7 и 9 , то: Маска адреса будет: 2 + 64 + 256 = 322
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| 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) |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| RRA? | T,R,W | - | RRA?,OK | Получить текущий адрес маяка |
| SRRA | T,R,W | addr=N | SRRA,OK | Задать адрес маяка |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| 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=таймаут мс |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| DELGS | T,R,W | - | DELGS,OK | Удалить все файлы журналов и папки, кроме текущего |
| WEBLOG | T,R,W | on=TRUE/FALSE | WEBLOG,OK | Управление логгированием обмена с Веб-интерфейсом (по умолчанию OFF) |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| OFMT? | T,R,W | - | OFMT?,OK,format=… | Получить описание формата выходных сообщений |
| PSIMSSB | T,R,W | on=TRUE/FALSE | PSIMSSB,OK | Вкл/Выкл эмуляцию протокола PSIMSSB (Simrad/HiPAP) |
| Команда | Каналы | Параметры | Ответ | Описание |
|---|---|---|---|---|
| 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
Приложение AzimuthConsole включает встроенный веб-сервер, который предоставляет графический интерфейс для мониторинга и управления системой Zima2. Веб-интерфейс доступен через любой современный браузер и не требует установки дополнительного ПО на клиентском устройстве.
После запуска приложения веб-интерфейс доступен по адресу:
IP-адрес можно узнать командой:
ipconfighostname -I или ip aЕсли приложение запущено на том же компьютере, с которого открывается браузер, используйте http://localhost:8080.
При проблемах с доступом из локальной сети на Windows-машине может потребоваться открыть порт в брандмауэре (см. раздел Настройка доступа из локальной сети).
Веб-интерфейс состоит из двух основных областей: карты (слева) и боковой панели (справа).
На карте отображается:
Элементы управления картой (правый верхний угол):
| Кнопка | Действие |
|---|---|
| + | Приблизить |
| − | Отдалить |
| Reset | Сбросить масштаб и позицию |
| A | Автомасштабирование (вкл/выкл) — подстраивает масштаб так, чтобы все маяки были видны |
| ⚙ | Открыть окно настроек |
Взаимодействие с картой:
Расположена над картой по центру. Позволяет отправлять любые команды протокола AzimuthConsole напрямую.
Горячие клавиши командной строки:
Статус выполнения команды отображается под кнопками управления в боковой панели.
Боковая панель (справа) содержит:
📡 Beacons — список обнаруженных маяков-ответчиков с детальной информацией по каждому:
Маяки группируются по адресам, для каждого отображается статус (активен/предупреждение/таймаут) и давность данных.
🎮 Control — кнопки управления:
📋 Log — журнал последних сообщений (до 8 записей). Доступны ссылки для скачивания:
В нижней части боковой панели — ссылки на GitHub, документацию и лицензию.
Панель статуса соединения (левый верхний угол):
Панель системной информации (левый верхний угол, под статусом):
Панель статуса портов — отображает состояние всех настроенных портов (AZM, AUX1, AUX2, RDT) с индикацией:
📡 Calibration — панель калибровки на поворотном устройстве (SCAL). Отображается только при подключенном устройстве RDT (поворотное устройство Радант). Содержит:
🔄 Angular Calibration — панель угловой калибровки (ACAL). Отображается при наличии активности (состояние отлично от idle или после завершения). Содержит:
Открывается кнопкой ⚙ на карте. Содержит вкладки:
🔌 Порты:
📤 Вывод:
📍 Позиция:
📡 Трансивер:
Кнопка Apply & Restart применяет настройки трансивера и перезапускает опрос маяков. Кнопка Apply All применяет все настройки и закрывает окно.
Сервисные кнопки:
Веб-интерфейс адаптирован для мобильных устройств. При ширине экрана менее 768px:
Интерфейс поддерживает русский и английский языки. Язык определяется автоматически по настройкам браузера.
Сообщение передается ~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 .. | Возраст предыдущих значений | Системные часы |
Сообщение передается отдельно для каждого из маяков при обновлении информации - получении ответа маяка или при возникновении таймаута.
Формат сообщения:
@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 | Признак таймаута - превышения интервала ожидания ответа маяка-ответчика | - |
Демонстрационная утилита предназначена для быстрого ознакомления с возможностями удаленного управления приложением AzimuthConsole по протоколу UDP, если такая опция задействована. После старта приложения, пользователь может вводить команды, которые будут переданы в AzimuthConsole, результаты выполнния будут отображаться в окне приложения.
По умолчанию приложение прослушивает порт 28129, а передает данные по адресу 255.255.255.255:28127. Для задания иных значений их необходимо задать в качестве параметров командной строки. формат командной строки следующий:
AzimuthUDPRemote [in_port] [out_address:port]
Т.к. все пользовательские команды передаются по UPD, для управления самим приложением предусмотрены две дополнительные команды:
Демонстрационная утилита предназначена для быстрого ознакомления с функцией передачи выходных данных (см. 3. Выходные данные) по протоколу UDP.
По умолчанию приложение прослушивает порт 28128 и выводит полученные данные в окно консоли. Для задания другого порта для получения данных от AzimuthConsole необходимо указать номер порта в качестве параметра командной строки при запуске приложения. Формат командной строки:
AzimuthUDPListener [in_port]
Для закрытия приложения необходимо нажать клавишу Enter.
cmd > ipconfig, в строке с IPv4 Addressip a или hostname -Iping <ip-адресс>http://<ip-адресс>:8080Если приложение запущено на Win-машине и нет доступа к серверу в локальной сети, выполнить:
New-NetFirewallRule -DisplayName "WebServer 8080" -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allowlinux-arm) или ARM64 (linux-arm64)myapp-server# Подключение по SSH или напрямую и выполнить
sudo raspi-config
Что настроить:
System Options → Password — сменить парольSystem Options → Hostname — задать удобное имя в сетиSystem Options → Boot / Auto Login → Console AutologinLocalisation Options → Timezone — установить часовой поясInterface Options → SSH — включить если не включеноПосле выхода — перезагрузка.
sudo apt update && sudo apt upgrade -y
sudo mkdir -p /opt/ac
sudo chown $USER:$USER /opt/ac
# Посмотреть список устройств
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
# Выполняется НА КОМПЬЮТЕРЕ, не на Raspberry Pi
scp -r ./publish/* pi@192.168.1.XXX:/opt/ac/
start.shnano /opt/ac/start.sh
#!/bin/bash
cd /opt/ac
./AzimuthConsole
dstart.shnano /opt/ac/dstart.sh
#!/bin/bash
cd /opt/ac
./AzimuthConsole "daemon"
chmod +x /opt/ac/start.sh
chmod +x /opt/ac/dstart.sh
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
sudo systemctl daemon-reload
sudo systemctl enable ac.service
sudo systemctl start ac.service
sudo systemctl status ac.service
Должно быть: Active: active (running)
# Последние 50 строк
sudo journalctl -u ac.service -n 50 --no-pager
# В реальном времени
sudo journalctl -u ac.service -f
hostname -I
С любого устройства в сети: http://IP_АДРЕС:8080
| Действие | Команда |
|---|---|
| Запустить | 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 |
# 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
# Перезагрузка Raspberry Pi
sudo reboot
# Выключение
sudo shutdown -h now
# Информация о системе
uname -a
cat /etc/os-release
# Свободное место
df -h
# Процессы
htop # если установлен, иначе top
| Проблема | Решение |
|---|---|
Служба падает с 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 |
Дополнительная информация:
hostname -I/opt/ac//etc/systemd/system/ac.serviceГайд актуален на 2026 год для Raspberry Pi OS Lite
Открыть командную строку от имени администратора:
Нажми Win, введи cmd, кликни правой кнопкой мыши и выбери “Запуск от имени администратора”.
binPath= — это путь к .exe файлу, а start= auto означает автоматический запуск при старте системы .
sc create "AzimuthConsoleService" binPath= "\"C:\opt\ac\AzimuthConsole.exe\" daemon start= auto
Важно: Пробел после = в параметрах binPath= и start= обязателен.
Restart=on-failure в systemd юните):
sc failure "AzimuthConsoleService" reset= 86400 actions= restart/60000/restart/60000/restart/60000
reset= 86400 — сброс счётчика ошибок через сутки.actions= restart/60000 — перезапуск через 60 секунд после падения (и так до трёх раз).sc start "AzimuthConsoleService"
C:\opt\ac\dstart.batC:\opt\ac\AzimuthConsole.exe daemon
sc create "AzimuthConsoleService" binPath= "C:\opt\ac\dstart.bat" start= auto
sc query "AzimuthConsoleService"
Win + R, ввести services.msc и нажать Enter. В открывшемся окне найти службу “MyAppService”, где можно будет запустить, остановить или изменить её свойства вручную .Ключевое отличие от Linux:
Если приложение имеет графический интерфейс (GUI), создавать службу не нужно — Windows Service не предназначены для взаимодействия с рабочим столом. В этом случае достаточно добавить ярлык приложения в папку автозагрузки (shell:startup), и оно будет запускаться при входе пользователя в систему.
Для того, чтобы иметь возможность при запуске задавать требуемый набор настроек или выполнять какие-либо однотипные действия, приложение поддерживает обработку скриптов и сохранение текущих настроек в виде скрипта - последовательности команд, задающих требуемые настройки. По сути скрипты - это файлы, в которых каждая строка представляет одну команду управления.
При запуске приложение пытается выполнить инициализационный скрипт с фиксированным именем init.cmd.
При отсутствие такого файла будут использованы настройки по умолчанию.
Для удаления инициализирующего скрипта предназначена команда RESETINIT. А для сохранения текущих настроек в инициализирующий скрипт можно воспользоваться командой SAVEINIT.
Выполнение произвольного скрипта осуществляется командой SCRIPT,file=path.
Таким образом, чтобы задать все настройки нет необходимости указывать их в командной строке, достаточно лишь указать одну команду SCRIPT с соответствующим файлом в качестве параметра file.
Это удобно, например, когда требуется отработка разных сценариев, подразумевающих разные конфигурации системы - с наличием внешних поставщиков навигационных данных и без, с заданием положения антенны и ее ориентации относительно направления на север вручную или без такового, для работы в режиме USBL или LBL, для разных наборов маяков-ответчиков и т.п.
Скрипт может содержать комментарии - строки, начинающиеся с символа # и пустые строки - и те и другие игнрорируются при выполнении.
Для полноценной работы скриптов, в частности, для реализации механизма ожидания событий, используется команды WAIT. В качестве события, могут быть:
ACAL - завершение угловой калибровкиCAL - заверешение калибровки на поворотном устройствеOCON - открытие соединенияDETECTED - определение заданного устройства
Команда поддерживает задание максимального интервала ожидания - таймаута, по истечении которого событие считается произошедшим.Полное описание формата команды приведено в таблице 2.3.7. Сервис.
Еще одной важной командой для автоматизации работы является команда SAVE,file=path - данная команда позволяет сохранить текущие настройки приложения в виде скрипта, который затем, может быть использован для запуска приложения с указанными настройками. Команда SAVEINIT эквивалентна команде SAVE,file=init.cmd.