.. _ref_devvar: Переменные контроллера ---------------------- В каждом контроллере, который содержит FBD-программу содержится определенный набор переменных, который зависит от типа контроллера. Эти переменные делятся на группы: .. toctree:: device_ain device_aout device_din device_dout dev_var_universal dev_var_diag * Состояние устройства * Параметры порта Все переменные устройства можно использовать в главной схеме FBD-программы, так-же, как и локальные переменные. Вставлять переменные контроллера в макросхемы запрещено. Входы и выходы ============== Переменные, описывающие входы и выходы устройства. Их количество и тип данных, для аналоговых переменных, зависит от типа контроллера. Блоки, создаваемые для чтение или записи этих переменных имеют следующий вид: **Аналоговый вход:** .. figure:: image/ain.png :align: center **Дискретный вход:** .. figure:: image/din.png :align: center **Аналоговый выход:** .. figure:: image/aout.png :align: center **Дискретный выход:** .. figure:: image/dout.png :align: center **Универсальный входы:** .. figure:: image/uin.png :align: center В свойствах блоков входов/выходов на сцене можно включить симуляцию. Этот параметр позволяет отключать физические входы и выходы контроллера и управлять ими через панель симулятора. Параметры порта =============== Переменные для управления параметрами порта контроллера, а так же адресом контроллера. **Адрес контроллера** - эта переменная содержит текущий адрес контроллера, по которому к нему может обращаться мастер. Так же как и локальная переменная, эта переменная имеет настройку сетевого доступа и флаг сохранения в ПЗУ. В случае, если необходимо запретить изменение этого параметра извне, необходимо установить значение сетевого доступа "нет" или "чтение". По умолчанию сетевой доступ равен "чтение/запись", флаг записи в ПЗУ установлен. Использование этой переменной на схеме происходит так же, как и использование локальных переменных. **Параметры порта** - эта переменная определяет параметры порта устройства. Для Modbus RTU это скорость и четность порта. Тип данных переменной - ``Беззнаковый целый 1-байт``. Формат переменной: старшая тетрада - четность порта * 0 - нет/none * 1 - нечет/odd * 2 - чет/even * 3 - метка/mark * 4 - пробел/space младшая тетрада - скорость порта * 0 - 9600 * 1 - 2400 * 2 - 4800 * 3 - 9600 * 4 - 19200 * 5 - 38400 * 6 - 57600 * 7 - 115200 Например, если переменная имеет значение 0x23, то параметры порта следующие 9600-чет. Список поддерживаемых скоростей и чётностей может отличаться у различных устройств. Так же как и для адреса, для этих переменных можно установить свойства, запрещающие изменять параметры порта. По умолчанию сетевой доступ равен "чтение/запись", флаг записи в ПЗУ установлен. Состояние устройства ==================== В этой группе располагаются переменные для привлечения внимания конечного пользователя к внутренней проблеме контроллера, приводящей к ограничению его работоспособности, и требующей немедленного вмешательства обслуживающего персонала. Нулевое значение переменных является признаком отсутствия каких-либо проблем. Ненулевое значение сигнализирует наличие проблемы, с соответствующим кодом. Привлечение внимания достигается путем периодических импульсов светодиода или подсветки экрана (вспышек полной яркости). Длительность каждой вспышки 150мс, затем пауза 350мс, т.е. вспышки следуют 2 раза в секунду. Количество импульсов (вспышек) соответствует значению переменной, т.е. коду ошибки. После окончания вспышек делается пауза на 2 секунды, затем, если код ошибки ненулевой, вспышки повторяются. Если код ошибки меняется, или сбрасывается в 0 до окончания серии вспышек, вспышки продолжаются независимо, в соответствии с исходным кодом, до окончания отсчета. Имеются 2 независимых друг от друга переменных для отображения состояния аппаратуры и правильности работы программного обеспечения контроллера: 1) **Код ошибки программы** - записывается прикладным ПО (FBD-программой), для отображения проблем внешних устройств (систем), которые ПО может обнаружить, например разрыв или К.З. аналоговых входов, ошибочные значения любых переменных и прочее, к чему требуется привлечь внимание конечного пользователя. Коды ошибок полностью определяются прикладным ПО и должны соответственно документироваться автором прикладного ПО. При наличии одновременно нескольких ошибок рекомендуется либо фиксировать более раннюю, аналогично **Ошибке ядра**, либо выбирать более важную, если это возможно. 2) **Код ошибки ядра** - устанавливается в ненулевое значение в случае обнаружения ядром (программным обеспечением изготовителя контроллера) неустранимой внутренней проблемы контроллера, требующей вмешательства персонала, обслуживающего контроллер. Коды ошибок расшифрованы в табл. ниже. Прикладное ПО (FBD-программа) может записывать в эту переменную 0, сбрасывая таким образом ошибку, в некоторых случаях, указанных в таблице. При наличии одновременно нескольких ошибок фиксируется возникшая раньше, а более поздние игнорируются. **Ошибка ядра** является более приоритетной, т.е. при ненулевых значениях обеих переменных отображается именно она. Визуальное отличие **Ошибки ядра** от **Ошибки программы** - **Ошибка ядра** выполняется двойными вспышками, т.е. вместо одной вспышки в течение 150мс делается 2 коротких вспышки по 50мс. Общие коды описаны в разделе :ref:`ref_errcode` Переменную **Код ошибки ядра** рекомендуется использовать в схеме для анализа ошибок. При отсутствии этой переменной программа при проверке будет выдавать предупреждение. По умолчанию сетевой доступ к переменной установлен в "чтение/запись". Кроме переменных, отображающих ошибки, в этой группе могут содержаться дополнительные переменные. Их состав зависит от модели контроллера. **Показать сист. меню** - управляет отображением системного меню для контроллера с дисплеем. Для активации меню необходимо записать значение 1. **Запись в ПЗУ отложена** - используется для информировании об отложенной записи в ПЗУ контроллера. При частой записи переменных, сохраняемых в ПЗУ, в связи с ограничением количества перезаписи, контроллер может откладывать запись переменных в память на некоторое время. Эту информацию можно использовать в алгоритме работы и для предупреждения пользователя о слишком частых изменениях переменных. **Подключение к WiFi** - указывает наличие подключения контроллера к сети WiFi. Информация ========== В этой группе располагаются переменные для определения версии и модели контроллера. * **Версия** и **Сборка** - номер версии и сборки ядра контроллера * **Модель** - код модели контроллера (дополнительную информацию можно получить у производителя) * **Версия ниж. модуля** и **Сборка ниж. модуля** - версия и номер сборки подчиненного модуля, для контроллеров, имеющих в своем составе несколько плат. Клавиатура ========== Этот раздел присутствует у контроллеров, которые имеют клавиатуру. Для каждой кнопки есть своя переменная. Эта переменная доступна только на чтение и выдает значение 1 на один такт программы, при нажатии на соответствующую кнопку. * **Время неактивности** - содержит время в мсек, прошедшее с последнего нажатия на любую кнопку или сенсорный дисплей контроллера. Эта переменная используется ядром контроллера для перехода в режим пониженной яркости индикатора. * **Клавиши побитно** - сборная переменная состояния всех кнопок контроллера. Номер бита соответствует порядку переменных в списке (см. рисунок ниже). .. figure:: image/key.png :align: center На приведенном рисунке кнопка **Отмена** будет располагаться в 0 бите, кнопка **Вверх** - в первом и т.д. В отличии от обычных переменных кнопок, биты в переменной **Клавиши побитно** остаются установленными, пока происходит удержание кнопки. Поэтому с помощью этой переменной можно реализовать алгоритм обработки кнопок, который учитывает длительность её нажатия. Часы ==== Этот раздел присутствует у контроллеров, имеющих встроенные часы реального времени. * Переменные **Год**, **Месяц**, **День**, **День недели**, **Час**, **Минута**, **Секунда** отображают текущее значения даты и времени. Значение года хранится в виде двузначного числа. Например значение 24 означает 2024 год. Дни недели хранятся в виде числа, где 1 - понедельник, 2 - вторник и т.д. * **Часовой пояс** - установка часового пояса для часов, задается в минутах. Например, для Москвы нужно установить значение 180 (+3 часа). * **Частота часов** - значение частоты часового кварца в Гц, используется для оценки стабильности работы часов. * **Время цикла** - время выполнения одного цикла программы FBD. Зависит от производительности контроллера и размера программы. * **Ручная подстройка хода часов** - позволяет ввести коррекцию в ход часов. Единица измерения - сек на 100 дней. Например часы отстают за 10 дней на 5 сек. Следовательно за 100 дней они отстанут на 50 сек, поэтому значение переменной устанавливаем в 50. Если часы спешат, то вводится отрицательное значение.