Глобальные переменные ===================== Глобальные переменные работают почти так же, как и обычные переменные контроллера. Одно из отличий заключается в том, что глобальные переменные являются общими для всех макросов контроллера. Список глобальных переменных находится в :guilabel:`Обозревателе проекта` внутри шаблона контроллера и называется ``Глобальные переменные``. По двойному нажатию на этот элемент откроется окно :guilabel:`Глобальные переменные` : .. figure:: image/global_var1.png :align: center В верхней части окна расположена панель инструментов со следующими кнопками: * ``Добавить`` - добавление новой переменной (если выделена группа, новая переменная будет добавлена в нее); * ``Добавить группу`` - добавление группы переменных для удобства представления или хранения данных в виде структуры: * ``Удалить`` - удаляет переменную, если выбрана переменная, или группу со всеми переменными, входящими в нее; * ``Переименовать`` - команда устанавливает имя группе переменных по определенному шаблону, заданному в диалоговом окне (см. описание ниже); * ``Свойства`` - открытие диспетчера свойств для одной или нескольких выделенных переменных; * ``Кнопка со стрелками`` - служит для быстрого сворачивания/разворачивания групп. * ``Импорт`` - импорт переменных; * ``Экспорт`` - экспорт всех переменных; Экспорт переменных производится в двух форматах: xml и csv. При экспорте в XML создается файл специального формата, который потом можно импортировать в список глобальных переменных другого шаблона. При таком импорте все переменные, хранящиеся в импортируемом файле будут добавлены к существующим переменным. При экспорте в формате csv создается тестовый файл, в котором в табличном виде представлены все переменные и свойства. Просмотр этого файла возможен в любом тестовом редакторе или в Excel. Импорт из формата csv невозможен. .. figure:: image/group_rename.png :align: center Диалог группового переименования Двойным щелчком мыши по строке с переменной (или группой) открывается окно :guilabel:`Свойств переменной`, где можно задать ее название, тип и т.д.: .. figure:: image/global_var2.png :align: center Все свойства соответствуют таковым в обычной переменной, за одним исключением - поле ``Размер массива``. Переменная может быть массивом, если указать размер больше единицы. И тогда к ней можно будет обращаться по индексу в блоках чтения и записи. Также, размер массива можно устанавливать и для групп. Для добавления глобальной переменной на сцену FBD-программы необходимо выделить элемент проекта ``Глобальные переменные``, затем перетащить нужную переменную из области в нижней части :guilabel:`Обозревателя проекта` в нужное место на сцене: Блок чтения/записи глобальной переменной имеет следующие свойства: * **Показывать полный путь** - к названию переменной внутри блока будет дописано имя группы, в которой она находится * **Алгоритм приоритета записи** - выбирает способ работы с параметром **Приоритет записи** Есть три варианта алгоритма: * **Входа нет, использовать свойства** - приоритет задается свойством * **Использовать вход "prio"** - приоритет задается на входе блока **prio** * **Использовать вход, показ. выход для след. блока** - приоритет задается на входе блока **prio**, в блоке появляется дополнительный выход **next_prio**, на который выдается значение входного приоритета увеличенного на единицу. .. figure:: image/global_var_block1.png :align: center Блок записи со входом prior .. figure:: image/global_var_block2.png :align: center Блок записи с выходом next_prior Вход приоритета можно использовать в том случае, если блоки записи располагаются в макросах и необходимо "вытащить" значение приоритета на его вход. Выход **next_prio** удобен при наличии нескольких блоков записи одной переменной, позволяет задать им последовательный порядок записи в переменную. **!!!Внимание** На вход приоритета допускается устанавливать только константу. Остальные свойства блока аналогичны блокам чтения/записи локальных переменных. Если глобальная переменная имеет размер массива 1, то блок чтения/записи будет таким же, как и для локальной переменной. Если установить значение размера массива больше единицы (или если переменная находится в группе со значением размера массива больше единицы), то у блока появляется набор входов, для выбора индекса. Эти входы обозначаются **с0**, **с1** и т.д. .. figure:: image/global_var3.png :align: center Многомерный массив возникает в том случае, если и у переменной и у группы, к которой эта переменная принадлежит, свойство **Размер массива** больше единицы. Вход c0 относится к индексу переменной, вход с1 - индекс группы. .. figure:: image/global_vars2.png :align: center Массивы и группы нужны для упрощения создания переменных для однотипных объектов. Возьмем, к примеру, несколько одинаковых контроллеров, у которых есть набор переменных: температура, влажность, содержание CO2. Контроллер, который является мастером для них должен собирать эту информацию и затем отображать на индикаторе или хранить для дальнейшего использования. С помощью групп и массивов это можно сделать следующим образом: *1.* Создаем группу глобальных переменных; *2.* Устанавливаем группе размер массива (например, 5): .. figure:: image/global_var10.png :align: center *3.* Создаем схему для чтения данных из устройства и записи значений в глобальные переменные: .. figure:: image/global_var11.png :align: center Переменная :guilabel:`Address` содержит адрес устройства. Этот адрес подается на блок чтения Modbus и на индексный вход блока записи переменной. *4.* Теперь можно читать данные из этих переменных с помощью блока чтения, подавая на вход индекса константу или динамическое значение: .. figure:: image/global_var12.png :align: center