This is Unofficial EPICS BASE Doxygen Site
epics::pvDatabase::ScalarAlarmSupport Class Reference

Base interface for a ScalarAlarmSupport. More...

#include "scalarAlarmSupport.h"

+ Inheritance diagram for epics::pvDatabase::ScalarAlarmSupport:
+ Collaboration diagram for epics::pvDatabase::ScalarAlarmSupport:

Public Member Functions

 POINTER_DEFINITIONS (ScalarAlarmSupport)
 
virtual ~ScalarAlarmSupport ()
 
virtual bool init (epics::pvData::PVFieldPtr const &pvValue, epics::pvData::PVStructurePtr const &pvAlarm, epics::pvData::PVFieldPtr const &pvSupport)
 Connects to contol fields. More...
 
virtual bool process ()
 Honors scalarAlarm fields. More...
 
virtual void reset ()
 If implementing minSteps it sets isMinStep to false. More...
 

Static Public Member Functions

static ScalarAlarmSupportPtr create (PVRecordPtr const &pvRecord)
 create a ScalarAlarm More...
 
static epics::pvData::StructureConstPtr scalarAlarmField ()
 create a scalarAlarm required by ScalarAlarm More...
 

Detailed Description

Base interface for a ScalarAlarmSupport.

Definition at line 31 of file scalarAlarmSupport.h.

Constructor & Destructor Documentation

epics::pvDatabase::ScalarAlarmSupport::~ScalarAlarmSupport ( )
virtual

The Destructor.

Definition at line 31 of file scalarAlarmSupport.cpp.

32 {
33 //cout << "ScalarAlarmSupport::~ScalarAlarmSupport()\n";
34 }

Member Function Documentation

ScalarAlarmSupportPtr epics::pvDatabase::ScalarAlarmSupport::create ( PVRecordPtr const &  pvRecord)
static

create a ScalarAlarm

Parameters
pvRecord- The pvRecord to which the support is attached.
Returns
The new ScalarAlarm

Definition at line 49 of file scalarAlarmSupport.cpp.

50 {
51  ScalarAlarmSupportPtr support(new ScalarAlarmSupport(pvRecord));
52  return support;
53 }
std::tr1::shared_ptr< ScalarAlarmSupport > ScalarAlarmSupportPtr
bool epics::pvDatabase::ScalarAlarmSupport::init ( epics::pvData::PVFieldPtr const &  pvValue,
epics::pvData::PVStructurePtr const &  pvAlarm,
epics::pvData::PVFieldPtr const &  pvSupport 
)
virtual

Connects to contol fields.

Parameters
pvValueThe field to support.
pvAlarmThe alarm field.
pvSupportSupport specific fields.
Returns
true for success and false for failure.

Definition at line 61 of file scalarAlarmSupport.cpp.

65 {
66  if(pvval->getField()->getType()==epics::pvData::scalar) {
67  ScalarConstPtr s = static_pointer_cast<const Scalar>(pvval->getField());
68  if(ScalarTypeFunc::isNumeric(s->getScalarType())) {
69  pvValue = static_pointer_cast<PVScalar>(pvval);
70  }
71  }
72  if(!pvValue) {
73  cout << "ScalarAlarmSupport for record " << pvRecord->getRecordName()
74  << " failed because not numeric scalar\n";
75  return false;
76  }
77  pvScalarAlarm = static_pointer_cast<PVStructure>(pvsup);
78  if(pvScalarAlarm) {
79  pvLowAlarmLimit = pvScalarAlarm->getSubField<PVDouble>("lowAlarmLimit");
80  pvLowWarningLimit = pvScalarAlarm->getSubField<PVDouble>("lowWarningLimit");
81  pvHighWarningLimit = pvScalarAlarm->getSubField<PVDouble>("highWarningLimit");
82  pvHighAlarmLimit = pvScalarAlarm->getSubField<PVDouble>("highAlarmLimit");
83  pvHysteresis = pvScalarAlarm->getSubField<PVDouble>("hysteresis");
84  }
85  if(!pvScalarAlarm
86  || !pvLowAlarmLimit || !pvLowWarningLimit
87  || !pvLowWarningLimit || !pvHighAlarmLimit
88  || !pvHysteresis)
89  {
90  cout << "ScalarAlarmSupport for record " << pvRecord->getRecordName()
91  << " failed because pvSupport not a valid scalarAlarm structure\n";
92  return false;
93  }
94  pvAlarm = pvalarm;
95  ConvertPtr convert = getConvert();
96  requestedValue = convert->toDouble(pvValue);
97  currentValue = requestedValue;
98  isHystersis = false;
99  setAlarm(pvAlarm,range_Undefined);
100  return true;
101 }
This class implements introspection object for Scalar.
Definition: pvIntrospect.h:397
PVScalar is the base class for each scalar field.
Definition: pvData.h:272
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
Definition: pvIntrospect.h:150
bool isNumeric(ScalarType type)
Definition: TypeFunc.cpp:53
Data interface for a structure,.
Definition: pvData.h:712
Class that holds the data for each possible scalar type.
Definition: pvData.h:54
std::tr1::shared_ptr< Convert > ConvertPtr
Definition: convert.h:23
epics::pvDatabase::ScalarAlarmSupport::POINTER_DEFINITIONS ( ScalarAlarmSupport  )
bool epics::pvDatabase::ScalarAlarmSupport::process ( )
virtual

