Возможности пользовательской конфигурации

Создание составного блока

Часть алгоритма, повторяющаяся в проекте несколько раз, может быть выделена в новый Составной функциональный блок. Обычно это упрощает отладку и модификацию этой части алгоритма, а также уменьшает время трансляции проекта. Составной блок при трансляции превращается в класс. Составные блоки можно создавать как в пользовательских проектах, так и в пользовательских библиотеках.

О защите пользовательского составного блока подробнее можно прочитать в разделе.

Для того, чтобы создать составной функциональный блок в проекте, следует создать Группу типов в узле Библиотеки в дереве проекта.

Внимание
Имя Группы типов должно содержать только латинские буквы, цифры и «_». Если оставить поле ввода имени пустым, то оно будет назначено автоматически по шаблону b<индекс>.
Graphic
Graphic

Для того чтобы создать функциональный блок в пользовательской библиотеке следует открыть необходимую библиотеку в представлении Дерево и создать в ней Группу типов с любым именем.

О создании пользовательской библиотеки подробнее можно прочитать в разделе.

Graphic
Graphic

Теперь в новой группе типов следует создать Тип. При создании типа указывается Имя типа – имя класса, который будет создан при трансляции.

Внимание
Имя типа должно быть уникально в проекте и может содержать только латинские буквы, цифры и «_». Если оставить поле ввода имени пустым, то оно будет назначено автоматически по шаблону b<индекс>.
Graphic
Graphic

На данном этапе был создан класс (Тип) нового функционального блока. Теперь можно реализовать алгоритм, который будет выполняться экземплярами класса функционального блока в проекте.

Создание составного блока из функциональных блоков

В проекте можно создать составной функциональный блок с алгоритмом, составленным из функциональных блоков. Пример – блок, возвращающий значение линейной функции y = kx + b. Для создания составного блока следует:

  1. Создать Тип.

  2. Создать Страницу в Типе.

    Graphic
    Тип в дереве проекта
    Graphic
    Создание Страницы в Типе

    На страницах Типа реализуется алгоритм блока.

    Страницы в Тип можно скопировать из проекта. Если необходимо, чтобы связи между блоками на разных страницах сохранились, копировать страницы следует вместе, выделив их в дереве с зажатым Shift.

  3. Создать на новой странице блоки Mul и Add из библиотеки paCore и соединить их, как показано на рисунке ниже.

    Graphic
    Алгоритм работы составного блока
  4. Назначить внутренние входы/выходы блоков как внешние входы/выходы составного блока.

    Для этого следует в контекстном меню нужного входа/выхода выбрать команду Сделать внешним – вход/выход станет одновременно принадлежать и внутреннему блоку, и Типу. Входы/выходы внутренних блоков, назначенные внешними, подкрасятся желтым и на Странице, и в Дереве.

    Примечание

    Рекомендуется входы/выходы составного блока, которые необходимо назначить внешними, выводить на терминальные блоки (типа Trans). Терминальные блоки повторяют значения своих входов на выходах. Таким образом, если возникнет необходимость изменить компоненты составного блока, когда он уже будет добавлен в проект, не потребуется повторно выполнять проведение связей.

    Graphic
    Назначение внешними входов/выходов составного блока
    Graphic
    Внешние входы/выходы составного блока
  5. Транслировать проект для проверки корректности созданного типа. После сообщения об успешной трансляции (Трансляция завершена) экземпляры нового типа можно создавать на страницах проекта.

Создать экземпляр составного блока в проекте можно двумя способами:

  1. Перетащить блок из Дерева проекта или библиотеки на Страницу проекта и выбрать Создать в контекстном меню.

    Graphic
    Добавление пользовательского составного блока в проект
  2. На пустом месте Страницы щелкнуть ПКМ – Создать и выбрать необходимый блок в разделе Библиотека проекта, нажать ОК.

    Graphic
    Добавление пользовательского составного блока в проект

На графическом отображении составных блоков на страницах проекта изображается знак #, что означает, что данный блок – составной.

В дереве проекта или библиотеки Тип, экземпляр которого был создан на странице проекта, подсветится желтым.

Graphic
Составной блок в проекте
Graphic
Работа составного блока

Создание составного блока на C++

