Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 38 additions & 14 deletions motorApp/MotorSrc/motorRecord.cc
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ static void set_dial_highlimit(motorRecord *, struct motor_dset *);
static void set_dial_lowlimit(motorRecord *, struct motor_dset *);
static void set_userlimits(motorRecord *);
static void range_check(motorRecord *, double *, double, double);
static void jvel_range_check(motorRecord *);
static bool jvel_limit_check(motorRecord *);
static void clear_buttons(motorRecord *);
static void syncTargetPosition(motorRecord *);

Expand Down Expand Up @@ -1465,9 +1467,7 @@ static long process(dbCommon *arg)
else
{
if (pmr->mip & MIP_JOG)
pmr->lvio = (pmr->jogf && (pmr->rbv > pmr->hlm - pmr->jvel)) ||
(pmr->jogr && (pmr->rbv < pmr->llm + pmr->jvel)) ||
(pmr->dllm > pmr->dhlm);
pmr->lvio = jvel_limit_check(pmr);
else if (pmr->mip & MIP_HOME)
pmr->lvio = false; /* Disable soft-limit error check during home search. */
}
Expand Down Expand Up @@ -2084,9 +2084,7 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind)
/* check for limit violation */
if ((pmr->dhlm == pmr->dllm) && (pmr->dllm == 0.0))
;
else if ((pmr->jogf && (pmr->val > pmr->hlm - pmr->jvel)) ||
(pmr->jogr && (pmr->val < pmr->llm + pmr->jvel)) ||
(pmr->dllm > pmr->dhlm))
else if (jvel_limit_check(pmr))
{
pmr->lvio = 1;
MARK(M_LVIO);
Expand Down Expand Up @@ -2124,10 +2122,10 @@ static RTN_STATUS do_work(motorRecord * pmr, CALLBACK_VALUE proc_ind)
MARK(M_DMOV);
pmr->pp = TRUE;
if (pmr->jogf)
pmr->cdir = 1;
pmr->cdir = (pmr->jvel > 0.) ? 1 : 0;
else
{
pmr->cdir = 0;
pmr->cdir = (pmr->jvel > 0.) ? 0 : 1;
jogv = -jogv;
}

Expand Down Expand Up @@ -3054,8 +3052,7 @@ static long special(DBADDR *paddr, int after)
break;

case motorRecordJVEL:
range_check(pmr, &pmr->jvel, pmr->vbas, pmr->vmax);

jvel_range_check(pmr);
if ((pmr->mip & MIP_JOGF) || (pmr->mip & MIP_JOGR))
{
double jogv = (pmr->jvel * dir) / pmr->mres;
Expand All @@ -3074,7 +3071,7 @@ static long special(DBADDR *paddr, int after)
case motorRecordJAR:
// Valid JAR; 0 < JAR < JVEL [egu / sec] / 0.1 [sec]
if (pmr->jar <= 0.0)
pmr->jar = pmr->jvel / 0.1;
pmr->jar = fabs(pmr->jvel) / 0.1;
break;

case motorRecordHVEL:
Expand Down Expand Up @@ -3142,7 +3139,7 @@ static long special(DBADDR *paddr, int after)
db_post_events(pmr, &pmr->sbak, DBE_VAL_LOG);
}

range_check(pmr, &pmr->jvel, pmr->vbas, pmr->vmax);
jvel_range_check(pmr);
range_check(pmr, &pmr->hvel, pmr->vbas, pmr->vmax);
}
/* Do not process (i.e., clear) marked fields here. PP fields (e.g., MRES) must remain marked. */
Expand Down Expand Up @@ -4054,8 +4051,9 @@ static void check_speed_and_resolution(motorRecord * pmr)
/* Sanity check on jog velocity and acceleration rate. */
if (pmr->jvel == 0.0)
pmr->jvel = pmr->velo;
else
range_check(pmr, &pmr->jvel, pmr->vbas, pmr->vmax);
else {
jvel_range_check(pmr);
}

if (pmr->jar == 0.0)
pmr->jar = pmr->velo / pmr->accl;
Expand Down Expand Up @@ -4378,6 +4376,32 @@ static void range_check(motorRecord *pmr, double *parm_ptr, double min, double m
}
}

/*
FUNCTION... void jvel_range_check(motorRecord *)
USAGE... Limit jvel parameter to valid range;
*/
static void jvel_range_check(motorRecord *pmr)
{
if (pmr->jvel >= 0) {
range_check(pmr, &pmr->jvel, pmr->vbas, pmr->vmax);
} else {
range_check(pmr, &pmr->jvel, -pmr->vmax, -pmr->vbas);
}
}

/*
FUNCTION... void jvel_limit_check(motorRecord *)
USAGE... Return true if jogging for 1 second would result in soft limit violation;
*/

static bool jvel_limit_check(motorRecord *pmr)
{
return (((pmr->jogf && pmr->jvel > 0.) && (pmr->rbv > pmr->hlm - pmr->jvel)) ||
((pmr->jogr && pmr->jvel < 0.) && (pmr->rbv > pmr->hlm + pmr->jvel)) ||
((pmr->jogr && pmr->jvel > 0.) && (pmr->rbv < pmr->llm + pmr->jvel)) ||
((pmr->jogf && pmr->jvel < 0.) && (pmr->rbv < pmr->llm - pmr->jvel)) ||
(pmr->dllm > pmr->dhlm));
}

/*
FUNCTION... void clear_buttons(motorRecord *)
Expand Down
Loading