switch RDIF RVAL LRVL RRBV RMP REP from DBF_LONG to DBF_DOUBLE

This commit is contained in:
2023-07-04 17:18:22 +02:00
parent 503451bbc7
commit 03a6ed4654
4 changed files with 48 additions and 35 deletions
+5 -2
View File
@@ -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
+11 -10
View File
@@ -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);
}
+26 -17
View File
@@ -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);
}
+6 -6
View File
@@ -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)
}