%% Generated by Sphinx.
\def\sphinxdocclass{article}
\documentclass[a4paper,11pt,english]{sphinxhowto}
\ifdefined\pdfpxdimen
   \let\sphinxpxdimen\pdfpxdimen\else\newdimen\sphinxpxdimen
\fi \sphinxpxdimen=.75bp\relax
\ifdefined\pdfimageresolution
    \pdfimageresolution= \numexpr \dimexpr1in\relax/\sphinxpxdimen\relax
\fi
%% let collapsible pdf bookmarks panel have high depth per default
\PassOptionsToPackage{bookmarksdepth=5}{hyperref}

\PassOptionsToPackage{booktabs}{sphinx}
\PassOptionsToPackage{colorrows}{sphinx}

\PassOptionsToPackage{warn}{textcomp}
\usepackage[utf8]{inputenc}
\ifdefined\DeclareUnicodeCharacter
% support both utf8 and utf8x syntaxes
  \ifdefined\DeclareUnicodeCharacterAsOptional
    \def\sphinxDUC#1{\DeclareUnicodeCharacter{"#1}}
  \else
    \let\sphinxDUC\DeclareUnicodeCharacter
  \fi
  \sphinxDUC{00A0}{\nobreakspace}
  \sphinxDUC{2500}{\sphinxunichar{2500}}
  \sphinxDUC{2502}{\sphinxunichar{2502}}
  \sphinxDUC{2514}{\sphinxunichar{2514}}
  \sphinxDUC{251C}{\sphinxunichar{251C}}
  \sphinxDUC{2572}{\textbackslash}
\fi
\usepackage{cmap}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amssymb,amstext}
\usepackage{babel}



\usepackage{tgtermes}
\usepackage{tgheros}
\renewcommand{\ttdefault}{txtt}



\usepackage[Bjarne]{fncychap}
\usepackage{sphinx}
\sphinxsetup{hmargin={0.7in,0.7in}, vmargin={1in,1in},         verbatimwithframe=true,         OuterLinkColor={rgb}{0,0,0.6},         InnerLinkColor={rgb}{0,0,0},         warningBorderColor={rgb}{0.8,0,0},         cautionBorderColor={rgb}{1,0.8,0},         TitleColor={rgb}{0,0,0}}
\fvset{fontsize=auto}
\usepackage{geometry}


% Include hyperref last.
\usepackage{hyperref}
% Fix anchor placement for figures with captions.
\usepackage{hypcap}% it must be loaded after hyperref.
% Set up styles of URL: it should be placed after hyperref.
\urlstyle{same}

\addto\captionsenglish{\renewcommand{\contentsname}{Contents}}

\usepackage{sphinxmessages}
\setcounter{tocdepth}{2}


        \usepackage{currfile}
        \usepackage[internal]{eso-pdm}

        \pdmProgram{ELT}
        \pdmProject{Cryo HMI Framework}
        \pdmDocType{Manual (MAN)}
        \pdmDocDate{2024-08-01}

        \pdmDocId{ESO-000000}
        \pdmDocVersion{1}
        \pdmTitle{ ELT Cryo HMI Framework User Manual }
        \pdmHeaderTitle{Cryo HMI Framework}
        \pdmSignatureList{
                \pdmSignature{Owner}{Del Valle, Diego}
                \pdmSignature{Validated by WPM}{Kiekebusch, Mario}
                \pdmSignature{Approved by PM}{Kiekebusch, Mario}
            }
        % Disable pagestyle changes as it breaks ESO PDM style
        \renewcommand{\pagestyle}[1]{}

        % Map the unicode U+2A2F character to a multiplication sign.
        \DeclareUnicodeCharacter{2A2F}{$\times$}
    

\title{Cryo HMI Framework User Manual}
\date{Aug 25, 2026}
\release{1.1.0}
\author{Diego del Valle}
\newcommand{\sphinxlogo}{\vbox{}}
\renewcommand{\releasename}{Release}
\makeindex
\begin{document}

\ifdefined\shorthandoff
  \ifnum\catcode`\=\string=\active\shorthandoff{=}\fi
  \ifnum\catcode`\"=\active\shorthandoff{"}\fi
\fi

\pagestyle{empty}

        \pdmmaketitle

        % Scope redefinition of clearpage to relax to avoid new pages for each
        \begingroup
        \let\clearpage\relax

        \section*{Release}
        This document corresponds to
        \sphinxhref{https://gitlab.eso.org/ifw/ifw-ll}{\texttt{CryoHmiFramework}\footnote{\sphinxnolinkurl{https://gitlab.eso.org/ifw/ifw-ll}}} v1.1.0.

        \makeatletter
        \def\author{\@author}
        \makeatother

        \section*{Authors}
        \begin{tabularx}{\linewidth}{|p{0.25\linewidth}|X|}
        \hline
        \multicolumn{1}{|l|}{\textbf{Name}}\tbspa &
        \multicolumn{1}{l|}{\textbf{Affiliation}} \tbspb\\
        \hline
        \tbspa Diego del Valle & ESO \tbspb\\
        \hline
        \end{tabularx}

        \section*{Change Record from previous Version}
        \begin{tabularx}{\linewidth}{|p{0.25\linewidth}|X|}
        \hline
        \multicolumn{1}{|l|}{\textbf{Affected Section(s)}}\tbspa &
        \multicolumn{1}{l|}{\textbf{Changes / Reason / Remarks}} \tbspb\\
        \hline
        %\tbspa \ref{\detokenize{docs/clients/config_tool:config-tool-operations}}
        %    & TODO: Indicate changes. \tbspb\\
        \tbspa TODO & TODO \tbspb\\
        \hline
        \end{tabularx}
        \pdmmakeauthors
        \pdmmakechangerecord

        % Restore \clearpage
        \endgroup
    
\pagestyle{plain}
\pagenumbering{arabic}\tableofcontents\newpage
\pagestyle{normal}
\phantomsection\label{\detokenize{index::doc}}


\sphinxstepscope


\section{Introduction}
\label{\detokenize{docs/000_introduction:introduction}}\label{\detokenize{docs/000_introduction:introduction-label}}\label{\detokenize{docs/000_introduction::doc}}
\sphinxAtStartPar
Cryo HMI Framework Control is a collection of TE2000 HMI Framework Controls that are made
specifically to be used with IFW PLC’s Cryo Library.

\begin{sphinxadmonition}{warning}{Warning:}
\sphinxAtStartPar
Usually, any user of ESO Cryo Framework should not directly use this package. IFW provides an
HMI Template Project with pre\sphinxhyphen{}made user controls. But we leave this available for
documentation purposes and, if for any reason, the developer decides to implement a project
specific user control based on the framework.

\sphinxAtStartPar
ESO shall be contacted first to decide if there is a real need or not.
\end{sphinxadmonition}


\subsection{Scope}
\label{\detokenize{docs/000_introduction:scope}}
\sphinxAtStartPar
This document is the user manual for Cryo HMI Framework Control. The intended audience
are ELT users, consortia developers or Cryogenic Engineers.

\sphinxAtStartPar
This package is one of the deliverables for ESO Cryo Framework, which is composed by:
\begin{itemize}
\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Cryo Library}: PLC Library for standard ESO Cryogenic devices.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Cryo HMI Framework Controls}: Collection of HMI Framework controls that will interface with Cryo
Library (this document)

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Cryo HMI Template Project}: Start\sphinxhyphen{}up project to create an HMI Application. The project comes with
a base project structure, UserControls and references to ESO libraries.

\end{itemize}


