Merge pull request #206 from EuropeanSpallationSource/handle_RHLM_RLLM_with_negative_MRES

RHLM, RLLM: Fix when MRES is negative.
This commit is contained in:
Kevin Peterson
2023-05-22 11:00:48 -05:00
committed by GitHub
+108 -40
View File
@@ -2784,15 +2784,36 @@ velcheckB:
pmr->vmax = temp_dbl;
db_post_events(pmr, &pmr->vmax, DBE_VAL_LOG);
}
if (pmr->dllm != (temp_dbl = pmr->rllm * pmr->mres))
/* We may have new MRES */
if (pmr->mres > 0)
{
pmr->dllm = temp_dbl;
db_post_events(pmr, &pmr->dllm, DBE_VAL_LOG);
if (pmr->dllm != (temp_dbl = pmr->rllm * pmr->mres))
{
pmr->dllm = temp_dbl;
db_post_events(pmr, &pmr->dllm, DBE_VAL_LOG);
}
if (pmr->dhlm != (temp_dbl = pmr->rhlm * pmr->mres))
{
pmr->dhlm = temp_dbl;
db_post_events(pmr, &pmr->dhlm, DBE_VAL_LOG);
}
}
if (pmr->dhlm != (temp_dbl = pmr->rhlm * pmr->mres))
else
{
pmr->dhlm = temp_dbl;
db_post_events(pmr, &pmr->dhlm, DBE_VAL_LOG);
// MRES < 0 swaps DHLM DLLM
if (pmr->dhlm != (temp_dbl = pmr->rllm * pmr->mres))
{
pmr->dhlm = temp_dbl;
db_post_events(pmr, &pmr->dhlm, DBE_VAL_LOG);
}
if (pmr->dllm != (temp_dbl = pmr->rhlm * pmr->mres))
{
pmr->dllm = temp_dbl;
db_post_events(pmr, &pmr->dllm, DBE_VAL_LOG);
}
set_userlimits(pmr);
db_post_events(pmr, &pmr->hlm, DBE_VAL_LOG);
db_post_events(pmr, &pmr->llm, DBE_VAL_LOG);
}
set_userlimits(pmr);
db_post_events(pmr, &pmr->hlm, DBE_VAL_LOG);
@@ -3855,34 +3876,56 @@ static void check_speed_and_resolution(motorRecord * pmr)
db_post_events(pmr, &pmr->velo, DBE_VAL_LOG);
db_post_events(pmr, &pmr->s, DBE_VAL_LOG);
/* RLLM <--> DLLM */
if (pmr->rllm != 0.0)
if (pmr->mres > 0)
{
pmr->dllm = pmr->rllm * pmr->mres;
MARK(M_DLLM);
/* RLLM <--> DLLM */
if (pmr->rllm != 0.0)
{
pmr->dllm = pmr->rllm * pmr->mres;
MARK(M_DLLM);
}
if (pmr->rllm != pmr->dllm / pmr->mres)
{
pmr->rllm = pmr->dllm / pmr->mres;
MARK_AUX(M_RLLM);
}
/* RHLM <--> DHLM */
if (pmr->rhlm != 0.0)
{
pmr->dhlm = pmr->rhlm * pmr->mres;
MARK(M_DHLM);
}
if (pmr->rhlm != pmr->dhlm / pmr->mres)
{
pmr->rhlm = pmr->dhlm / pmr->mres;
MARK_AUX(M_RHLM);
}
}
if (pmr->rllm != pmr->dllm / pmr->mres)
else
{
pmr->rllm = pmr->dllm / pmr->mres;
MARK_AUX(M_RLLM);
/* RLLM <--> DHLM */
if (pmr->rllm != 0.0)
{
pmr->dhlm = pmr->rllm * fabs(pmr->mres);
MARK(M_DHLM);
}
if (pmr->rllm != pmr->dhlm / fabs(pmr->mres))
{
pmr->rllm = pmr->dhlm / fabs(pmr->mres);
MARK_AUX(M_RLLM);
}
/* RHLM <--> DLLM */
if (pmr->rhlm != 0.0)
{
pmr->dllm = pmr->rhlm * fabs(pmr->mres);
MARK(M_DLLM);
}
if (pmr->rhlm != pmr->dllm / fabs(pmr->mres))
{
pmr->rhlm = pmr->dllm / fabs(pmr->mres);
MARK_AUX(M_RHLM);
}
}
db_post_events(pmr, &pmr->dllm, DBE_VAL_LOG);
db_post_events(pmr, &pmr->rllm, DBE_VAL_LOG);
/* RHLM <--> DHLM */
if (pmr->rhlm != 0.0)
{
pmr->dhlm = pmr->rhlm * pmr->mres;
MARK(M_DHLM);
}
if (pmr->rhlm != pmr->dhlm / pmr->mres)
{
pmr->rhlm = pmr->dhlm / pmr->mres;
MARK_AUX(M_RHLM);
}
db_post_events(pmr, &pmr->rhlm, DBE_VAL_LOG);
db_post_events(pmr, &pmr->dhlm, DBE_VAL_LOG);
/* SBAK (revolutions/sec) <--> BVEL (EGU/sec) */
if (pmr->sbak != 0.0)
@@ -3985,12 +4028,18 @@ static void set_user_highlimit(motorRecord* pmr, struct motor_dset* pdset)
if (dir_positive)
{
pmr->dhlm = tmp_limit;
}
else
{
pmr->dllm = tmp_limit;
}
if (command == SET_HIGH_LIMIT)
{
pmr->rhlm = tmp_raw;
MARK_AUX(M_RHLM);
}
else
{
pmr->dllm = tmp_limit;
pmr->rllm = tmp_raw;
MARK_AUX(M_RLLM);
}
@@ -4057,16 +4106,21 @@ static void set_user_lowlimit(motorRecord* pmr, struct motor_dset* pdset)
SEND_MSG();
if (dir_positive) {
pmr->dllm = tmp_limit;
pmr->rllm = tmp_raw;
MARK_AUX(M_RLLM);
}
else
{
pmr->dhlm = tmp_limit;
}
if (command == SET_HIGH_LIMIT)
{
pmr->rhlm = tmp_raw;
MARK_AUX(M_RHLM);
}
else
{
pmr->rllm = tmp_raw;
MARK_AUX(M_RLLM);
}
}
MARK(M_LLM);
}
@@ -4088,9 +4142,6 @@ static void set_dial_highlimit(motorRecord *pmr, struct motor_dset *pdset)
RTN_STATUS rtnval;
tmp_raw = pmr->dhlm / pmr->mres;
// set the raw high limit
pmr->rhlm = tmp_raw;
MARK_AUX(M_RHLM);
INIT_MSG();
if (pmr->mres < 0) {
@@ -4113,6 +4164,16 @@ static void set_dial_highlimit(motorRecord *pmr, struct motor_dset *pdset)
pmr->llm = -(pmr->dhlm) + offset;
MARK(M_LLM);
}
if (command == SET_HIGH_LIMIT)
{
pmr->rhlm = tmp_raw;
MARK_AUX(M_RHLM);
}
else
{
pmr->rllm = tmp_raw;
MARK_AUX(M_RLLM);
}
MARK(M_DHLM);
}
@@ -4132,9 +4193,6 @@ static void set_dial_lowlimit(motorRecord *pmr, struct motor_dset *pdset)
RTN_STATUS rtnval;
tmp_raw = pmr->dllm / pmr->mres;
// set the raw low limit
pmr->rllm = tmp_raw;
MARK_AUX(M_RLLM);
INIT_MSG();
if (pmr->mres < 0) {
@@ -4157,6 +4215,16 @@ static void set_dial_lowlimit(motorRecord *pmr, struct motor_dset *pdset)
pmr->hlm = -(pmr->dllm) + offset;
MARK(M_HLM);
}
if (command == SET_HIGH_LIMIT)
{
pmr->rhlm = tmp_raw;
MARK_AUX(M_RHLM);
}
else
{
pmr->rllm = tmp_raw;
MARK_AUX(M_RLLM);
}
MARK(M_DLLM);
}