В проекте можно создать составной функциональный блок с алгоритмом, написанным на C++. Пример – блок RS-триггера с приоритетом по сбросу. Для создания составного блока с алгоритмом на C++ следует:

  1. Создать Тип.

  2. Создать внешние входы/выходы типа через контекстное меню Типа командой Создать. В появившемся окне следует выбрать вход типа или выход типа и ввести Имя входа/выхода.

    Внимание
    Имя входа или выхода должно содержать только латинские буквы, цифры и «_». Если оставить поле ввода имени пустым, то оно будет назначено автоматически по шаблону b<индекс>.
    Graphic
    Graphic
    Graphic
  3. Задать свойства добавленным входам/выходам.

    Свойства входов/выходов типа

    Свойство

    Описание

    Имя

    Отображается как имя входа/выхода блока

    Имя переменной

    Переменная класса, соответствующая этому входу/выходу. Имя должно быть уникальным в пределах класса

    Номер

    Определяет положение входа/выхода в дереве и в составном блоке

    Комментарии

    Отображается у входа/выхода в дереве и у составного блока

    Индекс типа данных

    Индекс типа данных входа/выхода из раздела Библиотеки/Типы данных

    Тип связей

    Для входов определяет правила, по которым разрешается проводить связи на данный вход:

    0 – можно провести связь или задать константу (переменная – указатель);

    1 – связь проводить нельзя, вход константный (переменная – не указатель);

    2 – нельзя задать константу, можно провести связь, но она не обязательна (при отсутствии связи на вход будет передан 0, переменная – указатель);

    3 – нельзя задать константу, можно провести связь, и она обязательна (при отсутствии связи при трансляции будет выдана ошибка, переменная – указатель)

    Указатель

    Для выходов:

    Установлен флаг – признак того, что переменная является указателем;

    Не установлен флаг – обычный выход

    Примечание
    По умолчанию добавляемые выходы не являются указателями, если необходимо соответствующее свойство можно добавить в разделе Свойства.
  4. Для того, чтобы задать тип данных входа/выхода, следует:

    1. Найти нужный тип данных в разделе Библиотеки/Типы данных. В данном примере – тип данных b (bool).

    2. Открыть свойства b.

    3. Скопировать значение свойства Индекс.

    Примечание
    Свойство Индекс типов данных в разделе Библиотеки/Типы данных может различаться в разных проектах.
    Graphic
    b
  5. Подставить скопированное значение в свойство Индекс типа данных нужного входа или выхода.

    При правильной подстановке индекса типа данных в свойствах входа или выхода появится Имя типа, соответствующее указанному типу. Если в разделе Библиотеки/Типы данных нет подходящего типа данных, его можно скопировать из основной библиотеки.

  6. Задать таким же способом Индекс типа данных для всех созданных входов/выходов типа.

  7. Установить свойство входов Тип связей = 0.

    Graphic
    reset
    Graphic
    q

    После создания внешних входов и выходов типа можно приступить к реализации алгоритма работы блока.

    Для того, чтобы написать блок на C++, следует добавить в Тип текстовые файлы. Для создания алгоритмов на C++ используются следующие расширения файлов:

    • .work – вызывается из функции Work каждый цикл выполнения программы;
    • .init – вызывается из функции InitInp один раз при инициализации;

    • .hpp – включается внутрь описания класса, это могут быть объявления дополнительных переменных и функций;

    • .cpp – включается в .cpp-файл класса – реализация дополнительных функций, добавление библиотек.

    Для создания блока необходимо добавить как минимум один файл с расширением .work.

    Для реализации RS-триггера понадобится создать файлы с расширениями .work для написания логики работы триггера и .hpp для того, чтобы хранить значение выхода во внутренней памяти блока. Нужно добавить текстовый файл в Тип.

  8. Выполнить команду Создать в контекстном меню типа.

  9. Выбрать файл и задать ему имя и расширение.

    Graphic
    Graphic
    work
    Graphic
    hpp
    Graphic

    Для редактирования текстовых файлов в Полигон предназначено окно типа Редактор, которое открывается автоматически при двойном щелчке на текстовом файле в дереве проекта.

    Если файла на диске не существует, то он будет создан при нажатии кнопки Сохранить. По умолчанию файлы хранятся в той же папке, где расположен проект или библиотека.

  10. Прописать в файле logic_rs.work логику работы RS-триггера.
  11. Нажать Сохранить.

    Graphic
    work
  12. В файле store.hpp объявить переменную для хранения значения триггера.

  13. Нажать Сохранить.

    Graphic
    hpp
  14. Транслировать проект для проверки корректности созданного типа. После сообщения об успешной трансляции (Трансляция завершена) экземпляры нового типа можно создавать на страницах проекта.

