rec: Fix problem with NAN in MLST/ALST fields

If MLST or ALST became NAN the associated monitor would never trigger.
Now a NAN will cause it to always trigger.
This commit is contained in:
Andrew Johnson
2012-10-06 21:48:01 -05:00
parent c574722a9b
commit 9c1b8ba952
8 changed files with 27 additions and 20 deletions

View File

@@ -13,6 +13,12 @@
<!-- Insert new items immediately below here ... -->
<h4>Problem with NAN values in MLST/ALST fields</h4>
<p>The ai, ao, calc, calcout, dfanout, sel and sub record types could stop
posting monitors if they got NAN values in their MLST or ALST fields. A change
has been included so this should no longer be the case.</p>
<h4>MacOS build defaults changed</h4>
<p>The default build settings for darwin-x86 targets have been changed to match

View File

@@ -385,7 +385,7 @@ static void monitor(aiRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -395,7 +395,7 @@ static void monitor(aiRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -484,7 +484,7 @@ static void monitor(aoRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -493,7 +493,7 @@ static void monitor(aoRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -310,7 +310,7 @@ static void monitor(calcRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if (delta < 0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -319,7 +319,7 @@ static void monitor(calcRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if (delta < 0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -209,7 +209,7 @@ static long init_record(calcoutRecord *prec, int pass)
static long process(calcoutRecord *prec)
{
rpvtStruct *prpvt = prec->rpvt;
int doOutput = 0;
int doOutput;
if (!prec->pact) {
prec->pact = TRUE;
@@ -231,21 +231,22 @@ static long process(calcoutRecord *prec)
doOutput = 1;
break;
case calcoutOOPT_On_Change:
if (fabs(prec->pval - prec->val) > prec->mdel) doOutput = 1;
doOutput = ! (fabs(prec->pval - prec->val) <= prec->mdel);
break;
case calcoutOOPT_Transition_To_Zero:
if ((prec->pval != 0.0) && (prec->val == 0.0)) doOutput = 1;
doOutput = ((prec->pval != 0.0) && (prec->val == 0.0));
break;
case calcoutOOPT_Transition_To_Non_zero:
if ((prec->pval == 0.0) && (prec->val != 0.0)) doOutput = 1;
doOutput = ((prec->pval == 0.0) && (prec->val != 0.0));
break;
case calcoutOOPT_When_Zero:
if (prec->val == 0.0) doOutput = 1;
doOutput = (prec->val == 0.0);
break;
case calcoutOOPT_When_Non_zero:
if (prec->val != 0.0) doOutput = 1;
doOutput = (prec->val != 0.0);
break;
default:
doOutput = 0;
break;
}
prec->pval = prec->val;
@@ -584,7 +585,7 @@ static void monitor(calcoutRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if (delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -593,7 +594,7 @@ static void monitor(calcoutRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if (delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -267,7 +267,7 @@ static void monitor(dfanoutRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -276,7 +276,7 @@ static void monitor(dfanoutRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -300,7 +300,7 @@ static void monitor(selRecord *prec)
/* check for value change */
delta = prec->mlst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -309,7 +309,7 @@ static void monitor(selRecord *prec)
/* check for archive change */
delta = prec->alst - prec->val;
if(delta<0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */

View File

@@ -353,7 +353,7 @@ static void monitor(subRecord *prec)
/* check for value change */
delta = prec->val - prec->mlst;
if (delta < 0.0) delta = -delta;
if (delta > prec->mdel) {
if (!(delta <= prec->mdel)) { /* Handles MDEL == NAN */
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
@@ -362,7 +362,7 @@ static void monitor(subRecord *prec)
/* check for archive change */
delta = prec->val - prec->alst;
if (delta < 0.0) delta = -delta;
if (delta > prec->adel) {
if (!(delta <= prec->adel)) { /* Handles ADEL == NAN */
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */