Histmem now only calls TaskYield after SICS has finished initalising, this stops the statusfile task from being called early and overwriting the status file. Created ANSTO_MakeHistMemory command to install ANSTO_HistAction Added veto functions. Mapped the HistDriver interface Pause() and Continue() commands to AnstoHttpVeto and AnstoHttpNoVeto. Implemented an ANSTO_Histaction to call AnstoHttpPause when sent a "pause" subcommand. hmcontrol_ansto.c Call AnstoHttpPause() directly when Pause_HM_After_Count is set to preserver current behaviour. counterdriv.c Now sends the correct "SICS RESUME" command to resume a paused count. ansto_sctdriveadapter.c NEW This lets you create driveable objects from script-context controllers which have one node for setting a parameter and another node for reading the parameter (eg temperature controllers, choppers, velocity selectors) sctemonadapter.c NEW This generates an environment monitor interface for script-context controllers so that the emon object in SICS will be able to pause counters if the controller goes out of tolerance. sct_usbtmcprot.c, usbtmc.h NEW First attempt at a protocol handler for USB Test and Measurement Class devices sct_julabo_lh45.tcl NEW Implements script-context controller for the Julabo LH45 temperature controller. Makefile Added ansto_sctdriveadapter and sctemonadapter hardsup/makefile Added velocity selector and usbtmc protocol handlers hardsup/sct_velselprot.c Simplified, don't worry about trying to implement a login handler for now, just implement a "Reading" handler. site_ansto.c Add the velocity selector and USBTMC protocol handlers. Added the ANSTO_MakeHM command instrument/config/hipadaba/common_instrument_dictionary.tcl Added support for auxiliary data, ie extra meta-data entries in the "data" group of the nexus file. Add new NXvelocity_selector object under /instrument. instrument/config/hipadaba/hipadaba_configuration_common.tcl Add the new "sct_object" script-context controller objects to the hdb tree. instrument/config/hipadaba/instdict_specification.tcl Define the new sct_object controllers. instrument/config/hmm/hmm_configuration_common_1.tcl Use the new ANSTO_MakeHM command to create histmem drivers which support veto. Define allowed attributes and elements for the BAT_TABLE and FAT_TABLE Stop between counts instead of pausing because setting pause now sends a veto. instrument/config/motors/sct_jogmotor_common.tcl You now need to specify klass when creating a jogmotor. instrument/config/motors/sct_positmotor_common.tcl You can now specify an optional function which calculates the instrument parameter (eg attenuation) from a posit table entry when defining a posit motor. instrument/config/nexus/nxscripts_common_1.tcl Report file status info in the /experiment section of the hdb tree. Add auxiliary data to data file. Handle saving data from script-context controller objects. instrument/util/script_context_util.tcl Added procedure to set required properties for saving script-context object data. instrument/util/utility.tcl Added set_sct_object_attributes proc to automatically set required attributes on SCT_OBJECTs Fixed hlistplainprop to deal with empty property fields on hdb nodes. instrument/server_config.tcl Call the new nexus initialisation command and set attributes on sct objects. hrpd/config/motors/motor_configuration.tcl New absenc home readings for mchi and mphi. New absenc home and range for mf1 hipd/config/commands/commands.tcl Exported and published the new ajscmds so that they can be used in batch files. hipd/config/motors/motor_configuration.tcl New mchi absenc home rsd/config/hmm/hmm_configuration.tcl Provide support for saving corrected hmm data rsd/config/motors/motor_configuration.tcl Use simple names for motors. SICS-329 sans/config/INSTCFCOMMON.TXT Added julabo and lakeshore configuration files to list. sans/config/optics/guide_configuration.tcl Added entrance aperture positions to the configuration table and the cn_maps which map the index to the component ID. sans/commands/commands.tcl The "guide" command now set EApPosYmm after driving the guides in place. The indexed position to component maps (cn_map) have been moved to the guide_configuration.tcl file. sans/motors/motor_configuration.tcl Set samy home to 56.1mm sans/config/velsel/sct_velsel.tc NEW Implements script-context controller object for the NVS40 velocity selector. TODO tilt-angle control, driveable interface. sans/config/hmm/hmm_configuration.tcl Set 5.08mm spacing on detector width. Use pixel-offset for vertical and horizontal detector axes. sans/config/motors/motor_configuration.tcl Swap directions of beamstops 4 and 5 (the two smallest) New config parameters for samx, samthet, apx, det, detoff, bsz, sans/config/motors/positmotor_configuration.tcl Added descriptive headers to positmotor configuration tables and new synstax for the make positmotor command. sans/config/nexus/nxscripts.tcl Implemented initialisation command. sans/config/parameters/parameters.tcl Added SampleThickness and TransmissionFlag. Calculate SamplePosYmm from samy and SamyOffsetmm. Added beamstops to hdb tree. reflectometer/config/nexus/nxscripts.tcl Implement the initialisation procedure. r2767 | ffr | 2009-03-31 10:16:54 +1100 (Tue, 31 Mar 2009) | 123 lines
137 lines
4.7 KiB
C
137 lines
4.7 KiB
C
/*------------------------------------------------------------------------
|
|
H M C O N T R O L _ A N S T O
|
|
|
|
A module creating a slightly modified HMControl object suitable for the
|
|
ANSTO HM. This works exactly the same as the existing HMControl, but
|
|
has extra options (e.g. pausing HM's at the end of a count instead of
|
|
stopping them).
|
|
|
|
copyright: see copyright.h
|
|
|
|
Mark Lesha, October 2006
|
|
-------------------------------------------------------------------------*/
|
|
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
#include <tcl.h>
|
|
#include "fortify.h"
|
|
#include "hmcontrol.h"
|
|
#include "hmcontrol_ansto.h" // extends hmcontrol.h
|
|
#include "HistMem.h"
|
|
#include "devexec.h"
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
static int HMCStatus_ANSTO(void *pData, SConnection *pCon)
|
|
// A slightly modified version of the original HMCStatus(),
|
|
// to support pause-on-count-terminate option for ANSTO HM,
|
|
// and termination either by counter or by HM.
|
|
{
|
|
int status,i;
|
|
pHMcontrol self = NULL;
|
|
|
|
self = (pHMcontrol)pData;
|
|
assert(self);
|
|
|
|
// Termination happens when the selected device (counter or HM) terminates.
|
|
status = self->slaves[((pHMcontrol_ANSTO)pData)->Termination_Object]
|
|
->CheckCountStatus(self->slaveData[((pHMcontrol_ANSTO)pData)->Termination_Object],pCon);
|
|
if(status == HWIdle || status == HWFault)
|
|
{
|
|
/*
|
|
stop counting on slaves when finished or when an error
|
|
occurred.
|
|
*/
|
|
InvokeCallBack(self->pCall,COUNTEND,pCon);
|
|
// If required, pause all objects when hm/count terminates
|
|
// instead of stopping them. Use the existing interface
|
|
// functions to do this.
|
|
// ffr: NOTE: Pause() is now mapped to AnstoHttpVeto()
|
|
// we need to call AnstoHttpPause() via the histmem Pause
|
|
if (((pHMcontrol_ANSTO)pData)->Pause_HM_After_Count==1)
|
|
self->pCount->Pause(self,pCon);
|
|
else
|
|
self->pCount->Halt(self);
|
|
}
|
|
/*
|
|
Warning: this assumes that slaves 1 - MAXSLAVE are histogram memories.
|
|
If this assumption does not hold, change this code to check if this
|
|
is really a histogram memory.
|
|
*/
|
|
for(i = 1; i < MAXSLAVE; i++)
|
|
{
|
|
if(self->slaves[i] != NULL)
|
|
{
|
|
HistDirty((pHistMem)self->slaveData[i]);
|
|
}
|
|
}
|
|
return status;
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
int HMControlAction_ANSTO(SConnection *pCon, SicsInterp *pSics,
|
|
void *pData, int argc, char *argv[])
|
|
// This function extends HMControlAction by looking for an optional fifth
|
|
// and sixth command argument, which are stored to the expanded command data.
|
|
// Thereafter the rest of the arguments are simply passed to the standard
|
|
// HMControlAction function.
|
|
{
|
|
((pHMcontrol_ANSTO)pData)->Pause_HM_After_Count=0;
|
|
((pHMcontrol_ANSTO)pData)->Termination_Object=0;
|
|
if (argc>=5)
|
|
{
|
|
if (strcmp(argv[4],"pause")==0)
|
|
((pHMcontrol_ANSTO)pData)->Pause_HM_After_Count=1;
|
|
else if (strcmp(argv[4],"stop")!=0) // default
|
|
{
|
|
SCWrite(pCon,"ERROR: Optional argument 5 must be 'stop' or 'pause'",eError);
|
|
return 0;
|
|
}
|
|
}
|
|
if (argc>=6)
|
|
{
|
|
if (sscanf(argv[5],"%d",&(((pHMcontrol_ANSTO)pData)->Termination_Object))!=1
|
|
|| ((pHMcontrol_ANSTO)pData)->Termination_Object>=((pHMcontrol_ANSTO)pData)->hmc.nSlaves)
|
|
{
|
|
char errstr[256];
|
|
sprintf(errstr,"ERROR: Optional argument 6 must be integer 0 to %d, specifies termination object.",
|
|
((pHMcontrol_ANSTO)pData)->hmc.nSlaves - 1);
|
|
SCWrite(pCon,errstr,eError);
|
|
return 0;
|
|
}
|
|
}
|
|
if (argc>=7) // too many args
|
|
{
|
|
SCWrite(pCon,"ERROR: Usage %s start preset mode",eError);
|
|
return 0;
|
|
}
|
|
return HMControlAction(pCon, pSics, pData, argc, argv);
|
|
}
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
int MakeHMControl_ANSTO(SConnection *pCon, SicsInterp *pSics,
|
|
void *pData, int argc, char *argv[])
|
|
{
|
|
/* Start by making a plain vanilla HMControl object, */
|
|
/* which gets installed in the command list. */
|
|
if (!MakeHMControl(pCon, pSics, pData, argc, argv))
|
|
return 0;
|
|
/* Find the new object in the command list. */
|
|
CommandList *pCommand;
|
|
if (!(pCommand=FindCommand(pSics,argv[1])))
|
|
return 0;
|
|
/* Get the original command's data, and add the extended command's data */
|
|
/* to it. The altered size of the object does not make any side effects. */
|
|
HMcontrol_ANSTO *newpData;
|
|
if (!(newpData=(HMcontrol_ANSTO *)malloc(sizeof(HMcontrol_ANSTO))))
|
|
return 0;
|
|
memcpy(newpData,pCommand->pData,sizeof(HMcontrol));
|
|
memset(((char *)newpData)+sizeof(HMcontrol),0,sizeof(HMcontrol_ANSTO)-sizeof(HMcontrol));
|
|
free(pCommand->pData);
|
|
pCommand->pData=(void *)newpData;
|
|
/* Customize the command handler and status reporting routine. */
|
|
pCommand->OFunc = HMControlAction_ANSTO;
|
|
newpData->hmc.pCount->CheckCountStatus = HMCStatus_ANSTO;
|
|
/* All done, return success. */
|
|
return 1;
|
|
}
|