forked from epics_driver_modules/motorBase
switch RDIF RVAL LRVL RRBV RMP REP from DBF_LONG to DBF_DOUBLE
This commit is contained in:
+5
-2
@@ -1,8 +1,11 @@
|
||||
include /ioc/tools/driver.makefile
|
||||
MODULE = motorBase
|
||||
|
||||
EXCLUDE_VERSIONS=3.13
|
||||
BUILDCLASSES+=vxWorks Linux WIN32
|
||||
EXCLUDE_VERSIONS=3.13 3.14 7.0.6
|
||||
BUILDCLASSES = Linux
|
||||
#ARCH_FILTER = %-ppc4xxFP
|
||||
ARCH_FILTER = eldk42-ppc4xxFP
|
||||
#ARCH_FILTER = eldk53-ppc4xxFP
|
||||
|
||||
SOURCES += motorApp/MotorSrc/motorRecord.cc
|
||||
DBDS += motorApp/MotorSrc/motorRecord.dbd
|
||||
|
||||
@@ -432,29 +432,30 @@ CALLBACK_VALUE update_values(struct motorRecord * pmr)
|
||||
pmr->name, pPvt->needUpdate);
|
||||
if ( pPvt->needUpdate )
|
||||
{
|
||||
epicsInt32 rawvalue;
|
||||
epicsFloat64 rawF64;
|
||||
epicsInt32 rawI32;
|
||||
|
||||
rawvalue = (epicsInt32)floor(pPvt->status.position + 0.5);
|
||||
if (pmr->rmp != rawvalue)
|
||||
rawF64 = pPvt->status.position;
|
||||
if (pmr->rmp != rawF64)
|
||||
{
|
||||
pmr->rmp = rawvalue;
|
||||
pmr->rmp = rawF64;
|
||||
db_post_events(pmr, &pmr->rmp, DBE_VAL_LOG);
|
||||
}
|
||||
|
||||
rawvalue = (epicsInt32)floor(pPvt->status.encoderPosition + 0.5);
|
||||
if (pmr->rep != rawvalue)
|
||||
rawF64 = pPvt->status.encoderPosition;
|
||||
if (pmr->rep != rawF64)
|
||||
{
|
||||
pmr->rep = rawvalue;
|
||||
pmr->rep = rawF64;
|
||||
db_post_events(pmr, &pmr->rep, DBE_VAL_LOG);
|
||||
}
|
||||
|
||||
/* Don't post MSTA changes here; motor record's process() function does efficent MSTA posting. */
|
||||
pmr->msta = pPvt->status.status;
|
||||
|
||||
rawvalue = (epicsInt32)floor(pPvt->status.velocity);
|
||||
if (pmr->rvel != rawvalue)
|
||||
rawI32 = (epicsInt32)floor(pPvt->status.velocity);
|
||||
if (pmr->rvel != rawI32)
|
||||
{
|
||||
pmr->rvel = rawvalue;
|
||||
pmr->rvel = rawI32;
|
||||
db_post_events(pmr, &pmr->rvel, DBE_VAL_LOG);
|
||||
}
|
||||
|
||||
|
||||
@@ -637,7 +637,8 @@ static long init_record(dbCommon* arg, int pass)
|
||||
MARK(M_VAL);
|
||||
pmr->dval = pmr->drbv;
|
||||
MARK(M_DVAL);
|
||||
pmr->rval = NINT(pmr->dval / pmr->mres);
|
||||
pmr->rval = pmr->dval / pmr->mres;
|
||||
//printf("RVAL_1: %g=%g/%g\n",pmr->rval,pmr->dval,pmr->mres);
|
||||
MARK(M_RVAL);
|
||||
}
|
||||
|
||||
@@ -654,7 +655,8 @@ static long init_record(dbCommon* arg, int pass)
|
||||
MARK(M_SPMG);
|
||||
pmr->diff = pmr->dval - pmr->drbv;
|
||||
MARK(M_DIFF);
|
||||
pmr->rdif = NINT(pmr->diff / pmr->mres);
|
||||
pmr->rdif = pmr->diff / pmr->mres;
|
||||
//printf("RDIF_1: %g=%g/%g\n",pmr->rdif,pmr->diff,pmr->mres);
|
||||
MARK(M_RDIF);
|
||||
pmr->lval = pmr->val;
|
||||
pmr->ldvl = pmr->dval;
|
||||
@@ -768,7 +770,8 @@ static long postProcess(motorRecord * pmr)
|
||||
#endif
|
||||
MARK(M_VAL);
|
||||
MARK(M_DVAL);
|
||||
pmr->rval = NINT(pmr->dval / pmr->mres);
|
||||
pmr->rval = pmr->dval / pmr->mres;
|
||||
//printf("RVAL_2: %g=%g/%g\n",pmr->rval,pmr->dval,pmr->mres);
|
||||
MARK(M_RVAL);
|
||||
pmr->diff = 0.;
|
||||
MARK(M_DIFF);
|
||||
@@ -892,7 +895,8 @@ static long postProcess(motorRecord * pmr)
|
||||
{
|
||||
double currpos = pmr->dval / pmr->mres;
|
||||
double newpos = bpos + pmr->frac * (currpos - bpos);
|
||||
pmr->rval = NINT(newpos);
|
||||
pmr->rval = newpos;
|
||||
//printf("RVAL_3: %g=%g\n",pmr->dval,newpos);
|
||||
WRITE_MSG(MOVE_ABS, &newpos);
|
||||
}
|
||||
pmr->mip = MIP_MOVE_BL;
|
||||
@@ -941,7 +945,8 @@ static long postProcess(motorRecord * pmr)
|
||||
{
|
||||
double currpos = pmr->dval / pmr->mres;
|
||||
double newpos = bpos + pmr->frac * (currpos - bpos);
|
||||
pmr->rval = NINT(newpos);
|
||||
pmr->rval = newpos;
|
||||
//printf("RVAL_4: %g=%g\n",pmr->dval,newpos);
|
||||
WRITE_MSG(MOVE_ABS, &newpos);
|
||||
}
|
||||
WRITE_MSG(GO, NULL);
|
||||
@@ -1260,7 +1265,7 @@ static long process(dbCommon *arg)
|
||||
{
|
||||
|
||||
/* We're going in the wrong direction. Readback problem? */
|
||||
printf("%s:tdir = %d\n", pmr->name, pmr->tdir);
|
||||
//printf("%s:tdir = %d\n", pmr->name, pmr->tdir);
|
||||
INIT_MSG();
|
||||
WRITE_MSG(STOP_AXIS, NULL);
|
||||
SEND_MSG();
|
||||
@@ -2173,7 +2178,8 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind)
|
||||
MARK(M_DIFF);
|
||||
}
|
||||
|
||||
pmr->rdif = NINT(pmr->diff / pmr->mres);
|
||||
pmr->rdif = pmr->diff / pmr->mres;
|
||||
//printf("RDIF_2: %g=%g/%g\n",pmr->rdif,pmr->diff,pmr->mres);
|
||||
MARK(M_RDIF);
|
||||
if (set && !pmr->igset)
|
||||
{
|
||||
@@ -2202,7 +2208,7 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind)
|
||||
double relbpos = ((pmr->dval - pmr->bdst) - pmr->drbv) / pmr->mres;
|
||||
double rbdst1 = 1.0 + (fabs(pmr->bdst) / fabs(pmr->mres));
|
||||
long rdbdpos = NINT(pmr->rdbd / fabs(pmr->mres)); /* retry deadband steps */
|
||||
long rpos, npos, rtnstat;
|
||||
long rtnstat;
|
||||
msta_field msta;
|
||||
msta.All = pmr->msta;
|
||||
|
||||
@@ -2221,18 +2227,17 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind)
|
||||
pmr->val = pmr->dval * dir + pmr->off;
|
||||
if (pmr->val != pmr->lval)
|
||||
MARK(M_VAL);
|
||||
pmr->rval = NINT(pmr->dval / pmr->mres);
|
||||
pmr->rval = pmr->dval / pmr->mres;
|
||||
//printf("RVAL_5: %g=%g/%g\n",pmr->rval,pmr->dval,pmr->mres);
|
||||
if (pmr->rval != pmr->lrvl)
|
||||
MARK(M_RVAL);
|
||||
|
||||
/* Don't move if we're within retry deadband. */
|
||||
|
||||
rpos = NINT(rbvpos);
|
||||
npos = NINT(newpos);
|
||||
too_small = false;
|
||||
if ((pmr->mip & MIP_RETRY) == 0)
|
||||
{
|
||||
if (abs(npos - rpos) < 1)
|
||||
if (newpos==rbvpos)
|
||||
too_small = true;
|
||||
if (!too_small)
|
||||
{
|
||||
@@ -2247,9 +2252,10 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind)
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (abs(npos - rpos) < rdbdpos)
|
||||
else if (abs(newpos - rbvpos) < rdbdpos)
|
||||
too_small = true;
|
||||
|
||||
//printf("too_small: %u\n",(unsigned int)too_small);
|
||||
if (too_small == true)
|
||||
{
|
||||
if (pmr->dmov == FALSE && (pmr->mip == MIP_DONE || pmr->mip == MIP_RETRY))
|
||||
@@ -3723,7 +3729,8 @@ static void process_motor_info(motorRecord * pmr, bool initcall)
|
||||
|
||||
pmr->diff = pmr->dval - pmr->drbv;
|
||||
MARK(M_DIFF);
|
||||
pmr->rdif = NINT(pmr->diff / pmr->mres);
|
||||
pmr->rdif = pmr->diff / pmr->mres;
|
||||
//printf("RDIF_3: %g=%g/%g\n",pmr->rdif,pmr->diff,pmr->mres);
|
||||
MARK(M_RDIF);
|
||||
}
|
||||
|
||||
@@ -3735,9 +3742,10 @@ static void load_pos(motorRecord * pmr)
|
||||
|
||||
pmr->ldvl = pmr->dval;
|
||||
pmr->lval = pmr->val;
|
||||
if (pmr->rval != (epicsInt32) NINT(newpos))
|
||||
if (pmr->rval != newpos)
|
||||
MARK(M_RVAL);
|
||||
pmr->lrvl = pmr->rval = (epicsInt32) NINT(newpos);
|
||||
pmr->lrvl = pmr->rval = newpos;
|
||||
//printf("RVAL_6: %g=%g\n",pmr->rval,newpos);
|
||||
|
||||
if (pmr->foff)
|
||||
{
|
||||
@@ -4158,7 +4166,8 @@ static void syncTargetPosition(motorRecord *pmr)
|
||||
MARK(M_VAL);
|
||||
pmr->dval = pmr->ldvl = pmr->drbv;
|
||||
MARK(M_DVAL);
|
||||
pmr->rval = pmr->lrvl = NINT(pmr->dval / pmr->mres);
|
||||
pmr->rval = pmr->lrvl = pmr->dval / pmr->mres;
|
||||
//printf("RVAL_7: %g=%g/%g\n",pmr->rval,pmr->dval,pmr->mres);
|
||||
MARK(M_RVAL);
|
||||
}
|
||||
|
||||
|
||||
@@ -533,13 +533,13 @@ recordtype(motor) {
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
}
|
||||
field(RVAL,DBF_LONG) {
|
||||
field(RVAL,DBF_DOUBLE) {
|
||||
asl(ASL0)
|
||||
prompt("Raw Desired Value (step")
|
||||
special(SPC_MOD)
|
||||
pp(TRUE)
|
||||
}
|
||||
field(LRVL,DBF_LONG) {
|
||||
field(LRVL,DBF_DOUBLE) {
|
||||
prompt("Last Raw Des Val (steps")
|
||||
special(SPC_NOMOD)
|
||||
interest(1)
|
||||
@@ -567,7 +567,7 @@ recordtype(motor) {
|
||||
prompt("Difference dval-drbv")
|
||||
special(SPC_NOMOD)
|
||||
}
|
||||
field(RDIF,DBF_LONG) {
|
||||
field(RDIF,DBF_DOUBLE) {
|
||||
prompt("Difference rval-rrbv")
|
||||
special(SPC_NOMOD)
|
||||
}
|
||||
@@ -575,15 +575,15 @@ recordtype(motor) {
|
||||
prompt("Raw cmnd direction")
|
||||
special(SPC_NOMOD)
|
||||
}
|
||||
field(RRBV,DBF_LONG) {
|
||||
field(RRBV,DBF_DOUBLE) {
|
||||
prompt("Raw Readback Value")
|
||||
special(SPC_NOMOD)
|
||||
}
|
||||
field(RMP,DBF_LONG) {
|
||||
field(RMP,DBF_DOUBLE) {
|
||||
prompt("Raw Motor Position")
|
||||
special(SPC_NOMOD)
|
||||
}
|
||||
field(REP,DBF_LONG) {
|
||||
field(REP,DBF_DOUBLE) {
|
||||
prompt("Raw Encoder Position")
|
||||
special(SPC_NOMOD)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user