Создать экземпляр составного блока в проекте можно двумя способами:

  1. Перетащить блок из Дерева проекта или библиотеки на Страницу проекта и выбрать Создать в контекстном меню.

    Graphic
  2. На пустом месте Страницы щелкнуть ПКМ – Создать и выбрать необходимый блок в разделе Библиотека проекта, нажать ОК.

    Graphic

    На графическом отображении составных блоков на страницах проекта изображается знак #, что означает, что данный блок – составной.

В дереве проекта или библиотеки Тип, экземпляр которого был создан на странице проекта, подсветится желтым.

Graphic
Создание составных блоков с переменным числом входов/выходов на C++

Одно из важных преимуществ создания пользовательских составных блоков на C++ – возможность создавать блоки с переменным количеством входов/выходов.

Для того, чтобы создать входы/выходы переменного количества в блоке, следует создать Массив в Типе.

В Массиве следует создать либо входы, либо выходы, но не вместе. Возможны два варианта:

  1. Простой массив состоит из одного входа или выхода. Имя переменной входа/выхода определяется именем массива. Например, если массив имеет Имяarr, то Имя переменной его входа/выхода – arr[%1]. Простой массив соответствует циклическим входам или выходам.

  2. Массив структур состоит из нескольких входов или выходов. Имя структуры задается свойством Имя типа. Имя переменной входа/выхода определяется именем массива и именем переменной внутри структуры, например, arr[%1].in. Массив структур соответствует циклическим группам входов или выходов.

Имена переменных внутри массива заполняются автоматически, если перед добавлением входов/выходов правильно задать свойство Имя типа.

Массивы входов и выходов можно объединить так, чтобы при создании входа (или группы входов) у блока автоматически создавался связанный с ним выход (или группа выходов).

Для этого следует обоим массивам входов и выходов задать одинаковое значение свойства Принадлежит к группе, например, 1.

Например, можно создать блок логического НЕ с переменным числом входов/выходов. Для этого следует:

  1. Создать Тип.

    Graphic
  2. Создать в Типе два массива, первый – массив входов, второй – массив выходов.

    Graphic
    Graphic
    Graphic
  3. В свойствах обоих массивов добавить свойство Принадлежит к группе = 1.

    Graphic
    Graphic
  4. Создать вход типа в массиве входов, создать выход типа в массиве выходов.

    Graphic
    Graphic
    Graphic
  5. В свойствах входа и выхода добавить свойство Индекс типа данных и скопировать в него значение Индекса типа данных b из раздела Библиотеки/Типы данных аналогично разделу.

    Graphic
    Graphic
  6. Добавить в Тип файл .work, в котором расписать логику работы блока.

    Graphic
    work
    Graphic
  7. Транслировать проект для проверки корректности созданного типа. После сообщения об успешной трансляции (Трансляция завершена) экземпляры нового типа можно создавать на страницах проекта.

  8. Создать экземпляр блока в проекте. Создание экземпляра блока на странице проекта описано в разделе.

    Graphic
  9. Создать у блока дополнительные входы – одновременно с входами добавится соответствующее количество выходов.

    Graphic
    Graphic
    Graphic
Доступ к системной информации из кода составного блока на C++

Доступ к системной информации можно получить из статических функций класса runtimeInfo:

  1. runtimeInfo::nsAbsTime() возвращает значение uint64_t, которое равно количеству наносекунд, прошедших от 01.01.1970. Это значение можно использовать как абсолютное время в UTC, например, для меток времени. Не стоит использовать значение uint64_t при измерениях интервалов, потому что его может изменять NTP-клиент. Обновляется в потоке Таймер, если он один, или в потоке Ввод-вывод, один раз за цикл.

  2. runtimeInfo::nsMonotonic() возвращает значение uint64_t равномерно меняющегося счетчика в наносекундах. Не редактируется NTP-клиентом и при изменении системного времени, поэтому значение можно использовать для измерения интервалов, превышающих таймерный цикл.

  3. runtimeInfo::timerCycle() возвращает значение типа float, равное циклу таймерного потока, в котором выполняется блок, в миллисекундах. Если блок выполняется в фоновом потоке, то значение не определено.

  4. runtimeInfo::cpuCoresNum() возвращает количество ядер процессора (тип uint16_t).

Свойства типов составных блоков и их входов/выходов

Для удобства отображения в дереве проекта или библиотеки Типу можно задать свойство Имя – это имя, которое отображается в дереве проекта или библиотеки.

Еще одно полезное свойство ТипаМожет работать только в…. Его можно добавить из нижнего выпадающего списка в окне Свойства. Данное свойство определяет, в каком Месте работы можно создать экземпляр блока данного типа. При попытке создать блок в другом Месте работы появится окно ошибки.

