1-RU-137992-1.2

Руководство пользователя

Используемые термины и сокращения

ЛКМ – левая кнопка мыши.

Место работы – набор программ, который вызывается заданным способом.

Модуль – основной узел проекта в среде Полигон, в котором задаются настройки для подключения к контроллеру и др. параметры для создания пользовательского приложения.

ОС – операционная система.

ПК – персональный компьютер.

ЛКМ (ПКМ) – левая (правая) кнопка мыши.

ПЛК – программируемый логический контроллер.

ПО – программное обеспечение.

Представления – тип окон в среде Полигон, которые предназначены для редактирования проекта (например, дерево, страница, редактор и т.д.).

Проект – относительно независимая алгоритмическая задача или группа однотипных задач.

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

Составной функциональный блок – функциональный блок, который состоит из других функциональных блоков.

Таймер (место работы) – поток, выполняющийся в режиме реального времени с заданной периодичностью.

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

ФБфункциональный блок – элементарный пользовательский алгоритм (класс C++), который используется несколько раз в проекте.

Фон (место работы) – поток, выполняющийся циклически.

C ++    – компилируемый  язык  программирования  со  строгой  типизацией,  который  поддерживает  парадигмы  процедурного  и  объектно-ориентированного  программирования.

FTP (File Transfer Protocol) — протокол прикладного уровня для передачи файлов по сети.

NTP (Network Time Protocol) — сетевой протокол для синхронизации внутренних часов устройств в сети.

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

SQL (Structured Query Language) – язык программирования для хранения и обработки информации в реляционной базе данных.

SSH (Secure SHell) – протокол прикладного уровня для удаленного управления операционной системой с шифрованием трафика.

Unix-время – количество секунд, прошедших с полуночи (00:00:00 UTC) 1 января 1970 года (четверг).

UTC (Temps Universel Coordonné) – всемирное координированное время.

Введение

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

Проект имеет единую иерархическую структуру для описания аппаратной конфигурации, программы и обмена данными с другими системами.

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

Открыть или создать проект (файл с расширением .pl2) можно в окне Проекты. Рекомендуется размещать каждый новый проект в отдельном каталоге.

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

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

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

Данный документ актуален для версии среды Полигон1994 и выше, версии библиотеки paCore988 и выше.

Знакомство со средой разработки

Установка среды программирования для Windows

Скачать инсталлятор среды Полигон для ОС Windows можно по ссылке.

Рекомендуемые системные требования:

  • ОС: Windows 7/8/10/11 64 Bit;

  • Оперативная память: 4 Гб и выше;

  • Память на диске: 2 Гб и выше.

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

  1. Распаковать скачанный архив и запустить Polygon2Installer_LinuxOwen3.exe.

    Graphic
    Инсталлятор Полигон 2
    Graphic
  2. Выбрать путь для установки среды Полигон. По умолчанию среда устанавливается на диск C.

    Примечание
    Путь установки среды не должен содержать кириллицу и пробелы.
    Graphic
  3. Выбрать компоненты для установки.

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

    Graphic
  4. Ознакомиться с лицензионным соглашением и принять его.

    Graphic
  5. ЕЕсли необходимо, создать папку для ярлыков в меню Пуск.

    Graphic
  6. Нажать Установить.

    Graphic

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

Graphic

Инсталлятор также предложит установить или обновить драйверы Guardant.

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

Установка среды программирования для ОС Linux

Скачать скрипт установки среды Полигон для ОС Linux можно по ссылке.

Рекомендуемые системные требования:

  • ОС: Astra Linux Special Edition 1.7, Ubuntu (версия ядра Linux 5.10 и выше);

  • Оперативная память: 4 Гб и выше;

  • Память на диске: 2 Гб и выше.

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

  1. Распаковать архив со скриптом установки.

  2. Дать права на исполнение скрипта установки Polygon2Installer_LinuxOwen3.sh.

    Graphic
  3. Запустить скрипт установки.

  4. Следовать инструкциям инсталлятора.

    Graphic
  5. Указать директорию для установки среды Полигон.

    Примечание
    Путь установки среды не должен содержать кириллицу и пробелы.
    Graphic
  6. Выбрать компоненты среды для установки. По умолчанию инсталлятор устанавливает саму среду Полигон и пакет сборки под текущую заводскую прошивку ПЛК210.

    Graphic
  7. Ознакомиться с лицензионным соглашением и принять его.

    Graphic
  8. Нажать Установить.

    Graphic

Когда установка завершится, на рабочем столе появится ярлык программы Полигон (только для ПК с ОС Astra Linux). Инсталлятор предложит открыть краткое описание демонстрационного проекта.

Graphic

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

Первый запуск

Полигон рекомендуется запускать через ярлык на рабочем столе или из папки Polygon2 (для ОС Windows исполняемый файл polygon2.exe, для ОС Linux –startPolygon2.sh).

При первом запуске среды откроется демонстрационный проект mnu_demo.pl2. Краткое описание демонстрационного проекта приведено в документе Описание.pdf в папке Polygon2.

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

Для этого следует:

  1. Добавить Панель отладки через меню Окна/Панели инструментов/Панель отладки.

  2. Нажать на Панели отладки кнопку Запустить на виртуальном контроллере.

  3. В отдельном окне запустится приложение виртуального контроллера.

  4. Среда попросит ввести пароль для через отладчик среды. Пароль демонстрационного проекта – 123.

  5. Среда подключится отладчиком среды к запущенному контроллеру.

    Graphic

Контроллеры

ПЛК ОВЕН, которые работают с исполнительной средой Полигон, представлены в таблице ниже.

ПЛК ОВЕН с исполнительной средой Полигон

Модификация контроллера

Версия прошивки и инструкция по обновлению

ПЛК210-11-PL-X*

3.6.0704.1220

ПЛК210-12-PL-X

ПЛК210-14-PL-X

Примечание
* Версия лицензии runtime. Описание версий лицензий приведено в разделе.

Лицензирование

Описание лицензионных пакетов

Описание лицензионных пакетов

Тип лицензии

Назначение

Состав библиотек*

BASE

Базовая лицензия

paCore

paOwenIO

paOpcUA

paControls

paModbus

profiLogger

profiLoggerLight

BASE104

Лицензия с поддержкой протоколов МЭК 60870-5-101 и МЭК 60870-5-104

Библиотеки базовой лицензии + paIEC104

BASE850

Лицензия с поддержкой протокола МЭК 61850

Библиотеки базовой лицензии + paIEC850

BASE-R

Лицензия с поддержкой программного резервирования ПЛК

Библиотеки базовой лицензии + paSync

BASE104-R

Лицензия с поддержкой протоколов МЭК 60870-5-101 и МЭК 60870-5-104 и программного резервирования ПЛК

Библиотеки базовой лицензии + paIEC104, paSync

BASE850-R

Лицензия с поддержкой протокола МЭК 61850 и программного резервирования ПЛК

Библиотеки базовой лицензии + paIEC850, paSync

Примечание
Описание библиотек приведено в разделе

Состав библиотек, доступных пользователю для полноценной работы, можно посмотреть в web-конфигураторе контроллера в разделе Состояние/Обзор.

Graphic
Внимание
Если в пользовательском проекте используются блоки из библиотек без соответствующих лицензий, проект прекратит свою работу по истечении 1 часа. При подключении откладчиком в этом случае на модуле будет надпись Демо-режим и время до окончания выполнения программы.
Опции лицензионных пакетов

При необходимости можно приобрести опции для работы с блоками библиотек paSync, paIEC104, paIEC850 отдельно:

Опции лицензий runtime

Опция

Описание

Состав доступных библиотек*

REDU

Опция поддержки программного резервирования ПЛК

paSync

IEC104

Опция поддержки протоколов МЭК 60870-5-101 и МЭК 60870-5-104

paIEC104

IEC850

Опция поддержки протокола МЭК 61850

paIEC850

Примечание
* Описание библиотек приведено в разделах и.

Загрузка файлов лицензии в контроллер описана в разделах,  , и.

Загрузка файлов лицензий в ПЛК в среде Полигон

Пакет лицензий можно загрузить из среды Полигон.

Для этого следует настроить свойства модуля для подключения к контроллеру. Подключаться к контроллеру можно через USB Device (IP адрес ПЛК при подключении через USB Device172.16.0.1) или через Ethernet.

Подробно подключение к контроллеру описано в разделе.

Graphic
USB Device

Для загрузки лицензий следует:

  1. Нажать правой кнопкой мыши (ПКМ) на модуль и выбрать команду Записать лицензии.

    Graphic
  2. В появившемся окне ввести серийный номер контроллера. Серийный номер выгравирован на корпусе прибора и приведен в паспорте на прибор (входит в комплект поставки прибора).

    Graphic
  3. Нажать ОК. Начнется процесс скачивания лицензий с сервера pa.ru и загрузка их в контроллер. После окончания загрузки лицензий появится окно:

    Graphic

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

Graphic

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

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

Внимание

Для загрузки лицензий в контроллер через среду Полигон требуется доступ к сети Интернет.

Загрузка файлов лицензии через утилиту WinSCP (для ОС Windows) описана в разделе. Загрузка файлов лицензии через консоль Linux описана в разделе.

Внимание
После загрузки дополнительных файлов лицензий для обновления списка доступных библиотек на странице web-конфигуратора Состояние/Обзор следует загрузить в контроллер проект с блоком OwenHWInfo из библиотеки paOwenIO.
Загрузка файлов лицензий в ПЛК через WinSCP

При отсутствии возможности подключения к серверу pa.ru пакет лицензий можно загрузить через утилиту WinSCP (или через любой менеджер файлов). Утилиту можно загрузить бесплатно на сайте https://winscp.net/eng/download.php

Подключаться к контроллеру можно как через USB Device (IP адрес ПЛК при подключении через USB Device172.16.0.1), так и через Ethernet.

После запуска утилиты следует настроить соединение по протоколу SFTP, указав IP-адрес контроллера, имя пользователя – root и пароль (по умолчанию – owen, можно изменить в web-конфигураторе). Чтобы подключиться к контроллеру, следует нажать Войти.

Graphic

Файлы лицензии необходимо загрузить в рабочую директорию контроллера /home/root.

Внимание
После загрузки дополнительных файлов лицензий нужно обновить список доступных библиотек на странице web-конфигуратора Состояние/Обзор. Для этого следует загрузить в контроллер проект с блоком OwenHWInfo из библиотеки paOwenIO.
Загрузка файлов лицензий в ПЛК через терминал Linux

Если нет возможности подключиться к серверу pa.ru, то пакет лицензий можно загрузить через терминал Linux по протоколу SSH с помощью команды scp.

Подключаться к контроллеру можно как через USB Device (IP адрес ПЛК при подключении через USB Device172.16.0.1), так и через Ethernet.

Синтаксис команды scp:

$ scp опции пользователь1@хост1:файл пользователь2@хост2:файл
Пример

Команда для загрузки файла лицензии paSync при подключении ПЛК через USB Device:

$ scp /home/user/Documents/paSync root@172.16.0.1:/home/root

Для подключения к SSH-серверу контроллера необходимо указать пароль (по умолчанию – owen, можно изменить в web-конфигураторе).

Graphic
Загрузка файла лицензии через терминал Linux

Для проверки файлов лицензии можно подключиться к SSH-серверу контроллера и ввести команду ls.

Graphic
Внимание
После загрузки дополнительных файлов лицензий нужно обновить список доступных библиотек на странице web-конфигуратора Состояние/Обзор. Для этого следует загрузить в контроллер проект с блоком OwenHWInfo из библиотеки paOwenIO.

Библиотеки

Стандартные библиотеки

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

Библиотека

Описание

Документация

paCore

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

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

paOwenIO

Библиотека предназначена для конфигурирования ввода/вывода ПЛК ОВЕН, а также настройки системных функций ПЛК (внешних накопителей, зуммера, светодиодов и т. п.)

Работа с ОВЕН ПЛК. Библиотека paOwenIO

paOpcUA

Библиотека предназначена для реализации обмена ПЛК с другими устройствами/ПО по протоколу OPC UA

Обмен с верхним уровнем. Библиотека paOpcUA

paModbus

Библиотека предназначена для реализации обмена ПЛК с другими устройствами/ПО по протоколам Modbus RTU, Modbus TCP

Обмен по протоколу Modbus. Библиотека paModbus

paControls

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

Алгоритмы управления. Библиотека paControls

profiLogger,

profiLoggerLight

Библиотеки содержат основные блоки для реализации архивирования

Архивирование и сохранение уставок

paSync

Библиотека предназначена для синхронизации проектов контроллеров, реализации горячего резервирования

Синхронизация проектов и реализация резервирования. Библиотека paSync

paIEC104

Библиотека предназначена для реализации обмена ПЛК с другими устройствами/ПО по протоколам стандартов МЭК 60870-5-101 и МЭК 60870-5-104

Обмен по протоколам МЭК 60870-5. Библиотека paIEC104

paIEC850

Библиотека предназначена для реализации обмена ПЛК с другими устройствами/ПО по протоколу стандарта МЭК 61850

Обмен по протоколу МЭК 61850. Библиотека paIEC850

Установка библиотек

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

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

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

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

  1. Перейти в меню Окна/Проекты. В появившемся окне отобразится текущий проект и добавленные библиотеки.

    Graphic
    Внимание
    Чтобы устанавливать обновления для среды и библиотек, необходимо иметь доступ к сети Интернет.
  2. Нажать кнопку Открыть и перейти в папку с файлами библиотеки, которую необходимо добавить. Затем в выпадающем списке выбрать тип файла Библиотека Полигон 2 (*.ll2).

    Graphic
  3. В окне появится файл библиотеки с расширением .ll2. Следует выбрать его и нажать Открыть.

    Graphic

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

Добавленная библиотека отобразится в окне Проекты.

Обновление

В системном окне Окна/О программе отображаются установленные версии среды Полигон и библиотек.

Graphic

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

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

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

Для установки последних версий среды и библиотек следует:

  1. Убедиться, что соединение с сервером pa.ru установлено, нажав кнопку Подключить.

    Примечание
  2. Нажать на кнопку Проверить. В окне появятся версии среды и библиотек, доступные для установки.

  3. Кнопками снизу выбрать распаковщик unzip или 7zip и нажать Сохранить.

  4. Нажать Установить.

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

Graphic

После завершения установки среда снова откроется. В окне О программе отобразятся последние установленные версии среды и библиотек.

Graphic
Внимание
Если установка обновлений версий среды и библиотек не произошла, следует прописать полный путь к файлу распаковщика в окне Команда для распаковки (например, "C:\Program Files (x86)\7-Zip\7z.exe").
Примечание
При возникновении других проблем с установкой обновлений среды и библиотек следует обратиться на почту технической поддержки support@owen.ru

Контроль версий

Текущую версию запущенного проекта можно посмотреть во всплывающем тултипе при наведении мышью на модуль.

Graphic

Также текущую версию запущенного проекта можно посмотреть в web-конфигураторе контроллера в разделе ПЛК/Информация.

Внимание
Для того, чтобы в web-конфигураторе контроллера (раздел ПЛК/Информация) обновлялась информация о запущенном проекте, следует добавить в проект блок OwenHWInfo из библиотеки paOwenIO.
Graphic

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

Graphic
s

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

Graphic

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

Graphic
Graphic

Обслуживание

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

Graphic

При выборе Отправить лог ошибки и сам проект будут подготовлены в выбранной папке на диске для отправки разработчикам. Данные файлы следует направить на почту support@owen.ru в виде архива с подробным описанием проблемы.

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

Перемещение по ошибкам можно осуществлять с помощью кнопок Вверх и Вниз.

Graphic

Общие сведения о среде

Проект

Однопользовательский проект в среде Полигон представляет собой файл с расширением .pl2. В нем хранится все содержимое проекта за исключением дополнительных файлов, которые могут использоваться, например, при создании пользовательского составного блока на C++. Файлы проектов можно копировать и таким образом передавать другим разработчикам. Каждый проект рекомендуется размещать в отдельной папке, поскольку внутри нее среда разработки создает временные файлы при трансляции и копии проекта (бэкапы).

При редактировании проекта все изменения происходят только в кратковременной памяти. Для записи изменений в файл нужно использовать команду Сохранить Graphic в панели инструментов или комбинацию клавиш Ctrl + s. Последние 10 действий можно отменить командой Отменить Graphic или комбинацией клавиш Ctrl + z независимо от того, был ли сохранен проект на диск или нет.

Автоматическое сохранение проекта по умолчанию производится каждые 5 минут. Период сохранения проекта можно изменить в меню Экран/Настройки (при установке 0 автосохранения производиться не будут). При каждом сохранении на диск создается копия проекта (бэкап) с таким же именем плюс суффикс с датой и временем сохранения.

Более подробную информацию о создании многопользовательского проекта можно найти в разделе.

Структура проекта

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

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

Проект может содержать несколько модулей.

Внутренняя структура модуля жестко определена: Модуль > Место работы > Программа > Страница > Функциональный блок.

Graphic

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

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

  • место работы Таймер (таймерное прерывание);

  • место работы Ввод-вывод (таймерное прерывание);

  • место работы Фон (фоновый поток);

  • место работы Поток (фоновый поток).

Часть алгоритма, помещенная в таймерном прерывании, всегда выполняется в режиме реального времени с заданной периодичностью (периодичность задается свойством места работы Таймерный промежуток) – это поток с самым высоким приоритетом.

Необходимо соизмерять размер программ (количество функциональных блоков), находящихся в таймере, со временем таймерного цикла. При недостаточном интервале таймерного цикла может появиться ошибка времени исполнения – Time Out. Данная ошибка повлечет за собой остановку программы (отслеживать реальное время выполнения можно с помощью функционального блока SysInfo).

Существуют функциональные блоки, такие, как логические таймеры, которые целесообразно помещать только в Таймер.

Фоновый поток представляет собой бесконечный цикл, который выполняется с более низким приоритетом в оставшееся от таймерного потока время. В Фон необходимо помещать некритичные по времени исполнения блоки, которые не привязаны к внешним событиям. Большинство блоков, которые обеспечивают обмен по интерфейсам, выполняют запись в файлы и т. п., целесообразно помещать только в Фон.

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

Программа – это относительно независимая алгоритмическая задача или группа однотипных задач.

Ради простоты дальнейшей поддержки проекта следует избегать двух крайностей: малого числа слишком длинных программ (т.е. с большим числом страниц) и слишком большого числа коротких программ.

Имя программы должно состоять только из символов латинского алфавита и нижнего подчеркивания «_», поскольку это имя при трансляции определяет имя файла исходных текстов и объектного файла. Важно давать программам осмысленные имена, чтобы впоследствии было проще понять их назначение. Желательно всегда присваивать разные порядковые номера выполнения программам одного потока.

Для удобства просмотра программы разбиты на Страницы. Количество страниц задает пользователь.

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

Поток данных

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

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

Порядок выполнения алгоритма внутри потока определяется следующим образом:

  1. Порядок выполнения программы (свойство Номер);

  2. Номер страницы (свойство Номер);

  3. Порядок выполнения блока на странице (свойство Порядок).

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

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

Graphic
Поток данных

Страница

Для удобства представления Программа делится на Страницы.

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

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

В дереве проекта страница отображается со своим номером и названием, которое задается в свойстве Комментарии.

