From 6272f98eef9a15e5fa7e06aa1d9499f129a8e35b Mon Sep 17 00:00:00 2001 From: "Janet B. Anderson" Date: Wed, 31 May 2000 18:33:52 +0000 Subject: [PATCH] Added fields drvl and drvh. --- src/rec/longoutRecord.c | 40 ++++++++++++++++++++++++++++++++------- src/rec/longoutRecord.dbd | 12 ++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/rec/longoutRecord.c b/src/rec/longoutRecord.c index 8af4ad347..4491736f8 100644 --- a/src/rec/longoutRecord.c +++ b/src/rec/longoutRecord.c @@ -114,6 +114,7 @@ struct longoutdset { /* longout input dset */ static void alarm(); static void monitor(); static long writeValue(); +static void convert(); static long init_record(plongout,pass) @@ -151,6 +152,7 @@ static long process(plongout) { struct longoutdset *pdset = (struct longoutdset *)(plongout->dset); long status=0; + long value; unsigned char pact=plongout->pact; if( (pdset==NULL) || (pdset->write_longout==NULL) ) { @@ -158,11 +160,17 @@ static long process(plongout) recGblRecordError(S_dev_missingSup,(void *)plongout,"write_longout"); return(S_dev_missingSup); } - if (!plongout->pact && plongout->omsl == CLOSED_LOOP) { - status = dbGetLink(&(plongout->dol),DBR_LONG, - &(plongout->val),0,0); - if (plongout->dol.type!=CONSTANT && RTN_SUCCESS(status)) - plongout->udf=FALSE; + if (!plongout->pact) { + if (plongout->omsl == CLOSED_LOOP) { + status = dbGetLink(&(plongout->dol),DBR_LONG, + &value,0,0); + if (plongout->dol.type!=CONSTANT && RTN_SUCCESS(status)) + plongout->udf=FALSE; + } + else { + value = plongout->val; + } + if (!status) convert(plongout,value); } /* check for alarms */ @@ -246,8 +254,14 @@ static long get_control_double(paddr,pcd) || paddr->pfield==(void *)&plongout->high || paddr->pfield==(void *)&plongout->low || paddr->pfield==(void *)&plongout->lolo){ - pcd->upper_ctrl_limit = plongout->hopr; - pcd->lower_ctrl_limit = plongout->lopr; + /* do not change pre drvh/drvl behavior */ + if(plongout->drvh > plongout->drvl) { + pcd->upper_ctrl_limit = plongout->drvh; + pcd->lower_ctrl_limit = plongout->drvl; + } else { + pcd->upper_ctrl_limit = plongout->hopr; + pcd->lower_ctrl_limit = plongout->lopr; + } } else recGblGetControlDouble(paddr,pcd); return(0); } @@ -373,3 +387,15 @@ static long writeValue(plongout) return(status); } + +static void convert(plongout,value) + struct longoutRecord *plongout; + long value; +{ + /* check drive limits */ + if(plongout->drvh > plongout->drvl) { + if (value > plongout->drvh) value = plongout->drvh; + else if (value < plongout->drvl) value = plongout->drvl; + } + plongout->val = value; +} diff --git a/src/rec/longoutRecord.dbd b/src/rec/longoutRecord.dbd index 5338dad53..3e0568fb4 100644 --- a/src/rec/longoutRecord.dbd +++ b/src/rec/longoutRecord.dbd @@ -27,6 +27,18 @@ recordtype(longout) { interest(1) size(16) } + field(DRVH,DBF_LONG) { + prompt("Drive High Limit") + promptgroup(GUI_OUTPUT) + pp(TRUE) + interest(1) + } + field(DRVL,DBF_LONG) { + prompt("Drive Low Limit") + promptgroup(GUI_OUTPUT) + pp(TRUE) + interest(1) + } field(HOPR,DBF_LONG) { prompt("High Operating Range") promptgroup(GUI_DISPLAY)