Таймер
^^^^^^

.. figure:: image/fbd/fbd_block_timer1.png
   :align: center

**Описание:** Выдает на выход **1** с заданным интервалом многократно, или однократно после установки разрешающего сигнала. Вход ``еn`` – разрешение работы таймера, при установленной **1** – выдача **1** на выходе разрешена, при **0** – запрещена. Вход ``interval`` задает период выдачи **1** на выходе.

Выход равен **1**, если соблюдены все следующие условия:

* вход ``en`` равен **1** в течение времени, в миллисекундах, не меньшего, чем значение на входе ``interval``, сохраненное на шаге переднего фронта входа ``en``,
* значение выхода на предыдущем шаге выполнения было **0**,
* со времени выдачи предыдущей **1** или переднего фронта входа ``en`` на выходе прошло время, в миллисекундах, не меньшее, чем значение на входе ``interval``, запомненное в шаге предыдущей **1** или переднего фронта входа ``en``.

Циклограмма работы блока :guilabel:`Таймер`:

.. figure:: image/fbd/fbd_cycle_timer.png
   :align: center

**Свойства блока:**

**Общие свойства:** см. Редактирование свойств блока.

**Однократно:**
 
**1** выдается только в «одиночном» режиме, т.е. течение одного шага! Между соседними **1** в течение, как минимум, одного шага, гарантированно выдается **0**. Опция ``Однократно`` указывает, что выдача **1** будет выполняться только один раз, после каждого переднего фронта входа ``en``. Иначе 1 будут выдаваться многократно. Все блоки-таймеры проекта используют один аппаратный «базовый» таймер устройства, настраиваемый на определенный постоянный интервал срабатывания. Интервал срабатывания базового таймера указывается в свойствах проекта. Переменная – признак срабатывания базового таймера устанавливается перед выполнением каждого шага вычисления схемы, при этом, если на предыдущем шаге была **1**, то на этом шаге устанавливается **0**, независимо от времени. Для отсчета времени каждый блок использует внутреннюю переменную-счетчик.

**Единицы измерения** - задает единицы измерения времени на входе `interval`. Доступны три варианта - **мсек**, **сек**, **мин**. Выбранное значение отображается в виде суффикса на входе.

Алгоритм выполнения блока:

* если признак срабатывания базового таймера равен **0** – выдать **0**, закончить выполнение,
* если вход ``en`` равен **0** – выдать **0**, записать в переменную-счетчик значение ``Interval`` / (Интервал базового таймера), закончить выполнение,
* уменьшить переменную-счетчик на 1,
* если переменная-счетчик равна **0** – выдать **1** и, если свойство ``Однократно`` **не** установлено – записать в переменную-счетчик значение ``Interval`` / (Интервал базового таймера) для следующего срабатывания.