\subsection{Acronyms}
\label{\detokenize{docs/000_introduction:acronyms}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\sphinxthistablewithvlinesstyle
\centering
\begin{tabulary}{\linewidth}[t]{|p{0.15\linewidth}|p{0.65\linewidth}|}
\sphinxtoprule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
\sphinxstylestrong{ELT}
&
\sphinxAtStartPar
Extremely Large Telescope
\\
\sphinxhline
\sphinxAtStartPar
\sphinxstylestrong{FB}
&
\sphinxAtStartPar
Function Block
\\
\sphinxhline
\sphinxAtStartPar
\sphinxstylestrong{GUI}
&
\sphinxAtStartPar
Graphical User Interface
\\
\sphinxhline
\sphinxAtStartPar
\sphinxstylestrong{HMI}
&
\sphinxAtStartPar
Human Machine Interface
\\
\sphinxhline
\sphinxAtStartPar
\sphinxstylestrong{IFW}
&
\sphinxAtStartPar
Instrument Framework
\\
\sphinxhline
\sphinxAtStartPar
\sphinxstylestrong{PLC}
&
\sphinxAtStartPar
Programmable Logic Controller
\\
\sphinxbottomrule
\end{tabulary}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsection{Concepts}
\label{\detokenize{docs/000_introduction:concepts}}
\sphinxAtStartPar
Quick guide of some recurring concepts in the documentation.


\subsubsection{Color scheme}
\label{\detokenize{docs/000_introduction:color-scheme}}\label{\detokenize{docs/000_introduction:introduction-colorscheme}}
\sphinxAtStartPar
Cryo HMI Framework Controls use a color scheme to deliver visual messages, like states or events.
The following table summarizes the ideas behind the chosen colors.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{General Color Scheme}\label{\detokenize{docs/000_introduction:id1}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{100}\X{80}{100}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Color
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Red
&
\sphinxAtStartPar
Abnormal, Alarm condition which requires attention.
\\
\sphinxhline
\sphinxAtStartPar
Purple
&
\sphinxAtStartPar
Abnormal, Warning condition, raising awareness about a potential upcoming alarm condition.
\\
\sphinxhline
\sphinxAtStartPar
White
&
\sphinxAtStartPar
Normal condition, Actuator Off/Closed.
\\
\sphinxhline
\sphinxAtStartPar
Green
&
\sphinxAtStartPar
Normal condition, Actuator On/Opened.
\\
\sphinxhline
\sphinxAtStartPar
Yellow
&
\sphinxAtStartPar
Manual Operation Mode activated
\\
\sphinxhline
\sphinxAtStartPar
Orange
&
\sphinxAtStartPar
Engineering Mode activated / Interlock bypassed
\\
\sphinxhline
\sphinxAtStartPar
Light blue
&
\sphinxAtStartPar
Simulation mode activated.
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}

\sphinxAtStartPar
This general color scheme is supplemented by flashing between two colors. which is used to indicate
changes and/or transitions. When in transition, the first color will be the color of the desired
new state, the second color is a transition color (Normally is a Dark Gray color).


\subsubsection{Data validity}
\label{\detokenize{docs/000_introduction:data-validity}}
\sphinxAtStartPar
Data Validity is a way to inform the user that the current data displayed or device cannot be
trusted or is disabled.

\sphinxAtStartPar
When Data Validity is False, the controls will show a dark grey background with a diagonal yellow
line across its diagonal.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{components_datalabel}.png}
\caption{Example of {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Data Label}}}} with Data \sphinxstyleemphasis{Valid} and \sphinxstyleemphasis{Not Valid}}\label{\detokenize{docs/000_introduction:id2}}\end{figure}

\sphinxstepscope


\section{Installation}
\label{\detokenize{docs/100_installation:installation}}\label{\detokenize{docs/100_installation:installation-label}}\label{\detokenize{docs/100_installation::doc}}
\sphinxAtStartPar
The following section shows how to install Cryo HMI Framework Controls NuGet package into a project.

\begin{sphinxadmonition}{warning}{Warning:}
\sphinxAtStartPar
This manual assumes that the user has already knowledge of \sphinxhref{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/index.html}{TE2000}%
\begin{footnote}[1]\sphinxAtStartFootnote
\sphinxnolinkurl{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/index.html}
%
\end{footnote}
\end{sphinxadmonition}


\subsection{Requirements}
\label{\detokenize{docs/100_installation:requirements}}\label{\detokenize{docs/100_installation:installation-requirements-label}}
\sphinxAtStartPar
\sphinxstylestrong{TwinCAT 3.1.4024.x}
\begin{itemize}
\item {} 
\sphinxAtStartPar
TwinCAT XAE 3.1.4024.n, where n \textgreater{} 25.

\item {} 
\sphinxAtStartPar
TwinCAT 3 HMI Engineering | TE2000: 12.760.59.

\end{itemize}

\sphinxAtStartPar
\sphinxstylestrong{TwinCAT 3.1.4026.x}
\begin{itemize}
\item {} 
\sphinxAtStartPar
TwinCAT XAE 3.1.4026.n, where n \textgreater{}= 0.

\item {} 
\sphinxAtStartPar
TwinCAT 3 HMI Engineering | TE2000: 14.x.

\end{itemize}


\subsection{Install Cryo HMI Framework Controls NuGet Package}
\label{\detokenize{docs/100_installation:install-cryo-hmi-framework-controls-nuget-package}}\label{\detokenize{docs/100_installation:installation-nugetpackage-label}}
\sphinxAtStartPar
\sphinxstylestrong{Using TwinCAT 3.1.4024.x and HMI 1.12.x}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} 
\sphinxAtStartPar
Download ESO \sphinxstylestrong{CryoFramework.1.\textless{}minor\textgreater{}.\textless{}patch\textgreater{}.nupkg} file from GitLab

\item {} 
\begin{DUlineblock}{0em}
\item[] Check on XAE the current configured \sphinxstylestrong{TwinCAT HMI Customer} package folder. Go to
\sphinxstylestrong{Tools} \(\rightarrow\) \sphinxstylestrong{NuGet Package Manager} \(\rightarrow\) \sphinxstylestrong{Package Manager Settings} \(\rightarrow\) \sphinxstylestrong{Package Sources}. It is
located at \sphinxcode{\sphinxupquote{C:\textbackslash{}TwinCAT\textbackslash{}Functions\textbackslash{}TE2000\sphinxhyphen{}HMI\sphinxhyphen{}Engineering\textbackslash{}References}}.
\end{DUlineblock}

\item {} 
\sphinxAtStartPar
Copy or move the downloaded file to \sphinxstylestrong{TwinCAT HMI Customer} folder.

\end{enumerate}

\sphinxAtStartPar
\sphinxstylestrong{Using TwinCAT 3.1.4026.x and HMI 14.x}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} 
\sphinxAtStartPar
Download ESO \sphinxstylestrong{CryoFramework.2.\textless{}minor\textgreater{}.\textless{}patch\textgreater{}.nupkg} file from GitLab

\item {} 
\begin{DUlineblock}{0em}
\item[] Check on XAE the current configured \sphinxstylestrong{Beckhoff offline packages} package folder. Go to
\sphinxstylestrong{Tools} \(\rightarrow\) \sphinxstylestrong{NuGet Package Manager} \(\rightarrow\) \sphinxstylestrong{Package Manager Settings} \(\rightarrow\) \sphinxstylestrong{Package Sources}. It is
located at \sphinxcode{\sphinxupquote{C:\textbackslash{}ProgramData\textbackslash{}Beckhoff\textbackslash{}NuGetPackages}}.
\end{DUlineblock}

\item {} 
\sphinxAtStartPar
Copy or move the downloaded file to \sphinxstylestrong{Beckhoff offline packages} folder.

\end{enumerate}


\subsection{Installing NuGet Package on your project}
\label{\detokenize{docs/100_installation:installing-nuget-package-on-your-project}}\label{\detokenize{docs/100_installation:installation-projectnugetpackage-label}}\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} 
\sphinxAtStartPar
In the TwinCAT HMI project right\sphinxhyphen{}click on \sphinxstylestrong{References} node, then click
\sphinxstylestrong{Manage NuGetPackages}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{installation_nuget_package_manager}.png}
\end{figure}

\item {} 
\sphinxAtStartPar
In the \sphinxstylestrong{NuGet Package Manager} select the \sphinxstylestrong{Browse} Tab.

\item {} 
\sphinxAtStartPar
Make sure Package source is \sphinxstylestrong{TwinCAT HMI Customer} (HMI 1.12.x) or \sphinxstylestrong{Beckhoff offline packages} (HMI 14.x).

\item {} 
\sphinxAtStartPar
Search for \sphinxstylestrong{CryoFramework by ESO} and press the Install Button. Press \sphinxstylestrong{OK} button in the
\sphinxstylestrong{Preview Changes} window.

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{installation_install_CryoFramework}.png}
\end{figure}

\item {} 
\sphinxAtStartPar
Make sure the package is installed by looking at the HMI project \sphinxstylestrong{Reference} \(\rightarrow\) \sphinxstylestrong{Packages} list.

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{installation_confirm}.png}
\end{figure}

\end{enumerate}


