oscillate.c SICS-232

You can now run the oscillating collimator for a specified number of cycles.
A MOTEND event is now sent when the oscillator stops.
Also temporarily set status to eEager to allow changing the motor accesscode parameter while something else is running, (eg a counter)

motor.c
finishDriving is no longer static so we can call it from the oscilator and generate a MOTEND event.

west4100.c
Return 'success' from wrapper on "controlsensor" and "sensorlist" queries so we can test and capture their values in scripts.

Makefile
Compile the quokka beamstopaction object

site_ansto.c
Add the MakeActionObject command.  Currently only makes the hardcoded beamstopaction object

obpar.c
Report object name and parameter on an illegal attempt to set a parameter

hmm_configuration_common_1.tcl
Add oscillating collimator control flag for Wombat.  If true we use hmm to start the histogram server instead of hmc.  TODO remove hmc and always use hmm.

hipd/config/motors/motor_configuration.tcl
Don't load anticollider config twice.  Fix oct limits

wombat_configuration.tcl
Environment configuration must be loaded before running server_init.

hrpd/config/hmm/hmm_configuration.tcl
Fix default time-bin to match 10Hz frame frequency

hrpd/config/motors/motor_configuration.tcl
Added dummy motor for testing.

reflectometer/config/hmm/detector.tcl
Fill in dhv1 configuration parameters.

sans/config/hmm/detector.tcl
Enable detector voltage control

sans/config/hmm/hmm_configuration.tcl
SICS-227 set default resolution to 192x192

sans/config/motors/motor_configuration.tcl
Added dummy motor for testing

quokka parameters.tcl
Fix L2mm calculation, Fix SICS-228 users cannot set rotapdeg

beamstopaction.[ch]
NEW: Implements an action command to drive the quokka beamstops up and down.

r2670 | ffr | 2008-08-07 13:17:29 +1000 (Thu, 07 Aug 2008) | 53 lines
This commit is contained in:
Ferdi Franceschini
2008-08-07 13:17:29 +10:00
committed by Douglas Clowes
parent dd984f6327
commit d7cea6914c
19 changed files with 142 additions and 57 deletions

View File

@@ -13,18 +13,24 @@
#include "task.h"
#include "commandlog.h"
#include "oscillate.h"
#include "status.h"
#define ABS(x) (x < 0 ? -(x) : (x))
/*================== real work =========================================*/
static void StopOscillation(pOscillator self){
int savedStatus;
assert(self != NULL);
if(self->taskID > 0){
self->pMot->pDriver->Halt(self->pMot->pDriver);
self->stopFlag = 1;
self->taskID = -1;
}
savedStatus = GetStatus(); /* fool status check in ObParSet (avoid "Cannot change parameter while running" message */
SetStatus(eEager);
MotorSetPar(self->pMot,self->pCon,"accesscode",usUser);
SetStatus(savedStatus);
if(self->debug > 0){
WriteToCommandLog("oscillator>> ","Stopping");
}
@@ -61,6 +67,7 @@ static int OscillationTask(void *data){
assert(self);
if(self->stopFlag == 1){
finishDriving(self->pMot, self->pCon);
return 0;
}
@@ -96,10 +103,16 @@ static int OscillationTask(void *data){
case HWBusy:
break;
case HWIdle:
if (self->cycles > 0 && self->currcycle == self->cycles) {
StopOscillation(self);
return 1;
}
pos = getNextPos(self);
status = MotorRun(self->pMot,self->pCon,pos);
if(status == OKOK){
self->pMot->pDrivInt->iErrorCount = 0;
if (self->cycles > 0)
(self->currcycle)++;
}
if(self->debug > 0){
snprintf(message,131,"Started oscillation to %f, ret code = %d",
@@ -112,7 +125,7 @@ static int OscillationTask(void *data){
/*--------------------------------------------------------------------*/
static int StartOscillation(pOscillator self, SConnection *pCon){
float fval;
int status;
int status, savedStatus;
char error[80], pBueffel[255];
assert(self);
@@ -128,7 +141,10 @@ static int StartOscillation(pOscillator self, SConnection *pCon){
self->lowerLimit += .5;
MotorGetPar(self->pMot,"softupperlim",&self->upperLimit);
self->upperLimit -= .5;
savedStatus = GetStatus(); /* fool status check in ObParSet (avoid "Cannot change parameter while running" message */
SetStatus(eEager);
MotorSetPar(self->pMot,self->pCon,"accesscode",(float)usInternal);
SetStatus(savedStatus);
self->nextTargetFlag = 0;
self->errorCount = 0;
self->stopFlag = 0;
@@ -208,6 +224,8 @@ int MakeOscillator(SConnection *pCon, SicsInterp *pSics, void *pData,
memset(pNew,0,sizeof(Oscillator));
pNew->pDes = CreateDescriptor("Oscillator");
pNew->pMot = pMot;
pNew->cycles = 0;
pNew->currcycle = 0;
pNew->pCon = SCCreateDummyConnection(pSics);
if(!pNew->pDes || !pNew->pCon){
SCWrite(pCon,"ERROR: out of memory creating oscillator",eError);
@@ -244,6 +262,12 @@ int OscillatorWrapper(SConnection *pCon, SicsInterp *pSics, void *pData,
}
strtolower(argv[1]);
if (argc == 3) {
self->cycles = 2 * atoi(argv[2]);
} else {
self->cycles = 0;
}
self->currcycle=0;
if(strcmp(argv[1],"start") == 0){
return StartOscillation(self,pCon);
} else if(strcmp(argv[1],"stop") == 0) {