PSI sics-cvs-psi-complete-tree-post-site-support
This commit is contained in:
459
motor.c
459
motor.c
@@ -10,13 +10,10 @@
|
||||
endscript facility added: Mark Koennecke, August 2002
|
||||
Modified to support driver parameters, Mark Koennecke, January 2003
|
||||
|
||||
TODO: currently motor drivers have to be installed in MakeMotor
|
||||
and remembered in KillMotor. Sort this some day!
|
||||
|
||||
Copyright:
|
||||
|
||||
Labor fuer Neutronenstreuung
|
||||
Paul Scherrer Institut
|
||||
Paul Scherrer Institut
|
||||
CH-5423 Villigen-PSI
|
||||
|
||||
|
||||
@@ -55,8 +52,7 @@
|
||||
#include "splitter.h"
|
||||
#include "status.h"
|
||||
#include "servlog.h"
|
||||
#include "ecbdriv.h"
|
||||
|
||||
#include "site.h"
|
||||
/*-------------------------------------------------------------------------
|
||||
some lokal defines
|
||||
*/
|
||||
@@ -78,6 +74,8 @@
|
||||
#define SPEED 9
|
||||
#define SIGN 10
|
||||
#define ECOUNT 11
|
||||
#define POSCOUNT 12
|
||||
#define IGNOREFAULT 13
|
||||
/*------------------------------------------------------------------------
|
||||
a tiny structure used in CallBack work
|
||||
*/
|
||||
@@ -177,6 +175,9 @@
|
||||
fputs(pBueffel,fd);
|
||||
sprintf(pBueffel,"%s AccessCode %f\n",name,ObVal(self->ParArray,USRIGHTS));
|
||||
fputs(pBueffel,fd);
|
||||
sprintf(pBueffel,"%s poscount %f\n",name,
|
||||
ObVal(self->ParArray,POSCOUNT));
|
||||
fputs(pBueffel,fd);
|
||||
return 1;
|
||||
}
|
||||
/*-------------------------------------------------------------------------*/
|
||||
@@ -199,77 +200,181 @@
|
||||
SCSetInterrupt(pCon,iVal);
|
||||
}
|
||||
}
|
||||
/*--------------------------------------------------------------------------
|
||||
Refactor
|
||||
--------------------------------------------------------------------------*/
|
||||
static int MotorStatus(void *sulf, SConnection *pCon)
|
||||
/*---------------------------------------------------------------------*/
|
||||
static int statusRunTo(pMotor self, SConnection *pCon)
|
||||
{
|
||||
char pBueffel[256];
|
||||
|
||||
if(self->retryCount >= ObVal(self->ParArray,POSCOUNT))
|
||||
{
|
||||
float fHard;
|
||||
pMotor self;
|
||||
int iRet,i, iCode;
|
||||
static int iRetry = 0;
|
||||
char pError[132];
|
||||
char pBueffel[256];
|
||||
static int iPosFault = 0;
|
||||
MotCallback sCall;
|
||||
|
||||
|
||||
assert(sulf);
|
||||
|
||||
self = (pMotor)sulf;
|
||||
snprintf(pBueffel,255,"ERROR: aborting motor %s after %d retries",
|
||||
self->name, (int)ObVal(self->ParArray,POSCOUNT));
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return HWFault;
|
||||
}
|
||||
self->retryCount++;
|
||||
snprintf(pBueffel,255,"WARNING: restarting %s, %d time",
|
||||
self->name,self->retryCount);
|
||||
SCWrite(pCon,pBueffel,eWarning);
|
||||
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
||||
return HWBusy;
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
static int checkPosition(pMotor self, SConnection *pCon)
|
||||
{
|
||||
float fHard;
|
||||
char pBueffel[132];
|
||||
int status;
|
||||
|
||||
iRet = self->pDriver->GetStatus(self->pDriver);
|
||||
fHard = MotorGetValue((void *)self,pCon);
|
||||
if(fHard < -9999990)
|
||||
MotorGetHardPosition(self,pCon,&fHard);
|
||||
self->fPosition = fHard;
|
||||
if(absf(fHard - self->fTarget) > ObVal(self->ParArray,PREC))
|
||||
{
|
||||
if(SCGetInterrupt(pCon) != eContinue)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
return HWFault;
|
||||
}
|
||||
snprintf(pBueffel,131,"WARNING: %s off position by %f",
|
||||
self->name, absf(fHard - self->fTarget));
|
||||
SCWrite(pCon,pBueffel, eWarning);
|
||||
status = statusRunTo(self,pCon);
|
||||
return status;
|
||||
}
|
||||
return HWIdle;
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
static void finishDriving(pMotor self, SConnection *pCon)
|
||||
{
|
||||
MotCallback sCall;
|
||||
MotorGetSoftPosition(self,pCon,&sCall.fVal);
|
||||
sCall.pName = self->name;
|
||||
InvokeCallBack(self->pCall, MOTEND, &sCall);
|
||||
}
|
||||
/*--------------------------------------------------------------------*/
|
||||
static int reportAndFixError(pMotor self, SConnection *pCon)
|
||||
{
|
||||
char pBueffel[256], pError[131];
|
||||
int iCode, iRet, newStatus;
|
||||
|
||||
/* 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;
|
||||
self->pDriver->GetError(self->pDriver,&iCode, pError,131);
|
||||
iRet = self->pDriver->TryAndFixIt(self->pDriver,iCode, self->fTarget);
|
||||
switch(iRet)
|
||||
{
|
||||
case MOTFAIL:
|
||||
snprintf(pBueffel,255,"ERROR: %s on %s",pError,self->name);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
newStatus = HWFault;
|
||||
break;
|
||||
case MOTREDO:
|
||||
newStatus = statusRunTo(self,pCon);
|
||||
break;
|
||||
case MOTOK:
|
||||
newStatus = HWIdle;
|
||||
break;
|
||||
default:
|
||||
SCWrite(pCon,"WARNING: bad status code in motor.c:reportAndFixError",
|
||||
eWarning);
|
||||
SCWrite(pCon,"You may continue, but show this to a SICS programmer",
|
||||
eWarning);
|
||||
newStatus = HWIdle;
|
||||
break;
|
||||
}
|
||||
return newStatus;
|
||||
}
|
||||
/*---------------------------------------------------------------------
|
||||
New version, refactored October 2003
|
||||
-----------------------------------------------------------------------*/
|
||||
static int evaluateStatus(pMotor self, SConnection *pCon)
|
||||
{
|
||||
int iRet, iCode, newStatus;
|
||||
MotCallback sCall;
|
||||
char pBueffel[256], pError[132];
|
||||
float fHard;
|
||||
|
||||
iRet = self->pDriver->GetStatus(self->pDriver);
|
||||
newStatus = iRet;
|
||||
switch(iRet)
|
||||
{
|
||||
case OKOK:
|
||||
case HWIdle:
|
||||
newStatus = checkPosition(self,pCon);
|
||||
if(newStatus != HWBusy)
|
||||
{
|
||||
finishDriving(self,pCon);
|
||||
}
|
||||
break;
|
||||
case HWFault:
|
||||
newStatus = reportAndFixError(self,pCon);
|
||||
break;
|
||||
case HWPosFault:
|
||||
newStatus = reportAndFixError(self,pCon);
|
||||
if(newStatus == HWFault && ObVal(self->ParArray,IGNOREFAULT) < 1)
|
||||
{
|
||||
newStatus = HWPosFault;
|
||||
}
|
||||
break;
|
||||
case HWBusy:
|
||||
newStatus = HWBusy;
|
||||
break;
|
||||
case HWWarn:
|
||||
self->pDriver->GetError(self->pDriver,&iCode, pError,131);
|
||||
snprintf(pBueffel,255,"WARNING: motor reported: %s", pError);
|
||||
SCWrite(pCon,pBueffel,eWarning);
|
||||
newStatus = HWIdle;
|
||||
break;
|
||||
default:
|
||||
SCWrite(pCon,"WARNING: Bad status in motor.c:evaluatStatus",eWarning);
|
||||
SCWrite(pCon,"You may continue, but show this to a SICS programmer",
|
||||
eWarning);
|
||||
break;
|
||||
}
|
||||
if(newStatus == HWFault)
|
||||
{
|
||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
||||
self->retryCount = 0;
|
||||
}
|
||||
return newStatus;
|
||||
}
|
||||
/*-----------------------------------------------------------------------
|
||||
old version, kept for time being.
|
||||
----------------------------------------------------------------------*/
|
||||
static int eevaluateStatus(pMotor self, SConnection *pCon)
|
||||
{
|
||||
int iRet, iCode;
|
||||
MotCallback sCall;
|
||||
char pBueffel[256], pError[132];
|
||||
float fHard;
|
||||
|
||||
iRet = self->pDriver->GetStatus(self->pDriver);
|
||||
if( (iRet == OKOK) || (iRet == HWIdle))
|
||||
{
|
||||
MotorGetSoftPosition(self,pCon,&sCall.fVal);
|
||||
sCall.pName = self->name;
|
||||
InvokeCallBack(self->pCall, MOTEND, &sCall);
|
||||
|
||||
MotorGetHardPosition(self,pCon,&fHard);
|
||||
self->fPosition = fHard;
|
||||
if(absf(fHard - self->fTarget) > ObVal(self->ParArray,PREC))
|
||||
{
|
||||
snprintf(pBueffel,131,"WARNING: %s off position by %f",
|
||||
self->name, absf(fHard - self->fTarget));
|
||||
SCWrite(pCon,pBueffel, eWarning);
|
||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
||||
self->retryCount = 0;
|
||||
/*
|
||||
suppress HWPosFaults when ignore flag set
|
||||
*/
|
||||
if(ObVal(self->ParArray,IGNOREFAULT) > 0)
|
||||
{
|
||||
return HWIdle;
|
||||
}
|
||||
else
|
||||
{
|
||||
return HWPosFault;
|
||||
}
|
||||
}
|
||||
self->retryCount = 0;
|
||||
return HWIdle;
|
||||
}
|
||||
/* motor suggests a fault */
|
||||
else if(iRet == HWFault)
|
||||
@@ -278,50 +383,64 @@
|
||||
iRet = self->pDriver->TryAndFixIt(self->pDriver,iCode, self->fTarget);
|
||||
if(iRet == MOTFAIL)
|
||||
{
|
||||
sprintf(pBueffel,"ERROR: %s on %s",pError,self->name);
|
||||
snprintf(pBueffel,255,"ERROR: %s on %s",pError,self->name);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
||||
iRetry = 0;
|
||||
self->retryCount = 0;
|
||||
return HWFault;
|
||||
}
|
||||
else if(iRet == MOTREDO)
|
||||
{
|
||||
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
||||
iRetry++;
|
||||
if(iRetry >= 3)
|
||||
self->retryCount++;
|
||||
if(self->retryCount >= 3)
|
||||
{
|
||||
iRetry = 0;
|
||||
self->retryCount = 0;
|
||||
return HWFault;
|
||||
}
|
||||
return HWBusy;
|
||||
}
|
||||
else
|
||||
{
|
||||
iRetry = 0;
|
||||
self->retryCount = 0;
|
||||
return HWBusy;
|
||||
}
|
||||
}
|
||||
/* a positioning fault */
|
||||
/* 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);
|
||||
snprintf(pBueffel,255,"ERROR: %s on %s",pError,self->name);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
MotorInterrupt(pCon,ObVal(self->ParArray,INT));
|
||||
iRetry = 0;
|
||||
self->retryCount = 0;
|
||||
return HWFault;
|
||||
}
|
||||
else if(iRet == MOTREDO)
|
||||
{
|
||||
iPosFault++;
|
||||
if(iPosFault == 2)
|
||||
/*
|
||||
abort if to many positioning faults
|
||||
*/
|
||||
self->posFaultCount++;
|
||||
if(self->posFaultCount >= 4)
|
||||
{
|
||||
iPosFault = 0;
|
||||
iRetry = 0;
|
||||
return HWPosFault;
|
||||
self->posFaultCount = 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;
|
||||
}
|
||||
}
|
||||
self->pDriver->RunTo(self->pDriver,self->fTarget);
|
||||
return HWBusy;
|
||||
@@ -334,12 +453,42 @@
|
||||
else if(iRet == HWWarn)
|
||||
{
|
||||
self->pDriver->GetError(self->pDriver,&iCode,pError,131);
|
||||
sprintf(pBueffel,"WARNING: %s on %s",pError,self->name);
|
||||
snprintf(pBueffel,255,"WARNING: %s on %s",pError,self->name);
|
||||
SCWrite(pCon,pBueffel,eStatus);
|
||||
return HWIdle;
|
||||
}
|
||||
iRetry = 0;
|
||||
self->retryCount = 0;
|
||||
return iRet;
|
||||
}
|
||||
/*---------------------------------------------------------------------*/
|
||||
static void handleMoveCallback(pMotor self, SConnection *pCon)
|
||||
{
|
||||
MotCallback sCall;
|
||||
|
||||
self->posCount++;
|
||||
if(self->posCount >= ObVal(self->ParArray,POSCOUNT))
|
||||
{
|
||||
MotorGetSoftPosition(self,pCon,&sCall.fVal);
|
||||
sCall.pName = self->name;
|
||||
InvokeCallBack(self->pCall, MOTDRIVE, &sCall);
|
||||
self->posCount = 0;
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------------------*/
|
||||
static int MotorStatus(void *sulf, SConnection *pCon)
|
||||
{
|
||||
pMotor self = NULL;
|
||||
int status;
|
||||
|
||||
assert(sulf);
|
||||
self = (pMotor)sulf;
|
||||
|
||||
status = evaluateStatus(self,pCon);
|
||||
if(status == HWBusy)
|
||||
{
|
||||
handleMoveCallback(self,pCon);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
/*---------------------------------------------------------------------------*/ pMotor MotorInit(char *drivername, char *name, MotorDriver *pDriv)
|
||||
{
|
||||
@@ -358,7 +507,7 @@
|
||||
|
||||
|
||||
/* create and initialize parameters */
|
||||
pM->ParArray = ObParCreate(12);
|
||||
pM->ParArray = ObParCreate(14);
|
||||
if(!pM->ParArray)
|
||||
{
|
||||
free(pM);
|
||||
@@ -376,6 +525,8 @@
|
||||
ObParInit(pM->ParArray,SPEED,"speed",0.02,usInternal);
|
||||
ObParInit(pM->ParArray,SIGN,"sign",1.0,usMugger);
|
||||
ObParInit(pM->ParArray,ECOUNT,"failafter",3.0,usMugger);
|
||||
ObParInit(pM->ParArray,POSCOUNT,"maxretry",3.0,usMugger);
|
||||
ObParInit(pM->ParArray,IGNOREFAULT,"ignorefault",0.0,usMugger);
|
||||
pDriv->GetPosition(pDriv,&(pM->fPosition));
|
||||
pM->fTarget = pM->fPosition;
|
||||
pM->endScriptID = 0;
|
||||
@@ -449,26 +600,15 @@ extern void KillPiPiezo(void *pData);
|
||||
|
||||
/* kill driver */
|
||||
if(pM->drivername)
|
||||
{ /* edit here to include more drivers */
|
||||
if(strcmp(pM->drivername,"EL734") == 0)
|
||||
{
|
||||
KillEL734((void *)pM->pDriver);
|
||||
}
|
||||
else if(strcmp(pM->drivername,"EL734DC") == 0)
|
||||
{
|
||||
KillEL734((void *)pM->pDriver);
|
||||
}
|
||||
else if(strcmp(pM->drivername,"SIM") == 0)
|
||||
{
|
||||
if(pM->pDriver->KillPrivate != NULL)
|
||||
{
|
||||
KillSIM((void *)pM->pDriver);
|
||||
}
|
||||
else if(strcmp(pM->drivername,"PIPIEZO") == 0)
|
||||
{
|
||||
KillPiPiezo((void *)pM->pDriver);
|
||||
}
|
||||
else if(strcmp(pM->drivername,"ECB") == 0)
|
||||
{
|
||||
KillECBMotor( (void *)pM->pDriver);
|
||||
pM->pDriver->KillPrivate(pM->pDriver);
|
||||
if(pM->pDriver->name != NULL)
|
||||
{
|
||||
free(pM->pDriver->name);
|
||||
}
|
||||
free(pM->pDriver);
|
||||
}
|
||||
free(pM->drivername);
|
||||
}
|
||||
@@ -695,6 +835,15 @@ extern void KillPiPiezo(void *pData);
|
||||
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 */
|
||||
iCode = (int)ObVal(self->ParArray,ECOUNT);
|
||||
if(self->pDrivInt->iErrorCount > iCode)
|
||||
@@ -711,6 +860,8 @@ extern void KillPiPiezo(void *pData);
|
||||
}
|
||||
|
||||
/* Boundaries OK, send command */
|
||||
self->posFaultCount = 0;
|
||||
self->retryCount = 0;
|
||||
self->fTarget = fHard;
|
||||
iRet = self->pDriver->RunTo(self->pDriver,fHard);
|
||||
if(iRet != OKOK)
|
||||
@@ -888,7 +1039,8 @@ extern MotorDriver *MakePiPiezo(Tcl_Interp *pTcl, char *pArray);
|
||||
char pBueffel[512];
|
||||
int iD, iRet;
|
||||
Tcl_Interp *pTcl = (Tcl_Interp *)pSics->pTcl;
|
||||
|
||||
pSite site = NULL;
|
||||
|
||||
assert(pCon);
|
||||
assert(pSics);
|
||||
|
||||
@@ -902,58 +1054,7 @@ extern MotorDriver *MakePiPiezo(Tcl_Interp *pTcl, char *pArray);
|
||||
/* create the driver */
|
||||
strtolower(argv[2]);
|
||||
strtolower(argv[1]);
|
||||
if(strcmp(argv[2],"el734") == 0)
|
||||
{
|
||||
iD = argc - 3;
|
||||
pDriver = CreateEL734(pCon,iD,&argv[3]);
|
||||
if(!pDriver)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
/* create the motor */
|
||||
pNew = MotorInit("EL734",argv[1],pDriver);
|
||||
if(!pNew)
|
||||
{
|
||||
sprintf(pBueffel,"Failure to create motor %s",argv[1]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(strcmp(argv[2],"ecb") == 0)
|
||||
{
|
||||
iD = argc - 3;
|
||||
pDriver = CreateECBMotor(pCon,iD,&argv[3]);
|
||||
if(!pDriver)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
/* create the motor */
|
||||
pNew = MotorInit("ECB",argv[1],pDriver);
|
||||
if(!pNew)
|
||||
{
|
||||
sprintf(pBueffel,"Failure to create motor %s",argv[1]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if(strcmp(argv[2],"el734dc") == 0)
|
||||
{
|
||||
iD = argc - 3;
|
||||
pDriver = CreateEL734DC(pCon,iD,&argv[3]);
|
||||
if(!pDriver)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
/* create the motor */
|
||||
pNew = MotorInit("EL734DC",argv[1],pDriver);
|
||||
if(!pNew)
|
||||
{
|
||||
sprintf(pBueffel,"Failure to create motor %s",argv[1]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if (strcmp(argv[2],"sim") == 0)
|
||||
if (strcmp(argv[2],"sim") == 0)
|
||||
{
|
||||
iD = argc - 3;
|
||||
pDriver = CreateSIM(pCon,iD,&argv[3]);
|
||||
@@ -972,30 +1073,20 @@ extern MotorDriver *MakePiPiezo(Tcl_Interp *pTcl, char *pArray);
|
||||
pNew->ParArray[HLOW].iCode = usUser;
|
||||
pNew->ParArray[HUPP].iCode = usUser;
|
||||
}
|
||||
else if (strcmp(argv[2],"pipiezo") == 0)
|
||||
{
|
||||
pDriver = MakePiPiezo(pSics->pTcl,argv[3]);
|
||||
if(!pDriver)
|
||||
{
|
||||
|
||||
SCWrite(pCon,pTcl->result,eError);
|
||||
return 0;
|
||||
}
|
||||
/* create the motor */
|
||||
pNew = MotorInit("PIPIEZO",argv[1],pDriver);
|
||||
if(!pNew)
|
||||
{
|
||||
sprintf(pBueffel,"Failure to create motor %s",argv[1]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(pBueffel,"Motor Type %s not recognized for motor %s",
|
||||
argv[2],argv[1]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
site = getSite();
|
||||
if(site != NULL)
|
||||
{
|
||||
pNew = site->CreateMotor(pCon,argc-1,&argv[1]);
|
||||
}
|
||||
if(pNew == NULL)
|
||||
{
|
||||
sprintf(pBueffel,"Motor Type %s not recognized for motor %s",
|
||||
argv[2],argv[1]);
|
||||
SCWrite(pCon,pBueffel,eError);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* create the interpreter command */
|
||||
|
||||
Reference in New Issue
Block a user