Графически страница выглядит как две области:

  1. Рабочая область содержит функциональные блоки. Все манипуляции с функциональными блоками (перемещение, создание, удаление, копирование, проведение связей) проводятся здесь. Команды редактирования доступны из контекстного меню блоков и пустого пространства страницы (по нажатию правой кнопки мыши).

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

Graphic
Страница

Вход или выход на поле обозначается следующим образом:

Graphic
Обозначение входа/выхода на поле страницы

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

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

Масштаб каждой открытой страницы можно менять при помощи колеса мыши при нажатом Ctrl. Масштаб открытых страниц меняется относительно общего масштаба всего приложения, который задается комбинациями Ctrl + и Ctrl -.

Для перемещения по странице можно использовать ползунки справа – перемещение вверх-вниз и снизу – влево-вправо. Также можно использовать колесо мыши – перемещение вверх-вниз и Shift + колесо мыши – перемещение влево-вправо.

Функциональный блок

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

Типы функциональных блоков описаны в библиотеках (файлы с расширением .ll2) и реализованы как классы C++. Информацию о работе блока можно получить из справки библиотеки, выделив блок и нажав F1.

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

Graphic
Основные свойства функционального блока и его входов/выходов

Свойство

Описание

Имя блока

Любая строка, удобная для навигации по проекту

Порядок выполнения

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

Тип блока

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

Имя входа

Строка, уникальная для данного типа блока (может содержать число – индекс в массиве, в случае циклических входов)

Тип входа

Сокращенное имя типа данных входа

Константа

Выражение, формат которого зависит от типа входа. Константа задается на входе, не связанном ни с каким выходом и определяет значение входа при выполнении программы. Полигон не ограничивает возможные форматы констант. Если константа будет задана неправильно (например, на входе типа flt (float) будет задана строковая константа "s"), при трансляции возникнет ошибка

Имя выхода

Строка, уникальная для данного типа блока (может содержать число – индекс в массиве, в случае циклических выходов)

Тип выхода

Сокращенное имя типа данных выхода

Связи

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

Комментарии

Комментарии, относящиеся к входам/выходам. Комментарии отображаются в дереве проекта

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

Входы

Входы функционального блока могут быть следующих типов:

  1. Циклические – входы, количество которых может изменяться. Входы добавляются командой Создать в контекстном меню блока.

  2. Циклические группы – входы, объединенные в группы, количество которых может изменяться (аналогично циклическим входам). Группа соответствует структуре в C++.

  3. Нециклические – входы, количество которых определяется исключительно типом функционального блока и не изменяется.

    Graphic
    Типы входов ФБ

По отношению к возможности проведения связи входы делятся на следующие типы (задается свойством входа Тип связей):

  1. Обычный вход – вход, на котором можно (необязательно) задать константу или провести связь (свойство Тип связей = 0).
  2. Константный вход – вход, на котором требуется задать константу и нельзя провести связь (Тип связей = 1).

  3. Необязательный вход – вход, на котором можно (необязательно) провести связь и нельзя задать константу. При отсутствии связи вход не используется в программе. Данный вход обычно обозначается символом # в поле констант и имеет свойство Тип связей = 2.

  4. Обязательный вход – вход, на котором следует провести связь и нельзя задать константу. Если на вход данного типа не будет проведена связь, то при трансляции будет выдана ошибка. Данный вход обозначается обычно символами ??? в поле констант и имеет свойство Тип связей = 3.

Выходы

Выходы функционального блока могут быть двух типов:

  1. Циклические – выходы, количество которых может изменяться. Выходы добавляются командой Создать в контекстном меню блока. Количество циклических выходов может зависеть от количества входов: при изменении количества входов меняется и количество выходов, и наоборот.

  2. Нециклические – обычные выходы, количество которых нельзя изменить.

Graphic
Типы выходов ФБ

Связи

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

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

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

Цвет связей отображает тип данных входа:

  • черный – булевое;

  • красный – целое;

  • синий – вещественное;

  • серый – строковое.

Подробнее о проведении связей см. в разделе.

Составной блок

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

Подробно о создании составного блока см. в разделе.

Интерфейс

Окна

В среде Полигон существует два вида окон – Окна представления и Системные окна.

Окна представления предназначены для редактирования и отладки проекта и их нельзя вынести поверх других окон в среде.

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

Окна представления

Типы окон представления

Тип окна представления

Пиктограмма

Функция

ДеревоGraphic

Навигация по проектам и библиотекам

СтраницаGraphic

Отображение страницы с функциональными блоками

Составной блокGraphic

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

Функциональный блокGraphic

Графическое отображение функционального блока

РедакторGraphic

Отображение файлов-ссылок для редактирования

ТаблицаGraphic

Отображение информации о функциональных блоках и их входах/выходах в табличном виде

ГрафикGraphic

Отображение значений входов/выходов в виде графиков

Экран отладчикаGraphic

Отображение значений входов/выходов в виде графических элементов

Новое окно представления можно добавить следующими способами:

  1. Открыть меню Окна/Новое окно. Выбрать расположение нового окна относительно открытых окон – в окне Выберите место для нового окна отображается прямоугольниками серого цвета. Выбрать тип нового окна из списка.

    Graphic
    Создание нового окна представления
    Graphic
    Выбор места для нового окна представления
    Graphic
  2. Выбрать тип нового окна на панели Представления. Выбрать положение нового окна относительно открытых окон. Панель Представления добавляется через меню Окна/Панели инструментов/Представления.

    Graphic
Панели инструментов для работы с окнами представления

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

  1. Инструменты – панель основных инструментов для работы с окнами представления.

    Graphic
    Элементы панели Инструменты

    Элемент

    Пиктограмма

    Функция

    Сохранить или Ctrl + s

    Graphic

    Сохранить изменения на странице

    Свойства

    Graphic

    Открыть панель Свойства страницы или элемента

    Показать

    Graphic

    Открыть окно с выбранным элементом (страницей, ФБ, входом, выходом и т. д.)

    Создать

    Graphic

    Открыть окно создания нового элемента (страницы в дереве, ФБ на странице и т. д.)

    Транслировать все

    Graphic

    Запустить трансляцию проекта

    Копировать

    Graphic

    Копировать выбранные элементы

    Вставить

    Graphic

    Вставить скопированные элементы

    Экспорт

    Graphic

    Экспортировать элементы для редактирования в MS Excel (см. раздел)

    Импорт

    Graphic

    Импортировать элементы из MS Excel (см. раздел)

    Отладчик

    Graphic

    Запустить отладчик

    Отменить или Ctrl + z

    Graphic

    Отменить последнее действие (программа сохраняет в памяти 10 последних действий)

  2. Навигация – панель, обеспечивающая навигацию по окнам.

    Graphic
    Элементы панели Навигация

    Элемент

    Пиктограмма

    Функция

    Текущее окно

    Graphic

    Сделать окно текущим. При установке данное окно становится рабочим – в нем будут отображаться страницы при двойном нажатии в Дереве и при нажатии на полях страниц

    Списки выбора

    В соответствии с типом окна

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

    Назад и Вперед

    Graphic

    Открыть предыдущую или последующую открытую страницу

    Путь

    Graphic

    Путь до страницы в дереве проекта (для окон типа Страница)

    Представления

    Список типов окон представления. При смене окна его тип выбирается в этом выпадающем списке

    Проекты

    Graphic

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

    На уровень вверх или Сброс

    Graphic

    Переместиться на уровень вверх или переместиться на верхний уровень (для окон типа Дерево)

    Предыдущая или Следующая страница

    Graphic

    Открыть предыдущий или следующий элемент в дереве в окнах типа Страница, Составной блок, Функциональный блок, Редактор, Таблица

  3. Вид – панель, определяющая взаимное расположение окон.

    Graphic
    Элементы панели Вид

    Элемент

    Пиктограмма

    Функция

    Обновление

    Graphic

    Обновить вид окна

    Вертикальное размещение

    Graphic

    Разместить окна вертикально

    Горизонтальное размещение

    Graphic

    Разместить окна горизонтально

    Вкладки

    Graphic

    Разместить окна по вкладкам. При открытии нового окна появляется вариант поместить его как вкладку

    Фиксировать

    Graphic

    Закрепить текущее окно. В закрепленное окно нельзя отобразить другие окна (пиктограмма Текущее окно пропадает). Это полезно, например, для окон типа Дерево, в которых всегда отображается структура проекта

  4. Редактирование – панель для окон типов Страница и Экран отладчика для добавления графических элементов: стрелка, фон, текст (подробнее см. в разделе).

    Graphic
    Элементы панели Редактирование

    Элемент

    Пиктограмма

    Функция

    Стрелка

    Graphic

    Разместить стрелку

    Фон

    Graphic

    Разместить фон

    Текст

    Graphic

    Разместить текст

Дерево

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

Graphic
Окно представления Дерево

В окне Дерево отображается структура выбранного проекта и есть раскрывающиеся списки на модулях, местах работы, программах, страницах, функциональных блоках и библиотеках.

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

Страница

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

Graphic
Окно представления Страница

В данном окне представления можно редактировать алгоритм: создавать функциональные блоки, проводить/удалять связи между блоками, задавать константы у входов, а также писать комментарии.

В режиме отладки на странице отображаются онлайн значения входов/выходов.

Основные свойства страницы:

  • Комментарии – название страницы в дереве;

  • Номер – номер в дереве, данное свойство определяет порядок выполнения программы (поток данных);

  • Размер листа – от А4 до А0 (по умолчанию установлен А4).

При нажатии Shift над страницей у курсора мыши появляется крест из линий.

Graphic
Отображение креста у курсора мыши
Окно Составной блок

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

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

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

Функциональный блок

В окне представления Функциональный блок показаны названия, имена входов/выходов и типы входов/выходов функционального блока.

Graphic
Окно представления Функциональный блок

Подробнее о функциональном блоке см. в разделе.

Редактор

Для отображения и редактирования файлов-ссылок в проекте предназначено окно представления Редактор.

Окно Редактор открывается автоматически при двойном щелчке на файле в дереве проекта.

Graphic

В окне Редактор пишется программный код при создании составного функционального блока. Подробнее о создании составного ФБ см. в разделе.

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

Таблица

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

Graphic

Нажатием правой кнопки мыши по верхнему меню таблицы можно настроить отображение нужных столбцов. Также по каждому столбцу можно установить фильтр, нажав на стрелку вниз на интересующем столбце.

Graphic
Graphic
График

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

Graphic

Для того, чтобы вход или выход отображался на графике, следует перетащить его ЛКМ со страницы с зажатым Ctrl в верхнюю часть окна График. Модуль добавленного входа или выхода автоматически станет текущим для графика. Для текущего Модуля можно добавлять входы/выходы на график из дерева с помощью перетаскивания по одному.

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

Для создания Раздела нужно нажать на модуль ПКМ и нажать Создать. В появившемся окне необходимо выбрать пункт раздел и ввести имя нового раздела. Входы и выходы проекта добавляются в Раздел путем перетаскивания из дерева или со страницы (с зажатым Ctrl). В выпадающем меню при перетаскивании входа или выхода в раздел следует выбрать Добавить.

Для отображения входов и выходов раздела на графике следует перетащить раздел из дерева проекта в верхнюю часть окна График – данный Раздел автоматически станет текущим для графика. Для текущего Раздела в таблицу графика автоматически добавляются входы/выходы из этого раздела. Если добавить новый вход или выход проекта в таблицу графика, он автоматически добавится в раздел.

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

Свойства для отображения в таблице графика

Свойство

Описание

Значение онлайн

Текущее значение входа/выхода

Маркер

Значение входа/выхода в момент, отмеченный маркером

График: минимум шкалы

Минимум индивидуальной шкалы входа/выхода

График: максимум шкалы

Максимум индивидуальной шкалы входа/выхода

Цвет

Цвет графика сигнала и его индивидуальной шкалы

Получено

Количество полученных значений

Ошибок

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

Зона нечувствительности

Если модуль разницы между значениями сигналов меньше данной величины, то будет считаться, что значение не изменилось

Период опроса (мс)

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

Размер очереди

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

Graphic

Свойства Получено и Ошибок отображают количество полученных значений данного сигнала и количество ошибок, которые сигнализируют о переполнении очереди.

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

Если нажать ПКМ на строке таблицы, соответствующей входу/выходу, то вызывается контекстное меню, которое позволяет:

  • Скрыть или Показать вход или выход на графике;

  • Скрыть ось или Показать ось для входа или выхода;

  • Удалить вход или выход из таблицы.

Настройки графика

Свойство

Описание

Длительность данных (сек)

Количество данных, которое нужно хранить

Показывать (сек)

Количество данных, которое нужно показывать на окне

Период отправки шкалы

Частота отправки значений сигналов контроллером на график (отправка происходит не чаще этого времени)

Очищать данные

Удалять старые данные с графика при запуске

Общая ось (Y)

Используется для отображения данных на общей оси

Маркеры 1, 2

Вертикальные прямые, с помощью которых можно просмотреть значение на графике в нужный момент времени

Делать отсчеты

· в фоне – по окончании периода отсчета будет посылаться одно текущее значение с каждого входа/выхода,

· в таймере – по окончании периода отсчета для каждого входа/выхода будут посылаться значения, накопленные с заданным таймерным промежутком,

· произвольно – значения накапливаются с заданным периодом, Период и Размер очереди устанавливается справа. Эти значения применяются для всех входов/выходов, у которых не установлены свои значения.

Для просмотра текущих значений входов/выходов на графике следует нажать кнопку Запустить (запуск проекта на контроллере описан в разделе). Для остановки отрисовки графика следует нажать Остановить.

Примечание
Для корректной работы графика необходимо синхронизировать системное время контроллера с браузером через web-конфигуратор (Система/Время/Системное времяСинхронизировать с браузером).

График подключается к запущенному проекту как клиент по протоколу OPC UA. По умолчанию график оформляет подписку на данные проекта с дискретностью фонового цикла.

Для получения данных из таймера в проекте должен быть создан функциональный блок OpcUAServerTimer из библиотеки paOpcUA. Блок следует создать в Таймере для работы подписок с точностью таймерного цикла (период отображения данных задается свойством модуля Таймерный промежуток в мс).

Подробнее см. в документе Обмен с верхним уровнем. Библиотека paOpcUA.

Graphic
GraphicGraphic

Масштабировать график можно с помощью колеса мыши с зажатым Ctrl на области оси. При выделении ЛКМ области слева направо и сверху вниз график увеличивается.

Перемещаться по графику влево/вправо и вверх/вниз можно с помощью мыши с зажатой ЛКМ на соответствующей оси графика.

Нажав правой кнопкой мыши в окне тренда, можно сбросить масштаб, либо выбрать следующий, предыдущий или исходный масштаб.

Также можно выбрать режим Отображение на разных полотнах.

Graphic

Нажатие правой кнопкой мыши по оси Х или У открывает их свойства. Также кнопки свойств осей можно отобразить, нажав на кнопку с ползунками в левой нижней части графика.

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

В свойствах оси Y можно выбрать границы отображаемого интервала данных.

С помощью кнопки Экспорт можно выгрузить график на диск в форматах .txt, .pdf или .png.

Внимание
Путь сохранения не должен содержать кириллицу и пробелы.
Graphic
Экран отладчика

Окно представления Экран отладчика позволяет просматривать и изменять значения на входах и выходах функциональных блоков во время отладки (подробнее об отладке см. в разделе).

Экран отладчика соответствует определенному Разделу. Входы и выходы, которые нужно отобразить на экране, следует добавить в этот раздел.

Для создания Раздела нужно нажать на модуль ПКМ и нажать Создать. В появившемся окне необходимо выбрать пункт раздел и ввести имя нового раздела.

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

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

Входы и выходы раздела можно отобразить следующими типами графических элементов:

Типы графических элементов

Свойство

Класс отображения

Описание

Кнопка импульсная

pushbutton

При нажатии, если на входе не 0, сначала посылает 0, затем 1, затем 0

Кнопка

togglebutton

При нажатии посылает 1, при отжатии – 0

Слайдер

slider

Отображает значения в диапазоне от минимума до максимума, для входа – позволяет редактировать значение

Шкала

dial

Аналогично слайдеру отображает значения в диапазоне от минимума до максимума, для входа - позволяет редактировать значение

Значение

value

Отображает значение целым или вещественным числом

Лампа

lamp

При нулевом или отрицательном значении светится красным цветом, при положительном – светится зеленым (цвета лампы можно поменять в окне свойств)

Graphic

Один вход или выход в проекте может соответствовать только одному графическому элементу на экране.

При добавлении входа или выхода в раздел экрана ему по умолчанию присваивается класс отображения в соответствии с правилом:

  • если это логический вход – кнопка, иначе – слайдер

  • если это логический выход – лампа, иначе – значение.

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

  1. Открыть свойства интересующего графического элемента.

  2. Добавить свойство Экран: класс отображения из нижнего выпадающего списка.

  3. Установить в свойстве нужное значение класса отображения.

Если нажать ЛКМ на графический элемент на экране отладчика дважды, то на странице в текущем окне отображается соответствующий вход или выход.

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

На экран отладчика также можно добавить элементы панели Редактирование: стрелку, фон, текст.

Масштабирование экрана отладчика выполняется с помощью колеса мыши с зажатым Ctrl.

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

Свойства графических элементов экрана отладчика

Свойство

Описание

Комментарии

Отображается в качестве комментария около входа/выхода, в дереве, над графическим элементом

Номер

Определяет порядок отображения в дереве, начиная с 0

Экран: класс отображения

Выбор типа графического элемента

Экран: разрешить изменения

Разрешает редактировать значение во время отладки для графических элементов значение, слайдер, шкала

Экран: x и Экран: y

Координаты элемента

Экран: min и Экран: max

Задают диапазон изменения (минимальное и максимальное значения) для графических элементов слайдер, шкала

Экран: шаг

Задает шаг шкалы для слайдера и шкалы

Экран: радиус скругления

Задает радиус скругления для лампы

Экран: цвет_1 и Экран: цвет_2

Задают цвет графического элемента лампа во «включенном» и «выключенном» состояниях

Экран: ширина элемента и Экран: высота элемента

Задают ширину и высоту графического элемента

Экран: отключить надписи

Убирает отображение свойства Комментарии над графическим элементом

Системные окна

Типы системных окон

Тип окна представления

Пиктограмма

Функция

Контроллер

Graphic

Подключение к контроллеру и загрузка проекта

Прогресс

Graphic

Отслеживание процессов исполнения

Проекты

Graphic

Управление проектами и библиотеками

Настройки сборки

Graphic

Пути к установленным сборкам

Поиск

Graphic

Поиск по проекту

Справка или F1

Graphic

Информация по среде разработки и добавленным библиотекам

О программе

Graphic

Сведения о программе, библиотеках, загрузка обновлений

Печать

Graphic

Печать страниц проекта

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

Graphic
Панель Окна

Системные окна можно размещать на экране несколькими способами:

  • как отдельные окна представления;

  • выносить поверх открытых окон представления;

  • в виде вкладок.

Graphic
Размещение системных окон по вкладкам
Контроллер

Инструменты для загрузки и запуска программ на контроллере находятся в окне Контроллер.

Подробно о способах загрузки проекта на контроллер см. в разделе.

Подключение к контроллеру для загрузки и запуска проекта осуществляется по протоколу SSH.

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

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

Кнопкой Загрузить выполняется загрузка проекта в контроллер.

Кнопками Запустить модуль и Остановить модуль выполняется, соответственно, запуск и останов работы загруженного приложения на контроллере.

