\documentclass[a4paper,12pt]{extarticle}
\usepackage{/home/eddy/ed}
\graphicspath{{./pic/}}
\nocolon

\date{1 октября 2018 г.}
%\title{\textbf{Технический отчет~\No~}\rule{15mm}{0.4pt}\\Система температурного мониторинга\\
\title{\textbf{Технический отчет~\No~338}\\Система температурного мониторинга\\
главного зеркала БТА}
\makeatletter
\def\maketitle{%
  \vskip 3em%
  \begin{center}%
  \let \footnote \thanks
    {\LARGE \@title \par}%
    \vskip 1.5em%
    {\large
      \lineskip .5em%
      \begin{tabular}[t]{c}%
        \@author
      \end{tabular}\par}%
    \vskip 1em%
    {\large \@date}%
  \end{center}%
  \par
  \vskip 1.5em}
\makeatother

\author{Емельянов~Э.В.}
\begin{document}
\noindent
\begin{tabular}{p{0.6\textwidth}p{0.3\textwidth}}
& \textbf{Утверждаю}\\
& Директор САО РАН\\[2em]
& \hrulefill~~Власюк~В.В.\\[1em]
& <<\rule{7mm}{0.4pt}>>~\hrulefill~\number\year\,г. \\
\end{tabular}

\maketitle
\tableofcontents\newpage

Длительное время температура главного зеркала (далее ГЗ) БТА фактически определялась лишь по показаниям
одного датчика ввиду того, что использовалась некалиброванная система из терморезисторов, наклеенных на нижнюю
поверхность зеркала. Разброс показаний терморезисторов доходил до $3\degr$C, что не позволяло использовать
систему для исследования влияния температурных градиентов на форму поверхности ГЗ.

Для объективной аттестации реставрированного ГЗ \No1 необходимо было исключить возможность влияния тепловых
неоднородностей на форму зеркала, поэтому возникла потребность в создании новой системы теплового мониторинга.

\section{Выбор типа термодатчиков}
Согласно документации\footnote{Большой Азимутальный Телескоп (БТА). Техническое описание (Книга~--~1).~---
ЛОМО.}, в главном зеркале БТА высверлено 60~глухих отверстий диаметром 310\,мм и глубиной 430\,мм для
размещения механизмов разгрузки (57~разгрузок) и фиксирующих опор (3~опоры); 6~площадок глубиной около 20\,мм
для упора домкратов; 1~сквозное отверстие диаметром 360\,мм в центре для центрирующего стакана. Верхняя часть
каждой разгрузки отделена от зеркала воздушным промежутком, толщина которого более чем достаточна для
установки температурного датчика на поверхности стекла.

При размещении в отверстиях разгрузок термодатчиков появится возможность мониторинга распределения
температурных градиентов по поверхности зеркала. Температурный коэффициент линейного расширения
боросиликатного стекла имеет значение от $3\cdot10^{-6}\,\degr\text{C}^{-1}$
до~$7\cdot10^{-6}\,\degr\text{C}^{-1}$.
Для $\alpha_L=5\cdot10^{-6}\,\degr\text{C}^{-1}$ при радиальном градиенте температуры отклонение формы
поверхности зеркала между двумя выбранными точками на одну длину волны ($\lambda=500\,$нм) будет наблюдаться
при разности температур между этими точками $\sim0.15\degr$C. Таким образом, регистрация температур зеркала
БТА требуется с крайне высокой точностью (не хуже~$0.1\degr$C).

\subsection{Аналоговые температурные датчики}
\subsubsection{Термопары}
Термопары применяются обычно для измерения высоких (тысячи Кельвин) температур. Для измерения абсолютных
температур с высокой точностью термопары обычно не применяют. Однако, термопары "--- хорошее средство для
измерения разностей температур с высокой точностью (вплоть до $\pm0.01\degr$C).

В аризонской обсерватории <<Multiple Mirror Telescope>> использовалась система мониторинга градиентов
температуры по составному главному зеркалу (диаметром 6.5~метров, в дальнейшем составное зеркало было
заменено монолитным) на основе дифференциальных измерений с использованием термопар.

Высокоточное измерение температуры при помощи термопар "--- технически сложная задача. Ее реализация требует
значительно б\'ольших затрат времени и средств по сравнению с альтернативными методиками.

\subsubsection{Терморезисторы}
Компания U.S. Sensor предлагает терморезисторы, имеющие погрешность $\pm0.05\degr$C на интервале
температур~$0\div50\degr$C с различными значениями сопротивления при температуре~$25\degr$C (от $2.252\,$кОм
для PR222J2 до $50\,$кОм для  PR503J2. Цена одного такого датчика "--- около \$20.

Еще один вариант высокоточных термосопротивлений от этой компании "--- USP3021 и USP3986 (сопротивление,
соответственно, $10\,$кОм и $100\,$кОм) с заявленной точностью не меньше~$\pm0.01\degr$C! Однако, и цена этих
датчиков соответствует точности: около \$500 за штуку.

Pico Technology предлагает погружные терморезисторы серии PT100 в металлическом корпусе --- SE012, точность
которых по заявлению производителя не ниже~$\pm0.03\degr$C! Стоимость "--- около \$80 за штуку.
Компания предлагает и терморезисторы <<потребительского класса>> "--- SE011, обладающих
точностью~$\pm0.15\degr$C по цене около \$40.

Для разрабатывающегося в САО РАН ИК-спектрофотометра IRBIS мониторинг температуры <<холодных>> узлов прибора
было решено выполнять при помощи изготавливаемых компанией Honeywell платиновых терморезисторов HEL-705,
позволяющих выполнять надежные измерения температуры и в диапазоне кипящего жидкого азота. Гарантированная
производителем точность (без калибровки) составляет $0.2\%$ (т.е. $\pm0.15\,$K при температуре жидкого азота
и $\pm0.60\,$K при комнатной температуре). Цена одного такого термодатчика составляет порядка \$45.
Однако, проведенные в 2013--2014\,гг. испытания показали, что калибровка датчиков в совокупности с
высокоточной методикой измерения их сопротивления позволяет увеличить точность до $\pm0.05\degr$C в диапазоне
температур около $40\degr$C (например, от $-20\degr$C до $20\degr$C, чего вполне достаточно для работы с
ГЗ БТА).

\begin{pict}
\includegraphics[width=0.7\textwidth]{TRD_hot}
\caption{Показания восьми некалиброванных терморезисторов HEL-705 при комнатной температуре.}
\label{trdhot}
\end{pict}

\begin{pict}
\includegraphics[width=0.7\textwidth]{TRD_cold}
\caption{Показания двух некалиброванных терморезисторов HEL-705 при температуре жидкого азота.}
\label{trdcold}
\end{pict}

Для высокоточного измерения сопротивлений термодатчиков применялась схема, в которой каждый из проводников
подсоединенных по трехпроводной схеме датчиков коммутировался отдельным мультиплексором, а для уменьшения
воздействия внутреннего сопротивления мультиплексора производились замеры с изменяемым опорным током и сменой
входных каналов 24-битного АЦП AD7794\footnote{Henry He, <<Minimizing Errors in Multiplexed 3-Wire RTD
Data-Acquisition Systems>>,\\
http://www.analog.com/en/analog-dialogue/articles/minimizing-errors-in-multiplexed-3-wire-rtd.html}.

При комнатной температуре производились долговременные измерения показаний восьми тщательно
теплоизолировынных датчиков HEL-705 (см. рис.~\ref{trdhot}), также наблюдались изменения показаний двух
термодатчиков, помещенных в закрытую пенопластовой термоизоляцией (вследствие чего температура кипения
азота в емкости была выше, чем в открытой емкости) емкость с жидким азотом (см. рис.~\ref{trdcold}).

Численное моделирование показало, что в ограниченном диапазоне температур при помощи калибровки можно
добиться достаточно высокой точности измерения. Так, после простой линейной калибровки по точкам кипения
жидкого азота при давлении 680\,мм.рт.ст. (температура кипения азота при этом давлении составляет
$76.43\,$K\footnote{George T. Armstrong, <<Vapour Pressure of Nitrogen>>, J.Res.Nat'l.Bur.Stand. 53, 263
(1954).}) и плавления льда удалось обеспечить точность в широком диапазоне не хуже $\pm0.13\degr$C.

Основной проблемой использования терморезистивных датчиков для построения карт распределения температуры в
толще ГЗ БТА является крайне высокая стоимость терморезисторов и систем регистрации температуры с требуемой
точностью.


\subsection{Цифровые температурные датчики}
В отличие от аналоговых термодатчиков, требующих наличия крайне сложной системы регистрации температур,
цифровые термодатчики фактически всю схему регистрации содержат внутри себя, что позволяет значительно
упростить электронику регистрирующей системы. Поэтому на техническом совете в декабре 2014\,года автором и
был озвучен выбор в пользу цифровых термодатчиков.

Популярные недорогие 1-wire термодатчики (например, датчики DS18S20) имеют низкую точность ($\pm0.5\degr$C с
возможностью улучшения до $\pm0.25\degr$C при калибровке), что не позволяет использовать их в данной задаче,
однако, промышленностью выпускаются специализированные калиброванные цифровые датчики.

\subsubsection{TSic-506}
\begin{pict}
\includegraphics[width=0.7\textwidth]{Tsic506}
\caption{Отклонения показаний трех датчиков TSic-506 от среднего значения в диапазоне от $11\degr$C до
$22\degr$C.}
\label{tsic}
\end{pict}
Компания <<IST innovative sensor technology>> производит цифровые датчики TSic\texttrademark~506F с
интерфейсом ZACwire, обеспечивающих (по утверждению производителя) точность измерения температуры не
хуже~$\pm0.1\degr$C в диапазоне $5\div45\degr$C. Стандартный интервал измерений~--- $-10\div60\degr$C. Цена
одного такого датчика --- около \$12.

В 2013~г. в лабораторных условиях были испытаны три термодатчика TSic-506. Дискрет измерения температуры у
данных датчиков составляет $0.034\degr$C. Показания датчиков снимались в диапазоне температур от~$11\degr$C
до~$22\degr$C. Без калибровки разброс датчиков составил $\pm0.1\degr$C. После линейной калибровки
среднеквадратичное отклонение показаний датчиков составило не выше $0.02\degr$C (см. рис.~\ref{tsic}) с
воспроизводимостью не хуже $\pm0.05\degr$C. Однако, полный диапазон работы этих датчиков не позволяет быть
уверенным, что при работе в зимний период температура зеркала не выйдет за нижний предел их рабочей
температуры. Кроме того, формфактор TO-92, в котором выпускаются данные датчики, затрудняет осуществление
надежного температурного контакта между ними и поверхностью зеркала.

\subsubsection{TSYS-01}
<<TE Connectivity>> производит цифровые термодатчики TSYS-01 в удобном для выполнения надежного теплового
контакта корпусе QFN-16. Заявленная производителем точность работы датчика во всем рабочем диапазоне (от~
$-40\degr$C до~$125\degr$C) составляет не хуже~$\pm0.1\degr$C, а в диапазоне от~$5\degr$C до $40\degr$C
гарантируется точность не хуже $\pm0.05\degr$C. Цена датчика~--- около~\$12.

\begin{pict}
\includegraphics[width=0.7\textwidth]{T12_100pts}
\caption{Скользящее среднее для разницы показаний двух термодатчиков TSYS-01.}
\label{tsysmean}
\end{pict}

\begin{pict}
\includegraphics[width=0.7\textwidth]{T12_diff}
\caption{Разность показаний пары TSYS-01 без усреднения.}
\label{tsysdiff}
\end{pict}

Для анализа возможностей применения данных датчиков на ГЗ БТА в 2016--2017\,гг. было проведено их
исследование. Интерфейс работы датчиков "--- SPI или I2C (был выбран второй вариант, как требующий наименьшего
количества проводников). От стабильности источника питания датчиков (3.3\,В) зависит точность их показаний,
поэтому датчики запитывались от отдельного LDO.

Показания двух тщательно термоизолированных датчиков, приклеенных к пластине из боросиликатного стекла
отличались крайне незначительно: на рис.~\ref{tsysmean} приведены графики температур, усредненные по
100~точкам, а на рис.~\ref{tsysdiff} "--- <<сырые>> разности температур без усреднения. Такие высокие
точности показаний датчиков без калибровки, простота опроса термодатчиков, а также возможность использования
достаточно длинных проводников для подключения датчиков к контроллерам (до 5\,м при скорости I2C 10\,кГц)
позволили остановить свой выбор именно на них.

\section{Система температурного контроля}
\subsection{Организация системы}
Для подключения отдельного датчика к микроконтроллеру необходимо как минимум четыре проводника: два
сигнальных проводника шины I2C, питание и общий провод (<<земля>>). У датчиков имеется дополнительный вход,
позволяющий посредством подключения к нему общего или питания изменять младший бит адреса датчика (т.е. на
одной шине I2C одновременно может работать пара датчиков, либо же при помощи пятого сигнального проводника
можно выбирать нужный термодатчик). Чтобы подключение датчиков можно было выполнить стандартной витой парой
из двух пар проводников, был выбран вариант подключения датчиков попарно. Кроме того, как показали
исследования работы множества датчиков, одновременно подключенных к одной шине I2C, из-за наличия входной
емкости на затворах транзисторов каждого датчика уже наличие шестнадцати датчиков на шине требует снижения
сопротивления подтяжек на сигнальных входах с 4.7\,кОм до 750\,Ом (а это привело бы к увеличению
тепловыделения и уменьшению предельной длины соединительных проводников). В результате была выбрана
попарная схема подключения датчиков (с разными младшими адресами). Предельная длина проводников при этом не
уменьшилась, составляя 5\,м для тактовой частоты шины I2C 10\,кГц.

Ограничение на максимальную длину сигнальных проводников не позволяет установить контроллер термодатчиков вне
оправы ГЗ БТА (кроме того, в этом случае к контроллеру шел бы жгут из не менее 30~кабелей). Было принято
решение использовать топологию <<звезда>>: к каждому контроллеру подключается до восьми пар термодатчиков, а
между собой все контроллеры соединяются при помощи шины CAN, не имеющей столь малого ограничения на
предельную длину линии данных. Адресация контроллеров в CAN-шине задается при помощи микропереключателей или
перемычек. Один из контроллеров выполняет роль ведущего, позволяя выполнять опрос всех контроллеров сети.

\begin{pict}
\includegraphics[width=0.7\textwidth]{LUT}
\caption{Печатные платы прототипов контроллеров температур и креплений датчиков.}
\label{lut}
\end{pict}

В 2017~году были изготовлены прототипы печатных плат для монтажа термодатчиков и плат контроллеров (см.
рис.~\ref{lut}). За основу плат контроллеров был взят микроконтроллер STM32F042, имеющий аппаратные
интерфейсы CAN и USB (второй необходим для подключения к управляющему компьютеру). Для коммутации шины I2C
(что необходимо для переключения между разными парами термодатчиков) использованы аналоговые восьмиканальные
мультиплексоры 74HC4051, переключающие оба сигнальных проводника шины I2C на нужную пару термодатчиков.

Соединение контроллеров между собой выполняется при помощи стандартной витой пары пятой категории (четыре
пары проводников): одна пара используется для CAN-шины и по три проводника для питания (12\,В). Импульсный
источник питания на основе LM2576 преобразует 12\,В в 5\,В, которые при помощи раздельных LDO LM1117
преобразуются в 3.3\,В питания микроконтроллера с периферией и термодатчиков. Все сигнальные входы защищены
при помощи супрессоров. Вход питания защищен от переполюсовки при помощи <<идеального диода>> на основе
полевого транзистора AO3407, а от короткого замыкания "--- при помощи плавкого предохранителя на
0.5\,А\footnote{Все принципиальные схемы, печатные платы и исходные коды для данного проекта находятся в
репозитории https://github.com/eddyem/tsys01}.

\begin{pict}
\includegraphics[width=0.7\textwidth]{thermocontr}
\caption{Термоконтроллеры в сборе на CAN-шине.}
\label{thermocontr}
\end{pict}

Для анализа потребления и потерь на линии связи уровень входного напряжения питания измеряется при помощи
внутреннего АЦП микроконтроллера, а для измерения силы тока используется датчик MAX471. Также внутренним АЦП
микроконтроллера измеряется уровень напряжения питания термодатчиков и уровень напряжения 5\,В после
импульсного источника питания. Переключатель напряжения на основе TPS2051 позволяет управлять питанием
термодатчиков, отключая его в случае необходимости, а также служит предохранителем, отключая питание датчиков
в случае, если потребление превысит 0.5\,А (для защиты компонент контроллера в случае короткого замыкания по
питанию при <<горячем>> подключении или отключении датчиков).

Диагностика работы контроллеров выполняется посредством трех светодиодов. Отдельно стоящий в верхней части
платы светодиод является индикатором наличия напряжения питания микроконтроллера. Под микроконтроллером
распаяны еще два сигнальных светодиода: верхний является показателем активности микроконтроллера, мерцая один
раз в секунду; нижний светодиод загорается при наличии стабильного соединения на CAN-шине.

\subsection{Установка и отладка системы}
Установка и отладка системы сбора данных началась с мая 2018~года "--- после замены ГЗ БТА. Для того, чтобы
иметь возможность аттестовать точности показаний датчиков в широких температурных диапазонах и произвести при
необходимости их калибровку был изготовлен стенд с мультиплексором на основе семи 74HC4051, позволяющий при
помощи одного микроконтроллера работать с 96~термодатчиками.

\begin{pict}
\includegraphics[width=0.7\textwidth]{stand_test}
\caption{Подготовка стенда для аттестации термодатчиков.}
\label{senstest}
\end{pict}

На 18-мм плиту из дюралюминия было установлено 42~пары термодатчиков (в 40~парах термодатчики пары находились
в непосредственной близости друг от друга на расстоянии около 1.5\,см). На рис.~\ref{senstest} приведено
изображение конструкции во время монтажа последнего ряда термодатчиков на пластину. Пластина со стороны
датчиков была закрыта многослойной изоляцией из пенополиэтилена и помещена в бокс из листовой теплоизоляции.
По углам и в центре пластины были наклеены терморезисторы HEL-705 для независимого определения температуры в
разных частях пластины.

Далее внутрь бокса заливался жидкий азот, охлаждающий пластину с термодатчиками, а поверх бокса
устанавливалась емкость с жидким азотом, чтобы исключить появление инея и водяного конденсата на платах с
термодатчиками и электрических контактах.

К сожалению, из-за огромного количества проводников не удалось обеспечить равномерного распределения
температуры по поверхности пластины: при пассивном нагреве пластины до $-30\degr$C, когда и начались
измерения показаний термодатчиков, разница температур между противоположными краями пластины (по длине)
составила более $1.5\degr$C. Такой высокий градиент температуры не позволил осуществить массовую аттестацию
термодатчиков, однако, учитывая малое расстояние между датчиками каждой конкретной пары, появилась
возможность отбраковать те пары, где показания в диапазоне от $-30\degr$C до комнатной температуры отличались
больше, чем на $0.05\degr$C. После того, как пластина в среднем нагрелась до $10\degr$C, градиент по ее длине
снизился до $0.5\degr$C, а по ширине "--- до $0.1\degr$C, что позволило исследовать поведение
пар термодатчиков в группах по 6--8~пар.

\begin{pict}
\includegraphics[width=0.4\textwidth]{Tsens0location}\hspace{2em}
\includegraphics[width=0.4\textwidth]{Tsens1location}
\caption{Расположение датчиков пары.}
\label{senspair}
\end{pict}

В результате было отобрано 30~пар термодатчиков с разбросом показаний внутри пары не выше $\pm0.025\degr$C и
среднеквадратичным отклонением от среднего для всех пар не выше $0.05\degr$C. 28~пар термодатчиков
установлено в разгрузках ГЗ БТА, одна пара измеряет температуру внутри вспомогательного помещения фокуса~Н2
(где расположена система регистрации) и еще одна пара оставлена в качестве резервной.
На рис.~\ref{senspair} приведены фотографии расположения термодатчиков одной из пар: один датчик приклеен к
донышку углубления под разгрузку (таким образом измеряя температуру на расстоянии около 20\,см от поверхности
зеркала), второй наклеен на заднюю часть зеркала вблизи соответствующей разгрузки.

\begin{pict}
\includegraphics[width=0.7\textwidth]{Controllers}
\caption{Расположение термодатчиков в разгрузках ГЗ БТА.}
\label{sensloc}
\end{pict}

На рис.~\ref{sensloc} приведено расположение термодатчиков (залитые розовым окружности) и контроллеров
(окружности с нумерацией внутри) на главном зеркале. Расположение изображения соответствует виду из стакана
первичного фокуса. Рядом с каждой разгрузкой указан ее номер. Цветной заливкой зеркало разделено на четыре
сектора, отображающих группы датчиков, подключенных к одному контроллеру.
Для обеспечения возможности контроля дрейфа разностей показаний термодатчиков в разгрузках \No15 и \No9
пары термодатчиков продублированы. Обеспечить сверку показаний датчиков с реальными температурами можно при
помощи четырех терморезисторов HEL-705, установленных в разгрузках \No\No~40, 46, 52 и~58. Изготовлен
макет аналоговой части системы регистрации данных с терморезисторов на трех низкоомных
мультиплексорах NX3L4051 и АЦП AD7794.

\begin{pict}
\includegraphics[width=0.5\textwidth]{hand_meter}
\caption{Устройство для ручного измерения температур ГЗ БТА.}
\label{handmeter}
\end{pict}

\begin{pict}
\includegraphics[width=0.45\textwidth]{T0-180529}\hfil
\includegraphics[width=0.45\textwidth]{T1-180529}
\caption{Карты температур, построенные вручную 18~марта 2018~г. Слева "--- температура в глубине зеркала,
справа "--- на его нижней поверхности.}
\label{mirhandtemps}
\end{pict}

К середине мая датчики были установлены на ГЗ БТА и специалисты СЭК БТА занялись установкой разгрузок. До
окончания работ по установке разгрузок не было возможности смонтировать коммуникационные линии в оправе
зеркал, поэтому на макетной плате было собрано простое устройство, позволяющее вручную измерять температуры
для каждой пары датчиков (см. рис.~\ref{handmeter}). На рис.~\ref{mirhandtemps} изображена одна из
температурных карт, построенных вручную.

\begin{pict}
\includegraphics[width=0.6\textwidth]{CANbusBoard}
\caption{Прототип для отладки CAN и USB интерфейсов.}
\label{canusblut}
\end{pict}

В июне--июле 2018~г. производилась отладка аппаратного и программного обеспечения системы мониторинга. Был
сформирован протокол передачи данных по CAN-шине, отлажен конечный автомат измерения температур,
завершена аппаратная отладка пяти распаянных плат контроллеров термодатчиков.
Для упрощения разработки программной части интерфейсов CAN и USB изготовлена отладочная плата (см.
рис.~\ref{canusblut}). Отладка на отдельной плате позволила уменьшить риск повреждения элементов основных
контроллеров на стадии разработки программной части, не связанной с опросом термодатчиков. На момент
написания данной документации разработка USB-CDC интерфейса еще не закончена, поэтому основной контроллер
соединен с управляющим компьютером посредством переходника UART$\leftrightarrow$USB.

Контроллеры термодатчиков были смонтированы в оправе ГЗ БТА в августе 2018~г. Из вспомогательного помещения в
опоре фокуса Н2 в пространство между ГЗ БТА и его оправой были проложены коммуникационные линии на основе
витой пары cat5. Произведено временное закрепление коммуникационных линий и контроллеров в оправе ГЗ БТА.
Окончательное решение об местах установки термодатчиков и контроллеров, а также их количестве должно быть
вынесено после окончания периода пробной эксплуатации системы температурного мониторинга.

\begin{pict}
\includegraphics[width=0.32\textwidth]{T0}\hfil
\includegraphics[width=0.32\textwidth]{T1}\hfil
\includegraphics[width=0.32\textwidth]{Tgrad}
\caption{Карты распределения температуры, генерируемые системой сбора данных. Слева "--- температура в толще
зеркала, в центре "--- температура на его нижней поверхности, справа "--- градиент температуры по толщине
(температура в толще минус температура на дне).}
\label{tempgraphs}
\end{pict}

В августе 2018~г. был смонтирован компьютер системы сбора данных (Orange Pi) в совокупности с блоками
питания и основным контроллером "--- в металлическом коробе, установленном на стене вспомогательного
помещения третьего этажа стойки фокуса Н2 телескопа. После отладки алгоритма опроса термодатчиков были
написаны сетевые демоны, позволяющие получить доступ извне к собранным системой данным.

Основной сетевой демон системы сбора работает на машине mirtemp.sao.ru, обслуживая порт 4444. Один раз в
минуту демон дает команду запуска измерения температур и считывает полученные данные. Накопленные за 15~минут
данные усредняются и по ним при помощи утилиты gnuplot строятся графические карты распределения температур
(см. рис.~\ref{tempgraphs}), доступ к которым можно получить через веб. Последние считанные данные доступны
как из клиентского приложения, так и из любого браузера: по адресу mirtemp.sao.ru:4444/T0 можно получить
таблицу распределения температур в толще зеркала, mirtemp.sao.ru:4444/T1 "--- на дне
зеркала, mirtemp.sao.ru:4444/T2 "--- в помещении Н2, mirtemp.sao.ru:4444/Tgrad "--- разницу между T0 и~T1,
mirtemp.sao.ru:4444/Tmean "--- среднюю арифметическую температуру (рассчитанную по всем последним
данным с отбраковкой измерений, отличающихся от медианной температуры больше, чем на $3\sigma$).
Формат записей таков: в первой и второй колонке указаны координаты (в метрах) точки измерения температуры; в
третьей колонке "--- ее значение; а в четвертой "--- время, когда было произведено измерение (в формате UNIX
time). Графики усредненных последних 15~измерений не содержат времени последнего измерения и доступны по
адресам http://mirtemp.sao.ru/T0, http://mirtemp.sao.ru/T1 и http://mirtemp.sao.ru/Tgrad.

На основе образцов исходных кодов систем сбора метеорологических данных для СУ БТА, предоставленных
с.н.с.~лабории информатики В.С.~Шергиным, разработан интерфейс, обеспечивающий передачу средней температуры
зеркала в систему управления телескопом.

\section{Заключение}
В ходе эксплуатации системы регистрации температур ГЗ БТА до начала работ по его алюминированию
выявлено, что выбрано недостаточное количество опорных точек: для построения более точной карты распределения
температур желательно разместить термодатчики в каждой разгрузке зеркала. Кроме того, градиент по толще
зеркала не играет такой важной роли, как радиальный градиент. Видоизменить существующую систему можно,
используя датчики с нижней поверхности зеркала и дополнительные датчики. Использующихся четырех контроллеров
при этом хватит в~т.ч. для контрольного дублирования датчиков в четырех точках.

% https://latex.org/forum/viewtopic.php?t=7732
\makeatletter
\newcommand\appendix@section[1]{%
\refstepcounter{section}%
\orig@section*{Приложение \@Alph\c@section: #1}%
\addcontentsline{toc}{section}{Приложение \@Alph\c@section: #1}%
}
\let\orig@section\section
\g@addto@macro\appendix{\let\section\appendix@section}
\makeatother
\appendix

\section{Программные протоколы}
\subsection{Протокол обмена данными по последовательному интерфейсу}
Связь управляющего компьютера с любым контроллером системы сбора возможна либо через последовательный порт
(отладочный интерфейс USART1 выведен на платах контроллеров) при помощи переходников
USART$\leftrightarrow$USB, либо при помощи соединения через USB (в разработке). Соединение через
последовательный интерфейс выполняется на скорости 115200~бод в формате 8N1.

Рабочий протокол включает в себя служебные команды, предназначенные для отладки. Формат команды:
\verb'[<num>]<char><endline>', где \verb'<char>' "--- символ команды (большая или малая латинская буква), а
\verb'<endline>' "--- символ завершения строки (\verb'\n'). Если параметр \verb'[<num>]' опущен (т.е. команда
состоит из одного символа), результат зависит от регистра команды: команда в верхнем регистре инициализирует
широковещательную передачу соответствующего сообщения всем контроллерам сети, а также локальный ее запуск;
команда в нижнем регистре запускается только локально на данном контроллере (существуют также команды,
не имеющие <<локального>> варианта).

При необходимости послать сетевую команду конкретному контроллеру используется расширенный формат команд. В
этом случае параметр \verb'[<num>]' является числом от 1 до 7, а команда "--- только в верхнем регистре.
Данный вариант команд доступен для исполнения лишь с ведущего контроллера, имеющего номер 0. Если номер
контроллера отличается от нуля, сетевые команды (как конкретному контроллеру, так и широковещательные) для
него недоступны (исключение сделано для отладочных команд \textbf{B} и \textbf{D}).

Далее приводится список основных команд. Если команда пишется в обоих регистрах, то доступны как сетевые, так
и локальные ее варианты, для команд только в нижнем регистре доступен лишь локальный вариант, а только в
верхнем "--- лишь сетевой. Команды, использующиеся исключительно для отладки, отмечены как [\textit{отладка}].

\begin{description}
\item[B] [\textit{отладка}] посылка широковещательного тестового сообщения по CAN-шине;
\item[c] [\textit{отладка}] отобразить коэффициенты заводской калибровки для всех подключенных термодатчиков;
\item[D] [\textit{отладка}] послать по CAN-шине тестовое сообщение ведущему контроллеру;
\item[Ee] выйти из режима сканирования температуры;
\item[Ff] отключить питание термодатчиков (не рекомендуется часто отключать питание, иначе датчики быстро
        выйдут из строя);
\item[g] отобразить адрес платы, считанный с перемычек при последней процедуре инициализации CAN;
\item[Hh] переключить I2C в режим скорости 100\,кГц (не рекомендуется для длинных линий);
\item[i] переинициализировать CAN (полезно для смены адреса платы <<на горячую>>);
\item[Ll] переключить I2C в режим скорости 10\,кГц (режим по умолчанию);
\item[P] ping "--- запрос на существование в сети контроллера с соответствующим адресом (либо
        широковещательный ping всех существующих в сети контроллеров);
\item[Rr] переинициализация I2C;
\item[Ss] войти в режим сканирования температуры (не чаще, чем 1~раз в 15~секунд автоматически запускается
        процесс измерения температуры с выдачей данных в CAN-шину);
\item[Tt] запуск одиночного измерения температуры (стандартная команда для измерений по запросу с ведущего
        контроллера);
\item[u] проверить состояние CAN-шины (были ли ошибки в последних транзакциях);
\item[Vv] переключить I2C в режим наименьшей скорости (около 5.8~кГц);
\item[Z] запросить состояние термодатчиков.
\end{description}

\subsection{Протокол пересылки данных по CAN-шине}
Данные по шине CAN передаются пакетами переменной длины: от одного до восьми байт. В каждом пакете нулевым
байтом является маркер типа пакета: данные (\verb'0x5A') или команда (\verb'0xA5'). В штатном режиме
эксплуатации ведущий контроллер отсылает только команды, а ведомые "--- только данные, однако, в тестовом
режиме ведомый контроллер может также пересылать данные. В случае отправки команды пакет имеет длину два
байта и байтом~1 следует передающаяся команда.

Перечень команд (числовое значение команды, мнемоническое обозначение, расшифровка):
\begin{description}
\item[0x00] \verb'CMD_PING' ожидание пакета данных с эхом этой команды (используется для проверки
        существования контроллера на шине);
\item[0x01] \verb'CMD_START_MEASUREMENT' начать одиночное измерение температуры;
\item[0x02] \verb'CMD_SENSORS_STATE' получить состояние датчиков;
\item[0x03] \verb'CMD_START_SCAN' войти в режим непрерывного измерения температуры;
\item[0x04] \verb'CMD_STOP_SCAN' выйти из предыдущего режима;
\item[0x05] \verb'CMD_SENSORS_OFF' отключить питание датчиков;
\item[0x06] \verb'CMD_LOWEST_SPEED' минимальная скорость I2C;
\item[0x07] \verb'CMD_LOW_SPEED' низкая скорость I2C;
\item[0x08] \verb'CMD_HIGH_SPEED' высокая скорость I2C;
\item[0x09] \verb'CMD_REINIT_I2C' реинициализация шины I2C;
\item[0xDA] \verb'CMD_DUMMY0' тестовая команда;
\item[0xAD] \verb'CMD_DUMMY1' тестовая команда.
\end{description}

Формат данных имеет следующую структуру:
\begin{description}
\item[байт 1] номер контроллера (установленный перемычками на плате, т.е. число от~0 до~7);
\item[байт 2] полученная команда, ответ на которую отправляется в пакете;
\item[байты 3..7] данные (в ответе на команду \verb'CMD_PING' эти байты отсутствуют).
\end{description}

Ответом на команду \verb'CMD_SENSORS_STATE' является число, характеризующее состояние датчиков у данного
контроллера:
\begin{description}
\item[0x00] \verb'SENS_INITING' питание включено, происходит инициализация;
\item[0x01] \verb'SENS_RESETING' процедура обнаружения датчиков командой сброса;
\item[0x02] \verb'SENS_GET_COEFFS' получение калибровочных коэффициентов обнаруженных датчиков;
\item[0x03] \verb'SENS_SLEEPING' <<спящее>> состояние между измерениями;
\item[0x04] \verb'SENS_START_MSRMNT' всем датчикам отправлена команда начала измерений температуры;
\item[0x05] \verb'SENS_WAITING' ожидание окончания измерений температуры;
\item[0x06] \verb'SENS_GATHERING' сбор температуры с обнаруженных термодатчиков;
\item[0x07] \verb'SENS_OFF' питание датчиков отключено;
\item[0x08] \verb'SENS_OVERCURNT' обнаружено короткое замыкание либо превышение допустимого тока, питание
        датчиков временно отключено;
\item[0x09] \verb'SENS_OVERCURNT_OFF' попытка включения питания датчиков более 32~раз закончилась состоянием
        \verb'SENS_OVERCURNT', питание отключено вплоть до получения внешней команды инициализации (команда
        \verb'CMD_START_MEASUREMENT').
\end{description}

После окончания измерений температурных данных каждый ведомый контроллер пересылает значения температур со
всех обнаруженных термодатчиков ведущему. Формат температурных данных имеет следующую структуру:
\begin{description}
\item[байт 3] номер датчика ($10\cdot N + M$, где $N$~-- номер канала мультиплексора, $M$~-- номер датчика
        в паре, т.е. 0, 1, 10, 11, 20, \ldots , 71);
\item[байт 4] старший байт данных;
\item[байт 5] младший байт данных.
\end{description}
Температура передается в формате \verb'int16_t', в сотых долях градуса Цельсия. Например, температуре
$-12.56\degr$C соответствует число $-1256$, а температуре $18.98\degr$C "--- число~$1898$.
При считывании данных через последовательный интерфейс в случае ошибки измерений (значение температуры,
полученное с шины, лежит вне допустимого диапазона) возвращается число -30000, а при ошибке передачи команды
считывания измеренных данных "--- число -31000.

\vspace{3em}

\hfill\parbox{0.4\textwidth}{
\rule{20mm}{0.4pt}~~/Емельянов~Э.В./\\[1em]
<<\rule{7mm}{0.4pt}>>~\rule{30mm}{0.4pt}~\number\year\,г. \\
}


\end{document}


\begin{pict}
\includegraphics[width=0.7\textwidth]{}
\caption{.}
\label{}
\end{pict}
