Commit cc92ac94 authored by Pavel Vainerman's avatar Pavel Vainerman

(IOBase): переименовл jar --> debounce

(оказалось более правильный перевод "антидребезга")
parent bf515936
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
<br>\b breaklim - пороговое значение для определения обырва датчика (используется для AI). <br>\b breaklim - пороговое значение для определения обырва датчика (используется для AI).
Если значение ниже этого порога, то выставляется признак обрыва датчика. Если значение ниже этого порога, то выставляется признак обрыва датчика.
<br>\b jardelay - защита от дребезга. Задержка на дребезг, мсек. <br>\b debouncedelay - защита от дребезга. Задержка на дребезг, мсек.
<br>\b ondelay - задержка на срабатывание, мсек. <br>\b ondelay - задержка на срабатывание, мсек.
<br>\b offdelay - задержка на отпускание, мсек. <br>\b offdelay - задержка на отпускание, мсек.
<br>\b iofront - работа по фронту сигнала (для DI). <br>\b iofront - работа по фронту сигнала (для DI).
......
...@@ -40,7 +40,7 @@ static const int NoSafety = -1; ...@@ -40,7 +40,7 @@ static const int NoSafety = -1;
ignore(false), ignore(false),
invert(false), invert(false),
noprecision(false), noprecision(false),
jar_state(false), debounce_state(false),
ondelay_state(false), ondelay_state(false),
offdelay_state(false), offdelay_state(false),
t_ai(UniSetTypes::DefaultObjectId), t_ai(UniSetTypes::DefaultObjectId),
...@@ -53,44 +53,44 @@ static const int NoSafety = -1; ...@@ -53,44 +53,44 @@ static const int NoSafety = -1;
bool check_channel_break( long val ); /*!< проверка обрыва провода */ bool check_channel_break( long val ); /*!< проверка обрыва провода */
bool check_jar( bool val ); /*!< реализация фильтра против дребезга */ bool check_debounce( bool val ); /*!< реализация фильтра против дребезга */
bool check_on_delay( bool val ); /*!< реализация задержки на включение */ bool check_on_delay( bool val ); /*!< реализация задержки на включение */
bool check_off_delay( bool val ); /*!< реализация задержки на отключение */ bool check_off_delay( bool val ); /*!< реализация задержки на отключение */
bool check_front( bool val ); /*!< реализация срабатывания по фронту сигнала */ bool check_front( bool val ); /*!< реализация срабатывания по фронту сигнала */
IOController_i::SensorInfo si; IOController_i::SensorInfo si;
UniversalIO::IOType stype; /*!< тип канала (DI,DO,AI,AO) */ UniversalIO::IOType stype; /*!< тип канала (DI,DO,AI,AO) */
IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */ IOController_i::CalibrateInfo cal; /*!< калибровочные параметры */
Calibration* cdiagram; /*!< специальная калибровочная диаграмма */ Calibration* cdiagram; /*!< специальная калибровочная диаграмма */
long breaklim; /*!< значение задающее порог определяющий обрыв (задаётся 'сырое' значение) */ long breaklim; /*!< значение задающее порог определяющий обрыв (задаётся 'сырое' значение) */
long value; /*!< текущее значение */ long value; /*!< текущее значение */
long craw; /*!< текущее 'сырое' значение до калибровки */ long craw; /*!< текущее 'сырое' значение до калибровки */
long cprev; /*!< предыдущее значение после калибровки */ long cprev; /*!< предыдущее значение после калибровки */
long safety; /*!< безопасное состояние при завершении процесса */ long safety; /*!< безопасное состояние при завершении процесса */
long defval; /*!< состояние по умолчанию (при запуске) */ long defval; /*!< состояние по умолчанию (при запуске) */
DigitalFilter df; /*!< реализация программного фильтра */ DigitalFilter df; /*!< реализация программного фильтра */
bool nofilter; /*!< отключение фильтра */ bool nofilter; /*!< отключение фильтра */
bool f_median; /*!< признак использования медианного фильтра */ bool f_median; /*!< признак использования медианного фильтра */
bool f_ls; /*!< признак использования адаптивного фильтра по методу наименьших квадратов */ bool f_ls; /*!< признак использования адаптивного фильтра по методу наименьших квадратов */
bool f_filter_iir; /*!< признак использования рекурсивного фильтра */ bool f_filter_iir; /*!< признак использования рекурсивного фильтра */
bool ignore; /*!< игнорировать при опросе */ bool ignore; /*!< игнорировать при опросе */
bool invert; /*!< инвертированная логика */ bool invert; /*!< инвертированная логика */
bool noprecision; bool noprecision;
PassiveTimer ptJar; /*!< таймер на дребезг */ PassiveTimer ptDebounce; /*!< таймер на дребезг */
PassiveTimer ptOnDelay; /*!< задержка на срабатывание */ PassiveTimer ptOnDelay; /*!< задержка на срабатывание */
PassiveTimer ptOffDelay; /*!< задержка на отпускание */ PassiveTimer ptOffDelay; /*!< задержка на отпускание */
bool jar_pause; bool debounce_pause;
Trigger trOnDelay; Trigger trOnDelay;
Trigger trOffDelay; Trigger trOffDelay;
Trigger trJar; Trigger trdebounce;
bool jar_state; /*!< значение для фильтра дребезга */ bool debounce_state; /*!< значение для фильтра антидребезга */
bool ondelay_state; /*!< значение для задержки включения */ bool ondelay_state; /*!< значение для задержки включения */
bool offdelay_state; /*!< значение для задержки отключения */ bool offdelay_state; /*!< значение для задержки отключения */
// Порог // Порог
...@@ -105,8 +105,8 @@ static const int NoSafety = -1; ...@@ -105,8 +105,8 @@ static const int NoSafety = -1;
enum FrontType enum FrontType
{ {
ftUnknown, ftUnknown,
ft01, // срабатывание на переход "0-->1" ft01, // срабатывание на переход "0-->1"
ft10 // срабатывание на переход "1-->0" ft10 // срабатывание на переход "1-->0"
}; };
bool front; // флаг работы по фронту bool front; // флаг работы по фронту
......
...@@ -20,35 +20,35 @@ bool IOBase::check_channel_break( long val ) ...@@ -20,35 +20,35 @@ bool IOBase::check_channel_break( long val )
return ( val < breaklim ); return ( val < breaklim );
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool IOBase::check_jar( bool val ) bool IOBase::check_debounce( bool val )
{ {
// нет защиты от дребезга // нет защиты от дребезга
if( ptJar.getInterval() <= 0 ) if( ptDebounce.getInterval() <= 0 )
{ {
jar_state = val; debounce_state = val;
return val; return val;
} }
if( trJar.change(val) ) if( trdebounce.change(val) )
{ {
if( !jar_pause ) if( !debounce_pause )
{ {
// засекаем время... // засекаем время...
jar_pause = true; debounce_pause = true;
ptJar.reset(); ptDebounce.reset();
} }
} }
if( jar_pause && ptJar.checkTime() ) if( debounce_pause && ptDebounce.checkTime() )
{ {
// пауза на дребезг кончилась // пауза на дребезг кончилась
// сохраняем значение // сохраняем значение
jar_state = val; debounce_state = val;
jar_pause = false; debounce_pause = false;
} }
// возвращаем ТЕКУЩЕЕ, А НЕ НОВОЕ значение // возвращаем ТЕКУЩЕЕ, А НЕ НОВОЕ значение
return jar_state; return debounce_state;
} }
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
bool IOBase::check_on_delay( bool val ) bool IOBase::check_on_delay( bool val )
...@@ -226,10 +226,10 @@ void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force ...@@ -226,10 +226,10 @@ void IOBase::processingAsDI( IOBase* it, bool set, SMInterface* shm, bool force
set ^= true; set ^= true;
// Проверяем именно в такой последовательности! // Проверяем именно в такой последовательности!
set = it->check_jar(set); // фильтр дребезга set = it->check_debounce(set); // фильтр дребезга
set = it->check_on_delay(set); // фильтр на срабатывание set = it->check_on_delay(set); // фильтр на срабатывание
set = it->check_off_delay(set); // фильтр на отпускание set = it->check_off_delay(set); // фильтр на отпускание
set = it->check_front(set); // работа по фронту (проверять после jar_xxx!) set = it->check_front(set); // работа по фронту (проверять после debounce_xxx!)
{ {
uniset_rwmutex_wrlock lock(it->val_lock); uniset_rwmutex_wrlock lock(it->val_lock);
...@@ -409,8 +409,8 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm, ...@@ -409,8 +409,8 @@ bool IOBase::initItem( IOBase* b, UniXML_iterator& it, SMInterface* shm,
b->value = b->defval; b->value = b->defval;
b->breaklim = it.getIntProp("breaklim"); b->breaklim = it.getIntProp("breaklim");
long msec = it.getPIntProp("jardelay", UniSetTimer::WaitUpTime); long msec = it.getPIntProp("debouncedelay", UniSetTimer::WaitUpTime);
b->ptJar.setTiming(msec); b->ptDebounce.setTiming(msec);
msec = it.getPIntProp("ondelay", UniSetTimer::WaitUpTime); msec = it.getPIntProp("ondelay", UniSetTimer::WaitUpTime);
b->ptOnDelay.setTiming(msec); b->ptOnDelay.setTiming(msec);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment