- New batch file management module
- New oscillator module - Bug fixes SKIPPED: psi/buffer.c psi/el734hp.c psi/el737hpdriv.c psi/make_gen psi/nextrics.c psi/nxamor.c psi/pimotor.c psi/polterwrite.c psi/psi.c psi/swmotor2.c psi/tasscan.c psi/tricssupport.c psi/tricssupport.h psi/tecs/make_gen psi/utils/ecb_load_new/ecb_load.c psi/utils/ecb_load_new/ecb_load.h psi/utils/ecb_load_new/ecbdriv_els.c psi/utils/ecb_load_new/gpib_els.c psi/utils/ecb_load_new/makefile psi/utils/ecb_load_new/makefile_EGPIB psi/utils/ecb_load_new/makefile_GPIB
This commit is contained in:
70
oscillate.w
Normal file
70
oscillate.w
Normal file
@ -0,0 +1,70 @@
|
||||
\subsection{Motor Oscillation}
|
||||
This module allows to oscillate a motor, i.e. drive between two
|
||||
positions back and forth automatically. This is required for instance
|
||||
in order to control a radial collimator or in order to prevent
|
||||
preferred orientation effects in powder measurements. The oscialltion
|
||||
can be started and stoped through commands. When starting, this module
|
||||
takes over the motor in order to prevent it being driven by a
|
||||
user. The limits of the oscillation are given through the current
|
||||
software limits. When running, a special SICS task watches the motor
|
||||
and makes it run the other way when it has arrived at one of its
|
||||
boundaries. When oscillation is stopped, the motor is stopped, the
|
||||
task stopped and the control of the motor is returned to the user.
|
||||
|
||||
In order to this, a data structure the following data structure is
|
||||
required:
|
||||
@d oscdat @{
|
||||
typedef struct {
|
||||
pObjectDescriptor pDes;
|
||||
pMotor pMot;
|
||||
int oldRights;
|
||||
float upperLimit;
|
||||
float lowerLimit;
|
||||
int nextTargetFlag;
|
||||
long taskID;
|
||||
int stopFlag;
|
||||
SConnection *pCon;
|
||||
int errorCount;
|
||||
} Oscillator, *pOscillator;
|
||||
@}
|
||||
The fields:
|
||||
\begin{description}
|
||||
\item[pDes] The SICS object descriptor.
|
||||
\item[pMot] The motor controlled through this module.
|
||||
\item[oldRights] The old user rights code for the motor. Must be saved
|
||||
in order to restore when stopping the oscillation.
|
||||
\item[upperLimit] The uper limit of the oscillation.
|
||||
\item[lowerLimit] the lower limits of the oscillation.
|
||||
\item[nextTargetFlag] A flag which decides which limit is the next one
|
||||
to drive to.
|
||||
\item[taskID] The ID of the control task.
|
||||
\item[stopFlag] A flag to signal the control task to stop.
|
||||
\item[pCon] A dummy connection object to use for writing. Is
|
||||
configured to write to log files.
|
||||
\end{description}
|
||||
|
||||
The interface to this module is just the interpreter interface. The
|
||||
rest is module local.
|
||||
|
||||
@o oscillate.h @{
|
||||
/*-----------------------------------------------------------------------
|
||||
Oscillator runs a motor back and forth between its software limits.
|
||||
|
||||
copyright: see file COPYRIGHT
|
||||
|
||||
Mark Koennecke, November 2004
|
||||
------------------------------------------------------------------------*/
|
||||
#ifndef SICSOSCILLATOR
|
||||
#define SICSOSCILLATOR
|
||||
#include "motor.h"
|
||||
|
||||
@<oscdat@>
|
||||
/*---------------------------------------------------------------------*/
|
||||
int MakeOscillator(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]);
|
||||
int OscillatorWrapper(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||
int argc, char *argv[]);
|
||||
|
||||
#endif
|
||||
|
||||
@}
|
Reference in New Issue
Block a user