Commit cc92ac94 authored by Pavel Vainerman's avatar Pavel Vainerman

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

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