14 #define epicsExportSharedSymbols 25 namespace epics {
namespace pvCopy{
28 static std::string name(
"deadband");
30 PVDeadbandPlugin::PVDeadbandPlugin()
34 PVDeadbandPlugin::~PVDeadbandPlugin()
38 void PVDeadbandPlugin::create()
40 static bool firstTime =
true;
44 PVPluginRegistry::registerPlugin(name,pvPlugin);
49 const std::string & requestValue,
53 return PVDeadbandFilter::create(requestValue,master);
56 PVDeadbandFilter::~PVDeadbandFilter()
61 const std::string & requestValue,
70 if(requestValue.find(
"abs")==0) {
72 }
else if(requestValue.find(
"rel")==0) {
77 size_t ind = requestValue.find(
':');
79 string svalue = requestValue.substr(ind+1);
80 double deadband = atof(svalue.c_str());
85 absolute,deadband,static_pointer_cast<PVScalar>(master)));
89 PVDeadbandFilter::PVDeadbandFilter(
bool absolute,
double deadband,
PVScalarPtr const & master)
94 lastReportedValue(0.0)
101 if(!toCopy)
return false;
102 double value = convert->toDouble(master);
103 double diff = value - lastReportedValue;
104 if(diff<0.0) diff = - diff;
108 }
else if(absolute) {
109 if(diff<deadband) report =
false;
111 double last = lastReportedValue;
112 if(last<0.0) last = -last;
114 double percent = (diff/last)*100.0;
115 if(percent<deadband) report =
false;
119 convert->fromDouble(copy,value);
121 lastReportedValue = value;
122 bitSet->set(pvCopy->getFieldOffset());
124 bitSet->clear(pvCopy->getFieldOffset());
129 string PVDeadbandFilter::getName()
This class implements introspection object for Scalar.
PVScalar is the base class for each scalar field.
std::tr1::shared_ptr< PVFilter > PVFilterPtr
std::tr1::shared_ptr< PVCopy > PVCopyPtr
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
pvd::StructureConstPtr type
TODO only here because of the Lockable.
void copy(PVValueArray< T > &pvFrom, size_t fromOffset, size_t fromStride, PVValueArray< T > &pvTo, size_t toOffset, size_t toStride, size_t count)
Copy a subarray from one scalar array to another.
std::tr1::shared_ptr< PVDeadbandFilter > PVDeadbandFilterPtr
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
A Plugin for a filter that gets a sub array from a PVScalarDeadband.
bool isNumeric(ScalarType type)
std::tr1::shared_ptr< PVScalar > PVScalarPtr
std::tr1::shared_ptr< const Field > FieldConstPtr
std::tr1::shared_ptr< PVField > PVFieldPtr
std::tr1::shared_ptr< Convert > ConvertPtr
std::tr1::shared_ptr< BitSet > BitSetPtr
A plugin for a filter that gets a sub array from a PVScalarDeadband.
std::tr1::shared_ptr< PVDeadbandPlugin > PVDeadbandPluginPtr