Graphic
Graphic

Основные свойства внешних входов/выходов составного блока:

  • Имя – отображается как имя входа/выхода блока;

  • Номер – определяет положение входа/выхода в дереве и в составном блоке;

  • Комментарии – отображается у входа/выхода в дереве и у составного блока.

При изменении свойства Номер внешнего входа или выхода Типа появится сообщение Обновить блоки типа…– применить изменение ко всем экземплярам блока данного типа в проекте.

Если необходимо изменить свойства Имя и/или Комментарии внешних входов/выходов, то для применения изменений следует пересоздать блок на странице проекта.

Graphic

Создание справки для составных блоков

Для составных блоков пользователь может добавлять собственное описание.

Для создания справки следует:

  1. В контекстном меню Типа выбрать команду Описание.

    Graphic
  2. В текущем окне отобразится окно Редактора. В папке проекта (если тип создан в проекте, иначе в папке библиотеки) автоматически создастся папка userHelp и в ней файл с расширением .html и именем типа.

  3. Добавить в файл описание блока.

    Graphic
    html

    В папке userHelp следует размещать все файлы, которые используются для создания описаний для Типов данной Группы типов.

  4. Если необходимо добавить картинки в описание, следует подготовить изображения с расширением .png, имена которых начинаются с имени соответствующего файла справки, и поместить их в папку userHelp.

Например, для описания my_block2.html следует добавить файлы изображений с названиями my_block2_1.png, my_block2_2.png и т.д.

Для того, чтобы вызвать описание блока, можно выделить Тип в дереве и выполнить команду Справка в контекстном меню (или нажать горячую клавишу F1). В нижней части окна Справка отобразится созданное описание блока, картинки автоматически появятся в начале описания.

Graphic

Создание библиотеки

Пользователь может создать библиотеку самостоятельно.

Для каждой новой библиотеки рекомендуется заводить отдельную папку.

Внимание
Путь к файлам библиотек не должен содержать кириллицу и пробелы.

Для создания библиотеки следует:

  1. Перейти в окно Проекты и нажать Создать.

    Graphic
  2. В открывшемся окне перейти в папку, где будет создана библиотека, ввести имя новой библиотеки, в выпадающем списке выбрать тип Библиотека Полигон 2 (*.ll2) и нажать Создать.

    Graphic
  3. Для работы с библиотекой следует открыть ее в представлении Дерево. Среда при создании библиотеки сразу предложит открыть ее в дереве – следует нажать Да.

    Graphic
  4. Созданная библиотека отобразится в окне Проекты.

    Graphic
    Для создания блоков в библиотеки следует добавить в нее типы данных. По умолчанию раздел Типы данных в библиотеке пустой. Его следует скопировать из основной библиотеки paCore. Для добавления в библиотеку типов данных следует:
  5. Открыть библиотеку paCore в соседнем окне типа Дерево.

    Graphic
  6. Открыть раздел Типы данных в paCore, выделить первый тип данных раздела и с зажатым Shift выделить последний тип данных раздела.

  7. С помощью команд Ctrl + c и Ctrl + v выполнить копирование типов данных в раздел Типы данных новой библиотеки.

    Теперь в библиотеке можно создавать пользовательские составные блоки, копируя индексы типов данных для входов и выходов из раздела Типы данных библиотеки.

    После создания необходимого числа блоков библиотеку следует транслировать:

  8. В окне Экран/Настройки выбрать ОС для трансляции библиотек.

    Внимание

    Библиотеку следует транслировать для всех ОС, в которых ее планируется использовать.

    Graphic
  9. Выполнить Транслировать все на панели Инструменты окна библиотеки.

  10. В папке библиотеки создастся папка build и в ней папка с файлами трансляции для выбранной ОС:

    • Windows для Windows;

    • Astra Linux SE 1.7 для Astra Linux SE 1.7;

    • Linux Овен прошивка 3.х для ОС ПЛК210.

Теперь новую библиотеку можно использовать в проектах.

Создание справки для библиотек

Примечание
Возможность создания полноценной справки для библиотеки есть только при работе на ПК с ОС Windows. При работе на ПК с ОС Linux см. создание справки для отдельных блоков в разделе.