\subsection{Checking the Installation}
\label{\detokenize{docs/100_installation:checking-the-installation}}
\sphinxAtStartPar
Open any view or content page from your HMI project. Then open the Toolbox (Alternatively from the
menu \sphinxstylestrong{View} \(\rightarrow\) \sphinxstylestrong{Toolbox})

\sphinxAtStartPar
Four new categories will appear, each one with a set of Framework Controls:
\begin{itemize}
\item {} 
\sphinxAtStartPar
ESO Cryo Controls

\item {} 
\sphinxAtStartPar
ESO Cryo Components

\item {} 
\sphinxAtStartPar
ESO Cryo Sequences

\item {} 
\sphinxAtStartPar
ESO Cryo Symbols

\end{itemize}

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{installation_example_cryocontrols}.png}
\caption{\sphinxstylestrong{ESO Cryo Controls} loaded in the project after installing CryoFramework.nupkg}\label{\detokenize{docs/100_installation:id1}}\end{figure}

\sphinxAtStartPar
Categories and the installed Framework controls are explained in the next section.

\sphinxstepscope


\section{Cryo HMI Framework Controls}
\label{\detokenize{docs/200_cryoframework:cryo-hmi-framework-controls}}\label{\detokenize{docs/200_cryoframework:cryoframework-label}}\label{\detokenize{docs/200_cryoframework::doc}}

\subsection{Overview}
\label{\detokenize{docs/200_cryoframework:overview}}
\sphinxAtStartPar
Cryo HMI Framework Controls is a collection of \sphinxhref{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/8971699467.html}{TE2000 Framework Controls}%
\begin{footnote}[2]\sphinxAtStartFootnote
\sphinxnolinkurl{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/8971699467.html}
%
\end{footnote}
created with web technologies (HTML, CSS, Typescript/Javascript) to support the development of
Cryo HMI applications. They are created to be compatible with Web resposive design.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{cryoframework_size_examples}.png}
\caption{Pump Controller with different pixel sizes.}\label{\detokenize{docs/200_cryoframework:id12}}\end{figure}

\sphinxAtStartPar
Framework Controls are separated into four categories {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbols}}}},
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-components-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Components}}}}, {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-controls-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Controls}}}}
and {\hyperref[\detokenize{docs/300_sequences:sequences-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Sequences}}}}. Sequences are explained in their own section.


\subsection{Symbols}
\label{\detokenize{docs/200_cryoframework:symbols}}\label{\detokenize{docs/200_cryoframework:cryoframework-symbols-label}}
\sphinxAtStartPar
Image representation of a Cryogenic device. They all share a common functionality with respect
of the composition of the image and its attributes. There are some Symbols that require extra
attributes (i.e. Lakeshore Controller Symbol), but in general terms, they share the same behavior.

\sphinxAtStartPar
There are 9 supported Symbols, and 11 considering alternatives:


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Symbols Table}\label{\detokenize{docs/200_cryoframework:id13}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{80}\X{20}{80}\X{20}{80}\X{20}{80}}
\sphinxtoprule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Gauge Symbol
&
\sphinxAtStartPar
Lakeshore Controller Symbol
&
\sphinxAtStartPar
Pump (Prevacuum) Symbol
&
\sphinxAtStartPar
Pump (Turbomolecular) Symbol
\\
\sphinxhline
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_Gauge}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_Lakeshore}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_Pump}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_PumpTurbomolecular}.png}\hspace*{\fill}}
\\
\sphinxhline
\sphinxAtStartPar
Rupture Disc Symbol
&
\sphinxAtStartPar
Safety Overpressure Valve Symbol
&
\sphinxAtStartPar
Sorption Pump Symbol
&
\sphinxAtStartPar
Stirling Cooler Symbol
\\
\sphinxhline
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_RuptureDisc}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_SOV}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_SorptionPump}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_StirlingCooler}.png}\hspace*{\fill}}
\\
\sphinxhline
\sphinxAtStartPar
Tank Symbol
&
\sphinxAtStartPar
Valve (Manual) Symbol
&
\sphinxAtStartPar
Valve (Automatic) Symbol
&\\
\sphinxhline
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_Tank}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_Valve}.png}\hspace*{\fill}}
&
\noindent{\hspace*{\fill}\sphinxincludegraphics{{symbols_ValveAuto}.png}\hspace*{\fill}}
&\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}

\sphinxAtStartPar
Visually, all Symbols can represent 4 states: \sphinxcode{\sphinxupquote{Off}}, \sphinxcode{\sphinxupquote{Starting}}, \sphinxcode{\sphinxupquote{On}} and \sphinxcode{\sphinxupquote{Stopping}}. Even
when in some cases it doesn’t make sense.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{cryoframework_symbol_states_latex}.png}
\caption{Pump Symbol state colors and animations}\label{\detokenize{docs/200_cryoframework:id15}}
\begin{sphinxlegend}
\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
Starting is an animation between Starting/On colors, and Stopping is an animation between
Stopping/Off colors
\end{sphinxadmonition}
\end{sphinxlegend}
\end{figure}

\sphinxAtStartPar
Most of the symbols can also rotate in steps of 90 degrees: \sphinxcode{\sphinxupquote{Right}}, \sphinxcode{\sphinxupquote{Up}}, \sphinxcode{\sphinxupquote{Left}} and
\sphinxcode{\sphinxupquote{Down}}. With the exception being the Lakeshore Controller.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{symbols_direction}.png}
\caption{Pump Symbol possible rotations}\label{\detokenize{docs/200_cryoframework:id16}}\end{figure}


\subsubsection{Interface}
\label{\detokenize{docs/200_cryoframework:interface}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Symbols interface Table}\label{\detokenize{docs/200_cryoframework:id17}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{100}\X{15}{100}\X{50}{100}\X{15}{100}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Availability
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
StrokeThickness
&
\sphinxAtStartPar
Shape
&
\sphinxAtStartPar
Thickness of the Stroke of the symbol (default: 1)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
State
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Defines the state of the symbol: Off, Starting, On, Stopping (default: Off)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Value
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Text shown on Lakeshore controller (default: Empty String)
&
\sphinxAtStartPar
Lakeshore Controller Symbol
\\
\sphinxhline
\sphinxAtStartPar
SymbolType
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Alternative Symbol to show. Pump: Prevacuum or Turbomolecular; Valve: Auto or Manual.
&
\sphinxAtStartPar
Only with Pump and Valve Symbol
\\
\sphinxhline
\sphinxAtStartPar
Direction
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Defines the direction the symbol will be drawn: Up, Down, Left, Right (default: Up)
&
\sphinxAtStartPar
Disabled in Gauge and Lakeshore
\\
\sphinxhline
\sphinxAtStartPar
Drawing Stroke Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Color of the Drawing Stroke (default: rgb(15, 15, 15), dark: rgb(92, 92, 92))
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Drawing Transition Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Transition color when state is Starting or Stopping (default: rgb(40, 40, 40), dark: rgb(53, 53, 53))
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
On Fill Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Sets the color that represents On State (default: rgb(0, 255, 0), dark: rgb(1, 165, 1))
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Off Fill Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Sets the color that represents Off State (default: rgb(255, 255, 255), dark: rgb(255, 255, 255))
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
TextFontSize
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Size of the Font of the Value Attribute (default: 12)
&
\sphinxAtStartPar
Lakeshore Controller Symbol
\\
\sphinxhline
\sphinxAtStartPar
TextCommFontSize
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Size of the Font for the text on “Comm” rectangle (default: 12)
&
\sphinxAtStartPar
Lakeshore Controller Symbol
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}

\begin{sphinxadmonition}{warning}{Warning:}
\sphinxAtStartPar
As a rule of thumb, all attributes in the Color Group should not be changed. All
Cryo HMI Framework Controls are already defined with the correct
{\hyperref[\detokenize{docs/000_introduction:introduction-colorscheme}]{\sphinxcrossref{\DUrole{std,std-ref}{ESO Color Scheme}}}}. Changing them will also break Dark
mode compatibility.
\end{sphinxadmonition}


\subsection{Components}
\label{\detokenize{docs/200_cryoframework:components}}\label{\detokenize{docs/200_cryoframework:cryoframework-components-label}}
\sphinxAtStartPar
Reusable framework controls that are available primarily to be used in a control composition, but
that may also be used individually.


