Add readme for mmpp_new & refresh russian documentation

This commit is contained in:
eddyem 2019-03-18 12:22:50 +03:00
parent 13467035d6
commit feb6463d8f
6 changed files with 109 additions and 60 deletions

Binary file not shown.

View File

@ -185,33 +185,54 @@ Standa,
отключения питания эту процедуру проводить не нужно.
Для удобства управления устройствами MMPP разработана утилита
\verb'MMPP_control'~\footnote{\url{https://github.com/eddyem/mmpp/tree/master/MMPP_control}}
\lstref{mmppcontrman}.
\verb'MMPP_control'~\footnote{\url{https://github.com/eddyem/mmpp/tree/master/MMPP_control}}. Краткий
перечень параметров утилиты:
\def\t#1{{\ttfamily #1}}
\begin{description}
\item[\ttfamily -A, --absmove] --- абсолютное движение, данный параметр используется для задания абсолютной
величины количества шагов (аргументы \t{-L} и \t{-l}) или угла в градусной мере (аргументы \t{-R} или
\t{-r}), без этого параметра подразумевается задание аргумента относительно текущего положения;
\item[\ttfamily E, --reset] --- выполнить программный сброс заданного контроллера, для сброса обоих
контроллеров необходимо указать: \t{-E1 -E2};
\item[\ttfamily -L, --lin1=arg] --- переместить линейный транслятор поляроида на заданное количество шагов;
\item[\ttfamily -R, --rot1=arg] --- повернуть поляроид на заданный угол (в градусной мере);
\item[\ttfamily -S, --stop] --- прекратить движение (оба контроллера получают сигнал остановить любое
движение);
\item[\ttfamily -a, --sendraw=arg] --- отправить неформатированные <<сырые>> данные в порт, например, для
передачи команд или получения значений, выходящих за рамки стандартных аргументов утилиты;
\item[\ttfamily -b, --baudrate=arg] --- скорость связи (например, 115200), по умолчанию ее значение "--- 9600;
\item[\ttfamily -d, --comdev=arg] --- название устройства последовательного порта, \t{/dev/ttyUSB0} по
умолчанию;
\item[\ttfamily -h, --help] --- отображение справки по параметрам;
\item[\ttfamily -l, --lin2=arg] ---переместить линейный транслятор волновой пластины на заданное количество
шагов;
\item[\ttfamily -p, --pidfile=arg] --- название pid-файла (по умолчанию "--- \t{/tmp/MMPP\_control.pid});
\item[\ttfamily -q, --quiet] --- <<тихий>> режим для вызова из внешних программ (на стандартный вывод
отображается лишь необходимый минимум информации в виде <<параметр=значение>>, стандартный поток ошибок
отображается без изменений);
\item[\ttfamily -r, --rot2=arg] --- повернуть волновую пластину на заданный угол (в градусной мере);
\item[\ttfamily -s, --status] --- отображение текущего состояния фотометра;
\item[\ttfamily -t, --temp] --- отображение примерной температуры обоих микроконтроллеров;
\item[\ttfamily -w, --wait] --- ожидание завершения всех движений, заданных в предыдущих запусках утилиты с
<<асинхронным>> параметром \t{-y};
\item[\ttfamily -y, --async] --- <<асинхронное>> движение: сразу после передачи команды движения утилита
завершается, не ожидая окончания движения.
\end{description}
Коды возврата утилиты заданы в начале файла \t{main.c}. Они имеют следующее значение:
\begin{description}
\item[0, RET\_ALLOK] нормальное завершение работы;
\item[1, RET\_NOTFOUND] при запуске утилиты не найдено ни одного отвечающего контроллера, либо не получен
ответ от искомого контроллера при передаче команды;
\item[2, RET\_ONLYONE] при запуске обнаружен лишь один контроллер;
\item[3, RET\_COMMERR] ошибка связи или формата передаваемых \slash принимаемых данных;
\item[4, RET\_CANTINIT] невозможно инициализировать контроллер установкой на нулевой концевик;
\item[5, RET\_WAITERR] ошибка, возникшая во время ожидания завершения выполнения предыдущих передвижений;
\item[9, RET\_ERROR] прочая ошибка (из libsnippets);
\item[255, RET\_HELPCALL] запуск утилиты с параметром \t{-h}.
\end{description}
\begin{lstlisting}[caption=Краткая справка по параметрам {\tt MMPP\_control},label=mmppcontrman]
-A, --absmove абсолютное движение (без этого флага заданное
количество шагов рассматривается как
относительное)
-L, --lin1=arg перемещение линейного транслятора поляроида на
N шагов
-R, --rot1=arg вращение поляроида на заданный угол (в градусах)
-S, --stop прекратить любое движение
-a, --sendraw=arg отправить в порт заданную управляющую
последовательность символов напрямую
-d, --comdev=arg имя устройства последовательного порта
-h, --help отобразить данную справку
-l, --lin2=arg перемещение линейного транслятора фазовой
пластины на N шагов
-q, --quiet не отображать никакой информации в stdout
-r, --rot2=arg вращение фазовой пластины на заданный угол
(в градусах)
-s, --status получение состояния устройства
-t, --temp отображение температуры (довольно условной)
микроконтроллеров
-w, --wait ожидание окончания движения узлов (если
предыдущая команда выполнялась с -y)
-y, --async не ожидать окончания движения
\end{lstlisting}
\section{Интерфейс системы управления}
\comment[Тимур]{конфигурационный файл колес}
@ -662,14 +683,14 @@ PF1 & PUPD &
\subsubsection{Протокол управления}
Управление контроллерами производится по шине UART (8N1, скорость задана в конфигурации, по умолчанию
115200\,бод). Команды передаются в строковом режиме: признаком окончания команды является символ новой строки.
9600\,бод). Команды передаются в строковом режиме: признаком окончания команды является символ новой строки.
Микроконтроллер не обрабатывает принимаемые данные до формирования валидной строки. Символы пробела или
табуляции внутри строки игнорируются. Первым в строке следует номер контроллера (число int32). Данный номер
сохраняется во флеш памяти МК во время его инициализации. Каждый модуль обрабатывает лишь те команды, которые
адресованы ему, либо же имеют широковещательную адресацию (в этом случае в качестве адреса указывается -1).
Так как вывод данных микроконтроллером при получении широковещательного идентификатора не блокируется, не
рекомендуется использовать широковещательные посылки при наличии более одного устройства на линии связи (кроме
посылок экстренного останова, сброса и т.п.).
табуляции внутри строки игнорируются. Первым в строке следует номер контроллера (16-битное беззнаковое
целое). Данный номер сохраняется во флеш памяти МК во время его инициализации. Каждый модуль обрабатывает лишь
те команды, которые адресованы ему, либо же имеют широковещательную адресацию (в этом случае в качестве адреса
указывается -1). Так как вывод данных микроконтроллером при получении широковещательного идентификатора не
блокируется, не рекомендуется использовать широковещательные посылки при наличии более одного устройства на
линии связи (кроме посылок экстренного останова, сброса и т.п.).
После идентификатора контроллера следует текст команды и (опционально) ее аргументы. В случае, если команда
валидна, контроллер возвращает строку <<ALLOK>>. Если команда не распознана, возвращается маркер ошибки
@ -915,13 +936,39 @@ ESW00 ESW01 ESW10 ESW11 || ESW00 ESW01 ESW10 ESW11
\end{description}
Значение полей описано в пункте <<Геттеры состояния>> на стр.~\pageref{stategetters}.
В <<тихом>> режиме, задаваемом флагом \t{-q},состояние устройства отображается как перечень параметров и их
значений. Например,
\begin{lstlisting}
POLMOTOR0=MOVE
POLSTEPSLEFT0=742
POLPOS0=4558
POLESW00=RLSD
POLESW01=RLSD
POLMOTOR1=MOVE
POLSTEPSLEFT1=7289
POLPOS1=32411
POLESW10=RLSD
POLESW11=RLSD
L4MOTOR0=MOVE
L4STEPSLEFT0=642
L4POS0=4358
L4ESW00=RLSD
L4ESW01=RLSD
L4MOTOR1=MOVE
L4STEPSLEFT1=1542
L4POS1=6458
L4ESW10=RLSD
L4ESW11=RLSD
\end{lstlisting}
Т.е. в данном случае просто копируются значения всех переменных, выдаваемых контроллерами по запросу текущего
состояния, с добавлением префикса \t{POL} для контроллера поляроида и \t{L4} для контроллера фазовой пластины.
\paragraph{Базовые настройки.}\label{MMPP_basesettings}
Параметры текущей конфигурации контроллера можно получить при помощи геттера конфигурации. Например,
\begin{lstlisting}[caption=Базовые настройки контроллеров]
MMPP_control -a 1GC
./MMPP_control -a 1GC
Send raw string: 1GC
Receive:
CONFSZ=36
Receive: CONFSZ=36
DEVID=1
V12NUM=605
V12DEN=94
@ -942,10 +989,9 @@ USTEPS=16
ACCDECSTEPS=50
DATAEND
MMPP_control -a 2GC
./MMPP_control -a 2GC
Send raw string: 2GC
Receive:
CONFSZ=36
Receive: CONFSZ=36
DEVID=2
V12NUM=605
V12DEN=94

View File

@ -1,26 +1,26 @@
Simple CLI control tool allowing bash scripting
===================================
===============================================
## Command line arguments
-A, --absmove absolute move (without this flag moving is relative)
-E, --reset reset given mcu (may be included several times)
-L, --lin1=arg move polaroid linear stage to N steps
-R, --rot1=arg rotate polaroid to given angle
-S, --stop stop any moving
-a, --sendraw=arg send RAW string to port and read the answer
-b, --baudrate=arg TTY baudrate
-d, --comdev=arg terminal device filename
-h, --help show this help
-l, --lin2=arg move waveplate linear stage to N steps
-p, --pidfile=arg PID-file name
-q, --quiet don't show anything @screen from stdout
-r, --rot2=arg rotate lambda/4 to given angle
-s, --status get device status
-t, --temp show temperature of both MCU
-w, --wait wait while all previous moving ends
-y, --async asynchronous moving - don't wait
- `-A, --absmove`-- absolute moving, use this flag to point that steps amount (parameters of `-L`, `-l`, `-R` or `-r`) are given in absolute position (without this flag steps meaning as relative);
- `-E, --reset`--` reset given mcu (may be included several times), each `-Ex` (where `x` is controller ID) will send signal to reset given MCU;
- `-L, --lin1=arg`-- move polaroid linear stage to N steps;
- `-R, --rot1=arg`-- rotate polaroid to given angle (angle in degrees);
- `-S, --stop`-- stop any moving (with this flag each MCU will receive a signal to stop any moving);
- `-a, --sendraw=arg`-- send RAW string to port and read the answer, if you want to send something that can't be reached by standard arguments, use this flag;
- `-b, --baudrate=arg`-- TTY baudrate (raw number, e.g. 115200), default speed is 9600;
- `-d, --comdev=arg`-- terminal device filename, default path is `/dev/ttyUSB0`;
- `-h, --help`-- show this help;
- `-l, --lin2=arg`-- move waveplate linear stage to N steps
- `-p, --pidfile=arg`-- PID-file name
- `-q, --quiet`-- don't show anything @screen from stdout
- `-r, --rot2=arg`-- rotate lambda/4 to given angle
- `-s, --status`-- get device status
- `-t, --temp`-- show temperature of both MCU
- `-w, --wait`-- wait while all previous moving ends
- `-y, --async`-- asynchronous moving - don't wait

View File

@ -67,7 +67,7 @@ static myoption cmdlnopts[] = {
{"wait", NO_ARGS, NULL, 'w', arg_none, APTR(&G.waitold), N_("wait while all previous moving ends")},
{"async", NO_ARGS, NULL, 'y', arg_none, APTR(&G.dontwait), N_("asynchronous moving - don't wait")},
{"lin1", NEED_ARG, NULL, 'L', arg_int, APTR(&G.l1steps), N_("move polaroid linear stage to N steps")},
{"lin2", NEED_ARG, NULL, 'l', arg_int, APTR(&G.l2steps), N_("move waveplate linear stage to N steps")},
{"lin2", NEED_ARG, NULL, 'l', arg_int, APTR(&G.l2steps), N_("move wave-plate linear stage to N steps")},
{"pidfile", NEED_ARG, NULL, 'p', arg_string, APTR(&G.pidfile), N_("PID-file name")},
{"stop", NO_ARGS, NULL, 'S', arg_none, APTR(&G.stopall), N_("stop any moving")},
end_option

View File

@ -142,7 +142,10 @@ int main(int argc, char **argv){
}
if(handshake()) signals(RET_NOTFOUND); // test connection & get all positions
if(G->waitold) if(tty_wait()) signals(RET_WAITERR);
if(G->waitold){
if(tty_wait()) signals(RET_WAITERR);
handshake();
}
if(G->showtemp){
if(tty_showtemp() != 2) rtn_status = RET_ONLYONE;
}

View File

@ -278,7 +278,7 @@ static void ttystat(){
char buff[TBUFLEN+1];
if(!quiet) green("Pol: M0ST M0LEFT M0POS - M1ST M1LEFT M1POS || L/4: M0ST M0LEFT M0POS - M1ST M1LEFT M1POS \n");
if(alive[1]) chk1 = parsestatus("1GS");
MSG(NULL, "Pol: ");
if(!quiet) printf("Pol: ");
if(chk1 == -1){
if(!quiet) printf("%39s", "failed");
}else printf("%s", bufo);