Чтобы создать справку для библиотеки, следует:

  1. Скопировать папку help с шаблонами (из папки Polygon2) в папку библиотеки, для которой будет создаваться справка.

  2. В папке help переименовать файлы в соответствии с именами библиотеки и функциональных блоков, например, my_lib и my_block:

    • paControls.qhp в my_lib.qhp – список индивидуальных описаний блоков в справке библиотеки;

    • paControls.qhcp в my_lib.qhcp – указания для генератора справки;

    • paControls.bat в my_lib.bat – исполняемый .bat-файл создания бинарных файлов библиотеки для Полигон;

    • mode.html в my_block.html – описание блока.

  3. Отредактировать переименованные файлы. Рекомендуется пользоваться редактором Notepad++ для удобства.

  4. Редактирование файла my_lib.qhp на примере части содержимого из paControls.qhp:

    • paControls заменить на имя библиотеки, например, my_lib;

    • Редактировать/удалить и создать нужное количество разделов. Например, Функциональные блоки вместо Регуляторы;

    • Редактировать описания блоков и ссылки на их файлы описания. Например, вместо Выдача данных с задержкой вставить Вычисление линейной функции k*x + b, вместо delayv.html вставить my_block.html;

    • В ключевых словах указать my_block вместо delayv, другие строки удалить.

    Примечание
    При редактировании следует сохранить строку, где в ключевом слове указано точное имя типа (в примере указаны my_block и C_ my_block). Это требуется для вызова справки на конкретный блок по клавише F1.
  5. В результате должно получиться следующее содержание my_lib.qhp:

    Graphic
    qhp
  6. Редактирование файла my_lib.qhcp: заменить paControls на my_lib.

    Graphic
    Редактирование файла с расширением .qhcp
  7. Редактирование файла my_lib.bat:

    • Заменить paControls на my_lib;

    • Убедиться, что указан правильный путь к qhelpgenerator.exe. Например, E:\Polygon2\qhelpgenerator.exe.

      Graphic
      bat

  8. Редактирование файла my_lib.html:

    • В файле описывается работа блока с форматированием текста с помощью HTML-кода;

    • Можно задать используемые стили (шрифт, тип, размер) в контейнерах, в которых в дальнейшем заключается текст;

    • Другие возможности: блочная верстка страницы, подключение метаданных, форматирование, вставка изображений и т.д.

  9. В папку images следует поместить картинки .png, .gif к описанию блока. Стандартно имена задаются именем блока и цифрой. В примере используется my_block.png.

  10. Запустить файл my_block.bat. Будут созданы файлы .qch и .qhc.

  11. В папке библиотеки будут созданы файлы справки: my_lib.qch и my_lib.qhc.

Эти файлы используются справкой Полигон для отображения описания блоков библиотеки. Они должны передаваться вместе с ней, когда исходные файлы в папке help остаются у разработчиков библиотеки.

Пример получившейся справки приведен на рисунке ниже.

Graphic
Внимание

Возможные ошибки при запуске .bat-файла:

  • Указан неверный путь к файлу генератора – в файле .bat следует указать прямой путь к qhelpgenerator.exe или создать переменную среды %DirQtInstall%;

  • Библиотека qminimal.dll неверной версии – следует обратиться к разработчику за верным файлом;

  • Если название проекта в <namespace> задано кириллицей то поменять на латинские символы;

  • Файл .qhc не получилось обновить – сейчас файл используется приложением Полигон, следует закрыть его и повторить операцию;

  • Справка создалась, можно самостоятельно в дереве справки выбрать описание блока, но оно не вызывается на блоке командой F1 – в разделе ключевых слов файла .qhp не указано точное имя типа блока. Следует добавить эту строчку со ссылкой на описание блока.

Экспорт/импорт свойств из MS Excel

Полигон поддерживает выгрузку и загрузку свойств компонентов проекта в виде таблицы MS Excel с помощью команд Экспорт/Импорт на панели Инструменты. Это может быть полезно для быстрого массового редактирования свойств функциональных блоков и их входов/выходов.

С помощью команды Экспорт можно выгрузить свойства компонентов Модуля, Места работы, Программы, Страницы, Раздела.

Сначала следует выделить экспортируемый компонент проекта, затем выбрать команду Экспорт на панели Инструменты в дереве проекта.

Graphic

Также можно выбрать команду Экспорт в контекстном меню нужного компонента (нажать на компонент ПКМ).

Graphic

Аналогично можно экспортировать и импортировать свойства функциональных блоков и входов/выходов на открытой странице. Для этого следует нажать кнопку Эскпорт на панели Инструменты.

Graphic

После выполнения команды Экспорт откроется окно, в котором следует:

  1. Установить в графе тип файла MS Excel (*.xlsx) – справа в окне отобразится предпросмотр таблицы свойств страницы, блоков и входов/выходов на этой странице.

  2. Нажатием ПКМ на заголовке таблицы открыть контекстное меню, в котором следует установить флаги на необходимых для экспорта свойствах блоков и входов/выходов.

    Graphic
  3. Ввести имя файла.

  4. Выбрать его расположение на диске.

  5. Нажать Сохранить.