\subsubsection{Data Label}
\label{\detokenize{docs/200_cryoframework:data-label}}\label{\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}}
\sphinxAtStartPar
Control that extends the functionality of TE2000
\sphinxhref{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/3845334283.html}{Textblock}%
\begin{footnote}[3]\sphinxAtStartFootnote
\sphinxnolinkurl{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/3845334283.html}
%
\end{footnote}.
It has a flag \sphinxstylestrong{Data Valid} which makes the Control turn grey and adds a crossing yellow line to
show the user that whatever data is being displayed it’s not valid anymore.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{components_datalabel}.png}
\caption{Data Label with flag \sphinxstylestrong{Valid Data: True}, and with \sphinxstylestrong{Valid Data: False}. Added borders to show
size.}\label{\detokenize{docs/200_cryoframework:id18}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id1}}
\sphinxAtStartPar
The interface is the same as Textblock plus the following attributes.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Data Label Interface Table}\label{\detokenize{docs/200_cryoframework:id19}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Data Valid
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for data validity
\\
\sphinxhline
\sphinxAtStartPar
Data Invalid Text Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Text Color when flag \sphinxstylestrong{Data Valid: False}
\\
\sphinxhline
\sphinxAtStartPar
Data Invalid Stroke Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Crossing line stroke color when flag \sphinxstylestrong{Data Valid: False}
\\
\sphinxhline
\sphinxAtStartPar
Data Invalid Background Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Background Color when flag \sphinxstylestrong{Data Valid: False}
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Led Box}
\label{\detokenize{docs/200_cryoframework:led-box}}\label{\detokenize{docs/200_cryoframework:cryoframework-ledbox-label}}
\sphinxAtStartPar
Multipurpose Box that acts as the bare minimum as a LED to show state On and Off with the user
selected state colors.

\sphinxAtStartPar
This control also extends the functionality of Cryo HMI Framework Controls’s
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{DataLabel}}}} and support adding intermediate states by writing
to the blink status flag.

\sphinxAtStartPar
When Data is not Valid, it overrides the State Color and Blinking, it’s shown with the same
characteristics as DataLabel control.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{components_ledbox_latex}.png}
\caption{All possible sates of LedBox Control with default colors}\label{\detokenize{docs/200_cryoframework:id21}}
\begin{sphinxlegend}
\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
On/Blink is an animation between On and On/Blink images of the figure, similarly,
Off/Stopping is an animation between Off and Off/Blink images of the figure.
\end{sphinxadmonition}
\end{sphinxlegend}
\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id2}}
\sphinxAtStartPar
The interface is exactly the same as {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{DataLabel}}}} plus the
following attributes.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{LedBox Interface Table}\label{\detokenize{docs/200_cryoframework:id22}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Data Valid
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for data validity
\\
\sphinxhline
\sphinxAtStartPar
State
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for On/Off State
\\
\sphinxhline
\sphinxAtStartPar
Blink
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag to show LedBox blinking. Colors will depend on \sphinxstylestrong{State} flag.
\\
\sphinxhline
\sphinxAtStartPar
On Fill Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Led Box color when \sphinxstylestrong{State: True} and \sphinxstylestrong{DataValid: True}.
\\
\sphinxhline
\sphinxAtStartPar
Off Fill Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Led Box color when \sphinxstylestrong{State: Off} and \sphinxstylestrong{DataValid: True}.
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Device State}
\label{\detokenize{docs/200_cryoframework:device-state}}\label{\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}}
\sphinxAtStartPar
Shows the user a specific set of device states by adding information boxes at the corner of a
device symbol. The states are fixed and are as follows:
\begin{itemize}
\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Manual Mode}: Box on the lower right corner with a yellow color fill and the letter \sphinxstylestrong{M}.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Engineering Mode}: Box on the upper right corner with an orange color fill and the letter \sphinxstylestrong{E}.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Interlock Active}: Box on the upper left corner with a white color fill and the letters \sphinxstylestrong{IL}.

\end{itemize}

\sphinxAtStartPar
Under normal operations, these states should be not active and hidden from the user.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{components_devicestate}.png}
\caption{Device States individually active (1, 2, 3) and All States active (4), the included Pump Symbol
is for reference}\label{\detokenize{docs/200_cryoframework:id23}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id3}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{DeviceState interface Table}\label{\detokenize{docs/200_cryoframework:id24}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Manual Mode
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Device Manual Mode On/Off
\\
\sphinxhline
\sphinxAtStartPar
Engineering Mode
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Device Enginnering Mode On/Off
\\
\sphinxhline
\sphinxAtStartPar
Interlock Active
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Interlock is currently Active
\\
\sphinxhline
\sphinxAtStartPar
Box Size
&
\sphinxAtStartPar
Shape
&
\sphinxAtStartPar
Sets the size of the boxes in Pixels or by a percentage all 3 states: Manual, Engineering
and Interlock Active (default: 20 \%).
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Event Box}
\label{\detokenize{docs/200_cryoframework:event-box}}\label{\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}}
\sphinxAtStartPar
Representation of the raised/confirmed events of the system. An event can be an Alarm and/or a
Warning.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{components_eventbox_allstates_latex}.png}
\caption{Event Box Combination of States, the included Pump Symbol is for reference}\label{\detokenize{docs/200_cryoframework:id26}}
\begin{sphinxlegend}
\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
Alarm Active is an animation between Alarm Active and Confirmed, and Warning Active
is an animation between Warning Active and Confirmed.
\end{sphinxadmonition}
\end{sphinxlegend}
\end{figure}

\sphinxAtStartPar
A device is enclosed with a colored rectangle that represents an event, it also contains a box with
a letter \sphinxstylestrong{A} for Alarm and \sphinxstylestrong{W} for Warning. Alarms are represented in \sphinxstylestrong{Red} color, and
Warnings are represented in \sphinxstylestrong{Purple} color. If no event is registered, the Framework Controls
cannot be seen.

\sphinxAtStartPar
If an alarm or warning are active, the control will blink between the event color and black to alert
the users of the new event. If the event is confirmed, then the control will stop blinking.

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
If both events are active at the same time, an Alarm will always have priority over a
warning.
\end{sphinxadmonition}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id4}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Event Box Interface}\label{\detokenize{docs/200_cryoframework:id27}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Alarm Raised
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Alarm Raised State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Alarm Confirmed
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Alarm Confirmed State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Warning Raised
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Warning Raised State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Warning Confirmed
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Warning Confirmed State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Text Box Size
&
\sphinxAtStartPar
Shape
&
\sphinxAtStartPar
Sets the size of the lower left box in Pixels or by a percentage of the Control minimum side
length (default: 20 px).
\\
\sphinxhline
\sphinxAtStartPar
Stroke Thickness
&
\sphinxAtStartPar
Shape
&
\sphinxAtStartPar
Thickness of the rectangle that shows Alarm/Warning state. (default: 2 px)
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsection{Controls}
\label{\detokenize{docs/200_cryoframework:controls}}\label{\detokenize{docs/200_cryoframework:cryoframework-controls-label}}
\sphinxAtStartPar
High level representation of a Cryogenic Device. Generated by a composition of other Cryo HMI
Framework Controls: {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbol}}}},
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}} and
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Device State}}}}.

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{controls_ControlComposition}.png}
\end{figure}


