PSI sics-cvs-psi-2006
This commit is contained in:
101
motorlist.tex
Normal file
101
motorlist.tex
Normal file
@@ -0,0 +1,101 @@
|
||||
\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}
|
||||
Reference in New Issue
Block a user