Часть алгоритма, повторяющаяся в проекте несколько раз, может быть выделена в новый (составной) функциональный блок. Обычно это упрощает отладку и модификацию этой части алгоритма, а также уменьшает время трансляции проекта. Составной блок при трансляции превращается в класс. Составные блоки можно создавать как в проектах, так и в библиотеках. Чтобы создать новый составной блок, необходимо выполнить следующее:
- Создание в проекте: создать Группу типов в узле Библиотеки, имя группы должно содержать только латинские буквы, цифры и _.
Создание в библиотеке: создать Группу типов с любым именем. - Создать в этой группе Тип.
- Задать ему свойства: Имя типа (это имя класса, который будет создан при трансляции, должно быть уникально в проекте) и Имя.
- Создать содержимое нового типа блока.
Создание функционального блока, состоящего из других функциональных блоков необходимо:
- Добавить в этот Тип страницы с блоками, реализующими алгоритм. Страницы можно скопировать из основного алгоритма проекта. При этом если необходимо, чтобы связи между блоками на разных страницах сохранились, копировать страницы надо вместе (например, выделив их в дереве).
- Чтобы вход/выход внутреннего блока назначить как вход/выход составного, необходимо в контекстном меню выбрать команду Сделать внешним. Он станет принадлежать обоим блокам, внутреннему и типу.
Cоздание функционального блока, алгоритм которого должен быть описан при помощи кода необходимо:
- Добавить блоку свойство Язык кода блока, выбрав соответствующий язык (C++/ST).
- Для редактирования кода в Полигоне есть окно Редактор, которое открывается автоматически при двойном нажатии ЛКМ на блоке в дереве проекта.
- Добавить входы и выходы
В Тип можно добавлять собственные входы и выходы, при этом важно правильно задать для них некоторые свойства:
- Имя переменной - переменная класса, соответствующая этому входу/выходу, имя должно быть уникальным в пределах класса
- Индекс типа данных - это индекс соответствующего типа из раздела Библиотеки-Типы данных. В разделе находим интересуюший нас тип данных и в его свойствах в поле "Индекс" будет нужное значение. Далее это значение подставляем в свойство "Индекс типа данных" соответствующего входа или выхода. Если в библиотеке нет подходящего типа данных, его можно скопировать из основной библиотеки.
- для входов Тип связей - определяет правила, по которым разрешается связывать этот вход:
- 0 - можно провести связь или задать константу (переменная - указатель)
- 1 - связь проводить нельзя, вход константный (переменная - не указатель)
- 2 - нельзя задать константу, можно провести связь, но она не обязательна (при отсутствии связи на вход будет передан 0, переменная - указатель)
- 3 - нельзя задать константу, можно провести связь, и она обязательна (при отсутствии связи при трансляции будет выдана ошибка, переменная - указатель)
- для выходов Указатель: 1 - признак того, что переменная является указателем, 0 - обычный выход
Возможно несколько вариантов:- Простой массив состоит из одного входа или выхода. Имя переменной входа/выхода определяется именем массива. Например, если массив имеет Имя - arr, то Имя переменной его входа/выхода - arr[%1]
- Массив структур состоит из нескольких входов или выходов. Имя структуры задается свойством Имя типа. Имя переменной входа/выхода определяется именем массива и именем переменной внутри структуры, например, arr[%1].in.
- Массивы входов и выходов могут быть объединены в группу, тогда при использовании блока количество входов и выходов будет поддерживаться одинаковым автоматически. Для этого обоим массивам надо задать свойство Принадлежит к группе с одинаковым значением (например, 1).