- Fix to various drivers due to changes in rs232controller
- hkl now searches psi in .5 steps - first point of fastscan is driven normally
This commit is contained in:
119
amor2t.c
119
amor2t.c
@ -19,6 +19,10 @@
|
|||||||
structures this extra was added into this module.
|
structures this extra was added into this module.
|
||||||
|
|
||||||
Mark Koennecke, May-June 2000
|
Mark Koennecke, May-June 2000
|
||||||
|
|
||||||
|
Introduced DIAFLAG to switch off diaphragm calculation.
|
||||||
|
|
||||||
|
Mark Koennecke, July 2005
|
||||||
---------------------------------------------------------------------------*/
|
---------------------------------------------------------------------------*/
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -32,7 +36,7 @@
|
|||||||
#define DEBUG 1
|
#define DEBUG 1
|
||||||
|
|
||||||
#define MAXMOT 13
|
#define MAXMOT 13
|
||||||
#define MAXPAR 13
|
#define MAXPAR 14
|
||||||
|
|
||||||
#include "amor2t.i"
|
#include "amor2t.i"
|
||||||
#include "amor2t.h"
|
#include "amor2t.h"
|
||||||
@ -72,6 +76,16 @@
|
|||||||
The core of it all: The calculation of the settings for the various
|
The core of it all: The calculation of the settings for the various
|
||||||
motors.
|
motors.
|
||||||
========================================================================*/
|
========================================================================*/
|
||||||
|
static void clearRunFlags(pAmor2T self)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; i < MAXMOT; i++)
|
||||||
|
{
|
||||||
|
self->toStart[i].pMot = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*---------------------------------------------------------------------*/
|
||||||
static int CalculateAMORE(pAmor2T self, SConnection *pCon, float fNew)
|
static int CalculateAMORE(pAmor2T self, SConnection *pCon, float fNew)
|
||||||
{
|
{
|
||||||
float fMOM, fSOM, fSTZ, fSOZ, fAOM, fAOZ, fC3Z, fconstAOM;
|
float fMOM, fSOM, fSTZ, fSOZ, fAOM, fAOZ, fC3Z, fconstAOM;
|
||||||
@ -107,7 +121,9 @@
|
|||||||
/* calculate base height of sample table */
|
/* calculate base height of sample table */
|
||||||
fBase = fSOZ + ObVal(self->aParameter,PARDH);
|
fBase = fSOZ + ObVal(self->aParameter,PARDH);
|
||||||
fPIR = 180. / 3.1415926;
|
fPIR = 180. / 3.1415926;
|
||||||
|
|
||||||
|
clearRunFlags(self);
|
||||||
|
|
||||||
/* calculation for detector */
|
/* calculation for detector */
|
||||||
fAngle = fNew - 2*fMOM;
|
fAngle = fNew - 2*fMOM;
|
||||||
if(fAngle < 0)
|
if(fAngle < 0)
|
||||||
@ -127,32 +143,32 @@
|
|||||||
self->toStart[2].pMot = self->aEngine[MOTCOM];
|
self->toStart[2].pMot = self->aEngine[MOTCOM];
|
||||||
strcpy(self->toStart[2].pName,self->aEngine[MOTCOM]->name);
|
strcpy(self->toStart[2].pName,self->aEngine[MOTCOM]->name);
|
||||||
self->toStart[2].fTarget = fNew - 2*fMOM;
|
self->toStart[2].fTarget = fNew - 2*fMOM;
|
||||||
self->iStart = 3;
|
|
||||||
|
|
||||||
/* calculation for diaphragm 4 */
|
if(ObVal(self->aParameter,DIAFLAG) > .0)
|
||||||
fZ = ObVal(self->aParameter,PARDD4) * sin(fAngle);
|
{
|
||||||
self->toStart[3].pMot = self->aEngine[MOTD4B];
|
/* calculation for diaphragm 4 */
|
||||||
strcpy(self->toStart[3].pName,self->aEngine[MOTD4B]->name);
|
fZ = ObVal(self->aParameter,PARDD4) * sin(fAngle);
|
||||||
self->toStart[3].fTarget = fBase + fZ -
|
self->toStart[3].pMot = self->aEngine[MOTD4B];
|
||||||
ObVal(self->aParameter,PARD4H);
|
strcpy(self->toStart[3].pName,self->aEngine[MOTD4B]->name);
|
||||||
self->iStart = 4;
|
self->toStart[3].fTarget = fBase + fZ -
|
||||||
|
ObVal(self->aParameter,PARD4H);
|
||||||
|
|
||||||
/* calculation for diaphragm 5 */
|
/* calculation for diaphragm 5 */
|
||||||
fZ = ObVal(self->aParameter,PARDD5) * sin(fAngle);
|
fZ = ObVal(self->aParameter,PARDD5) * sin(fAngle);
|
||||||
self->toStart[4].pMot = self->aEngine[MOTD5B];
|
self->toStart[4].pMot = self->aEngine[MOTD5B];
|
||||||
strcpy(self->toStart[4].pName,self->aEngine[MOTD5B]->name);
|
strcpy(self->toStart[4].pName,self->aEngine[MOTD5B]->name);
|
||||||
self->toStart[4].fTarget = fBase + fZ -
|
self->toStart[4].fTarget = fBase + fZ -
|
||||||
ObVal(self->aParameter,PARD5H);
|
ObVal(self->aParameter,PARD5H);
|
||||||
self->iStart = 5;
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
sprintf(pBueffel,"2T COZ COX COM D4B D5B ");
|
sprintf(pBueffel,"2T COZ COX COM D4B D5B ");
|
||||||
SCWrite(pCon,pBueffel,eValue);
|
SCWrite(pCon,pBueffel,eValue);
|
||||||
sprintf(pBueffel,"%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f",
|
sprintf(pBueffel,"%6.2f %6.2f %6.2f %6.2f %6.2f %6.2f",
|
||||||
fNew, self->toStart[1].fTarget, self->toStart[0].fTarget,
|
fNew, self->toStart[1].fTarget, self->toStart[0].fTarget,
|
||||||
self->toStart[2].fTarget, self->toStart[3].fTarget,
|
self->toStart[2].fTarget, self->toStart[3].fTarget,
|
||||||
self->toStart[4].fTarget);
|
self->toStart[4].fTarget);
|
||||||
SCWrite(pCon,pBueffel,eValue);
|
SCWrite(pCon,pBueffel,eValue);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
if(ObVal(self->aParameter,ANAFLAG) > 0)
|
if(ObVal(self->aParameter,ANAFLAG) > 0)
|
||||||
{
|
{
|
||||||
@ -162,14 +178,12 @@
|
|||||||
self->toStart[5].pMot = self->aEngine[MOTAOZ];
|
self->toStart[5].pMot = self->aEngine[MOTAOZ];
|
||||||
strcpy(self->toStart[5].pName,self->aEngine[MOTAOZ]->name);
|
strcpy(self->toStart[5].pName,self->aEngine[MOTAOZ]->name);
|
||||||
self->toStart[5].fTarget = fAOZ;
|
self->toStart[5].fTarget = fAOZ;
|
||||||
self->iStart = 6;
|
|
||||||
|
|
||||||
/* analyzer omega */
|
/* analyzer omega */
|
||||||
self->toStart[6].pMot = self->aEngine[MOTAOM];
|
self->toStart[6].pMot = self->aEngine[MOTAOM];
|
||||||
strcpy(self->toStart[6].pName,self->aEngine[MOTAOM]->name);
|
strcpy(self->toStart[6].pName,self->aEngine[MOTAOM]->name);
|
||||||
self->toStart[6].fTarget = fNew/2.
|
self->toStart[6].fTarget = fNew/2.
|
||||||
+ ObVal(self->aParameter,PARAOM);
|
+ ObVal(self->aParameter,PARAOM);
|
||||||
self->iStart = 7;
|
|
||||||
|
|
||||||
/* C3Z */
|
/* C3Z */
|
||||||
fZ2 = (ObVal(self->aParameter,PARDS) - ObVal(self->aParameter,
|
fZ2 = (ObVal(self->aParameter,PARDS) - ObVal(self->aParameter,
|
||||||
@ -180,7 +194,6 @@
|
|||||||
self->toStart[7].fTarget = fBase + fZ + fZ2 -
|
self->toStart[7].fTarget = fBase + fZ + fZ2 -
|
||||||
ObVal(self->aParameter,PARDDD) -
|
ObVal(self->aParameter,PARDDD) -
|
||||||
self->toStart[1].fTarget;
|
self->toStart[1].fTarget;
|
||||||
self->iStart = 8;
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
sprintf(pBueffel,"2T AOZ AOM C3Z");
|
sprintf(pBueffel,"2T AOZ AOM C3Z");
|
||||||
SCWrite(pCon,pBueffel,eValue);
|
SCWrite(pCon,pBueffel,eValue);
|
||||||
@ -238,6 +251,7 @@
|
|||||||
*/
|
*/
|
||||||
fDiffracted = fIncident - fNew;
|
fDiffracted = fIncident - fNew;
|
||||||
|
|
||||||
|
clearRunFlags(self);
|
||||||
|
|
||||||
/* calculation for detector */
|
/* calculation for detector */
|
||||||
fDiffracted /= fPIR;
|
fDiffracted /= fPIR;
|
||||||
@ -257,16 +271,16 @@
|
|||||||
self->toStart[2].pMot = self->aEngine[MOTCOM];
|
self->toStart[2].pMot = self->aEngine[MOTCOM];
|
||||||
strcpy(self->toStart[2].pName,self->aEngine[MOTCOM]->name);
|
strcpy(self->toStart[2].pName,self->aEngine[MOTCOM]->name);
|
||||||
self->toStart[2].fTarget = -fDiffracted*fPIR;
|
self->toStart[2].fTarget = -fDiffracted*fPIR;
|
||||||
self->iStart = 3;
|
|
||||||
|
|
||||||
/* calculation for diaphragm 5 */
|
/* calculation for diaphragm 5 */
|
||||||
fZ = ObVal(self->aParameter,PARDD5) * sin(fDiffracted);
|
if(ObVal(self->aParameter,DIAFLAG) > .0)
|
||||||
self->toStart[3].pMot = self->aEngine[MOTD5B];
|
{
|
||||||
strcpy(self->toStart[3].pName,self->aEngine[MOTD5B]->name);
|
fZ = ObVal(self->aParameter,PARDD5) * sin(fDiffracted);
|
||||||
self->toStart[3].fTarget = fBase + fZ -
|
self->toStart[3].pMot = self->aEngine[MOTD5B];
|
||||||
ObVal(self->aParameter,PARD5H);
|
strcpy(self->toStart[3].pName,self->aEngine[MOTD5B]->name);
|
||||||
self->iStart = 4;
|
self->toStart[3].fTarget = fBase + fZ -
|
||||||
|
ObVal(self->aParameter,PARD5H);
|
||||||
|
}
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
sprintf(pBueffel,"2T COX COZ COM D5B ");
|
sprintf(pBueffel,"2T COX COZ COM D5B ");
|
||||||
SCWrite(pCon,pBueffel,eValue);
|
SCWrite(pCon,pBueffel,eValue);
|
||||||
@ -297,8 +311,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* start them all */
|
/* start them all */
|
||||||
for(i = 0; i < self->iStart; i++)
|
for(i = 0; i < MAXMOT; i++)
|
||||||
{
|
{
|
||||||
|
if(self->toStart[i].pMot == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
||||||
self->toStart[i].pMot,DRIVEID);
|
self->toStart[i].pMot,DRIVEID);
|
||||||
if(pDriv != NULL)
|
if(pDriv != NULL)
|
||||||
@ -330,8 +348,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* start them all */
|
/* start them all */
|
||||||
for(i = 0; i < self->iStart; i++)
|
for(i = 0; i < MAXMOT; i++)
|
||||||
{
|
{
|
||||||
|
if(self->toStart[i].pMot == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
||||||
self->toStart[i].pMot,DRIVEID);
|
self->toStart[i].pMot,DRIVEID);
|
||||||
if(pDriv != NULL)
|
if(pDriv != NULL)
|
||||||
@ -356,8 +378,12 @@
|
|||||||
assert(self);
|
assert(self);
|
||||||
|
|
||||||
/* stop them all */
|
/* stop them all */
|
||||||
for(i = 0; i < self->iStart; i++)
|
for(i = 0; i < MAXMOT; i++)
|
||||||
{
|
{
|
||||||
|
if(self->toStart[i].pMot == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
||||||
self->toStart[i].pMot,DRIVEID);
|
self->toStart[i].pMot,DRIVEID);
|
||||||
if(pDriv != NULL)
|
if(pDriv != NULL)
|
||||||
@ -389,8 +415,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check them all */
|
/* check them all */
|
||||||
for(i = 0; i < self->iStart; i++)
|
for(i = 0; i < MAXMOT; i++)
|
||||||
{
|
{
|
||||||
|
if(self->toStart[i].pMot == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
||||||
self->toStart[i].pMot,DRIVEID);
|
self->toStart[i].pMot,DRIVEID);
|
||||||
if(pDriv != NULL)
|
if(pDriv != NULL)
|
||||||
@ -428,8 +458,12 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check them all */
|
/* check them all */
|
||||||
for(i = 0; i < self->iStart; i++)
|
for(i = 0; i < MAXMOT; i++)
|
||||||
{
|
{
|
||||||
|
if(self->toStart[i].pMot == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
||||||
self->toStart[i].pMot,DRIVEID);
|
self->toStart[i].pMot,DRIVEID);
|
||||||
if(pDriv != NULL)
|
if(pDriv != NULL)
|
||||||
@ -455,8 +489,12 @@
|
|||||||
assert(self);
|
assert(self);
|
||||||
|
|
||||||
/* check them all */
|
/* check them all */
|
||||||
for(i = 0; i < self->iStart; i++)
|
for(i = 0; i < MAXMOT; i++)
|
||||||
{
|
{
|
||||||
|
if(self->toStart[i].pMot == NULL)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
pDriv = self->toStart[i].pMot->pDescriptor->GetInterface(
|
||||||
self->toStart[i].pMot,DRIVEID);
|
self->toStart[i].pMot,DRIVEID);
|
||||||
if(pDriv != NULL)
|
if(pDriv != NULL)
|
||||||
@ -548,6 +586,7 @@
|
|||||||
fprintf(fd,"%s anaflag %f \n", name, ObVal(self->aParameter,ANAFLAG));
|
fprintf(fd,"%s anaflag %f \n", name, ObVal(self->aParameter,ANAFLAG));
|
||||||
fprintf(fd,"%s c2h %f \n", name, ObVal(self->aParameter,PARDDD));
|
fprintf(fd,"%s c2h %f \n", name, ObVal(self->aParameter,PARDDD));
|
||||||
fprintf(fd,"%s aomconst %f \n", name, ObVal(self->aParameter,PARAOM));
|
fprintf(fd,"%s aomconst %f \n", name, ObVal(self->aParameter,PARAOM));
|
||||||
|
fprintf(fd,"%s diaflag %f \n", name, ObVal(self->aParameter,DIAFLAG));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
@ -599,6 +638,9 @@
|
|||||||
sprintf(pBueffel,
|
sprintf(pBueffel,
|
||||||
"%s.aomconst %f \n", name, ObVal(self->aParameter,PARAOM));
|
"%s.aomconst %f \n", name, ObVal(self->aParameter,PARAOM));
|
||||||
Tcl_DStringAppend(&tString,pBueffel,-1);
|
Tcl_DStringAppend(&tString,pBueffel,-1);
|
||||||
|
sprintf(pBueffel,
|
||||||
|
"%s.diaflag %f \n", name, ObVal(self->aParameter,DIAFLAG));
|
||||||
|
Tcl_DStringAppend(&tString,pBueffel,-1);
|
||||||
SCWrite(pCon,Tcl_DStringValue(&tString),eValue);
|
SCWrite(pCon,Tcl_DStringValue(&tString),eValue);
|
||||||
Tcl_DStringFree(&tString);
|
Tcl_DStringFree(&tString);
|
||||||
}
|
}
|
||||||
@ -868,6 +910,7 @@
|
|||||||
ObParInit(pNew->aParameter,ANAFLAG,"anaflag",-1.,usMugger);
|
ObParInit(pNew->aParameter,ANAFLAG,"anaflag",-1.,usMugger);
|
||||||
ObParInit(pNew->aParameter,PARDDD,"c2h",100.,usMugger);
|
ObParInit(pNew->aParameter,PARDDD,"c2h",100.,usMugger);
|
||||||
ObParInit(pNew->aParameter,PARAOM,"aomconst",3.,usMugger);
|
ObParInit(pNew->aParameter,PARAOM,"aomconst",3.,usMugger);
|
||||||
|
ObParInit(pNew->aParameter,DIAFLAG,"diaflag",1.,usMugger);
|
||||||
|
|
||||||
|
|
||||||
/* initialize interfaces */
|
/* initialize interfaces */
|
||||||
|
1
amor2t.h
1
amor2t.h
@ -17,6 +17,5 @@
|
|||||||
int argc, char *argv[]);
|
int argc, char *argv[]);
|
||||||
int Amor2TAction(SConnection *pCon, SicsInterp *pSics, void *pData,
|
int Amor2TAction(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||||
int argc, char *argv[]);
|
int argc, char *argv[]);
|
||||||
void Amor2TKill(void *pData);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
3
amor2t.i
3
amor2t.i
@ -33,6 +33,8 @@
|
|||||||
#define PARDDD 11
|
#define PARDDD 11
|
||||||
/* constant part of AOM */
|
/* constant part of AOM */
|
||||||
#define PARAOM 12
|
#define PARAOM 12
|
||||||
|
/* flag for diaphragms */
|
||||||
|
#define DIAFLAG 13
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -48,7 +50,6 @@
|
|||||||
pIDrivable pDriv;
|
pIDrivable pDriv;
|
||||||
pMotor aEngine[MAXMOT];
|
pMotor aEngine[MAXMOT];
|
||||||
MotEntry toStart[MAXMOT];
|
MotEntry toStart[MAXMOT];
|
||||||
int iStart;
|
|
||||||
ObPar *aParameter;
|
ObPar *aParameter;
|
||||||
}Amor2T;
|
}Amor2T;
|
||||||
|
|
||||||
|
@ -62,6 +62,7 @@ $\langle$putput {\footnotesize ?}$\rangle\equiv$
|
|||||||
\item[pMot] is a pointer to the motors data structure.
|
\item[pMot] is a pointer to the motors data structure.
|
||||||
\item[pName] is the name of the motor to start.
|
\item[pName] is the name of the motor to start.
|
||||||
\item[fTarget] is the target value for the motor.
|
\item[fTarget] is the target value for the motor.
|
||||||
|
\item[run] A flag which determines if this motor is to be run.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
The next data structure is the class data structure for amor2t:
|
The next data structure is the class data structure for amor2t:
|
||||||
@ -76,7 +77,6 @@ $\langle$amoredata {\footnotesize ?}$\rangle\equiv$
|
|||||||
\mbox{}\verb@ pIDrivable pDriv;@\\
|
\mbox{}\verb@ pIDrivable pDriv;@\\
|
||||||
\mbox{}\verb@ pMotor aEngine[MAXMOT];@\\
|
\mbox{}\verb@ pMotor aEngine[MAXMOT];@\\
|
||||||
\mbox{}\verb@ MotEntry toStart[MAXMOT];@\\
|
\mbox{}\verb@ MotEntry toStart[MAXMOT];@\\
|
||||||
\mbox{}\verb@ int iStart;@\\
|
|
||||||
\mbox{}\verb@ ObPar *aParameter;@\\
|
\mbox{}\verb@ ObPar *aParameter;@\\
|
||||||
\mbox{}\verb@ }Amor2T;@\\
|
\mbox{}\verb@ }Amor2T;@\\
|
||||||
\mbox{}\verb@@$\diamond$
|
\mbox{}\verb@@$\diamond$
|
||||||
@ -118,7 +118,6 @@ $\langle$amorinterface {\footnotesize ?}$\rangle\equiv$
|
|||||||
\mbox{}\verb@ int argc, char *argv[]);@\\
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
||||||
\mbox{}\verb@ int Amor2TAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
\mbox{}\verb@ int Amor2TAction(SConnection *pCon, SicsInterp *pSics, void *pData,@\\
|
||||||
\mbox{}\verb@ int argc, char *argv[]);@\\
|
\mbox{}\verb@ int argc, char *argv[]);@\\
|
||||||
\mbox{}\verb@ void Amor2TKill(void *pData); @\\
|
|
||||||
\mbox{}\verb@@$\diamond$
|
\mbox{}\verb@@$\diamond$
|
||||||
\end{list}
|
\end{list}
|
||||||
\vspace{-1ex}
|
\vspace{-1ex}
|
||||||
@ -168,6 +167,8 @@ $\langle$amorinterface {\footnotesize ?}$\rangle\equiv$
|
|||||||
\mbox{}\verb@#define PARDDD 11@\\
|
\mbox{}\verb@#define PARDDD 11@\\
|
||||||
\mbox{}\verb@/* constant part of AOM */@\\
|
\mbox{}\verb@/* constant part of AOM */@\\
|
||||||
\mbox{}\verb@#define PARAOM 12@\\
|
\mbox{}\verb@#define PARAOM 12@\\
|
||||||
|
\mbox{}\verb@/* flag for diaphragms */@\\
|
||||||
|
\mbox{}\verb@#define DIAFLAG 13@\\
|
||||||
\mbox{}\verb@@\\
|
\mbox{}\verb@@\\
|
||||||
\mbox{}\verb@@$\langle$putput {\footnotesize ?}$\rangle$\verb@@\\
|
\mbox{}\verb@@$\langle$putput {\footnotesize ?}$\rangle$\verb@@\\
|
||||||
\mbox{}\verb@@\\
|
\mbox{}\verb@@\\
|
||||||
|
4
amor2t.w
4
amor2t.w
@ -49,6 +49,7 @@ used is an entry in an array of motors to start:
|
|||||||
\item[pMot] is a pointer to the motors data structure.
|
\item[pMot] is a pointer to the motors data structure.
|
||||||
\item[pName] is the name of the motor to start.
|
\item[pName] is the name of the motor to start.
|
||||||
\item[fTarget] is the target value for the motor.
|
\item[fTarget] is the target value for the motor.
|
||||||
|
\item[run] A flag which determines if this motor is to be run.
|
||||||
\end{description}
|
\end{description}
|
||||||
|
|
||||||
The next data structure is the class data structure for amor2t:
|
The next data structure is the class data structure for amor2t:
|
||||||
@ -58,7 +59,6 @@ The next data structure is the class data structure for amor2t:
|
|||||||
pIDrivable pDriv;
|
pIDrivable pDriv;
|
||||||
pMotor aEngine[MAXMOT];
|
pMotor aEngine[MAXMOT];
|
||||||
MotEntry toStart[MAXMOT];
|
MotEntry toStart[MAXMOT];
|
||||||
int iStart;
|
|
||||||
ObPar *aParameter;
|
ObPar *aParameter;
|
||||||
}Amor2T;
|
}Amor2T;
|
||||||
@}
|
@}
|
||||||
@ -124,6 +124,8 @@ functions for interacting with the interpreter.
|
|||||||
#define PARDDD 11
|
#define PARDDD 11
|
||||||
/* constant part of AOM */
|
/* constant part of AOM */
|
||||||
#define PARAOM 12
|
#define PARAOM 12
|
||||||
|
/* flag for diaphragms */
|
||||||
|
#define DIAFLAG 13
|
||||||
|
|
||||||
@<putput@>
|
@<putput@>
|
||||||
|
|
||||||
|
10
dornier2.c
10
dornier2.c
@ -159,7 +159,7 @@ static int takeControl(pDornier pDorn){
|
|||||||
snprintf(pCom,49,"SDR %d\n",pDorn->minRPM);
|
snprintf(pCom,49,"SDR %d\n",pDorn->minRPM);
|
||||||
iRet = transactRS232(pDorn->controller,pCom,strlen(pCom),
|
iRet = transactRS232(pDorn->controller,pCom,strlen(pCom),
|
||||||
pAnswer,79);
|
pAnswer,79);
|
||||||
if(iRet != 1)
|
if(iRet < 1)
|
||||||
{
|
{
|
||||||
pDorn->iLastError = iRet;
|
pDorn->iLastError = iRet;
|
||||||
return 0;
|
return 0;
|
||||||
@ -278,7 +278,7 @@ static int takeControl(pDornier pDorn){
|
|||||||
pAnswer,49);
|
pAnswer,49);
|
||||||
setRS232ReplyTerminator(pDorn->controller,"\n");
|
setRS232ReplyTerminator(pDorn->controller,"\n");
|
||||||
pDorn->firstStatus = 1;
|
pDorn->firstStatus = 1;
|
||||||
if(iRet != 1)
|
if(iRet < 1)
|
||||||
{
|
{
|
||||||
if(iRet != INCOMPLETE){
|
if(iRet != INCOMPLETE){
|
||||||
|
|
||||||
@ -359,7 +359,7 @@ static int DornierFixIt(pVelSelDriv self, int iCode){
|
|||||||
}
|
}
|
||||||
oldReject = pDorn->rejectCount;
|
oldReject = pDorn->rejectCount;
|
||||||
status = takeControl(pDorn);
|
status = takeControl(pDorn);
|
||||||
if(status == 1){
|
if(status >= 1){
|
||||||
DornierRun(self,pDorn->fTarget);
|
DornierRun(self,pDorn->fTarget);
|
||||||
pDorn->rejectCount = oldReject + 1;
|
pDorn->rejectCount = oldReject + 1;
|
||||||
return VELOREDO;
|
return VELOREDO;
|
||||||
@ -500,7 +500,7 @@ static int DornierStatNew(pVelSelDriv self, int *iCode, float *fCur){
|
|||||||
/* send a command */
|
/* send a command */
|
||||||
iRet = transactRS232(pDorn->controller,pCommand,strlen(pCommand),
|
iRet = transactRS232(pDorn->controller,pCommand,strlen(pCommand),
|
||||||
pAnswer,79);
|
pAnswer,79);
|
||||||
if(iRet != 1)
|
if(iRet < 1)
|
||||||
{
|
{
|
||||||
pDorn->iLastError = iRet;
|
pDorn->iLastError = iRet;
|
||||||
return 0;
|
return 0;
|
||||||
@ -577,7 +577,7 @@ static int DornierStatNew(pVelSelDriv self, int *iCode, float *fCur){
|
|||||||
Funny enough no <cr> or <nl> is sent in the reply to this.
|
Funny enough no <cr> or <nl> is sent in the reply to this.
|
||||||
*/
|
*/
|
||||||
iRet = takeControl(pDorn);
|
iRet = takeControl(pDorn);
|
||||||
if(iRet != 1)
|
if(iRet <= 1)
|
||||||
{
|
{
|
||||||
sprintf(pBueffel,
|
sprintf(pBueffel,
|
||||||
"ERROR: %s while switching velocity selector to remote",
|
"ERROR: %s while switching velocity selector to remote",
|
||||||
|
33
el734hp.c
33
el734hp.c
@ -105,20 +105,24 @@ static int transactEL734(prs232 self, void *send, int sendLen,
|
|||||||
message only at the second try. This is the logic below.
|
message only at the second try. This is the logic below.
|
||||||
*/
|
*/
|
||||||
status = transactRS232(self,send,sendLen,reply,replylen);
|
status = transactRS232(self,send,sendLen,reply,replylen);
|
||||||
if(status == 1){
|
if(status >= 1){
|
||||||
pReply = (char *)reply;
|
pReply = (char *)reply;
|
||||||
if(strstr(pReply,"*ES") != NULL){
|
if(strstr(pReply,"*ES") != NULL){
|
||||||
if(availableRS232(self)){
|
if(availableRS232(self)){
|
||||||
len = replylen;
|
len = replylen;
|
||||||
readRS232TillTerm(self,reply,&len);
|
readRS232TillTerm(self,reply,&len);
|
||||||
}
|
}
|
||||||
return transactRS232(self,send,sendLen,reply,replylen);
|
status = transactRS232(self,send,sendLen,reply,replylen);
|
||||||
|
if(status >= 1){
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return status;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
return 0; /* not reached */
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------
|
/*-------------------------------------------------------------------
|
||||||
If we get an empty reply when we expect some response data, then, maybe,
|
If we get an empty reply when we expect some response data, then, maybe,
|
||||||
@ -272,12 +276,26 @@ static int decodeMSR(pEL734Driv self, int msr){
|
|||||||
*/
|
*/
|
||||||
if(msr & 0x80){
|
if(msr & 0x80){
|
||||||
self->runCount++;
|
self->runCount++;
|
||||||
|
}else if(msr & 0x20){
|
||||||
|
self->errorCode = HILIM;
|
||||||
|
return HWFault;
|
||||||
|
}else if(msr & 0x10){
|
||||||
|
self->errorCode = LOWLIM;
|
||||||
|
return HWFault;
|
||||||
|
}else if(msr & 0x1000){
|
||||||
|
self->errorCode = BADCUSHION;
|
||||||
|
return HWFault;
|
||||||
|
}else if(msr & 0x40){
|
||||||
|
self->errorCode = BADSTP;
|
||||||
|
return HWFault;
|
||||||
} else if(msr & 0x200) {
|
} else if(msr & 0x200) {
|
||||||
self->posCount++;
|
self->posCount++;
|
||||||
} else if(msr & 0x100) {
|
} else if(msr & 0x100) {
|
||||||
self->posCount++;
|
self->errorCode = POSFAULT;
|
||||||
|
return HWFault;
|
||||||
} else if(msr & 0x400) {
|
} else if(msr & 0x400) {
|
||||||
self->posCount++;
|
self->errorCode = POSFAULT;
|
||||||
|
return HWFault;
|
||||||
}
|
}
|
||||||
|
|
||||||
return HWBusy;
|
return HWBusy;
|
||||||
@ -521,6 +539,11 @@ static int EL734SetPar(void *pData, SConnection *pCon,
|
|||||||
}
|
}
|
||||||
self->fLower = newValue;
|
self->fLower = newValue;
|
||||||
snprintf(pCommand,79,"H %d %8.3f %8.3f\r",self->iMotor,self->fLower, self->fUpper);
|
snprintf(pCommand,79,"H %d %8.3f %8.3f\r",self->iMotor,self->fLower, self->fUpper);
|
||||||
|
} else if(strcmp(name,"forcepos") == 0){
|
||||||
|
if(!SCMatchRights(pCon,usMugger)){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
snprintf(pCommand,79,"U %d %8.3f\r",self->iMotor,newValue);
|
||||||
}
|
}
|
||||||
if(strlen(pCommand) > 1){
|
if(strlen(pCommand) > 1){
|
||||||
status = transactEL734(self->controller,pCommand,strlen(pCommand),
|
status = transactEL734(self->controller,pCommand,strlen(pCommand),
|
||||||
|
5
nxamor.c
5
nxamor.c
@ -32,7 +32,7 @@
|
|||||||
#include "amor2t.h"
|
#include "amor2t.h"
|
||||||
|
|
||||||
/* some defines for some names */
|
/* some defines for some names */
|
||||||
#define AMORDICT "/home/amor/amor_sics/amor.dic"
|
static char AMORDICT[1024] = "/home/amor/amor_sics/amor.dic";
|
||||||
#define INSTNAME "AMOR at SINQ, PSI"
|
#define INSTNAME "AMOR at SINQ, PSI"
|
||||||
#define SOURCENAME "Spallation source SINQ"
|
#define SOURCENAME "Spallation source SINQ"
|
||||||
#define SOURCETYPE "Continous flux spallation source"
|
#define SOURCETYPE "Continous flux spallation source"
|
||||||
@ -809,6 +809,9 @@ static int WriteTOFDetector(char *name, pHistMem pHM, int *iDim,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
pAmor = (pAmor2T)pCom->pData;
|
pAmor = (pAmor2T)pCom->pData;
|
||||||
|
if(argc > 3) {
|
||||||
|
strncpy(AMORDICT,argv[3],1023);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* install command */
|
/* install command */
|
||||||
|
10
slsmagnet.c
10
slsmagnet.c
@ -11,6 +11,8 @@
|
|||||||
115KB when using this device.
|
115KB when using this device.
|
||||||
|
|
||||||
Mark Koennecke, October 2001
|
Mark Koennecke, October 2001
|
||||||
|
|
||||||
|
Adaptiert auf neue DSP Software version, Mark Koennecke, August 2005
|
||||||
|
|
||||||
Copyright: see copyright.h
|
Copyright: see copyright.h
|
||||||
----------------------------------------------------------------------------*/
|
----------------------------------------------------------------------------*/
|
||||||
@ -161,7 +163,10 @@ static int communicateSLS(mkChannel *pSock, char msg[6], char reply[6])
|
|||||||
assert(pMe);
|
assert(pMe);
|
||||||
|
|
||||||
msg[0] = DSPREAD; /* read request */
|
msg[0] = DSPREAD; /* read request */
|
||||||
msg[1] = 0x92; /* address of mag current */
|
/* old address of mag current
|
||||||
|
msg[1] = 0x92;
|
||||||
|
*/
|
||||||
|
msg[1] = 0x9c; /* address of mag current */
|
||||||
iRet = communicateSLS(pMe->pSock,msg,reply);
|
iRet = communicateSLS(pMe->pSock,msg,reply);
|
||||||
if(iRet < 0)
|
if(iRet < 0)
|
||||||
{
|
{
|
||||||
@ -267,7 +272,10 @@ static int communicateSLS(mkChannel *pSock, char msg[6], char reply[6])
|
|||||||
try to switch device on
|
try to switch device on
|
||||||
*/
|
*/
|
||||||
msg[0] = DSPWRITE;
|
msg[0] = DSPWRITE;
|
||||||
|
/* old device on
|
||||||
msg[1] = 0x31;
|
msg[1] = 0x31;
|
||||||
|
*/
|
||||||
|
msg[1] = 0x3c;
|
||||||
ival = 1;
|
ival = 1;
|
||||||
memcpy(msg+2, &ival,4);
|
memcpy(msg+2, &ival,4);
|
||||||
iRet = communicateSLS(pMe->pSock,msg,reply);
|
iRet = communicateSLS(pMe->pSock,msg,reply);
|
||||||
|
13
sps.c
13
sps.c
@ -62,6 +62,7 @@
|
|||||||
/* configure terminators */
|
/* configure terminators */
|
||||||
SerialATerm(&self->pData, "1\r\n");
|
SerialATerm(&self->pData, "1\r\n");
|
||||||
SerialSendTerm(&self->pData,"\r\n");
|
SerialSendTerm(&self->pData,"\r\n");
|
||||||
|
SerialConfig(&self->pData,5000);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -207,8 +208,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* decode the reply into the Byte array */
|
/* decode the reply into the Byte array */
|
||||||
pPtr = pBueffel;
|
pPtr = strchr(pBueffel,'R');
|
||||||
if(*pPtr != 'R')
|
if(pPtr == NULL)
|
||||||
{
|
{
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
@ -300,8 +301,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* decode the reply into the Byte array */
|
/* decode the reply into the Byte array */
|
||||||
pPtr = pBueffel;
|
pPtr = strchr(pBueffel,'R');
|
||||||
if(*pPtr != 'R')
|
if(pPtr == NULL)
|
||||||
{
|
{
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
@ -402,8 +403,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* decode the result */
|
/* decode the result */
|
||||||
pPtr = pBueffel;
|
pPtr = strchr(pBueffel,'A');
|
||||||
if(*pPtr != 'A') /* a silly answer was returned */
|
if(pPtr == NULL) /* a silly answer was returned */
|
||||||
{
|
{
|
||||||
SICSLogWrite("SPS: Silly answer in SPSGetADC",eError);
|
SICSLogWrite("SPS: Silly answer in SPSGetADC",eError);
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user