Кнопкой Закрыть сессию выполняется отключение от ПЛК.

Graphic
Прогресс

Для отслеживания процесса выполнения используется окно Прогресс.

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

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

Подробно о трансляции проекта см. в разделе.

Graphic
Проекты

Для добавления в среду ссылок на проекты и библиотеки используется окно Проекты.

В окне Проекты с помощью соответствующих кнопок можно открыть существующие проект и/или библиотеку, создать новые, закрыть (для этой функции также можно использовать значок «х» закрытия справа от проекта/библиотеки в списке).

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

В окне История изменений можно получить информацию по логам выбранного проекта и/или библиотеки.

Через окно Проекты можно сохранить копию проекта под другим названием с помощью кнопки Сохранить как…, а также создать зашифрованную версию проекта (подробнее о защите проекта см. в разделе).

Graphic
Настройки сборки

Для настроек сборок используется окно Настройки сборки.

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

Graphic
Поиск

Для поиска по проекту используется окно Поиск.

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

Graphic
Системное окно Поиск
Справка

Для получения информации по среде разработки или по работе и назначению входов/выходов функционального блока из библиотеки используется окно Справка (горячая клавиша F1).

В верхнем выпадающем списке окна Справка можно выбрать интересующий раздел справки – среду разработки или конкретную библиотеку.

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

Открыть справку на конкретный функциональный блок в проекте можно, выбрав его в дереве (в проекте или в библиотеке) или непосредственно на странице проекта и нажав F1. Еще можно выбрать Справка в выпадающем контекстном меню при нажатии ПКМ на блоке.

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

Graphic
О программе

Для получения сведений о программе, версиях библиотек и наличии обновлений предназначено системное окно О программе.

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

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

Graphic

Во вкладке окна Обновления при нажатии Проверить проверяется наличие обновлений. Требуется подключение к серверу pa.ru.

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

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

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

В нижней части окна выбирается распаковщик – unzip или 7zip.

Подробно обновление среды и/или библиотек описано в разделе.

В левом нижнем углу окна расположена кнопка Удалить бэкапы. В новом окне можно выбрать бэкапы (резервные копии проекта) для удаления. При превышении общего объема бэкапов в 500 Мб в окне выводится предупреждающее сообщение.

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

Graphic
Печать

Для печати страниц проекта используется окно Печать.

В окне выбирается нужный проект.

Graphic
Системное окно Печать

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

Graphic
Данные для титульного листа и штампов

В Настройках можно выбрать печати и вариант печати – на бумажном носителе или в файл.

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

Graphic
Настройки печати

Окно Свойства

Окно Свойства элемента можно открыть, вызвав контекстное меню правой кнопкой мыши и выбрав Свойства. Или можно нажать соответствующую пиктограмму на панели Инструменты.

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

В списке указываются выбранные свойства элемента. Серым цветом отображаются свойства, недоступные для изменения пользователем.

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

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

Для удаления свойства нужно нажать на него ПКМ и выбрать Удалить свойство.

Graphic
Окно Свойства

Включенный флаг Привязать к родителю позволяет задать свойство текущего узла только внутри текущего родителя.

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

Этим способом можно добавить вход в несколько OPC UA-клиентов и в каждом задать свое свойство Зона нечувствительности.

В свойства можно добавить пользовательские свойства Пользовательское свойство 00,..., 20. Их использование полезно, например, в свойствах модуля для сохранения дополнительных IP адресов и обращения к ним по SQL-запросам.

Пример запроса пользовательского свойства Пользовательское свойство 00 (prop_0):

<sql SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0"</sql>.

Конфигурация экрана

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

Graphic

Настройки приложения

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

Graphic

Редактирование проекта

Создание нового проекта

Новый проект можно создать двумя способами:

  1. Выбрать пункт меню Проект/Создать.

    Graphic
    Создание нового проекта через меню Проект/Создать
  2. Перейти в Окно/Проекты и нажать кнопку Создать.

    Graphic
    Создание нового проекта через окно Проекты

    В открывшемся окне следует выбрать место для сохранения и ввести имя нового проекта. В имени можно использовать только латинские буквы, символ «_» и цифры. Каждый новый проект рекомендуется размещать в отдельной папке, поскольку внутри нее среда разработки создает временные файлы при трансляции и копии проекта (бэкапы).

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

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

Внимание
Для создания модуля с отладчиком для контроллера обязательно наличие в среде ссылок на библиотеки paCore и paOpcUA. Подробнее о добавлении библиотек в среде см. в разделе.
Graphic

Отладчик среды Полигон подключается к запущенному проекту как клиент OPC UA. При выборе шаблона модуля с отладчиком в новом проекте в месте работы Фон автоматически создается программа Debug, на странице которой добавлен блок OPC UA-сервера (OpcUAServer) из библиотеки paOpcUA. На входы блока ip IP адрес и prt – локальный порт контроллера прописываются соответствующие свойства модуля в виде SQL-запросов.

Запрос IP адреса:

"<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"

Запрос номера порта:

<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_debug_port"</sql>

Подробнее об отладчике среды Полигон см. в разделе.

Реализация протокола OPC UA в среде Полигон подробнее описана в документе Обмен с верхним уровнем. Библиотека paOpcUA.

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

Graphic

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

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

Graphic

Создание компонентов проекта

Создать компоненты проекта внутри существующих можно в представлении Дерево. Структура компонентов проекта описана в разделе.

Таким образом, внутри проекта создаются Модули. Внутри Модуля Места работы и Разделы. Внутри Мест работы создаются Программы и т. д.

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

  1. Нажать ПКМ на модуле, месте работы (таймере или фоне), программе и т. д.

  2. В контекстном меню выбрать команду Создать.

  3. Выбрать тип нового компонента и, если необходимо, ввести имя, номер, количество.

    Graphic
    Graphic
    Graphic

Создание таймерного потока Ввод-вывод

По умолчанию в проекте добавлено два места работы – Таймер и Фон. Если необходимо, в проект можно добавить второй таймерный поток – Ввод-вывод.

Ввод-вывод – таймерный поток, полностью аналогичный месту работы Таймер, но с более высоким приоритетом выполнения.

Внимание
Таймерный поток Ввод-вывод прерывает поток Таймер на время своего выполнения, поэтому время выполнения Таймера увеличивается.

Для добавления места работы Ввод-вывод следует в контекстном меню модуля нажать Создать и выбрать ввод-вывод.

Graphic
Graphic
Graphic

Основное свойство Таймера и Ввода-выводаТаймерный промежуток – время, через которое повторно вызывается программа.

Необходимо соизмерять размер программ (количество функциональных блоков), которые находятся в месте работы ввод-вывод, со временем таймерного цикла. При недостаточном интервале таймерного цикла может возникнуть ошибка времени исполнения – Time Out. Данная ошибка повлечет за собой остановку программы (отслеживать реальное время выполнения можно с помощью функционального блока SysInfo).

Graphic

Создание места работы Поток

По умолчанию в проекте добавлено два места работы – Таймер и Фон. В проект также можно добавить несколько мест работы, которые выполняются в фоновых потоках – Потоки.

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

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

Свойства мест работы Фон и Поток:

  • Приоритет фонового потока - число, задающее приоритет потока в системе. Чем выше это значение, тем более приоритетным является поток. Место работы приостанавливает выполнение менее приоритетных потоков, пока наиболее приоритетный поток не завершит свой цикл. Максимальное значение приоритета определяется операционной системой (например, для ОС Linux на ПЛК Овен –47). Актуальное значение максимально возможного приоритета можно посмотреть в отладчике на выходе блока ThreadMan из библиотеки paCore, раздел Системные;

  • Периодичность работы фонового потока (мс) – время в мс, задающее периодичность выполнения программ потока (только для места работы Поток). Время выполнения потока не контролируется. Если поток не успевает получить управление в соответствии с заданной периодичностью, то выполнение программы не прерывается (в этом отличие от места работы Таймер и Входы). Если свойство не задано, то поток переходит к следующему циклу сразу после завершения предыдущего (после обязательного простоя);

  • Привязка фонового потока к ядру – для многоядерных процессоров задает номер ядра (от 0), к которому системе следует привязать поток. Если свойство не задано, то ядро выбирается системой автоматически.

Graphic
Свойства фоновых потоков

Создание функционального блока

Функциональные блоки создаются внутри страниц. Для создания функционального блока есть несколько способов:

  1. Открыть нужную страницу в активном окне, нажать ПКМ на свободном месте и выбрать Создать.

    Graphic
  2. Нажать на пиктограмму Создать на панели Инструменты открытой страницы.

    Graphic
  3. Открыть контекстное меню страницы в представлении Дерево и нажать Создать.

После выбора команды Создать откроется окно создания функционального блока.

Graphic

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

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

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

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

  2. В поле посередине появится список разделов выбранной библиотеки, внутри разделов – списки функциональных блоков. Следует выбрать нужный блок.

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

  4. После выделения нужного блока нажать ОК – новый блок появится на странице.

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

Graphic

Также можно создать ФБ на странице путем перетаскивания его из дерева библиотеки. Для этого следует:

  1. Открыть в представлении Дерево нужную библиотеку.

  2. Выбрать функциональный блок.

  3. Перетащить блок на открытую страницу.

  4. При отпускании мыши появится контекстное меню, в котором следует выбрать Создать.

Graphic

Некоторые ФБ можно разместить только в таймерном потоке или в фоне (определяется свойством Может работать только в…), при попытке разместить такой блок не в указанном месте работы появится окно соответствующей ошибки.

Graphic

Создание циклических входов/выходов и групп входов/выходов

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

Для того, чтобы добавить входы/выходы у блока, необходимо выделить его ПКМ и выбрать команду Создать. В появившемся окне следует ввести необходимое Количество добавляемых входов/выходов и нажать ОК.

Graphic
Graphic
Graphic

Для удаления лишних входов/выходов можно выделить их с зажатым Shift и выполнить: ПКМ – Удалить.

Комментарии у входов/выходов блоков

Около входов/выходов ФБ можно оставлять комментарии. Добавить комментарий входу/выходу можно двумя способами:

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

    Graphic
    Graphic
  2. Дважды нажать ЛКМ около интересующего входа/выхода – появится строка ввода комментария, следует ввести комментарий, он отобразится зеленым цветом.

    Graphic

Проведение связей

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

Graphic

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

Graphic
Graphic

При создании связи учитываются типы данных входа и выхода. Если типы оказываются несовместимы, выдается сообщение об ошибке и связь не проводится. Нельзя создать связь с Константным входом.

Цвет связей отображает тип данных входа:

  • черный – булевое;

  • красный – целое;

  • синий – вещественное;

  • серый – строковое.

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

Graphic

Связь можно переносить с одного входа на другой. Для этого нужно «схватить» связь на входе и, не отпуская, перенести ее на новый вход.

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

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

Из «дерева в дерево» также можно провести связь: захватить нужный вход/выход, перетащить его на выход/вход, к которому необходимо провести связь – выбрать в меню Провести связь.

Примечание
При проведении связей следует помнить: если провести связь от выхода к входу – комментарий выхода дублируется на вход. Если проводить связь от входа к выходу – комментарий не дублируется. Подробно о комментариях см. в разделе.

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

Graphic

На входе, на который должна идти связь, следует щелкнуть ПКМ и выбрать Задать константу. В открывшемся списке выбрать нужную константу и нажать Установить.

Graphic
Graphic

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

Graphic

Проведение связей между модулями

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

Обмен данными при проведении связей между модулями обеспечивается по протоколу OPC UA.

Подробно реализация протокола OPC UA в среде Полигон описана в документе Обмен с верхним уровнем. Библиотека paOpcUA.

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

Graphic

В появившемся окне необходимо настроить связь между модулями. В одном из модулей выбирается блок OPC UA-сервера, во втором – блок OPC UA-клиента. После настройки связи необходимо нажать Провести связь между модулями.

Graphic
Graphic

В раздел Данные выбранного блока OPC UA-клиента добавится вход с прописанным свойством ID источника/приемника, равным индексу входа или выхода в модуле, который был выбран как OPC UA-сервер.

Graphic
Graphic

Задание порядка выполнения функциональных блоков на странице

Для задания очередности выполнения блоков на странице следует нажать на свободном месте страницы ПКМ и выбрать Порядки.

Graphic
Порядки

В открывшемся окне можно выбрать следующие порядки:

  • Одинаковый порядок;

  • Порядок по возрастанию;

  • Порядок по потоку данных.

Graphic
Установка порядков блоков на странице

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

Graphic
Одинаковый порядок выполнения

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

Graphic
Порядок выполнения по возрастанию

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

Graphic
Порядок выполнения по потоку данных

Добавление стрелок, фона и текста на страницы

Для добавления комментариев и заметок на страницы проекта и экраны отладчика предусмотрены элементы стрелка, фон и текст. Добавить их на страницу можно с панели инструментов Редактирование.

Для добавления панели следует в меню Окнв/Панели инструментов поставить флаг Редактирование.

Graphic

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

Graphic

Добавление входов и выходов в разделы

В компонент проекта Раздел можно добавлять входы/выходы со страниц программ для отображения на экране отладчика, для вывода на график, для передачи сигналов OPC UA-клиенту и др.

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

Можно добавить сразу несколько входов/выходов одного блока в раздел. Для этого следует выделять их с зажатой клавишей Shift.

Graphic

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

Graphic
Graphic

При двойном щелчке ЛКМ по строке списка откроется расположение входа или выхода в дереве.

Graphic

Навигация по проекту

Для навигации по проекту можно воспользоваться панелью Навигация, которая добавляется установкой флага Навигация в меню Окна/Панели инструментов.

Подробно панели инструментов окон представления описаны в разделе.

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

Graphic

С помощью кнопок Назад и Вперед можно перемещаться между ранее открытыми страницами. Кнопки Предыдущая страница и Следующая страница производят переключение в той последовательности, как страницы расположены в проекте (сверху-вниз).

Graphic

Еще можно перемещаться по полям страниц – если щелкнуть ЛКМ на адрес связи, то в активное окно отобразится соответствующая страница.

Graphic

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

Graphic

Копирование частей проекта

Для копирования части проекта следует выделить нужную часть при помощи мыши (для выделения нескольких частей – зажав Shift) и нажать Копировать на панели инструментов. Также можно воспользоваться комбинацией Ctrl + c.

Graphic

Далее перейти в нужное место проекта и нажать на панели инструментов Вставить. Также выполнить вставку можно через контекстное меню, которое открывается при нажатии ПКМ на компоненте дерева, или сочетанием клавиш Ctrl + v.

Graphic

Расположение компонентов и связи, которые были внутри вставляемой части, сохранятся.

Также копировать части проекта можно перетаскиванием. Для этого нужно «схватить» мышью требуемую часть проекта и перетащить в новое место. В открывшемся меню выбрать команду Копировать (если выбрать Перенести, то часть проекта удалится из начального места).

Graphic

Копировать компоненты возможно не только внутри одного проекта, но и в разных.

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

  1. Имя вида b<индекс блока> присваивается при создании блоков, для которых не задано пользовательское имя. При копировании в имени нового блока отобразится его индекс.

    Graphic
    Копирование блока b76. Имя нового блока b253 определяется по индексу
  2. Кастомные имена могут быть заданы пользователем или сформированы при генерации блоков из MS Excel. Переименование таких блоков зависит от наличия порядкового номера в имени.

Если имя без цифр в конце, то добавится суффикс «_» и номер вида 01 (дополнение до двух цифр).

Graphic
customname

Если в имени есть номер в конце, то при копировании блока номер меняется, определяя формат по количеству «лишних» нулей в начале числа. Для генерации порядкового номера производится поиск всех нумерованных имен, которые начинаются так же, как исходное, и добавляется номер на 1 больше максимального из них. Если при копировании необходимо сохранять номер в имени, то рекомендуется обеспечить окончание имени нечисловым символом, например, знаком «_».

Graphic
customname

Автоматическое изменение имен блоков при копировании можно отключить в окне Настройки приложения во вкладке Копирование.

Перенос блоков, страниц, программ

Для переноса блоков, страниц или программ нужно «схватить» их мышью и перетащить в требуемое место. При отпускании выбрать Перенести.

Graphic

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

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

Трансляция

Завершающим этапом создания проекта является Трансляция созданного алгоритма в исполняемый файл.

Трансляция проводится в два этапа. Графическое представление проекта преобразуется в исходные тексты программы на C++. Эти файлы с расширениями .срр и .hpp, хранятся в каталоге проекта в папке с именем build_имя модуля_ОС. Они создаются заново каждый раз при трансляции и их редактирование не имеет смысла.

На каждую программу проекта создается несколько файлов:

  • [имя программы].cpp – содержит вызовы алгоритмов функциональных блоков в соответствии с порядком выполнения;
  • i_[индекс программы].cpp – содержит вызовы инициализации функциональных блоков в соответствии с порядком выполнения;

  • n_[индекс программы].cpp и e_[индекс программы].cpp – содержат описания функциональных блоков.

Индекс функционального блока используется при трансляции как имя объекта, отвечающего за работу этого блока. Класс объекта соответствует типу функционального блока и описан в библиотеке функциональных блоков.

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

Имя исполняемого файла для операционной системы Linux – имя модуля.o, для Windows – имя модуля.exe.

Свойства модуля, используемые при трансляции

Свойство

Описание

IP адрес

IP-адрес контроллера

ОС

Тип операционной системы для трансляции

Тип процессорной платы

Тип процессорной платы контроллера

Watchdog

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

Автозапуск

Включить/выключить автоматический запуск проекта на исполнение (флаг). При включении на контроллер загружается файл autostart

Порт отладчика

Порт OPC UA-сервера в программе, если отличается от стандартного 4840 (вход prt блока OpcUAServer)

Для того, чтобы выполнить трансляцию в Полигон, можно использовать одну из команд контекстного меню (открывается нажатием ПКМ на модуле):

  • Транслировать все – трансляция всего модуля;
  • Перестроить – компиляция проекта без изменения исходных текстов. Данную команду следует применять при трансляции неизмененного проекта с новыми библиотеками.

При возникновении сомнений рекомендуется использовать команду Транслировать все. Для трансляции проекта также можно использовать соответствующую кнопку на панели Инструменты.

Если ранее проект транслировался в данную папку, возникнет окно подтверждения трансляции, следует выбрать – Да.

Graphic
Graphic

При трансляции в окне Прогресс (меню Окна/Прогресс) отображается ход выполнения, при наличии ошибок они указываются с описанием.

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

Graphic

Примеры задания свойств модуля для трансляции под ПЛК210 и виртуальный контроллер приведены в разделе.

Загрузка и запуск проекта

После трансляции проекта его следует загрузить на контроллер.

Для контроллеров ОВЕН загрузку и запуск проекта можно провести следующими способами:

  • через Панель отладки;
  • через web-интерфейс конфигурации во вкладке ПЛК/Приложение;

    через системное окно Контроллер.

Свойства модуля для загрузки проекта в ПЛК210

Проект в ПЛК210 загружается через протокол SSH.

Свойства модуля, используемые при трансляции под ПЛК210

Свойство

Описание

Значение

IP-адрес

IP-адрес контроллера

К контроллеру можно подключаться из среды через интерфейсы:

·    USB Device – IP-адрес 172.16.0.1

·    Ethernet – IP-адрес по умолчанию 192.168.0.10 (порты Eth 1…3)