Honors scalarAlarm fields.

Returns
Returns true is any fields were modified; otherwise false.

Implements epics::pvDatabase::PVSupport.

Definition at line 103 of file scalarAlarmSupport.cpp.

104 {
105  ConvertPtr convert = getConvert();
106  double value = convert->toDouble(pvValue);
107  double lowAlarmLimit = pvLowAlarmLimit->get();
108  double lowWarningLimit = pvLowWarningLimit->get();
109  double highWarningLimit = pvHighWarningLimit->get();
110  double highAlarmLimit = pvHighAlarmLimit->get();
111  double hysteresis = pvHysteresis->get();
112  int alarmRange = range_Normal;
113  if(highAlarmLimit>lowAlarmLimit) {
114  if(value>=highAlarmLimit
115  ||(prevAlarmRange==range_Hihi && value>=highAlarmLimit-hysteresis)) {
116  alarmRange = range_Hihi;
117  } else if(value<=lowAlarmLimit
118  ||(prevAlarmRange==range_Lolo && value<=lowAlarmLimit+hysteresis)) {
119  alarmRange = range_Lolo;
120  }
121  }
122  if(alarmRange==range_Normal && (highWarningLimit>lowWarningLimit)) {
123  if(value>=highWarningLimit
124  ||(prevAlarmRange==range_High && value>=highWarningLimit-hysteresis)) {
125  alarmRange = range_High;
126  } else if(value<=lowWarningLimit
127  ||(prevAlarmRange==range_Low && value<=lowWarningLimit+hysteresis)) {
128  alarmRange = range_Low;
129  }
130  }
131  bool retValue = false;
132  if(alarmRange!=prevAlarmRange) {
133  setAlarm(pvAlarm,alarmRange);
134  retValue = true;
135  }
136  prevAlarmRange = alarmRange;
137  currentValue = value;
138  return retValue;
139 }
Definition: link.h:174
std::tr1::shared_ptr< Convert > ConvertPtr
Definition: convert.h:23
void epics::pvDatabase::ScalarAlarmSupport::reset ( )
virtual

If implementing minSteps it sets isMinStep to false.

Reimplemented from epics::pvDatabase::PVSupport.

Definition at line 141 of file scalarAlarmSupport.cpp.

142 {
143  isHystersis = false;
144 }
epics::pvData::StructureConstPtr epics::pvDatabase::ScalarAlarmSupport::scalarAlarmField ( )
static

create a scalarAlarm required by ScalarAlarm

Returns
The scalarAlarmField introspection structure.

Definition at line 37 of file scalarAlarmSupport.cpp.

38 {
39  return FieldBuilder::begin()
40  ->setId("scalarAlarm_t")
41  ->add("lowAlarmLimit", pvDouble)
42  ->add("lowWarningLimit", pvDouble)
43  ->add("highWarningLimit", pvDouble)
44  ->add("highAlarmLimit", pvDouble)
45  ->add("hysteresis", pvDouble)
46  ->createStructure();
47 }
epicsTime begin
Definition: caConnTest.cpp:22

The documentation for this class was generated from the following files: