102 lines
4.2 KiB
TeX
102 lines
4.2 KiB
TeX
\subsection{The Motorlist Module}
|
|
The motorlist is e helper module for implementing complex movements of
|
|
multiple motors. A good example is the coordination of the reflectometer AMOR.
|
|
The general idea is to have a list (using the lld implementation used in
|
|
SICS) which contains one of the following data structure for each motor
|
|
to run:
|
|
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap1}
|
|
$\langle$motlistmot {\footnotesize ?}$\rangle\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@typedef struct{@\\
|
|
\mbox{}\verb@ char name[80];@\\
|
|
\mbox{}\verb@ float target;@\\
|
|
\mbox{}\verb@ float position;@\\
|
|
\mbox{}\verb@ pIDrivable pDriv;@\\
|
|
\mbox{}\verb@ void *data;@\\
|
|
\mbox{}\verb@ int running;@\\
|
|
\mbox{}\verb@}MotControl, *pMotControl;@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-1ex}
|
|
\footnotesize\addtolength{\baselineskip}{-1ex}
|
|
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
|
\item Macro referenced in scrap ?.
|
|
\end{list}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
The motorlist module then takes care of starting all these motors,
|
|
checking their status etc. A client module then only needs to calculate
|
|
targets for its motors and populate a list with them. All other
|
|
drivable tasks will then be performed by motorlist.
|
|
|
|
The interface provided by this module looks like this:
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap2}
|
|
$\langle$motlistint {\footnotesize ?}$\rangle\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@pIDrivable makeMotListInterface();@\\
|
|
\mbox{}\verb@int addMotorToList(int listHandle, char *name, float targetValue);@\\
|
|
\mbox{}\verb@int setNewMotorTarget(int listHandle, char *name, float value);@\\
|
|
\mbox{}\verb@int getMotorFromList(int listHandle, char *name, pMotControl tuk);@\\
|
|
\mbox{}\verb@float getListMotorPosition(int listHandle, char *name);@\\
|
|
\mbox{}\verb@void printMotorList(int listHandle, SConnection *pCon); @\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-1ex}
|
|
\footnotesize\addtolength{\baselineskip}{-1ex}
|
|
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
|
\item Macro referenced in scrap ?.
|
|
\end{list}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|
|
\begin{description}
|
|
\item[makeMotListInterface] creates a drivable interface which is initialized
|
|
with the motlist implementations. Each of the drivabel functions expects
|
|
as pData pointer a pointer to the listHandle describing the list of motors
|
|
to run
|
|
\item[addMotorToList] adds motor name with target value targetValue to
|
|
the list identified by listHandle. Retruns 1 on success, 0 on failure (The
|
|
motor could not be found)
|
|
\item[setNewMotorTarget] does what it says.
|
|
\item[getMotorFromList] rets a motor entry for name from listHandle. Used in
|
|
order to retrieve positions.
|
|
\item[getListMotorPosition] retrieves the current position of motor name.
|
|
\end{description}
|
|
All the rest of the interface is invoked through the drivable interface
|
|
functions which thus can be used in implementing own drivable interfaces.
|
|
|
|
\begin{flushleft} \small
|
|
\begin{minipage}{\linewidth} \label{scrap3}
|
|
\verb@"motorlist.h"@ {\footnotesize ? }$\equiv$
|
|
\vspace{-1ex}
|
|
\begin{list}{}{} \item
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@/*----------------------------------------------------------------------@\\
|
|
\mbox{}\verb@ Support module which manages a list of motors and their target values@\\
|
|
\mbox{}\verb@ when running complex movements. See accompanying tex file for@\\
|
|
\mbox{}\verb@ more info.@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ copyright: see file COPYRIGHT@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@ Mark Koennecke, September 2005@\\
|
|
\mbox{}\verb@-----------------------------------------------------------------------*/@\\
|
|
\mbox{}\verb@#ifndef SICSMOTLIST@\\
|
|
\mbox{}\verb@#define SICSMOTLIST@\\
|
|
\mbox{}\verb@#include "sics.h"@\\
|
|
\mbox{}\verb@@$\langle$motlistmot {\footnotesize ?}$\rangle$\verb@@\\
|
|
\mbox{}\verb@/*======================================================================*/@\\
|
|
\mbox{}\verb@@$\langle$motlistint {\footnotesize ?}$\rangle$\verb@@\\
|
|
\mbox{}\verb@#endif@\\
|
|
\mbox{}\verb@@\\
|
|
\mbox{}\verb@@$\diamond$
|
|
\end{list}
|
|
\vspace{-2ex}
|
|
\end{minipage}\\[4ex]
|
|
\end{flushleft}
|