Подключаться через

Протокол для подключения к контроллеру

SSH

SSH: логин

Логин для подключения к контроллеру

root

SSH: пароль

Пароль для подключения к контроллеру

По умолчанию owen

ОС

Тип операционной системы для трансляции

Linux Овен прошивка 3.х

Тип процессорной платы

Тип процессорной платы контроллера

Овен ПЛК210

Watchdog

Включить/выключить сторожевой таймер (флаг)

На время отладки рекомендуется отключать

Автозапуск

Включить/выключить автоматический запуск проекта на исполнение при включении контроллера (флаг). При установке флага на контроллер загружается файл autostart

-

Порт отладчика

Порт OPC UA-сервера для доступа отладчика Полигон

По умолчанию 4840

Недостающие в окне свойства можно добавить из выпадающего списка снизу. Работа с окном Свойства подробно описана в разделе.

При трансляции проекта под ПЛК210 файлы трансляции записываются в папку build_имя модуля_LinuxOwen3. Исполняемый файл программы для контроллера – имя модуля.o.

Graphic

Панель отладки

Для трансляции, загрузки и запуска проекта на контроллере в среде Полигон предназначена Панель отладки. Панель отладки добавляется через меню Окна/Панели инструментовПанель отладки.

Graphic
Элементы панели отладки

Элемент

Пиктограмма

Функция

Модуль

Graphic

Выбор модуля для запуска

Индикатор статуса

Graphic

Отображает статус запущенного проекта

Перезапустить во временной сессии

Graphic

Трансляция модуля, загрузка исполняемого файла на контроллер и запуск на «переднем плане»

Внимание
При закрытии среды разработки выполнение программы на контроллере будет остановлено

Перезапустить для постоянной работы

Graphic

Трансляция модуля, загрузка исполняемого файла на контроллер и запуск со свойством Автозапуск

Внимание
Для запуска программы со свойством Автозапуск контроллер будет перезагружен

Запустить на виртуальном контроллере

Graphic

Трансляция модуля и запуск локально на ПК. Отладчик подключается к запущенному модулю, независимо от того, какие выбраны IP адрес и OC для трансляции. Подробнее см. в разделе

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

  1. Задать свойства модуля в соответствии с таблицей.

  2. В выпадающем списке на панели отладки выбрать Модуль (среди модулей проектов, открытых в данный момент в среде разработки).

  3. Выполнить запуск модуля одним из способов:

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

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

      Внимание
      При загрузке нового проекта на контроллер перезапишется проект только с таким же названием. Ненужные файлы проектов можно удалить через web-конфигуратор контроллера (вкладка ПЛК/ПриложениеУдаление…), через любой файловый менеджер или через консоль.

После запуска программы станет активной кнопка остановки программы.

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

Graphic

Информацию о запущенной программе на контроллере можно посмотреть в web-конфигураторе в разделе ПЛК/Информация.

Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Graphic

Запуск проекта через web-интерфейс конфигурации

Инструменты для загрузки и запуска программы на контроллере через web-интерфейс конфигурации находятся во вкладке ПЛК/Приложение. Для запуска программы следует:

  1. Задать свойства модуля в соответствии с таблицей и транслировать модуль – в папке build_имя модуля_LinuxOwen3 на диске появится исполняемый файл программы для контроллера – имя модуля.o.

  2. Зайти в web-конфигуратор контроллера и перейти во вкладку ПЛК/Приложение.

  3. Нажать Загрузка приложения… и выбрать файл имя модуля.o.

    Внимание
    При загрузке нового проекта на контроллер перезапишется проект только с таким же названием. Ненужные файлы проектов можно удалить через web-конфигуратор контроллера (вкладка ПЛК/ПриложениеУдаление…), через любой файловый менеджер или через консоль.
  4. Нажать кнопку Запуск… напротив имя модуля.o.

    Внимание
    Для автоматического запуска приложения при перезагрузке контроллера следует установить для него Автозапуск (кнопка Установить Автозапуск…). Для корректного останова приложения из web-конфигуратора следует снять для него Автозапуск.
    Graphic

После запуска программы станет активной кнопка остановки программы.

Внимание
Для корректной остановки программы через web-конфигуратор следует снять Автозапуск.

Информацию о запущенной программе на контроллере можно посмотреть в web-конфигураторе в разделе ПЛК/Информация.

Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Graphic

Запуск проекта через окно Контроллер

Для загрузки и запуска проекта на контроллере через системное окно Контроллер следует:

  1. Задать свойства модуля в соответствии с таблицей и транслировать модуль.

  2. Открыть окно Контроллер через меню Окна/Контроллер.

  3. В выпадающем списке выбрать модуль, который будет загружен в контроллер.

  4. Кнопкой Соединить выполнить подключение к контроллеру по SSH.

    Graphic
  5. Кнопкой Загрузить выполнить загрузку проекта в контроллер.

    Внимание
    При загрузке нового проекта на контроллер перезапишется проект только с таким же названием. Ненужные файлы проектов можно удалить через web-конфигуратор контроллера (вкладка ПЛК/ПриложениеУдаление…), через любой файловый менеджер или через консоль.
  6. Кнопкой Запустить модуль выполнить запуск загруженного проекта.

  7. Подключится к запущенному проекту отладчиком среды через панель Инструменты.

После запуска программы станет активной кнопка остановки программы – Остановить модуль.

Graphic
Внимание
Через окно Контроллер проект запускается в foreground, поэтому при закрытии сессии проект на контроллере перестанет выполняться. Для старта проекта в background следует установить Автозапуск, повторно транслировать модуль, загрузить в ПЛК, выполнить перезагрузку ПЛК по питанию или команду reboot из терминала. Проект запустится автоматически после загрузки ПЛК. Аналогично можно запустить проект для постоянной работы через Панель отладки или web-конфигуратор ПЛК.

Информацию о запущенной программе на контроллере можно посмотреть в web-конфигураторе в разделе ПЛК/Информация.

Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Graphic

Запуск проекта на виртуальном контроллере

Запустить проект на виртуальном контроллере можно с помощью Панели отладки (см. раздел). Для этого следует:

  1. Добавить панель отладки через меню Окна/Панели инструментов – Панель отладки.
  2. В выпадающем списке на панели отладки выбрать Модуль (среди модулей проектов, открытых в данный момент в среде разработки).

  3. Выполнить запуск модуля на виртуальном контроллере кнопкой Запустить на виртуальном контроллере – в новом окне запустится приложение виртуального контроллера, к нему подключится отладчик среды.

После запуска программы станет активной кнопка остановки программы.

Запустить виртуальный контроллер можно вручную. Для этого следует:

  1. Установить свойства модуля в соответствии с таблицей:

    Свойства модуля, используемые при трансляции на ПК

    Свойство

    Описание

    Значение для ОС Windows

    Значение для ОС Linux

    IP-адрес

    Локальный IP-адрес

    127.0.0.1

    Подключаться через

    Протокол для подключения к контроллеру

    Не используется

    SSH

    ОС

    Тип операционной системы для трансляции

    Windows

    Astra Linux SE1.7

    Тип процессорной платы

    Тип процессорной платы

    ПК

    Порт отладчика

    Порт OPC UA-сервера для доступа отладчика Полигон

    По умолчанию 4840

    По умолчанию 4850

    Запускать с ключами

    Используется для игнорирования блоков из библиотеки paOwenIO

    -I

  2. Недостающие свойства можно добавить из выпадающего списка добавления новых свойств внизу окна. Работа с окном Свойства подробно описана в разделе.
    Graphic
    Windows
    Graphic
    Linux
  3. Транслировать модуль:

    • для ПК с ОС Windows – запустить исполняемый файл имя модуля.exe из папки build_имя модуля_WINmingw;

    • для ПК с ОС Linux – запустить исполняемый файл имя модуля.o из папки build_имя модуля_LinuxAstra17.

  4. Подключиться к запущенному приложению отладчиком среды через панель Инструменты.

Внимание
Ограничение на работу виртуального контроллера составляет 1 час. Виртуальный контроллер работает неограниченное время, если у пользователя есть USB-ключ. По вопросу приобретения USB-ключа обращаться на почту polygon@pa.ru.

Отладка проекта

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

Graphic

При первом подключении отладчиком к запущенному проекту запрашивается пароль, указанный при создании проекта.

Graphic

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

Обмен данными осуществляется по протоколу OPC UA, поэтому в проекте обязательно должен быть блок OpcUAServer из библиотеки paOpcUA. На входе блока ip следует прописать IP-адрес интерфейса контроллера, по которому будет подключаться отладчик.

При выборе шаблона модуля с отладчиком при создании нового проекта в месте работы Фон автоматически создается программа Debug, на странице которой добавлен блок OPC UA-сервера. На входы блока ip IP адрес и prt – локальный порт контроллера прописываются соответствующие свойства модуля в виде SQL-запросов.

Запрос IP-адреса:

"<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_ip"</sql>"

Запрос номера порта:

<sql>SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_debug_port"</sql>

Подробнее реализация протокола OPC UA в среде Полигон описана в документе Обмен с верхним уровнем. paOpcUA.

Остановить выполнение проекта на контроллере можно через Панель отладки или, если проект запускался через окно Контроллер, кнопкой Остановить модуль. Также выполнение проекта можно остановить через контекстное меню модуля в дереве проекта, нажав Остановить.

Graphic

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

Подмена значений на входах/выходах

В режиме отладки текущие значения входов/выходов блока отображаются синим цветом. Справа от названия типа блока зеленым цветом отображается время выполнения блока в микросекундах.

Graphic

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

Graphic

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

Graphic

Подмена значения на входе игнорирует константы и связи.

При подмене значения на выходе возможны следующие варианты:

  1. Подмена выключает блок. По умолчанию при двойном нажатии на текущем значении, срабатывает этот вариант.

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

    Graphic

Для подмены значения выхода без выключения блока следует:

  1. Нажать на выходе ПКМ.

  2. Выбрать Установить значение.

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

Graphic
Graphic

Для сброса значения нужно нажать на выходе ПКМ и выбрать Сбросить.

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

Graphic

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

Graphic

График

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

Для добавления входа или выхода в таблицу над графиком нужно перетащить его со страницы (соответствующий Модуль автоматически станет текущим для графика). Входы/выходы текущего Модуля из дерева можно добавлять в таблицу с помощью перетаскивания.

Если текущим будет Раздел, то в таблицу автоматически добавятся входы/выходы из раздела. Если добавить новый вход или выход в таблицу, он автоматически добавится в Раздел.

Подробнее об элементах графика см. в разделе.

Для просмотра значений входов/выходов нужно загрузить исполняемый файл на контроллер и нажать кнопку Запустить. Для остановки – Остановить.

График подключается к OPC UA-серверу контроллера в качестве клиента (аналогично отладчику) с добавленными в него данными.

Примечание
Для корректной работы графика необходимо синхронизировать системное время контроллера с браузером через web-конфигуратор (Система/Время/Системное времяСинхронизировать с браузером).

Экран отладчика

В режиме отладки текущие значения можно просматривать и изменять на Экране отладчика.

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

  • если это логический вход – кнопка, иначе – слайдер;

  • если это логический выход – лампа, иначе – значение.

Класс отображения можно поменять в окне свойств.

Подробнее о работе с экраном отладчика и свойствах элементов см. в разделе.

В режиме работы отладчика для того, чтобы изменить значения на входе, нужно дважды щелкнуть ЛКМ на соответствующем элементе и отредактировать значение. Это работает для графических элементов значение, слайдер и шкала.

Информация о запущенном проекте

В режиме отладки можно получить различную информацию о запущенной программе.

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

Graphic

Информацию о запущенном приложении на контроллере также можно посмотреть в web-конфигураторе в разделе ПЛК/Информация.

Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Graphic

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

Graphic
Graphic

Также при трансляции в папке build_имя модуля_ОС создается файл versions.txt, в котором показаны идентификатор проекта, название модуля, дата и время трансляции, версии библиотек.

Graphic
Файл versions.txt

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

Graphic

Получить время выполнения мест работы в программе также можно с помощью ФБ SysInfo.

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

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

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

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

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

Внимание
Имя Группы типов должно содержать только латинские буквы, цифры и «_». Если оставить поле ввода имени пустым, то оно будет назначено автоматически по шаблону 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 и копирование больших частей проекта рекомендуется проводить в момент минимальной активности остальных пользователей.

Защита проекта

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

Проект в среде разработки Полигон – это база данных Sqlite. Защитить проект можно с помощью создания зашифрованной версии. Для этого следует:

  1. В системном окне Проекты выделить интересующий проект и нажать кнопку Сохранить как….

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

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

Graphic

В окне Проекты отобразится защищенная копия проекта.

Graphic

Пароли на составных блоках

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

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

  1. Выбрать составной блок в дереве проекта.

  2. Нажать ПКМ и выбрать в контекстном меню Установить пароль.

    Примечание
    Защита содержимого составного блока при помощи пароля эффективна только тогда, когда файл проекта хранится в защищенном формате.
    Graphic
  3. Задать пароль в открывшемся окне – на иконке блока в дереве отобразится знак «замка».

    Graphic

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

Для снятия пароля необходимо оставить пустым поле ввода.

Пароль отладчика. Управление пользователями

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

Чтобы изменение Пароль admin вступило в силу, следует перетранслировать проект.

Graphic

Если установлен Пароль admin, то при первом запуске модуля будет выводиться окно с запросом пароля.

Graphic

Окно с запросом пароля отладчика появляется только 1 раз. Если пароль введен неверно, то запуск отладчика будет выдавать ошибку, а окно ввода пароля уже не появится.

Чтобы ввести корректный пароль, следует щелкнуть по модулю в дереве ПКМ и выбрать команду Задать пароль, ввести пароль в появившемся окне.

Graphic

Также в среде есть возможность установить пароли для пользователей user1user7. Итого 8 прав доступа – 1 admin и 7 user. Их можно использовать для ограничения доступа к данным проекта клиентам по протоколу OPC UA. См. подробнее в документе Обмен с верхним уровнем. Библиотека paOpcUA.

Graphic

paCore. Основная библиотека проекта

В данном разделе приведено описание основных блоков обязательной в проекте библиотеки paCore. Описание соответствует версии библиотеки 979 и выше.

Об установке библиотек см. в разделе.

Работа с типами данных

Типы данных

Типы данных paCore

Обозначение в среде

Название типа

Описание

Размер в памяти

Диапазон значений

Аналоги названий

chr, i8

Байт

Целое значение со знаком. Signed 8-bit integer

1 байт

-128…127

sint, int8, TINYINT, INT1

uch, ui8, reg

Байт без знака

Целое значение без знака. Unsigned 8-bit integer

1 байт

0…255

Byte

int, i16

Целое

Целое значение со знаком. Signed 16-bit integer

2 байта

-32768…32767

INT, SMALLINT, INT2

uns, u16, rg2

Целое без знака

Целое значение без знака. Unsigned 16-bit integer

2 байта

0…65535

WORD

lng, i32, l32

Длинное целое

Целое значение со знаком. Signed 32-bit integer

4 байта

-2147483648…2147483647

DINT, INT4

ulg, u32, rg4, ul32

Длинное целое без знака

Целое значение без знака. Unsigned 32-bit integer

4 байта

0…

4294967295

UDINT

i64

Двойное длинное целое

Двойное целое значение со знаком. Signed 64-bit integer

8 байт

-9223372036854775808…9223372036854775807

-

u64

Двойное длинное целое без знака

Двойное целое значение без знака. Unsigned 64-bit integer

8 байт

0…18446744073709551615

-

flt

Вещественное

Вещественное значение со знаком. Данные в формате с плавающей запятой

4 байта

-3.4E+38…

1.18E-38

и

1.18E-38…

3.4E+38

Float, Real

double

Вещественное двойное

Вещественное значение со знаком. Данные в формате с плавающей запятой

8 байта

-1.7E+308…

1.18E-308

и

1.18E-308…

1.7E+308

Double

b, bool, boolean, bit

Логический

Принимает значение 0 или 1

1 бит

0,1

Bit

s40, s50, s100, str

Строковый

Cтроки символов

-*

-

String

Примечание
* Максимальный размер строки определяет количество резервируемой памяти, размер задан в квадратных скобках, тип str ограничений на размер не имеет.

Кроме представленных в таблице типов данных используются массивы и перечисления.

Массив – массив данных определенного типа:

  • i32a - массив типа int32;

  • fa - массив данных типа float.

Перечисление – список констант, определяемый конкретным входом. Для входа с типом Перечисление невозможно задать значение, отличное от заданных в выпадающем списке. Обозначение: enm.

Очередь битов – позволяет накапливать очередь битовых значений в таймерном потоке. Обозначение: qb. Подробнее в разделе.

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

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

Цвет связей отображает тип данных входа:

  • черный – булевое;

  • красный – целое;

  • синий – вещественное;

  • серый – строковое.

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

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

Если вход/выход блока имеет системный тип данных, то создать связь можно только с выходом/входом того же типа.

Преобразователи типов

Преобразование типов можно осуществить вручную, используя блоки Flt_Un, Flt_Ul, Uc_flt, Us_Flt и др. из раздела Преобразователи типов.

Блок преобразует значение одного типа данных в другой.

В большинстве случаев преобразование типов осуществляется на этапе трансляции, подходящий блок добавляется средой разработки автоматически.

Алгоритм:

out = in
Graphic

Константы

Блоки Константа повторяют на выходе значение входа – Real, Integer, Reg2 и др. из раздела Преобразователи типов. Блок инициализируется константой на входе, не нулем.

Инициализация:

y = fi

Алгоритм:

y = fi
Graphic
Константы

Терминальные блоки

Терминальные блоки повторяют на выходе значение входа – TransFlt, TransInt, TransBit и др. Данные блоки удобно использовать в качестве сбора входных и выходных параметров на одной странице программы. Блок инициализируется константой на входе, не нулем.

Назначение входов и выходов:

  • l0, l1,,ln – входные значения;

  • o0, o1,,on – выходные значения.

Инициализация:

oi = li, где I = 0…n

Алгоритм:

oi = li, где I = 0…n
Graphic

Для передачи массивов используются терминальные блоки Transi32A, TransFA, TransStor и др. Блок повторяет на выходе массив соответствующего входа. Данные блоки удобно использовать в качестве сбора входных и выходных параметров на одной странице программы. Блок инициализируется массивом на входе, не нулем.

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

Назначение входов и выходов:

  • in0, in1,,inn – входные массивы;

  • o0, o1,,on – выходные массивы.

Инициализация:

oi = ini, где I = 0…n

Алгоритм:

oi = ini, где I = 0…n
Graphic

Арифметические блоки

Сложение (Add)

Функция Add вычисляет сумму своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • f0, f1,,fn – слагаемые;

  • sum – сумма.

Инициализация:

sum = 0

Алгоритм:

sum = f0 + f1 + … + fn
Graphic
Add

Целочисленное сложение (Addl)

Функциональный блок Addl производит целочисленное сложение. Аргументы являются целыми числами. Если на вход подается связь с выхода другого типа, то при выполнении программы происходит преобразование типов. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • in0, in1,,inn – слагаемые;

  • sum – сумма.

Инициализация:

sum = 0

Алгоритм:

sum = in0 + in1 + … + inn
Graphic

Вычитание (Sub)

Функция Sub вычисляет разность двух аргументов. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • f1 – уменьшаемое;

  • f2 – вычитаемое;

  • out – разность.

