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 разработана утилита Для удобства управления устройствами MMPP разработана утилита
\verb'MMPP_control'~\footnote{\url{https://github.com/eddyem/mmpp/tree/master/MMPP_control}} \verb'MMPP_control'~\footnote{\url{https://github.com/eddyem/mmpp/tree/master/MMPP_control}}. Краткий
\lstref{mmppcontrman}. перечень параметров утилиты:
\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{Интерфейс системы управления} \section{Интерфейс системы управления}
\comment[Тимур]{конфигурационный файл колес} \comment[Тимур]{конфигурационный файл колес}
@ -662,14 +683,14 @@ PF1 & PUPD &
\subsubsection{Протокол управления} \subsubsection{Протокол управления}
Управление контроллерами производится по шине UART (8N1, скорость задана в конфигурации, по умолчанию Управление контроллерами производится по шине UART (8N1, скорость задана в конфигурации, по умолчанию
115200\,бод). Команды передаются в строковом режиме: признаком окончания команды является символ новой строки. 9600\,бод). Команды передаются в строковом режиме: признаком окончания команды является символ новой строки.
Микроконтроллер не обрабатывает принимаемые данные до формирования валидной строки. Символы пробела или Микроконтроллер не обрабатывает принимаемые данные до формирования валидной строки. Символы пробела или
табуляции внутри строки игнорируются. Первым в строке следует номер контроллера (число int32). Данный номер табуляции внутри строки игнорируются. Первым в строке следует номер контроллера (16-битное беззнаковое
сохраняется во флеш памяти МК во время его инициализации. Каждый модуль обрабатывает лишь те команды, которые целое). Данный номер сохраняется во флеш памяти МК во время его инициализации. Каждый модуль обрабатывает лишь
адресованы ему, либо же имеют широковещательную адресацию (в этом случае в качестве адреса указывается -1). те команды, которые адресованы ему, либо же имеют широковещательную адресацию (в этом случае в качестве адреса
Так как вывод данных микроконтроллером при получении широковещательного идентификатора не блокируется, не указывается -1). Так как вывод данных микроконтроллером при получении широковещательного идентификатора не
рекомендуется использовать широковещательные посылки при наличии более одного устройства на линии связи (кроме блокируется, не рекомендуется использовать широковещательные посылки при наличии более одного устройства на
посылок экстренного останова, сброса и т.п.). линии связи (кроме посылок экстренного останова, сброса и т.п.).
После идентификатора контроллера следует текст команды и (опционально) ее аргументы. В случае, если команда После идентификатора контроллера следует текст команды и (опционально) ее аргументы. В случае, если команда
валидна, контроллер возвращает строку <<ALLOK>>. Если команда не распознана, возвращается маркер ошибки валидна, контроллер возвращает строку <<ALLOK>>. Если команда не распознана, возвращается маркер ошибки
@ -915,13 +936,39 @@ ESW00 ESW01 ESW10 ESW11 || ESW00 ESW01 ESW10 ESW11
\end{description} \end{description}
Значение полей описано в пункте <<Геттеры состояния>> на стр.~\pageref{stategetters}. Значение полей описано в пункте <<Геттеры состояния>> на стр.~\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} \paragraph{Базовые настройки.}\label{MMPP_basesettings}
Параметры текущей конфигурации контроллера можно получить при помощи геттера конфигурации. Например, Параметры текущей конфигурации контроллера можно получить при помощи геттера конфигурации. Например,
\begin{lstlisting}[caption=Базовые настройки контроллеров] \begin{lstlisting}[caption=Базовые настройки контроллеров]
MMPP_control -a 1GC ./MMPP_control -a 1GC
Send raw string: 1GC Send raw string: 1GC
Receive: Receive: CONFSZ=36
CONFSZ=36
DEVID=1 DEVID=1
V12NUM=605 V12NUM=605
V12DEN=94 V12DEN=94
@ -942,10 +989,9 @@ USTEPS=16
ACCDECSTEPS=50 ACCDECSTEPS=50
DATAEND DATAEND
MMPP_control -a 2GC ./MMPP_control -a 2GC
Send raw string: 2GC Send raw string: 2GC
Receive: Receive: CONFSZ=36
CONFSZ=36
DEVID=2 DEVID=2
V12NUM=605 V12NUM=605
V12DEN=94 V12DEN=94

View File

@ -1,26 +1,26 @@
Simple CLI control tool allowing bash scripting Simple CLI control tool allowing bash scripting
=================================== ===============================================
## Command line arguments ## Command line arguments
-A, --absmove absolute move (without this flag moving is relative) - `-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) - `-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 - `-L, --lin1=arg`-- move polaroid linear stage to N steps;
-R, --rot1=arg rotate polaroid to given angle - `-R, --rot1=arg`-- rotate polaroid to given angle (angle in degrees);
-S, --stop stop any moving - `-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 - `-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 - `-b, --baudrate=arg`-- TTY baudrate (raw number, e.g. 115200), default speed is 9600;
-d, --comdev=arg terminal device filename - `-d, --comdev=arg`-- terminal device filename, default path is `/dev/ttyUSB0`;
-h, --help show this help - `-h, --help`-- show this help;
-l, --lin2=arg move waveplate linear stage to N steps - `-l, --lin2=arg`-- move waveplate linear stage to N steps
-p, --pidfile=arg PID-file name - `-p, --pidfile=arg`-- PID-file name
-q, --quiet don't show anything @screen from stdout - `-q, --quiet`-- don't show anything @screen from stdout
-r, --rot2=arg rotate lambda/4 to given angle - `-r, --rot2=arg`-- rotate lambda/4 to given angle
-s, --status get device status - `-s, --status`-- get device status
-t, --temp show temperature of both MCU - `-t, --temp`-- show temperature of both MCU
-w, --wait wait while all previous moving ends - `-w, --wait`-- wait while all previous moving ends
-y, --async asynchronous moving - don't wait - `-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")}, {"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")}, {"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")}, {"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")}, {"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")}, {"stop", NO_ARGS, NULL, 'S', arg_none, APTR(&G.stopall), N_("stop any moving")},
end_option 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(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(G->showtemp){
if(tty_showtemp() != 2) rtn_status = RET_ONLYONE; if(tty_showtemp() != 2) rtn_status = RET_ONLYONE;
} }

View File

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