\subsubsection{Common}
\label{\detokenize{docs/200_cryoframework:common}}\label{\detokenize{docs/200_cryoframework:cryoframework-common-label}}
\sphinxAtStartPar
With the exception of {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-analogsensor-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Analog Sensor}}}}. All Controls share
common traits. They all have a {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbols}}}} that go through 4
different states: \sphinxstylestrong{Off(0)}, \sphinxstylestrong{Starting(1)}, \sphinxstylestrong{On(2)} and \sphinxstylestrong{Stopping(3)}. They also show Alarms
and Warning with an {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}. And finally they all show
their device state thanks to their {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Device State}}}} components.


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:cryoframework-commoninterface-label}}\label{\detokenize{docs/200_cryoframework:id5}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Common Controls Interface Table}\label{\detokenize{docs/200_cryoframework:id28}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{100}\X{15}{100}\X{50}{100}\X{15}{100}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Availability
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
State
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
INT value that represents the state of the device: Off(0), Starting(1), On(2) and Stopping(3)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Keep Aspect Ratio
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Maintains a square shape of the Control regardless of the actual size. Recommended value: True
&
\sphinxAtStartPar
All but Heater Control
\\
\sphinxhline
\sphinxAtStartPar
Alarm Raised
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Alarm Raised State (Active or Not)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Alarm Confirmed
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Alarm Confirmed State (Active or Not)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Warning Raised
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Warning Raised State (Active or Not)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Warning Confirmed
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Warning Confirmed State (Active or Not)
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Box Size
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Sets the size of the box in Pixels or by a percentage of the Control minimum side length
(default: 20 \%).
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Stroke Thickness
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Thickness of the rectangle that shows Alarm/Warning state.
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Manual Mode
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Device State}}}}
&
\sphinxAtStartPar
Device Manual Mode On/Off
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Engineering Mode
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Device State}}}}
&
\sphinxAtStartPar
Device Engineering Mode On/Off
&
\sphinxAtStartPar
All but Lakeshore Controller
\\
\sphinxhline
\sphinxAtStartPar
Interlock Active
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Device State}}}}
&
\sphinxAtStartPar
Interlock is currently Active
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Box Size
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-devicestate-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Device State}}}}
&
\sphinxAtStartPar
Sets the size of the boxes in Pixels or by a percentage all 3 states: Manual, Engineering
and Interlock Active (default: 20 \%).
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Direction
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbol}}}}
&
\sphinxAtStartPar
Selects Direction of the Symbol
&
\sphinxAtStartPar
All but Lakeshore Controller
\\
\sphinxhline
\sphinxAtStartPar
Symbol Margin Size (\%)
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbol}}}}
&
\sphinxAtStartPar
Specifies the margin size of the Symbol with respect of the control. Values over 50\% won’t
make sense
&
\sphinxAtStartPar
All
\\
\sphinxhline
\sphinxAtStartPar
Stroke Thickness
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbol}}}}
&
\sphinxAtStartPar
Symbol Stroke Thickness in pixels (px)
&
\sphinxAtStartPar
All
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Heater}
\label{\detokenize{docs/200_cryoframework:heater}}\label{\detokenize{docs/200_cryoframework:cryoframework-heater-label}}
\sphinxAtStartPar
Heater Framework Control with all interfaces needed to be connected to PLC CryoLib.

\sphinxAtStartPar
The Heater Control is represented by a rectangle that supports adding a text inside of it. This
text can be a string or a representation of a sensor value. The text has modifiers in the \sphinxstylestrong{Text}
group attributes.

\sphinxAtStartPar
The heater can also be displayed as being disabled by using the DataValid flag.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_heater_datavalid}.png}
\caption{Heater with DataValid Flag On and Off}\label{\detokenize{docs/200_cryoframework:id29}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id6}}
\sphinxAtStartPar
This interface extends {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-commoninterface-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Interface}}}}.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Heater interface Table}\label{\detokenize{docs/200_cryoframework:id30}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Value
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Text or value to be displayed inside the Heater symbol
\\
\sphinxhline
\sphinxAtStartPar
DataValid
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for data validity. It works as {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Data Label}}}}
\\
\sphinxhline
\sphinxAtStartPar
TextFontSize
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Size of the font for the text displayed by \sphinxstylestrong{Value} attribute
\\
\sphinxhline
\sphinxAtStartPar
TextHorizontalAlignment
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Horizontal alignment inside the heater symbol for the text displayed by \sphinxstylestrong{Value} attribute
\\
\sphinxhline
\sphinxAtStartPar
TextVerticalAlignment
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Vertical alignment inside the heater symbol for the text displayed by \sphinxstylestrong{Value} attribute
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Lakeshore Controller}
\label{\detokenize{docs/200_cryoframework:lakeshore-controller}}\label{\detokenize{docs/200_cryoframework:cryoframework-lakeshorecontroller-label}}
\sphinxAtStartPar
Lakeshore Controller Control with all interfaces needed to be connected to PLC CryoLib.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_lakeshorecontroller}.png}
\caption{Lakeshore Controller}\label{\detokenize{docs/200_cryoframework:id31}}\end{figure}

\sphinxAtStartPar
The Lakeshore control symbol are 2 rectangles, the big one represents the state of the Lakekeshore
controller, and the inner and smaller one, represents the state of the communication.

\sphinxAtStartPar
The user can add any text or value in the big rectangle by using the attribute \sphinxstylestrong{Value}, usually
the text is the name of the controller.

\sphinxAtStartPar
The state of communication can be changed in the same way as the overall \sphinxstylestrong{State} of the system, if
there is no feedback, then both attributes \sphinxstylestrong{State} and \sphinxstylestrong{CommState} should just reflect the
state of the system.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_lakeshorecontroller_commstate_latex}.png}
\caption{Lakeshore Controller CommState: Off(0), Starting(1), On(2) and Stopping(3)}\label{\detokenize{docs/200_cryoframework:id33}}
\begin{sphinxlegend}
\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
Starting is an animation between Starting/On colors, and Stopping is an animation
between Stopping/Off colors
\end{sphinxadmonition}
\end{sphinxlegend}
\end{figure}

\sphinxAtStartPar
Lakeshore Controller doesn’t support changing the direction of the symbol, since it doesn’t make
sense. And it also doesn’t support the \sphinxstylestrong{Engineering Mode} flag.


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id7}}
\sphinxAtStartPar
This interface extends {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-commoninterface-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Interface}}}}.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Lakeshore controller interface Table}\label{\detokenize{docs/200_cryoframework:id34}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Value
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Text or value to be displayed inside the Lakeshore Controller Symbol
\\
\sphinxhline
\sphinxAtStartPar
CommState
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
INT value that represents the state of the communication: Off(0), Starting(1), On(2) and
Stopping(3)
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Pump}
\label{\detokenize{docs/200_cryoframework:pump}}\label{\detokenize{docs/200_cryoframework:cryoframework-pump-label}}
\sphinxAtStartPar
Pump Framework Control with all interfaces needed to be connected to PLC CryoLib.

\sphinxAtStartPar
Pump Control complies completely with the {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-common-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Controller}}}} and
it just adds the attribute \sphinxstylestrong{Symbol Type} to select between \sphinxstyleemphasis{Prevacuum} and \sphinxstyleemphasis{Turbomolecular}
symbols.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_pump_variants}.png}
\caption{Pump Control and its two varians: Prevacuum and Turbomolecular}\label{\detokenize{docs/200_cryoframework:id35}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id8}}
\sphinxAtStartPar
This interface extends {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-commoninterface-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Interface}}}}.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Pump interface Table}\label{\detokenize{docs/200_cryoframework:id36}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Symbol Type
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbol}}}}
&
\sphinxAtStartPar
Selects type of Pump to show: Prevacuum or Turbomolecular.
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Stirling Cooler}
\label{\detokenize{docs/200_cryoframework:stirling-cooler}}\label{\detokenize{docs/200_cryoframework:cryoframework-stirlingcooler-label}}
\sphinxAtStartPar
Stirling Cooler Control with all interfaces needed to be connected to PLC CryoLib.

\sphinxAtStartPar
It complies completely with the {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-common-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Controller}}}}.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_stirlingcooler}.png}
\caption{Stirling Cooler Control}\label{\detokenize{docs/200_cryoframework:id37}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id9}}
\sphinxAtStartPar
This interface is exactly as {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-commoninterface-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Interface}}}}.


\subsubsection{Valve}
\label{\detokenize{docs/200_cryoframework:valve}}\label{\detokenize{docs/200_cryoframework:cryoframework-valve-label}}
\sphinxAtStartPar
Valve Framework Control with all interfaces needed to be connected to PLC CryoLib.

\sphinxAtStartPar
Valve Control complies completely with the {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-common-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Controller}}}}
and it just adds the attribute \sphinxstylestrong{Symbol Type} to select between \sphinxstyleemphasis{Manual} and \sphinxstyleemphasis{Auto}
symbols.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_valve_variants}.png}
\caption{Valve Control and its two varians: Manual and Auto.}\label{\detokenize{docs/200_cryoframework:id38}}\end{figure}

\sphinxAtStartPar
Alternatively, Valve can show the Open/Close feedback by using the flag \sphinxstylestrong{Show Feedback}, which
makes visible to Led Boxes with \sphinxtitleref{Op} (for Opened) and \sphinxtitleref{Cl} (for Closed). The boxes state can be
changed by the attributes \sphinxstylestrong{Open State} and \sphinxstylestrong{Close State} respectively.