Инициализация:

out = 0

Алгоритм:

out = f1 - f2
Graphic

Умножение (Mul)

Функция Mul вычисляет произведение своих входов. Число входов задается при создании функционального блока, и может быть изменено в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • f0, f1,,fn – множитель;

  • out – произведение множителей.

Инициализация:

out = 0

Алгоритм:

out = f1 ∙ f2 ∙…∙ fn
Graphic

Деление (Div)

Функция Div вычисляет частное своих аргументов. Если делитель равен нулю, то выставляется флаг ошибки, на выходе устанавливается 1. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 1.

Назначение входов и выходов:

  • f1 – делимое;

  • f2 – делитель;

  • out – частное от деления;

  • zf – флаг ошибки.

Инициализация:

out = 1; zf = 0

Алгоритм:

Если f2 = 0 → zf = 1, out = 1, иначе out = f1/f2, zf = 0
Graphic

Целочисленное деление (Divl)

Функция Divl производит целочисленное деление. Вычисляет неполное частное и остаток. Если делитель равен нулю, то выставляется флаг ошибки, на выходе остается прежнее значение. Аргументы являются целыми числами. Если на вход подается связь с выхода другого типа, то при выполнении программы происходит преобразование типов. Раздел библиотеки: Арифметические. Выход инициализируется 1.

Назначение входов и выходов:

  • i1 – делимое;

  • i2 – делитель;

  • out – частное от деления;

  • rem – остаток от деления;

  • zf – флаг ошибки.

Инициализация:

out = 1; rem = 0; zf = 0

Алгоритм:

Если i2 = 0 → zf = 1, out = out_old, иначе out = i1/i2, rem = i1 - (out ∙ i2), zf = 0, где out_old – значение выхода в предыдущем цикле выполнения программы
Graphic

Корень квадратный (Sqrt)

Функция Sqrt вычисляет корень квадратный своего аргумента. Если аргумент отрицательный, то выставляется флаг ошибки, на выходе корень квадратный из модуля аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in – аргумент;

  • out – значение корня квадратного от аргумента;

  • nf – флаг ошибки.

Инициализация:

out = 0; zf = 0

Алгоритм:

Если in ≤ 0 → nf = 1, out = √(|in|), иначе out = √in, nf = 0
Graphic
Корень квадратный (Sqrt)

Инверсия значения (Inv)

Функция Inv инвертирует знак входного значения. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • in – аргумент;

  • out – инвертированный вход.

Инициализация:

out = 0

Алгоритм:

out = -in
Graphic

Абсолютное значение (Abs)

Функция Abs определяет модуль и знак числа. Если на вход подается отрицательное значение, то выставляется флаг знака. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in – аргумент;

  • out – модуль входа;

  • sf – флаг знака.

Инициализация:

out = 0, sf = 0

Алгоритм:

out = |in|, sf – знак in, если in > 0 → sf = 0, иначе sf = 1
Graphic

Минимальное/максимальное значение (MinMax)

Функция MinMax ищет минимальное и максимальное значения среди набора входов. Число входов задается при создании функционального блока, его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in0, in1,,inn – входы;

  • max – максимальное значение;

  • min – минимальное значение.

Инициализация:

max = 0, min = 0

Алгоритм:

min = min (in0, in1, …, inn), max = max (in0, in1, …, inn)
Graphic

Селектор минимального/максимального значения (MinMax2)

Функция MinMax2 ищет минимальное и максимальное значения среди набора входов, и определяет индекс минимального и максимального входа. Число входов задается при создании функционального блока, его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in0, in1,,inn – входы;

  • max – максимальное значение;

  • min – минимальное значение;

  • mxn – индекс максимума;

  • mnn – индекс минимума.

Инициализация:

max = 0, min = 0, mxn = 0, mnn = 0

Алгоритм:

min = min (in0, in1, …, inn), max = max (in0, in1, …, inn), mxn – индекс максимального значения, mnn – индекс минимального значения
Graphic

Сравнение (Cmpr)

Функция Cmpr сравнивает два входа. В зависимости от их отношения выставляет флаги больше, меньше или равно. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in1 – вход 1;

  • in2 – вход 2;

  • uf – флаг «больше»;

  • ef – флаг «равно»;

  • if – флаг «меньше».

Инициализация:

uf = 0, ef = 0, if = 0

Алгоритм:

Graphic

Маскирование (Mask)

Функция Mask производит побитное умножение аргумента на маску. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • i1 – вход;

  • i2 – маска;

  • out – выход.

Инициализация:

out = 0

Алгоритм:

out = i1 & i2
Graphic

Сдвиг влево (Shrl)

Функция Shrl производит побитовый сдвиг влево числа i1 на i2 бит. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • i1 – вход;

  • i2 – величина сдвига;

  • out – выход.

Инициализация:

out = 0

Алгоритм:

out = i1 ≪ i2
Graphic

Сдвиг вправо (Shrr)

Функция Shrr производит побитовый сдвиг вправо числа i1 на i2 бит. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • i1 – вход;

  • i2 – величина сдвига;

  • out – выход.

Инициализация:

out = 0

Алгоритм:

out = i1 ≫ i2
Graphic

Табличная функция (TabF)

Функциональный блок производит кусочно-линейную аппроксимацию зависимости y = f(x), заданной табличной функцией, и вычисление в заданной точке. Табличная функция задается набором пар (x, y). Для корректной работы блока наборы пар (x, y) должны быть упорядочены по возрастанию x. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • val – значение x;

  • x0, x1, ..., xn – набор абсцисс;

  • y0, y2, ..., yn – набор соответствующих ординат;

  • out – значение y.

Инициализация:

out = 0

Алгоритм: при нахождении значения функции используется алгоритм кусочно-линейной аппроксимации

Если val < x0 → out = y0, если val > xn → out = yn
Graphic

Экспонента (Exp)

Функция Exp производит вычисление экспоненциальной функции от своего аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 0.

Назначение входов и выходов:

  • in – аргумент;

  • out – выход, значение ограничено интервалом [exp(-37), exp(10)].

Инициализация:

out = 0

Алгоритм:

out = exp(in)
Graphic

Логарифм (Ln)

Функция Ln вычисляет натуральный логарифм своего аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 1.

Назначение входов и выходов:

  • in – аргумент;

  • out – выход, снизу ограничен ln(1.0e - 15).

Инициализация:

out = 1

Алгоритм:

out = ln(in)
Graphic

Возведение в степень (Pow)

Функция Pow производит возведение в степень аргумента функции. Если производится возведение в степень отрицательного числа в нецелочисленную степень, то степень округляется до ближайшей целой. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 1.

Назначение входов и выходов:

  • in – аргумент;

  • pw – степень;

  • out – выход, значение ограничено интервалом [1.0e - 18; 1.0e + 18].

Инициализация:

out = 1

Алгоритм:

out = inpw
Graphic

Сложение некоторых слагаемых (SumGR)

Блок SumGR вычисляет сумму входов, у которых en ≠ 0. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in0, in1, ..., inn – слагаемые;

  • en0, en1, ..., enn – разрешающие флаги;

  • sum – сумма;

  • cnt – количество слагаемых.

Инициализация:

sum = 0, cnt = 0

Алгоритм: при нахождении значения функции используется алгоритм кусочно-линейной аппроксимации

Если en0, en1, …, enn ≠ 0 → sum = in0 + in1 + … + inn, cnt = n
Graphic

Пакетное умножение и округление (mb_ai)

Блок mb_ai производит умножение входа на множитель. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • x0, x1, ..., xn – аргументы;

  • m0, m1, ..., mn – множители;

  • y0, y1, ..., yn – выходы.

Инициализация:

y0, y1, ..., yn = 0

Алгоритм:

yi = xi ∙ mi, I = 1, 2, …, n
Graphic

Пакетное умножение (mb_ao)

Блок mb_ao производит умножение входа на множитель. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • x0, x1, ..., xn – аргументы;

  • m0, m1, ..., mn – множители;

  • y0, y1, ..., yn – выходы.

Инициализация:

y0, y1, ..., yn = 0

Алгоритм: 

yi = xi ∙ mi, I = 1, 2, …, n
Graphic
Пакетное умножение (mb_ao)

Округление (flt_round)

Блок flt_round вычисляет несколько вариантов округления для входного значения. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in – значение;

  • rnd – до ближайшего целого;

  • up – в большую сторону;

  • dn – в меньшую сторону.

Инициализация:

rnd = 0, up = 0, dn = 0
Graphic

Определение знака (Sign)

Функция Sign производит определение знака входного значения относительно базового. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in – вход;

  • x0 – базовое значение;

  • out – знак;

  • inv – инверсия знака;

  • zer– признак равенства.

Инициализация:

out = 0, inv = 0, zer = 0

Алгоритм:

Graphic
Определение знака (Sign)

Переворачивание байт в слове (SwapBytes)

Функция SwapBytes меняет местами байты в двухбайтном числе. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.

Назначение входов и выходов:

  • in0, in1, ..., inn – входы

  • o0,o1, ..., on – выходы.

Инициализация:

o0, o1, ..., on = 0

Алгоритм:

ini [byte1, byte2] → oi = ini [byte2, byte1], I = 1, 2, …, n
Graphic
Переворачивание байт в слове (SwapBytes)

Арифметические блоки для аргументов double, long, Uint64

Арифметические блоки для аргументов double, long, Uint64 представлены в соответствующих группах в разделе библиотеки Арифметические. Описание представленных блоков аналогично описанию соответствующих блоков, приведенному выше.

Логические блоки

Логическое И (AND)

Функциональный блок AND производит логическое умножение своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b0, b1, ..., bn – входы;

  • q – логическое произведение;

  • inv – инвертированное логическое произведение.

Инициализация:

q = 0, inv = 1

Алгоритм: 

q = b0 & b1 &…& bn, inv = !(q)

Пример для блока с двумя входами:

Graphic

Логическое ИЛИ (OR)

Функциональный блок OR производит логическое сложение своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b0, b1, ..., bn – входы;

  • q – логическое сложение;

  • inv – инвертированное логическое сложение.

Инициализация:

q = 0, inv = 1

Алгоритм: 

q = b0 ∪ b1 ∪ … ∪ bn, inv = !(q)

Пример для блока с двумя входами:

Graphic
OR

Логическое НЕ-И (nAND)

Функциональный блок nAND производит логическое умножение с инверсией своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b0, b1, ..., bn – входы;

  • q – логическое произведение инверсных входов;

  • inv – инвертированное q.

Инициализация:

q = 0, inv = 1

Алгоритм:

q = !(b0) & !(b1) & … & !(bn), inv = !(q)

Пример для блока с двумя входами:

Graphic

Логическое НЕ (NOT)

Функциональный блок NOT производит логическую инверсию своего входа. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b1 – вход;

  • q – логическое отрицание.

Инициализация:

q = 0

Алгоритм:

q = !(b1)
Graphic

Логическое НЕ-ИЛИ (nOR)

Функциональный блок nOR производит логическое сложение с инверсией своих входов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b0, b1, ..., bn – входы;

  • q – логическое сложение инверсных входов;

  • inv – инвертированное q.

Инициализация:

q = 0, inv = 1

Алгоритм:

q = !(b0) ∪ !(b1) ∪ … ∪ !(bn), inv = !(q)
Graphic

Логическое сложение по модулю два (XOR)

Функциональный блок XOR производит логическое суммирование по модулю два своих входов. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b1, b2 – входы;

  • q – сумма по модулю два.

Инициализация:

q = 0

Алгоритм:

q = b1 ⊕ b2
Graphic

Логическое ИЛИ с блокировкой (Bl_Or)

Функциональный блок Bl_Or осуществляет алгоритм логического ИЛИ среди входов x и y. Наличие единицы на входе блокировки запрещает все выходы, кроме собственного. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выходы инициализируются 0.

Назначение входов и выходов:

  • x0, x1, ..., xn – входы;

  • y0, y1, ..., yn – соответствующие блокировки;

  • out0, out1, ..., outn – выходы.

Инициализация:

out0, out1, ..., outn = 0

Алгоритм:

outi = xi | yi & !(y0 | y1 | … | yi – 1 | yi + 1 │ … | yn)
Graphic

Детектор фронтов (Fronts)

Функциональный блок Fronts сравнивает предыдущее значение входа с настоящим и анализирует на наличие фронтов и спадов. Раздел библиотеки: Логические. Выходы инициализируются 0.

Назначение входов и выходов:

  • i – вход;

  • f01 – бит, сигнализирующий о приходе фронта на входе;

  • f10 – бит, сигнализирующий о приходе спада на входе.

Инициализация:

f01 = 0, f10 = 0

Алгоритм:

Если i_old = 0 & i = 1 → f01 = 1, если i_old = 1 & i = 0 → f10 = 1, где i_old – значение входа на предыдущем цикле выполнения программы
Graphic

Детектор логического канала (bDetect)

Функциональный блок bDetect определяет номер входа, на котором произошел перепад значения из 0 в 1. Если перепад произошел на нескольких входах, обнаруживается только самый поздний. Если перепада нет ни на одном входе, то num = -1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b0, b1, ..., bn – входы;

  • num – номер входа, на котором произошел перепад.

Инициализация:

num = 0

Алгоритм: num – номер входа, на котором произошел перепад из 0 в 1, начинается с 0

Graphic
Детектор логического канала (bDetect)

Контроль ключа (LogContr)

Функциональный блок LogContr определяет запрещенные состояния ключа, которые задаются двумя логическими сигналами. Раздел библиотеки: Логические. Выход инициализируется 0.

Назначение входов и выходов:

  • b0, b1 – входы;

  • n_z – запрещенное состояние;

  • m_1 – больше одной единицы.

Инициализация:

n_z = 0, m_1 = 0

Алгоритм:

Graphic
Контроль ключа (LogContr)

Тригонометрические функции

Синус (Sin)

Функция Sin вычисляет синус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.

Назначение входов и выходов:

  • in – вход;

  • out – выход.

Инициализация:

out = 0

Алгоритм:

out = sin(in)
Graphic

Косинус (Cos)

Функция Cos вычисляет косинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.

Назначение входов и выходов:

  • in – вход;

  • out – выход.

Инициализация:

out = 0

Алгоритм:

out = cos(in)
Graphic

Тангенс (Tan)

Функция Tan вычисляет тангенс аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.

Назначение входов и выходов:

  • in – вход;

  • out – выход.

Инициализация:

out = 0

Алгоритм: 

out = tan(in)
Graphic

Арктангенс (ATan)

Функция ATan вычисляет арктангенс аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.

Назначение входов и выходов:

  • in – вход;

  • out – выход, диапазон изменения [-π/2 ≤ out ≤ π/2].

Инициализация:

out = 0

Алгоритм: 

out = atan(in)
Graphic

Арксинус (ASin)

Функция ASin вычисляет арксинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.

Назначение входов и выходов:

  • in – вход, диапазон изменения [-1.0 ≤ in ≤ 1.0];

  • out – выход, диапазон изменения [-π/2 ≤ out ≤ π/2]

    ;
  • q – флаг ошибки.

Инициализация:

out = 0, q = 0

Алгоритм: 

Если -1.0 ≤ in ≤ 1.0 → out = asin(in), q = 0, если in > 1 → out = π/2, q = 1, если in < -1 → out = -π/2, q = 1
Graphic

Арккосинус (ACos)

Функция ACos вычисляет арксинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.

Назначение входов и выходов:

  • in – вход, диапазон изменения [-1.0 ≤ in ≤ 1.0];

  • out – выход, диапазон изменения [0 ≤ out ≤ π];

  • q – флаг ошибки.

Инициализация:

out = 0, q = 0

Алгоритм:

Если -1.0 ≤ in ≤ 1.0 → out = acos(in), q = 0, если in > 1 → out = 0, q = 1, если in <-1 → out = π, q = 1
Graphic

Переключатели, реле и мультиплексоры

Дешифратор (Decoder)

Функциональный блок Decoder выставляет 1 на одном из своих выходов. Индекс выхода задает входная переменная. Если значение входа выходит за рамки интервала [0…количество выходов - 1], то все выходы равны 0. Число выходов задается при создании функционального блока, которые задаются в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов:

  • sel – номер выхода;

  • o0, o1, ..., on – выходы.

Алгоритм:  

o[sel] = 1
Graphic

Ключ (Key)

Функциональный блок Key передает значение своего входа на выход при 1 на управляющем входе и выдает 0 на выходе при 0 на управляющем входе. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов:

  • x – вход;

  • i – управляющий вход;

  • out – выход.

Алгоритм: 

Если i = 1 → out = x, иначе out = 0
Graphic

Коммутатор 8-битных регистров (R8Switch)

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

Назначение входов и выходов:

  • in1, in2 – входы типа reg;

  • i – управляющий бит;

  • out – выход типа reg.

Алгоритм: 

Если i = 1 → out = in1, иначе out = in2
Graphic

Коммутатор вещественных переменных (fSwitch)

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

Назначение входов и выходов:

  • x1, x2 – входы типа flt;

  • i – управляющий бит;

  • out – выход типа flt.

Алгоритм: 

Если i = 1 → out = x1, иначе out = x2
Graphic

Коммутатор логических переменных (lSwitch)

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

Назначение входов и выходов:

  • x1, x2 – входы логического типа;

  • i – управляющий бит;

  • out – выход логического типа.

Алгоритм:

Если i = 1 → out = x1, иначе out = x2 Если i = 1 → out = x1, иначе out = x2
Graphic

Коммутатор строковых переменных (txtSwitch)

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

Назначение входов и выходов:

  • str1, str2 – входы типа str;

  • cross – управляющий бит;

  • str1o, str2o – выходы типа str.

Алгоритм:

Если cross = 1 → str1o = str2, str2o = str1, иначе str1o = str1, str2o = str2
Graphic

Коммутатор целых переменных (iSwitch)

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

Назначение входов и выходов:

  • x1, x2 – входы целого типа;

  • i – управляющий бит;

  • out – выход целого типа.

Алгоритм:  

Если i = 1 → out = x1, иначе out = x2
Graphic

Релейный каскад вещественных переменных (fltRelay)

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

Назначение входов и выходов:

  • x0, x1, , xn – входы типа flt;

  • y0, y1, , yn – входы типа flt;

  • upr – управляющий бит;

  • o0, o1, , on – выходы типа flt.

Алгоритм:

Если upr = 1 → oi = xi, иначе oi = yi, где i = 1, 2, …, n
Graphic

Релейный каскад логических переменных (logRelay)

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

Назначение входов и выходов:

  • x0, x1, , xn – входы логического типа;

  • y0, y1, , yn – входы логического типа;

  • upr – управляющий бит;

  • o0, o1, , on – выходы логического типа.

Алгоритм:

Если upr = 1 → oi = xi, иначе oi = yi, где i = 1, 2, …, n
Graphic

Управление реле (SetSW)

Блок SetSW осуществляет потенциальное и импульсное управление реле с обратной связью. Выход потенциального управления out = 1, если управление inp и разрешение enb равны 1.

На выходах импульсного управления on и off выдаются импульсы длиной в один таймерный интервал (если блок находится в Таймере) соответственно при включении и выключении выхода out.

Ошибка err выдается, если обратный сигнал ret не появился в течение таймаута cnt (задается в миллисекундах). Для правильной работы таймера ошибки данный блок необходимо размещать в Таймере, а значения cnt задавать кратными времени таймерного цикла. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов:

  • inp – управление;

  • ret – обратная связь;

  • cnt – таймер ошибки, мс;

  • enb – разрешение;

  • out – потенциальное управление;

  • on – включение (импульсное);

  • off – выключение (импульсное);

  • err – ошибка.

