.. _rst-linking-scheduler: Расписание ---------- .. figure:: image/scheduler1.png :align: center Этот шаблон используется для создания расписания. Расписание позволяет менять значения переменных по заданному веремени и дням недели. Его можно представить в виде таблице, которая хранится в ПЗУ контроллера. В ячейках этой таблицы располагаются данные о времени срабатывания, активности таймера и отдельных переменных, а так же значения переменных, которые нужно установить при срабатывании таймера. +---------------+--------+----------+----------+-----------+-----------+-----------+-----------+ | |**days**| **hh** | **mm** | **status**| **active**| **Var1** | **Var2** | +---------------+--------+----------+----------+-----------+-----------+-----------+-----------+ | **Таймер1** | 7F | 10 | 00 | 1 | 1 | 1 | 1 | +---------------+--------+----------+----------+-----------+-----------+-----------+-----------+ | **Таймер2** | 7F | 11 | 30 | 1 | 1 | 25 | 3 | +---------------+--------+----------+----------+-----------+-----------+-----------+-----------+ | **Таймер3** | 01 | 12 | 15 | 0 | 3 | 30 | 4 | +---------------+--------+----------+----------+-----------+-----------+-----------+-----------+ | **Таймер4** | 07 | 19 | 00 | 3 | 3 | 1 | 7 | +---------------+--------+----------+----------+-----------+-----------+-----------+-----------+ Параметр **Количество таймеров** задаёт количество строк этой таблицы. Служебные переменные, которые нельзя удалить или отредактировать: * **days** - дни недели, в которые исполняется таймер, задается побитно. бит 0 - понедельник, бит 1 - вторник и т.д. * **hh** - значение часа; * **mm** - значение минут; * **active** - активность параметров - служебная переменная для контролов редактирования расписания; * **status** - статус таймера. Переменная **status** используется для активации таймера. Нулевой бит устанавливает использование таймера, первый бит - активность таймера. Таким образом, чтобы таймер сработал, значение в переменной должно быть равно 3. Бит активности таймера используется в контролах редактирования расписания. Пользовательские переменные могут быть добавлены в расписание в неограниченном количестве. .. figure:: image/scheduler2.png :align: center Для редактирования доступны следующие свойства: имя, описание, тип данных и начальное значение. Переменные расписания являются глобальными, с ними можно работать так-же как и с обычными `глобальными переменными`_. При использовании этих переменных в FBD программе необходимо помнить, что они являются массивами, размер которого определяется параметром **"Количество таймеров"**. Для того, чтобы "вытащить" переменную расписания на FBD схему, нужно выделить в навигации проекта элемент "Расписание" и перетащить нужную переменную из списка, который отображается под навигаторм проекта. (см. рисунок ниже). .. _scheduler_navigator: .. figure:: image/scheduler3.png :align: center Переменные расписания Использовать переменные расписания в FBD-программе имеет смысл только тогда, когда нужно реализовать свой собственный алгоритм редактирования и выполнения расписания. В большинстве случаев можно использовать готовые решений - шаблонный блок и контролы для редактирования расписания. Более подробно контролы описаны в разделах `Расписание`_ и странице `визуализации HMI`_. Если вы хотите организовать заполнение расписание вручную, то для этого необходимо установить значения служебных переменных и параметров для каждого активного таймера. Для того, чтобы таймер сработал, нужно в переменной **status** установить оба бита - 0 и 1. В переменной **active** необходимо установить биты активности соответствующих параметров. Например, для срабатывания параметра1 - бит 0, параметра 2- бит1 и т.д. Порядок параметров не зависит от их названия, его можно определить либо по порядку расположения выходов шаблонного блока расписания или по порядку отображения в обозревателе объектов. На рисунке :ref:`scheduler_navigator` порядок параметров следующий - Влажность, Работа, Температура. Все переменные расписания являются сетевыми и хранимыми в ПЗУ. Посмотреть и установить значения адресов можно в диалогах `Сетевые переменные`_ и `Переменные ПЗУ`_. При расстановки адресов Modbus рекомендуется делать непрерывный диапазон для всего расписания, для ускорения процесса чтения/записи по сети. .. figure:: image/scheduler4.png :align: center .. _визуализации HMI: HMI_schedule.html .. _Сетевые переменные: slave.html .. _Переменные ПЗУ: rom_simulation.html .. _глобальными переменными: global_vars.html .. _Расписание: display_panel_scheduler.html Шаблонный блок расписания ~~~~~~~~~~~~~~~~~~~~~~~~~ Для работы расписания в FBD-программу необходимо перетащить его из дерева Навигатора проекта на FBD-схему. .. figure:: image/scheduler6.png :align: center Если в свойствах блока установлено свойство **Исп. текущее время**, то для выполнения таймера используются внутренние часы контроллера. Если этот флаг убрать, то у блока появятся дополнительные входы для установки текущего времени. .. figure:: image/scheduler5.png :align: center Входы блока: * **en** - активирует работу расписания; * **Час** - значение часов контроллера; * **Минуты** - значение минут контроллера; * **День** - день недели; Выходы блока: * **rdy** - на этом выходе появляется значение 1 на один такт программы в том случае, когда срабатывает какой-либо таймер расписания; * **Параметры1**, **Параметр2** ... - на этих выходах появляется значение Параметра1, Параметра2 и т.д.; * **rdy0**, **rdy1** ... - на этих выходах появляются значения на 1 такт программы, при срабатывании активного Параметра1, Параметра2 и т.д. Выходы **rdy0**, **rdy1**, ... можно использовать для записи значения конкретного параметра таймера. Работа расписания происходит следующим образом. Один раз в минуту происходит проверка активных таймеров на совпадение времени и дней недели, которые беруться из часов контроллера или с ножек блока. При совпадении времени на выходы блока подаются значения параметров, установленных пользователем, а так же соответствующие сигналы **rdy**. Полученные значения можно сохранить в локальные или глобальные переменные для дальнейшего использования в алгоритме работы программы. **Внимание!!!** Для фиксации значений необходимо использовать именно сигналы **rdy0**, **rdy1** и т.д. Использования расписания ~~~~~~~~~~~~~~~~~~~~~~~~ Рассмотрим пример использования расписания в проекте с контроллером М245. Для начала работы добавляем шаблон расписания к контроллеру. .. figure:: image/scheduler_start1.png :align: center В окне редактирования шаблона устанавливаем количество таймеров расписания и добавляем переменные, которые нужно изменять при срабатывания таймера. Для примера добавим две переменные: **Включение** и **Температура**. Для переменных необходимо установить тип данных. Для **Температуры** выбираем дробный тип, для **Включения** - однобайтовый беззнаковый. .. figure:: image/scheduler_start4.png :align: center Логические типы данных в расписании не поддерживаются, так как такие переменные не могут быть массивами. На этом настройка шаблона расписания закончена, необходимо теперь добавить компоненты, позволяющие редактировать и выполнять его. Для редактирования расписания в контроллерах с индикатором можно использовать контрол `Расписание`_. Открываем редактор экрана контроллера и вытаскиваем контрол из панели инструментов. После добавления необходимо в контроле указать шаблон расписания, который он будет редактировать и отображать. .. figure:: image/scheduler_start2.png :align: center Выбор шаблона расписания После этого контрол расписания готов к работе. Более подробное его описание можно посмотреть в справке. Кроме компонента для графического дисплея, существует компонент для редактирования расписания, который используется в проектировании экранов HMI для мобильной платформы. Более подробно работа с ним описана в разделе `визуализации HMI`_. Теперь добавим компонент для использования расписания в программе. Для этого вытаскиваем шаблонный блок, как описано в разделе выше, на схему. Создаем в схеме две локальные переменные : Включение и Температура. Добавляем на схему два блока условной записи этих переменных и подключаем их шаблонному блоку расписания, как показано на рисунке. На вход **en** блока расписания подаем значение 1, чтобы активировать его работу. .. figure:: image/scheduler_start3.png :align: center На этом настройка расписания закончена. Теперь с помощью контрола на экране мы можем активировать нужное количество таймеров, задать в них время и дни выполнения, а так же указать значения переменных. При срабатывании нужного таймера соотвествующие значения из таблицы, сохраненной в ПЗУ контроллера, будут записаны в локальные переменные FBD программы.