Место работы – набор программ, который вызывается заданным
способом.
Модуль – основной узел проекта в среде Полигон, в котором
задаются настройки для подключения к контроллеру и др. параметры для
создания пользовательского приложения.
ОС – операционная система.
ПК – персональный компьютер.
ЛКМ (ПКМ) – левая (правая) кнопка мыши.
ПЛК – программируемый логический контроллер.
ПО – программное обеспечение.
Представления – тип окон в среде Полигон, которые предназначены
для редактирования проекта (например, дерево, страница, редактор и
т.д.).
Проект – относительно независимая алгоритмическая задача
или группа однотипных задач.
Сборка – компиляция исходного кода из одного или нескольких
файлов и последующее связывание этих файлов в исполняемый файл.
Составной функциональный блок – функциональный блок, который
состоит из других функциональных блоков.
Таймер (место работы) – поток, выполняющийся в режиме реального
времени с заданной периодичностью.
Трансляция – процесс перевода программы с одного языка на
другой, состоит из компиляции и интерпретации.
ФБ – функциональный блок – элементарный пользовательский
алгоритм (класс C++), который используется несколько раз в проекте.
Фон (место работы) – поток, выполняющийся циклически.
C++ – компилируемый язык программирования со
строгой типизацией, который поддерживает парадигмы процедурного
и объектно-ориентированного программирования.
FTP (FileTransferProtocol) — протокол прикладного уровня для передачи файлов
по сети.
NTP (Network Time Protocol) — сетевой протокол для
синхронизации внутренних часов устройств в сети.
Runtime (среда выполнения) – вычислительное окружение, необходимое
для выполнения компьютерной программы и доступное во время выполнения
компьютерной программы.
SQL (Structured Query Language) – язык программирования
для хранения и обработки информации в реляционной базе данных.
SSH (Secure SHell) – протокол прикладного уровня
для удаленного управления операционной системой с шифрованием трафика.
Unix-время – количество секунд, прошедших с полуночи
(00:00:00 UTC) 1 января 1970 года (четверг).
UTC (TempsUniverselCoordonné) – всемирное координированное время.
Введение
Полигон – это среда графического программирования на языке
функциональных блоков. Не только алгоритмы, но и драйверы и протоколы
обмена, реализованы в виде функциональных блоков. Прикладному программисту
нет необходимости описывать переменные – система создает их, обеспечивая
уникальность и следит за корректным преобразованием типов.
Проект имеет единую иерархическую структуру для описания аппаратной
конфигурации, программы и обмена данными с другими системами.
Окончательным этапом создания программы на языке функциональных
блоков является трансляция, после которой создается исполняемый файл .о. Для тестирования полученной программы можно воспользоваться
отладчиком.
Открыть или создать проект (файл с расширением .pl2) можно
в окне Проекты. Рекомендуется размещать каждый новый проект в отдельном
каталоге.
Открытый проект можно отобразить в рабочих окнах на экране с помощью
представлений Дерево и Страница. Для того, чтобы добавить в проект функциональные
блоки, необходимо также открыть соответствующие библиотеки (файлы с расширением .ll2).
Расположение окон и ссылки на открытые проекты и библиотеки сохраняются
в файле на диске и восстанавливаются при следующем запуске Полигона. В меню Экран можно создавать разные конфигурации рабочего
экрана и сохранять их.
Одно из рабочих окон обычно является текущим (обозначается символом ), в этом окне
отображаются страницы при нажатии на полях и двойном нажатии в Дереве. Окно можно зафиксировать (флажок Фиксировать в верхней панели окна), чтобы оно при нажатии не становилось
текущим (это полезно, например, для дерева, в котором всегда отображается
структура проекта).
Данный документ актуален для версии среды Полигон – 1994 и выше, версии библиотеки paCore – 988 и выше.
Знакомство со средой разработки
Установка среды программирования для Windows
Скачать инсталлятор среды Полигон для ОС Windows можно
по ссылке.
Рекомендуемые системные требования:
ОС: Windows 7/8/10/11 64 Bit;
Оперативная память: 4 Гб и выше;
Память на диске: 2 Гб и выше.
Для установки среды следует:
Распаковать скачанный архив и запустить Polygon2Installer_LinuxOwen3.exe.
Выбрать путь для установки среды Полигон. По умолчанию
среда устанавливается на диск C.
Примечание
Путь
установки среды не должен содержать кириллицу и пробелы.
Выбрать компоненты для установки.
По умолчанию инсталлятор
устанавливает саму среду Полигон и пакет сборки под текущую
заводскую прошивку ПЛК210. Для выборочной установки можно отметить
требуемый компонент флажком.
Ознакомиться с лицензионным соглашением и принять его.
ЕЕсли необходимо, создать папку для ярлыков в меню Пуск.
Нажать Установить.
Когда установка завершится, на рабочем столе появится ярлык программы Полигон. Инсталлятор предложит открыть краткое описание демонстрационного
проекта.
Инсталлятор также предложит установить или обновить драйверы Guardant.
После установки среды рекомендуется обновить версии среды и библиотек
до актуальных. Добавление библиотек в среде Полигон описано
в разделе. Процедура обновления среды и библиотек описана в разделе.
Установка среды программирования для ОС Linux
Скачать скрипт установки среды Полигон для ОС Linux можно
по ссылке.
Рекомендуемые системные требования:
ОС: Astra Linux Special Edition 1.7, Ubuntu (версия ядра Linux
5.10 и выше);
Оперативная память: 4 Гб и выше;
Память на диске: 2 Гб и выше.
Для установки среды следует:
Распаковать архив со скриптом установки.
Дать права на исполнение скрипта установки Polygon2Installer_LinuxOwen3.sh.
Запустить скрипт установки.
Следовать инструкциям инсталлятора.
Указать директорию для установки среды Полигон.
Примечание
Путь установки среды не должен содержать кириллицу и пробелы.
Выбрать компоненты среды для установки. По умолчанию инсталлятор
устанавливает саму среду Полигон и пакет сборки под текущую заводскую прошивку
ПЛК210.
Ознакомиться с лицензионным соглашением и принять его.
Нажать Установить.
Когда установка завершится, на рабочем столе появится ярлык программы Полигон (только для ПК с ОС Astra Linux). Инсталлятор предложит
открыть краткое описание демонстрационного проекта.
После установки среды рекомендуется обновить версии среды и библиотек
до актуальных. Добавление библиотек в среде Полигон описано
в разделе. Процедура обновления среды и библиотек описана в разделе.
Первый запуск
Полигон рекомендуется запускать через ярлык на рабочем столе
или из папки Polygon2 (для ОС Windows исполняемый файл polygon2.exe, для ОС Linux –startPolygon2.sh).
При первом запуске среды откроется демонстрационный проект mnu_demo.pl2. Краткое описание демонстрационного проекта
приведено в документе Описание.pdf в папке Polygon2.
Если необходимо, демонстрационный проект можно запустить на виртуальном
контроллере через Панель отладки.
Для этого следует:
Добавить Панель отладки через меню Окна/Панели
инструментов/Панель отладки.
Нажать на Панели отладки кнопку Запустить на виртуальном контроллере.
В отдельном окне запустится приложение виртуального контроллера.
Среда попросит ввести пароль для через отладчик среды. Пароль
демонстрационного проекта – 123.
Среда подключится отладчиком среды к запущенному контроллеру.
Контроллеры
ПЛК ОВЕН, которые работают с исполнительной средой Полигон, представлены в таблице ниже.
Состав библиотек, доступных пользователю для полноценной работы,
можно посмотреть в web-конфигураторе контроллера в разделе Состояние/Обзор.
Внимание
Если в пользовательском проекте используются
блоки из библиотек без соответствующих лицензий, проект прекратит
свою работу по истечении 1 часа. При подключении откладчиком в этом
случае на модуле будет надпись Демо-режим и время до
окончания выполнения программы.
Опции лицензионных пакетов
При необходимости можно приобрести опции для работы с блоками библиотек paSync, paIEC104, paIEC850 отдельно:
Опции лицензий runtime
Опция
Описание
Состав доступных библиотек*
REDU
Опция поддержки программного резервирования ПЛК
paSync
IEC104
Опция поддержки протоколов МЭК 60870-5-101 и МЭК 60870-5-104
Загрузка файлов лицензии в контроллер описана в разделах, , и.
Загрузка файлов лицензий в ПЛК в среде Полигон
Пакет лицензий можно загрузить из среды Полигон.
Для этого следует настроить свойства модуля для подключения к контроллеру.
Подключаться к контроллеру можно через USBDevice (IP адрес ПЛК при подключении через USBDevice – 172.16.0.1) или через Ethernet.
Подробно подключение к контроллеру описано в разделе.
Для загрузки лицензий следует:
Нажать правой кнопкой мыши (ПКМ) на модуль и выбрать команду Записать лицензии.
В появившемся окне ввести серийный номер контроллера. Серийный
номер выгравирован на корпусе прибора и приведен в паспорте на прибор
(входит в комплект поставки прибора).
Нажать ОК. Начнется процесс скачивания лицензий
с сервера pa.ru и загрузка их в контроллер. После окончания
загрузки лицензий появится окно:
Также серийный номер прибора можно ввести в свойстве модуля. Снизу
в окне свойств модуля нужно выбрать из выпадающего списка свойство Серийный номер и нажать Добавить, потом вводить
номер сверху в поле Значение.
Если данное свойство прописано в модуле, то среда при записи лицензий
не будет требовать ввести серийный номер контроллера.
Свойство Серийный номер также добавляется средой
автоматически при вводе номера в окне Введите серийный номер при вызове команды Записать лицензии.
Внимание
Для загрузки лицензий в контроллер через среду Полигон требуется доступ к сети Интернет.
Загрузка файлов лицензии через утилиту WinSCP (для ОС Windows)
описана в разделе. Загрузка файлов лицензии через консоль Linux описана в разделе.
Внимание
После загрузки дополнительных файлов лицензий
для обновления списка доступных библиотек на странице web-конфигуратора Состояние/Обзор следует загрузить в контроллер проект
с блоком OwenHWInfo из библиотеки paOwenIO.
Загрузка файлов лицензий в ПЛК через WinSCP
При отсутствии возможности подключения к серверу pa.ru пакет лицензий можно загрузить через утилиту WinSCP (или через любой менеджер файлов). Утилиту можно загрузить бесплатно
на сайте https://winscp.net/eng/download.php
Подключаться к контроллеру можно как через USBDevice (IP адрес ПЛК при подключении через USBDevice – 172.16.0.1), так и через Ethernet.
После запуска утилиты следует настроить соединение по протоколу SFTP, указав IP-адрес контроллера, имя пользователя – root и пароль (по умолчанию – owen, можно изменить в web-конфигураторе).
Чтобы подключиться к контроллеру, следует нажать Войти.
Файлы лицензии необходимо загрузить в рабочую директорию контроллера /home/root.
Внимание
После загрузки дополнительных файлов лицензий
нужно обновить список доступных библиотек на странице web-конфигуратора Состояние/Обзор. Для этого следует загрузить в контроллер
проект с блоком OwenHWInfo из библиотеки paOwenIO.
Загрузка файлов лицензий в ПЛК через терминал Linux
Если нет возможности подключиться к серверу pa.ru, то пакет
лицензий можно загрузить через терминал Linux по протоколу SSH с помощью команды scp.
Подключаться к контроллеру можно как через USBDevice (IP адрес ПЛК при подключении через USBDevice – 172.16.0.1), так и через Ethernet.
Для подключения к SSH-серверу контроллера необходимо указать
пароль (по умолчанию – owen, можно изменить в web-конфигураторе).
Для проверки файлов лицензии можно подключиться к SSH-серверу
контроллера и ввести команду ls.
Внимание
После загрузки дополнительных файлов лицензий
нужно обновить список доступных библиотек на странице web-конфигуратора Состояние/Обзор. Для этого следует загрузить в контроллер
проект с блоком OwenHWInfo из библиотеки paOwenIO.
Библиотеки
Стандартные библиотеки
Список стандартных библиотек
Библиотека
Описание
Документация
paCore
Основная библиотека. Содержит базовые блоки простых операций (арифметических,
логических, триггеры и т.п.), а также некоторые блоки для конфигурации
ПЛК, блоки работы с данными. В данной библиотеке описаны типы
данных, используемые в других библиотеках
Библиотека предназначена для конфигурирования ввода/вывода ПЛК ОВЕН,
а также настройки системных функций ПЛК (внешних накопителей, зуммера,
светодиодов и т. п.)
Рекомендуется хранить файлы библиотек в одной директории
отдельно от папки Polygon2, чтобы после переустановки среды
не загружать их повторно.
При установке среды загружаются библиотеки базовой лицензии, при необходимости дополнительные библиотеки можно загрузить на странице среды Полигон или в web-конфигураторе
контроллера во вкладке ПЛК/Загрузки.
Внимание
Путь к файлам библиотек не должен содержать кириллицу
и пробелы.
Для добавления библиотеки в проект следует:
Перейти в меню Окна/Проекты. В появившемся окне
отобразится текущий проект и добавленные библиотеки.
Внимание
Чтобы
устанавливать обновления для среды и библиотек, необходимо иметь доступ
к сети Интернет.
Нажать кнопку Открыть и перейти в папку с файлами
библиотеки, которую необходимо добавить. Затем в выпадающем списке
выбрать тип файла Библиотека Полигон 2 (*.ll2).
В окне появится файл библиотеки с расширением .ll2. Следует выбрать его и нажать Открыть.
Если необходимо, можно сразу открыть библиотеку в отдельном окне
типа Дерево с помощью всплывающего окна.
Добавленная библиотека отобразится в окне Проекты.
Обновление
В системном окне Окна/О программе отображаются
установленные версии среды Полигон и библиотек.
Во вкладке Обновления есть возможность проверить
и скачать обновления.
Также при запуске среды, если на сервере есть обновления для Полигон или библиотек, будет выведено сообщение об этом.
Внимание
Чтобы устанавливать обновления для среды и библиотек,
необходимо иметь доступ к сети Интернет.
Для установки последних версий среды и библиотек следует:
Убедиться, что соединение с сервером pa.ru установлено, нажав кнопку Подключить.
Примечание
Нажать на кнопку Проверить. В окне появятся версии
среды и библиотек, доступные для установки.
Кнопками снизу выбрать распаковщик unzip или 7zip и нажать Сохранить.
Нажать Установить.
Для установки обновлений среда будет перезапущена. Появится окно
предупреждения о закрытии программы.
После завершения установки среда снова откроется. В окне О программе отобразятся последние установленные версии среды
и библиотек.
Внимание
Если установка обновлений версий среды и библиотек
не произошла, следует прописать полный путь к файлу распаковщика в
окне Команда для распаковки (например, "C:\Program
Files (x86)\7-Zip\7z.exe").
Примечание
При возникновении других проблем с установкой обновлений
среды и библиотек следует обратиться на почту технической поддержки support@owen.ru
Контроль версий
Текущую версию запущенного проекта можно посмотреть во всплывающем
тултипе при наведении мышью на модуль.
Также текущую версию запущенного проекта можно посмотреть в web-конфигураторе
контроллера в разделе ПЛК/Информация.
Внимание
Для того, чтобы в web-конфигураторе контроллера
(раздел ПЛК/Информация) обновлялась информация о запущенном
проекте, следует добавить в проект блок OwenHWInfo из
библиотеки paOwenIO.
В файле versions.txt в
папке, куда транслируется проект, можно получить информацию о версии
проекта и используемых в нем библиотек.
Если версии проекта в среде и на контроллере не совпадают, то при
запуске отладчика иконка модуля будет отображаться с предупреждающим
знаком. Если навести на знак курсор, появится тултип с информацией
о предупреждении.
Для просмотра данных по версиям библиотек, используемых в проекте,
нужно нажать ПКМ на запущенный модуль в дереве и выбрать в открывшемся
меню Показать все. Откроется окно трансляции (системное
окно Прогресс).
Обслуживание
Если во время работы в среде Полигон или при трансляции
проекта появляется ошибка, то программа выведет предупреждающее сообщение
и предложит отправить сообщение об ошибке.
При выборе Отправить лог ошибки и сам проект будут
подготовлены в выбранной папке на диске для отправки разработчикам.
Данные файлы следует направить на почту support@owen.ru в виде архива с подробным описанием проблемы.
При выборе Отмена окно будет закрыто. Информацию
по ошибкам можно самостоятельно посмотреть в окне Прогресс. Ошибки
в тексте выделены красным шрифтом.
Перемещение по ошибкам можно осуществлять с помощью кнопок Вверх и Вниз.
Общие сведения о среде
Проект
Однопользовательский проект в среде Полигон представляет
собой файл с расширением .pl2. В нем хранится все содержимое
проекта за исключением дополнительных файлов, которые могут использоваться,
например, при создании пользовательского составного блока на
C++. Файлы проектов можно копировать и таким образом передавать
другим разработчикам. Каждый проект рекомендуется размещать в отдельной
папке, поскольку внутри нее среда разработки создает временные файлы
при трансляции и копии проекта (бэкапы).
При редактировании проекта все изменения происходят только в кратковременной
памяти. Для записи изменений в файл нужно использовать команду Сохранить в панели инструментов или комбинацию клавиш Ctrl + s. Последние 10 действий можно отменить командой Отменить или
комбинацией клавиш Ctrl+z независимо
от того, был ли сохранен проект на диск или нет.
Автоматическое сохранение проекта по умолчанию производится каждые 5минут. Период сохранения проекта можно изменить в меню Экран/Настройки (при установке 0 автосохранения производиться не будут).
При каждом сохранении на диск создается копия проекта (бэкап) с таким
же именем плюс суффикс с датой и временем сохранения.
Более подробную информацию о создании многопользовательского проекта
можно найти в разделе.
Структура проекта
Проект в среде разработки Полигон имеет иерархическую структуру,
которую можно увидеть в представлении Дерево. Узлы дерева
могут быть разных типов. Основной узел с точки зрения создания программы
для контроллера – Модуль.
В свойствах модуля задаются параметры подключения к контроллеру.
Внутри модуля располагаются графическая структура алгоритмов и настройки
для контроллера, из модуля транслируется исполняемый файл.
Проект может содержать несколько модулей.
Внутренняя структура модуля жестко определена: Модуль > Место
работы > Программа > Страница > Функциональный блок.
Место работы задает способ выполнения находящихся
в нем программ, т.е. поток, в котором программы будут выполняться.
ПО контроллера формируется таким образом, что каждый функциональный
блок можно выполнять в одном из четырех потоков:
место работы Таймер (таймерное прерывание);
место работы Ввод-вывод (таймерное прерывание);
место работы Фон (фоновый поток);
место работы Поток (фоновый поток).
Часть алгоритма, помещенная в таймерном прерывании, всегда выполняется
в режиме реального времени с заданной периодичностью (периодичность
задается свойством места работы Таймерный промежуток) – это поток с самым высоким приоритетом.
Необходимо соизмерять размер программ (количество функциональных
блоков), находящихся в таймере, со временем таймерного цикла. При
недостаточном интервале таймерного цикла может появиться ошибка времени
исполнения – Time Out. Данная ошибка повлечет за собой остановку
программы (отслеживать реальное время выполнения можно с помощью функционального
блока SysInfo).
Существуют функциональные блоки, такие, как логические таймеры,
которые целесообразно помещать только в Таймер.
Фоновый поток представляет собой бесконечный цикл, который выполняется
с более низким приоритетом в оставшееся от таймерного потока время.
В Фон необходимо помещать некритичные по времени исполнения
блоки, которые не привязаны к внешним событиям. Большинство блоков,
которые обеспечивают обмен по интерфейсам, выполняют запись в файлы
и т. п., целесообразно помещать только в Фон.
Примечание
По умолчанию в проекте добавлено два места работы: Таймер и Фон. О создании дополнительных
потоков см. раздел.
Программа – это относительно независимая алгоритмическая
задача или группа однотипных задач.
Ради простоты дальнейшей поддержки проекта следует избегать двух
крайностей: малого числа слишком длинных программ (т.е. с большим
числом страниц) и слишком большого числа коротких программ.
Имя программы должно состоять только из символов латинского алфавита
и нижнего подчеркивания «_», поскольку это имя при трансляции
определяет имя файла исходных текстов и объектного файла. Важно давать
программам осмысленные имена, чтобы впоследствии было проще понять
их назначение. Желательно всегда присваивать разные порядковые номера
выполнения программам одного потока.
Для удобства просмотра программы разбиты на Страницы. Количество страниц задает пользователь.
Страница, в свою очередь, содержит Функциональные блоки, соединенные между собой связями.
Поток данных
Программа, получаемая после трансляции, имеет двухпоточную структуру
и сторожевой таймер.
При создании алгоритма функциональные блоки можно размещать либо
в фоновом, либо в таймерном потоке. Для этого блок создается в определенном Месте работы.
Порядок выполнения алгоритма внутри потока определяется следующим
образом:
Порядок выполнения программы (свойство Номер);
Номер страницы (свойство Номер);
Порядок выполнения блока на странице (свойство Порядок).
Если блоки на одной странице имеют одинаковый порядок выполнения,
то их очередность определяется положением блока на странице – слева
направо, сверху вниз. Во избежание логических ошибок, вызванных перемещением
блоков, рекомендуется всегда задавать разные порядки выполнения для
блоков, расположенных на одной странице.
Поток данных осуществляется исключительно за счет проведения связей
между входами и выходами функциональных блоков.
Страница
Для удобства представления Программа делится на Страницы.
Страница имеет порядковый номер (свойство Номер),
который влияет на порядок выполнения блоков (поток данных) и может иметь другие свойства (Комментарии, Размер листа).
Страницы можно копировать, переносить в другую программу и удалять
(соответствующие команды выбираются в контекстном меню при перетаскивании
страницы в дереве). При удалении страницы все блоки, находящиеся на
ней, также удаляются.
В дереве проекта страница отображается со своим номером и названием,
которое задается в свойстве Комментарии.
Графически страница выглядит как две области:
Рабочая область содержит функциональные блоки.
Все манипуляции с функциональными блоками (перемещение, создание,
удаление, копирование, проведение связей) проводятся здесь. Команды
редактирования доступны из контекстного меню блоков и пустого пространства
страницы (по нажатию правой кнопки мыши).
Поля – область, содержащая информацию о входах
и выходах блоков, которые находятся на других страницах и связаны
с входами и выходами блоков данной страницы.
Вход или выход на поле обозначается следующим образом:
Для того, чтобы быстро найти вход или выход, указанный на поле,
следует щелкнуть по нему левой кнопкой мыши (для правого поля может
понадобиться выбрать один из входов из списка). После этого в текущем
рабочем окне появится страница, которой принадлежит данный вход или
выход.
Размер страницы можно поменять при помощи свойства Размер
листа, однако следует учитывать, что слишком большая страница,
на которой размещено много блоков, может долго открываться.
Масштаб каждой открытой страницы можно менять при помощи колеса
мыши при нажатом Ctrl. Масштаб открытых страниц меняется относительно
общего масштаба всего приложения, который задается комбинациями Ctrl + и Ctrl -.
Для перемещения по странице можно использовать ползунки справа
– перемещение вверх-вниз и снизу – влево-вправо. Также можно использовать
колесо мыши – перемещение вверх-вниз и Shift + колесо мыши
– перемещение влево-вправо.
Функциональный блок
Функциональный блок представляет из себя элементарный
алгоритм. Программа в среде Полигон состоит только из функциональных
блоков, входы и выходы которых связаны между собой связями.
Типы функциональных блоков описаны в библиотеках (файлы с расширением .ll2) и реализованы как классы C++. Информацию о работе блока можно получить из справки библиотеки,
выделив блок и нажав F1.
Графическое отображение функционального блока на странице несет
информацию об его свойствах и свойствах его входов и выходов.
Основные свойства функционального блока и его входов/выходов
Свойство
Описание
Имя
блока
Любая строка,
удобная для навигации по проекту
Порядок
выполнения
Положительное
целое число, которое задает очередность выполнения блока на странице
(поток данных). Для корректного выполнения программы рекомендуется
не использовать одинаковые порядки выполнения для блоков на одной
странице
Тип
блока
Имя типа
функционального блока, тип блока выбирается при создании и не может
быть изменен в процессе работы
Имя
входа
Строка,
уникальная для данного типа блока (может содержать число – индекс
в массиве, в случае циклических входов)
Тип
входа
Сокращенное
имя типа данных входа
Константа
Выражение,
формат которого зависит от типа входа. Константа задается на входе,
не связанном ни с каким выходом и определяет значение входа при выполнении
программы. Полигон не ограничивает возможные форматы констант.
Если константа будет задана неправильно (например, на входе типа flt (float) будет задана строковая константа "s"), при трансляции
возникнет ошибка
Имя
выхода
Строка,
уникальная для данного типа блока (может содержать число – индекс
в массиве, в случае циклических выходов)
Тип
выхода
Сокращенное
имя типа данных выхода
Связи
Связи между
входами и выходами блоков на одной странице или между блоками, расположенных
на разных страницах
Комментарии
Комментарии,
относящиеся к входам/выходам. Комментарии отображаются в дереве проекта
Свойства блока и его входов/выходов можно менять в окне Свойства. Для изменения имени, порядка выполнения, констант на входах и комментариев
достаточно дважды нажать мышкой на соответствующем параметре блока
в представлении Страница и ввести новое значение.
Входы
Входы функционального блока могут быть следующих типов:
Циклические – входы, количество которых может
изменяться. Входы добавляются командой Создать в контекстном
меню блока.
Циклические группы – входы, объединенные в группы,
количество которых может изменяться (аналогично циклическим входам).
Группа соответствует структуре в C++.
Нециклические – входы, количество которых определяется
исключительно типом функционального блока и не изменяется.
По отношению к возможности проведения связи входы делятся на следующие
типы (задается свойством входа Тип связей):
Обычный вход – вход, на котором можно (необязательно)
задать константу или провести связь (свойство Тип связей = 0).
Константный вход – вход, на котором требуется
задать константу и нельзя провести связь (Тип связей = 1).
Необязательный вход – вход, на котором можно
(необязательно) провести связь и нельзя задать константу. При отсутствии
связи вход не используется в программе. Данный вход обычно обозначается
символом # в поле констант и имеет свойство Тип
связей = 2.
Обязательный вход – вход, на котором следует
провести связь и нельзя задать константу. Если на вход данного типа
не будет проведена связь, то при трансляции будет выдана ошибка. Данный
вход обозначается обычно символами ??? в поле констант
и имеет свойство Тип связей = 3.
Выходы
Выходы функционального блока могут быть двух типов:
Циклические – выходы, количество которых может
изменяться. Выходы добавляются командой Создать в контекстном
меню блока. Количество циклических выходов может зависеть от количества
входов: при изменении количества входов меняется и количество выходов,
и наоборот.
Нециклические – обычные выходы, количество которых
нельзя изменить.
Связи
Для того чтобы провести Связь, следует щелкнуть левой
кнопкой мыши на входе или выходе ФБ и, не отпуская левую кнопку мыши,
подвести указатель к другому входу или выходу ФБ. При отпускании левой
кнопки мыши связь будет проведена.
При создании связи между блоками, находящимися на разных страницах,
следует открыть эти страницы в рабочих окнах и провести связь. На
каждой странице будут проведены связи, соответственно, в левое и правое
поле.
При проведении связи учитываются типы данных входа и выхода, и,
если типы оказываются несовместимы (нет соответствующего блока преобразования
типов), выдается сообщение об ошибке и связь не проводится. Невозможно
проведение связи на константный вход.
Часть алгоритма, повторяющаяся в проекте несколько раз, может быть
выделена в новый Составной функциональный блок. Обычно
это упрощает отладку и модификацию этой части алгоритма, а также уменьшает
время трансляции проекта. Составной блок при трансляции превращается
в класс.
Подробно о создании составного блока см. в разделе.
Интерфейс
Окна
В среде Полигон существует два вида окон – Окна представления и Системные окна.
Окна представления предназначены для редактирования
и отладки проекта и их нельзя вынести поверх других окон в среде.
Системные окна предназначены для работы со средой
разработки: подключения к контроллеру, управления проектами и библиотеками,
поиска по проекту и т. д. Системные окна можно как встраивать рядом
с окнами представления, так и выносить поверх них.
Отображение
значений входов/выходов в виде графических элементов
Новое окно представления можно добавить следующими способами:
Открыть меню Окна/Новое окно. Выбрать расположение
нового окна относительно открытых окон – в окне Выберите место
для нового окна отображается прямоугольниками серого цвета.
Выбрать тип нового окна из списка.
Выбрать тип нового окна на панели Представления. Выбрать положение нового окна относительно открытых окон. Панель Представления добавляется через меню Окна/Панели
инструментов/Представления.
Панели инструментов для работы с окнами представления
Для работы с окнами представления используются следующие панели,
которые можно добавить или убрать с помощью установки или снятия флагов
в меню Окна/Панели инструментов:
Инструменты – панель основных инструментов для
работы с окнами представления.
Отменить
последнее действие (программа сохраняет в памяти 10 последних
действий)
Навигация – панель, обеспечивающая навигацию
по окнам.
Элементы панели Навигация
Элемент
Пиктограмма
Функция
Текущее
окно
Сделать
окно текущим. При установке данное окно становится рабочим – в нем
будут отображаться страницы при двойном нажатии в Дереве и при нажатии на полях страниц
Списки
выбора
В соответствии
с типом окна
Отобразить
список типов окон представления
Назад
и Вперед
Открыть
предыдущую или последующую открытую страницу
Путь
Путь до
страницы в дереве проекта (для окон типа Страница)
Представления
Список типов
окон представления. При смене окна его тип выбирается в этом выпадающем
списке
Проекты
Список добавленных
проектов и библиотек
На
уровень вверх или Сброс
Переместиться
на уровень вверх или переместиться на верхний уровень (для окон типа Дерево)
Предыдущая
или Следующая страница
Открыть
предыдущий или следующий элемент в дереве в окнах типа Страница, Составной блок, Функциональный блок, Редактор, Таблица
Вид – панель, определяющая взаимное расположение
окон.
Элементы панели Вид
Элемент
Пиктограмма
Функция
Обновление
Обновить
вид окна
Вертикальное
размещение
Разместить
окна вертикально
Горизонтальное
размещение
Разместить
окна горизонтально
Вкладки
Разместить
окна по вкладкам. При открытии нового окна появляется вариант поместить
его как вкладку
Фиксировать
Закрепить
текущее окно. В закрепленное окно нельзя отобразить другие окна (пиктограмма Текущее окно пропадает). Это полезно, например, для окон
типа Дерево, в которых всегда отображается структура
проекта
Редактирование – панель для окон типов Страница и Экран отладчика для добавления графических
элементов: стрелка, фон, текст (подробнее см. в разделе).
Элементы панели Редактирование
Элемент
Пиктограмма
Функция
Стрелка
Разместить
стрелку
Фон
Разместить
фон
Текст
Разместить
текст
Дерево
С помощью окна представления Дерево можно перемещаться
по проектам и библиотекам. Переключение между проектами и библиотеками
происходит в выпадающем списке в верхнем меню окна.
В окне Дерево отображается структура выбранного проекта
и есть раскрывающиеся списки на модулях, местах работы, программах,
страницах, функциональных блоках и библиотеках.
В окне Дерево можно редактировать проект – создавать,
удалять, копировать части проекта и библиотек (см. раздел).
Страница
Окно представления Страница предназначено для отображения
страницы с функциональными блоками.
В данном окне представления можно редактировать алгоритм: создавать
функциональные блоки, проводить/удалять связи между блоками, задавать
константы у входов, а также писать комментарии.
В режиме отладки на
странице отображаются онлайн значения входов/выходов.
Основные свойства страницы:
Комментарии – название страницы в дереве;
Номер – номер в дереве, данное свойство определяет
порядок выполнения программы (поток данных);
Размер листа – от А4 до А0 (по
умолчанию установлен А4).
При нажатии Shift над страницей у курсора мыши появляется
крест из линий.
Окно Составной блок
Окно представления Составной блок показывает содержание
составного блока с алгоритмом, написанным на функциональных блоках.
Входы и выходы внутренних блоков, которые входят в составной блок,
отображаются на полях страницы. Внешние входы и выходы составного
блока выделены желтым цветом. Подробно о создании составного блока
см. в разделе
Функциональный блок
В окне представления Функциональный блок показаны
названия, имена входов/выходов и типы входов/выходов функционального
блока.
Для отображения и редактирования файлов-ссылок в проекте предназначено
окно представления Редактор.
Окно Редактор открывается автоматически при двойном
щелчке на файле в дереве проекта.
В окне Редактор пишется программный код при создании
составного функционального блока. Подробнее о создании составного
ФБ см. в разделе.
Местоположение файла на диске указано в левом нижнем углу окна.
Так как файлы хранятся отдельно, то для их редактирования можно пользоваться
сторонним редактором. По умолчанию файлы хранятся в той же папке,
где расположен проект/библиотека.
Таблица
Окно представления Таблица отображает информацию
о функциональных блоках, их входах/выходах и свойствах в табличном
виде. При представлении данных в виде таблицы удобно редактировать
свойства, смотреть комментарии, уставки и значения, измененные во
время отладки.
Нажатием правой кнопки мыши по верхнему меню таблицы можно настроить
отображение нужных столбцов. Также по каждому столбцу можно установить
фильтр, нажав на стрелку вниз на интересующем столбце.
График
Окно представления График позволяет просматривать
значения на входах и выходах функциональных блоков в графическом представлении
во время отладки (подробнее см. в разделе).
Для того, чтобы вход или выход отображался на графике, следует
перетащить его ЛКМ со страницы с зажатым Ctrl в верхнюю часть
окна График. Модуль добавленноговхода или выхода автоматически станет текущим для графика.
Для текущего Модуля можно добавлять входы/выходы на
график из дерева с помощью перетаскивания по одному.
Для того, чтобы на графике отображалась группа входов или выходов,
следует добавить их в Раздел.
Для создания Раздела нужно нажать на модуль ПКМ и
нажать Создать. В появившемся окне необходимо выбрать
пункт раздел и ввести имя нового раздела.
Входы и выходы проекта добавляются в Раздел путем перетаскивания
из дерева или со страницы (с зажатым Ctrl). В выпадающем меню
при перетаскивании входа или выхода в раздел следует выбрать Добавить.
Для отображения входов и выходов раздела на графике следует перетащить
раздел из дерева проекта в верхнюю часть окна График – данный Раздел автоматически станет текущим для графика.
Для текущего Раздела в таблицу графика автоматически
добавляются входы/выходы из этого раздела. Если добавить новый вход
или выход проекта в таблицу графика, он автоматически добавится в
раздел.
Выбор свойств входов/выходов, которые будут отображаться в столбцах
таблицы графика, открывается нажатием ПКМ по заголовку таблицы.
Свойства для отображения в таблице графика
Свойство
Описание
Значение
онлайн
Текущее
значение входа/выхода
Маркер
Значение
входа/выхода в момент, отмеченный маркером
График:
минимум шкалы
Минимум
индивидуальной шкалы входа/выхода
График:
максимум шкалы
Максимум
индивидуальной шкалы входа/выхода
Цвет
Цвет графика
сигнала и его индивидуальной шкалы
Получено
Количество
полученных значений
Ошибок
Количество
ошибок
Зона
нечувствительности
Если модуль
разницы между значениями сигналов меньше данной величины, то будет
считаться, что значение не изменилось
Период
опроса (мс)
Количество
миллисекунд между опросами
Размер
очереди
Количество
значений, которые могут быть накоплены перед отправкой (при недостаточном
размере очереди можно наблюдать появление ошибок)
Свойства Получено и Ошибок отображают
количество полученных значений данного сигнала и количество ошибок,
которые сигнализируют о переполнении очереди.
Значения остальных свойств можно задать вручную (двойным щелчком
на соответствующей ячейке таблицы или в окне свойств входа или выхода),
иначе они будут браться из окна общих настроек, расположенного под
графиком.
Если нажать ПКМ на строке таблицы, соответствующей входу/выходу,
то вызывается контекстное меню, которое позволяет:
Скрыть или Показать вход или выход
на графике;
Скрыть ось или Показать ось для
входа или выхода;
Удалить вход или выход из таблицы.
Настройки графика
Свойство
Описание
Длительность
данных (сек)
Количество
данных, которое нужно хранить
Показывать
(сек)
Количество
данных, которое нужно показывать на окне
Период
отправки шкалы
Частота
отправки значений сигналов контроллером на график (отправка происходит
не чаще этого времени)
Очищать
данные
Удалять
старые данные с графика при запуске
Общая
ось (Y)
Используется
для отображения данных на общей оси
Маркеры
1, 2
Вертикальные
прямые, с помощью которых можно просмотреть значение на графике в
нужный момент времени
Делать
отсчеты
· в фоне – по окончании периода отсчета будет посылаться одно
текущее значение с каждого входа/выхода,
· в таймере – по окончании периода отсчета для каждого входа/выхода будут
посылаться значения, накопленные с заданным таймерным промежутком,
· произвольно – значения накапливаются с заданным
периодом, Период и Размер очереди устанавливается
справа. Эти значения применяются для всех входов/выходов, у которых
не установлены свои значения.
Для просмотра текущих значений входов/выходов на графике следует
нажать кнопку Запустить (запуск проекта на контроллере
описан в разделе). Для остановки отрисовки графика следует нажать Остановить.
Примечание
Для корректной работы графика необходимо синхронизировать
системное время контроллера с браузером через web-конфигуратор (Система/Время/Системное время – Синхронизировать
с браузером).
График подключается к запущенному проекту как клиент по протоколу OPCUA. По умолчанию график оформляет подписку
на данные проекта с дискретностью фонового цикла.
Для получения данных из таймера в проекте должен быть создан функциональный
блок OpcUAServerTimer из библиотеки paOpcUA. Блок следует создать в Таймере для работы подписок
с точностью таймерного цикла (период отображения данных задается свойством
модуля Таймерный промежуток в мс).
Масштабировать график можно с помощью колеса мыши с зажатым Ctrl на области оси. При выделении ЛКМ области слева направо
и сверху вниз график увеличивается.
Перемещаться по графику влево/вправо и вверх/вниз можно с помощью
мыши с зажатой ЛКМ на соответствующей оси графика.
Нажав правой кнопкой мыши в окне тренда, можно сбросить масштаб,
либо выбрать следующий, предыдущий или исходный масштаб.
Также можно выбрать режим Отображение на разных полотнах.
Нажатие правой кнопкой мыши по оси Х или У открывает их свойства.
Также кнопки свойств осей можно отобразить, нажав на кнопку с ползунками
в левой нижней части графика.
В свойствах оси Х можно выбрать тип тренда, временное ограничение
буфера данных, параметры оси.
В свойствах оси Y можно выбрать границы отображаемого интервала
данных.
С помощью кнопки Экспорт можно выгрузить график на
диск в форматах .txt, .pdf или .png.
Внимание
Путь сохранения не должен содержать кириллицу
и пробелы.
Экран отладчика
Окно представления Экран отладчика позволяет просматривать
и изменять значения на входах и выходах функциональных блоков во время
отладки (подробнее об отладке см. в разделе).
Экран отладчика соответствует определенному Разделу. Входы и выходы, которые нужно отобразить на экране, следует добавить
в этот раздел.
Для создания Раздела нужно нажать на модуль ПКМ и
нажать Создать. В появившемся окне необходимо выбрать
пункт раздел и ввести имя нового раздела.
Для того, чтобы добавить необходимые входы/выходы в раздел экрана,
следует выделить интересующий вход/выход на странице, зажав Ctrl, перетащить его в раздел, выбрать Добавить – данный вход/выход появится в разделе. Также входы/выходы можно
перетащить на экран из дерева или страницы, тогда они автоматически
добавятся в текущий раздел.
Для открытия экрана отладчика необходимо в окнах представления
в верхнем меню выбрать Экран отладчика, сделать окно
активным и дважды нажать на необходимый раздел в дереве, либо перетащить
раздел на активную страницу.
Входы и выходы раздела можно отобразить следующими типами графических
элементов:
Типы графических элементов
Свойство
Класс отображения
Описание
Кнопка
импульсная
pushbutton
При нажатии,
если на входе не 0, сначала посылает 0, затем 1, затем 0
Кнопка
togglebutton
При нажатии
посылает 1, при отжатии – 0
Слайдер
slider
Отображает
значения в диапазоне от минимума до максимума, для входа – позволяет
редактировать значение
Шкала
dial
Аналогично слайдеру отображает значения в диапазоне от минимума до
максимума, для входа - позволяет редактировать значение
Значение
value
Отображает
значение целым или вещественным числом
Лампа
lamp
При нулевом
или отрицательном значении светится красным цветом, при положительном
– светится зеленым (цвета лампы можно поменять в окне
свойств)
Один вход или выход в проекте может соответствовать только одному
графическому элементу на экране.
При добавлении входа или выхода в раздел экрана ему по умолчанию
присваивается класс отображения в соответствии с правилом:
если это логический вход – кнопка, иначе – слайдер
если это логический выход – лампа, иначе – значение.
Класс отображения можно поменять в окне свойств. Для этого следует:
Открыть свойства интересующего графического элемента.
Добавить свойство Экран: класс отображения из
нижнего выпадающего списка.
Установить в свойстве нужное значение класса отображения.
Если нажать ЛКМ на графический элемент на экране отладчика дважды,
то на странице в текущем окне отображается соответствующий вход или
выход.
Для удаления графического элемента нужно нажать на него ПКМ, открыть
контекстное меню и выбрать команду Удалить. Эта команда
также удаляет вход или выход из раздела, открытого в качестве экрана.
На экран отладчика также можно добавить элементы панели Редактирование: стрелку, фон, текст.
Масштабирование экрана отладчика выполняется с помощью колеса мыши
с зажатым Ctrl.
В режиме работы отладчика для изменения значения на входе нужно
дважды щелкнуть на соответствующем элементе и отредактировать значение.
Это доступно для графических элементов: значение, слайдер и шкала.
Свойства графических элементов экрана отладчика
Свойство
Описание
Комментарии
Отображается
в качестве комментария около входа/выхода, в дереве, над графическим
элементом
Номер
Определяет
порядок отображения в дереве, начиная с 0
Экран:
класс отображения
Выбор типа
графического элемента
Экран:
разрешить изменения
Разрешает
редактировать значение во время отладки для графических элементов значение, слайдер, шкала
Экран:
x и Экран: y
Координаты
элемента
Экран:
min и Экран: max
Задают диапазон
изменения (минимальное и максимальное значения) для графических элементов слайдер, шкала
Экран:
шаг
Задает шаг
шкалы для слайдера и шкалы
Экран:
радиус скругления
Задает радиус
скругления для лампы
Экран:
цвет_1 и Экран: цвет_2
Задают цвет
графического элемента лампа во «включенном» и «выключенном»
состояниях
Экран:
ширина элемента и Экран: высота элемента
Задают ширину
и высоту графического элемента
Экран:
отключить надписи
Убирает
отображение свойства Комментарии над графическим элементом
Системные окна добавляются из меню Окна или с помощью
панели Окна, которую можно открыть из меню Окна/Панели инструментов/Окна.
Системные окна можно размещать на экране несколькими способами:
как отдельные окна представления;
выносить поверх открытых окон представления;
в виде вкладок.
Контроллер
Инструменты для загрузки и запуска программ на контроллере находятся
в окне Контроллер.
Подробно о способах загрузки проекта на контроллер см. в разделе.
Подключение к контроллеру для загрузки и запуска проекта осуществляется
по протоколу SSH.
При установке флага Параметры модуля – настройки
подключения и путь к исполняемому файлу проекта подгружаются из соответствующих
свойств модуля, выбираемого из выпадающего списка. При убранном флаге Параметры модуля настройки подключения и путь к исполняемому
файлу можно задать вручную.
При успешном подключении к контроллеру в консольном окне будут
отображаться результаты выполнения команд.
Кнопкой Загрузить выполняется загрузка проекта в
контроллер.
Кнопками Запустить модуль и Остановить модуль выполняется, соответственно, запуск и останов работы загруженного
приложения на контроллере.
Кнопкой Закрыть сессию выполняется отключение от
ПЛК.
Прогресс
Для отслеживания процесса выполнения используется окно Прогресс.
При трансляции в окне Прогресс отображается ход выполнения,
при наличии ошибок они указываются с описанием.
По итогу трансляции можно видеть результат – сообщение об успешности
выполнения и время выполнения.
Для добавления в среду ссылок на проекты и библиотеки используется
окно Проекты.
В окне Проекты с помощью соответствующих кнопок можно
открыть существующие проект и/или библиотеку, создать новые, закрыть
(для этой функции также можно использовать значок «х» закрытия
справа от проекта/библиотеки в списке).
В списке указывается путь до добавленных проекта и/или библиотеки
на диске.
В окне История изменений можно получить информацию
по логам выбранного проекта и/или библиотеки.
Через окно Проекты можно сохранить копию проекта
под другим названием с помощью кнопки Сохранить как…, а также создать зашифрованную версию проекта (подробнее о защите
проекта см. в разделе).
Настройки сборки
Для настроек сборок используется окно Настройки сборки.
В окне Настройки сборки указаны пути к установленным
сборкам. Настройки сборки устанавливаются инсталлятором, пользователю
остается убедиться в их наличии.
Поиск
Для поиска по проекту используется окно Поиск.
В окне Поиск выбирается проект и задаются критерии
поиска. Для быстрого поиска можно добавлять условия.
Справка
Для получения информации по среде разработки или по работе и назначению
входов/выходов функционального блока из библиотеки используется окно Справка (горячая клавиша F1).
В верхнем выпадающем списке окна Справка можно выбрать
интересующий раздел справки – среду разработки или конкретную библиотеку.
В нижнем выпадающем списке можно выбрать отображение: содержание
раздела, поиск по разделу или указатель на ключевые слова раздела.
Открыть справку на конкретный функциональный блок в проекте можно,
выбрав его в дереве (в проекте или в библиотеке) или непосредственно
на странице проекта и нажав F1. Еще можно выбрать Справка в выпадающем контекстном меню при нажатии ПКМ на блоке.
При создании составных функциональных блоков и/или пользовательских
библиотек можно создавать для них справку. Подробнее см. в разделе.
О программе
Для получения сведений о программе, версиях библиотек и наличии
обновлений предназначено системное окно О программе.
Во вкладке окна О программе можно получить информацию
о текущих установленных версиях среды Полигон и библиотек.
При нажатии кнопки Лицензионная информация открывается
окно со сведениями о системных лицензиях, которые используются в среде
разработки библиотек.
Во вкладке окна Обновления при нажатии Проверить проверяется наличие обновлений. Требуется подключение к серверу pa.ru.
После нажатия кнопки Установить программа установит
найденные обновления и выполнит перезагрузку среды.
При установке флага Показывать тестовые версии в
списке обновлений также будут доступны тестовые релизы среды и библиотек.
При установке флага Показывать старые версии будут
показаны доступные для установки прошлые версии релизов среды и библиотек.
В нижней части окна выбирается распаковщик – unzip или 7zip.
Подробно обновление среды и/или библиотек описано в разделе.
В левом нижнем углу окна расположена кнопка Удалить бэкапы. В новом окне можно выбрать бэкапы (резервные копии проекта)
для удаления. При превышении общего объема бэкапов в 500 Мб в окне выводится предупреждающее сообщение.
При запуске среды также выводится окно с предложением удалить бэкапы.
Печать
Для печати страниц проекта используется окно Печать.
В окне выбирается нужный проект.
При нажатии на кнопку Сведения добавляются данные
для титульного листа и штампов.
В Настройках можно выбрать печати и вариант печати
– на бумажном носителе или в файл.
При выборе печати в файл, результат сохраняется в рабочую папку
проекта.
Окно Свойства
Окно Свойства элемента можно открыть, вызвав контекстное
меню правой кнопкой мыши и выбрав Свойства. Или можно
нажать соответствующую пиктограмму на панели Инструменты.
Окно свойств можно как разместить среди окон представления, так
и вынести над ними.
В списке указываются выбранные свойства элемента. Серым цветом
отображаются свойства, недоступные для изменения пользователем.
Снизу в двух выпадающих списках выбираются новые свойства для добавления.
В первом списке расположены основные свойства, такие как Комментарии, Номер, Порядок и т.д. Во втором
списке приведены дополнительные и специфические свойства для элементов.
Для ускорения поиска в выпадающем списке можно набрать первую букву
искомого свойства. Нажатием кнопки Добавить новое свойство
появляется в списке свойств элемента, для сохранения необходимо задать
ему значение.
Нажатием кнопки Сохранить новые свойства вступают
в силу. Нажатием кнопки Отмена можно отменить последние
действия – добавление, удаление или изменение свойства.
Для удаления свойства нужно нажать на него ПКМ и выбрать Удалить свойство.
Включенный флаг Привязать к родителю позволяет задать
свойство текущего узла только внутри текущего родителя.
Например, если вход добавлен в несколько разделов, то можно раскрыть
в дереве конкретный раздел, выбрать этот вход и добавить ему свойство
с флагом Привязать к родителю, тогда в других разделах
у данного входа этого свойства не появится. Такое же свойство у входов
в других разделах можно задать отдельно и тоже с флагом Привязать
к родителю.
Этим способом можно добавить вход в несколько OPC UA-клиентов
и в каждом задать свое свойство Зона нечувствительности.
В свойства можно добавить пользовательские свойства Пользовательское
свойство 00,..., 20. Их использование полезно,
например, в свойствах модуля для сохранения дополнительных IP адресов
и обращения к ним по SQL-запросам.
Пример запроса пользовательского свойства Пользовательское
свойство 00 (prop_0):
<sql SELECT value FROM blocks_prop WHERE indx=:module AND type="prop_0"</sql>.
Конфигурация экрана
Расположение окон, а также ссылки на открытые проекты и библиотеки
сохраняются в файле на диске и восстанавливаются при следующем запуске
среды Полигон как файл конфигурации с расширением .ini. Можно создавать разные конфигурации
рабочего экрана и сохранять их через меню Экран.
Настройки приложения
В окне Экран/Настройки можно изменять некоторые свойства
навигации, трансляции и другие пользовательские настройки. Например,
в данном окне можно настроить время сохранения бэкапов или отключить
сохранение бэкапов совсем.
Редактирование проекта
Создание нового проекта
Новый проект можно создать двумя способами:
Выбрать пункт меню Проект/Создать.
Перейти в Окно/Проекты и нажать кнопку Создать.
В открывшемся окне следует выбрать место для сохранения и ввести
имя нового проекта. В имени можно использовать только латинские буквы,
символ «_» и цифры. Каждый новый проект рекомендуется размещать в
отдельной папке, поскольку внутри нее среда разработки создает временные
файлы при трансляции и копии проекта (бэкапы).
Внимание
Путь к файлам проекта не должен содержать кириллицу и пробелы.
Далее следует выбрать шаблон создаваемого проекта – Пустой проект или Модуль с отладчиком для контроллера. Рекомендуется всегда создавать проект с отладчиком для контроллера,
чтобы не настраивать его подключение вручную.
Внимание
Для создания модуля с отладчиком для контроллера
обязательно наличие в среде ссылок на библиотеки paCore и paOpcUA. Подробнее о добавлении библиотек в среде
см. в разделе.
Отладчик среды Полигон подключается к запущенному
проекту как клиент 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>
Подробнее об отладчике среды Полигон см. в разделе.
После выбора шаблона для модуля следует задать пароль для доступа
отладчика к запущенному проекту. Если необходимо, пароль можно поменять
в свойстве модуля Пароль admin. Изменение вступит в
силу после трансляции проекта.
После задания пароля среда выведет сообщение об успешном создании
проекта и предложит открыть его в окне представления типа Дерево.
Ссылку на созданный проект можно увидеть в окне Проекты. Для начала работы с созданным проектом необходимо открыть его
в представлениях типа Дерево и Страница.
Создание компонентов проекта
Создать компоненты проекта внутри существующих можно в представлении Дерево. Структура компонентов проекта описана в разделе.
Таким образом, внутри проекта создаются Модули. Внутри Модуля –Места работы и Разделы. Внутри Мест работы создаются Программы и т. д.
Для создания нового компонента в проекте следует:
Нажать ПКМ на модуле, месте работы (таймере или фоне), программе
и т. д.
В контекстном меню выбрать команду Создать.
Выбрать тип нового компонента и, если необходимо, ввести имя,
номер, количество.
Создание таймерного потока Ввод-вывод
По умолчанию в проекте добавлено два места работы – Таймер и Фон. Если необходимо, в проект можно добавить
второй таймерный поток – Ввод-вывод.
Ввод-вывод – таймерный поток, полностью аналогичный
месту работы Таймер, но с более высоким приоритетом
выполнения.
Внимание
Таймерный поток Ввод-вывод прерывает
поток Таймер на время своего выполнения, поэтому время
выполнения Таймера увеличивается.
Для добавления места работы Ввод-вывод следует в
контекстном меню модуля нажать Создать и выбрать ввод-вывод.
Основное свойство Таймера и Ввода-вывода – Таймерный промежуток – время, через которое
повторно вызывается программа.
Необходимо соизмерять размер программ (количество функциональных
блоков), которые находятся в месте работы ввод-вывод, со временем
таймерного цикла. При недостаточном интервале таймерного цикла может
возникнуть ошибка времени исполнения – Time Out. Данная ошибка
повлечет за собой остановку программы (отслеживать реальное время
выполнения можно с помощью функционального блока SysInfo).
Создание места работы Поток
По умолчанию в проекте добавлено два места работы – Таймер и Фон. В проект также можно добавить несколько
мест работы, которые выполняются в фоновых потоках – Потоки.
Поток представляет собой бесконечный цикл с возможностью
периодического выполнения. Поток уходит в простой после
каждого цикла. Время простоя по умолчанию равно значению Таймерного
промежутка места работы Таймер. Другое значение
можно назначить на входе блока ThreadMan из библиотеки paCore, раздел Системные.
Для добавления Потока следует в контекстном меню
модуля нажать Создать и выбрать поток.
Свойства мест работы Фон и Поток:
Приоритет фонового потока - число, задающее приоритет
потока в системе. Чем выше это значение, тем более приоритетным является
поток. Место работы приостанавливает выполнение менее приоритетных
потоков, пока наиболее приоритетный поток не завершит свой цикл. Максимальное
значение приоритета определяется операционной системой (например,
для ОС Linux на ПЛК Овен –47). Актуальное значение максимально возможного
приоритета можно посмотреть в отладчике на выходе блока ThreadMan из библиотеки paCore, раздел Системные;
Периодичность работы фонового потока (мс) – время
в мс, задающее периодичность выполнения программ потока (только для
места работы Поток). Время выполнения потока не контролируется.
Если поток не успевает получить управление в соответствии с заданной
периодичностью, то выполнение программы не прерывается (в этом отличие
от места работы Таймер и Входы). Если
свойство не задано, то поток переходит к следующему циклу сразу после
завершения предыдущего (после обязательного простоя);
Привязка фонового потока к ядру – для многоядерных
процессоров задает номер ядра (от 0), к которому системе следует
привязать поток. Если свойство не задано, то ядро выбирается системой
автоматически.
Создание функционального блока
Функциональные блоки создаются внутри страниц. Для
создания функционального блока есть несколько способов:
Открыть нужную страницу в активном окне, нажать ПКМ на свободном
месте и выбрать Создать.
Нажать на пиктограмму Создать на панели Инструменты открытой страницы.
Открыть контекстное меню страницы в представлении Дерево и нажать Создать.
После выбора команды Создать откроется окно создания
функционального блока.
Вверху окна в поле Имя можно ввести имя нового функционального
блока, которое будет отображаться сверху над блоком и в дереве проекта
как комментарий. Если оставить данное поле пустым, то имя блока будет
задано автоматически по шаблону b<индекс блока>.
В поле Количество можно указать необходимое количество
блоков выбранного типа для создания. По умолчанию создается один блок
выбранного типа.
Для создания блока следует:
В левом поле окна выбрать библиотеку, функциональный блок из
которой планируется создать.
В поле посередине появится список разделов выбранной библиотеки,
внутри разделов – списки функциональных блоков. Следует выбрать нужный
блок.
При выделении блока в правой части окна отобразится его справка.
Справку на блок, созданный на странице, также можно открыть, нажав
на него ПКМ и выбрав Справка.
После выделения нужного блока нажать ОК – новый
блок появится на странице.
В поле снизу списка функциональных блоков можно ввести имя нужного
функционального блока для поиска по разделам библиотеки.
Также можно создать ФБ на странице путем перетаскивания его из
дерева библиотеки. Для этого следует:
Открыть в представлении Дерево нужную библиотеку.
Выбрать функциональный блок.
Перетащить блок на открытую страницу.
При отпускании мыши появится контекстное меню, в котором следует
выбрать Создать.
Некоторые ФБ можно разместить только в таймерном потоке или в фоне
(определяется свойством Может работать только в…), при
попытке разместить такой блок не в указанном месте работы появится
окно соответствующей ошибки.
Создание циклических входов/выходов и групп входов/выходов
Многие блоки в проекте могут иметь разное количество входов и выходов.
Такие входы и выходы блока, а также группы входов и выходов, называются
циклическими (см. раздел).
Для того, чтобы добавить входы/выходы у блока, необходимо выделить
его ПКМ и выбрать команду Создать. В появившемся окне
следует ввести необходимое Количество добавляемых входов/выходов
и нажать ОК.
Для удаления лишних входов/выходов можно выделить их с зажатым Shift и выполнить: ПКМ – Удалить.
Комментарии у входов/выходов блоков
Около входов/выходов ФБ можно оставлять комментарии. Добавить комментарий
входу/выходу можно двумя способами:
Выделить необходимый вход/выход, зайти через контекстное меню
в его Свойства, добавить свойство Комментарии, ввести необходимый комментарий, нажать Сохранить. Комментарий появится около входа.
Дважды нажать ЛКМ около интересующего входа/выхода – появится
строка ввода комментария, следует ввести комментарий, он отобразится
зеленым цветом.
Проведение связей
Для того, чтобы создать связь между входом и выходом функциональных
блоков на странице, следует нажать ЛКМ на входе или выходе и, не отпуская
левую кнопку мыши, подвести указатель к другому выходу или входу.
При отпускании левой кнопки мыши связь будет проведена.
Чтобы провести связь между блоками, которые находятся на разных
страницах, необходимо открыть эти страницы в рабочих окнах и провести
связь, как указано выше. На каждой странице появятся связи, уходящие
в соседнее поле. На полях страницы будет указан адрес, куда идет связь.
При создании связи учитываются типы данных входа и выхода. Если
типы оказываются несовместимы, выдается сообщение об ошибке и связь
не проводится. Нельзя создать связь с Константным входом.
Цвет связей отображает тип данных входа:
черный – булевое;
красный – целое;
синий – вещественное;
серый – строковое.
Для удаления связи нужно выделить правой кнопкой мыши вход, куда
приходит связь. Откроется меню, в котором нужно выбрать Удалить
связь.
Связь можно переносить с одного входа на другой. Для этого нужно
«схватить» связь на входе и, не отпуская, перенести ее на новый вход.
Связь можно проводить с входа/выхода на странице проекта к выходу/входу
в дереве. Для этого следует захватить интересующий вход/выход и, зажав Ctrl, перетащить его на выход/вход в дереве, к которому необходимо
провести связь. В появившемся меню выбрать Провести связь.
Аналогично можно провести связь с входа/выхода в дереве проекта
к выходу/входу на странице. Для этого вход/выход из дерева следует
захватить мышью и перетащить на выход/вход на странице. В появившемся
меню выбрать Провести связь.
Из «дерева в дерево» также можно провести связь: захватить нужный
вход/выход, перетащить его на выход/вход, к которому необходимо провести
связь – выбрать в меню Провести связь.
Примечание
При проведении связей следует помнить: если провести
связь от выхода к входу – комментарий выхода дублируется на вход.
Если проводить связь от входа к выходу – комментарий не дублируется.
Подробно о комментариях см. в разделе.
Для установления скрытой связи можно использовать Глобальные
константы. Для выхода, с которого будет идти связь, нужно
добавить свойства Полный алиас и Глобальная константа.
На входе, на который должна идти связь, следует щелкнуть ПКМ и
выбрать Задать константу. В открывшемся списке выбрать
нужную константу и нажать Установить.
Вид связи можно менять с помощью контекстного меню, которое вызывается
щелчком ПКМ на связи. При установке Ручное на связи
появляются точки, потянув за которые, можно придать связи любой вид.
При установке Авто связь приобретает автоматически определяемый
вид.
Проведение связей между модулями
При редактировании в проекте двух и более модулей можно проводить
связи между ними.
Обмен данными при проведении связей между модулями обеспечивается
по протоколу OPC UA.
Для проведения связи между модулями необходимо открыть страницы
модулей в рабочих окнах и провести связь.
В появившемся окне необходимо настроить связь между модулями. В
одном из модулей выбирается блок OPC UA-сервера, во втором
– блок OPC UA-клиента. После настройки связи необходимо нажать Провести связь между модулями.
В раздел Данные выбранного блока OPC UA-клиента
добавится вход с прописанным свойством ID источника/приемника, равным индексу входа или выхода в модуле, который был выбран
как OPC UA-сервер.
Задание порядка выполнения функциональных блоков на странице
Для задания очередности выполнения блоков на странице следует нажать
на свободном месте страницы ПКМ и выбрать Порядки.
В открывшемся окне можно выбрать следующие порядки:
Одинаковый порядок;
Порядок по возрастанию;
Порядок по потоку данных.
При выборе пункта Одинаковый порядок всем блокам
на странице будет присвоен порядок выполнения, указанный в поле справа.
При выборе пункта Порядок по возрастанию блокам будут
присвоены порядки от 5, начиная с верхнего левого угла, кратно 5. Чем левее и выше находится блок, тем меньший порядок выполнения
у него будет. Чем правее и ниже – тем больший порядок выполнения.
При выборе пункта По потоку данных очередность блоков
будет определена их связями друг с другом на текущей странице – если
с выхода блока идет связь на вход другого блока, то первый получит
меньший порядок исполнения.
Добавление стрелок, фона и текста на страницы
Для добавления комментариев и заметок на страницы проекта и экраны
отладчика предусмотрены элементы стрелка, фон и текст. Добавить их на страницу можно с панели
инструментов Редактирование.
Для добавления панели следует в меню Окнв/Панели инструментов поставить флаг Редактирование.
Вверху активной страницы появится панель, на которой можно выбрать
элементы для редактирования: стрелка, фон, текст. В свойствах созданных элементов можно менять
их координаты, задавать размеры и цвет.
Добавление входов и выходов в разделы
В компонент проекта Раздел можно добавлять входы/выходы
со страниц программ для отображения на экране отладчика, для вывода
на график, для передачи сигналов OPC UA-клиенту и др.
Для добавления входа или выхода в раздел следует выделить нужный
вход или выход и, зажав клавишу Ctrl и левую кнопку мыши, перетащить
его на нужный раздел в дереве проекта и выбрать Добавить в контекстном меню.
Можно добавить сразу несколько входов/выходов одного блока в раздел.
Для этого следует выделять их с зажатой клавишей Shift.
После добавления в раздел вход или выход блока окрасится в желтый
цвет. Если нажать на него ПКМ и выбрать в меню Принадлежит, то в списке отображается функциональный блок и разделы, к которым
принадлежит этот вход или выход.
При двойном щелчке ЛКМ по строке списка откроется расположение
входа или выхода в дереве.
Навигация по проекту
Для навигации по проекту можно воспользоваться панелью Навигация, которая добавляется установкой флага Навигация в меню Окна/Панели инструментов.
Подробно панели инструментов окон представления описаны в разделе.
При нажатии на кнопку Списки выбора на панели отображается
поле, в выпадающем меню которого можно выбрать соответствующее окно
представления для активной страницы.
С помощью кнопок Назад и Вперед можно
перемещаться между ранее открытыми страницами. Кнопки Предыдущая
страница и Следующая страница производят переключение
в той последовательности, как страницы расположены в проекте (сверху-вниз).
Еще можно перемещаться по полям страниц – если щелкнуть ЛКМ на
адрес связи, то в активное окно отобразится соответствующая страница.
Для того, чтобы открыть нужную страницу в активном окне, нужно
либо два раза нажать ЛКМ на страницу в дереве, либо перетащить страницу
из дерева в это окно и нажать Показать.
Копирование частей проекта
Для копирования части проекта следует выделить нужную часть при
помощи мыши (для выделения нескольких частей – зажав Shift)
и нажать Копировать на панели инструментов. Также можно
воспользоваться комбинацией Ctrl + c.
Далее перейти в нужное место проекта и нажать на панели инструментов Вставить. Также выполнить вставку можно через контекстное
меню, которое открывается при нажатии ПКМ на компоненте дерева, или
сочетанием клавиш Ctrl + v.
Расположение компонентов и связи, которые были внутри вставляемой
части, сохранятся.
Также копировать части проекта можно перетаскиванием. Для этого
нужно «схватить» мышью требуемую часть проекта и перетащить в новое
место. В открывшемся меню выбрать команду Копировать (если выбрать Перенести, то часть проекта удалится
из начального места).
Копировать компоненты возможно не только внутри одного проекта,
но и в разных.
При копировании модулей, мест работы, программ, функциональных
блоков, графических элементов имена объектов изменяются автоматически
в соответствии со следующими правилами:
Имя вида b<индекс блока> присваивается при
создании блоков, для которых не задано пользовательское имя. При копировании
в имени нового блока отобразится его индекс.
Кастомные имена могут быть заданы пользователем или сформированы
при генерации блоков из MS Excel. Переименование таких блоков
зависит от наличия порядкового номера в имени.
Если имя без цифр в конце, то добавится суффикс «_» и номер
вида 01 (дополнение до двух цифр).
Если в имени есть номер в конце, то при копировании блока номер
меняется, определяя формат по количеству «лишних» нулей в начале числа.
Для генерации порядкового номера производится поиск всех нумерованных
имен, которые начинаются так же, как исходное, и добавляется номер
на 1 больше максимального из них. Если при копировании необходимо
сохранять номер в имени, то рекомендуется обеспечить окончание имени
нечисловым символом, например, знаком «_».
Автоматическое изменение имен блоков при копировании можно отключить
в окне Настройки приложения во вкладке Копирование.
Перенос блоков, страниц, программ
Для переноса блоков, страниц или программ нужно «схватить» их мышью
и перетащить в требуемое место. При отпускании выбрать Перенести.
Перенесенный функциональный блок, страница или программа, будут
удалены со старого места и вставлены в новое. Расположения компонентов
и связи будут сохранены.
Перенос компонентов возможен только в рамках одного проекта. Для
переноса блоков, страниц и программ из одного проекта в другой можно
использовать команды Копировать и Удалить.
Трансляция
Завершающим этапом создания проекта является Трансляция созданного алгоритма в исполняемый файл.
Трансляция проводится в два этапа. Графическое представление проекта
преобразуется в исходные тексты программы на C++. Эти файлы
с расширениями .срр и .hpp, хранятся в каталоге проекта
в папке с именем build_имя модуля_ОС. Они создаются
заново каждый раз при трансляции и их редактирование не имеет смысла.
На каждую программу проекта создается несколько файлов:
[имя программы].cpp – содержит вызовы алгоритмов
функциональных блоков в соответствии с порядком выполнения;
i_[индекс программы].cpp – содержит вызовы инициализации
функциональных блоков в соответствии с порядком выполнения;
n_[индекс программы].cpp и e_[индекс программы].cpp – содержат описания функциональных блоков.
Индекс функционального блока используется при трансляции как имя
объекта, отвечающего за работу этого блока. Класс объекта соответствует
типу функционального блока и описан в библиотеке функциональных блоков.
Созданные исходные тексты компилируются соответствующим компилятором C++ в зависимости от выбранной операционной системы. В результате
получается исполняемый файл, который необходимо загрузить на контроллер
и запустить.
Имя исполняемого файла для операционной системы Linux – имя
модуля.o, для Windows – имя модуля.exe.
Свойства модуля, используемые при трансляции
Свойство
Описание
IP
адрес
IP-адрес
контроллера
ОС
Тип операционной
системы для трансляции
Тип
процессорной платы
Тип процессорной
платы контроллера
Watchdog
Включить/выключить
сторожевой таймер (флаг). Отладку удобнее производить при выключенном
сторожевом таймере, при эксплуатации его необходимо включить
Автозапуск
Включить/выключить
автоматический запуск проекта на исполнение (флаг). При включении
на контроллер загружается файл autostart
Порт
отладчика
Порт OPC UA-сервера в программе, если отличается от стандартного 4840 (вход prt блока OpcUAServer)
Для того, чтобы выполнить трансляцию в Полигон, можно использовать
одну из команд контекстного меню (открывается нажатием ПКМ на модуле):
Транслировать все – трансляция всего модуля;
Перестроить – компиляция проекта без изменения
исходных текстов. Данную команду следует применять при трансляции
неизмененного проекта с новыми библиотеками.
При возникновении сомнений рекомендуется использовать команду Транслировать все. Для трансляции проекта также можно
использовать соответствующую кнопку на панели Инструменты.
Если ранее проект транслировался в данную папку, возникнет окно
подтверждения трансляции, следует выбрать – Да.
При трансляции в окне Прогресс (меню Окна/Прогресс) отображается ход выполнения, при наличии ошибок они указываются
с описанием.
По итогу трансляции можно видеть результат – сообщение об успешности
трансляции, время выполнения.
Примеры задания свойств модуля для трансляции под ПЛК210 и виртуальный
контроллер приведены в разделе.
Загрузка и запуск проекта
После трансляции проекта его следует загрузить на контроллер.
Для контроллеров ОВЕН загрузку и запуск проекта можно провести
следующими способами:
через Панель отладки;
через web-интерфейс конфигурации во вкладке ПЛК/Приложение;
через системное окно Контроллер.
Свойства модуля для загрузки проекта в ПЛК210
Проект в ПЛК210 загружается через протокол SSH.
Свойства модуля, используемые при трансляции под ПЛК210
Свойство
Описание
Значение
IP-адрес
IP-адрес
контроллера
К контроллеру
можно подключаться из среды через интерфейсы:
· USBDevice – 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.
Панель отладки
Для трансляции, загрузки и запуска проекта на контроллере в среде Полигон предназначена Панель отладки. Панель отладки
добавляется через меню Окна/Панели инструментов – Панель отладки.
Элементы панели отладки
Элемент
Пиктограмма
Функция
Модуль
Выбор модуля
для запуска
Индикатор
статуса
Отображает
статус запущенного проекта
Перезапустить
во временной сессии
Трансляция
модуля, загрузка исполняемого файла на контроллер и запуск на «переднем
плане»
Внимание
При закрытии среды разработки выполнение
программы на контроллере будет остановлено
Перезапустить
для постоянной работы
Трансляция
модуля, загрузка исполняемого файла на контроллер и запуск со свойством Автозапуск
Внимание
Для запуска программы
со свойством Автозапуск контроллер будет перезагружен
Запустить
на виртуальном контроллере
Трансляция
модуля и запуск локально на ПК. Отладчик подключается к запущенному
модулю, независимо от того, какие выбраны IP адрес и OC для трансляции. Подробнее см. в разделе
Для запуска проекта на контроллере через панель отладки следует:
В выпадающем списке на панели отладки выбрать Модуль (среди модулей проектов, открытых в данный момент в среде разработки).
Выполнить запуск модуля одним из способов:
Перезапустить во временной сессии – будет произведена
трансляция модуля, загрузка исполняемого файла на контроллер, запуск
его и подключение к нему отладчиком.
Внимание
При запуске
программы во временной сессии ее выполнение на контроллере будет прекращено
при закрытии среды разработки.
Перезапустить для постоянной работы – будет произведена
трансляция модуля со свойством Автозапуск, загрузка
исполняемого файла на контроллер, перезагрузка контроллера и последующее
подключение отладчика к запущенной программе.
Внимание
При загрузке нового проекта на контроллер перезапишется проект только
с таким же названием. Ненужные файлы проектов можно удалить через
web-конфигуратор контроллера (вкладка ПЛК/Приложение – Удаление…), через любой файловый менеджер или через
консоль.
После запуска программы станет активной кнопка остановки программы.
Если на контроллере уже была запущена программа, то при попытке
подключения к контроллеру появится предупреждающее окно с вопросом
об ее остановке.
Информацию о запущенной программе на контроллере можно посмотреть
в web-конфигураторе в разделе ПЛК/Информация.
Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Запуск проекта через web-интерфейс конфигурации
Инструменты для загрузки и запуска программы на контроллере через
web-интерфейс конфигурации находятся во вкладке ПЛК/Приложение. Для запуска программы следует:
Задать свойства модуля в соответствии с таблицей и транслировать
модуль – в папке build_имя модуля_LinuxOwen3 на диске появится исполняемый файл программы
для контроллера – имя модуля.o.
Зайти в web-конфигуратор контроллера и перейти во вкладку ПЛК/Приложение.
Нажать Загрузка приложения… и выбрать файл имя модуля.o.
Внимание
При
загрузке нового проекта на контроллер перезапишется проект только
с таким же названием. Ненужные файлы проектов можно удалить через
web-конфигуратор контроллера (вкладка ПЛК/Приложение – Удаление…), через любой файловый менеджер или через
консоль.
Нажать кнопку Запуск… напротив имя модуля.o.
Внимание
Для автоматического
запуска приложения при перезагрузке контроллера следует установить
для него Автозапуск (кнопка Установить Автозапуск…). Для корректного останова приложения из web-конфигуратора следует
снять для него Автозапуск.
После запуска программы станет активной кнопка остановки программы.
Внимание
Для корректной остановки программы через web-конфигуратор
следует снять Автозапуск.
Информацию о запущенной программе на контроллере можно посмотреть
в web-конфигураторе в разделе ПЛК/Информация.
Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Запуск проекта через окно Контроллер
Для загрузки и запуска проекта на контроллере через системное окно Контроллер следует:
Задать свойства модуля в соответствии с таблицей и транслировать
модуль.
Открыть окно Контроллер через меню Окна/Контроллер.
В выпадающем списке выбрать модуль, который будет загружен
в контроллер.
Кнопкой Соединить выполнить подключение к контроллеру
по SSH.
Кнопкой Загрузить выполнить загрузку проекта
в контроллер.
Внимание
При загрузке нового проекта
на контроллер перезапишется проект только с таким же названием. Ненужные
файлы проектов можно удалить через web-конфигуратор контроллера (вкладка ПЛК/Приложение – Удаление…), через любой
файловый менеджер или через консоль.
Подключится к запущенному проекту отладчиком среды через панель Инструменты.
После запуска программы станет активной кнопка остановки программы
– Остановить модуль.
Внимание
Через окно Контроллер проект запускается
в foreground, поэтому при закрытии сессии проект на контроллере
перестанет выполняться. Для старта проекта в background следует
установить Автозапуск, повторно транслировать модуль,
загрузить в ПЛК, выполнить перезагрузку ПЛК по питанию или команду reboot из терминала. Проект запустится автоматически после
загрузки ПЛК. Аналогично можно запустить проект для постоянной работы
через Панель отладки или web-конфигуратор ПЛК.
Информацию о запущенной программе на контроллере можно посмотреть
в web-конфигураторе в разделе ПЛК/Информация.
Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
Запуск проекта на виртуальном контроллере
Запустить проект на виртуальном контроллере можно с помощью Панели отладки (см. раздел). Для этого следует:
Добавить панель отладки через меню Окна/Панели инструментов
– Панель отладки.
В выпадающем списке на панели отладки выбрать Модуль (среди модулей проектов, открытых в данный момент в среде разработки).
Выполнить запуск модуля на виртуальном контроллере кнопкой Запустить на виртуальном контроллере – в новом окне запустится
приложение виртуального контроллера, к нему подключится отладчик среды.
После запуска программы станет активной кнопка остановки программы.
Запустить виртуальный контроллер можно вручную. Для этого следует:
Установить свойства модуля в соответствии с таблицей:
Свойства модуля, используемые при трансляции на ПК
Свойство
Описание
Значение для ОС Windows
Значение
для ОС Linux
IP-адрес
Локальный
IP-адрес
127.0.0.1
Подключаться
через
Протокол
для подключения к контроллеру
Не используется
SSH
ОС
Тип операционной
системы для трансляции
Windows
Astra Linux
SE1.7
Тип
процессорной платы
Тип процессорной
платы
ПК
Порт
отладчика
Порт OPC UA-сервера для доступа отладчика Полигон
По умолчанию 4840
По умолчанию 4850
Запускать
с ключами
Используется
для игнорирования блоков из библиотеки paOwenIO
-I
Недостающие свойства можно добавить из выпадающего списка добавления
новых свойств внизу окна. Работа с окном Свойства подробно
описана в разделе.
Транслировать модуль:
для ПК с ОС Windows – запустить исполняемый файл имямодуля.exe из папки build_имямодуля_WINmingw;
для ПК с ОС Linux – запустить исполняемый файл имямодуля.o изпапки build_имямодуля_LinuxAstra17.
Подключиться к запущенному приложению отладчиком среды через
панель Инструменты.
Внимание
Ограничение на работу виртуального контроллера
составляет 1 час. Виртуальный контроллер работает неограниченное
время, если у пользователя есть USB-ключ. По вопросу приобретения
USB-ключа обращаться на почту polygon@pa.ru.
Отладка проекта
Для отладки программы в Полигон существует возможность просмотра
текущих значений на входах/выходах функциональных блоков. Для этого
необходимо запустить программу на контроллере и выбрать команду Отладчик на панели Инструменты.
При первом подключении отладчиком к запущенному проекту запрашивается
пароль, указанный при создании проекта.
В режиме отладки Полигон запрашивает у контроллера значения
входов и выходов блоков, которые расположены на страницах, открытых
в рабочих окнах, и отображает полученные значения на экране.
Обмен данными осуществляется по протоколу 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-серверу контроллера в качестве
клиента (аналогично отладчику) с добавленными в него данными.
Примечание
Для корректной работы графика необходимо синхронизировать
системное время контроллера с браузером через web-конфигуратор (Система/Время/Системное время – Синхронизировать
с браузером).
Экран отладчика
В режиме отладки текущие значения можно просматривать и изменять
на Экране отладчика.
Входы/выходы, которые нужно отобразить на экране, необходимо добавить
в соответствующий Раздел. Их также можно перетащить
на экран из дерева или страницы, тогда они автоматически добавятся
в текущий раздел. Входу или выходу автоматически присваивается класс
отображения следующим образом:
если это логический вход – кнопка, иначе – слайдер;
если это логический выход – лампа, иначе – значение.
Класс отображения можно поменять в окне свойств.
Подробнее о работе с экраном отладчика и свойствах элементов см.
в разделе.
В режиме работы отладчика для того, чтобы изменить значения на
входе, нужно дважды щелкнуть ЛКМ на соответствующем элементе и отредактировать
значение. Это работает для графических элементов значение, слайдер и шкала.
Информация о запущенном проекте
В режиме отладки можно получить различную информацию о запущенной
программе.
При наведении курсора на запущенный модуль в дереве всплывает тултип
с информацией о проекте: идентификатор модуля, версия проекта, дата
трансляции, пользователь и имя компьютера, с которого была выполнена
трансляция проекта.
Информацию о запущенном приложении на контроллере также можно посмотреть
в web-конфигураторе в разделе ПЛК/Информация.
Внимание
Для обновления информации в разделе ПЛК/Информация в запущенном проекте должен быть добавлен блок OwenHWInfo из библиотеки paOwenIO.
При нажатии правой кнопкой мышки на запущенном модуле в дереве
и выборе в открывшемся меню Показать все в окне трансляции
(системное окно Прогресс) можно увидеть данные по версиям
библиотек.
Также при трансляции в папке build_имя модуля_ОС создается
файл versions.txt, в котором
показаны идентификатор проекта, название модуля, дата и время трансляции,
версии библиотек.
Если добавить в свойства модуля свойство Показывать время
выполнения, то можно отслеживать время выполнения мест работы
и программ модуля. После трансляции и запуска проекта в дереве будут
отображаться времена выполнения программ модуля.
Получить время выполнения мест работы в программе также можно с
помощью ФБ SysInfo.
Возможности пользовательской конфигурации
Создание составного блока
Часть алгоритма, повторяющаяся в проекте несколько раз, может быть
выделена в новый Составной функциональный блок. Обычно
это упрощает отладку и модификацию этой части алгоритма, а также уменьшает
время трансляции проекта. Составной блок при трансляции превращается
в класс. Составные блоки можно создавать как в пользовательских проектах,
так и в пользовательских библиотеках.
О защите пользовательского составного блока подробнее можно прочитать
в разделе.
Для того, чтобы создать составной функциональный блок в проекте, следует создать Группу типов в узле Библиотеки в дереве проекта.
Внимание
Имя Группы типов должно содержать
только латинские буквы, цифры и «_». Если оставить поле ввода
имени пустым, то оно будет назначено автоматически по шаблону b<индекс>.
Для того чтобы создать функциональный блок в пользовательской
библиотеке следует открыть необходимую библиотеку в представлении Дерево и создать в ней Группу типов с любым
именем.
О создании пользовательской библиотеки подробнее можно прочитать
в разделе.
Теперь в новой группе типов следует создать Тип.
При создании типа указывается Имя типа – имя класса,
который будет создан при трансляции.
Внимание
Имя типа должно быть уникально
в проекте и может содержать только латинские буквы, цифры и «_». Если оставить поле ввода имени пустым, то оно будет назначено автоматически
по шаблону b<индекс>.
На данном этапе был создан класс (Тип) нового функционального
блока. Теперь можно реализовать алгоритм, который будет выполняться
экземплярами класса функционального блока в проекте.
Создание составного блока из функциональных блоков
В проекте можно создать составной функциональный блок с алгоритмом,
составленным из функциональных блоков. Пример – блок, возвращающий
значение линейной функции y = kx + b. Для создания составного
блока следует:
Страницы в Тип можно скопировать из проекта. Если необходимо, чтобы связи между
блоками на разных страницах сохранились, копировать страницы следует
вместе, выделив их в дереве с зажатым Shift.
Создать на новой странице блоки Mul и Add из библиотеки paCore и соединить их, как показано
на рисунке ниже.
Назначить внутренние входы/выходы блоков как внешние входы/выходы
составного блока.
Для этого следует в контекстном меню нужного
входа/выхода выбрать команду Сделать внешним – вход/выход
станет одновременно принадлежать и внутреннему блоку, и Типу. Входы/выходы внутренних блоков, назначенные внешними, подкрасятся
желтым и на Странице, и в Дереве.
Примечание
Рекомендуется входы/выходы составного блока, которые
необходимо назначить внешними, выводить на терминальные блоки (типа Trans). Терминальные блоки повторяют значения своих входов на выходах.
Таким образом, если возникнет необходимость изменить компоненты составного
блока, когда он уже будет добавлен в проект, не потребуется повторно
выполнять проведение связей.
Транслировать проект для проверки корректности созданного типа.
После сообщения об успешной трансляции (Трансляция завершена) экземпляры нового типа можно создавать на страницах проекта.
Создать экземпляр составного блока в проекте можно двумя способами:
Перетащить блок из Дерева проекта или библиотеки
на Страницу проекта и выбрать Создать в
контекстном меню.
На пустом месте Страницы щелкнуть ПКМ – Создать и выбрать необходимый блок в разделе Библиотека
проекта, нажать ОК.
На графическом отображении составных блоков на страницах проекта
изображается знак #, что означает, что данный блок –
составной.
В дереве проекта или библиотеки Тип, экземпляр которого
был создан на странице проекта, подсветится желтым.
Создание составного блока на C++
В проекте можно создать составной функциональный блок с алгоритмом,
написанным на C++. Пример – блок RS-триггера с приоритетом
по сбросу. Для создания составного блока с алгоритмом на C++ следует:
Создать внешние входы/выходы типа через контекстное меню Типа командой Создать. В появившемся окне
следует выбрать вход типа или выход типа и ввести Имя входа/выхода.
Внимание
Имя входа или выхода должно содержать только латинские
буквы, цифры и «_». Если оставить поле ввода имени пустым,
то оно будет назначено автоматически по шаблону b<индекс>.
Задать свойства добавленным входам/выходам.
Свойства входов/выходов типа
Свойство
Описание
Имя
Отображается
как имя входа/выхода блока
Имя
переменной
Переменная
класса, соответствующая этому входу/выходу. Имя должно быть уникальным
в пределах класса
Номер
Определяет
положение входа/выхода в дереве и в составном блоке
Комментарии
Отображается
у входа/выхода в дереве и у составного блока
Индекс
типа данных
Индекс типа
данных входа/выхода из раздела Библиотеки/Типы данных
Тип
связей
Для входов определяет правила, по которым разрешается проводить связи на данный
вход:
0 – можно провести связь или задать константу (переменная
– указатель);
1 – связь проводить нельзя, вход константный
(переменная – не указатель);
2 – нельзя задать константу,
можно провести связь, но она не обязательна (при отсутствии связи
на вход будет передан 0, переменная – указатель);
3 – нельзя задать константу, можно провести связь, и она обязательна
(при отсутствии связи при трансляции будет выдана ошибка, переменная
– указатель)
Указатель
Для выходов:
Установлен флаг – признак того, что переменная является
указателем;
Не установлен флаг – обычный выход
Примечание
По умолчанию добавляемые выходы не являются указателями,
если необходимо соответствующее свойство можно добавить в разделе Свойства.
Для того, чтобы задать тип данных входа/выхода, следует:
Найти нужный тип данных в разделе Библиотеки/Типы данных. В данном примере – тип данных b (bool).
Открыть свойства b.
Скопировать значение свойства Индекс.
Примечание
Свойство Индекс типов данных
в разделе Библиотеки/Типы данных может различаться в
разных проектах.
Подставить скопированное значение в свойство Индекс типа
данных нужного входа или выхода.
При правильной подстановке
индекса типа данных в свойствах входа или выхода появится Имя
типа, соответствующее указанному типу. Если в разделе Библиотеки/Типы данных нет подходящего типа данных, его
можно скопировать из основной библиотеки.
Задать таким же способом Индекс типа данных для
всех созданных входов/выходов типа.
Установить свойство входов Тип связей = 0.
После создания внешних входов и выходов типа можно приступить
к реализации алгоритма работы блока.
Для того, чтобы написать
блок на C++, следует добавить в Тип текстовые
файлы. Для создания алгоритмов на C++ используются следующие
расширения файлов:
.work – вызывается из функции Work каждый
цикл выполнения программы;
.init – вызывается из функции InitInp один
раз при инициализации;
.hpp – включается внутрь описания класса, это могут
быть объявления дополнительных переменных и функций;
.cpp – включается в .cpp-файл класса – реализация
дополнительных функций, добавление библиотек.
Для создания блока необходимо добавить как минимум один файл
с расширением .work.
Для реализации RS-триггера
понадобится создать файлы с расширениями .work для написания
логики работы триггера и .hpp для того, чтобы хранить
значение выхода во внутренней памяти блока. Нужно добавить текстовый
файл в Тип.
Выполнить команду Создать в контекстном меню
типа.
Выбрать файл и задать ему имя и расширение.
Для редактирования
текстовых файлов в Полигон предназначено окно типа Редактор, которое открывается автоматически при двойном щелчке на текстовом
файле в дереве проекта.
Если файла на диске не существует, то
он будет создан при нажатии кнопки Сохранить. По умолчанию
файлы хранятся в той же папке, где расположен проект или библиотека.
Прописать в файле logic_rs.work логику работы RS-триггера.
Нажать Сохранить.
В файле store.hpp объявить переменную
для хранения значения триггера.
Нажать Сохранить.
Транслировать проект для проверки корректности созданного типа.
После сообщения об успешной трансляции (Трансляция завершена) экземпляры нового типа можно создавать на страницах проекта.
Создать экземпляр составного блока в проекте можно двумя способами:
Перетащить блок из Дерева проекта или библиотеки
на Страницу проекта и выбрать Создать в
контекстном меню.
На пустом месте Страницы щелкнуть ПКМ – Создать и выбрать необходимый блок в разделе Библиотека
проекта, нажать ОК.
На графическом отображении
составных блоков на страницах проекта изображается знак #, что означает, что данный блок – составной.
В дереве проекта или библиотеки Тип, экземпляр которого
был создан на странице проекта, подсветится желтым.
Создание составных блоков с переменным числом входов/выходов
на C++
Одно из важных преимуществ создания пользовательских составных
блоков на C++ – возможность создавать блоки с переменным
количеством входов/выходов.
Для того, чтобы создать входы/выходы переменного количества в блоке,
следует создать Массив в Типе.
В Массиве следует создать либо входы, либо выходы, но не вместе. Возможны два варианта:
Простой массив состоит из одного входа или выхода. Имя переменной входа/выхода определяется именем массива.
Например, если массив имеет Имя – arr, то Имя переменной его входа/выхода – arr[%1]. Простой массив соответствует циклическим входам
или выходам.
Массив структур состоит из нескольких входов
или выходов. Имя структуры задается свойством Имя типа. Имя переменной входа/выхода определяется именем массива
и именем переменной внутри структуры, например, arr[%1].in. Массив структур соответствует циклическим группам входов или выходов.
Имена переменных внутри массива заполняются автоматически,
если перед добавлением входов/выходов правильно задать свойство Имя типа.
Массивы входов и выходов можно объединить так, чтобы при создании
входа (или группы входов) у блока автоматически создавался связанный
с ним выход (или группа выходов).
Для этого следует обоим массивам входов и выходов задать одинаковое
значение свойства Принадлежит к группе, например, 1.
Например, можно создать блок логического НЕ с переменным
числом входов/выходов. Для этого следует:
Создать в Типе два массива, первый – массив входов,
второй – массив выходов.
В свойствах обоих массивов добавить свойство Принадлежит
к группе = 1.
Создать вход типа в массиве входов, создать выход типа в массиве выходов.
В свойствах входа и выхода добавить свойство Индекс типа
данных и скопировать в него значение Индекса типа данных b из раздела Библиотеки/Типы данных аналогично разделу.
Добавить в Тип файл .work, в котором
расписать логику работы блока.
Транслировать проект для проверки корректности созданного типа.
После сообщения об успешной трансляции (Трансляция завершена) экземпляры нового типа можно создавать на страницах проекта.
Создать экземпляр блока в проекте. Создание экземпляра блока
на странице проекта описано в разделе.
Создать у блока дополнительные входы – одновременно с входами
добавится соответствующее количество выходов.
Доступ к системной информации из кода составного блока на C++
Доступ к системной информации можно получить из статических функций
класса runtimeInfo:
runtimeInfo::nsAbsTime() возвращает значение uint64_t, которое равно количеству наносекунд, прошедших от 01.01.1970. Это значение можно использовать как абсолютное время в UTC, например, для меток времени. Не стоит использовать значение uint64_t при измерениях интервалов, потому что его может изменять NTP-клиент. Обновляется в потоке Таймер, если он
один, или в потоке Ввод-вывод, один раз за цикл.
runtimeInfo::nsMonotonic() возвращает значение uint64_t равномерно меняющегося счетчика в наносекундах. Не редактируется NTP-клиентом и при изменении системного времени, поэтому значение
можно использовать для измерения интервалов, превышающих таймерный
цикл.
runtimeInfo::timerCycle() возвращает значение типа float, равное циклу таймерного потока, в котором выполняется
блок, в миллисекундах. Если блок выполняется в фоновом потоке,
то значение не определено.
runtimeInfo::cpuCoresNum() возвращает количество ядер
процессора (тип uint16_t).
Свойства типов составных блоков и их входов/выходов
Для удобства отображения в дереве проекта или библиотеки Типу можно задать свойство Имя – это имя, которое
отображается в дереве проекта или библиотеки.
Еще одно полезное свойство Типа – Может работать
только в…. Его можно добавить из нижнего выпадающего списка
в окне Свойства. Данное свойство определяет, в каком Месте работы можно создать экземпляр блока данного типа.
При попытке создать блок в другом Месте работы появится
окно ошибки.
Основные свойства внешних входов/выходов составного блока:
Имя – отображается как имя входа/выхода блока;
Номер – определяет положение входа/выхода в дереве
и в составном блоке;
Комментарии – отображается у входа/выхода в дереве
и у составного блока.
При изменении свойства Номер внешнего входа или выхода Типа появится сообщение Обновить блоки типа…– применить изменение ко всем экземплярам блока данного типав проекте.
Если необходимо изменить свойства Имя и/или Комментарии внешних входов/выходов, то для применения изменений
следует пересоздать блок на странице проекта.
Создание справки для составных блоков
Для составных блоков пользователь может добавлять собственное описание.
Для создания справки следует:
В контекстном меню Типа выбрать команду Описание.
В текущем окне отобразится окно Редактора. В
папке проекта (если тип создан в проекте, иначе в папке библиотеки)
автоматически создастся папка userHelp и в ней файл
с расширением .html и именем типа.
Добавить в файл описание блока.
В папке userHelp следует размещать все файлы, которые используются для создания
описаний для Типов данной Группы типов.
Если необходимо добавить картинки в описание, следует подготовить
изображения с расширением .png, имена которых начинаются с имени соответствующего
файла справки, и поместить их в папку userHelp.
Например, для описания my_block2.html следует добавить файлы изображений с названиями my_block2_1.png, my_block2_2.png и т.д.
Для того, чтобы вызвать описание блока, можно выделить Тип в дереве и выполнить команду Справка в контекстном
меню (или нажать горячую клавишу F1). В нижней части окна Справка отобразится созданное описание блока, картинки
автоматически появятся в начале описания.
Создание библиотеки
Пользователь может создать библиотеку самостоятельно.
Для каждой новой библиотеки рекомендуется заводить отдельную папку.
Внимание
Путь к файлам библиотек не должен содержать кириллицу
и пробелы.
Для создания библиотеки следует:
Перейти в окно Проекты и нажать Создать.
В открывшемся окне перейти в папку, где будет создана библиотека,
ввести имя новой библиотеки, в выпадающем списке выбрать тип Библиотека Полигон 2 (*.ll2) и
нажать Создать.
Для работы с библиотекой следует открыть ее в представлении Дерево. Среда при создании библиотеки сразу предложит
открыть ее в дереве – следует нажать Да.
Созданная библиотека отобразится в окне Проекты.
Для создания
блоков в библиотеки следует добавить в нее типы данных. По умолчанию раздел Типы данных в библиотеке пустой.
Его следует скопировать из основной библиотеки paCore. Для добавления в библиотеку типов данных следует:
Открыть библиотеку paCoreв соседнем
окне типа Дерево.
Открыть раздел Типы данных в paCore, выделить первый тип данных раздела и с зажатым Shift выделить последний тип данных раздела.
С помощью команд Ctrl + c и Ctrl + v выполнить копирование типов данных в раздел Типы данных новой библиотеки.
Теперь в библиотеке
можно создавать пользовательские составные блоки, копируя индексы
типов данных для входов и выходов из раздела Типы данных библиотеки.
После создания необходимого числа блоков библиотеку
следует транслировать:
В окне Экран/Настройки выбрать ОС для трансляции
библиотек.
Внимание
Библиотеку следует транслировать
для всех ОС, в которых ее планируется использовать.
Выполнить Транслировать все на панели Инструменты окна библиотеки.
В папке библиотеки создастся папка build и в
ней папка с файлами трансляции для выбранной ОС:
Windows для Windows;
AstraLinuxSE 1.7 для Astra Linux SE 1.7;
Linux Овен прошивка 3.х для ОС
ПЛК210.
Теперь новую библиотеку можно использовать в проектах.
Создание справки для библиотек
Примечание
Возможность создания полноценной справки для библиотеки
есть только при работе на ПК с ОС Windows. При работе на ПК с ОС Linux
см. создание справки для отдельных блоков в разделе.
Чтобы создать справку для библиотеки, следует:
Скопировать папку help с шаблонами (из папки Polygon2) в папку библиотеки, для которой будет создаваться
справка.
В папке 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 – описание блока.
Отредактировать переименованные файлы. Рекомендуется пользоваться
редактором Notepad++ для удобства.
Редактирование файла 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.
В результате должно получиться следующее содержание my_lib.qhp:
Редактирование файла my_lib.qhcp: заменить paControls на my_lib.
Редактирование файла my_lib.bat:
Заменить paControls на my_lib;
Убедиться, что указан правильный путь к qhelpgenerator.exe. Например, E:\Polygon2\qhelpgenerator.exe.
Редактирование файла my_lib.html:
В файле описывается работа блока с форматированием текста с
помощью HTML-кода;
Можно задать используемые стили (шрифт, тип, размер) в контейнерах,
в которых в дальнейшем заключается текст;
Другие возможности: блочная верстка страницы, подключение метаданных,
форматирование, вставка изображений и т.д.
В папку images следует поместить картинки .png, .gif к описанию блока. Стандартно имена задаются
именем блока и цифрой. В примере используется my_block.png.
Запустить файл my_block.bat. Будут созданы файлы .qch и .qhc.
В папке библиотеки будут созданы файлы справки: my_lib.qch и my_lib.qhc.
Эти файлы используются справкой Полигон для отображения
описания блоков библиотеки. Они должны передаваться вместе с ней,
когда исходные файлы в папке help остаются у разработчиков
библиотеки.
Пример получившейся справки приведен на рисунке ниже.
Внимание
Возможные ошибки при запуске .bat-файла:
Указан неверный путь к файлу генератора – в файле .bat следует указать прямой путь к qhelpgenerator.exe или
создать переменную среды %DirQtInstall%;
Библиотека qminimal.dll неверной версии – следует
обратиться к разработчику за верным файлом;
Если название проекта в <namespace> задано
кириллицей то поменять на латинские символы;
Файл .qhc не получилось обновить – сейчас файл используется
приложением Полигон, следует закрыть его и повторить операцию;
Справка создалась, можно самостоятельно в дереве справки выбрать
описание блока, но оно не вызывается на блоке командой F1 –
в разделе ключевых слов файла .qhp не указано точное имя типа
блока. Следует добавить эту строчку со ссылкой на описание блока.
Экспорт/импорт свойств из MS Excel
Полигон поддерживает выгрузку и загрузку свойств компонентов проекта
в виде таблицы MS Excel с помощью команд Экспорт/Импорт на панели Инструменты. Это может быть полезно для быстрого
массового редактирования свойств функциональных блоков и их входов/выходов.
С помощью команды Экспорт можно выгрузить свойства
компонентов Модуля, Места работы, Программы, Страницы, Раздела.
Сначала следует выделить экспортируемый компонент проекта, затем
выбрать команду Экспорт на панели Инструменты в дереве проекта.
Также можно выбрать команду Экспорт в контекстном
меню нужного компонента (нажать на компонент ПКМ).
Аналогично можно экспортировать и импортировать свойства функциональных
блоков и входов/выходов на открытой странице. Для этого следует нажать
кнопку Эскпорт на панели Инструменты.
После выполнения команды Экспорт откроется окно,
в котором следует:
Установить в графе тип файла MS Excel (*.xlsx) – справа в окне отобразится предпросмотр таблицы свойств страницы,
блоков и входов/выходов на этой странице.
Нажатием ПКМ на заголовке таблицы открыть контекстное меню,
в котором следует установить флаги на необходимых для экспорта свойствах
блоков и входов/выходов.
Ввести имя файла.
Выбрать его расположение на диске.
Нажать Сохранить.
Сохраненный файл следует открыть в программе MS Excel.
Примечание
При работе на ПК с ОС Linux для редактирования таблицы
можно использовать редактор ONLYOFFICE.
В таблице можно редактировать или назначать необходимые свойства
(например, имена блоков, комментарии, значения у входов, порядки и
т.д.).
Отредактированный файл следует сохранить на диске в формате MS Excel (*.xlsx).
Чтобы импортировать новые свойства, следует нажать кнопку Импорт на панели Инструменты и выбрать в открывшемся
окне сохраненный файл.
Новые свойства применятся к странице, блокам и входам/выходам на
этой странице.
Внимание
Место свойств в проекте определяется однозначно
уникальными свойствами Индекс (index) входов/выходов,
блоков и т.д., поэтому импорт можно произвести в любом месте проекта.
Изменения применятся только к свойствам тех элементов, которые были
экспортированы.
Генерация из MS Excel
Полигон поддерживает генерацию программ из MS Excel с помощью
команды Импорт.
Генерация из MS Excel в Полигон позволяет:
Добавлять программы, составные блоки и блоки из библиотек;
Изменять значения и свойства входов и выходов блоков;
Устанавливать связи между входами и выходами блоков.
Примечание
При работе на ПК с ОС Linux для редактирования таблиц
можно использовать редактор ONLYOFFICE.
Для генерации требуется .xlsx-файл определенного
формата.
На модуле следует нажать Импорт, указать файл и в
качестве типа файла выбрать Генерация из MS Excel (*.xlsx). Полигон проверяет начало названия листа и выполняет
соответствующий алгоритм импорта.
Листы файла .xlsx:
create – листы данного типа предназначены для
добавления программ и блоков;
io – предназначен для изменения значений, комментариев
и прочих свойств входов и выходов;
ii – предназначен для изменения значений на группах
входов;
links – предназначен для проведения связей.
Если при импорте будет обнаружена ошибка, то изменения не применяются
и происходит откат версии до начала импорта. Генерация оперирует с
именами блоков, поэтому они должны быть уникальны. Листы считываются
слева направо, поэтому вначале необходимо разместить листы типа create. Процесс импорта сопровождается сообщениями в окне Прогресс и завершается выдачей информации о количестве
добавляемых блоков, программ и т.п. Алгоритм импорта не выполняет
удаление блоков, программ, свойств и связей.
В итоговом файле для импорта не должны содержаться формулы, все
значения должны быть посчитаны.
Заголовок таблицы задается по определенным правилам. При несоответствии
импорт прекратится с выдачей предупреждения на указанный лист.
Заголовки таблицы create
Заголовок
Описание
Ограничения
blocktype
6 – для программ, 0 – для блоков
Любые другие
значения остановят импорт
name
Если необходимо
создать множество блоков, следует использовать спецсимвол «#» в названии.
bsup_## – bsup_00, bsup_01, …
decd_### – decd _000, decd _001, …
Имя может
состоять из букв латинского алфавита, цифр, символа «_» и спецсимвола
«#», другие символы не допускаются.
# – разрешен
только для блоков.
Нельзя создать несколько программ одной строчкой.
При использовании # ввод количества блоков в столбец n обязателен.
# могут располагаться только в конце
названия
typename
Имя блока
из библиотеки или имя составного блока из корня проекта
Обязательное
поле для блоков
parent
Имя родителя
в дереве. Для программ – место работы, для блоков – имя программы
Обязательное
поле для программ и блоков
n
Количество
блоков
Поле считывается
только при наличии # в названии
inp_n
Количество
циклических входов/выходов блока
Только для
блоков.
Если блок не имеет циклических входов/выходов, поле
должно быть пустым
Алгоритм импорта выполняется построчно сверху вниз до обнаружения
пустой ячейки. После пустой ячейки анализ прекращается, а следующие
столбцы можно использовать для комментирования.
Для программы: при наличии указанной программы в проекте
(независимо от места работы) программа не добавляется. В противном
случае проверяется наличие указанного места работы и добавляется программа.
Для блока: при наличии указанного количества блоков (независимо
от типа блоков и программы) блоки не добавляются. В противном случае
проверяется наличие указанной программы,и добавляются блоки, начиная
с 0 номера. Если в программе присутствует часть блоков, новые
блоки добавляются, начиная с последнего номера +1. Блоки вставляются
друг за другом. Если у блока много входов/выходов, используется формат А3.
Заголовок таблицы io предопределен частично (первые
три столбца), при несоответствии импорт прекратится с выдачей предупреждения
на указанный лист.
Заголовки таблицы io
Заголовок
Описание
Ограничения
type_io
0 – для входов, 1 – для выходов
Любые другие
значения остановят импорт
block
Имя блока
Если блок
не найден, импорт прекращается
name
Имя входа/выхода
Если вход/выход
у блока не найден, импорт прекращается
Остальные заголовки должны иметь название, совпадающее со свойствами
в программе Полигон. Если оставить ячейку пустой, соответствующее
свойство не будет добавлено/изменено.
Алгоритм импорта выполняется построчно сверху вниз до обнаружения
пустой строки. Столбцы, начиная с пустого, не анализируются.
Можно организовывать циклы и повторения в таком же формате, как
и links.
В данном примере строка 204 приведет к тому, что у всех
блоков prm4_00, prm4_01, … на всех выходах типа «o» выставятся одинаковые комментарии comment1 и алиас alias1.
Строки 206…214 будут использовать имя блока с предыдущей
строки.
Заголовок таблицы ii предопределен частично (первые
два столбца), при несоответствии импорт прекратится с выдачей предупреждения
на указанный лист.
Заголовки таблицы
Заголовок
Описание
Ограничения
block
Имя блока
Если блок
не найден, импорт прекращается
array
Номер входа
-
Остальные заголовки должны совпадать с началом имени входа блока.
В примере, указанном на рисунке выше, будут выполнены следующие действия:
Алгоритм работает не только на циклических входах, но нужно, чтобы <имя заголовка + номер входа> присутствовал у блока.
Если оставить ячейку пустой, соответствующее значение не будет
изменено.
Алгоритм импорта выполняется построчно сверху вниз до обнаружения
пустой ячейки. Столбцы, начиная с пустого, не анализируются.
Заголовок таблицы 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 пустым, то используется информация с прошлой строки с сохранением
позиции в цикле
-
Примеры задания циклических связей можно посмотреть в разделе Генерация из MSExcel в справке среды.
Создание серверного многопользовательского проекта
Многопользовательский проект может редактироваться несколькими
разработчиками одновременно. В этом случае проект представляет собой
базу данных PostgreSQL. Клиентом к серверной базе данных выступает
среда разработки Полигон.
Для создания нового многопользовательского проекта в среде разработки
следует:
Выполнить команду Создать в окне Проекты.
В списке типа проекта выбрать Полигон 2 многопользовательский
(*.pg2).
Определить местоположение файла проекта на диске. Рекомендуется
каждый проект размещать в отдельной папке.
Внимание
Полный путь к файлу проекта не должен содержать символов кириллицы
и пробелов.
Задать имя проекта. Имя проекта также определяет имя базы данных
на сервере PostgreSQL.
Внимание
Имя проекта должно
содержать только символы латинского алфавита, цифры и «_»,
начинаться с буквы.
В открывшемся окне ввести IP-адрес или имя компьютера и порт,
на котором работает сервер PostgreSQL.
Ввести имя пользователя и пароль.
Если база данных с таким именем уже существует, то будет установлено
соединение, если нет, то будет предложено ее создать.
Файл проекта с расширением .pg2 можно скопировать к другим
пользователям и открыть в среде разработки. Для этого следует:
Выполнить команду Открыть в меню Проекты.
В списке типа проекта выбрать Полигон2 многопользовательский
(*.pg2).
Найти на диске файл типа .pg2 и нажать Открыть.
Ввести имя пользователя и пароль.
Для корректной работы диагностики и логирования необходимо на каждой
клиентской машине использовать разных пользователей для подключения
к проекту.
Рекомендуется организовать работу над проектом таким образом, чтобы
пользователи редактировали разные Программы проекта.
Для этого следует создать структуру проекта, состоящую из Мест
работы и Программ, одним пользователем и затем
привлечь к работе остальных.
Когда один пользователь вносит изменения в проект, остальные этих
изменений не видят, пока он не сохранит проект на сервер. Остальным
пользователям видны узлы проекта, в которых изменения в данный момент
происходят, они подсвечиваются красным фоном в представлении Дерево. Для пользователя, который изменения вносит, они обозначаются
в Дереве курсивом. При наведении курсора мыши на подсвеченный
узел Дерева можно увидеть, какой именно пользователь
его редактирует.
Среда разработки не сохраняет изменения проекта на сервер автоматически,
однако если несохраненные изменения есть, то каждые 5 минут выдается предложение сохранить проект. Время сохранения можно изменить/отключить
в меню Экран/Настройки.
Кнопка Сохранить в панели инструментов показывает, что есть необходимость
сохранить изменения. Последние 60 действий можно отменить командой Отмена или комбинацией клавиш Ctrl + z, пока проект не сохранен
на сервер. Если очередь изменений переполнена, будет предложено ее
очистить или не выполнять последнюю операцию. После сохранения отмена
изменений невозможна, и они становятся видны остальным пользователям.
После каждого сохранения проекта на локальной машине также создается
копия проекта в виде sql dump для того, чтобы иметь
возможность при необходимости восстановить определенную версию проекта.
Файл с копией имеет такое же имя, как основной проект, плюс суффикс,
обозначающий версию проекта на момент создания (например, файл mnu_demo_27.pg2 содержит копию проекта mnu_demo версии 27). Для восстановления копии необходимо открыть
соответствующий файл проекта в среде разработки, тогда проект будет
развернут на сервер в новую базу данных (например, mnu_demo_27_pg2).
Рекомендуется не редактировать узлы проекта, подсвеченные в дереве
красным фоном, то есть те, в которых в данный момент вносят изменения
другие пользователи. Однако строгого запрета нет и некоторые изменения
возможны. Например, можно создавать новые программы, страницы и функциональные
блоки. Конфликты редактирования могут возникнуть, если попытаться
изменить свойство компонента, которое было изменено другим пользователем
и изменения еще не сохранены. Тогда последняя попытка будет отменена
с сообщением о блокировке другим пользователем.
Массовые операции, такие как импорт, генерация из MS Excel и копирование больших частей проекта рекомендуется проводить в момент
минимальной активности остальных пользователей.
Защита проекта
Шифрование однопользовательского проекта
Проект в среде разработки Полигон – это база данных Sqlite. Защитить проект можно с помощью создания зашифрованной версии.
Для этого следует:
В системном окне Проекты выделить интересующий
проект и нажать кнопку Сохранить как….
В появившемся окне выбрать расширение Полигон 2 с защитой(*.pp2).
Нажать Сохранить.
В окне Проекты отобразится защищенная копия проекта.
Пароли на составных блоках
В среде можно установить пароль на составной блок для защиты его
содержимого.
Для установки пароля следует:
Выбрать составной блок в дереве проекта.
Нажать ПКМ и выбрать в контекстном меню Установить пароль.
Примечание
Защита содержимого составного блока при
помощи пароля эффективна только тогда, когда файл проекта хранится
в защищенном формате.
Задать пароль в открывшемся окне – на иконке блока в дереве
отобразится знак «замка».
Если на составном блоке установлен пароль, то у данного блока не
удастся открыть его внутреннее содержание.
Для снятия пароля необходимо оставить пустым поле ввода.
Пароль отладчика. Управление пользователями
Для ограничения возможности доступа к проекту в свойствах модуля
следует задать свойство Пароль admin.
Чтобы изменение Пароль admin вступило в силу, следует
перетранслировать проект.
Если установлен Пароль admin, то при первом запуске
модуля будет выводиться окно с запросом пароля.
Окно с запросом пароля отладчика появляется только 1 раз. Если пароль введен неверно, то запуск отладчика будет выдавать
ошибку, а окно ввода пароля уже не появится.
Чтобы ввести корректный пароль, следует щелкнуть по модулю в дереве
ПКМ и выбрать команду Задать пароль, ввести пароль в
появившемся окне.
Также в среде есть возможность установить пароли для пользователей user1…user7. Итого 8 прав доступа
– 1admin и 7user. Их можно
использовать для ограничения доступа к данным проекта клиентам по
протоколу OPC UA. См. подробнее в документе Обмен с верхним уровнем. Библиотека paOpcUA.
paCore. Основная библиотека проекта
В данном разделе приведено описание основных блоков обязательной
в проекте библиотеки paCore. Описание соответствует
версии библиотеки– 979 и выше.
Двойное
целое значение со знаком. 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
Константы
Блоки Константа повторяют на выходе значение входа
– Real, Integer, Reg2 и др. из раздела Преобразователи типов. Блок
инициализируется константой на входе, не нулем.
Инициализация:
y = fi
Алгоритм:
y = fi
Терминальные блоки
Терминальные блоки повторяют на выходе значение входа
– TransFlt, TransInt, TransBit и др. Данные блоки удобно использовать в качестве сбора входных
и выходных параметров на одной странице программы. Блок инициализируется
константой на входе, не нулем.
Назначение входов и выходов:
l0,l1, …,ln – входные значения;
o0,o1, …,on – выходные значения.
Инициализация:
oi = li, где I = 0…n
Алгоритм:
oi = li, где I = 0…n
Для передачи массивов используются терминальные блоки Transi32A, TransFA, TransStor и др. Блок повторяет на выходе массив соответствующего
входа. Данные блоки удобно использовать в качестве сбора входных и
выходных параметров на одной странице программы. Блок инициализируется
массивом на входе, не нулем.
При использовании блока необходимо следить, чтобы его порядок выполнения
находился между порядками выполнения блоков, с которыми он соединен,
т. е. выполнялся после блоков, генерирующих входные массивы и перед
блоками, которые получают выходные массивы.
Назначение входов и выходов:
in0,in1, …,inn – входные массивы;
o0,o1, …,on – выходные массивы.
Инициализация:
oi = ini, где I = 0…n
Алгоритм:
oi = ini, где I = 0…n
Арифметические блоки
Сложение (Add)
Функция Add вычисляет сумму своих входов. Число входов
задается при создании функционального блока, и его можно изменить
в процессе редактирования программы. Аргументы являются вещественными
числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
f0,f1, …,fn – слагаемые;
sum– сумма.
Инициализация:
sum = 0
Алгоритм:
sum = f0 + f1 + … + fn
Целочисленное сложение (Addl)
Функциональный блок Addl производит целочисленное
сложение. Аргументы являются целыми числами. Если на вход подается
связь с выхода другого типа, то при выполнении программы происходит
преобразование типов. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
in0,in1, …,inn– слагаемые;
sum– сумма.
Инициализация:
sum = 0
Алгоритм:
sum = in0 + in1 + … + inn
Вычитание (Sub)
Функция Sub вычисляет разность двух аргументов. Аргументы
являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
f1 – уменьшаемое;
f2 – вычитаемое;
out– разность.
Инициализация:
out = 0
Алгоритм:
out = f1 - f2
Умножение (Mul)
Функция Mul вычисляет произведение своих входов.
Число входов задается при создании функционального блока, и может
быть изменено в процессе редактирования программы. Аргументы являются
вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
f0,f1, …,fn – множитель;
out– произведение множителей.
Инициализация:
out = 0
Алгоритм:
out = f1 ∙ f2 ∙…∙ fn
Деление (Div)
Функция Div вычисляет частное своих аргументов. Если
делитель равен нулю, то выставляется флаг ошибки, на выходе устанавливается 1. Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
f1 – делимое;
f2 – делитель;
out– частное от деления;
zf– флаг ошибки.
Инициализация:
out = 1;
zf = 0
Алгоритм:
Если f2 = 0 → zf = 1, out = 1,
иначе out = f1/f2, zf = 0
Целочисленное деление (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 – значение выхода в предыдущем цикле выполнения программы
Корень квадратный (Sqrt)
Функция Sqrt вычисляет корень квадратный своего аргумента.
Если аргумент отрицательный, то выставляется флаг ошибки, на выходе
корень квадратный из модуля аргумента. Аргумент является вещественным
числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in– аргумент;
out– значение корня квадратного от аргумента;
nf– флаг ошибки.
Инициализация:
out = 0;
zf = 0
Алгоритм:
Если in ≤ 0 → nf = 1, out = √(|in|),
иначе out = √in, nf = 0
Инверсия значения (Inv)
Функция Inv инвертирует знак входного значения. Аргумент
является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
in– аргумент;
out– инвертированный вход.
Инициализация:
out = 0
Алгоритм:
out = -in
Абсолютное значение (Abs)
Функция Abs определяет модуль и знак числа. Если
на вход подается отрицательное значение, то выставляется флаг знака.
Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in– аргумент;
out– модуль входа;
sf– флаг знака.
Инициализация:
out = 0,
sf = 0
Алгоритм:
out = |in|, sf – знак in,
если in > 0 → sf = 0,
иначе sf = 1
Минимальное/максимальное значение (MinMax)
Функция MinMax ищет минимальное и максимальное значения
среди набора входов. Число входов задается при создании функционального
блока, его можно изменить в процессе редактирования программы. Аргументы
являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in0,in1, …,inn – входы;
max – максимальное значение;
min – минимальное значение.
Инициализация:
max = 0,
min = 0
Алгоритм:
min = min (in0, in1, …, inn),
max = max (in0, in1, …, inn)
Селектор минимального/максимального значения (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 – индекс минимального значения
Сравнение (Cmpr)
Функция Cmpr сравнивает два входа. В зависимости
от их отношения выставляет флаги больше, меньше или равно. Аргументы
являются вещественными числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in1 – вход 1;
in2 – вход 2;
uf– флаг «больше»;
ef– флаг «равно»;
if– флаг «меньше».
Инициализация:
uf = 0,
ef = 0,
if = 0
Алгоритм:
Маскирование (Mask)
Функция Mask производит побитное умножение аргумента
на маску. Аргументы являются целыми числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
i1 – вход;
i2 – маска;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = i1 & i2
Сдвиг влево (Shrl)
Функция Shrl производит побитовый сдвиг влево числа i1 на i2 бит. Аргументы являются целыми
числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
i1 – вход;
i2 – величина сдвига;
out– выход.
Инициализация:
out = 0
Алгоритм:
out = i1 ≪ i2
Сдвиг вправо (Shrr)
Функция Shrr производит побитовый сдвиг вправо числа i1 на i2 бит. Аргументы являются целыми
числами. Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
i1 – вход;
i2 – величина сдвига;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = i1 ≫ i2
Табличная функция (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
Экспонента (Exp)
Функция Exp производит вычисление экспоненциальной
функции от своего аргумента. Аргумент является вещественным числом.
Раздел библиотеки: Арифметические. Выход инициализируется 0.
Назначение входов и выходов:
in– аргумент;
out– выход, значение ограничено интервалом [exp(-37), exp(10)].
Инициализация:
out = 0
Алгоритм:
out = exp(in)
Логарифм (Ln)
Функция Ln вычисляет натуральный логарифм своего
аргумента. Аргумент является вещественным числом. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
in– аргумент;
out – выход, снизу ограничен ln(1.0e - 15).
Инициализация:
out = 1
Алгоритм:
out = ln(in)
Возведение в степень (Pow)
Функция Pow производит возведение в степень аргумента
функции. Если производится возведение в степень отрицательного числа
в нецелочисленную степень, то степень округляется до ближайшей целой.
Аргументы являются вещественными числами. Раздел библиотеки: Арифметические. Выход инициализируется 1.
Назначение входов и выходов:
in– аргумент;
pw– степень;
out – выход, значение ограничено интервалом [1.0e
- 18; 1.0e + 18].
Инициализация:
out = 1
Алгоритм:
out = inpw
Сложение некоторых слагаемых (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
Пакетное умножение и округление (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
Пакетное умножение (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
Округление (flt_round)
Блок flt_round вычисляет
несколько вариантов округления для входного значения. Аргумент является
вещественным числом. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in – значение;
rnd – до ближайшего целого;
up – в большую сторону;
dn – в меньшую сторону.
Инициализация:
rnd = 0,
up = 0,
dn = 0
Определение знака (Sign)
Функция Sign производит определение знака входного
значения относительно базового. Аргументы являются вещественными числами.
Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in – вход;
x0 – базовое значение;
out – знак;
inv – инверсия знака;
zer– признак равенства.
Инициализация:
out = 0,
inv = 0,
zer = 0
Алгоритм:
Переворачивание байт в слове (SwapBytes)
Функция SwapBytesменяет местами байты
в двухбайтном числе. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Аргументы
являются целыми числами. Раздел библиотеки: Арифметические. Выходы инициализируются 0.
Назначение входов и выходов:
in0, in1, ..., inn – входы
o0,o1, ..., on – выходы.
Инициализация:
o0, o1, ..., on = 0
Алгоритм:
ini [byte1, byte2] → oi = ini [byte2, byte1], I = 1, 2, …, n
Арифметические блоки для аргументов double, long, Uint64
Арифметические блоки для аргументов double, long, Uint64 представлены в соответствующих
группах в разделе библиотеки Арифметические. Описание
представленных блоков аналогично описанию соответствующих блоков,
приведенному выше.
Логические блоки
Логическое И (AND)
Функциональный блок AND производит логическое умножение
своих входов. Число входов задается при создании функционального блока,
и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0,b1, ...,bn– входы;
q– логическое произведение;
inv – инвертированное логическое произведение.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = b0 & b1 &…& bn, inv = !(q)
Пример для блока с двумя входами:
Логическое ИЛИ (OR)
Функциональный блок OR производит логическое сложение
своих входов. Число входов задается при создании функционального блока,
и его можно изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0,b1, ...,bn– входы;
q– логическое сложение;
inv – инвертированное логическое сложение.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = b0 ∪ b1 ∪ … ∪ bn, inv = !(q)
Пример для блока с двумя входами:
Логическое НЕ-И (nAND)
Функциональный блок nAND производит логическое умножение
с инверсией своих входов. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0,b1, ...,bn– входы;
q– логическое произведение инверсных входов;
inv – инвертированное q.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = !(b0) & !(b1) & … & !(bn), inv = !(q)
Пример для блока с двумя входами:
Логическое НЕ (NOT)
Функциональный блок NOT производит логическую инверсию
своего входа. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b1 – вход;
q– логическое отрицание.
Инициализация:
q = 0
Алгоритм:
q = !(b1)
Логическое НЕ-ИЛИ (nOR)
Функциональный блок nOR производит логическое сложение
с инверсией своих входов. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0,b1, ...,bn– входы;
q– логическое сложение инверсных входов;
inv – инвертированное q.
Инициализация:
q = 0,
inv = 1
Алгоритм:
q = !(b0) ∪ !(b1) ∪ … ∪ !(bn), inv = !(q)
Логическое сложение по модулю два (XOR)
Функциональный блок XOR производит логическое суммирование
по модулю два своих входов. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b1,b2 – входы;
q– сумма по модулю два.
Инициализация:
q = 0
Алгоритм:
q = b1 ⊕ b2
Логическое ИЛИ с блокировкой (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)
Детектор фронтов (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 – значение входа на предыдущем цикле выполнения программы
Детектор логического канала (bDetect)
Функциональный блок bDetect определяет номер входа,
на котором произошел перепад значения из 0 в 1. Если
перепад произошел на нескольких входах, обнаруживается только самый
поздний. Если перепада нет ни на одном входе, то num = -1.
Число входов задается при создании функционального блока, и его можно
изменить в процессе редактирования программы. Раздел библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0,b1, ...,bn– входы;
num– номер входа, на котором произошел перепад.
Инициализация:
num = 0
Алгоритм: num– номер входа, на котором произошел
перепад из 0 в 1, начинается с 0
Контроль ключа (LogContr)
Функциональный блок LogContr определяет запрещенные
состояния ключа, которые задаются двумя логическими сигналами. Раздел
библиотеки: Логические. Выход инициализируется 0.
Назначение входов и выходов:
b0,b1 – входы;
n_z– запрещенное состояние;
m_1 – больше одной единицы.
Инициализация:
n_z = 0,
m_1 = 0
Алгоритм:
Тригонометрические функции
Синус (Sin)
Функция Sin вычисляет синус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in – вход;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = sin(in)
Косинус (Cos)
Функция Cos вычисляет косинус аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in– вход;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = cos(in)
Тангенс (Tan)
Функция Tan вычисляет тангенс аргумента. Раздел библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in– вход;
out – выход.
Инициализация:
out = 0
Алгоритм:
out = tan(in)
Арктангенс (ATan)
Функция ATan вычисляет арктангенс аргумента. Раздел
библиотеки: Тригонометрические функции. Выход инициализируется 0.
Назначение входов и выходов:
in– вход;
out – выход, диапазон изменения [-π/2 ≤ out ≤ π/2].
Инициализация:
out = 0
Алгоритм:
out = atan(in)
Арксинус (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
Арккосинус (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
Переключатели, реле и мультиплексоры
Дешифратор (Decoder)
Функциональный блок Decoder выставляет 1 на
одном из своих выходов. Индекс выхода задает входная переменная. Если
значение входа выходит за рамки интервала [0…количество выходов
- 1], то все выходы равны 0. Число выходов задается при
создании функционального блока, которые задаются в процессе редактирования
программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
sel– номер выхода;
o0,o1, ...,on– выходы.
Алгоритм:
o[sel] = 1
Ключ (Key)
Функциональный блок Key передает значение своего
входа на выход при 1 на управляющем входе и выдает 0 на выходе при 0 на управляющем входе. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x– вход;
i– управляющий вход;
out– выход.
Алгоритм:
Если i = 1 → out = x,
иначе out = 0
Коммутатор 8-битных регистров (R8Switch)
Функциональный блок R8Switch передает на свой выход значение одного из своих входов в зависимости
от управляющего сигнала i. Раздел библиотеки: Переключатели,
реле и мультиплексоры.
Функциональный блок fSwitch передает на свой выход
значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Функциональный блок lSwitch передает на свой выход
значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x1, x2 – входы логического типа;
i– управляющий бит;
out– выход логического типа.
Алгоритм:
Если i = 1 → out = x1,
иначе out = x2
Если i = 1 → out = x1,
иначе out = x2
Коммутатор строковых переменных (txtSwitch)
Функциональный блок txtSwitch передает на свой выход
значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Если cross = 1 → str1o = str2, str2o = str1,
иначе str1o = str1, str2o = str2
Коммутатор целых переменных (iSwitch)
Функциональный блок iSwitch передает на свой выход
значение одного из своих входов в зависимости от управляющего сигнала i. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Функциональный блок fltRelay в зависимости от управляющего
входа передает на каждый свой выход значение одного из входов группы
с тем же индексом. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Переключатели, реле и мультиплексоры.
Если upr = 1 → oi = xi,
иначе oi = yi, где i = 1, 2, …, n
Релейный каскад логических переменных (logRelay)
Функциональный блок logRelay в зависимости от управляющего
входа передает на каждый свой выход значение одного из входов группы
с тем же индексом. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
x0, x1, …, xn – входы
логического типа;
y0, y1, …, yn – входы
логического типа;
upr– управляющий бит;
o0, o1, …, on – выходы
логического типа.
Алгоритм:
Если upr = 1 → oi = xi,
иначе oi = yi, где i = 1, 2, …, n
Управление реле (SetSW)
Блок SetSW осуществляет потенциальное и импульсное
управление реле с обратной связью. Выход потенциального управления out = 1, если управление inp и разрешение enb равны 1.
На выходах импульсного управления on и off выдаются
импульсы длиной в один таймерный интервал (если блок находится в Таймере) соответственно при включении и выключении выхода out.
Ошибка err выдается, если обратный сигнал ret не
появился в течение таймаута cnt (задается в миллисекундах).
Для правильной работы таймера ошибки данный блок необходимо размещать
в Таймере, а значения cnt задавать кратными времени
таймерного цикла. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
inp – управление;
ret – обратная связь;
cnt – таймер ошибки, мс;
enb – разрешение;
out – потенциальное управление;
on – включение (импульсное);
off – выключение (импульсное);
err – ошибка.
Выбор одного из целых значений (SelectUI)
Блок SelectUI выводит на выход первое из входных
значений, для которого en = 1. Число входов задается при создании
функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
val0, val1, …, valn – входы;
en0, en1, …, enn – выбор входа;
out– выбранное значение.
Алгоритм:
Если eni = 1 → out = vali, где i = 1, 2, …, n
Вывод значения на заданный выход (ShowSW)
Блок ShowSW выводит значение входа spc на
соответствующий выход o при появлении его номера на входе num (входы нумеруются от 1). Число входов задается при
создании функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов:
num – номер входа;
def– значение по умолчанию;
spc0, spc1, …, spcn – входы;
o0, o1, …, on – выходы.
Инициализация:
oi = def
Алгоритм:
Для каждого входа, если i = num - 1, oi = spci, иначе oi = def
Мультиплексор вещественных значений (MuxFlt)
Функциональный блок MuxFlt передает значение своего
входа с индексом sel на выход. Если индекс выходит за рамки
интервала [0…количество входов - 1], то на выходе остается
предыдущее значение. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Переключатели, реле и мультиплексоры. Изначально
выход инициализируется 0.
Назначение входов и выходов:
sel – номер входа;
in0, in1, …, inn – входы;
out– выход.
Инициализация:
out = 0
Алгоритм:
out = in[sel]
Мультиплексор целых значений (MuxInt)
Функциональный блок MuxFlt передает значение своего
входа с индексом sel на выход. Если индекс выходит за рамки
интервала [0…количество входов - 1], то на выходе остается
предыдущее значение. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Переключатели, реле и мультиплексоры. Изначально
выход инициализируется 0.
Назначение входов и выходов:
sel – номер входа;
in0, in1, …, inn – входы;
out– выход.
Инициализация:
out = 0
Алгоритм:
out = in[sel]
Выбор одного из вещественных значений (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
Выбор строки (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
Дешифратор уставок (Settings)
Блок Settings представляет собой дешифратор уставок.
Раздел библиотеки: Переключатели, реле и мультиплексоры.
Назначение входов и выходов Settings
Элемент
Описание
Входы
nust
Текущий
номер уставки
val
Значение
текущей уставки
nout
Номер уставки
для вывода на выход vout
n0
Начальный
номер уставок in
wen
Разрешение
записи из val в o
ren
Разрешение
чтения из o в vout
in
Значение
инициализации уставки (циклический)
Выходы
vout
Последнее
прочитанное/записанное значение уставки с номером nout
wrtng
Фронт записи
rdng
Фронт чтения
o
Текущее
значение уставки (циклический)
Генераторы и таймеры
Генератор импульсов (Pulse)
Функциональный блок Pulse генерирует импульсы заданной
ширины в ответ на появление фронта на его управляющем входе. Ширина
импульса T задается в миллисекундах. Длительность паузы соответствует
величине цикла, в котором размещен блок. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать ширину импульса меньше
времени таймерного цикла. Оптимальными значениями ширины импульса
являются числа, кратные величине таймерного цикла (не кратные значения
округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I – управление;
T – ширина импульса, мс;
q – выход.
Инициализация:
q = 0
Включение с задержкой (DelayOn)
Функциональный блок DelayOn реагирует на фронт на
управляющем входе I через заданное время задержки T.
Если управляющий бит сбросится, логический таймер также сбросится
и будет ожидать следующего фронта на управляющем входе. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время задержки меньше
времени таймерного цикла. Оптимальными значениями времени задержки
являются числа, кратные величине таймерного цикла (не кратные значения
округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I– управление;
T– время задержки, мс;
q– выход.
Инициализация:
q = 0
Выключение с задержкой (DelayOff)
Функциональный блок DelayOff при установлении управляющего
бита I устанавливает выходной бит q, инициализирует
логический таймер – блок переходит в режим ожидания спада управляющего
бита. После спада управляющего бита выходной бит сбрасывается через
время задержки T. Если до истечения времени задержки выставится
управляющий бит, логический таймер сбросится и будет ожидать следующего
спада управляющего бита. Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время задержки меньше
времени таймерного цикла. Оптимальными значениями времени задержки
являются числа, кратные величине таймерного цикла (не кратные значения
округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I– управление;
T– время задержки, мс;
q– выход.
Инициализация:
q = 0
Половинный импульс после половины паузы (HalfPulse)
Блок HalfPulseвыдает импульс длительности T/2 после паузы T/2 по перепаду 0 в 1 на входе I. Раздел библиотеки: Генераторы
и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время длительности меньше
времени таймерного цикла. Оптимальными значениями времени длительности
являются числа, кратные величине таймерного цикла (не кратные значения
округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I– управление;
T– длительность, мс;
q– выход.
Инициализация:
q = 0
Генератор сигналов (GenSign)
Блок GenSign генерирует сигналы различной формы.
Раздел библиотеки: Генераторы и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время длительности меньше
времени таймерного цикла. Оптимальными значениями времени длительности
являются числа, кратные величине таймерного цикла (не кратные значения
округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
Tsg – период сигнала в секундах;
Amp – амплитуда сигнала;
Shf – смещение сигнала по оси ординат;
Aut – включение периодичности сигнала;
Dis – сброс сигнала;
sin – синусоида;
line – пила;
sqw – меандр;
l1,l2 – логические биты.
Инициализация:
sin = line = sqw = l1 = l2 = 0
Алгоритм:
Если Aut = 0, тогда сигналы на выходе имеют следующий
вид:
Если Aut = 1, тогда сигналы на выходе имеют следующий
вид:
Если
установить и сбросить бит Dis, сигнал начнет генерироваться
со значения Shf.
Логический таймер со взводом (AdvTimer)
Блок AdvTimer передает на выход q с управляющего
входа после задержки по времени T. Взвод осуществляется по
входу set при I = 1. Раздел библиотеки: Генераторы
и таймера.
Для адекватной работы блока следует размещать его только в Таймере. Не рекомендуется задавать время задержки меньше
времени таймерного цикла. Оптимальными значениями времени задержки
являются числа, кратные величине таймерного цикла (не кратные значения
округляются до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
I– управление;
T– задержка, мс;
set – задержка;
q– выход;
t– значение таймера.
Инициализация:
q = 0,
t = T
Генератор импульсов с заданной скважностью (PulseGeneratorEx)
Блок PulseGeneratorEx при enbl = 1 на входе
формирует на выходе логические импульсы заданной скважности: длительность
импульса задается входом t1, длительность паузы –входом t2. Выходы t_on и t_off ведут отсчет текущего времени
импульса и паузы, соответственно. Раздел библиотеки: Генераторы
и таймера.
Для адекватной работы блока, следует размещать его только в Таймере. При работе блока в Фоне присутствует
погрешность. Не рекомендуется задавать время задержки меньше времени
таймерного цикла. Оптимальными значениями времени задержки являются
числа, кратные величине таймерного цикла (не кратные значения округляются
до времени таймерного цикла в большую сторону).
Назначение входов и выходов:
t1 – длительность импульса, мс;
t2 – длительность паузы, мс;
enbl – разрешение работы;
out – выход;
t_on – текущее время импульса, мс;
t_off – текущее время паузы, мс.
Инициализация:
out = 0
Генератор случайных чисел (rndgen)
Блок rndgen выдает на выходе случайные числа в диапазоне
от -amp до +amp. Раздел библиотеки: Генераторы
и таймера.
Назначение входов и выходов:
amp– амплитуда;
out– случайное значение.
Универсальный счетчик (CounterCTN)
Универсальный счетчик CounterCTN используется
для прямого и обратного счета. Операция «прямой счет» выполняется
по переднему фронту импульса на входе прямого счета inU, что
увеличивает значение выходного сигнала out. Импульсы, приходящие
на вход inD («обратный счет»), уменьшают значение выхода out. Если на вход rst поступает сигнал логической 1, то выход счетчика out устанавливается в значение входа n. Раздел библиотеки: Генераторы и таймера.
Если на входы inU и inD одновременно поступают сигналы,
то приоритетным является сигнал входа inU. Допустимый диапазон
значений числа импульсов n: от 0 до 65535.
Назначение входов и выходов:
inU – вход импульсов прямого счета;
inD – вход импульсов обратного счета;
rst – логический вход;
n – установленное значение импульсов;
out – выход.
Инкрементный счетчик (CounterCTU)
Инкрементный счетчик CounterCTU используется для подсчета числа импульсов, приходящих на
вход in. На выходе out счетчика появится импульс сигнала
логической 1, если число приходящих на вход импульсов достигнет
установленного значения на входе n. Счетчик сбрасывается в 0 по переднему фронту импульса на входе rst. Раздел библиотеки: Генераторы и таймера.
Если сигналы поступают на входы одновременно, то приоритетным
является сигнал входа rst. Допустимый диапазон значений числа
импульсов n: от 0 до 65535.
Назначение входов и выходов:
in – вход импульсов прямого счета;
rst – импульсный вход для сброса выхода счетчика в 0;
n – установленное значение импульсов;
out– выход.
Инкрементный счетчик с автосбросом (CounterCT)
Инкрементный счетчик с автосбросом CounterCT используется для подсчета заданного числа импульсов n. На выходе outсчетчика появится импульс сигнала логической 1 длительностью в один цикл, если число приходящих на вход in импульсов достигнет установленного значения n. Раздел
библиотеки: Генераторы и таймера.
Допустимый диапазон значений числа импульсов n: от 0 до 65535.
Назначение входов и выходов:
in – вход импульсов;
n – устанавливаемое значение импульсов;
out– выход.
Обработка сигналов
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
Аппроксимация обратной функции (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
Алгоритм: используется кусочно-линейная аппроксимация по двум соседним
точкам.
Кусочно-линейная интерполяция (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
Алгоритм: вычисление значения функции основано на кусочно-линейной
интерполяции.
Несимметричный ограничитель сигнала (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
Группа ограничителей сигнала (Lims)
Функциональный блок Limsпредставляет
собой группу ограничителей сигнала val. Число входов задается
при создании функционального блока, и его можно изменить в процессе
редактирования программы. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
vali – входы;
maxi – верхняя граница i-го входа;
mini – нижняя граница i-го входа;
oi – выходы.
Инициализация:
oi = 0
Алгоритм:
o = val, если val > max → o = max,
если val < min → o = min
Градиентный фильтр (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, иначе
Определение принадлежности к диапазону (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
Параболический ограничитель (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
Фильтр Баттерворта (BatterFilter)
Блок BatterFilter представляет из себя фильтр Баттерворта
с постоянной времени Tx и коэффициентом демпфирования g. Для адекватной работы фильтра необходимо размещать данный блок
в Таймере. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
in – вход;
Tx – постоянная времени;
g – коэффициент демпфирования;
out– выход.
Инициализация:
out = 0
Нормализация шкалы (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)
Преобразователь для модуля термосопротивления (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
Интерполяция (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 – ошибка.
Симметричная мертвая зона с гистерезисом (FdeadS)
Функциональный блок FdeadS является симметричной
(на величину val) мертвой зоной по отношению к сигналу inp. Отличие данного ФБ от блока Симметричная
мертвая зона состоит в том, что при выходе сигнала inp за пределы мертвой зоны в блоке формируется внутренний флаг, который
скачком отключает ее. Сброс флага происходит в момент смены полярности
входного сигнала inp. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
inp – вход;
val – мертвая зона;
dis– отключение мертвой зоны;
out – выход.
Инициализация:
out = 0
Симметричная мертвая зона (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
Диагностика сигналов датчиков (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
Изменение значения за заданное время (ValDif)
Функциональный блок ValDif передает на выход изменение
значения val за установленное время time. Раздел библиотеки: Обработка сигналов.
Назначение входов и выходов:
val – вход;
time – время, мс;
diff – разница за время time.
Арифметическое скользящее среднее (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
Операции с регистрами
Объединение 20 битов в регистр (ToReg20)
Блок ToReg20 объединяет 20битов в регистр. Бит0 – младший бит регистра, бит19 – старший. Раздел библиотеки: Операции с
регистрами.
Объединение 8-ми битов в регистр (ToReg8)
Блок ToReg8 объединяет 8битов в регистр. Бит0 – младший бит регистра, бит 7 – старший. Раздел библиотеки: Операции с регистрами.
Выбор 8 битов из регистра (FromReg8)
Блок FromReg8 раскладывает байт на 8 бит. Первый выходной бит будет младшим битом байта,
последний – старшим. Раздел библиотеки: Операции с регистрами.
Объединение 16-ти битов в регистр (ToReg16)
Блок ToReg16 объединяет вслово16бит. Первый входной бит будет младшим
битом слова, последний – старшим. Раздел библиотеки: Операции
с регистрами.
Выбор 20 битов из регистра (FromReg20)
Блок FromReg20 раскладывает 4байта в 20бит. Первый выходной бит будет младшим
битом слова, последний – старшим. Раздел библиотеки: Операции
с регистрами.
Выбор 16 битов из регистра (FromReg16)
Блок FromReg16 раскладывает слово
в 16 бит. Первый выходной бит будет младшим битом слова, последний
– старшим. Раздел библиотеки: Операции с регистрами.
Логическое И для 16-битных регистров (rAND)
Функциональный блок rAND работает аналогично блоку И,
но обрабатывает параллельно 16 логических сигналов, предварительно
объединенных в 16-битный регистр. Число входов задается при
создании функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Операции с регистрами.
Логическое ИЛИ для 16-битных регистров (rOR)
Функциональный блок rOR работает аналогично блоку ИЛИ, но обрабатывает параллельно 16 логических сигналов, предварительно
объединенных в 16-битный регистр. Число входов задается при
создании функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Операции с регистрами.
Логическое НЕ для 16-битных регистров (rNOT)
Функциональный блок rNOT работает аналогично блоку НЕ, но обрабатывает параллельно 16 логических сигналов, предварительно
объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.
Логическое И с отрицанием для 16-битных регистров (rnAND)
Функциональный блок rnAND работает аналогично блоку И с отрицанием, но обрабатывает параллельно 16 логических сигналов, предварительно
объединенных в 16-битный регистр. Число входов задается при
создании функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Операции с регистрами.
Логическое ИЛИ с отрицанием для 16-битных регистров (rnOR)
Функциональный блок rnNOR работает аналогично блоку ИЛИ с отрицанием, но обрабатывает параллельно 16 логических сигналов, предварительно
объединенных в 16-битный регистр. Число входов задается при
создании функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Операции с регистрами.
Сложение по модулю для 16-битных регистров (rXOR)
Функциональный блок rXORработает аналогично
блоку XOR, но обрабатывает параллельно 16 логических сигналов,
предварительно объединенных в 16-битный регистр. Раздел библиотеки: Операции с регистрами.
Склеивание байта из двух тетрад (R4to8)
Блок R4to8 собирает 8-ми битный регистр из младшей тетрады регистра low и старшей тетрады регистра high. Раздел библиотеки: Операции с регистрами.
Детектор фронтов для 16-битных регистров (Fronts2)
Функциональный блок Fronts2 работает
аналогично блоку детектора фронтов, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный
регистр. Раздел библиотеки: Операции с регистрами.
Склеивание слова из двух байт (R8to16)
Блок R8to16 собирает 16-ти битный регистр из младшего регистра low и старшего регистра high. Раздел библиотеки: Операции с регистрами.
Преобразование 16-битного регистра в два 8-битных (R16to8)
Блок R16to8 разбивает 16-битный регистр на два 8-битных. Раздел
библиотеки: Операции с регистрами.
Преобразование двух 16-битных регистров в 32-битный (R16to32)
Блок R16to32 склеивает 32-битный регистр из двух 16-битных.
Раздел библиотеки: Операции с регистрами.
Преобразование 32-битного регистра в два 16-битных (R32to16)
Блок R32to16 разбивает 32-битный регистр на два 16-битных.
Раздел библиотеки: Операции с регистрами.
Объединение 32 битов в регистр (ToReg32)
Блок ToReg32 объединяет 32 бита в регистр. Бит0 – младший бит регистра, бит31 – старший. Раздел библиотеки: Операции с
регистрами.
Выбор 32 битов из регистра (FromReg32)
Блок FromReg32 раскладывает 4 байта в 32 бита. Первый выходной бит будет младшим битом слова,
последний – старшим. Раздел библиотеки: Операции с регистрами.
Включение с задержкой для 16-битных регистров (rDelayOn)
Функциональный блок rDelayOn работает аналогично
блоку Включение с задержкой, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный
регистр. Раздел библиотеки: Операции с регистрами.
Выключение с задержкой для 16-битных регистров (rDelayOff)
Функциональный блок rDelayOff работает аналогично
блоку Выключение с задержкой, но обрабатывает параллельно 16 логических сигналов, предварительно объединенных в 16-битный
регистр. Раздел библиотеки: Операции с регистрами.
Выбор бита из регистра (BitReg16)
Функциональный блок BitReg16 выбирает
бит из регистра ireg по указанному номеру ibit. Раздел
библиотеки: Операции с регистрами.
Назначение входов и выходов:
ireg – регистр;
ibit – номер бита;
obit – выходной бит.
Операции с массивами
Массив вещественных чисел (FloatArray)
Блок FloatArray создает массив из элементов. Число
входов задается при создании функционального блока, и его можно изменить
в процессе редактирования программы. Раздел библиотеки: Операции
с массивами.
Блок i32Array создает
массив из элементов. Число входов задается при создании функционального
блока, и его можно изменить в процессе редактирования программы. Раздел
библиотеки: Операции с массивами.
Блок LineAprox рассчитывает значение таблично заданных
функций при значении аргумента inp. Текущие значения функций
выдаются на соответствующие выходы o. Функция задается массивом
аргументов arg (общим для всех функций) и массивом значений fun. Размерности всех массивов должны совпадать, иначе на выход
будет выдана ошибка err - (-1 - [номер функции]).
Массив аргументов arg должен быть упорядочен либо по возрастанию,
либо по убыванию. Если порядок нарушен, то на выход err выдается
номер этого элемента (считая с 1). Число входов задается при
создании функционального блока, и его можно изменить в процессе редактирования
программы. Раздел библиотеки: Операции с массивами.
Внимание
На входы arg и fun должны быть
проведены связи только с выходов блоков Массив вещественных
чисел, в противном случае работа программы будет некорректной.
Назначение входов и выходов:
inp – аргумент;
arg – аргументы;
fun0, fun1, …, funn– функции;
err – ошибка;
o0, o1, …, on – значения функций.
Значения массива вещественных чисел (From_fArr)
Блок From_fArr позволяет
получить значения элементов вещественного массива, поданного на вход.
Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – выходов блока меньше, чем элементов у входного массива;
2 – выходов больше, чем элементов у входного массива;
3 – на входе отсутствует массив (может быть связано
с порядком выполнения блоков).
Нахождение разницы между элементами массива (minmax_sub_fArr)
Блок minmax_sub_fArr минимальное и максимальное значение разницы соседних элементов массива, поданного на вход. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – на входе отсутствует массив (может быть связано
с порядком выполнения блоков).
Блок switch_fArr принимает
на входы два массива вещественных чисел и выдает на выход один из
них, в зависимости от состояния управляющего входа i: при i = 0 — массив in2, в остальных случаях — массив in1. Раздел библиотеки: Операции с массивами.
Коды ошибок статуса err:
0 – ошибок нет;
1 – на входе отсутствует массив (может быть связано
с порядком выполнения блоков).
Блок SmTrig осуществляет алгоритм симметричного триггера
Шмидта. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
x – аргумент;
m – уставка;
dm – гистерезис;
fu – больше;
fl – меньше.
Алгоритм:
fl = 1 при x ≤ m+ dm,
fu = 1 при x > m + dm
Двойной триггер Шмидта (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
RSS-триггер (RSS)
RSS – RS-триггер с S-доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s– бит установить (set);
r– бит сбросить (reset);
q– выход;
inv – инверсный выход.
Инициализация:
q = 0
Алгоритм:
RSR-триггер (RSR)
RSR – RS-триггер с R-доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s– бит установить (set);
r– бит сбросить (reset);
q– выход;
inv – инверсный выход.
Инициализация:
q = 0
Алгоритм:
D-триггер с инициализацией выхода (DFR_i)
DFR_i – D-триггер с R- доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
i– перепад;
d– потенциал;
s– бит установить (set);
r– бит сбросить (reset);
ini – инициализация;
q– выход;
qn – инверсный выход.
Инициализация:
q = ini
Алгоритм:
JK-триггер с инициализацией (JK _i)
JK _i – JK-триггер с инициализацией. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
j – бит job;
k – бит keep;
s– бит установить (set);
r– бит сбросить (reset);
ini – начальное значение q;
q– выход;
qn – инверсный выход.
Инициализация:
q = ini
Алгоритм:
RSS-триггер с инициализацией выхода (RSS_i)
RSS – RS-триггер с S-доминантой с инициализацией.
Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s– бит установить (set);
r– бит сбросить (reset);
i– начальное значение q;
q– выход.
Инициализация:
q = i
Алгоритм:
RSR-триггер с инициализацией выхода (RSR)
RSR – RS-триггер с R-доминантой с инициализацией.
Раздел библиотеки: Триггеры.
Назначение входов и выходов:
s– бит установить (set);
r– бит сбросить (reset);
i– начальное значение q;
q– выход.
Инициализация:
q = i
Алгоритм:
D-триггер (DFR)
DFR – D-триггер с R- доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
i– перепад;
d– потенциал;
s– бит установить (set);
r– бит сбросить (reset);
q– выход;
qn – инверсный выход.
Инициализация:
q = 0
Алгоритм:
DV-триггер (DFRV)
DFRV– DV-триггер с R- доминантой. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
is – потенциал;
i– перепад;
s– бит установить (set);
r– бит сбросить (reset);
q– выход;
qn – инверсный выход.
Инициализация:
q = 0
Алгоритм:
Несимметричный триггер Шмидта (asymSmTrig)
Блок SmTrig осуществляет алгоритм несимметричного
триггера Шмидта. Раздел библиотеки: Триггеры.
Назначение входов и выходов:
x – аргумент;
min – нижний гистерезис;
max – верхний гистерезис;
l – отклонение уставки;
fu – больше;
fl – меньше.
Инициализация:
fu = 0, fl = 0
Алгоритм: первые три цикла fu = 1 при x > max, fl = 1 при x ≤ max, затем см. рисунок ниже.
Шаговая последовательность (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.
Системные
В данном разделе приведено описание основных блоков библиотеки paCoreиз раздела Системные.
Информация о временах выполнения (SysInfo)
Блок SysInfo выдает информацию о временах выполнения.
Раздел библиотеки: Системные.
Назначение входов и выходов SaverEx
Элемент
Описание
Входы
fmap
Имя map-файла
rst
Сброс
Выходы
init
Не используется
IT
Заданный
таймерный цикл ввода-вывода
ic
Текущий
таймерный цикл ввода-вывода
im
Максимальный
таймерный цикл ввода-вывода
MT
Заданный
таймерный цикл
tc
Текущий
таймерный цикл
tm
Максимальный
таймерный цикл
fc
Текущий
фон
fm
Максимальный
фон
crc
Не используется
inm0
Не используется
(циклический)
cnt0
Не используется
(циклический)
Получить время и дату, день недели (getTDN)
Блок getTDN выдает на выходы текущее время и дату,
день недели, установленные в ОС контроллера. Блок можно размещать
как в Таймере, так и в Фоне. Раздел библиотеки: Системные.
Назначение входов и выходов:
f – не используется;
h – часы;
m – минуты;
s – секунды;
dw – день недели;
d – число;
mn – месяц;
y– год.
Получить время и дату (getTD)
Блок getTD выдает на выходы текущее время и дату,
установленные в ОС контроллера. Блок можно размещать как в Таймере, так и в Фоне. Раздел библиотеки: Системные.
Назначение входов и выходов:
f – не используется;
h – часы;
m – минуты;
s – секунды;
d – число;
mn – месяц;
y– год.
Завершение программы (Exit)
Блок Exit осуществляет корректное завершение программы,
когда на входе b1 появляется 1. Раздел библиотеки: Системные.
Назначение входов и выходов:
b1 – выйти;
q– значение входа.
Разность тиков процессора (GetTicksDiff)
Блок GetTicksDiff предназначен для проведения высокоэффективных
измерений малых временных промежутков. Раздел библиотеки: Системные.
Блок определяет разность между двумя входными значениями start и end (полученными при помощи блоков Счетчик тиков процессора), переводя ее в единицы измерения времени (мс) на выходе ms.
На выходе ms фиксируется последнее полученное значение до
момента изменения на входе end.
Внимание
Для получения корректного результата последовательность
выполнения блоков должна удовлетворять следующим условиям: GetTicks(start) < GetTicks(end) < GetTicksDiff.
Назначение входов и выходов:
start – тик начала;
end – тик окончания;
ms – разница между входами, мс;
pday – частота процессорного счетчика, кГц;
min– не используется для контроллеров ОВЕН.
Счетчик тиков процессора (GetTicks)
Блок GetTicks в связке с блоком Разность тиков
процессора позволяет выполнять высокоэффективные измерения
малых временных промежутков. Раздел библиотеки: Системные.
Если на вход блока enb подан ненулевой сигнал, то на выходе tcks текущее значение внутреннего независимого цикличного счетчика.
При нулевом сигнале на входе, на выходе фиксируется последнее полученное
значение счетчика (если измерений не было – 0).
Назначение входов и выходов:
end – включение;
tcks– тик.
Загруженность таймерного потока (Effect)
Блок Effect выдает информацию о загруженности таймерного
потока. Раздел библиотеки: Системные.
Назначение входов и выходов Effect
Элемент
Описание
Входы
rst
Сброс
Выходы
mt
Таймерный
цикл основной
it
Таймерный
цикл ввода-вывода
ctm
Средний
процент заполнения таймерного цикла основного программой таймера
cti
Средний
процент заполнения ввода-вывода цикла программой ввода-вывода
mtm
Средний
процент заполнения ввода-вывода цикла программой ввода-вывода
mti
Максимальный
процент заполнения ввода-вывода цикла программой ввода-вывода
cf
Средний
процент от величины таймера работы фоновой программы
mf
Максимальный
процент от величины таймера работы фоновой программы
Событие по фронту (Event)
Блок Event предназначен для определения времени между
событиями. На вход блока front заводится бит события. По входному
фронту на выходе time блока будет значение времени в наносекундах.
Раздел библиотеки: Системные.
Назначение входов и выходов:
front – входной фронт;
me – событие;
time – время срабатывания, нс.
TCP/IP клиент (TcpIpClA)
Блок TcpIpClA представляет собой TCP/IP-клиент для
обеспечения работы протоколов (например, Modbus TCP Master). Раздел библиотеки: Системные.
Так как работа блока занимает значительное время, его можно размещать
только в Фоне.
Назначение входов и выходов:
lprt – локальный порт;
lip – локальный IP-адрес;
sdr – сетевой стек, для ПЛК ОВЕН "/";
rprt – удаленный порт;
ip – IP адрес удаленного сервера;
cnc – связь с блоком протокола;
stat – статус работы (0 – есть связь с TCP/IP
сервером, >0 – нет связи).
TCP/IP сервер (TcpIpSrA)
Блок TcpIpSrA представляет собой TCP/IP-сервер для
обеспечения работы протоколов (например, Modbus TCP
Slave). Сервер поддерживает одновременно не более 20 подключений. Раздел библиотеки: Системные.
Назначение входов и выходов:
prt – порт;
lip – локальный IP-адрес;
sdr – сетевой стек, для ПЛК ОВЕН "/";
wait – время в миллисекундах до закрытия пустого канала
(0 – никогда);
cnc – связь с блоком протокола;
stat – статус работы (0 – есть подключения, >0 – нет подключений).
Информация о сборке (BuildVersionInfo)
Блок BuildVersionInfo передает на свои выходы информацию
о сборке. Раздел библиотеки: Системные.
Назначение выходов:
ver – версия проекта;
date – дата и время трансляции;
guid – уникальный идентификатор (GUID);
usr – имя пользователя;
pc – имя компьютера.
Информация о накопителе (DriveInfo)
Функциональный блок DriveInfo используется для получения
информации о накопителе по имени (адресу устройства). Раздел библиотеки: Системные.
По факту наличия восходящего фронта на вход start ФБ выполняет
разовую выдачу информации о накопителях.
Для цикличного обновления информации о накопителе необходимо обеспечить
цикличную подачу восходящего фронта на вход start.
Назначение входов и выходов:
start – запуск работы блока по восходящему фронту (0 → 1);
driveName – адрес накопителя в системе (до 49 символов);
error – накопитель отсутствует или недоступен;
capacity – общий объем накопителя, Кбайт;
used – занятый объем накопителя, Кбайт;
available – доступный объем накопителя, Кбайт.
Асинхронное выполнение команд 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 – работа была прервана из-за переполнения результирующей
строки.
Менеджер потоков (ThreadMan)
Блок ThreadMan предоставляет возможности управления
и диагностики фоновых потоков исполнительной системы. Раздел библиотеки: Системные.
Назначение входов и выходов:
slp – время сна (простоя) фоновых потоков в мкс, в этот
промежуток времени управление передается другим потокам. Если задано
значение 0 или блок ThreadMan не добавлен в проект,
то время простоя задается таймерным промежутком места работы Таймер;
btd – включение диагностики времени выполнения блоков: 0 – выключена, 1 – включена. Если диагностика включена,
то в отладчике у каждого блока отображается время его выполнения,
если выключена, то время выполнения всегда отображается как 1 мкс,
что означает, что блок работает. На некоторых контроллерах выключение
диагностики может существенно оптимизировать время выполнения всей
программы;
num – количество запущенных дополнительных фоновых потоков
(не включает Таймер, Ввод-вывод и Фон);
prio_max – максимально разрешенный приоритет для дополнительных
фоновых потоков, зависит от ОС и не может быть изменен. Для места
работы Поток в проекте следует выбирать приоритет ниже prio_max;
pmin – минимальный приоритет из запущенных дополнительных
фоновых потоков;
pmax – максимальный приоритет из запущенных дополнительных
фоновых потоков.
Последовательный порт (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)
Работа со строками
Длина строки (StrLen)
Блок StrLen осуществляет подсчет количества символов len в строке s. Раздел библиотеки: Работа со строками.
Назначение входов и выходов:
s – строка;
len– длина.
Часть строки (StrNmp)
Блок StrNmp выделяет часть входной строки начиная
с позиции n и длиной m (1-й символ строки имеет позицию 0). Если n и m заданы так, что длины исходной строки
недостаточно, то выходная строка res ограничивается концом
входной строки. Раздел библиотеки: Работа со строками.
Назначение входов и выходов:
s – строка;
n– начало;
m – длина;
res– выходная строка.
Слияние строк (StrApp)
Блок StrApp сливает входные строки s в одну
результирующую строку str. В выходной строке строки расположены
в том же порядке, что и входы s. Длина каждой строки s не должна превышать 60 символов. Раздел библиотеки: Работа со строками.
Назначение входов и выходов:
s0, s1, …, sn – строки;
res – результирующая строка.
Сохранение данных
Хранение параметров на диске (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 файлы на диске перезаписываются.
Блок 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 файлы на диске перезаписываются.
Блок 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 файлы на диске перезаписываются.
Блок 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
Список индексов
отслеживаемых блоков
Очереди
Очередь битов qb
Тип данных qb позволяет накапливать очередь битовых
значений в таймерном потоке. Если выход типа qb использовать
в обмене по протоколу OPC UA, то будут переданы все накопленные
данные, независимо от настроек подписки.
Если передача слишком медленная или входной сигнал изменяется слишком
часто, то очередь может переполниться, что будет видно на выходе блока-источника
очереди (например, R2toQuBit). Для изменения размера
очереди необходимо перетранслировать программу.
При соединении выхода типа qb с битовым входом, расположенным
в фоновом потоке, будет автоматически выполнено преобразование (блок QuBit_Bit), которое обеспечит гарантированную передачу бита. Пример ниже показывает
разницу между обычным битом и битов с накоплением очереди. Обычный
импульс, сформированный в таймере, ннельзя гарантированно получить
в фоновом потоке, если длительность импульса достаточно мала.
Преобразование регистра в очереди битов (R2toQuBit)
Блок R2toQuBit разбирает
входной регистр на биты, каждый из которых может накапливать очередь
значений в таймерном потоке. Раздел библиотеки: Очереди.
Назначение входов и выходов:
qus – размер очереди (на каждый выходной бит);
reg – входной регистр;
ov – количество переполнений очереди;
n – текущее количество очередей;
b0, …, b15 – биты.
Преобразование очереди битов в бит (QuBit_Bit)
Блок QuBit_Bit преобразует
очередь битов в бит, который можно дальше использовать в фоновом потоке.
Среда разработки автоматически добавляет этот блок, если проведена
связь между выходом типа qb и входом типа b. Раздел
библиотеки: Очереди.
Назначение входов и выходов:
in – входная очередь;
val – какое значение ловить;
out – выход.
Алгоритм работы: значения из входной очереди сравниваются с заданным
(вход val), и если встречается хотя бы одно, то выход out устанавливается равным val.