Graphic

Выбор одного из целых значений (SelectUI)

Блок SelectUI выводит на выход первое из входных значений, для которого en = 1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов:

  • val0, val1, , valn – входы;

  • en0, en1, , enn – выбор входа;

  • out – выбранное значение.

Алгоритм:  

Если eni = 1 → out = vali, где i = 1, 2, …, n
Graphic

Вывод значения на заданный выход (ShowSW)

Блок ShowSW выводит значение входа spc на соответствующий выход o при появлении его номера на входе num (входы нумеруются от 1). Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов:

  • num – номер входа;

  • def – значение по умолчанию;

  • spc0, spc1, , spcn – входы;

  • o0, o1, , on – выходы.

Инициализация:

oi = def

Алгоритм: 

Для каждого входа, если i = num - 1, oi = spci, иначе oi = def
Graphic

Мультиплексор вещественных значений (MuxFlt)

Функциональный блок MuxFlt передает значение своего входа с индексом sel на выход. Если индекс выходит за рамки интервала [0количество входов - 1], то на выходе остается предыдущее значение. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры. Изначально выход инициализируется 0.

Назначение входов и выходов:

  • sel – номер входа;

  • in0, in1, , inn – входы;

  • out – выход.

Инициализация:

out = 0

Алгоритм: 

out = in[sel]
Graphic

Мультиплексор целых значений (MuxInt)

Функциональный блок MuxFlt передает значение своего входа с индексом sel на выход. Если индекс выходит за рамки интервала [0количество входов - 1], то на выходе остается предыдущее значение. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры. Изначально выход инициализируется 0.

Назначение входов и выходов:

  • sel – номер входа;

  • in0, in1, , inn – входы;

  • out – выход.

Инициализация:

out = 0

Алгоритм:

out = in[sel]
Graphic

Выбор одного из вещественных значений (FCascSw)

Блок FCascSw выводит на выход первое из входных значений, для которого l = 1. Если все l = 0, то на выход выводится значение по умолчанию DEF, и признак Q выставляется в 1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры. Изначально выход инициализируется 0.

Назначение входов и выходов:

  • DEF – значение выхода по умолчанию;

  • x0, x1, , xn – входы;

  • l0, l1, , ln – выбрать значение;

  • Y – выход;

  • Q – признак значения по умолчанию.

Алгоритм:

Если li = 1 → Y = xi, где i = 1, 2, …n, если l0, l1, …, ln = 0 → Y = DEF, Q = 1
Graphic

Выбор строки (Switch_str)

Блок Switch_str выводит на выход строку, для которой cond = 1. Если несколько входов имеют значение cond = 1, то на выход выводится значение строки из входа, у которого наибольший порядковый номер и cond = 1. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов:

  • str0, str1, …, strn – входы;

  • cond0, cond1, , condn – выбрать строку;

  • str_out – выход.

Алгоритм: 

Если condi = 1 → str_out = stri, где i = 1, 2, …, n
Graphic

Дешифратор уставок (Settings)

Блок Settings представляет собой дешифратор уставок. Раздел библиотеки: Переключатели, реле и мультиплексоры.

Назначение входов и выходов Settings
ЭлементОписание
Входы

nust

Текущий номер уставки

val

Значение текущей уставки

nout

Номер уставки для вывода на выход vout

n0

Начальный номер уставок in

wen

Разрешение записи из val в o

ren

Разрешение чтения из o в vout

in

Значение инициализации уставки (циклический)

Выходы

vout

Последнее прочитанное/записанное значение уставки с номером nout

wrtng

Фронт записи

rdng

Фронт чтения

o

Текущее значение уставки (циклический)

Graphic
Дешифратор уставок (Settings)

Генераторы и таймеры

Генератор импульсов (Pulse)

Функциональный блок Pulse генерирует импульсы заданной ширины в ответ на появление фронта на его управляющем входе. Ширина импульса T задается в миллисекундах. Длительность паузы соответствует величине цикла, в котором размещен блок. Раздел библиотеки: Генераторы и таймера.

Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать ширину импульса меньше времени таймерного цикла. Оптимальными значениями ширины импульса являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).

Назначение входов и выходов:

  • I – управление;

  • T – ширина импульса, мс;

  • q – выход.

Инициализация:

q = 0
Graphic
Graphic

Включение с задержкой (DelayOn)

Функциональный блок DelayOn реагирует на фронт на управляющем входе I через заданное время задержки T. Если управляющий бит сбросится, логический таймер также сбросится и будет ожидать следующего фронта на управляющем входе. Раздел библиотеки: Генераторы и таймера.

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

Назначение входов и выходов:

  • I – управление;

  • T – время задержки, мс;

  • q – выход.

Инициализация:

q = 0
Graphic
Graphic

Выключение с задержкой (DelayOff)

Функциональный блок DelayOff при установлении управляющего бита I устанавливает выходной бит q, инициализирует логический таймер – блок переходит в режим ожидания спада управляющего бита. После спада управляющего бита выходной бит сбрасывается через время задержки T. Если до истечения времени задержки выставится управляющий бит, логический таймер сбросится и будет ожидать следующего спада управляющего бита. Раздел библиотеки: Генераторы и таймера.

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

Назначение входов и выходов:

  • I – управление;

  • T – время задержки, мс;

  • q – выход.

Инициализация:

q = 0
Graphic
Алгоритм блока DelayOff
Graphic

Половинный импульс после половины паузы (HalfPulse)

Блок HalfPulse выдает импульс длительности T/2 после паузы T/2 по перепаду 0 в 1 на входе I. Раздел библиотеки: Генераторы и таймера.

Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время длительности меньше времени таймерного цикла. Оптимальными значениями времени длительности являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).

Назначение входов и выходов:

  • I – управление;

  • T – длительность, мс;

  • q – выход.

Инициализация:

q = 0
Graphic
Graphic

Генератор сигналов (GenSign)

Блок GenSign генерирует сигналы различной формы. Раздел библиотеки: Генераторы и таймера.

Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время длительности меньше времени таймерного цикла. Оптимальными значениями времени длительности являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).

Назначение входов и выходов:

  • Tsg – период сигнала в секундах;

  • Amp – амплитуда сигнала;

  • Shf – смещение сигнала по оси ординат;

  • Aut – включение периодичности сигнала;

  • Dis – сброс сигнала;

  • sin – синусоида;

  • line – пила;

  • sqw – меандр;

  • l1,l2 – логические биты.

Инициализация:

sin = line = sqw = l1 = l2 = 0

Алгоритм:

  1. Если Aut = 0, тогда сигналы на выходе имеют следующий вид:

    Graphic
    Алгоритм блока GenSign при Aut = 0
  2. Если Aut = 1, тогда сигналы на выходе имеют следующий вид:

    Graphic
    Алгоритм блока GenSign при Aut = 1

    Если установить и сбросить бит Dis, сигнал начнет генерироваться со значения Shf.

Graphic

Логический таймер со взводом (AdvTimer)

Блок AdvTimer передает на выход q с управляющего входа после задержки по времени T. Взвод осуществляется по входу set при I = 1. Раздел библиотеки: Генераторы и таймера.

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

Назначение входов и выходов:

  • I – управление;

  • T – задержка, мс;

  • set – задержка;

  • q – выход;

  • t – значение таймера.

Инициализация:

q = 0, t = T
Graphic
Graphic

Генератор импульсов с заданной скважностью (PulseGeneratorEx)

Блок PulseGeneratorEx при enbl = 1 на входе формирует на выходе логические импульсы заданной скважности: длительность импульса задается входом t1, длительность паузы –входом t2. Выходы t_on и t_off ведут отсчет текущего времени импульса и паузы, соответственно. Раздел библиотеки: Генераторы и таймера.

Для адекватной работы блока, следует размещать его только в Таймере. При работе блока в Фоне присутствует погрешность. Не рекомендуется задавать время задержки меньше времени таймерного цикла. Оптимальными значениями времени задержки являются числа, кратные величине таймерного цикла (не кратные значения округляются до времени таймерного цикла в большую сторону).

Назначение входов и выходов:

  • t1 – длительность импульса, мс;

  • t2 – длительность паузы, мс;

  • enbl – разрешение работы;

  • out – выход;

  • t_on – текущее время импульса, мс;

  • t_off – текущее время паузы, мс.

Инициализация:

out = 0
Graphic
Алгоритм блока PulseGeneratorEx
Graphic
Ex

Генератор случайных чисел (rndgen)

Блок rndgen выдает на выходе случайные числа в диапазоне от -amp до +amp. Раздел библиотеки: Генераторы и таймера.

Назначение входов и выходов:

  • amp – амплитуда;

  • out – случайное значение.

Graphic

Универсальный счетчик (CounterCTN)

Универсальный счетчик CounterCTN используется для прямого и обратного счета. Операция «прямой счет» выполняется по переднему фронту импульса на входе прямого счета inU, что увеличивает значение выходного сигнала out. Импульсы, приходящие на вход inD («обратный счет»), уменьшают значение выхода out. Если на вход rst поступает сигнал логической 1, то выход счетчика out устанавливается в значение входа n. Раздел библиотеки: Генераторы и таймера.

Если на входы inU и inD одновременно поступают сигналы, то приоритетным является сигнал входа inU. Допустимый диапазон значений числа импульсов n: от 0 до 65535.

Назначение входов и выходов:

  • inU – вход импульсов прямого счета;

  • inD – вход импульсов обратного счета;

  • rst – логический вход;

  • n – установленное значение импульсов;

  • out – выход.

Graphic
Graphic

Инкрементный счетчик (CounterCTU)

Инкрементный счетчик CounterCTU используется для подсчета числа импульсов, приходящих на вход in. На выходе out счетчика появится импульс сигнала логической 1, если число приходящих на вход импульсов достигнет установленного значения на входе n. Счетчик сбрасывается в 0 по переднему фронту импульса на входе rst. Раздел библиотеки: Генераторы и таймера.

Если сигналы поступают на входы одновременно, то приоритетным является сигнал входа rst. Допустимый диапазон значений числа импульсов n: от 0 до 65535.

Назначение входов и выходов:

  • in – вход импульсов прямого счета;

  • rst – импульсный вход для сброса выхода счетчика в 0;

  • n – установленное значение импульсов;

  • out – выход.

Graphic
Graphic

Инкрементный счетчик с автосбросом (CounterCT)

Инкрементный счетчик с автосбросом CounterCT используется для подсчета заданного числа импульсов n. На выходе out счетчика появится импульс сигнала логической 1 длительностью в один цикл, если число приходящих на вход in импульсов достигнет установленного значения n. Раздел библиотеки: Генераторы и таймера.

Допустимый диапазон значений числа импульсов n: от 0 до 65535.

Назначение входов и выходов:

  • in – вход импульсов;

  • n – устанавливаемое значение импульсов;

  • out – выход.

Graphic
Graphic

Обработка сигналов

Cимметричный ограничитель сигнала (LimSim)

Функциональный блок LimSim является симметричным (на величину val) ограничителем входного сигнала inp. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • inp – входной сигнал;

  • val – величина ограничения (абсолютное значение);

  • dis – команда обнуления выхода;

  • out – выходной сигнал ограничителя.

Инициализация:

out = 0

Алгоритм:

dis = 0 → out = inp, если inpval → out = val, если inp < -val → out = -val, dis = 1 → out = 0
Graphic
Cимметричный ограничитель сигнала (LimSim)

Аппроксимация обратной функции (Approx)

Блок Approx для заданной табличной функции y = f(x) производит аппроксимацию обратной функции x = g(y). Табличная функция y = f(x) задается массивом tab_y значений y, соответствующих значениям x аргумента, выбранным из диапазона [minx...maxx] с шагом hx. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • y – табличная функция;

  • hx – шаг x;

  • minx – минимум x;

  • maxx – максимум x;

  • ty0, ty1, , tyn – значения y для x0, x1, , xn

    ;
  • x – обратная функция.

Инициализация:

out = 0

Алгоритм: используется кусочно-линейная аппроксимация по двум соседним точкам.

Graphic

Кусочно-линейная интерполяция (KL_Interp)

Блок вычисляет значение функции y, заданную таблично (x0, y0, ...), при значении аргумента, равном in. Используется кусочно-линейная интерполяция. Значение dlt задает смещение значения y относительно значений в точках x0, x1, …, которое используется, если edl = 1. Если значение x не входит в диапазон, заданный точками x0, x1, , то выставляется флаг ошибки err. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • in – значение x;

  • dlt – смещение y;

  • edl – учитывать смещение;

    ;
  • t0, t1, , tn – значение y0, y1, , yn;

  • c0, c1, , cn – значение x0, x1, , xn;

  • out – значение y;

  • err – флаг ошибки.

Инициализация:

out = 0, err = 0

Алгоритм: вычисление значения функции основано на кусочно-линейной интерполяции.

Graphic

Несимметричный ограничитель сигнала (Lim)

Функциональный блок Lim является Функциональный блок является ограничителем входного сигнала inp. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • inp – входной сигнал;

  • max – верхняя граница;

  • min – нижняя граница;

  • out – выход;

  • uf – inp > max;

  • if – inp < min.

Инициализация:

out = 0

Алгоритм:

out = inp, если inp > max → out = max, uf = 1, если inp < min → out = min, if = 1
Graphic

Группа ограничителей сигнала (Lims)

Функциональный блок Lims представляет собой группу ограничителей сигнала val. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • vali – входы;

  • maxi – верхняя граница i-го входа;

  • mini – нижняя граница i-го входа;

  • oi – выходы.

Инициализация:

oi = 0

Алгоритм:

o = val, если val > max → o = max, если val < min → o = min
Graphic

Градиентный фильтр (GradLim)

Функциональный блок GradLim ограничивает рост входного сигнала Q, сравнивая приращение этой величины с заданной величиной допустимого приращения dQ. Если приращение не превышает заданного, блок работает как усредняющий по двум значениям фильтр. В противном случае на выходе блока устанавливается величина out[i - 1] ± dQ, а индикатор lf устанавливается в единицу. Дискретизация по времени задается стробирующим входом enbl. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • Q – вход;

  • dQ – допустимое приращение;

  • enbl – стробирующий вход;

  • out – выход;

  • if – приращение больше заданного.

Инициализация:

out = 0, if = 0

Алгоритм:

out = out[i - 1] ± dQ, при -dQ < Q - out[i - 1] < dQ, out = out[i - 1] + Q, иначе
Graphic
Градиентный фильтр (GradLim)

Определение принадлежности к диапазону (Inside)

Функциональный блок Inside определяет принадлежность значения входной переменной val к заданному диапазону (a…b) с допуском нечувствительности eps (от -eps/2 до +eps/2). Если значение val находится внутри диапазона, то блок устанавливает выход isd = 1 (внутри). Если же значение val находится вне диапазона, блок задает выход osd = 1 (снаружи). Единица на выходе apx указывает на то, что значение val находится вблизи границы диапазона (в зоне нечувствительности). Это свойство может оказаться полезным для задания гистерезисных зависимостей. Если это не нужно, необходимо задать eps = 0. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • val – вход;

  • a – нижняя граница;

  • b – верхняя граница;

  • eps – гистерезис;

  • enbl – разрешение на работу блока;

  • isd – внутри;

  • osd – снаружи;

  • apx – в зоне нечувствительности.

Инициализация:

isd = 0, osd = 0, apx = 0
Graphic

Параболический ограничитель (SqLim)

Блок SqLim обнаруживает выход входного значения за ограничивающие параболы. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • dp – вход;

  • q – x параболы;

  • k1 – коэффициент 1;

  • k2 – коэффициент 2;

  • gt – больше верхней;

  • lt– ниже нижней;

  • alm – выход за пределы.

Инициализация:

gt = 0, lt = 0, alm = 0

Алгоритм:

Если q > 0.01 → gt = 1, если dqk2∙q∙q, itlt1, если dq < k1∙q∙q, иначе gt = 1, если dq > 0, lt = 1, если dq < 0, alm = gt∪lt
Graphic

Фильтр Баттерворта (BatterFilter)

Блок BatterFilter представляет из себя фильтр Баттерворта с постоянной времени Tx и коэффициентом демпфирования g. Для адекватной работы фильтра необходимо размещать данный блок в Таймере. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • in – вход;

  • Tx – постоянная времени;

  • g – коэффициент демпфирования;

  • out – выход.

Инициализация:

out = 0
Graphic

Нормализация шкалы (Scale)

Блок Scale осуществляет линейное преобразование диапазонов без ограничителя. Аргументы являются вещественными числами. Раздел библиотеки: Обработка сигналов. Выход инициализируется 0.

Назначение входов и выходов:

  • x – вход;

  • minx – минимум входа;

  • maxx – максимум входа;

  • miny – минимум выхода;

  • maxy – максимум выхода;

  • y – выход.

Инициализация:

y = 0

Алгоритм:

Если (max(x) - min(x)) > 0.001 → y =  (max(y) - min(y))/(max(x) - min(x))∙(x - min(x)) + min(y), иначе y = min(y)
Graphic

Преобразователь для модуля термосопротивления (5B34Conv)

Блок 5B34Conv предназначен для согласования 50-Омных термосопротивлений типа 50П и 50М с входными модулями типа 50П. Для согласования точки 0 °C последовательно с датчиком подключается постоянное сопротивление 50 Ом. Для пересчета показаний результат измерения с функционального блока аналогового входа заводится на вход t блока 5B34Conv. При использовании датчика типа 50М вход type устанавливается в 1, а для 50П – в 2. Раздел библиотеки: Обработка сигналов.

Диапазон работы функционального блока: для 50П -150 °C … 200 °C, для 50М -50 °C … 200 °C.

Назначение входов и выходов:

  • t – вход;

  • type – тип (1, 2);

  • out – выход.

Инициализация:

out = 0

Алгоритм:

type = 1: t > -50,5 → out = 2,02∙t, иначе out = 1.33∙t-32.8. type = 2: t > -10,8 → out = 1,83∙t, иначе out = 4.62∙t + 29.9
Graphic

Интерполяция (Interpolation)

Блок Interpolation производит интерполяцию функции, заданной на входах x и y. Если функция задана неправильно, либо количество num превышает заданное, выставляется признак ошибки sts. Если en = 0, то out = in. Раздел библиотеки: Обработка сигналов.

Блок можно размещать только в Фоне.

Назначение входов и выходов:

  • en – включение блока;

  • typ – тип (0 – линейная, 1 – сплайн Акима);

  • num – количество точек;

  • ctrl –не используется;

  • cfg – не используется;

  • in – вход;

  • x0, x1, , xn – значения x;

  • y0, y1, , yn – значения y;

  • out – выход;

  • sts – ошибка.

Graphic

Симметричная мертвая зона с гистерезисом (FdeadS)

Функциональный блок FdeadS является симметричной (на величину val) мертвой зоной по отношению к сигналу inp. Отличие данного ФБ от блока Симметричная мертвая зона состоит в том, что при выходе сигнала inp за пределы мертвой зоны в блоке формируется внутренний флаг, который скачком отключает ее. Сброс флага происходит в момент смены полярности входного сигнала inp. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • inp – вход;

  • val – мертвая зона;

  • dis – отключение мертвой зоны;

  • out – выход.