Сохраненный файл следует открыть в программе MS Excel.

Примечание
При работе на ПК с ОС Linux для редактирования таблицы можно использовать редактор ONLYOFFICE.

В таблице можно редактировать или назначать необходимые свойства (например, имена блоков, комментарии, значения у входов, порядки и т.д.).

Graphic
MS Excel

Отредактированный файл следует сохранить на диске в формате MS Excel (*.xlsx).

Чтобы импортировать новые свойства, следует нажать кнопку Импорт на панели Инструменты и выбрать в открывшемся окне сохраненный файл.

Новые свойства применятся к странице, блокам и входам/выходам на этой странице.

Внимание
Место свойств в проекте определяется однозначно уникальными свойствами Индекс (index) входов/выходов, блоков и т.д., поэтому импорт можно произвести в любом месте проекта. Изменения применятся только к свойствам тех элементов, которые были экспортированы.
Graphic

Генерация из MS Excel

Полигон поддерживает генерацию программ из MS Excel с помощью команды Импорт.

Генерация из MS Excel в Полигон позволяет:

  • Добавлять программы, составные блоки и блоки из библиотек;

  • Изменять значения и свойства входов и выходов блоков;

  • Устанавливать связи между входами и выходами блоков.

Примечание
При работе на ПК с ОС Linux для редактирования таблиц можно использовать редактор ONLYOFFICE.

Для генерации требуется .xlsx-файл определенного формата.

На модуле следует нажать Импорт, указать файл и в качестве типа файла выбрать Генерация из MS Excel (*.xlsx). Полигон проверяет начало названия листа и выполняет соответствующий алгоритм импорта.

Листы файла .xlsx:

  • create – листы данного типа предназначены для добавления программ и блоков;

  • io – предназначен для изменения значений, комментариев и прочих свойств входов и выходов;

  • ii – предназначен для изменения значений на группах входов;

  • links – предназначен для проведения связей.

Если при импорте будет обнаружена ошибка, то изменения не применяются и происходит откат версии до начала импорта. Генерация оперирует с именами блоков, поэтому они должны быть уникальны. Листы считываются слева направо, поэтому вначале необходимо разместить листы типа create. Процесс импорта сопровождается сообщениями в окне Прогресс и завершается выдачей информации о количестве добавляемых блоков, программ и т.п. Алгоритм импорта не выполняет удаление блоков, программ, свойств и связей.

В итоговом файле для импорта не должны содержаться формулы, все значения должны быть посчитаны.

Graphic

Заголовок таблицы задается по определенным правилам. При несоответствии импорт прекратится с выдачей предупреждения на указанный лист.

Заголовки таблицы create

Заголовок

Описание

Ограничения

blocktype

6 – для программ, 0 – для блоков

Любые другие значения остановят импорт

name

Если необходимо создать множество блоков, следует использовать спецсимвол «#» в названии.

bsup_##bsup_00, bsup_01, …

decd_###decd _000, decd _001, …

Имя может состоять из букв латинского алфавита, цифр, символа «_» и спецсимвола «#», другие символы не допускаются.

# – разрешен только для блоков.

Нельзя создать несколько программ одной строчкой.

При использовании # ввод количества блоков в столбец n обязателен.

# могут располагаться только в конце названия

typename

Имя блока из библиотеки или имя составного блока из корня проекта

Обязательное поле для блоков

parent

Имя родителя в дереве. Для программ – место работы, для блоков – имя программы

Обязательное поле для программ и блоков

n

Количество блоков

Поле считывается только при наличии # в названии

inp_n

Количество циклических входов/выходов блока

Только для блоков.

Если блок не имеет циклических входов/выходов, поле должно быть пустым

Алгоритм импорта выполняется построчно сверху вниз до обнаружения пустой ячейки. После пустой ячейки анализ прекращается, а следующие столбцы можно использовать для комментирования.

Для программы: при наличии указанной программы в проекте (независимо от места работы) программа не добавляется. В противном случае проверяется наличие указанного места работы и добавляется программа.

Для блока: при наличии указанного количества блоков (независимо от типа блоков и программы) блоки не добавляются. В противном случае проверяется наличие указанной программы,и добавляются блоки, начиная с 0 номера. Если в программе присутствует часть блоков, новые блоки добавляются, начиная с последнего номера +1. Блоки вставляются друг за другом. Если у блока много входов/выходов, используется формат А3.

