mirror of
https://github.com/eddyem/IR-controller.git
synced 2025-12-06 10:45:15 +03:00
Added some documentation
This commit is contained in:
parent
71522a5475
commit
20b10be5ad
522
Documentation_rus/sisupr_short_descr_and_commands_TeX/main.tex
Normal file
522
Documentation_rus/sisupr_short_descr_and_commands_TeX/main.tex
Normal file
@ -0,0 +1,522 @@
|
||||
\documentclass[a4paper,12pt]{extarticle}
|
||||
\usepackage{listings}
|
||||
\usepackage{/home/eddy/ed}
|
||||
\lstset{basicstyle=\small,breaklines=true,language=Octave,
|
||||
extendedchars=true,aboveskip=1em,belowcaptionskip=5pt,
|
||||
prebreak = \hbox{%
|
||||
\normalfont\small\hfill\green{\ensuremath{\hookleftarrow}}},
|
||||
postbreak = \hbox to 0pt{%
|
||||
\hss\normalfont\small\green{\ensuremath{\hookrightarrow}}\hspace{1ex}},
|
||||
commentstyle=\color{blue},showspaces=false,
|
||||
showstringspaces=false,stringstyle=\bfseries\color[rgb]{0.6,0,1},
|
||||
numbers=left,numberstyle=\tiny,stepnumber=2,
|
||||
keywordstyle=\bfseries\color[rgb]{0,0.1,0.5},
|
||||
frameround=tttt,frame=trBL,tabsize=4,backgroundcolor=\color[rgb]{.9,.9,1}}
|
||||
\lstloadlanguages{Octave}
|
||||
\def\lstlistingname{Листинг}
|
||||
\def\lstref#1{(см.~листинг~\ref{#1})}
|
||||
\graphicspath{{./pic/}}
|
||||
\nocolon
|
||||
\title{Краткое описание и протокол команд системы управления ИК-спектрометром БТА}
|
||||
\begin{document}
|
||||
\maketitle
|
||||
\section{Краткое описание}
|
||||
\subsection{Назначение и возможности системы}
|
||||
Система управления ИК-спектрометром разработана на основе ARM~--~микроконтроллера
|
||||
STM32F103VET6 (или аналогичного с объемом флеш-памяти не меньше 32\,Кб).
|
||||
|
||||
В базовом режиме система управления способна выполнять следующие \textbf{функции}:
|
||||
\begin{itemize}
|
||||
\item \textit{Управление затвором}: программное, ручное (при помощи тумблера) и по сигналу с системы
|
||||
сбора (подтяжка сигнального контакта к земле). Наименьший приоритет имеет ручное управление затвором
|
||||
(чтобы избежать блокировки управления затвором при включении прибора с положением тумблера в позиции
|
||||
<<затвор открыт>>). Электрический импульс на затвор подается лишь в том случае, если
|
||||
конденсатор в цепи управления затвором заряжен до напряжения не меньше~$20\,$В, в противном случае
|
||||
накопленного конденсатором заряда будет недостаточно для активации затвора. Постоянная времени
|
||||
$3RC=0.66\,$с определяет максимальное время полного заряда конденсатора (соответственно, заряд до
|
||||
напряжения~$20\,$В составит не более~$0.5\,$с), внося ограничение на минимальную экспозицию.
|
||||
В случае поступления запроса на изменение состояния затвора, когда конденсатор еще недостаточно
|
||||
заряжен, система управления отложит исполнение запроса до момента зарядки конденсатора.
|
||||
|
||||
Открытие\slash закрытие затвора осуществляется путем коммутации его обмоток к заряженному
|
||||
конденсатору емкостью~2200\,мкФ посредством H-моста TLE5205. При этом анализируется состояние флага
|
||||
ошибки моста: при инициализации проверяется, подключен ли затвор (проверка на обрыв); при
|
||||
управлении затвором анализируется отсутствие короткого замыкания. В случае выявления ошибки
|
||||
система управления один раз в секунду делает попытку реинициализации затвора, при этом индикатор
|
||||
открытия затвора мигает, а в консоль управления (если она находится в символьном режиме) выдается
|
||||
сообщение об ошибке. Как только проблема устранена и затвор успешно инициализирован, индикатор
|
||||
затвора гаснет.
|
||||
|
||||
Положение затвора контролируется посредством геркона, контакты которого замыкаются миниатюрным
|
||||
магнитом в полностью открытом состоянии затвора. Если состояние геркона не соответствует состоянию
|
||||
затвора, система сообщает об ошибке и устанавливает состояние затвора в <<неинициализированный>>.
|
||||
|
||||
|
||||
\item \textit{Условное измерение времени работы} (т.к. система управления не имеет в своем составе
|
||||
часов реального времени, возможно лишь измерение количества тактов, прошедших с момента последнего
|
||||
сброса). Система имеет два беззнаковых 32-битных счетчика: один служит для измерения количества
|
||||
условных миллисекунд, прошедших с момента последнего сброса, второй~--- для измерения количества
|
||||
переполнений первого счетчика (принципиально же это событие маловероятно, т.к. переполнение
|
||||
счетчика возникнет не раньше, чем через $49.7\,$суток работы системы).
|
||||
|
||||
|
||||
\item \textit{Опрос до восьми платиновых терморезисторов} HEL-705 (сопротивление при $0\degr$C
|
||||
1\,кОм) с выдачей измеренного встроенным 12-битным АЦП сопротивления для последующего преобразования
|
||||
согласно формуле из руководства (либо экспериментальному калибровочному графику) на персональном
|
||||
компьютере.
|
||||
Итоговая точность измерения температуры не хуже $\pm1.5\degr$C.
|
||||
Преобразование измеренного значения ADU~($v$) в сопротивление в сотых долях Ома~($R$) выполняется
|
||||
целочисленно по формуле
|
||||
$$ R_i = \frac{v_i\cdot m_i}{(2^{12} - v_i)\cdot d_i},$$
|
||||
где $i$~-- номер канала измерения, $m$~и~$d$~-- калибровочные коэффициенты (вычисляются по
|
||||
калибровке каждого канала из разложения полученных значений с плавающей точкой в цепные дроби).
|
||||
По умолчанию (в соответствии с тем, что сопротивление опорного резистора составляет~1\,кОм, по
|
||||
умолчанию все $m=100000$, $d=1$).
|
||||
|
||||
Согласно документации на используемые платиновые терморезистивные датчики, их сопротивление имеет
|
||||
следующую зависимость от температуры:
|
||||
$$
|
||||
R = R_0(1+A\cdot T+B\cdot T^2-100C\cdot T^3+C\cdot T^4),
|
||||
$$
|
||||
где
|
||||
\begin{description}
|
||||
\item $R_0 = 1000\,$Ом~-- сопротивление датчика при~$0\degr$C;
|
||||
\item $A=3.81\cdot10^{-3}$;
|
||||
\item $B = -6.02\cdot10^{-7}$;
|
||||
\item $C = \begin{cases}
|
||||
-6.0\cdot10^{-12}&\text{при $T<0\degr C$};\\
|
||||
0&\text{в остальных случаях.}
|
||||
\end{cases}
|
||||
$
|
||||
\end{description}
|
||||
|
||||
Вычисление температуры можно выполнить путем аппроксимации обратной зависимости, например, таким
|
||||
скриптом Octave:
|
||||
\begin{lstlisting}
|
||||
function Tout = H705(Rin)
|
||||
% Converts resistance of TRD into T (degrC)
|
||||
_alpha = 0.00375;
|
||||
_beta = 0.16;
|
||||
_delta = 1.605;
|
||||
T = [-200:0.1:50];
|
||||
_A = _alpha + _alpha*_delta/100.;
|
||||
_B = -_alpha*_delta/1e4;
|
||||
_C = zeros(size(T));
|
||||
_C(find(T<0.)) = -_alpha*_beta/1e8;
|
||||
rT = 1000.*(1 + _A*T + _B*T.^2 - _C.*T.^3*100. + _C.*T.^4);
|
||||
Tout = interp1(rT, T, Rin, 'spline')
|
||||
endfunction
|
||||
\end{lstlisting}
|
||||
|
||||
\item \textit{Измерение напряжения} на конденсаторе, управляющем затвором, и напряжения
|
||||
питания~$10\div12\,$В. Напряжение измеряется в сотых долях Вольта, преобразование также выполняется
|
||||
целочисленным делением, исходя из значений сопротивлений в плечах резисторных делителей, с которых
|
||||
снимается измеряемое напряжение. Напряжения измеряются по формуле:
|
||||
$$U_i = v_i\cdot\frac{m_i}{d_i},$$
|
||||
где $U_i$~-- измеряемое напряжение в сотых долях Вольта, остальные коэффициенты аналогичны
|
||||
измерению сопротивления терморезисторов.
|
||||
|
||||
По умолчанию коэффициенты являются наилучшим (через цепные дроби) приближением коэффициентов:
|
||||
$\frac{4700}{56000}\approx\frac{26}{25}$ для напряжения на конденсаторе затвора (резисторы в плечах
|
||||
имеют сопротивление $4.7\,$кОм и~$56\,$кОм) и $\frac{4700}{12000}\approx\frac{2}{7}$ для напряжения
|
||||
питания (соответственно, $4.7\,$кОм и~$12\,$кОм).
|
||||
|
||||
|
||||
\item \textit{Смену калибровочных коэффициентов} (коэффициенты хранятся в перезаписываемом блоке
|
||||
флеш-памяти микроконтроллера). Для измерения коэффициентов рекомендуется произвести измерение
|
||||
реальных значений сопротивления в каждом канале измерения температуры, а также напряжений на
|
||||
конденсаторе затвора и питания, вычислить поправочный множитель, определить значения новых
|
||||
коэффициентов на основе текущих значений (система управления позволяет отобразить все величины,
|
||||
хранящиеся в перезаписываемом блоке флеш-памяти микроконтроллера).
|
||||
|
||||
|
||||
\item \textit{Управление шаговыми двигателями} линейных трансляторов и турелей спектрометра.
|
||||
Аппаратно заложено ограничение на движение линейных трансляторов (при нахождении на концевом
|
||||
выключателе транслятор можно перемещать лишь в противоположную от концевика сторону). Все шаговые
|
||||
двигатели можно вращать на определенное количество шагов относительно текущей позиции. После
|
||||
останова шагового двигателя система сообщает его текущее условное положение в количестве шагов (шаги
|
||||
отсчитываются в условном положительном направлении вращения шаговых двигателей, для турелей от
|
||||
позиции~\No\,1, для линейных трансляторов~--- от концевика <<минус>>). Для однозначного сброса
|
||||
счетчиков позиций шаговых двигателей необходимо перед началом работы установить все турели в
|
||||
позиции~\No\,1, а все линейные трансляторы сместить в <<минусовую>> область до упора в концевик.
|
||||
|
||||
В связи со схемотехническими ошибками реализации текущей версии системы управления во избежании
|
||||
возгорания драйверов шаговых двигателей программно запрещено управление более чем двумя двигателями
|
||||
одновременно, причем, оба двигателя не могут находиться в одной и той же группе (первая группа~---
|
||||
турели, вторая группа~--- линейные трансляторы). При длительной работе двигателей их драйверы
|
||||
нагреваются, поэтому желательно установить радиаторы на драйверы шаговых двигателей.
|
||||
|
||||
По умолчанию скорости работы двигателей первой группы устанавливаются в значение~333\,шага в
|
||||
секунду, а двигателей второй группы~--- в~500 шагов в секунду. Это соответствует одному обороту
|
||||
турели за 6~секунд и движению линейных трансляторов со скоростью $1.25\,$мм/с (полное перемещение
|
||||
транслятора дифракционных решеток и маски зрачка за 2~минуты, полное перемещение фокусировочного
|
||||
транслятора за 8 секунд). Однако, т.к. при старте шаговых двигателей используется разгон (для
|
||||
увеличения стартового момента силы в течение первых 64~шагов двигатель линейно ускоряется от
|
||||
$1/16\,$базовой скорости), а также турели приостанавливаются на 50\,мс в каждой фиксированной
|
||||
позиции (для точного определения положения), полные перемещения занимают несколько большее время.
|
||||
|
||||
Для ускорения времени вращения турелей из одного положения в другое система управления выбирает
|
||||
кратчайшую траекторию (т.е. турель с шестью позициями при переводе из позиции~<<1>> в позицию~<<2>>
|
||||
будет вращаться по направлению $1\arr2$, а при переводе из позиции~<<1>> в позицию~<<6>>~--- в
|
||||
направлении $1\arr6$). <<Положительные>> направления вращения турелей не совпадают, а определяются
|
||||
расположением кодирующих магнитов.
|
||||
|
||||
\item \textit{Световую индикацию}. Зеленый светодиод в верхней части стенки корпуса системы
|
||||
управления со стороны тумблеров отображает готовность системы к работе (прошла вся инициализация и
|
||||
система ожидает ввода команд), красный светодиод отображает открытое состояние затвора (в случае
|
||||
обрыва или короткого замыкания этот индикатор мигает). Также в нижней части панели размещены три
|
||||
светодиода для пассивной индикации наличия питающих напряжений (зеленый~--- наличие напряжения
|
||||
$+12\,$В, желтый~--- наличие напряжения $+36\,$В) и подключению этих напряжений к силовому
|
||||
коммутационному разъему микроконтроллера (красный светодиод).
|
||||
\end{itemize}
|
||||
|
||||
|
||||
|
||||
|
||||
В \textbf{расширенном режиме} (часть функций еще не реализована) система способна также:
|
||||
\begin{itemize}
|
||||
\item \textit{Проводить мониторинг температур} с точностью не хуже~$\pm0.3\degr$C при помощи
|
||||
внешнего блока АЦП (AD7794) с 16-канальными аналоговыми коммутаторами (ADG506A либо NX3L4051; вторая
|
||||
система, позволяющая повысить точность измерений до~$\pm0.05\degr$C, находится в стадии разработки).
|
||||
Повышение точности измерений достигается в данном случае за счет использования 24-битного
|
||||
внешнего АЦП и использования алгоритма измерения со сменой полярности опорного тока\footnote{Henry
|
||||
He, Minimizing Errors in Multiplexed 3-Wire RTD Data-Acquisition Systems.// Analog Dialogue~--
|
||||
47-09,~-- September~2013.}.
|
||||
|
||||
Так как данный функционал необходим лишь для тестирования температурных режимов криостата, в
|
||||
повседневном рабочем режиме он использоваться не будет.
|
||||
|
||||
|
||||
\item \textit{Измерять температуру внешних элементов} криостата спектрометра и системы управления
|
||||
при помощи цифровых 1-wire термодатчиков DS18B20/DS18S20 (в стадии разработки).
|
||||
|
||||
|
||||
\item \textit{Управлять тремя внешними нагрузками} (потребляемый ток не более 2А при продолжительном
|
||||
подключении) посредством двух нижних ключей и одного верхнего ключа (с контролем ошибок). Данный
|
||||
функционал зарезервирован для случая необходимости подогрева корпуса системы управления или
|
||||
управления прочими силовыми нагрузками.
|
||||
\end{itemize}
|
||||
|
||||
|
||||
|
||||
|
||||
Подключение к управляющему компьютеру производится посредством:
|
||||
\begin{itemize}
|
||||
\item \textit{USB}-соединения (<<виртуальный последовательный порт>>), используемого также для
|
||||
вывода диагностических сообщений при отладке;
|
||||
\item соединения через преобразователь \textit{USB$\leftrightarrow$TTL}, используемый для
|
||||
перепрограммирования микроконтроллера (параметры соединения задаются подключением по USB, по
|
||||
умолчанию это 115200/8-N-1);
|
||||
\item соединения через последовательный порт \textit{RS-232} (115200/8-N-1). Система управления
|
||||
имеет два разъема RS-232: slave (для подключения к компьютеру) и master (для подключения
|
||||
дополнительных устройств).
|
||||
\end{itemize}
|
||||
За исключением соединения по USB (с отладочными возможностями), все остальные порты являются
|
||||
равнозначными и позволяют управлять спектрометром при помощи одного и того же набора команд.
|
||||
Возможна реализация проксирования команд между портами master/slave с их перекодированием из одного
|
||||
формата в другой.
|
||||
|
||||
\subsection{Внешний вид и средства управления и коммутации}
|
||||
\begin{pict}
|
||||
\includegraphics[width=0.8\textwidth]{sysboard}
|
||||
\label{sysboard}
|
||||
\caption{Печатная плата системы управления}
|
||||
\end{pict}
|
||||
|
||||
На рис.~\ref{sysboard} изображена печатная плата системы управления, устанавливаемая на стойках в
|
||||
металлический двухъярусный корпус (в нижнем ярусе размещены блоки питания 12\,В и~36\,В, в
|
||||
верхнем~--- печатная плата). Для коммутации с внешними управляющими устройставми используются
|
||||
последовательный порт (справа вверху, на схеме обозначен как \textbf{RS-232 (комп.)}) и USB (в
|
||||
правой нижней части рисунка). Подключение вторичного исполнительного устройства (например,
|
||||
калибровочной платформы) выполняется при помощи второго последовательного порта (справа внизу, на
|
||||
схеме обозначен как \textbf{RS-232 (slave)}).
|
||||
|
||||
Остальные разъемы предназначены для подключения индикаторов, датчиков и исполнительных устройств:
|
||||
\begin{description}
|
||||
\item[Разъем затвора] --- управление затвором, а также двумя нагрузками, коммутируемыми нижними
|
||||
силовыми ключами;
|
||||
\item[SPI] --- подключение внешнего АЦП;
|
||||
\item[Разъем ТРД] --- подключение восьми платиновых терморезистивных датчиков, установленных
|
||||
внутри криостата;
|
||||
\item[Служебный разъем] --- подключение преобразователя \textit{USB$\leftrightarrow$TTL} для
|
||||
программирования микроконтроллера, а также подключение аналогового мультиплексора при работе с
|
||||
внешним АЦП;
|
||||
\item[Разъем передней панели] --- подключение средств индикации и управления затвором,
|
||||
расположенных на лицевой панели прибора;
|
||||
\item[Силовой разъем] --- подключение концевых выключателей, датчиков Холла, шаговых двигателей,
|
||||
источников питания и возможность подключения нагрузки, коммутируемой верхним силовым ключом.
|
||||
\end{description}
|
||||
|
||||
\begin{pict}
|
||||
\includegraphics[width=0.8\textwidth]{sisupr_front}
|
||||
\label{sisuprfront}
|
||||
\caption{Лицевая панель корпуса системы управления}
|
||||
\end{pict}
|
||||
|
||||
На рис.~\ref{sisuprfront} изображена лицевая панель системы управления. На ней размещаются (по
|
||||
обозначению на изображении):
|
||||
\begin{description}
|
||||
\item[Питание] --- силовой разъем (220\,В) питания и выключатель (<<включено>> при правом положении
|
||||
тумблера);
|
||||
\item[0.75А] --- входной плавкий предохранитель на 0.75\,А, 220\,В;
|
||||
\item[5А] --- плавкий предохранитель, установленный после блока питания, 5\,А, 12\,В;
|
||||
\item[+12\,В] --- зеленый светодиод, отображающий наличие питающего напряжения~12\,В;
|
||||
\item[+36\,В] --- желтый светодиод, отображающий наличие питающего напряжения~36\,В;
|
||||
\item[нагрузка] --- красный светодиод, позволяющий детектировать подключение цепей <<нижнего>> и
|
||||
<<верхнего>> ярусов (соединение выходов блоков питания с силовым разъемом системы управления);
|
||||
\item[Затвор] --- разъем для подключения затвора;
|
||||
\item[Затвор ручн.] --- тумблер ручного управления затвором (<<открыто>> при правом положении
|
||||
тумблера);
|
||||
\item[От системы сбора] --- управляющий сигнал закрытия\slash открытия затвора от системы сбора
|
||||
(замыкание контактов вызывает закрытие затвора, размыкание~--- открытие);
|
||||
\item[Система готова] --- зеленый светодиод, отображающий готовность системы управления к работе;
|
||||
\item[Затвор открыт] --- красный светодиод, светящийся в случае, когда затвор находится в открытом
|
||||
состоянии; при ошибке затвора (короткое замыкание или обрыв) этот светодиод мигает.
|
||||
\end{description}
|
||||
|
||||
|
||||
\section{Символьный режим управления}
|
||||
\subsection{Описание}
|
||||
В символьном режиме управления обработка команд производится посимвольно, символ конца строки не
|
||||
имеет никакого значения и может быть использован для завершения введенных числовых
|
||||
последовательностей.
|
||||
|
||||
После реакции на команду система управления (далее~--- СУ) производит эхо введенной команды. Если
|
||||
введена неправильная команда, вместо эха возвращается вопросительный знак.
|
||||
|
||||
Краткую справку по командам при подключении в терминале можно узнать, нажав \verb'H'.
|
||||
|
||||
Некоторые команды требуют ввода числового значения (в этом случае в списке после команды записано:
|
||||
\textbf{(число)}), либо даже двух числовых значений (записано \textbf{(число1) (число2)}).
|
||||
Ввод числа выполняется без эха, для окончания ввода необходимо поместить во входной поток символ,
|
||||
не являющийся цифрой (например, символ конца строки). После этого введенное число
|
||||
выводится на экран и микроконтроллер ожидает подтверждения введенного числа (командой \verb'+')
|
||||
либо отклонением его (командой \verb'-'). Прервать ввод числа можно вводом символа \verb'-' во
|
||||
время ввода числа, либо вводом любого символа кроме знака <<минус>> или цифры сразу после запроса
|
||||
на ввод числа. Команды с отметкой \textbf{(служ)} используются лишь в служебных режимах
|
||||
(калибровка, градуировка и т.п.).
|
||||
|
||||
В случае получения неопознанных команд система управления возвращает символ вопросительного знака.
|
||||
|
||||
\subsection{Список команд символьного режима}
|
||||
\begin{description}
|
||||
\item[A] отображение сопротивлений терморезисторов по всем восьми каналам;
|
||||
\item[B] останов всех двигателей (может также использоваться для получения информации о
|
||||
текущем положении двигателей в шагах от условного нуля);
|
||||
%\item[C]
|
||||
\item[D (служ)] переключение внешнего АЦП в режим двойного преобразования (по умолчанию);
|
||||
\item[E (число)] состояние концевиков двигателя с указанным номером (если <<число>> выходит за
|
||||
пределы значения $0\div4$, отображается состояние всех концевиков);
|
||||
\item[F] отображение всех данных, сохраненных в перезаписываемой области флеш-памяти (калибровочные
|
||||
коэффициенты);
|
||||
\item[G] отображение текущего периода тактового генератора шаговых двигателей (в миллисекундах на
|
||||
шаг);
|
||||
\item[H (служ)] отображение справки по командам микроконтроллера;
|
||||
\item[I (служ)] отключение флага инициализации внешнего АЦП;
|
||||
\item[J (число)] установить турель щелей в указанную позицию (от 1 до 8);
|
||||
\item[K (число)] установить турель фильтров~\No\,1 в указанную позицию (от 1 до 6);
|
||||
\item[L (число)] установить турель фильтров~\No\,2 в указанную позицию (от 1 до 6);
|
||||
\item[M (служ)] включить/выключить мониторинг температур;
|
||||
%\item[N]
|
||||
%\item[O]
|
||||
\item[P (служ)] (в стадии разработки) добавить в систему 1-wire термодатчик;
|
||||
%\item[Q]
|
||||
%\item[R]
|
||||
\item[S (служ)] переключение внешнего АЦП в режим одинарного преобразования (снижение точности,
|
||||
повышение скорости);
|
||||
\item[T] отображение условного времени (в миллисекундах) с момента последнего перезапуска;
|
||||
%\item[U]
|
||||
%\item[V]
|
||||
%\item[W]
|
||||
\item[X (число)] установить период шаговых двигателей приводов линейных трансляторов в заданное
|
||||
число микросекунд;
|
||||
%\item[Y]
|
||||
\item[Z] отображение текущей позиции (в шагах от <<минусового>> концевика или первой
|
||||
позиции турели) всех шаговых двигателей;
|
||||
%\item[a]
|
||||
%\item[b]
|
||||
\item[c] закрыть затвор;
|
||||
\item[d (служ) (число1) (число2)] изменить значение коэффициента~$d_i$ ($i={0..7}$~---
|
||||
терморезисторы, $i=8$~--- напряжение затвора, $i=9$~--- напряжение питания);
|
||||
%\item[e]
|
||||
\item[f] сохранить во флеш-память значения измененных коэффициентов преобразования АЦП;
|
||||
\item[g (служ) (число)] коэффициент усиления внешнего АЦП;
|
||||
\item[h] отобразить значение напряжения (в сотых долях Вольта) на конденсаторе затвора;
|
||||
\item[i (служ)] инициализация внешнего АЦП;
|
||||
%\item[j]
|
||||
%\item[k]
|
||||
%\item[l]
|
||||
\item[m (служ) (число1) (число2)] изменить значение коэффициента~$m_i$ ($i={0..7}$~---
|
||||
терморезисторы, $i=8$~--- напряжение затвора, $i=9$~--- напряжение питания);
|
||||
%\item[n]
|
||||
\item[o] открыть затвор;
|
||||
\item[p] отобразить значение основного ($+12\,$В) напряжения питания в сотых долях Вольта;
|
||||
%\item[q]
|
||||
\item[r] повторная инициализация затвора в случае ошибки (обрыв провода, короткое замыкание и т.п.);
|
||||
\item[s (служ)] отображение значений по восьми каналам внешнего АЦП;
|
||||
\item[t] отображение текущего состояния затвора (открыт\slash закрыт);
|
||||
\item[u (служ)] отобразить состояние подключения USB;
|
||||
%\item[v]
|
||||
%\item[w]
|
||||
\item[x (число)] установить период шаговых двигателей приводов турелей в заданное число микросекунд;
|
||||
%\item[y]
|
||||
%\item[z]
|
||||
\item[0..4 (число)] вращать шаговый двигатель с указанным номером на заданное число шагов
|
||||
(положительное значение числа шагов соответствует вращению в условном положительном направлении,
|
||||
отрицательное~--- в условном отрицательном).
|
||||
\end{description}
|
||||
|
||||
|
||||
|
||||
\section{Строковый режим управления}
|
||||
\subsection{Описание}
|
||||
В строковом режиме система управления помещает входные данные в буфер вплоть до обнаружения во
|
||||
входном потоке символа перевода строки. Далее строка целиком обрабатывается парсером команд,
|
||||
выполняя заданные действия (либо отображая сообщение об ошибке формата команды).
|
||||
|
||||
Строковый режим предназначен для упрощения ввода команд с более высокого уровня интерфейса системы
|
||||
управления (отсутствует необходимость подтверждения введенных численных значений, нет возможности
|
||||
вызвать служебные команды). Данный режим является основным при работе с графическим интерфейсом
|
||||
системы управления.
|
||||
|
||||
Формат команды в строковом режиме имеет вид \textbf{[ команда параметр ]}, где
|
||||
\textbf{команда}~--- символ команды (аналогично символьному режиму, ниже приведен подробный список
|
||||
команд, доступных в строковом режиме), \textbf{параметр}~--- параметр этой команды (если имеется).
|
||||
|
||||
Пробелы после открывающей квадратной скобки и перед закрывающей необязательны. За закрывающей
|
||||
скобкой должен следовать символ окончания строки. Допускается запись нескольких команд внутри одной
|
||||
пары скобок, однако предпочтительным является следование правилу <<одна пара скобок~--- одна
|
||||
команда>>. Параметры команд передаются либо сразу за командой, либо отделяются от нее пробелом, и
|
||||
представляют из себя целое число в диапазоне \verb'int32_t'. Отсутствие бинарного формата позволяет
|
||||
не заботиться о порядке следования байт внутри слова, а также в случае необходимости посылать
|
||||
команды в порт напрямую, из терминала.
|
||||
|
||||
Ответ на введенную команду имеет аналогичный формат. Команда может быть полностью повторена в
|
||||
ответе, если выполнение действий, заданных этой командой, асинхронно (например, команда <<открыть
|
||||
затвор>>). В случае возникновения ошибок при исполнении действий, заданных командой, внутри ответа
|
||||
после символа команды идет слово \textbf{ERR}. Далее расшифровываются возможные ошибки. В случае
|
||||
неправильного формата команды либо неверно заданных параметров (например, переместить турель
|
||||
фильтра в позицию~\No\,7 при максимально возможных шести позициях) микроконтроллер не дает никакого
|
||||
ответа.
|
||||
|
||||
|
||||
\subsection{Список команд строкового режима}
|
||||
Служебные команды (\textbf{служ}) для работы с внешним АЦП позволяют из графического интерфейса
|
||||
системы управления выполнять мониторинг температурных режимов с высокой точностью. В основной
|
||||
работе прибора эти команды не используются.
|
||||
|
||||
Режим работы системы управления \textbf{асинхронный}! Это означает, что микроконтроллер отсылает
|
||||
информацию управляющему компьютеру без запроса от компьютера. Чтобы не пропустить сообщения,
|
||||
необходимо выполнять неблокирующие операции с портом, к которому подключен микроконтроллер, проводя
|
||||
периодический поллинг на предмет появления новых сообщений.
|
||||
|
||||
\begin{description}
|
||||
\item[\hbox{[ A ]}] отображение сопротивлений терморезисторов по всем восьми каналам; ответ команды
|
||||
имеет вид \textbf{[ A номер сопротивление]}, где \textbf{номер}~-- номер датчика (поочередно от~0
|
||||
до~7), \textbf{сопротивление}~-- его сопротивление (в сотых долях Ома);
|
||||
\item[\hbox{[ B ]}] останов всех двигателей (может также использоваться для получения информации о
|
||||
текущем положении двигателей в шагах от условного нуля); ответ имеет вид \textbf{[ B номер
|
||||
(ERR) (HEAT) позиция ]}, где \textbf{номер}~-- номер двигателя (поочередно от~0 до~4),
|
||||
\textbf{позиция}~-- абсолютная позиция (в шагах) от условного нуля (позиция~1 для турели,
|
||||
<<минусовой>> концевик для транслятора), флаг ошибки \textbf{ERR} может возникнуть для двигателей с
|
||||
номерами~$0\div2$ (турели) при останове вне фиксированной позиции (это возможно при аварии
|
||||
двигателя, датчиков Холла или проскальзывании шестерни, когда за один целый оборот турель не будет
|
||||
установлена в заданную позицию), флаг ошибки
|
||||
\textbf{HEAT} возникает в случае перегрева драйвера шаговых двигателей или короткого замыкания его
|
||||
выходов;
|
||||
\item[\hbox{[ E номер ]}] состояние концевиков двигателя с указанным номером; ответ команды имеет
|
||||
формат \textbf{[ E номер значение ]}, где \textbf{значение}~-- дешифрованное значение позиции
|
||||
концевика (для турелей это номер позиции, для линейных трансляторов~-- номер концевика (1~при
|
||||
движении в положительном направлении, 2~---~при движении в отрицательном); если в качестве номера
|
||||
двигателя задано число меньше 0 или больше 4, то отображается состояние всех концевиков;
|
||||
при перемещении линейных трансляторов или турелей система управления асинхронно генерирует
|
||||
сообщения, в которых указывается текущее значение позиции;
|
||||
\item[\hbox{[ G ]}] отображение текущего периода тактового генератора шаговых двигателей (в
|
||||
миллисекундах на шаг); ответ имеет вид \textbf{[ G T1 T2 ]}, где T1~-- период генератора
|
||||
двигателей турелей, а T2~-- период генератора двигателей линейных трансляторов;
|
||||
\item[\hbox{[ I ]} (служ)] отключение флага инициализации внешнего АЦП; ответом является эхо
|
||||
команды;
|
||||
\item[\hbox{[ J позиция ]}] установить турель щелей в указанную позицию (от~1 до~8); в случае
|
||||
верного ввода команды ответом является эхо команды;
|
||||
\item[\hbox{[ K позиция ]}] установить турель фильтров~\No\,1 в указанную позицию (от 1 до 6); в
|
||||
случае верного ввода команды ответом является эхо команды;
|
||||
\item[\hbox{[ L позиция ]}] установить турель фильтров~\No\,2 в указанную позицию (от 1 до 6); в
|
||||
случае верного ввода команды ответом является эхо команды;
|
||||
\item[\hbox{[ M ]} (служ)] включить/выключить мониторинг температур; ответ~--- эхо введенной
|
||||
команды;
|
||||
\item[\hbox{[ T ]}] отображение условного времени (в миллисекундах) с момента последнего
|
||||
перезапуска; ответ имеет вид \textbf{[ T ovr cnt ]}, где \textbf{ovr}~-- значение счетчика
|
||||
переполнения основного таймера, \textbf{cnt}~-- значение основного счетчика (количество условных
|
||||
миллисекунд с момента последнего рестарта системы);
|
||||
\item[\hbox{[ X период ]}] установить период шаговых двигателей приводов линейных трансляторов в
|
||||
заданное число микросекунд; ответом является эхо команды, если \textbf{период} имеет значение в
|
||||
диапазоне \verb'uint16_t';
|
||||
\item[\hbox{[ Z ]}] отображение текущей позиции (в шагах от <<минусового>> концевика или первой
|
||||
позиции турели) всех шаговых двигателей;
|
||||
\item[\hbox{[ b ]}] перевести режим ввода в символьный; ответом является эхо команды, после
|
||||
которого система будет ожидать команды в символьном режиме, перевод в строковый режим будет
|
||||
выполнен автоматически при первом же появлении знака \verb'[' в начале командной последовательности;
|
||||
\item[\hbox{[ c ]}] закрыть затвор; ответом является эхо команды, если команда принята (т.е. затвор
|
||||
инициализирован и находится в противоположном заданному состоянии);
|
||||
\item[\hbox{[ h ]}] отобразить значение напряжения (в сотых долях Вольта) на конденсаторе затвора;
|
||||
ответ имеет вид \textbf{[ h напряжение ]};
|
||||
\item[\hbox{[ i ]} (служ)] инициализация внешнего АЦП; ответом является эхо команды;
|
||||
\item[\hbox{[ o ]}] открыть затвор; ответом является эхо команды, если команда принята (т.е. затвор
|
||||
инициализирован и находится в противоположном заданному состоянии);
|
||||
\item[\hbox{[ p ]}] отобразить значение основного~($+12\,$В) напряжения питания в сотых долях
|
||||
Вольта; ответ имеет вид \textbf{[ h напряжение ]}; данное сообщение асинхронно генерируется
|
||||
системой управления в случае снижения пиковой просадки напряжения ниже 9\,В при получении команды
|
||||
движения или ниже 7.5\,В при работе шаговых двигателей (в этом случае также генерируется команда
|
||||
останова всех активных двигателей);
|
||||
\item[\hbox{[ r ]}] повторная инициализация затвора в случае ошибки (обрыв провода, короткое
|
||||
замыкание и т.п.); ответом является эхо команды;
|
||||
\item[\hbox{[ s ]} (служ)] отображение значений по восьми каналам внешнего АЦП; ответ зависит от
|
||||
текущего состояния АЦП: если АЦП не был инициализирован (или отсутствует), будет произведена
|
||||
попытка инициализации, а в ответ послано эхо команды, если же АЦП был проинициализирован, то в ответ
|
||||
приходит восемь сообщений вида \textbf{[ s номер ADU]}, где \textbf{номер}~-- номер
|
||||
датчика (от~0 до~8), а \textbf{ADU}~-- отсчеты АЦП в условных единицах;
|
||||
\item[\hbox{[ t ]}] отображение текущего состояния затвора; ответ команды имеет вид \textbf{[ t
|
||||
статус (reed состояние) ]}, где \textbf{статус} может иметь одно из следующих значений:
|
||||
\begin{description}
|
||||
\item[testing] затвор находится в состоянии проверки на отсутствие обрыва;
|
||||
\item[ready] затвор инициализирован и готов выполнять команды;
|
||||
\item[opened] затвор был открыт внешней командой (в т.ч. тумблером либо сигналом с системы
|
||||
сбора);
|
||||
\item[closed] затвор был закрыт внешней командой;
|
||||
\item[charged for opening] или \textbf{charged for closing} была получена команда
|
||||
открыть или закрыть затвор, но конденсатор еще недостаточно заряжен, команда будет выполнена
|
||||
как только напряжение на обкладках конденсатора достигнет 20\,В;
|
||||
\item[in process] вам удалось опросить затвор в те миллисекунды, когда он находится в
|
||||
состоянии закрывания или открывания;
|
||||
\item[error] произошла ошибка: обрыв провода либо короткое замыкание, эту ошибку необходимо
|
||||
устранить, а затем опять инициализировать затвор;
|
||||
\item[not initialised or broken] затвор не был инициализирован либо конденсатор затвора
|
||||
не подключен к источнику~36\,В;
|
||||
\end{description}
|
||||
флаг \textbf{состояние} описывает реальное состояние геркона затвора и имеет значение
|
||||
\textbf{opened}, если затвор открыт, либо \textbf{closed}, если затвор закрыт;
|
||||
\item[\hbox{[ x период ]}] установить период шаговых двигателей приводов турелей в заданное число
|
||||
микросекунд; ответом является эхо команды, если \textbf{период} имеет значение в диапазоне
|
||||
\verb'uint16_t';
|
||||
\item[\hbox{[ 0..4 шаги ]}] вращать шаговый двигатель с указанным номером на заданное число шагов
|
||||
(положительное значение числа шагов соответствует вращению в условном положительном направлении,
|
||||
отрицательное~--- в условном отрицательном); ответом является эхо команды.
|
||||
\end{description}
|
||||
Команды \textbf{J}, \textbf{K} и \textbf{L} (движение турелей) и \textbf{0..4} (движение
|
||||
двигателей на заданное количество шагов) не возвращают эха введенной команды в случае, если
|
||||
данный двигатель или двигатель из общей группы с данным еще находится в движении. После того, как
|
||||
указанный шаговый двигатель достигнет заданной позиции, а также в случае возникновения ошибки,
|
||||
микроконтроллер посылает сообщение вида \textbf{[ B номер (ERR) (HEAT) ]} (см.~описание команды
|
||||
\textbf{[ B ]}). При попытке движения линейного транслятора, стоящего на концевике, в сторону этого
|
||||
концевика, вместо эха принятой команды к движению ответ будет иметь вид аналогичный команде
|
||||
<<стоп>>. Проход турелей через фиксированные позиции (а также наезд линейного транслятора на
|
||||
концевик) сопровождается отчетом о текущей позиции (ответ команды \textbf{[ E ]}).
|
||||
|
||||
В режиме мониторинга температур микроконтроллер один раз в условные 10~секунд отсылает данные,
|
||||
аналогичные ответу на запрос \textbf{[ A ] [ s ]}.
|
||||
|
||||
В случае, когда поведение системы не соответствует ожиданиям, необходимо проверить значение
|
||||
счетчика условного времени командой \textbf{[ T ]}, позволяющего определить, была ли система
|
||||
перезапущена из-за какого-то внешнего фактора.
|
||||
|
||||
\end{document}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 587 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 475 KiB |
Loading…
x
Reference in New Issue
Block a user