53 lines
2.1 KiB
C++
53 lines
2.1 KiB
C++
/*
|
||
* ReversCounter.hh
|
||
*
|
||
* Created on: 20 мая 2021 г.
|
||
* Author: sozonov
|
||
*/
|
||
|
||
#ifndef UMLIBRARY_APPLICATION_SCHEMATIC_REVERSCOUNTER_HH_
|
||
#define UMLIBRARY_APPLICATION_SCHEMATIC_REVERSCOUNTER_HH_
|
||
|
||
#include "../ISetupStep.hh"
|
||
|
||
#include "../../schematic/CallBackReversCounter.hh"
|
||
|
||
namespace application { namespace schematic {
|
||
|
||
//todo: Не используем тавталогию при именовании.
|
||
//!Реверсивный счётчик. По достижению одной из границ значение счётчика становится равным значению другой границы. Напрявление счёта, значение сброса и верхняя граница задаются через настройки.
|
||
struct ActionCounter : public ISetupStep {
|
||
|
||
typedef systemic::IFunctor<void> Action;
|
||
|
||
//Входы
|
||
Action * border_cross = nullptr; //!Сигнал о переходе через верхнюю либо нижнюю границу.
|
||
|
||
bool input( Environment & env );
|
||
void build( Environment & env );
|
||
|
||
struct Links {
|
||
Environment::Id border_cross; //!<Действие при переходе через границу.
|
||
|
||
Environment::Id count; //!<Выполнение шага счёта.
|
||
Environment::Id reset; //!<Сброс счётчика.
|
||
Environment::SignalId value; //!<Текущее значение счётчика.
|
||
};
|
||
|
||
//!Начальные значения.
|
||
struct Setting {
|
||
unsigned int direction; //!<Направление счета: 0 - положительное, 1 - отрицательное.
|
||
unsigned int module; //!<Модуль счёта.
|
||
unsigned int reset_value; //!<Значение по сбросу.
|
||
};
|
||
|
||
const Links & links;
|
||
const Setting & setting;
|
||
|
||
ActionCounter( const Links & links, const Setting & setting ) :
|
||
links(links), setting(setting) {}
|
||
};
|
||
|
||
}}
|
||
#endif /* UMLIBRARY_APPLICATION_SCHEMATIC_REVERSCOUNTER_HH_ */
|