Graphic
Лист io. Изменение/добавление свойств входа/выхода

Заголовок таблицы io предопределен частично (первые три столбца), при несоответствии импорт прекратится с выдачей предупреждения на указанный лист.

Заголовки таблицы io

Заголовок

Описание

Ограничения

type_io

0 – для входов, 1 – для выходов

Любые другие значения остановят импорт

block

Имя блока

Если блок не найден, импорт прекращается

name

Имя входа/выхода

Если вход/выход у блока не найден, импорт прекращается

Остальные заголовки должны иметь название, совпадающее со свойствами в программе Полигон. Если оставить ячейку пустой, соответствующее свойство не будет добавлено/изменено.

Алгоритм импорта выполняется построчно сверху вниз до обнаружения пустой строки. Столбцы, начиная с пустого, не анализируются.

Можно организовывать циклы и повторения в таком же формате, как и links.

Graphic

В данном примере строка 204 приведет к тому, что у всех блоков prm4_00, prm4_01, … на всех выходах типа «o» выставятся одинаковые комментарии comment1 и алиас alias1.

Строки 206…214 будут использовать имя блока с предыдущей строки.

Graphic

Заголовок таблицы ii предопределен частично (первые два столбца), при несоответствии импорт прекратится с выдачей предупреждения на указанный лист.

Заголовки таблицы

Заголовок

Описание

Ограничения

block

Имя блока

Если блок не найден, импорт прекращается

array

Номер входа

-

Остальные заголовки должны совпадать с началом имени входа блока. В примере, указанном на рисунке выше, будут выполнены следующие действия:

  • bsup_00.adr1 = 150, bsup_00.ini1 = -25, bsup_00.min1 = -50, bsup_00.max1 = 50, bsup_00.typ1 = II;

  • bsup_01.adr3 = 151, bsup_01.ini3 = -26, bsup_01.min3 = -51, bsup_01.max3 = 49, bsup_01.typ3 = AI.

Алгоритм работает не только на циклических входах, но нужно, чтобы <имя заголовка + номер входа> присутствовал у блока.

Если оставить ячейку пустой, соответствующее значение не будет изменено.

Алгоритм импорта выполняется построчно сверху вниз до обнаружения пустой ячейки. Столбцы, начиная с пустого, не анализируются.

Graphic
links

Заголовок таблицы links предопределен, при несоответствии импорт прекратится с выдачей предупреждения на указанный лист.

Заголовки таблицы

Заголовок

Описание

Ограничения

out_block

Имя блока с выходом

Для указания циклических связей используются символы #, [,]

out

Имя выхода

-

in_block

Имя блока с входом

-

in

Имя входа

-

Для проведения простой единичной связи нужно указать блоки и входы/выходы.

Алгоритм импорта выполняется построчно сверху вниз до обнаружения пустой строки. Столбцы, начиная с 5, не анализируются.

Внимание
Обязательным условием использования циклических связей является непрерывность имен блоков. Например, если существуют bsup_00 и bsup_03, обязаны существовать bsup_01, bsup_02, иначе импорт завершится ошибкой. Также обязательна нумерация с 0, т.е. если имеется три блока bsup_01, bsup_02, bsup_03, к ним не сможет обратиться bsup_##.

Для задания циклических связей используются символы «#», «,», «[-]». Возможные типы циклов перечислены в таблице ниже.

Типы циклов

Цикл

Формат

Описание

Ограничения

Определенный цикл

bsup_[05-07]

dan[4-8]

min[00-14]

В квадратных скобках задаются начальный и конечный номера блоков через «-»

Для блока:

Номер необходимо задавать с учетом лидирующих нулей.

Пример – для блоков bsup_1, bsup_2 указывается bsup_[1-2], для блоков bsup_09, bsup_11 указывается bsup_[09-11]

Для входа/выхода:

У входов/выходов лидирующих нулей нет, но необходимо, чтобы начальный и конечный номер имели одинаковое количество цифр.

Пример: для выходов dan4, dan5 указывается dan[4-5],

для выходов dan9, dan10 указывается dan[09-10]

Перечисление

dan1, Ty, Kp

Имена входов/выходов задаются через запятую. Пробелы игнорируются

Нельзя использовать для блоков, только для входов/выходов

Неопределенный цикл

bsup_##

dan#

В качестве начального берется нулевой элемент. Конечный элемент определяется по ходу

Для блока:

Количество # определяет маску номера блока

bsup_## bsup_00, bsup_01,…

decd_###decd _000, decd _001,…

Для входа/выхода:

