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:
committed by
Douglas Clowes
parent
dd984f6327
commit
d7cea6914c
26
oscillate.c
26
oscillate.c
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user