\sphinxAtStartPar
The last attribute \sphinxstylestrong{Valid Feedback} is used to show if the feedback values are valid or not.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_valve_feedback}.png}
\caption{Valve Control with feedback: Open, Close and !DataValid}\label{\detokenize{docs/200_cryoframework:id39}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id10}}
\sphinxAtStartPar
This interface extends {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-commoninterface-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Interface}}}}.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Valve interface Table}\label{\detokenize{docs/200_cryoframework:id40}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Show Feedback
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Show Opened and Closed feedback boxes.
\\
\sphinxhline
\sphinxAtStartPar
Open State
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for Opened State.
\\
\sphinxhline
\sphinxAtStartPar
Close State
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for Closed State.
\\
\sphinxhline
\sphinxAtStartPar
Valid Feedback
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for data validity. It works as {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Data Label}}}}.
\\
\sphinxhline
\sphinxAtStartPar
Symbol Type
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-symbols-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Symbol}}}}
&
\sphinxAtStartPar
Selects type of Valve to show: Manual or Auto.
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsubsection{Analog Sensor}
\label{\detokenize{docs/200_cryoframework:analog-sensor}}\label{\detokenize{docs/200_cryoframework:cryoframework-analogsensor-label}}
\sphinxAtStartPar
Analog sensor is a Control that does not conform to the
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-common-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Common Controller}}}} specification.

\sphinxAtStartPar
It is basically a super powered label that contains many extras for sensor reading data display. The
control allows to select between Standard and Scientific notation and to include the sign in any
case.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_analogsensor_signed_notation}.png}
\caption{Analog Sensor Control: Notation and Signed Flags}\label{\detokenize{docs/200_cryoframework:id41}}\end{figure}

\sphinxAtStartPar
It also supports {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_analogsensor_events_latex}.png}
\caption{As {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}} the events can be blinking when in active
state}\label{\detokenize{docs/200_cryoframework:id43}}\end{figure}

\sphinxAtStartPar
If the device is in Simulation State, it’ll show a light blue color on the
background. It also supports data validity with the same funtionality as
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Data Label}}}}.

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{controls_analogsensor_datavalid_simulated}.png}
\caption{Analog Sensor Control: Normal, !DataValid and Simulated visual information}\label{\detokenize{docs/200_cryoframework:id44}}\end{figure}


\paragraph{Interface}
\label{\detokenize{docs/200_cryoframework:id11}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Analog Sensor Control Interface Table}\label{\detokenize{docs/200_cryoframework:id45}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Value
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Sensor reading value to be displayed
\\
\sphinxhline
\sphinxAtStartPar
Notation
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Shows numeric value \sphinxstylestrong{Normal} or wit \sphinxstylestrong{Scientific Notation}
\\
\sphinxhline
\sphinxAtStartPar
Decimals
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Number of decimals to show in the value.
\\
\sphinxhline
\sphinxAtStartPar
Signed
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag to enable plus (+) sign of the value to appear even when it’s a positive value.
\\
\sphinxhline
\sphinxAtStartPar
Simulated
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag show a light blue background on this controller to provide visual information that the
sensor is in simulation.
\\
\sphinxhline
\sphinxAtStartPar
DataValid
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Flag for data validity. It works as {\hyperref[\detokenize{docs/200_cryoframework:cryoframework-datalabel-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Data Label}}}}.
\\
\sphinxhline
\sphinxAtStartPar
Unit
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Unit Text to be shown next to the value label.
\\
\sphinxhline
\sphinxAtStartPar
Unit text box Width
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Percentage (\%) of the horizontal space of the total control used to show the units of the
value.
\\
\sphinxhline
\sphinxAtStartPar
Alarm Raised
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Alarm Raised State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Alarm Confirmed
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Alarm Confirmed State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Warning Raised
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Warning Raised State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
Warning Confirmed
&
\sphinxAtStartPar
{\hyperref[\detokenize{docs/200_cryoframework:cryoframework-eventbox-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Event Box}}}}
&
\sphinxAtStartPar
Warning Confirmed State (Active or Not)
\\
\sphinxhline
\sphinxAtStartPar
TextFontSize
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Size of the font for the text displayed by \sphinxstylestrong{Value} attribute
\\
\sphinxhline
\sphinxAtStartPar
TextHorizontalAlignment
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Horizontal alignment inside the heater symbol for the text displayed by \sphinxstylestrong{Value} attribute
\\
\sphinxhline
\sphinxAtStartPar
TextVerticalAlignment
&
\sphinxAtStartPar
Text
&
\sphinxAtStartPar
Vertical alignment inside the heater symbol for the text displayed by \sphinxstylestrong{Value} attribute
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsection{Sequences}
\label{\detokenize{docs/200_cryoframework:sequences}}
\sphinxAtStartPar
Sequences are specialized controls that have a different implementation and use case. They are
explained in detail at {\hyperref[\detokenize{docs/300_sequences:sequences-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Sequences}}}}.

\sphinxstepscope


\section{Sequences}
\label{\detokenize{docs/300_sequences:sequences}}\label{\detokenize{docs/300_sequences:sequences-label}}\label{\detokenize{docs/300_sequences::doc}}
\sphinxAtStartPar
Cryogenic application requires sequences for certain procedures (i.e. Evacuation). These sequences
can be represented with a subset of flowchart {\hyperref[\detokenize{docs/300_sequences:sequences-blocks-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Blocks}}}}: \sphinxstylestrong{Process},
\sphinxstylestrong{Decision} and \sphinxstylestrong{Terminator}. Cryo HMI Framework Controls implements this subset and joins them
all together with a specialized {\hyperref[\detokenize{docs/300_sequences:sequences-container-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Sequence Container}}}} that actually
interfaces with the PLC code.


\subsection{Blocks}
\label{\detokenize{docs/300_sequences:blocks}}\label{\detokenize{docs/300_sequences:sequences-blocks-label}}
\sphinxAtStartPar
Blocks are very simple controls with no important processing code inside of them. There are 3 blocks
implemented, they all have the same interface, but their symbol and meaning are different:
\begin{itemize}
\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Process}: Also called activity. Once finished it goes to the next step.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Decision}: Conditional operation that determines which one of the two paths the sequence will
take.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Terminator}: Indicates the beginning and ending of a sequence.

\end{itemize}

\begin{figure}[H]
\centering
\capstart

\noindent\sphinxincludegraphics{{sequences_block_types}.png}
\caption{The 3 types of Blocks}\label{\detokenize{docs/300_sequences:id1}}\end{figure}

\sphinxAtStartPar
All of them can be in any of 3 different states: \sphinxstylestrong{Idle}, \sphinxstylestrong{Active} and \sphinxstylestrong{Finished}
\begin{itemize}
\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Idle}: The sequence has not yet reached this step. The box has a white background.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Active}: The sequence is currently executing this step. The box background is animated between
a white and a green background.

\item {} 
\sphinxAtStartPar
\sphinxstylestrong{Finished}: The step has already been finished. The box has a green background.

