forked from epics_driver_modules/motorBase
motor: added support for ADEL and MDEL fields in motor record. The implementation in monitor() is based on the ai record. Also had to modify post_MARKed_fields in order to get RBV and DMOV posts behaving correctly.
This commit is contained in:
@@ -3200,9 +3200,30 @@ static void alarm_sub(motorRecord * pmr)
|
||||
static void monitor(motorRecord * pmr)
|
||||
{
|
||||
unsigned short monitor_mask;
|
||||
double delta = 0.0;
|
||||
|
||||
monitor_mask = recGblResetAlarms(pmr);
|
||||
|
||||
/* check for value change */
|
||||
delta = pmr->mlst - pmr->rbv;
|
||||
if (delta<0.0) delta = -delta;
|
||||
if (delta > pmr->mdel) {
|
||||
/* post events for value change */
|
||||
monitor_mask |= DBE_VALUE;
|
||||
/* update last value monitored */
|
||||
pmr->mlst = pmr->rbv;
|
||||
}
|
||||
|
||||
/* check for archive change */
|
||||
delta = pmr->alst - pmr->rbv;
|
||||
if (delta<0.0) delta = -delta;
|
||||
if (delta > pmr->adel) {
|
||||
/* post events on value field for archive change */
|
||||
monitor_mask |= DBE_LOG;
|
||||
/* update last archive value monitored */
|
||||
pmr->alst = pmr->rbv;
|
||||
}
|
||||
|
||||
/* Catch all previous 'calls' to MARK(). */
|
||||
post_MARKed_fields(pmr, monitor_mask);
|
||||
return;
|
||||
@@ -3224,11 +3245,13 @@ static void post_MARKed_fields(motorRecord * pmr, unsigned short mask)
|
||||
|
||||
msta.All = pmr->msta;
|
||||
|
||||
if ((local_mask = mask | (MARKED(M_RBV) ? DBE_VAL_LOG : 0)))
|
||||
{
|
||||
db_post_events(pmr, &pmr->rbv, local_mask);
|
||||
if (MARKED(M_RBV)) {
|
||||
db_post_events(pmr, &pmr->rbv, mask);
|
||||
UNMARK(M_RBV);
|
||||
}
|
||||
|
||||
/*Now we have posted change on RBV, reset the monitor mask.*/
|
||||
mask = recGblResetAlarms(pmr);
|
||||
|
||||
if ((local_mask = mask | (MARKED(M_RRBV) ? DBE_VAL_LOG : 0)))
|
||||
{
|
||||
|
||||
@@ -768,4 +768,24 @@ recordtype(motor) {
|
||||
interest(1)
|
||||
menu(motorRMOD)
|
||||
}
|
||||
field(ADEL,DBF_DOUBLE) {
|
||||
prompt("Archive Deadband")
|
||||
promptgroup(GUI_COMMON)
|
||||
interest(1)
|
||||
}
|
||||
field(MDEL,DBF_DOUBLE) {
|
||||
prompt("Monitor Deadband")
|
||||
promptgroup(GUI_COMMON)
|
||||
interest(1)
|
||||
}
|
||||
field(ALST,DBF_DOUBLE) {
|
||||
prompt("Last Value Archived")
|
||||
special(SPC_NOMOD)
|
||||
interest(3)
|
||||
}
|
||||
field(MLST,DBF_DOUBLE) {
|
||||
prompt("Last Val Monitored")
|
||||
special(SPC_NOMOD)
|
||||
interest(3)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user