- ECB motors without encoders, with encoders and with control bits now work

This commit is contained in:
cvs
2003-01-24 15:38:32 +00:00
parent f45c3ebf55
commit e4d4643123
8 changed files with 649 additions and 58 deletions

48
motor.c
View File

@ -12,6 +12,9 @@
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
@ -463,6 +466,10 @@ extern void KillPiPiezo(void *pData);
{
KillPiPiezo((void *)pM->pDriver);
}
else if(strcmp(pM->drivername,"ECB") == 0)
{
free(pM->pDriver);
}
free(pM->drivername);
}
@ -530,6 +537,19 @@ extern void KillPiPiezo(void *pData);
assert(self);
assert(pCon);
/*
try set driver parameters
*/
if(self->pDriver->SetDriverPar != NULL)
{
iRet = self->pDriver->SetDriverPar(self->pDriver,pCon,name,fVal);
if(iRet == 1)
{
return iRet;
}
}
if(strcmp(name,"softzero") == 0)
{
/* set it first, this also tests the necessary privileges */
@ -571,16 +591,6 @@ extern void KillPiPiezo(void *pData);
}
}
/*
try set driver parameters
*/
if(iRet == 0)
{
if(self->pDriver->SetDriverPar != NULL)
{
iRet = self->pDriver->SetDriverPar(self->pDriver,pCon,name,fVal);
}
}
return iRet;
}
/*---------------------------------------------------------------------------
@ -866,6 +876,7 @@ extern void KillPiPiezo(void *pData);
*/
extern MotorDriver *MakePiPiezo(Tcl_Interp *pTcl, char *pArray);
extern MotorDriver *CreateECBMotor(SConnection *pCon, int argc, char *argv[]);
int MotorCreate(SConnection *pCon, SicsInterp *pSics, void *pData,
int argc, char *argv[])
@ -906,6 +917,23 @@ extern MotorDriver *MakePiPiezo(Tcl_Interp *pTcl, char *pArray);
return 0;
}
}
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;