Инициализация:

out = 0
Graphic

Симметричная мертвая зона (DbandS)

Функциональный блок DbandS является симметричной (на величину val) мертвой зоной по отношению к сигналу inp. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

inp – вход;

val – мертвая зона;

dis – отключение мертвой зоны;

out – выход.

Инициализация:

out = 0

Алгоритм:

dis = 0: out = 0, если inp > val → out = inp - val, если inp < -val → out = inp + val. type = 2:t > -10,8 → out = 1,83∙t, dis = 1: out = inp
Graphic

Диагностика сигналов датчиков (SensSpd)

Блок SensSpd анализирует скорость изменения входного сигнала inp и ограничивает его, если скорость превышает заданную spd. Блок сравнивает текущее значение сигнала inp и его значение на предыдущем цикле выполнения программы, а скорость spd задает максимально допустимое изменение сигнала в секунду. При отключении диагностики dis = 0 сигнал inp передается на выход out без изменений, hsp = 0 и nul = 0. Первые 10 циклов программы диагностика отключена независимо от значения dis. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • inp – вход;

  • spd – скорость;

  • dis – включить;

  • out – выход;

  • hsp – высокая скорость;

  • nul – не изменился.

Инициализация:

out = 0, hsp = 0, nul = 0

Алгоритм:

Если inp = inp[i - 1] → nul = 1, out = inp, если inp - out[i - 1] > spd∙таймерный интервал, out = inp + spd∙таймерный интервал, hsp = 1, если inp - out[i - 1] < -spd∙таймерный интервал, out = inp - spd∙таймерный интервал, hsp = 1, иначе out = inp, hsp = 0, nul = 0
Graphic

Изменение значения за заданное время (ValDif)

Функциональный блок ValDif передает на выход изменение значения val за установленное время time. Раздел библиотеки: Обработка сигналов.

Назначение входов и выходов:

  • val – вход;

  • time – время, мс;

  • diff – разница за время time.

Graphic

Арифметическое скользящее среднее (MovAverage)

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

Назначение входов и выходов:

  • in – вход;

  • W – количество значений входного сигнала для расчета (должно быть меньше mW);

  • mW –максимально количество значений входного сигнала для расчета, неизменяемый вход, значение которого принимается один раз при компиляции, допустимые значения в диапазоне 2…255;

  • bal – максимально количество значений входного сигнала для расчета, неизменяемый вход, значение которого принимается один раз при компиляции, допустимые значения в диапазоне 2…255;

  • out – выход.

Инициализация:

out = in

Алгоритм:

out = 1/W∙∑in_i где in_i – исходные сохраненные за предыдущие периоды значения входного сигнала, W = k - l – сглаживающий интервал – количество значений входного сигнала, используемых для расчета. Если bal = 1 → out = in
Graphic

Операции с регистрами

Объединение 20 битов в регистр (ToReg20)

Блок ToReg20 объединяет 20 битов в регистр. Бит 0 – младший бит регистра, бит 19 – старший. Раздел библиотеки: Операции с регистрами.

Graphic

Объединение 8-ми битов в регистр (ToReg8)

Блок ToReg8 объединяет 8 битов в регистр. Бит 0 – младший бит регистра, бит 7 – старший. Раздел библиотеки: Операции с регистрами.

Graphic

Выбор 8 битов из регистра (FromReg8)

Блок FromReg8 раскладывает байт на 8 бит. Первый выходной бит будет младшим битом байта, последний – старшим. Раздел библиотеки: Операции с регистрами.

Graphic

Объединение 16-ти битов в регистр (ToReg16)

Блок ToReg16 объединяет в слово 16 бит. Первый входной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Graphic

Выбор 20 битов из регистра (FromReg20)

Блок FromReg20 раскладывает 4 байта в 20 бит. Первый выходной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Graphic

Выбор 16 битов из регистра (FromReg16)

Блок FromReg16 раскладывает слово в 16 бит. Первый выходной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Graphic

Логическое И для 16-битных регистров (rAND)

Функциональный блок rAND работает аналогично блоку И, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Graphic

Логическое ИЛИ для 16-битных регистров (rOR)

Функциональный блок rOR работает аналогично блоку ИЛИ, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Graphic

Логическое НЕ для 16-битных регистров (rNOT)

Функциональный блок rNOT работает аналогично блоку НЕ, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Graphic

Логическое И с отрицанием для 16-битных регистров (rnAND)

Функциональный блок rnAND работает аналогично блоку И с отрицанием, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Graphic

Логическое ИЛИ с отрицанием для 16-битных регистров (rnOR)

Функциональный блок rnNOR работает аналогично блоку ИЛИ с отрицанием, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с регистрами.

Graphic

Сложение по модулю для 16-битных регистров (rXOR)

Функциональный блок rXOR работает аналогично блоку XOR, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Graphic

Склеивание байта из двух тетрад (R4to8)

Блок R4to8 собирает 8-ми битный регистр из младшей тетрады регистра low и старшей тетрады регистра high. Раздел библиотеки: Операции с регистрами.

Graphic

Детектор фронтов для 16-битных регистров (Fronts2)

Функциональный блок Fronts2 работает аналогично блоку детектора фронтов, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Graphic

Склеивание слова из двух байт (R8to16)

Блок R8to16 собирает 16-ти битный регистр из младшего регистра low и старшего регистра high. Раздел библиотеки: Операции с регистрами.

Graphic

Преобразование 16-битного регистра в два 8-битных (R16to8)

Блок R16to8 разбивает 16-битный регистр на два 8-битных. Раздел библиотеки: Операции с регистрами.

Graphic

Преобразование двух 16-битных регистров в 32-битный (R16to32)

Блок R16to32 склеивает 32-битный регистр из двух 16-битных. Раздел библиотеки: Операции с регистрами.

Graphic

Преобразование 32-битного регистра в два 16-битных (R32to16)

Блок R32to16 разбивает 32-битный регистр на два 16-битных. Раздел библиотеки: Операции с регистрами.

Graphic

Объединение 32 битов в регистр (ToReg32)

Блок ToReg32 объединяет 32 бита в регистр. Бит 0 – младший бит регистра, бит 31 – старший. Раздел библиотеки: Операции с регистрами.

Graphic

Выбор 32 битов из регистра (FromReg32)

Блок FromReg32 раскладывает 4 байта в 32 бита. Первый выходной бит будет младшим битом слова, последний – старшим. Раздел библиотеки: Операции с регистрами.

Graphic

Включение с задержкой для 16-битных регистров (rDelayOn)

Функциональный блок rDelayOn работает аналогично блоку Включение с задержкой, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Graphic

Выключение с задержкой для 16-битных регистров (rDelayOff)

Функциональный блок rDelayOff работает аналогично блоку Выключение с задержкой, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.

Graphic

Выбор бита из регистра (BitReg16)

Функциональный блок BitReg16 выбирает бит из регистра ireg по указанному номеру ibit. Раздел библиотеки: Операции с регистрами.

Назначение входов и выходов:

  • ireg – регистр;

  • ibit – номер бита;

  • obit – выходной бит.

Graphic

Операции с массивами

Массив вещественных чисел (FloatArray)

Блок FloatArray создает массив из элементов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с массивами.

Назначение входов и выходов:

  • in0, in1, , inn – элементы типа flt;

  • p_a – массив.

Graphic

Массив 4-байтных целых (i32Array)

Блок i32Array создает массив из элементов. Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с массивами.

Назначение входов и выходов:

  • in0, in1, , inn – элементы типа i32;

  • p_a – массив.

Graphic

Линейная аппроксимация массивов (LineAprox)

Блок LineAprox рассчитывает значение таблично заданных функций при значении аргумента inp. Текущие значения функций выдаются на соответствующие выходы o. Функция задается массивом аргументов arg (общим для всех функций) и массивом значений fun. Размерности всех массивов должны совпадать, иначе на выход будет выдана ошибка err - (-1 - [номер функции]).

Массив аргументов arg должен быть упорядочен либо по возрастанию, либо по убыванию. Если порядок нарушен, то на выход err выдается номер этого элемента (считая с 1). Число входов задается при создании функционального блока, и его можно изменить в процессе редактирования программы. Раздел библиотеки: Операции с массивами.

Внимание

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

Назначение входов и выходов:

  • inp – аргумент;

  • arg – аргументы;

  • fun0, fun1, , funn – функции;

  • err – ошибка;

  • o0, o1, , on – значения функций.

Graphic

Значения массива вещественных чисел (From_fArr)

Блок From_fArr позволяет получить значения элементов вещественного массива, поданного на вход. Раздел библиотеки: Операции с массивами.

Коды ошибок статуса err:

  • 0 – ошибок нет;

  • 1 – выходов блока меньше, чем элементов у входного массива;

  • 2 – выходов больше, чем элементов у входного массива;

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

Назначение входов и выходов:

  • in – массив элементов типа flt

    ;
  • err – статус;

  • out0, out1, , outn – значения элементов массива.

Graphic

Элемент из массива (one_From_fArr)

Блок one_From_fArr позволяет получить значение i-го элемента из массива, поданного на вход. Раздел библиотеки: Операции с массивами.

Коды ошибок статуса err:

  • 0 – ошибок нет;

  • 1 – выбранный номер элемента находится за пределами массива;

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

Назначение входов и выходов:

  • in – массив элементов типа flt;

  • i – номер элемента;

  • err – статус;

  • out – значения элемента.

Graphic

Нахождение минимума/максимума в массиве (minmax_fArr)

Блок minmax_fArr определяет минимальное и максимальное значение из элементов массива, поданного на вход. Раздел библиотеки: Операции с массивами.

Коды ошибок статуса err:

  • 0 – ошибок нет;

  • 1 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).

Назначение входов и выходов:

  • in – массив элементов типа flt;

  • err – статус;

  • min – минимум;

  • max – максимум.

Graphic
Нахождение минимума-максимума в массиве (minmax_fArr)

Нахождение разницы между элементами массива (minmax_sub_fArr)

Блок minmax_sub_fArr минимальное и максимальное значение разницы соседних элементов массива, поданного на вход. Раздел библиотеки: Операции с массивами.

Коды ошибок статуса err:

  • 0 – ошибок нет;

  • 1 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).

Назначение входов и выходов:

  • in – массив элементов типа flt;

  • err – статус;

  • min – минимальная разница соседей;

  • max – максимальная разница соседей.

Graphic

Переключатель массивов (switch_fArr)

Блок switch_fArr принимает на входы два массива вещественных чисел и выдает на выход один из них, в зависимости от состояния управляющего входа i: при i = 0 — массив in2, в остальных случаях — массив in1. Раздел библиотеки: Операции с массивами.

Коды ошибок статуса err:

  • 0 – ошибок нет;

  • 1 – на входе отсутствует массив (может быть связано с порядком выполнения блоков).

Назначение входов и выходов:

  • in1, in2 – массивы элементов типа flt;

  • err – статус;

  • p_a – выходной массив.

Graphic

Значения массива целых (From_i32Arr)

Блок From_i32Arr позволяет получить значения элементов целочисленного массива, поданного на вход. Раздел библиотеки: Операции с массивами.

Коды ошибок статуса err:

  • 0 – ошибок нет;

  • 1 – выходов блока меньше, чем элементов у входного массива;

  • 2 – выходов больше, чем элементов у входного массива;

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

Назначение входов и выходов:

in – массивы элементов типа i32;

err – статус;

out0, out1, , outn – значения элементов массива.

Graphic

Триггеры

Триггер Шмидта (SmTrig)

Блок SmTrig осуществляет алгоритм симметричного триггера Шмидта. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • x – аргумент;

  • m – уставка;

  • dm – гистерезис;

  • fu – больше;

  • fl – меньше.

Алгоритм:

fl = 1 при x ≤ m+ dm, fu = 1 при x > m + dm
Graphic
Graphic

Двойной триггер Шмидта (SmTrig2)

Блок SmTrig осуществляет алгоритм двойного симметричного триггера Шмидта. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • x – аргумент;

  • m – центр уставки;

  • dm – гистерезис;

  • l – отклонение уставки;

  • fu – больше;

  • fm – между;

  • fl – меньше.

Алгоритм:

fl = 1 при x < m – l + dm, fm = 1 при m – l + dm ≤ x < m + l - dm, fu = 1 при x ≥ m + l - dm
Graphic
Graphic

RSS-триггер (RSS)

RSS – RS-триггер с S-доминантой. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • q – выход;

  • inv – инверсный выход.

Инициализация:

q = 0

Алгоритм:

Graphic

RSR-триггер (RSR)

RSR – RS-триггер с R-доминантой. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • q – выход;

  • inv – инверсный выход.

Инициализация:

q = 0

Алгоритм:

Graphic

D-триггер с инициализацией выхода (DFR_i)

DFR_i – D-триггер с R- доминантой. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • i – перепад;

  • d – потенциал;

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • ini – инициализация;

  • q – выход;

  • qn – инверсный выход.

Инициализация:

q = ini

Алгоритм:

Graphic

JK-триггер с инициализацией (JK _i)

JK _i – JK-триггер с инициализацией. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • j – бит job;

  • k – бит keep;

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • ini – начальное значение q;

  • q – выход;

  • qn – инверсный выход.

Инициализация:

q = ini

Алгоритм:

Graphic

RSS-триггер с инициализацией выхода (RSS_i)

RSS – RS-триггер с S-доминантой с инициализацией. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • i – начальное значение q;

  • q – выход.

Инициализация:

q = i

Алгоритм:

Graphic

RSR-триггер с инициализацией выхода (RSR)

RSR – RS-триггер с R-доминантой с инициализацией. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • i – начальное значение q;

  • q – выход.

Инициализация:

q = i

Алгоритм:

Graphic

D-триггер (DFR)

DFR – D-триггер с R- доминантой. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • i – перепад;

  • d – потенциал;

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • q – выход;

  • qn – инверсный выход.

Инициализация:

q = 0

Алгоритм:

Graphic

DV-триггер (DFRV)

DFRV– DV-триггер с R- доминантой. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • is – потенциал;

  • i – перепад;

  • s – бит установить (set);

  • r – бит сбросить (reset);

  • q – выход;

  • qn – инверсный выход.

Инициализация:

q = 0

Алгоритм:

Graphic

Несимметричный триггер Шмидта (asymSmTrig)

Блок SmTrig осуществляет алгоритм несимметричного триггера Шмидта. Раздел библиотеки: Триггеры.

Назначение входов и выходов:

  • x – аргумент;

  • min – нижний гистерезис;

  • max – верхний гистерезис;

  • l – отклонение уставки;

  • fu – больше;

  • fl – меньше.

Инициализация:

fu = 0, fl = 0

Алгоритм: первые три цикла fu = 1 при x > max, fl = 1 при x ≤ max, затем см. рисунок ниже.

Graphic
Graphic

Шаговая последовательность (Steper)

Блок Steper осуществляет последовательное переключение заданного количества шагов. Раздел библиотеки: Триггеры.

Назначение входов и выходов Steper
ЭлементОписание
Входы

enb

Разрешение работы

str

Пуск

rst

Сброс

t_f

Не используется

i

Разрешение (циклический)

t

Таймаут (циклический)

a

Сигнал (циклический)

Выходы

ind

Номер шага

s_w

Идет работа

s_t

Таймаут

s_r

Сброс

s_f

Конец работы

w

Признак работы (циклический)

t

Признак таймаута (циклический)

r

Авария (циклический)

Работа последовательности возможна только при наличии 1 на входе разрешения enb:

  • если enb = 0 до запуска, то запуск не произойдет;

  • если enb = 0 после запуска, то последовательность сбрасывается и на выходы выдается авария: s_r = 1 и ri = 1 (для всех i).

Запуск последовательности происходит при появлении перепада 0 → 1 на входе str.

Каждый шаг представлен группой входов i, t и a и выходов w, t и r. Включение шага происходит после завершения предыдущего шага и при i = 1, а на выходе признака работы w выставляется 1. Если к моменту включения шага его разрешение i не равно 1, то последовательность сбрасывается и на выходы выдается авария: s_r = 1 и ri = 1 (для всех i). Шаг завершается, когда блок получает 1 на входе ответного сигнала a. Если сигнал a не получен в течение времени t (задается в мс) с момента включения шага, то последовательность сбрасывается и на выход выдается признак таймаута: s_t = 1 и t = 1.

Graphic

Системные

В данном разделе приведено описание основных блоков библиотеки paCore из раздела Системные.

Информация о временах выполнения (SysInfo)

Блок SysInfo выдает информацию о временах выполнения. Раздел библиотеки: Системные.

Назначение входов и выходов SaverEx
ЭлементОписание
Входы

fmap

Имя map-файла

rst

Сброс

Выходы

init

Не используется

IT

Заданный таймерный цикл ввода-вывода

ic

Текущий таймерный цикл ввода-вывода

im

Максимальный таймерный цикл ввода-вывода

MT

Заданный таймерный цикл

tc

Текущий таймерный цикл

tm

Максимальный таймерный цикл

fc

Текущий фон

fm

Максимальный фон

crc

Не используется

inm0

Не используется (циклический)

cnt0

Не используется (циклический)

Graphic

Получить время и дату, день недели (getTDN)

Блок getTDN выдает на выходы текущее время и дату, день недели, установленные в ОС контроллера. Блок можно размещать как в Таймере, так и в Фоне. Раздел библиотеки: Системные.

Назначение входов и выходов:

  • f – не используется;

  • h – часы;

  • m – минуты;

  • s – секунды;

  • dw – день недели;

  • d – число;

  • mn – месяц;

  • y – год.

Graphic

Получить время и дату (getTD)

Блок getTD выдает на выходы текущее время и дату, установленные в ОС контроллера. Блок можно размещать как в Таймере, так и в Фоне. Раздел библиотеки: Системные.

Назначение входов и выходов:

  • f – не используется;

  • h – часы;

  • m – минуты;

  • s – секунды;

  • d – число;

  • mn – месяц;

  • y – год.

Graphic

Завершение программы (Exit)

Блок Exit осуществляет корректное завершение программы, когда на входе b1 появляется 1. Раздел библиотеки: Системные.

Назначение входов и выходов:

  • b1 – выйти;

  • q – значение входа.

Graphic

Разность тиков процессора (GetTicksDiff)

Блок GetTicksDiff предназначен для проведения высокоэффективных измерений малых временных промежутков. Раздел библиотеки: Системные.

Блок определяет разность между двумя входными значениями start и end (полученными при помощи блоков Счетчик тиков процессора), переводя ее в единицы измерения времени (мс) на выходе ms.

На выходе ms фиксируется последнее полученное значение до момента изменения на входе end.

Внимание
Для получения корректного результата последовательность выполнения блоков должна удовлетворять следующим условиям: GetTicks(start) < GetTicks(end) < GetTicksDiff.

Назначение входов и выходов:

  • start – тик начала;

  • end – тик окончания;

  • ms – разница между входами, мс;

  • pday – частота процессорного счетчика, кГц;

  • min – не используется для контроллеров ОВЕН.

Graphic

Счетчик тиков процессора (GetTicks)

Блок GetTicks в связке с блоком Разность тиков процессора позволяет выполнять высокоэффективные измерения малых временных промежутков. Раздел библиотеки: Системные.

Если на вход блока enb подан ненулевой сигнал, то на выходе tcks текущее значение внутреннего независимого цикличного счетчика.

