mirror of
https://github.com/eddyem/astrovideoguide_v3.git
synced 2025-12-06 10:45:10 +03:00
Added documentation
This commit is contained in:
parent
39b9cee77c
commit
b2a3d68513
0
LocCorr/DEBUG.log.analyze
Executable file → Normal file
0
LocCorr/DEBUG.log.analyze
Executable file → Normal file
@ -29,8 +29,8 @@ static char *conffile = NULL; // configuration file name
|
|||||||
configuration theconf = {
|
configuration theconf = {
|
||||||
.maxUsteps=DEFAULT_MAXUSTEPS,
|
.maxUsteps=DEFAULT_MAXUSTEPS,
|
||||||
.maxVsteps=DEFAULT_MAXVSTEPS,
|
.maxVsteps=DEFAULT_MAXVSTEPS,
|
||||||
.maxFpos=Fmaxsteps,
|
.maxFpos=Fmaxsteps-1,
|
||||||
.minFpos=0,
|
.minFpos=-Fmaxsteps+1,
|
||||||
.minarea=DEFAULT_MINAREA,
|
.minarea=DEFAULT_MINAREA,
|
||||||
.maxarea=DEFAULT_MAXAREA,
|
.maxarea=DEFAULT_MAXAREA,
|
||||||
.maxwh = 1.1,
|
.maxwh = 1.1,
|
||||||
@ -52,9 +52,9 @@ configuration theconf = {
|
|||||||
.xtarget=-1,
|
.xtarget=-1,
|
||||||
.ytarget=-1,
|
.ytarget=-1,
|
||||||
.throwpart=DEFAULT_THROWPART,
|
.throwpart=DEFAULT_THROWPART,
|
||||||
.maxexp=EXPOS_MAX + DBL_EPSILON,
|
.maxexp=EXPOS_MAX - 1.,
|
||||||
.minexp=EXPOS_MIN - DBL_EPSILON,
|
.minexp=EXPOS_MIN + DBL_EPSILON,
|
||||||
.fixedexp=EXPOS_MIN,
|
.fixedexp=EXPOS_MIN*2,
|
||||||
.gain = 20.,
|
.gain = 20.,
|
||||||
.intensthres=DEFAULT_INTENSTHRES,
|
.intensthres=DEFAULT_INTENSTHRES,
|
||||||
.medseed=MIN_MEDIAN_SEED,
|
.medseed=MIN_MEDIAN_SEED,
|
||||||
|
|||||||
Binary file not shown.
@ -1,13 +1,16 @@
|
|||||||
\documentclass[a4paper,12pt]{extarticle}
|
\documentclass[a4paper,12pt]{extarticle}
|
||||||
\usepackage{/home/eddy/ed}
|
\usepackage{/home/eddy/ed}
|
||||||
|
\usepackage{afterpage}
|
||||||
|
\usepackage{longtable}
|
||||||
|
|
||||||
\def\t#1{\texttt{#1}}
|
\def\t#1{\texttt{#1}}
|
||||||
\def\look#1{(см.\,стр.\,\pageref{#1}, п.\,\ref{#1})}
|
\def\look#1{(см.\,стр.\,\pageref{#1}, п.\,\ref{#1})}
|
||||||
\nocolon
|
\nocolon
|
||||||
|
|
||||||
|
\author{Емельянов Э.~В. \and Фатхуллин Т.~А.}
|
||||||
\title{Система управления оптоволоконным спектрографом 1-м телескопа}
|
\title{Система управления оптоволоконным спектрографом 1-м телескопа}
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\maketitle
|
\maketitle\tableofcontents
|
||||||
\section{Описание}
|
\section{Описание}
|
||||||
Основой системы управления прибором является мини-компьютер под управлением ОС Gentoo Linux, расположенного
|
Основой системы управления прибором является мини-компьютер под управлением ОС Gentoo Linux, расположенного
|
||||||
на подвесной части. В подвесной части расположены три шаговых двигателя (управляются по CAN-шине): управление
|
на подвесной части. В подвесной части расположены три шаговых двигателя (управляются по CAN-шине): управление
|
||||||
@ -25,6 +28,16 @@
|
|||||||
Данный демон\footnote{\url{https://github.com/eddyem/astrovideoguide_v3/tree/main/LocCorr}} предназначен для анализа
|
Данный демон\footnote{\url{https://github.com/eddyem/astrovideoguide_v3/tree/main/LocCorr}} предназначен для анализа
|
||||||
изображений, определения координат центроидов и выдачи управляющих сигналов на корректирующую аппаратуру.
|
изображений, определения координат центроидов и выдачи управляющих сигналов на корректирующую аппаратуру.
|
||||||
|
|
||||||
|
Для сборки утилиты используется \t{cmake}: в рабочей директории проекта создается поддиректория, далее в ней
|
||||||
|
необходимо запустить \t{cmake ..}, после чего~-- \t{make} и \t{su -c "make install"}. Утилита имеет следующие зависимости:
|
||||||
|
\begin{description}
|
||||||
|
\item[libusefull\_macros] библиотека\footnote{\url{https://github.com/eddyem/snippets\_library}} с функциями парсинга
|
||||||
|
командной строки, отладочными макросами, логгированием и т.п.;
|
||||||
|
\item[libcfitsio] для работы с FITS-файлами;
|
||||||
|
\item[libflycapture и libflycapture-c] поддержка светоприемников Grasshopper;
|
||||||
|
\item[набор библиотек pylonbase] поддержка светоприемников Basler.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
В качестве входных изображений могут быть файлы формата FITS, JPEG или PNG (посредством \t{inotify} производится
|
В качестве входных изображений могут быть файлы формата FITS, JPEG или PNG (посредством \t{inotify} производится
|
||||||
мониторинг обновления одного файла либо появления новых файлов в указанной директории), CMOS-светоприемники
|
мониторинг обновления одного файла либо появления новых файлов в указанной директории), CMOS-светоприемники
|
||||||
Basler или Grasshopper. Возможно добавление других источников, для этого необходимо в директории проекта создать
|
Basler или Grasshopper. Возможно добавление других источников, для этого необходимо в директории проекта создать
|
||||||
@ -70,36 +83,63 @@ Basler
|
|||||||
|
|
||||||
\subsubsection{Аргументы командной строки демона}
|
\subsubsection{Аргументы командной строки демона}
|
||||||
\begin{description}
|
\begin{description}
|
||||||
\item[-A, --maxarea=arg]
максимальная площадь (в пикселях) объекта (по умолчанию~150000);
|
\item[-A, --maxarea=arg]
|
||||||
\item[-C, --canport=arg]
порт локального сервера \t{canserver} (по умолчанию~4444);
|
максимальная площадь (в пикселях) объекта (по умолчанию~150000);
|
||||||
\item[-D, --ndilat=arg]
количество дилатаций при обработке изображения (по умолчанию~2);
|
\item[-C, --canport=arg]
|
||||||
\item[-E, --neros=arg]
количество эрозий при обработке изображения (по умолчанию~2);
|
порт локального сервера \t{canserver} (по умолчанию~4444);
|
||||||
\item[-H, --height=arg]
высота рабочего участка изображения;
|
\item[-D, --ndilat=arg]
|
||||||
\item[-I, --minarea=arg]
минимальная площадь (в пикселях) объекта (по умолчанию~400);
|
количество дилатаций при обработке изображения (по умолчанию~2);
|
||||||
\item[-L, --logXY=arg]
файл для логгирования вычисленных координат центроидов;
|
\item[-E, --neros=arg]
|
||||||
\item[-N, --naverage=arg]
количество изображений для вычисления средних координат центроида (от~1 до~25);
|
количество эрозий при обработке изображения (по умолчанию~2);
|
||||||
\item[-P, --pidfile=arg]
файл с PID сервера (по умолчанию \t{/tmp/loccorr.pid});
|
\item[-H, --height=arg]
|
||||||
\item[-T, --intthres=arg]
порог яркости изображений при сортировке ($(I_1-I_2)/(I_1+I_2)$, по умолчанию~0.01)
|
высота рабочего участка изображения;
|
||||||
\item[-W, --width=arg]
ширина рабочего участка изображения;
|
\item[-I, --minarea=arg]
|
||||||
\item[-X, --xtarget=arg]
координата~$X$ цели (оптоволокна, щели);
|
минимальная площадь (в пикселях) объекта (по умолчанию~400);
|
||||||
\item[-Y, --ytarget=arg]
координата~$Y$ цели;
|
\item[-L, --logXY=arg]
|
||||||
\item[-b, --blackp=arg]
доля пикселей с низкой интенсивностью, которая будет отброшена при эквализации гистограммы
|
файл для логгирования вычисленных координат центроидов;
|
||||||
|
\item[-N, --naverage=arg]
|
||||||
|
количество изображений для вычисления средних координат центроида (от~1 до~25);
|
||||||
|
\item[-P, --pidfile=arg]
|
||||||
|
файл с PID сервера (по умолчанию \t{/tmp/loccorr.pid});
|
||||||
|
\item[-T, --intthres=arg]
|
||||||
|
порог яркости изображений при сортировке ($(I_1-I_2)/(I_1+I_2)$, по умолчанию~0.01)
|
||||||
|
\item[-W, --width=arg]
|
||||||
|
ширина рабочего участка изображения;
|
||||||
|
\item[-X, --xtarget=arg]
|
||||||
|
координата~$X$ цели (оптоволокна, щели);
|
||||||
|
\item[-Y, --ytarget=arg]
|
||||||
|
координата~$Y$ цели;
|
||||||
|
\item[-b, --blackp=arg]
|
||||||
|
доля пикселей с низкой интенсивностью, которая будет отброшена при эквализации гистограммы
|
||||||
(если включена эквализация обработанного кадра);
|
(если включена эквализация обработанного кадра);
|
||||||
\item[-c, --confname=arg]
имя файла конфигурации (по умолчанию \t{loccorr.conf});
|
\item[-c, --confname=arg]
|
||||||
\item[-e, --equalize]
выполнять эквализацию обработанного кадра;
|
имя файла конфигурации (по умолчанию \t{loccorr.conf});
|
||||||
\item[-h, --help]
вызвать данную справку;
|
\item[-e, --equalize]
|
||||||
\item[-i, --input=arg]
название объекта для мониторинга новых изображений (имя файла или директории,
|
выполнять эквализацию обработанного кадра;
|
||||||
|
\item[-h, --help]
|
||||||
|
вызвать данную справку;
|
||||||
|
\item[-i, --input=arg]
|
||||||
|
название объекта для мониторинга новых изображений (имя файла или директории,
|
||||||
<<grasshopper>> или <<basler>> при захвате с КМОП-камеры);
|
<<grasshopper>> или <<basler>> при захвате с КМОП-камеры);
|
||||||
\item[-j, --jpegout=arg]
название файла, куда будет записано обработанное изображение (по умолчанию
|
\item[-j, --jpegout=arg]
|
||||||
|
название файла, куда будет записано обработанное изображение (по умолчанию
|
||||||
\t{./outpWcrosses.jpg});
|
\t{./outpWcrosses.jpg});
|
||||||
\item[-l, --logfile=arg]
файл, в который будет вестись логгирование;
|
\item[-l, --logfile=arg]
|
||||||
\item[-p, --proc=arg]
имя модуля процессинга коррекций (<<pusirobo>>);
|
файл, в который будет вестись логгирование;
|
||||||
\item[-v, --verbose]
повысить уровень информативности логгирования (каждый~\t{-v} повышает на~1);
|
\item[-p, --proc=arg]
|
||||||
\item[-x, --xoff=arg]
сдвиг по оси~$X$ рабочего участка изображения;
|
имя модуля процессинга коррекций (<<pusirobo>>);
|
||||||
\item[-y, --yoff=arg]
сдвиг по оси~$Y$ рабочего участка изображения;
|
\item[-v, --verbose]
|
||||||
\item[--ioport=arg]
номер порта сокета для подключения управления (по умолчанию 12345);
|
повысить уровень информативности логгирования (каждый~\t{-v} повышает на~1);
|
||||||
\item[--maxexp=arg]
максимальная экспозиция (в миллисекундах, по умолчанию 500);
|
\item[-x, --xoff=arg]
|
||||||
\item[--minexp=arg]
минимальная экспозиция (в миллисекундах, по умолчанию 0.001).
|
сдвиг по оси~$X$ рабочего участка изображения;
|
||||||
|
\item[-y, --yoff=arg]
|
||||||
|
сдвиг по оси~$Y$ рабочего участка изображения;
|
||||||
|
\item[--ioport=arg]
|
||||||
|
номер порта сокета для подключения управления (по умолчанию 12345);
|
||||||
|
\item[--maxexp=arg]
|
||||||
|
максимальная экспозиция (в миллисекундах, по умолчанию 500);
|
||||||
|
\item[--minexp=arg]
|
||||||
|
минимальная экспозиция (в миллисекундах, по умолчанию 0.001).
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
\subsubsection{Конфигурационные параметры}
|
\subsubsection{Конфигурационные параметры}
|
||||||
@ -281,7 +321,8 @@ relay=newval - Send relay commands (Rx=0/1, PWMX=0..255)
|
|||||||
\t{moveU} и \t{moveV}~--- относительные значения. Если требуемое значение за диапазоном перемещения, будет
|
\t{moveU} и \t{moveV}~--- относительные значения. Если требуемое значение за диапазоном перемещения, будет
|
||||||
возвращено \t{FAILED}.
|
возвращено \t{FAILED}.
|
||||||
|
|
||||||
\subsubsection{Калибровка корректора положения звезды}
|
|
||||||
|
\subsubsection{Калибровка корректора положения звезды}
|
||||||
Калибровка выполняется автоматически в режиме \t{stpstate=setup}. Для начала ее проведения необходимо установить
|
Калибровка выполняется автоматически в режиме \t{stpstate=setup}. Для начала ее проведения необходимо установить
|
||||||
все подвижки в среднее положение, навести телескоп на относительно яркую звезду, сфокусироваться телескопом,
|
все подвижки в среднее положение, навести телескоп на относительно яркую звезду, сфокусироваться телескопом,
|
||||||
установить звезду как можно более близко к метке рабочего оптоволокна и включить процедуру калибровки.
|
установить звезду как можно более близко к метке рабочего оптоволокна и включить процедуру калибровки.
|
||||||
@ -396,9 +437,14 @@ $$
|
|||||||
разные порты USB. В случае, если базовое устройство перестанет корректно работать, автоматически произойдет
|
разные порты USB. В случае, если базовое устройство перестанет корректно работать, автоматически произойдет
|
||||||
переподключение к резервному.
|
переподключение к резервному.
|
||||||
|
|
||||||
|
Компилируется при помощи \t{cmake}. Из внешних зависимостей имеет лишь библиотеку
|
||||||
|
\t{libusefull\_macros}\footnote{\url{https://github.com/eddyem/snippets\_library}} .
|
||||||
|
|
||||||
\subsubsection{Аргументы командной строки}
|
\subsubsection{Аргументы командной строки}
|
||||||
\begin{description}
|
|
||||||
\item[-P, --pid=arg] PID устройства преобразователя;
|
\begin{description}
|
||||||
|
|
||||||
|
\item[-P, --pid=arg] PID устройства преобразователя;
|
||||||
\item[-V, --vid=arg] VID устройства;
|
\item[-V, --vid=arg] VID устройства;
|
||||||
\item[-e, --echo] включить опцию <<эха>> введенных пользователем команд;
|
\item[-e, --echo] включить опцию <<эха>> введенных пользователем команд;
|
||||||
\item[-i, --device=arg] название файла устройства преобразователя;
|
\item[-i, --device=arg] название файла устройства преобразователя;
|
||||||
@ -408,7 +454,8 @@ $$
|
|||||||
\item[-s, --speed=arg] скорость соединения по CAN-шине (в бодах);
|
\item[-s, --speed=arg] скорость соединения по CAN-шине (в бодах);
|
||||||
\item[-v, --verbose] повысить уровень подробностей логгирования (каждая \t{-v} повышает уровень на 1);
|
\item[-v, --verbose] повысить уровень подробностей логгирования (каждая \t{-v} повышает уровень на 1);
|
||||||
\item[--pidfile=arg] имя PID-файла процесса (по умолчанию: \t{/tmp/canserver.pid}).
|
\item[--pidfile=arg] имя PID-файла процесса (по умолчанию: \t{/tmp/canserver.pid}).
|
||||||
\end{description}
|
|
||||||
|
\end{description}
|
||||||
|
|
||||||
\subsubsection{Сетевой протокол}
|
\subsubsection{Сетевой протокол}
|
||||||
В целях безопасности сетевое соединение для подключения клиентов открывается исключительно на локальном
|
В целях безопасности сетевое соединение для подключения клиентов открывается исключительно на локальном
|
||||||
@ -543,8 +590,11 @@ application because of the present device state'
|
|||||||
всем подключенным клиентам.
|
всем подключенным клиентам.
|
||||||
|
|
||||||
|
|
||||||
%\subsection{Демон \t{spec\_server}}
|
\subsection{Демон \t{spec\_server}}
|
||||||
%ТИМУР?
|
\input{spec_server.tex}
|
||||||
|
|
||||||
|
\subsection{Интерфейс наблюдателя}
|
||||||
|
\input{webinterface.tex}
|
||||||
|
|
||||||
\section{Электронные компоненты}
|
\section{Электронные компоненты}
|
||||||
\subsection{Преобразователь USB--CAN}\label{canusb}
|
\subsection{Преобразователь USB--CAN}\label{canusb}
|
||||||
@ -718,4 +768,41 @@ typedef enum{
|
|||||||
запуска микроконтроллера (little endian \t{uint32\_t}).
|
запуска микроконтроллера (little endian \t{uint32\_t}).
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
|
\section{Запуск утилит в автоматическом режиме}
|
||||||
|
Управляющий узлами спектрографа мини-ПК установлен на подвесной части. При подключении к новой сети
|
||||||
|
необходимо сначала сконфигурировать сетевой интерфейс. По умолчанию LAN1 настроен на IP \t{192.168.3.226/23} с
|
||||||
|
шлюзом \t{192.168.2.11} и DNS \t{192.168.2.111}. Интерфейс LAN2 настроен на \t{10.0.0.1/8} и может использоваться для
|
||||||
|
диагностических целей. Пароль корневого пользователя: \t{root@spec}, пароль пользователя \t{eddy}, под которым
|
||||||
|
запускаются сервисы: \t{eddy@spec}.
|
||||||
|
|
||||||
|
Для того, чтобы сервисы запускались автоматически, в \t{/etc/local.d} находится скрипт \t{utils.start}:
|
||||||
|
\begin{verbatim}
|
||||||
|
#!/bin/sh
|
||||||
|
CONFDIR="/etc/spectrograph"
|
||||||
|
LOGDIR="/var/log/spectrograph"
|
||||||
|
sudo -u eddy /home/eddy/Doc/Pusirobo/canserver/mk/canserver \
|
||||||
|
-l ${LOGDIR}/canserver.log -vv -s 250 2>/dev/null >/dev/null &
|
||||||
|
sleep 1
|
||||||
|
sudo -u eddy /home/eddy/Doc/LocCorr_new/mk/loccorr -vv -i basler \
|
||||||
|
-p pusirobo -c ${CONFDIR}/loccorr.conf -L
|
||||||
|
${LOGDIR}/XY.log -l ${LOGDIR}/loccorr.log -j /dev/shm/image.jpg \
|
||||||
|
2>/dev/null >/dev/null &
|
||||||
|
sleep 1
|
||||||
|
sudo -u eddy /home/timur/PROGRAMS/C++/build-INASAN-SPEC/spec_server \
|
||||||
|
${CONFDIR}/server-config.dat 2>/dev/null >/dev/null &
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
Конфигурационные файлы находятся в каталоге \t{/etc/spectrograph}, логгирование производится в каталог
|
||||||
|
\t{/var/log/spectrograph}. Для ротации логов настроен logrotate. Его конфигурация располагается в файле
|
||||||
|
\t{/etc/logrotate.d/spectrograph}:
|
||||||
|
\begin{verbatim}
|
||||||
|
/var/log/spectrograph/*.log {
|
||||||
|
size 1M
|
||||||
|
rotate 10
|
||||||
|
compress
|
||||||
|
notifempty
|
||||||
|
missingok
|
||||||
|
}
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
BIN
LocCorr/doc/obs-iface-login.png
Normal file
BIN
LocCorr/doc/obs-iface-login.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 38 KiB |
BIN
LocCorr/doc/obs-iface-menu.png
Normal file
BIN
LocCorr/doc/obs-iface-menu.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 552 KiB |
BIN
LocCorr/doc/obs-iface.png
Normal file
BIN
LocCorr/doc/obs-iface.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 712 KiB |
242
LocCorr/doc/spec_server.tex
Normal file
242
LocCorr/doc/spec_server.tex
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
%
|
||||||
|
% spec_server package description
|
||||||
|
%
|
||||||
|
|
||||||
|
|
||||||
|
Демон \t{spec\_server} представляет собой \t{HTTP(S)/Websocket} сервер и, соответственно, является
|
||||||
|
серверной частью программного пакета интерфейсов наблюдателя и состояния спектрографа.
|
||||||
|
Данный программный пакет реализован на языках \t{C++} (\t{spec\_server})
|
||||||
|
и \t{Javascript}, \t{HTML}, \t{CSS} для клиентской части.
|
||||||
|
|
||||||
|
Сетевая (\t{HTTP(S)/WebSocket} сервер, связь с демоном \t{loccorr}) часть демона реализована с помощью сторонних библиотек
|
||||||
|
\verb|IXWebsocket|\footnote{\url{https://machinezone.github.io/IXWebSocket/}} и
|
||||||
|
\verb|ASIO|\footnote{\url{https://think-async.com}}. Кроме того, дополнительно были использованы сторонние библиотеки
|
||||||
|
\verb|spdlog|\footnote{\url{https://github.com/gabime/spdlog}}, \verb|fmtlib|\footnote{\url{https://github.com/fmtlib/fmt})}
|
||||||
|
и \verb|OpenSSL|\footnote{\url{https://github.com/fmtlib/fmt}}.
|
||||||
|
|
||||||
|
\begin{table}[t]
|
||||||
|
\caption{Ключи командной строки демона \t{spec\_server}}\label{specserv_cmdkey}
|
||||||
|
% \begin{tabular}{ll}
|
||||||
|
\begin{tabular}{p{0.45\textwidth}p{0.45\textwidth}}
|
||||||
|
\hline\hline
|
||||||
|
Ключ & описание \\
|
||||||
|
\hline
|
||||||
|
\verb|-h| & распечатать в устройство стандартного вывода краткую справку и выйти\\
|
||||||
|
&\\
|
||||||
|
\verb|-d [config-filename]| & записать параметры конфигурации по умолчанию в файл
|
||||||
|
\verb|config-filename| и выйти. Если \verb|config-filename| не задан,
|
||||||
|
то будет использовано имя по умолчанию \verb|server-config.dat|\\
|
||||||
|
\hline\hline
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Для старта демона необходимо выполнить команду:
|
||||||
|
\begin{verbatim}
|
||||||
|
spec_server [cfg-filename] [-h] [-d] [dump-config-filename]
|
||||||
|
\end{verbatim}
|
||||||
|
Предполагается, что у пользователя есть права на запуск бинарного файла \t{spec\_server} и путь к этому
|
||||||
|
файлу есть в переменной среды \verb|PATH|.
|
||||||
|
В Таблице~\ref{specserv_cmdkey} представлены опциональные ключи командной строки, которые принимает исполняемый
|
||||||
|
файл демона в качестве параметров. Необязательным позиционным параметром запуска
|
||||||
|
демона является имя файла, в котором заданы параметры конфигурации. Например, следующая командная строка
|
||||||
|
запускает демон с конфигурационными параметрами в файле \verb|/etc/server-config.dat|:
|
||||||
|
\begin{verbatim}
|
||||||
|
spec_server /etc/server-config.dat
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\afterpage{%
|
||||||
|
\begin{longtable}{p{0.2\textwidth}p{0.15\textwidth}p{0.5\textwidth}}
|
||||||
|
\caption{Параметры конфигурации демона \t{spec\_server}}
|
||||||
|
\label{specserv_params}\\
|
||||||
|
% \begin{tabular}{lll}
|
||||||
|
\hline\hline
|
||||||
|
имя параметра & тип & описание \\
|
||||||
|
\hline
|
||||||
|
\t{caFile} & строка & полное имя файла доверенного корневого сертификата. Специальные значения: \\
|
||||||
|
& & \t{SYSTEM} -- использовать системное хранилище доверенных корневых сертификатов; \\
|
||||||
|
& & \t{NONE} -- отключить верификацию сертификатов сетевого соединения. \\
|
||||||
|
& & По умолчанию -- пустая строка (не использовать корневой сертификат) \\
|
||||||
|
& & \\
|
||||||
|
\t{certFile} & строка & полное имя файла \t{SSL}-сертификата демона. По умолчанию -- пустая строка (не
|
||||||
|
использовать протокол \t{HTTPS}) \\
|
||||||
|
& & \\
|
||||||
|
\t{certKeyFile} & строка & полное имя файла ключа \t{SSL}-сертификата демона. По умолчанию -- пустая
|
||||||
|
строка (не использовать протокол \t{HTTPS}) \\
|
||||||
|
& & \\
|
||||||
|
\t{http\_host} & строка & \t{IP}-адрес сетевого интерфейса для прослушивания входящих \t{HTTP(S)}
|
||||||
|
соединений. \\
|
||||||
|
& & По умолчанию 0.0.0.0 \\
|
||||||
|
& & \\
|
||||||
|
\t{http\_path} & строка & полный путь к каталогу файловой системы где хранятся \t{HTML}, \t{Javascript} и
|
||||||
|
\t{CSS} файлы интерфейса наблюдателя. \\
|
||||||
|
& & По умолчанию -- пустая строка (текущий каталог) \\
|
||||||
|
& & \\
|
||||||
|
\t{http\_port} & целое число & номер порта для входящих \t{HTTP(S)} соединений. По умолчанию 8080 \\
|
||||||
|
& & \\
|
||||||
|
\t{log\_filename} & строка & полное имя лог-файла демона.Параметр может иметь специальные значения
|
||||||
|
\t{stdout} и
|
||||||
|
\t{stderr} для логирования в стандартные устройства вывода и ошибок соответственно.
|
||||||
|
Если значение пустая строка, то логирование будет отключено \\
|
||||||
|
& & \\
|
||||||
|
\t{log\_level} & строка & уровень логирования. Возможные значения (регистр не важен):
|
||||||
|
\t{TRACE}, \t{DEBUG}, \t{INFO}, \t{WARN}, \t{ERROR}, \t{CRITICAL}, \t{OFF}. По умолчанию задано \t{INFO}\\
|
||||||
|
& & \\
|
||||||
|
\t{logrot\_num} & целое число & количество сохраняемых лог-файлов, если задано ротирование. Если
|
||||||
|
больше 0, то логирование
|
||||||
|
будет выполняться по принципу ротирования файлов по достижению заданного максимального размера файла.
|
||||||
|
По умолчанию 0 -- ротирование отключено \\
|
||||||
|
& & \\
|
||||||
|
\t{logrot\_size} & целое число & максимальный размер лог-файла в случае включенного ротирования.
|
||||||
|
Размер задается в байтах. По умолчанию 10485760 (10 мегабайт)\\
|
||||||
|
& & \\
|
||||||
|
\t{obs\_timeout} & целое число & таймаут бездействия соединения для интерфейса наблюдателя. Время
|
||||||
|
задается в минутах.
|
||||||
|
По умолчанию 60 ({\bf не реализовано!!!}) \\
|
||||||
|
& & \\
|
||||||
|
\t{passwd\_hash} & 16-ричное число & \t{SHA-256} хэш-сумма строки пароля авторизации для интерфейса
|
||||||
|
наблюдателя.
|
||||||
|
По умолчанию значение соответствует паролю \t{123} \\
|
||||||
|
& & \\
|
||||||
|
\t{ping\_int} & целое число & ``пинг-понг'' интервал для \t{Websocket} соединений. Время задается в
|
||||||
|
секундах.
|
||||||
|
По умолчанию 45 \\
|
||||||
|
& & \\
|
||||||
|
\t{specdev\_port} & целое число & номер порта для сетевого соединения с демоном \t{loccorr}. По
|
||||||
|
умолчанию 12345 \\
|
||||||
|
& & \\
|
||||||
|
\t{specdev\_rtimeout} & целое число & таймаут для операций чтения из сокета для сетевого соединения с
|
||||||
|
демоном \t{loccorr}.
|
||||||
|
Время задается в миллисекундах. По умолчанию 1000 \\
|
||||||
|
& & \\
|
||||||
|
\t{specdev\_wtimeout} & целое число & таймаут для операций записи в сокет для сетевого соединения с
|
||||||
|
демоном \t{loccorr}.
|
||||||
|
Время задается в миллисекундах. По умолчанию 1000 \\
|
||||||
|
& & \\
|
||||||
|
\t{view\_timeout} & целое число & таймаут бездействия соединения для интерфейса просмотра состояния
|
||||||
|
спектрографа.
|
||||||
|
Время задается в минутах. По умолчанию 60 ({\bf не реализовано!!!}) \\
|
||||||
|
& & \\
|
||||||
|
\t{websock\_host} & строка & \t{IP}-адрес сетевого интерфейса для прослушивания входящих \t{Websocket}
|
||||||
|
соединений. По умолчанию 0.0.0.0 \\
|
||||||
|
& & \\
|
||||||
|
\t{websock\_port} & целое число & номер порта для входящих \t{Websocket} соединений. По умолчанию 8888 \\
|
||||||
|
\hline\hline
|
||||||
|
% \end{tabular}
|
||||||
|
\end{longtable}
|
||||||
|
}
|
||||||
|
|
||||||
|
При старте демон \t{spec\_server} начинает прослушивать заданные в конфигурации порты для входящих
|
||||||
|
\t{HTTP(S)} и \t{Websocket} соединений, а затем пытается выполнить сетевое соединение с демоном \t{loccorr}.
|
||||||
|
Если заданный пользователем файл конфигурации не найден или у пользователя нет прав на его чтение, то демон
|
||||||
|
аварийно завершает работу.
|
||||||
|
Функционирование демона полностью задается параметрами в конфигурационном файле. Конфигурационный файл
|
||||||
|
имеет текстовый формат, параметры задаются парой ``ключ -- значение'' как \verb|key=value|, в каждой строке
|
||||||
|
может присутствовать только одна пара ``ключ -- значение'', строки начинающиеся с символа \verb|#| являются
|
||||||
|
комментариями и игнорируются, пустые (содержащие только пробелы) строки также игнорируются.
|
||||||
|
В паре \verb|key=value| ``\verb|value|'' может быть пустой строкой, что означает ``параметр имеет специальное значение''
|
||||||
|
(см. Таблицу~\ref{specserv_params}). В Таблице~\ref{specserv_params} описаны возможные параметры
|
||||||
|
конфигурации демона \t{spec\_server}. Файлы сертификатов и их ключей должны быть в \t{PEM}-формате.
|
||||||
|
Критичным для работы интерфейса пользователя является параметр \verb|http_path|, задающий
|
||||||
|
корневой каталог в файловой системе ОС управляющего компьютера, в котором хранятся необходимые
|
||||||
|
\verb|HTML|, \verb|CSS| и \verb|Javascript| файлы. Главный \verb|HTML| файл интерфейса (\verb|observer.html|)
|
||||||
|
предполагает жестко заданную структуру содержимого корневого каталога. Положим, что пользователь в своем конфигурационном
|
||||||
|
файле определил его как \verb|http_path = /etc/fiber_spec_cfg|, тогда его содержимое должно выглядеть
|
||||||
|
следующим образом:
|
||||||
|
|
||||||
|
\begin{verbatim}
|
||||||
|
/etc/fiber_spec_cfg/
|
||||||
|
js/
|
||||||
|
uikit-icons.min.js
|
||||||
|
uikit.min.js
|
||||||
|
|
||||||
|
css/
|
||||||
|
uikit.min.css
|
||||||
|
|
||||||
|
index.html
|
||||||
|
observer.html
|
||||||
|
viewer.html
|
||||||
|
start-disp.jpg
|
||||||
|
init_connection.js
|
||||||
|
observer_handlers.js
|
||||||
|
observer_websocket_handler.js
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
|
\begin{table}[t]
|
||||||
|
\caption{Состав программного пакета \t{spec\_server}}\label{specserv_files}
|
||||||
|
% \begin{tabular}{ll}
|
||||||
|
\begin{tabular}{p{0.45\textwidth}p{0.45\textwidth}}
|
||||||
|
\hline\hline
|
||||||
|
Имя файла & описание \\
|
||||||
|
\hline
|
||||||
|
\verb|spec_server| & исполняемый файл \t{HTTP(S)/Websocket} сервера \\
|
||||||
|
& \\
|
||||||
|
\verb|index.html| & \t{HTML} индекс-файл \t{HTTP(S)}-сервера \\
|
||||||
|
& \\
|
||||||
|
\verb|observer.html| & \t{HTML} файл интерфейса наблюдателя \\
|
||||||
|
& \\
|
||||||
|
\verb|viewer.html| & \t{HTML} файл интерфейса состояния спектрографа ({\bfв разработке!!!})\\
|
||||||
|
& \\
|
||||||
|
\verb|start-disp.jpg| & \t{JPEG} файл стартового изображения подсмотра волокна \\
|
||||||
|
& \\
|
||||||
|
\verb|init_connection.js| & \t{Javascript} файлы логики интерфейса наблюдателя \\
|
||||||
|
\verb|observer_handlers.js| & \\
|
||||||
|
\verb|observer_websocket_handler.js| & \\
|
||||||
|
& \\
|
||||||
|
\verb|uikit-icons.min.js| & \t{Javascript} файлы библиотеки \t{UIkit} \\
|
||||||
|
\verb|uikit.min.js| & \\
|
||||||
|
& \\
|
||||||
|
\verb|uikit.min.css| & \t{CSS} файл библиотеки \t{UIkit} \\
|
||||||
|
\hline\hline
|
||||||
|
\end{tabular}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
Состав и краткое описание файлов программного пакета представлены в Таблице~\ref{specserv_files}.
|
||||||
|
Для авторизации наблюдателя при начальной загрузке интерфейса потребуется ввод пароля. \verb|SHA-256| хэш-сумма
|
||||||
|
пароля задается в конфигурации ключом \verb|passwd_hash|. Чтобы сгенерировать хэш-сумму можно, например, воспользоваться
|
||||||
|
стандартной \verb|GNU| утилитой \verb|Linux| ОС \verb|sha256sum|:
|
||||||
|
\begin{verbatim}
|
||||||
|
echo -n "obs-password-here" | sha256sum
|
||||||
|
\end{verbatim}
|
||||||
|
Полученная сумма прописывается в конфигурационом файле как
|
||||||
|
\begin{verbatim}
|
||||||
|
passwd_hash=82774de1a23f679abab412e24279157fa99c44f3ff400d09d45d4d01e64fce60
|
||||||
|
\end{verbatim}
|
||||||
|
(без пробелов после символа '\verb|=|'!!!). {\bf Важно: } в текущей реализации демона \t{loccorr} возможно лишь единственное
|
||||||
|
соединение к интерфейсу наблюдателя. Если одно уже открыто, то всем остальным будет отказано в доступе.
|
||||||
|
Для обеспечения сетевой безопасности демон \t{spec\_server} может работать
|
||||||
|
как \verb|HTTPS| сервер и, в этой конфигурации, использовать \verb|TLS|-шифрование для \verb|Websocket| соединений. Возможны несколько
|
||||||
|
вариантов конфигурирования \verb|HTTPS| сервера (\verb|TLS|-шифрования). Краткое описание вариантов можно просмотреть на странице библиотеки
|
||||||
|
\verb|IXWebsocket|\footnote{\url{https://machinezone.github.io/IXWebSocket/usage/\#tls-support-and-configuration}}. Отметим
|
||||||
|
здесь, что наиболее простой вариант это использование доверенного (подписанного доверенным центром
|
||||||
|
сертификации) сертификата сервера,
|
||||||
|
тогда параметры конфигурации могут быть заданы следующим образом:
|
||||||
|
\begin{verbatim}
|
||||||
|
caFile = SYSTEM
|
||||||
|
certFile = server-crt.pem
|
||||||
|
certKeyFile = server-key.pem
|
||||||
|
\end{verbatim}
|
||||||
|
Если используется так называемый самоподписанный сертификат, то конфигурация может быть задана как:
|
||||||
|
\begin{verbatim}
|
||||||
|
caFile = NONE
|
||||||
|
certFile = server-crt.pem
|
||||||
|
certKeyFile = server-key.pem
|
||||||
|
\end{verbatim}
|
||||||
|
Однако, такая конфигурация потребует дополнительных настроек в используемых интернет-браузерах (потребуется разрешить
|
||||||
|
браузеру использовать соединения защищенные недоверенным сертификатом и т.д.).
|
||||||
|
|
||||||
|
Демон \t{spec\_server} обрабатывает 4 сигнала ОС: \verb|SIGINT|, \verb|SIGTERM|, \verb|SIGUSR1| и \verb|SIGUSR2|. Первые два
|
||||||
|
предназначены для останова \t{HTTP(S)/WebSocket} сервера и выхода демона в ОС. \verb|SIGUSR1| используется для
|
||||||
|
рестарта \t{HTTP(S)/WebSocket} сервера (с закрытием всех активных браузерных соединений) и реинициализации соединения
|
||||||
|
с \t{loccorr} демоном. При получении сигнала \verb|SIGUSR2| демон только реинициализирует соединение с \t{loccorr} демоном.
|
||||||
|
Например, для останова демона нужно выполнить команду
|
||||||
|
\begin{verbatim}
|
||||||
|
killall -TERM spec_server
|
||||||
|
\end{verbatim}
|
||||||
|
Остальные варианты обработки сигналов могут быть полезны, например, в случае аварийного перезапуска \t{loccorr} демона.
|
||||||
|
Например, следующая команда запросит демон \t{spec\_server} закрыть существующее и открыть новое сетевое соединение с
|
||||||
|
демоном \t{loccorr}:
|
||||||
|
\begin{verbatim}
|
||||||
|
killall -USR2 spec_server
|
||||||
|
\end{verbatim}
|
||||||
|
|
||||||
99
LocCorr/doc/webinterface.tex
Normal file
99
LocCorr/doc/webinterface.tex
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
\begin{figure}[t]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.97\textwidth]{obs-iface-login.png}
|
||||||
|
\caption{Окно авторизиции наблюдателя}\label{obs-iface-login}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
|
||||||
|
\begin{figure}[t]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.97\textwidth]{obs-iface.png}
|
||||||
|
\caption{Интерфейс наблюдателя}\label{obs-iface}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{figure}[t]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=0.97\textwidth]{obs-iface-menu.png}
|
||||||
|
\caption{Главное меню интерфейса наблюдателя}\label{obs-iface-menu}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Интерфейс наблюдателя (далее по тексту \verb|ИН|) предназначен для установки режимов и контроля работы
|
||||||
|
элементов оптоволоконного спектрографа, а
|
||||||
|
именно, \verb|ИН| позволяет управлять узлом подсмотра оптического волокна и узлами стационарной части спектрографа.
|
||||||
|
Концептуально \verb|ИН| является графическим интерфейсом пользователя для демона \t{loccorr} и реализует его возможности
|
||||||
|
в рамках его системы команд (см. выше по тексту).
|
||||||
|
Программно \verb|ИН| реализован как \verb|Web|-интерфейс на языках \verb|HTML|, \verb|CSS| и \verb|Javascript|.
|
||||||
|
В текущей реализации \verb|ИН| авторы использовали стороннюю \verb|CSS/Javascript| библиотеку для создания \verb|Web|-интерфейсов
|
||||||
|
\verb|UIkit|\footnote{\url{https://getuikit.com/}}. Тестирование работы \verb|ИН| проводилось в браузерах на основе движков
|
||||||
|
отображения веб-страниц и
|
||||||
|
\verb|Javascript| \verb|Chromium/V8| (google-chrome и vivaldi) и \verb|Quantum/SpiderMonkey| (firefox). Таким образом работа в других браузерах,
|
||||||
|
например internet explorer, не гарантируется.
|
||||||
|
|
||||||
|
Формирование универсальной ссылки ресурса (\verb|URL|) на главную страницу \verb|ИН| зависит от сетевого имени (или \verb|IP|-адреса) управляющего компьютера,
|
||||||
|
настроек безопасности и порта \verb|HTTP(S)|-сервера указанных в конфигурации демона \t{spec\_server} (см. выше). Например, \verb|IP|-адрес управляющего
|
||||||
|
компьютера \verb|192.168.3.226|, \verb|http_port=8080| и \verb|TLS|-шифрование отключено, тогда \verb|URL| должен быть установлен как
|
||||||
|
\verb|http://192.168.3.226:8080|. При указании правильного \verb|URL| браузер должен
|
||||||
|
отобразить страницу авторизации. На Рисунке~\ref{obs-iface-login} показан пример начальной страницы авторизации наблюдателя.
|
||||||
|
На этой странице нужно выбрать тип соединения \verb|Observer| или \verb|Viewer| и ввести пароль, чья хэш-сумма задана в конфигурации
|
||||||
|
демона \t{spec\_server}. В случае успешной авторизации браузер перенаправит пользователя в интерфейс наблюдателя.
|
||||||
|
На Рисунке~\ref{obs-iface} показан возможный вид \verb|ИН|. Конкретный начальный вид элементов интерфейса может меняться в зависимости
|
||||||
|
от состояния узлов спектрографа. В левом верхнем углу интерфейса находится кнопка главного меню.
|
||||||
|
Логически \verb|ИН| разделен на две больших части: верхняя -- управление узлом подсмотра оптического
|
||||||
|
волокна и гидированием (подвесная часть спектрографа, далее \verb|ПЧ|), нижняя -- управление узлами стационарной части (далее \verb|СЧ|),
|
||||||
|
а также вывод некоторой информации (логирование) в процессе работы.
|
||||||
|
|
||||||
|
Главное меню \verb|ИН| (см. Рисунок~\ref{obs-iface-menu}) содержит следующие пункты: \verb|Reconnect| -- рестарт сетевого соединения с
|
||||||
|
демоном \t{loccorr}; \verb|Re-read settings| -- запросить текущую конфигурацию демона \t{loccorr}; \verb|Exit| -- выйти из интерфейса на
|
||||||
|
страницу авторизации.
|
||||||
|
|
||||||
|
Элементы интерфейса \verb|ПЧ| сгруппированы в две панели. Левая панель содержит
|
||||||
|
текущее изображение поля гидирования, кнопок старта/останова процесса гидирования (\t{"START GUIDING"}\ и \t{"STOP
|
||||||
|
GUIDING"}) и
|
||||||
|
установки координатных подвижек волокна и фокусировочного механизма в центральное положение ("\verb|GO TO CENTER|").
|
||||||
|
Отметим, что в случае потери соединения с демоном \t{loccorr} или сбоя в его функционале
|
||||||
|
(например, сбой детектора подсмотра) в панели будет отображается статическое изображение с надписью
|
||||||
|
\t{"DISCONNECTED"}. В процессе
|
||||||
|
гидирования в верхней части изображения поля гидирования отображаются текущие измеренные координаты объекта гидирования (или [-1, -1]
|
||||||
|
если автоматический поиск объекта и вычисление его центра закончились с ошибкой), разница между ними и текущим центром волокна
|
||||||
|
($dX = X_{obj} - X_{fiber}$, $dY = Y_{obj} - Y_{fiber}$), а так же статус процесса гидирования.
|
||||||
|
Правая панель предназначена для управления фокусом изображения объекта гидирования,
|
||||||
|
выполнения калибровочных измерений для механизма гидирования, контроля параметров накопления для детектора подсмотра и
|
||||||
|
алгоритма вычислений в процессе гидирования. Фокусировка может выполняться как ползунком (быстро и грубо), так и кнопками "\verb|+|"\ "\verb|-|"\
|
||||||
|
(с шагом 2 единицы) или полем ввода для точного позиционирования фокусера. Кнопка "\verb|INIT DEVICE|"\ предназначена для запуска процесса
|
||||||
|
калибровочных измерений для механизма гидирования (см, описание демона \t{loccorr}). Переключатель "\verb|Fiber lighting|"\ служит для
|
||||||
|
включения/отключения подсветки оптического волокна (\verb|OFF| - выключено, \verb|ON| - включено).
|
||||||
|
Кнопка "\verb|GET CENTER|"\ предназначена для измерения центра изображения торца оптического волокна. Заметим, что такие измерения
|
||||||
|
имеют смысл только при включённой подсветке волокна! Поля ввода с меткой "\verb|Fiber center|"\ содержат текущие координаты X и Y центра
|
||||||
|
торца оптического волокна. Кнопка "\verb|SEND|"\ предназначена для установки в настройках демона \t{loccorr} текущего положения центра
|
||||||
|
волокна. Посылаются координаты отображаемые в данный момент в полях ввода "\verb|Fiber center|". Связка элементов "\verb|Fiber center|"\ и
|
||||||
|
"\verb|SEND|"\ позволяют интерактивно в процессе наблюдений или калибровки задавать центр волокна. Для этого можно ввести координаты
|
||||||
|
непосредственно в полях ввода или же кликнуть левой кнопкой мыши в нужной точке текущего изображения поля гидирования в левой панели интерфейса.
|
||||||
|
Во втором случае координаты на изображении,
|
||||||
|
соответствующие указателю мыши в момент нажатия левой кнопки мыши, отобразятся в полях ввода \verb|Fiber center|". {\bf Важно}, смена координат центра
|
||||||
|
волокна в настройках демона \t{loccorr} будет иметь место только после нажатия кнопки "\verb|SEND|"!!! Чтобы восстановить текущие координаты
|
||||||
|
центра волокна из настроек демона \t{loccorr} нужно в главном меню \verb|ИН| выбрать пункт "\verb|Re-read settings|".
|
||||||
|
Для настройки параметров экспозиции детектора подсмотра \verb|ИН| содержит следующие элементы: выпадающий список "\verb|Exposure|", поля ввода
|
||||||
|
"\verb|Min|", "\verb|Max|"\ и "\verb|Gain (dB)|". Выпадающий список "\verb|Exposure|"\ имеет два пункта: "\verb|Range|"\ и "\verb|Fixed|".
|
||||||
|
В первом случае алгоритм гидирования сам подбирает оптимальную экспозицию в диапазоне, указанном в полях ввода "\verb|Min|", "\verb|Max|"\
|
||||||
|
(экспозиции указываются в миллисекундах), поле ввода "\verb|Gain (dB)|"\ недоступно для редактирования и лишь отображает текущее значение.
|
||||||
|
В режиме "\verb|Fixed|"\ вместо "\verb|Min|", "\verb|Max|"\ отображается поле ввода "\verb|Value|", в котором наблюдатель задаёт
|
||||||
|
фиксированную экспозицию (в миллисекундах), а также становится доступна регулировка усиления в поле "\verb|Gain (dB)|". Для настройки алгоритма
|
||||||
|
гидирования наблюдатель может воспользоваться элементами "\verb|Guiding to|"\ и "\verb|N aver|". Первый -- выпадающий список с пунктами:
|
||||||
|
"\verb|Closest|"\ и "\verb|Brightest|". В режиме "\verb|Closest|"\ гидирование начинается с захвата ближайшего к центру волокна объекта,
|
||||||
|
в режиме "\verb|Brightest|"\ алгоритм оценивает яркость объектов в поле и начинает гидирование по ярчайшему из них. Очевидно, что данный вид настройки
|
||||||
|
востребован только в случае присутствия нескольких объектов в поле гида. Поле ввода "\verb|N aver|"\ задаёт количество изображений используемых
|
||||||
|
для вычисления их среднего в процессе оценки центра объекта гидирования. Для настройки отображения поля гидирования служит элемент ``флажок''.
|
||||||
|
"\verb|Equalization|". Если данный элемент находится в состоянии ``отмечено'', то изображение поля гида будет эквализовано, то есть значения
|
||||||
|
пикселей будут преобразованы из исходных в соответствии в вычисленной гистограммой. Данная настройка не влияет на алгоритм гидирования, а
|
||||||
|
служит только для удобства отображения. Некоторые элементы интерфейса управления подвесной частью спектрографа могут отображаться в режиме
|
||||||
|
мигания. Это элементы-кнопки \verb|GO TO CENTER|"\ и "\verb|INIT DEVICE|", а также все элементы управления фокусировкой. Режим мигания
|
||||||
|
означает, что координатные подвижки волокна или фокусировочного механизма находятся в движении. В любой момент движение подвижек может
|
||||||
|
быть остановлено нажатием кнопки "\verb|STOP GUIDING|"\ (интерфейс посылает демону \t{loccorr} команду \verb|stpstate=relax|).
|
||||||
|
|
||||||
|
В нижней левой части \verb|ИН| находится панель, которая отображает различную отладочную информацию. Настоятельно рекомендуется
|
||||||
|
следить за этими сообщениями. Сообщения выводимые шрифтом чёрного цвета являются информационными, светло коричневого -- предупреждения, и
|
||||||
|
красного -- ошибки.
|
||||||
|
|
||||||
|
Нижняя правая часть \verb|ИН| -- элементы управления стационарной части. Переключатели "\verb|Flat-field|"\ и "\verb|ThAr|"\ управляют
|
||||||
|
калибровочными лампами, соответственно, плоского поля и торий-аргона (\verb|OFF| - выключено, \verb|ON| - включено).
|
||||||
|
|
||||||
@ -33,11 +33,13 @@
|
|||||||
#include "socket.h"
|
#include "socket.h"
|
||||||
|
|
||||||
static InputType tp;
|
static InputType tp;
|
||||||
|
static pid_t childpid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We REDEFINE the default WEAK function of signal processing
|
* We REDEFINE the default WEAK function of signal processing
|
||||||
*/
|
*/
|
||||||
void signals(int sig){
|
void signals(int sig){
|
||||||
|
if(childpid) exit(sig); // father -> do nothin @ end
|
||||||
if(sig){
|
if(sig){
|
||||||
signal(sig, SIG_IGN);
|
signal(sig, SIG_IGN);
|
||||||
DBG("Get signal %d.", sig);
|
DBG("Get signal %d.", sig);
|
||||||
@ -192,7 +194,7 @@ int main(int argc, char *argv[]){
|
|||||||
signal(SIGQUIT, signals); // ctrl+\ - quit
|
signal(SIGQUIT, signals); // ctrl+\ - quit
|
||||||
signal(SIGTSTP, SIG_IGN); // ignore ctrl+Z
|
signal(SIGTSTP, SIG_IGN); // ignore ctrl+Z
|
||||||
while(1){ // guard for dead processes
|
while(1){ // guard for dead processes
|
||||||
pid_t childpid = fork();
|
childpid = fork();
|
||||||
if(childpid){ // father
|
if(childpid){ // father
|
||||||
LOGMSG("create child with PID %d\n", childpid);
|
LOGMSG("create child with PID %d\n", childpid);
|
||||||
DBG("Created child with PID %d\n", childpid);
|
DBG("Created child with PID %d\n", childpid);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user