\end{itemize}
\phantomsection\label{\detokenize{docs/300_sequences:sequences-blocksinterface-label}}
\sphinxAtStartPar
For further information about Flowchart and its Blocks check its
\sphinxhref{https://en.wikipedia.org/wiki/Flowchart}{wiki page}%
\begin{footnote}[4]\sphinxAtStartFootnote
\sphinxnolinkurl{https://en.wikipedia.org/wiki/Flowchart}
%
\end{footnote}


\subsubsection{Blocks Interface}
\label{\detokenize{docs/300_sequences:blocks-interface}}

\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Common Blocks Interface Table}\label{\detokenize{docs/300_sequences:id3}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Value
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
String or Value that it’s being shown inside the block symbol.
\\
\sphinxhline
\sphinxAtStartPar
BlockId
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Unique number that represents the ID of this block, no other block should have the
same value. The number is shown on the upper left side of the Framework Control as S\textless{}BlockId\textgreater{}.
\\
\sphinxhline
\sphinxAtStartPar
State
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
INT value that represents the state of the device: Idle (0), Active (1) and
Finished (2).
\\
\sphinxhline
\sphinxAtStartPar
On Fill Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Symbol Fill Color when it’s Finished
\\
\sphinxhline
\sphinxAtStartPar
Off Fill Color
&
\sphinxAtStartPar
Colors
&
\sphinxAtStartPar
Symbol Fill Color when it’s Idle
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsection{Sequence Container}
\label{\detokenize{docs/300_sequences:sequence-container}}\label{\detokenize{docs/300_sequences:sequences-container-label}}
\sphinxAtStartPar
As the name suggests, Sequence Container Framework Control inherits the
\sphinxhref{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/3845319947.html}{TE2000 Container}%
\begin{footnote}[5]\sphinxAtStartFootnote
\sphinxnolinkurl{https://infosys.beckhoff.com/english.php?content=../content/1033/te2000\_tc3\_hmi\_engineering/3845319947.html}
%
\end{footnote}
capabilities.

\sphinxAtStartPar
As a plain container, it can group any child control. All child controls added are defined
relative to the position of the container.

\sphinxAtStartPar
Sequence Containers also allow the user to interface with the PLC sequence by using a custom
json\sphinxhyphen{}schema named \sphinxstylestrong{Sequence Object} . Check
{\hyperref[\detokenize{docs/300_sequences:sequences-container-interface-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Sequence Container Interface}}}} for more information.

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
There is a function block in CryoLib FB\_CRYO\_HMI\_SEQUENCE that can interface directly
with Sequence Container, but this is not covered in this manual.
\end{sphinxadmonition}

\sphinxAtStartPar
The container will accept any type of control inside of it, but will only interact with \sphinxstylestrong{Process},
\sphinxstylestrong{Decision} and \sphinxstylestrong{Terminator} and only if they are direct childs of the container. Please check
the section {\hyperref[\detokenize{docs/300_sequences:sequences-container-example-label}]{\sphinxcrossref{\DUrole{std,std-ref}{Example}}}} for more information.


\subsubsection{Interface}
\label{\detokenize{docs/300_sequences:interface}}\label{\detokenize{docs/300_sequences:sequences-container-interface-label}}
\sphinxAtStartPar
Sequence Container has a specially defined Object as interface called \sphinxstyleemphasis{Sequence}. The interface is
defined by a json\sphinxhyphen{}schema:

\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{p}{\PYGZob{}}
\PYG{+w}{  }\PYG{n+nt}{\PYGZdq{}\PYGZdl{}schema\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}http://json\PYGZhy{}schema.org/draft\PYGZhy{}04/schema\PYGZdq{}}\PYG{p}{,}
\PYG{+w}{  }\PYG{n+nt}{\PYGZdq{}definitions\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{    }\PYG{n+nt}{\PYGZdq{}TcHmi.Controls.CryoFramework.SequenceContainer\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}type\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}object\PYGZdq{}}\PYG{p}{,}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}frameworkInstanceOf\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}TcHmi.Controls.System.TcHmiControl\PYGZdq{}}\PYG{p}{,}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}frameworkControlType\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}SequenceContainer\PYGZdq{}}\PYG{p}{,}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}frameworkControlNamespace\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}TcHmi.Controls.CryoFramework\PYGZdq{}}
\PYG{+w}{    }\PYG{p}{\PYGZcb{},}
\PYG{+w}{    }\PYG{n+nt}{\PYGZdq{}TcHmi.Controls.CryoFramework.Sequence\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}properties\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{        }\PYG{n+nt}{\PYGZdq{}arSequence\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{          }\PYG{n+nt}{\PYGZdq{}items\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{            }\PYG{n+nt}{\PYGZdq{}type\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}integer\PYGZdq{}}
\PYG{+w}{          }\PYG{p}{\PYGZcb{},}
\PYG{+w}{          }\PYG{n+nt}{\PYGZdq{}type\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}array\PYGZdq{}}
\PYG{+w}{        }\PYG{p}{\PYGZcb{},}
\PYG{+w}{        }\PYG{n+nt}{\PYGZdq{}bIsFinished\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{p}{\PYGZob{}}
\PYG{+w}{          }\PYG{n+nt}{\PYGZdq{}type\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}boolean\PYGZdq{}}
\PYG{+w}{        }\PYG{p}{\PYGZcb{}}
\PYG{+w}{      }\PYG{p}{\PYGZcb{},}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}type\PYGZdq{}}\PYG{p}{:}\PYG{+w}{ }\PYG{l+s+s2}{\PYGZdq{}object\PYGZdq{}}\PYG{p}{,}
\PYG{+w}{      }\PYG{n+nt}{\PYGZdq{}required\PYGZdq{}}\PYG{p}{:[}
\PYG{+w}{        }\PYG{l+s+s2}{\PYGZdq{}arSequence\PYGZdq{}}\PYG{p}{,}
\PYG{+w}{        }\PYG{l+s+s2}{\PYGZdq{}bIsFinished\PYGZdq{}}
\PYG{+w}{      }\PYG{p}{]}
\PYG{+w}{    }\PYG{p}{\PYGZcb{}}
\PYG{+w}{  }\PYG{p}{\PYGZcb{}}
\PYG{p}{\PYGZcb{}}
\end{sphinxVerbatim}

\sphinxAtStartPar
In summary, the Object \sphinxstyleemphasis{Sequence} is a structure that contains two attributes:
\begin{itemize}
\item {} 
\sphinxAtStartPar
arSequence: Array of integer (BlockIds) values.

\item {} 
\sphinxAtStartPar
bIsFinished: Flag that signals if the sequence is still running.

\end{itemize}

\sphinxAtStartPar
The Sequence Object isthe only interface Object that needs to be linked with the PLC.


\begin{savenotes}\sphinxattablestart
\sphinxthistablewithglobalstyle
\centering
\sphinxcapstartof{table}
\sphinxthecaptionisattop
\sphinxcaption{Sequence Container Interface Table}\label{\detokenize{docs/300_sequences:id4}}
\sphinxaftertopcaption
\begin{tabular}[t]{\X{20}{85}\X{15}{85}\X{50}{85}}
\sphinxtoprule
\sphinxstyletheadfamily 
\sphinxAtStartPar
Name
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Group
&\sphinxstyletheadfamily 
\sphinxAtStartPar
Description
\\
\sphinxmidrule
\sphinxtableatstartofbodyhook
\sphinxAtStartPar
Sequence.arSequence
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
Array of numbers indicating Finished blocks. The last value of the array is the active block.
\\
\sphinxhline
\sphinxAtStartPar
Sequence.bFinished
&
\sphinxAtStartPar
Common
&
\sphinxAtStartPar
If this value is true, the current active block is marked as finished.
\\
\sphinxbottomrule
\end{tabular}
\sphinxtableafterendhook\par
\sphinxattableend\end{savenotes}


\subsection{Blocks and Container Logic}
\label{\detokenize{docs/300_sequences:blocks-and-container-logic}}
\sphinxAtStartPar
Every time the container gets an update of arSequence and bIsFinished, the following procedure is
called:

\begin{sphinxVerbatim}[commandchars=\\\{\}]
\PYG{c+c1}{\PYGZsh{}\PYGZsh{} WARNING This is just a small representation of the actual code.}

\PYG{c+c1}{\PYGZsh{}\PYGZsh{} sequenceBlocks is a dictionary of blocks with block\PYGZus{}id as key}