При нулевом сигнале на входе, на выходе фиксируется последнее полученное значение счетчика (если измерений не было – 0).

Назначение входов и выходов:

  • end – включение;

  • tcks – тик.

Graphic

Загруженность таймерного потока (Effect)

Блок Effect выдает информацию о загруженности таймерного потока. Раздел библиотеки: Системные.

Назначение входов и выходов Effect
ЭлементОписание
Входы

rst

Сброс

Выходы

mt

Таймерный цикл основной

it

Таймерный цикл ввода-вывода

ctm

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

cti

Средний процент заполнения ввода-вывода цикла программой ввода-вывода

mtm

Средний процент заполнения ввода-вывода цикла программой ввода-вывода

mti

Максимальный процент заполнения ввода-вывода цикла программой ввода-вывода

cf

Средний процент от величины таймера работы фоновой программы

mf

Максимальный процент от величины таймера работы фоновой программы

Graphic

Событие по фронту (Event)

Блок Event предназначен для определения времени между событиями. На вход блока front заводится бит события. По входному фронту на выходе time блока будет значение времени в наносекундах. Раздел библиотеки: Системные.

Назначение входов и выходов:

  • front – входной фронт;

  • me – событие;

  • time – время срабатывания, нс.

Graphic

TCP/IP клиент (TcpIpClA)

Блок TcpIpClA представляет собой TCP/IP-клиент для обеспечения работы протоколов (например, Modbus TCP Master). Раздел библиотеки: Системные.

Так как работа блока занимает значительное время, его можно размещать только в Фоне.

Назначение входов и выходов:

  • lprt – локальный порт;

  • lip – локальный IP-адрес;

  • sdr – сетевой стек, для ПЛК ОВЕН "/";

  • rprt – удаленный порт;

  • ip – IP адрес удаленного сервера;

  • cnc – связь с блоком протокола;

  • stat – статус работы (0 – есть связь с TCP/IP сервером, >0 – нет связи).

Graphic

TCP/IP сервер (TcpIpSrA)

Блок TcpIpSrA представляет собой TCP/IP-сервер для обеспечения работы протоколов (например, Modbus TCP Slave). Сервер поддерживает одновременно не более 20 подключений. Раздел библиотеки: Системные.

Назначение входов и выходов:

  • prt – порт;

  • lip – локальный IP-адрес;

  • sdr – сетевой стек, для ПЛК ОВЕН "/";

  • wait – время в миллисекундах до закрытия пустого канала (0 – никогда);

  • cnc – связь с блоком протокола;

  • stat – статус работы (0 – есть подключения, >0 – нет подключений).

Graphic

Информация о сборке (BuildVersionInfo)

Блок BuildVersionInfo передает на свои выходы информацию о сборке. Раздел библиотеки: Системные.

Назначение выходов:

  • ver – версия проекта;

  • date – дата и время трансляции;

  • guid – уникальный идентификатор (GUID);

  • usr – имя пользователя;

  • pc – имя компьютера.

Graphic
BuildVersionInfo

Информация о накопителе (DriveInfo)

Функциональный блок DriveInfo используется для получения информации о накопителе по имени (адресу устройства). Раздел библиотеки: Системные.

По факту наличия восходящего фронта на вход start ФБ выполняет разовую выдачу информации о накопителях.

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

Назначение входов и выходов:

  • start – запуск работы блока по восходящему фронту (0 1);

  • driveName – адрес накопителя в системе (до 49 символов);

  • error – накопитель отсутствует или недоступен;

  • capacity – общий объем накопителя, Кбайт;

  • used – занятый объем накопителя, Кбайт;

  • available – доступный объем накопителя, Кбайт.

Graphic
DriveInfo

Асинхронное выполнение команд Linux (SysExecute)

Функциональный блок SysExecute используется для отправки команды в терминал Linux и получения ответа. Раздел библиотеки: Системные.

Интерфейс данного блока соответствует CAA Behavior Model (PLCopen Behavior Model).

Бизнес-логика ФБ выполняется в отдельном потоке и не оказывает влияние на время работы циклов таймера и фона.

Внимание
Вызываемые команды могут выполняется в неблокирующем режиме. Поток может освобождаться после подачи команды и через определенное время забирать ее ответ. Для этого в конце команды необходимо добавить знак '&' (амперсанд).

Если результат выполнения команды содержит более 1023 символов, выполнение команды будет прервано, будут подняты флаги done, error, но результат работы будет содержаться в output.

Запуск выполнения команды не произойдет, если поднят флаг прерывания abort.

Назначение входов и выходов:

  • execute – запуск выполнения команды по восходящему фронту (0 1);

  • command – текст команды;

  • abort – запуск прерывания исполнения команды по восходящему фронту (0 1);

  • priority – приоритет потока ожидания выполнения команды, по умолчанию 5;

  • output – результат выполнения команды (менее 1024 символов);

  • done – выполнение завершено;

  • aborted – выполнение было прервано;

  • busy – идет работа;

  • error – работа была прервана из-за переполнения результирующей строки.

Graphic

Менеджер потоков (ThreadMan)

Блок ThreadMan предоставляет возможности управления и диагностики фоновых потоков исполнительной системы. Раздел библиотеки: Системные.

Назначение входов и выходов:

  • slp – время сна (простоя) фоновых потоков в мкс, в этот промежуток времени управление передается другим потокам. Если задано значение 0 или блок ThreadMan не добавлен в проект, то время простоя задается таймерным промежутком места работы Таймер;

  • btd – включение диагностики времени выполнения блоков: 0 – выключена, 1 – включена. Если диагностика включена, то в отладчике у каждого блока отображается время его выполнения, если выключена, то время выполнения всегда отображается как 1 мкс, что означает, что блок работает. На некоторых контроллерах выключение диагностики может существенно оптимизировать время выполнения всей программы;

  • num – количество запущенных дополнительных фоновых потоков (не включает Таймер, Ввод-вывод и Фон);

  • prio_max – максимально разрешенный приоритет для дополнительных фоновых потоков, зависит от ОС и не может быть изменен. Для места работы Поток в проекте следует выбирать приоритет ниже prio_max;

  • pmin – минимальный приоритет из запущенных дополнительных фоновых потоков;

  • pmax – максимальный приоритет из запущенных дополнительных фоновых потоков.

Graphic

Последовательный порт (SerialPort)

Блок SerialPort представляет собой драйвер COM-порта, поддерживает системный последовательный порт под Linux и Windows. Раздел библиотеки: Системные.

Назначение входов и выходов SerialPort
ЭлементОписание
Входы

dev

Имя устройства (например, ser1, COM2)

spd

Скорость в бодах: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 128000, 256000, 153600, 230400, 460800, 921600

par

Контроль четности:

0 – нет;

1 – нечетный;

3 – четный

stb

Количество стоповых бит: 1 или 2

dtb

Количество бит данных: 7 или 8

Выходы

cnc

Связь с блоком протокола

stat

Статус:

1 – корректная работа;

-1 – в системе не найдено устройство с именем dev;

-2 – к выходу cnc не подключен блок протокола

rcnt

Количество полученных байт

wcnt

Количество отправленных байт

diag

Диагностический – счетчик разности между количеством ошибок и принятыми (не может быть меньше 0)

Graphic
Последовательный порт (SerialPort)

Работа со строками

Длина строки (StrLen)

Блок StrLen осуществляет подсчет количества символов len в строке s. Раздел библиотеки: Работа со строками.

Назначение входов и выходов:

  • s – строка;

  • len – длина.

Graphic

Часть строки (StrNmp)

Блок StrNmp выделяет часть входной строки начиная с позиции n и длиной m (1-й символ строки имеет позицию 0). Если n и m заданы так, что длины исходной строки недостаточно, то выходная строка res ограничивается концом входной строки. Раздел библиотеки: Работа со строками.

Назначение входов и выходов:

  • s – строка;

  • n – начало;

  • m – длина;

  • res – выходная строка.

Graphic

Слияние строк (StrApp)

Блок StrApp сливает входные строки s в одну результирующую строку str. В выходной строке строки расположены в том же порядке, что и входы s. Длина каждой строки s не должна превышать 60 символов. Раздел библиотеки: Работа со строками.

Назначение входов и выходов:

  • s0, s1, , sn – строки;

  • res – результирующая строка.

Graphic

Сохранение данных

Хранение параметров на диске (SaverEx)

Блок SaverEx обеспечивает хранение данных в архиве на диске контроллера в виде бинарного файла. Раздел библиотеки: Сохранение данных.

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

Назначение входов и выходов SaverEx
ЭлементОписание
Входы

rst

Сброс ошибок записи

fnm

Абсолютный путь и имя файла на диске (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB из библиотеки paOwenIO (константный)

wr

Запись на диск

in

Значение параметра (циклический)

typ

Тип параметра (циклический, константный):

DI – 8-ми битный регистр;

AI – вещественное значение;

II – 16-ти битный регистр

ini

Значение для инициализации (циклический, константный)

Выходы

next

Имя следующего файла

enb

Запись разрешена

sts

Статус:

0 – после сброса;

1 – записан;

2 – прочитан;

<0 – ошибка

good

Количество удачных записей

bad

Количество ошибок записи

rej

Количество отклоненных записей

o

Текущее значение параметров (циклический)

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

Данные организуются в виде переменных in с жестко заданным типом typ.

Поскольку входы in имеют тип any, следует строго соблюдать правила преобразования типов при проведении связей.

Если файла не существует на диске – выходы инициализируются значениями инициализации ini, происходит запись в файл.

Если файл существует на диске, выходы инициализируются сохраненными значениями. Запись в файл осуществляется только при изменении значений на входах in.

Запись на диск можно осуществить принудительно, подав команду wr.

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

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

Если происходит однократная ошибка при записи файла на диск, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. Следует следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом, равным метке времени сбоя (в мс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.

Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

Внимание
При изменении числа входов блока SaverEx файлы на диске перезаписываются.

Подробнее о возможностях и работе блока SaverEx см. в документе Архивирование и сохранение уставок.

Graphic

Счетчик времени наработки (CounterMEx)

Блок CounterMEx предназначен для сохранения в файл наработки устройств, например, насосов. Раздел библиотеки: Сохранение данных.

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

Назначение входов и выходов CounterMEx
ЭлементОписание
Входы

rst

Сброс ошибок записи

fn

Абсолютный путь и имя файла (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB из библиотеки paOwenIO (константный)

ask

Запись на диск

slv

Используется для изменения значений счетчиков, если slv = 1, то cnt = mas, cfrn = mcfrn

enbl

Работа устройства (циклический): пока enbl = 1, увеличивается время наработки cfrn, при изменении enbl с 0 на 1 число включений cnt увеличивается на 1

rst

Сброс времени наработки cnt (циклический)

frm

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

rfr

Сброс числа включений cfrn (циклический)

mas

Балансировка времени наработки cnt (циклический), если slv = 1, то cnt = mas

mcfrn

Балансировка числа включений cfrn (циклический), если slv = 1, то cfrn = mcfrn

Выходы

next

Имя следующего файла

enb

Запись разрешена

good

Количество удачных записей

bad

Количество ошибок записи

cnt

Время наработки в секундах (циклический)

hour

Время наработки в формате часы (циклический)

min

Время наработки в формате минуты (циклический)

sec

Время наработки в формате секунды (циклический)

day

Текущий день (циклический)

mnth

Текущий месяц (циклический)

year

Текущий год (циклический)

cfrn

Число включений (циклический)

Блок анализирует входы enbl.

На выходе cfrn отображается число включений устройства (количество изменений enbl c 0 на 1), на выходе cnt отображается время наработки устройства (сколько секунд enbl был равен 1).

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

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

Для изменения числа включений и времени наработки следует подать 1 на вход slv, тогда cnt = mas, cfrn = mcfrn. Это может быть полезно для синхронизации в дублированных системах.

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

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

Если происходит однократная ошибка при записи файла на диск, блок пытается переименовать текущий файл и снова произвести запись. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом, равным метке времени сбоя (в мс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.

Если происходит повторный сбой записи, то блок блокируется до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

Внимание
При изменении числа входов блока CounterMEx файлы на диске перезаписываются.

Подробнее о возможностях и работе блока CounterMEx см. в документе Архивирование и сохранение уставок.

Graphic

Буфер чтения/записи уставок (BufSupEx)

Блок BufSupEx представляет собой двунаправленный буфер данных интерфейса, а данные сохраняются в бинарном файле на диске контроллера. Блок сохраняет все значения на диске контроллера аналогично блоку SaverEx. Раздел библиотеки: Сохранение данных.

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

Назначение входов и выходов BufSupEx
ЭлементОписание
Входы

inter

Cвязь от интерфейса, к которому принадлежит данный буфер

group

Номер группы (константный)

fnm

Абсолютный путь и имя файла (может быть пустым – задается автоматически), расширение игнорируется. При сохранении данных на внешнем накопителе следует использовать путь, указанный на выходе блока 210-SD-USB из библиотеки paOwenIO (константный)

mask

Не используется

rst

Сброс ошибок записи

wr

Запись на диск

dan

Значение, которое записывается в буфер при czap = 1 (циклический)

czap

Запись значения dan (циклический)

typ

Тип параметра (циклический, константный):

DI, DO – 8-ми битный регистр;

AI, AO – вещественное значение;

II, IO – 16-ти битный регистр

adr

Адрес параметра (циклический, константный)

ini

Значение для инициализации (циклический, константный)

min

Минимум. Если принятое значение меньше min, то оно игнорируется (циклический)

max

Максимум. Если принятое значение больше max, то оно игнорируется (циклический)

Выходы

pkt

Подключение к блокам OpcUAClient, UABufSups из библиотеки paOpcUA

next

Имя следующего файла

enb

Запись разрешена

sts

Статус:

0 – после сброса;

1 – записан;

2 – прочитан;

<0 – ошибка

good

Количество удачных записей

bad

Количество ошибок записи

rej

Количество отклоненных записей

dan

Значение параметра, полученное по интерфейсу или на вход dan (после проверки на min и max)

chn

Признак изменения, выставляется в 1 на один цикл выполнения программы, если значение dan изменилось

zap

Признак записи, выставляется в 1 на один цикл выполнения программы, если значение с входа dan было записано

Номер группы group используется в качестве Slave ID при подключении к блоку интерфейса Modbus Slave.

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

Адрес переменной adr зависит от интерфейса, к которому подключен буфер, например, адрес регистра Modbus.

Поскольку входы dan имеют тип any, следует строго соблюдать правила преобразования типов при проведении связей.

Если файл существует на диске, выходы инициализируются сохраненными значениями. Если файла не существует – выходы инициализируются значениями инициализации ini.

Запись в файл осуществляется при изменении значений на входах dan или по интерфейсу. Если файла на диске не существует и выходы dan приняли значения ini, то можно записать их на диск принудительно, подав команду wr.

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

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

Имя файла и путь к нему задается на входе fnm. Имя может быть пустым, тогда имя файла будет выбрано автоматически по индексу блока, а файл сохранится в рабочую директорию контроллера. Если повторная запись оказывается удачной, то продолжается работа в обычном режиме, а выход bad инкрементируется. Следует принять меры по диагностике или замене носителя, поскольку сбои при записи могут быть следствием скорого выхода его из строя. Файл, на котором произошел сбой, остается на диске под тем же именем с добавленным к нему суффиксом, равным метке времени сбоя (в мс от 1 января 1970 г). Удалять его не желательно, чтобы повторно не использовать потенциально сбойный сектор.

Если происходит повторный сбой записи, то блок блокируется (выход enb = 0) и больше не производит попыток переименований файлов и записи до тех пор, пока ошибки не будут сброшены фронтом на входе rst.

Внимание

При изменении числа входов блока BufSupEx файлы на диске перезаписываются.

Подробнее о возможностях и работе блока BufSupEx см. в документе Архивирование и сохранение уставок.

Graphic

Запись логов в оперативную память (RamLog)

Блок RamLog обеспечивает возможность сбора логов по заданным параметрам для сохранения в оперативную память. Запись происходит в несколько буферов, которые при заполнении или по таймауту попадают в очередь для передачи на выход (сама передача происходит при условии, что предыдущий прочтен). Раздел библиотеки: Сохранение данных.

Так как работа блока занимает значительное время, данный блок следует размещать только в Фоне.

Назначение входов и выходов RamLog
ЭлементОписание
Входы

enb

Включение блока

bsize

Размер буфера – позволяет задать максимальное количество символов, хранимых в отдельном буфере: 128…4096

bnum

Количество буферов: 2…64

init

Создать ли все буферы при инициализации. Полезно, если требуемые диагностические сообщения имеют большой объем и генерируются с самого начала работы программы. Изначально, при инициализации создается минимальное количество буферов и, если требуется, увеличивается в процессе работы. Если init = 1, то сразу будет создано bnum буферов

tmout

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

glvl

Уровень ошибок, если у сообщения уровень меньше или равен заданному, то оно будет напечатано независимо от кодов и индексов (ERR = 1, WRN = 2, INF = 3, DBG = 10, DBG + N)

dbglvl

Уровень отладки, если у сообщения уровень превышает заданный, оно не будет напечатано

dscrd

Сброс, очищает списки отслеживаемых блоков и кодов. Срабатывает при изменении значения с 0 на 1

code

Код отладки – значение, которое будет добавлено в список отслеживаемых при изменении входа addcd или удалено при изменении входа delcd

addcd

Добавить код

delcd

Удалить код

indx

Индекс блока – значение, которое будет добавлено в список отслеживаемых при изменении входа addix или удалено при изменении входа delix

addix

Добавить индекс

delix

Удалить индекс

print

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

Выходы

sts

Статус:

0 – нормальная работа;

+2 – сообщение, записываемое в буфер, превышает его максимальный размер, часть сообщения обрезана;

+4 – все буферы заполнены, происходит периодическая потеря сообщений. Для устранения ошибок следует изменить соответствующие входные параметры: размер bsize или количество bnum

log

Текущий буфер, доступный для чтения

cds

Список отслеживаемых диагностических кодов

indxs

Список индексов отслеживаемых блоков

Graphic

Очереди

Очередь битов qb

Тип данных qb позволяет накапливать очередь битовых значений в таймерном потоке. Если выход типа qb использовать в обмене по протоколу OPC UA, то будут переданы все накопленные данные, независимо от настроек подписки.

GraphicGraphic
qb

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

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

GraphicGraphic

Преобразование регистра в очереди битов (R2toQuBit)

Блок R2toQuBit разбирает входной регистр на биты, каждый из которых может накапливать очередь значений в таймерном потоке. Раздел библиотеки: Очереди.

Назначение входов и выходов:

  • qus – размер очереди (на каждый выходной бит);

  • reg – входной регистр;

  • ov – количество переполнений очереди;

  • n – текущее количество очередей;

  • b0, , b15 – биты.

Graphic

Преобразование очереди битов в бит (QuBit_Bit)

Блок QuBit_Bit преобразует очередь битов в бит, который можно дальше использовать в фоновом потоке. Среда разработки автоматически добавляет этот блок, если проведена связь между выходом типа qb и входом типа b. Раздел библиотеки: Очереди.

Назначение входов и выходов:

  • in – входная очередь;

  • val – какое значение ловить;

  • out – выход.

Алгоритм работы: значения из входной очереди сравниваются с заданным (вход val), и если встречается хотя бы одно, то выход out устанавливается равным val.

Graphic
Преобразование очереди битов в бит (QuBit_Bit)