Глобальные переменные ===================== Глобальные переменные работают почти так же, как и обычные переменные контроллера. Одно из отличий заключается в том, что глобальные переменные являются общими для всех макросов контроллера. Список глобальных переменных находится в :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:`Обозревателя проекта` в нужное место на сцене: Свойства блока для глобальной переменной аналогичны свойствам блока локальной переменной, за исключением одного параметра - **Показывать полный путь**. Если этот флаг установлен, то к названию переменной внутри блока будет дописано имя группы, в которой она находится. Если глобальная переменная имеет размер массива 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