Количество # не имеет значения

Повторение

Пустая ячейка

Если оставить поле out_block или in_block пустым, то используется информация с прошлой строки с сохранением позиции в цикле

-

Примеры задания циклических связей можно посмотреть в разделе Генерация из MS Excel в справке среды.

Создание серверного многопользовательского проекта

Многопользовательский проект может редактироваться несколькими разработчиками одновременно. В этом случае проект представляет собой базу данных PostgreSQL. Клиентом к серверной базе данных выступает среда разработки Полигон.

Для создания нового многопользовательского проекта в среде разработки следует:

  1. Выполнить команду Создать в окне Проекты.

  2. В списке типа проекта выбрать Полигон 2 многопользовательский (*.pg2).

    Graphic
  3. Определить местоположение файла проекта на диске. Рекомендуется каждый проект размещать в отдельной папке.

    Внимание
    Полный путь к файлу проекта не должен содержать символов кириллицы и пробелов.

  4. Задать имя проекта. Имя проекта также определяет имя базы данных на сервере PostgreSQL.

    Внимание

    Имя проекта должно содержать только символы латинского алфавита, цифры и «_», начинаться с буквы.

  5. В открывшемся окне ввести IP-адрес или имя компьютера и порт, на котором работает сервер PostgreSQL.

    Graphic
  6. Ввести имя пользователя и пароль.

    Graphic

Если база данных с таким именем уже существует, то будет установлено соединение, если нет, то будет предложено ее создать.

Graphic

Файл проекта с расширением .pg2 можно скопировать к другим пользователям и открыть в среде разработки. Для этого следует:

  1. Выполнить команду Открыть в меню Проекты.

  2. В списке типа проекта выбрать Полигон2 многопользовательский (*.pg2).

  3. Найти на диске файл типа .pg2 и нажать Открыть.

  4. Ввести имя пользователя и пароль.

    Graphic

Для корректной работы диагностики и логирования необходимо на каждой клиентской машине использовать разных пользователей для подключения к проекту.

Рекомендуется организовать работу над проектом таким образом, чтобы пользователи редактировали разные Программы проекта. Для этого следует создать структуру проекта, состоящую из Мест работы и Программ, одним пользователем и затем привлечь к работе остальных.

Когда один пользователь вносит изменения в проект, остальные этих изменений не видят, пока он не сохранит проект на сервер. Остальным пользователям видны узлы проекта, в которых изменения в данный момент происходят, они подсвечиваются красным фоном в представлении Дерево. Для пользователя, который изменения вносит, они обозначаются в Дереве курсивом. При наведении курсора мыши на подсвеченный узел Дерева можно увидеть, какой именно пользователь его редактирует.

Graphic
Graphic

Среда разработки не сохраняет изменения проекта на сервер автоматически, однако если несохраненные изменения есть, то каждые 5 минут выдается предложение сохранить проект. Время сохранения можно изменить/отключить в меню Экран/Настройки.

Graphic

Кнопка Сохранить Graphic в панели инструментов показывает, что есть необходимость сохранить изменения. Последние 60 действий можно отменить командой Отмена Graphic или комбинацией клавиш Ctrl + z, пока проект не сохранен на сервер. Если очередь изменений переполнена, будет предложено ее очистить или не выполнять последнюю операцию. После сохранения отмена изменений невозможна, и они становятся видны остальным пользователям.

После каждого сохранения проекта на локальной машине также создается копия проекта в виде sql dump для того, чтобы иметь возможность при необходимости восстановить определенную версию проекта. Файл с копией имеет такое же имя, как основной проект, плюс суффикс, обозначающий версию проекта на момент создания (например, файл mnu_demo_27.pg2 содержит копию проекта mnu_demo версии 27). Для восстановления копии необходимо открыть соответствующий файл проекта в среде разработки, тогда проект будет развернут на сервер в новую базу данных (например, mnu_demo_27_pg2).

Рекомендуется не редактировать узлы проекта, подсвеченные в дереве красным фоном, то есть те, в которых в данный момент вносят изменения другие пользователи. Однако строгого запрета нет и некоторые изменения возможны. Например, можно создавать новые программы, страницы и функциональные блоки. Конфликты редактирования могут возникнуть, если попытаться изменить свойство компонента, которое было изменено другим пользователем и изменения еще не сохранены. Тогда последняя попытка будет отменена с сообщением о блокировке другим пользователем.

Graphic

Массовые операции, такие как импорт, генерация из MS Excel и копирование больших частей проекта рекомендуется проводить в момент минимальной активности остальных пользователей.