\PYG{k}{def} \PYG{n+nf}{SequenceUpdated}\PYG{p}{(}\PYG{n+nb+bp}{self}\PYG{p}{,} \PYG{n}{ar\PYGZus{}sequence}\PYG{p}{:} \PYG{n}{List}\PYG{p}{,} \PYG{n}{is\PYGZus{}finished}\PYG{p}{:} \PYG{n+nb}{bool}\PYG{p}{)}\PYG{p}{:}
    \PYG{c+c1}{\PYGZsh{}\PYGZsh{} All elements of sequence\PYGZus{}blocks are put to Idle state}
    \PYG{k}{for} \PYG{n}{block\PYGZus{}id} \PYG{o+ow}{in} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{sequence\PYGZus{}blocks}\PYG{p}{:}
        \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{sequence\PYGZus{}blocks}\PYG{p}{[}\PYG{n}{block\PYGZus{}id}\PYG{p}{]}\PYG{o}{.}\PYG{n}{setState}\PYG{p}{(}\PYG{n}{State}\PYG{o}{.}\PYG{n}{IDLE}\PYG{p}{)}

    \PYG{c+c1}{\PYGZsh{}\PYGZsh{} Take last value, which corresponds to the current processed block}
    \PYG{n}{last\PYGZus{}value} \PYG{o}{=} \PYG{n}{ar\PYGZus{}sequence}\PYG{o}{.}\PYG{n}{pop}\PYG{p}{(}\PYG{p}{)}
    \PYG{k}{if} \PYG{n}{is\PYGZus{}finished}\PYG{p}{:}
        \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{sequence\PYGZus{}blocks}\PYG{p}{[}\PYG{n}{last\PYGZus{}value}\PYG{p}{]}\PYG{o}{.}\PYG{n}{setState}\PYG{p}{(}\PYG{n}{State}\PYG{o}{.}\PYG{n}{FINISHED}\PYG{p}{)}
    \PYG{k}{else}\PYG{p}{:}
        \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{sequence\PYGZus{}blocks}\PYG{p}{[}\PYG{n}{last\PYGZus{}value}\PYG{p}{]}\PYG{o}{.}\PYG{n}{setState}\PYG{p}{(}\PYG{n}{State}\PYG{o}{.}\PYG{n}{ACTIVE}\PYG{p}{)}

    \PYG{c+c1}{\PYGZsh{}\PYGZsh{} Put all other valid blocks from the sequence array as Finished}
    \PYG{k}{for} \PYG{n}{block\PYGZus{}id} \PYG{o+ow}{in} \PYG{n}{ar\PYGZus{}sequence}\PYG{p}{:}
        \PYG{k}{if} \PYG{n}{block\PYGZus{}id} \PYG{o+ow}{in} \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{sequence\PYGZus{}blocks}\PYG{p}{:}
            \PYG{n+nb+bp}{self}\PYG{o}{.}\PYG{n}{sequence\PYGZus{}blocks}\PYG{p}{[}\PYG{n}{block\PYGZus{}id}\PYG{p}{]}\PYG{o}{.}\PYG{n}{setState}\PYG{p}{(}\PYG{n}{State}\PYG{o}{.}\PYG{n}{FINISHED}\PYG{p}{)}
        \PYG{k}{elif} \PYG{n}{block\PYGZus{}id} \PYG{o}{\PYGZgt{}} \PYG{l+m+mi}{0}\PYG{p}{:}
            \PYG{c+c1}{\PYGZsh{}\PYGZsh{} Error logged to browser console}
            \PYG{n}{error}\PYG{p}{(}\PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{SequenceID }\PYG{l+s+s2}{\PYGZdq{}} \PYG{o}{+} \PYG{n}{block\PYGZus{}id} \PYG{o}{+} \PYG{l+s+s2}{\PYGZdq{}}\PYG{l+s+s2}{not present in HMI sequence!}\PYG{l+s+s2}{\PYGZdq{}}\PYG{p}{)}
\end{sphinxVerbatim}


\subsection{Example}
\label{\detokenize{docs/300_sequences:example}}\label{\detokenize{docs/300_sequences:sequences-container-example-label}}
\sphinxAtStartPar
Let’s create a simple sequence for testing and understanding Sequences.


\subsubsection{The Setup}
\label{\detokenize{docs/300_sequences:the-setup}}\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} 
\sphinxAtStartPar
Add a Sequence Container, in this example, we also add borders so it’s easy to see its limits.

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_add_container}.png}
\end{figure}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{1}
\item {} 
\sphinxAtStartPar
Add a Sequence Blocks and give them unique \sphinxstylestrong{BlockID}, also add some text on their \sphinxstylestrong{Value}

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_add_blocks}.png}
\end{figure}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{2}
\item {} 
\sphinxAtStartPar
Use a simple line to connect all the vertical Blocks \sphinxcode{\sphinxupquote{{[}0, 1, 2, 10, 11, 30{]}}}.

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_add_line}.png}
\end{figure}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{3}
\item {} 
\sphinxAtStartPar
Add a rectangle to join Block S20 to the Rest of the diagram.

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_diagram}.png}
\end{figure}
\end{quote}

\sphinxAtStartPar
After following these steps, the setup is done.

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
Steps 3 and 4 are only for cosmetic reasons, the line and the rectangle will not
affect in any way the sequence behavior.
\end{sphinxadmonition}


\subsubsection{Testing a correct Sequence}
\label{\detokenize{docs/300_sequences:testing-a-correct-sequence}}\label{\detokenize{docs/300_sequences:sequences-correct-sequence}}
\sphinxAtStartPar
Now that the sequence done, we will modify its \sphinxstylestrong{Sequence} attribute to see how it affects it.
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} 
\sphinxAtStartPar
With the sequence container selected, click the attribute \sphinxstylestrong{Common} \(\rightarrow\) \sphinxstylestrong{Sequence} three
doted box \sphinxcode{\sphinxupquote{{[}...{]}}}.

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_open_attribute}.png}
\end{figure}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{1}
\item {} 
\sphinxAtStartPar
A new box will appear, select bIsFinished and then deselect it (this is to avoid an error)

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_edit_properties}.png}
\end{figure}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{2}
\item {} 
\sphinxAtStartPar
Then press on the three doted box \sphinxcode{\sphinxupquote{{[}...{]}}} on arSequence and a new menu will appear.

\item {} 
\sphinxAtStartPar
This menu is to edit arSequence array. Press Add button and a new value will appear, make sure
the value is 0.

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_edit_arSequence}.png}
\end{figure}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{4}
\item {} 
\sphinxAtStartPar
Close both modal windows and you should see how it affects the block with BlockId = 0. The block
will blink between white and green colors signaling the user that this is the current step in the
sequence.

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_1_block_latex}.png}
\end{figure}

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
The red box with dashed outline indicates that the block background is blinking between
white and green.
\end{sphinxadmonition}
\end{quote}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{5}
\item {} 
\sphinxAtStartPar
Repeat step 3, 4 and 6. But this time add \sphinxcode{\sphinxupquote{{[}1, 2{]}}} to the array. Make sure 2 is the last value of
the array (at the end).

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_3_block_latex}.png}
\end{figure}

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
The red box with dashed outline indicates that the block background is blinking between
white and green.
\end{sphinxadmonition}

\item {} 
\sphinxAtStartPar
Repeat step 3, 4 and 6. But this time add \sphinxcode{\sphinxupquote{{[}10, 30{]}}} to the array. Make sure 30 is the last value
of the array (at the end). Notice how the blinking block is always the last one on the list,
in this case, Block 30

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_5_block_latex}.png}
\end{figure}

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
The red box with dashed outline indicates that the block background is blinking between
white and green.
\end{sphinxadmonition}

\item {} 
\sphinxAtStartPar
Open again the Sequence Object (as Step 1), this time, only check the value bIsFinished. Now
Block S30 will stop blinking

\end{enumerate}
\begin{quote}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_5_block_finished}.png}
\end{figure}
\end{quote}

\sphinxAtStartPar
This concludes the example, this should clear more or less how Sequences work.


\subsubsection{Testing an incorrect Sequence}
\label{\detokenize{docs/300_sequences:testing-an-incorrect-sequence}}\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\item {} 
\sphinxAtStartPar
Follow the steps of {\hyperref[\detokenize{docs/300_sequences:sequences-correct-sequence}]{\sphinxcrossref{\DUrole{std,std-ref}{Testing a correct sequence}}}} until step 4.

\item {} 
\sphinxAtStartPar
Add into arSequence the values \sphinxcode{\sphinxupquote{{[}9, 20{]}}}.

\end{enumerate}

\begin{figure}[H]
\centering

\noindent\sphinxincludegraphics{{sequences_example_bad_sequence_latex}.png}
\end{figure}

\begin{sphinxadmonition}{note}{Note:}
\sphinxAtStartPar
The red box with dashed outline indicates that the block background is blinking between
white and green.
\end{sphinxadmonition}
\begin{enumerate}
\sphinxsetlistlabels{\arabic}{enumi}{enumii}{}{.}%
\setcounter{enumi}{2}
\item {} 
\sphinxAtStartPar
Notice how Block S9 is green and S20 is blinking.

\end{enumerate}

\begin{sphinxadmonition}{warning}{Warning:}
\sphinxAtStartPar
As shown in the example, Sequence Blocks and Container are only a meant to show the
state of a Sequence of a PLC. No logic is present to make sure that the data is consistent, so
if an error like this appear could mean that the PLC sequence is wrong, or the BlockId
between the PLC and the HMI seuquence are not correctly aligned.
\end{sphinxadmonition}



\renewcommand{\indexname}{Index}
\newpage
\end{document}