- Fixed prolem wit core dump from commandlog
- Added fulltransact which sends a TRANSACTIONSTART meesage in addition to TRANSASCTIONFINISHED - Added parameter to motor which allows to ignore positioning faults - ADDED POLAN support to tasscan SKIPPED: psi/dornier2.c psi/el734hp.c psi/tasdrive.c psi/tasscan.c psi/tdchm.c
This commit is contained in:
@ -162,7 +162,7 @@
|
|||||||
for(i = 0; i < iNum; i++)
|
for(i = 0; i < iNum; i++)
|
||||||
{
|
{
|
||||||
pPtr = (char *)getCircular(pTail);
|
pPtr = (char *)getCircular(pTail);
|
||||||
if(pCon->pSock)
|
if(pCon->pSock && pPtr != NULL)
|
||||||
{
|
{
|
||||||
TelnetWrite(pCon->pSock, pPtr);
|
TelnetWrite(pCon->pSock, pPtr);
|
||||||
}
|
}
|
||||||
|
7
conman.c
7
conman.c
@ -545,6 +545,13 @@ extern pServer pServ;
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
Do not die if no data
|
||||||
|
*/
|
||||||
|
if(pBuffer == NULL)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return self->write(self,pBuffer,iOut);
|
return self->write(self,pBuffer,iOut);
|
||||||
}
|
}
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
1
drive.c
1
drive.c
@ -6,7 +6,6 @@
|
|||||||
|
|
||||||
Mark Koennecke, December 1996
|
Mark Koennecke, December 1996
|
||||||
|
|
||||||
Copyright:
|
|
||||||
|
|
||||||
Labor fuer Neutronenstreuung
|
Labor fuer Neutronenstreuung
|
||||||
Paul Scherrer Institut
|
Paul Scherrer Institut
|
||||||
|
7
macro.c
7
macro.c
@ -864,10 +864,15 @@
|
|||||||
int TransactAction(SConnection *pCon, SicsInterp *pSics, void *pData,
|
int TransactAction(SConnection *pCon, SicsInterp *pSics, void *pData,
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
char pCommand[1024];
|
char pCommand[1024], pStart[1024];
|
||||||
int iRet;
|
int iRet;
|
||||||
|
|
||||||
Arg2Text(argc-1,&argv[1],pCommand,1023);
|
Arg2Text(argc-1,&argv[1],pCommand,1023);
|
||||||
|
strtolower(argv[0]);
|
||||||
|
if(strcmp(argv[0],"fulltransact") == 0){
|
||||||
|
snprintf(pStart,1024,"TRANSACTIONSTART %s",pCommand);
|
||||||
|
SCWrite(pCon,pStart,eError);
|
||||||
|
}
|
||||||
iRet = InterpExecute(pSics,pCon,pCommand);
|
iRet = InterpExecute(pSics,pCon,pCommand);
|
||||||
SicsWait(1);
|
SicsWait(1);
|
||||||
SCWrite(pCon,"TRANSACTIONFINISHED",eError);
|
SCWrite(pCon,"TRANSACTIONFINISHED",eError);
|
||||||
|
178
motor.c
178
motor.c
@ -75,6 +75,7 @@
|
|||||||
#define SIGN 10
|
#define SIGN 10
|
||||||
#define ECOUNT 11
|
#define ECOUNT 11
|
||||||
#define POSCOUNT 12
|
#define POSCOUNT 12
|
||||||
|
#define IGNOREFAULT 13
|
||||||
/*------------------------------------------------------------------------
|
/*------------------------------------------------------------------------
|
||||||
a tiny structure used in CallBack work
|
a tiny structure used in CallBack work
|
||||||
*/
|
*/
|
||||||
@ -223,8 +224,18 @@ static int evaluateStatus(pMotor self, SConnection *pCon)
|
|||||||
SCWrite(pCon,pBueffel, eWarning);
|
SCWrite(pCon,pBueffel, eWarning);
|
||||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
||||||
self->retryCount = 0;
|
self->retryCount = 0;
|
||||||
|
/*
|
||||||
|
suppress HWPosFaults when ignore flag set
|
||||||
|
*/
|
||||||
|
if(ObVal(self->ParArray,IGNOREFAULT) > 0)
|
||||||
|
{
|
||||||
|
return HWIdle;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return HWPosFault;
|
return HWPosFault;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
self->retryCount = 0;
|
self->retryCount = 0;
|
||||||
return HWIdle;
|
return HWIdle;
|
||||||
}
|
}
|
||||||
@ -273,13 +284,27 @@ static int evaluateStatus(pMotor self, SConnection *pCon)
|
|||||||
}
|
}
|
||||||
else if(iRet == MOTREDO)
|
else if(iRet == MOTREDO)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
abort if to many positioning faults
|
||||||
|
*/
|
||||||
self->posFaultCount++;
|
self->posFaultCount++;
|
||||||
if(self->posFaultCount >= 4)
|
if(self->posFaultCount >= 4)
|
||||||
{
|
{
|
||||||
self->posFaultCount = 0;
|
self->posFaultCount = 0;
|
||||||
self->retryCount = 0;
|
self->retryCount = 0;
|
||||||
|
/*
|
||||||
|
do not do pass on positioning fault errors when the
|
||||||
|
appropriate flag has been set
|
||||||
|
*/
|
||||||
|
if(ObVal(self->ParArray,IGNOREFAULT) > 0)
|
||||||
|
{
|
||||||
|
return HWIdle;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return HWPosFault;
|
return HWPosFault;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
||||||
return HWBusy;
|
return HWBusy;
|
||||||
}
|
}
|
||||||
@ -328,147 +353,6 @@ static void handleMoveCallback(pMotor self, SConnection *pCon)
|
|||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
/*--------------------------------------------------------------------------
|
|
||||||
Refactor
|
|
||||||
--------------------------------------------------------------------------*/
|
|
||||||
static int MotorStatus2(void *sulf, SConnection *pCon)
|
|
||||||
{
|
|
||||||
float fHard;
|
|
||||||
pMotor self;
|
|
||||||
int iRet,i, iCode;
|
|
||||||
char pError[132];
|
|
||||||
char pBueffel[256];
|
|
||||||
static int iPosFault = 0, iRetry = 0;
|
|
||||||
MotCallback sCall;
|
|
||||||
|
|
||||||
|
|
||||||
assert(sulf);
|
|
||||||
|
|
||||||
self = (pMotor)sulf;
|
|
||||||
|
|
||||||
iRet = self->pDriver->GetStatus(self->pDriver);
|
|
||||||
fHard = MotorGetValue((void *)self,pCon);
|
|
||||||
if(fHard < -9999990)
|
|
||||||
{
|
|
||||||
self->pDriver->GetError(self->pDriver,&iCode, pError,131);
|
|
||||||
iRet = self->pDriver->TryAndFixIt(self->pDriver,iCode, self->fTarget);
|
|
||||||
if(iRet == MOTFAIL)
|
|
||||||
{
|
|
||||||
sprintf(pBueffel,"WARNING: %s on %s",pError,self->name);
|
|
||||||
SCWrite(pCon,pBueffel,eError);
|
|
||||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
|
||||||
iRetry = 0;
|
|
||||||
return HWFault;
|
|
||||||
}
|
|
||||||
else if(iRet == MOTREDO)
|
|
||||||
{
|
|
||||||
iRetry++;
|
|
||||||
if(iRetry >= 3)
|
|
||||||
{
|
|
||||||
iRetry = 0;
|
|
||||||
return HWFault;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iRetry = 0;
|
|
||||||
return HWBusy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* invoke callback */
|
|
||||||
sCall.fVal = fHard;
|
|
||||||
sCall.pName = self->name;
|
|
||||||
InvokeCallBack(self->pCall, MOTDRIVE, &sCall);
|
|
||||||
|
|
||||||
/* motor thinks he is done */
|
|
||||||
if( (iRet == OKOK) || (iRet == HWIdle))
|
|
||||||
{
|
|
||||||
MotorGetSoftPosition(self,pCon,&sCall.fVal);
|
|
||||||
InvokeCallBack(self->pCall, MOTEND, &sCall);
|
|
||||||
self->fPosition = fHard;
|
|
||||||
if(absf(fHard - self->fTarget) > ObVal(self->ParArray,PREC))
|
|
||||||
{
|
|
||||||
sprintf(pBueffel,"WARNING: %s off position by %f",
|
|
||||||
self->name, absf(fHard - self->fTarget));
|
|
||||||
SCWrite(pCon,pBueffel, eWarning);
|
|
||||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
|
||||||
iRetry = 0;
|
|
||||||
return HWPosFault;
|
|
||||||
}
|
|
||||||
iRetry = 0;
|
|
||||||
return HWIdle;
|
|
||||||
}
|
|
||||||
/* motor suggests a fault */
|
|
||||||
else if(iRet == HWFault)
|
|
||||||
{
|
|
||||||
self->pDriver->GetError(self->pDriver,&iCode, pError,131);
|
|
||||||
iRet = self->pDriver->TryAndFixIt(self->pDriver,iCode, self->fTarget);
|
|
||||||
if(iRet == MOTFAIL)
|
|
||||||
{
|
|
||||||
sprintf(pBueffel,"ERROR: %s on %s",pError,self->name);
|
|
||||||
SCWrite(pCon,pBueffel,eError);
|
|
||||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
|
||||||
iRetry = 0;
|
|
||||||
return HWFault;
|
|
||||||
}
|
|
||||||
else if(iRet == MOTREDO)
|
|
||||||
{
|
|
||||||
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
|
||||||
iRetry++;
|
|
||||||
if(iRetry >= 3)
|
|
||||||
{
|
|
||||||
iRetry = 0;
|
|
||||||
return HWFault;
|
|
||||||
}
|
|
||||||
return HWBusy;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iRetry = 0;
|
|
||||||
return HWBusy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* a positioning fault */
|
|
||||||
else if(iRet == HWPosFault)
|
|
||||||
{
|
|
||||||
self->pDriver->GetError(self->pDriver,&iCode, pError,131);
|
|
||||||
iRet = self->pDriver->TryAndFixIt(self->pDriver,iCode, self->fTarget);
|
|
||||||
if(iRet == MOTFAIL)
|
|
||||||
{
|
|
||||||
sprintf(pBueffel,"ERROR: %s on %s",pError,self->name);
|
|
||||||
SCWrite(pCon,pBueffel,eError);
|
|
||||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
|
||||||
iRetry = 0;
|
|
||||||
return HWFault;
|
|
||||||
}
|
|
||||||
else if(iRet == MOTREDO)
|
|
||||||
{
|
|
||||||
iPosFault++;
|
|
||||||
if(iPosFault == 2)
|
|
||||||
{
|
|
||||||
iPosFault = 0;
|
|
||||||
iRetry = 0;
|
|
||||||
return HWPosFault;
|
|
||||||
}
|
|
||||||
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
|
||||||
return HWBusy;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return HWBusy;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(iRet == HWWarn)
|
|
||||||
{
|
|
||||||
self->pDriver->GetError(self->pDriver,&iCode,pError,131);
|
|
||||||
sprintf(pBueffel,"WARNING: %s on %s",pError,self->name);
|
|
||||||
SCWrite(pCon,pBueffel,eStatus);
|
|
||||||
return HWIdle;
|
|
||||||
}
|
|
||||||
iRetry = 0;
|
|
||||||
return iRet;
|
|
||||||
}
|
|
||||||
/*---------------------------------------------------------------------------*/ pMotor MotorInit(char *drivername, char *name, MotorDriver *pDriv)
|
/*---------------------------------------------------------------------------*/ pMotor MotorInit(char *drivername, char *name, MotorDriver *pDriv)
|
||||||
{
|
{
|
||||||
pMotor pM = NULL;
|
pMotor pM = NULL;
|
||||||
@ -486,7 +370,7 @@ static void handleMoveCallback(pMotor self, SConnection *pCon)
|
|||||||
|
|
||||||
|
|
||||||
/* create and initialize parameters */
|
/* create and initialize parameters */
|
||||||
pM->ParArray = ObParCreate(13);
|
pM->ParArray = ObParCreate(14);
|
||||||
if(!pM->ParArray)
|
if(!pM->ParArray)
|
||||||
{
|
{
|
||||||
free(pM);
|
free(pM);
|
||||||
@ -505,6 +389,7 @@ static void handleMoveCallback(pMotor self, SConnection *pCon)
|
|||||||
ObParInit(pM->ParArray,SIGN,"sign",1.0,usMugger);
|
ObParInit(pM->ParArray,SIGN,"sign",1.0,usMugger);
|
||||||
ObParInit(pM->ParArray,ECOUNT,"failafter",3.0,usMugger);
|
ObParInit(pM->ParArray,ECOUNT,"failafter",3.0,usMugger);
|
||||||
ObParInit(pM->ParArray,POSCOUNT,"poscount",20.0,usMugger);
|
ObParInit(pM->ParArray,POSCOUNT,"poscount",20.0,usMugger);
|
||||||
|
ObParInit(pM->ParArray,IGNOREFAULT,"ignorefault",0.0,usMugger);
|
||||||
pDriv->GetPosition(pDriv,&(pM->fPosition));
|
pDriv->GetPosition(pDriv,&(pM->fPosition));
|
||||||
pM->fTarget = pM->fPosition;
|
pM->fTarget = pM->fPosition;
|
||||||
pM->endScriptID = 0;
|
pM->endScriptID = 0;
|
||||||
@ -813,6 +698,15 @@ extern void KillPiPiezo(void *pData);
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* check if the bad motor flag is set */
|
||||||
|
if((int)ObVal(self->ParArray,IGNOREFAULT) > 0)
|
||||||
|
{
|
||||||
|
snprintf(pBueffel,511,"WARNING: motor %s is unreliable",
|
||||||
|
self->name);
|
||||||
|
SCWrite(pCon,pBueffel,eWarning);
|
||||||
|
self->pDrivInt->iErrorCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* check our error count and interrupt if to much */
|
/* check our error count and interrupt if to much */
|
||||||
iCode = (int)ObVal(self->ParArray,ECOUNT);
|
iCode = (int)ObVal(self->ParArray,ECOUNT);
|
||||||
if(self->pDrivInt->iErrorCount > iCode)
|
if(self->pDrivInt->iErrorCount > iCode)
|
||||||
|
1
ofac.c
1
ofac.c
@ -196,6 +196,7 @@
|
|||||||
AddCommand(pInter,"ClientPut",ClientPut,NULL,NULL);
|
AddCommand(pInter,"ClientPut",ClientPut,NULL,NULL);
|
||||||
AddCommand(pInter,"broadcast",Broadcast,NULL,NULL);
|
AddCommand(pInter,"broadcast",Broadcast,NULL,NULL);
|
||||||
AddCommand(pInter,"transact",TransactAction,NULL,NULL);
|
AddCommand(pInter,"transact",TransactAction,NULL,NULL);
|
||||||
|
AddCommand(pInter,"fulltransact",TransactAction,NULL,NULL);
|
||||||
AddCommand(pInter,"sicsprompt", SicsPrompt,NULL,NULL);
|
AddCommand(pInter,"sicsprompt", SicsPrompt,NULL,NULL);
|
||||||
AddCommand(pInter,"Publish",TclPublish,NULL,NULL);
|
AddCommand(pInter,"Publish",TclPublish,NULL,NULL);
|
||||||
AddCommand(pInter,"GetLog", LogCapture,NULL,NULL);
|
AddCommand(pInter,"GetLog", LogCapture,NULL,NULL);
|
||||||
|
Reference in New Issue
Block a user