Обращение к программе. Входные и выходные данные.

Общая схема по созданию прикладной программы в среде разработки «Beremiz» представлена на рис. Рис. 1. Входными данными являются программные модули, написанные пользователем (в большинстве случаев инженером по автоматизации) на текстовых (ST, IL) и/или графических (FBD, SFC, LD) языках в соответствии со стандартом IEC 61131-3, объединённые в проект. Каждый такой проект представлен в формате XML и хранится в отдельной папке.

Выходными данными является сгенерированный исходный код и исполняемый файл:

  1. файл <название проекта>.st, содержащий промежуточный код на языке ST, сгенерированный для всех программных модулей и ресурсов, транслируемый в язык C;
  2. файлы: config.c config.h, POUS.h, POUS.c и файлы, соответствующие ресурсам – содержат код (на языке C) реализации алгоритмов и логики работы программных модулей и ресурсов проекта;
  3. файлы plc_common_main.c и plc_debugger.c содержат код специфичный для целевой архитектуры и код для отладки прикладной программы на целевом устройстве из среды разработки «Beremiz» соответственно;
  4. файлы, содержащие код драйверов на языке С для взаимодействия с внешними модулями УСО;
  5. исполняемый файл в виде динамической библиотеки (с расширением so), компилируемый из этих вышеперечисленных C файлов.

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

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

На целевом устройстве исполняемый файл запускается и в процессе работы выполняет следующие действия (рис. Рис. 1):

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

Рис. 1 – Обобщенная схема среды разработки «Beremiz»

Требования к техническим средствам

Техническими требованиями для работы среды разработки «Beremiz» является персональный компьютер с тактовой частотой процессора 1000 МГц (поддерживаются как 32-битные, так и 64-битные), 1 Гб оперативной памяти и установленная операционная система Windows XP/Vista/7. Необходимо наличие монитора (для оптимальной работы не меньше 17”), клавиатуры, мыши (или устройства, полноценно заменяющего мышь).

Основные термины и определения

IEC 61131-3 – раздел международного стандарта МЭК 61131 (также существует соответствующий европейский стандарт EN 61131), описывающий языки программирования для программируемых логических контроллеров.

Среда разработки для языков стандарта IEC 61131-3 – система программных средств, используемая инженерами по автоматизации, для разработки прикладного программного обеспечения на высокоуровневых языках стандарта IEC 61131-3 под различные целевые платформы, которая включает в себя:

  • текстовые и графические редакторы языков стандарта IEC 61131-3;
  • транслятор диаграмм графических языков в текстовый язык;
  • транслятор текстового языка в язык C;
  • механизмы плагинов для взаимодействия с модулями УСО;
  • механизмы добавления компиляторов под целевую платформу;
  • механизмы соединений с целевыми устройствами;
  • отладчик.

Модули УСО – модули ввода/вывода, обеспечивающие подключение датчиков и исполнительных механизмов.

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

Прикладная программа (исполняемый файл) для целевого устройства – скомпилированный и скомпонованный so-файл, который будет выполняться на целевом устройстве.

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

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

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

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

Программный модуль – элемент, представляющий собой функцию, функциональный блок или программу. Каждый программный модуль состоит из раздела объявлений и кода. Для написания всего кода программного используется только один из языков программирования стандарта IEC 61131-3.

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

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

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

Задача – элемент представляющий время и приоритет выполнения программного модуля типа «Программа» в рамках экземпляра проекта.

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

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

Основные компоненты среды разработки «Beremiz»

Пользовательский интерфейс среды разработки «Beremiz» состоит из следующих компонент:

  • главное меню программы;
  • панель инструментов;
  • дерево проекта;
  • панель списка переменных и констант;
  • панель настроек проекта;
  • панель файлов проекта;
  • панель отображения промежуточного кода;
  • текстовые редакторы языков ST и IL;
  • графические редакторы языков FBD, SFC, LD;
  • панель редактирования ресурса;
  • панель экземпляров проекта;
  • панель библиотеки функций и функциональных блоков;
  • отладочная консоль;
  • поиск элементов в проекте;
  • панель отладки;
  • панель графика изменения значения переменной в режиме отладки.

Далее подробно рассказано про каждый компонент среды разработки «Beremiz» в отдельности.

Главное меню программы

Главное меню программы (см. рис. Рис. 2) содержит следующие пункты:

  • «Файл»;
  • «Редактировать»;
  • «Вид»;
  • «Помощь».

image0

Рис. 2 – Главное меню программы

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

Меню «Файл» предназначено для работы с проектом и предоставляет следующие пункты:

  • «Новый» – создание нового проекта (CTRL + N);
  • «Открыть» – открытие существующего проекта (CTRL + O);
  • «Недавние проекты» – быстрое открытие одного из десяти последних, недавно редактированных проектов;
  • «Сохранить» – сохранение текущего проекта пункт (CTRL + S);
  • «Сохранить как» – сохранение текущего проекта в папку отличную от той, в которой он сохранён на данный момент (CTRL + SHIFT + S);
  • «Закрыть вкладку» – закрытие активной вкладки (например, вкладки переменных плагина, конфигурации и т.д.) для открытого проекта (CTRL + W);
  • «Закрыть проект» – закрыть текущий, открытый проект (CTRL + SHIFT + W);
  • «Параметры страницы» – настройка параметров страницы для печати на принтере активной программы, представленной в виде диаграммы (CTRL + ALT + P);
  • «Предпросмотр» – предпросмотр перед печатью на принтере активной программы (CTRL + SHIFT + P);
  • «Печать» – печать на принтере активной программы (CTRL + P);
  • «Выход» – закрытие текущего проекта и выход из программы «Beremiz» (CTRL+ Q).

Меню «Редактировать» предназначено для работы с редакторами языков стандарта IEC 61131-3 (см. п. 6.6 и 6.7) и предоставляет следующие возможности:

  • «Отменить» – отмена последней манипуляции в редакторе (CTRL + Z);
  • «Повторить» повтор отменённой манипуляции в редакторе (CTRL + Y);
  • «Вырезать» – удалить в буфер обмена выделенный(е) элемент(ы) в редакторе (CTRL + X);
  • «Копировать» – копировать в буфер обмена выделенный(е) элемент(ы) в редакторе (CTRL + C);
  • «Вставить» – вставить из буфера обмена находящиеся там элемент(ы) в редактор (CTRL + V);
  • «Поиск в проекте» – вызов диалога поиска данных в проекте (CTRL + SHIFT + F);
  • «Добавить элемент» – добавление одного из следующих элемента в текущий проект:
    • «Тип данных» – нового типа данных;
    • «Функция» – новой функции;
    • «Функциональный блок» – нового функционального блока;
    • «Программа» – новую программу;
    • «Ресурс» – новый ресурс;
    • плагины для различных модулей УСО (см. п. 7);
  • «Выделить всё» – выделение всех элементов в активной вкладке редактора (CTRL + A);
  • «Удалить» – удаление программного модуля, выделенного в дереве проекта (см. п. 6.3).

Меню «Вид» предназначено для работы с редакторами языков стандарта IEC-61131 и предоставляет следующие возможности:

  • «Обновить» – обновление данных и снятие выделения в редакторе (CTRL + R);
  • «Очистить ошибки» – очистка указателей ошибок в редакторе (CTRL + K);
  • «Масштаб» – пункт, в котором можно выбрать в процентах величину масштаба;
  • «Сброс расположения панелей» – восстановление расположения панелей «Beremiz» в исходное состояние.

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

Панель инструментов

Панель инструментов представляет собой панель с кнопками для быстрого обращения к часто используемым функциям среды разработки «Beremiz». Она состоит из нескольких панелей, содержащих кнопки: главного меню, сборки проекта и установки связи с целевым устройством. Подробнее об этих панелях рассказано ниже. При редактировании программных модулей, написанных на графических языках, появляются дополнительные панели с кнопками. Они рассмотрены при описании редакторов графических языков стандарта IEC 61131-3 (см. п. 6.7).

Кнопки главного меню

Панель инструментов, содержащая кнопки главного меню представлена на рис. Рис. 3.

image1

Рис. 3 – Панель инструментов

Список кнопок и их функций описывается в таблице 1.

Таблица 1 – Кнопки панели инструментов

Внешний вид кнопки Наименование кнопки Функции кнопки
image2 Новый проект Создать новый проект
image3 Открыть проект Открыть существующий проект
image4 Сохранить проект Сохранить текущий проект
image5 Сохранить проект как Сохранить текущий проект в определённую папку
image6 Печать Печать на принтере текущей программы
image7 Отменить Отмена последнего действия в среде разработки
image8 Повторить Повтор отменённого действия в среде разработки
image9 Вырезать Удалить в буфер обмена выделенный(е) элемент(ы) в редакторе
image10 Копировать Копировать в буфер обмена выделенный(е) элемент(ы) в редакторе
image11 Вставить Вставить из буфера обмена находящиеся там элемент(ы) в редактор
image12 Поиск в проекте Вызов диалога поиска данных в проекте
image13 Выделение объекта Состояние, при котором возможно выделение объектов в редакторе с помощью мыши

Кнопки сборки проекта и установки связи с целевым устройством

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

Часть кнопок данной панели показана на рис. Рис. 4.

image14

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

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

Таблица 2 – Кнопки сборки проекта и связи с целевым устройством на панели инструментов

Внешний вид кнопки Наименование кнопки Функции кнопки
image15 Собрать проект Полная сборка (компиляция и компоновка) текущего проекта в папку build, находящейся в папке, где хранится проект
image16 Очистить папку для сборки проекта Удаление папки build, где был собран проект
image17 Соединиться с целевым устройством Соединиться с целевым устройством по адресу URI, который указан в настройках проекта (п. 6.5)
image18 Отключиться от целевого устройства Разрыв соединения с целевым устройством
image19 Показать сгенерированный IEC код Отобразить в отдельной панели (см. п. 6.5.1) код на языках ST и LD, который был транслирован в C код
image20 Передача прикладной программы Перенести исполняемый файл, полученный в ходе сборки проекта, на целевое устройство
image21 Запуск прикладной программы Запустить на исполнение собранную прикладную программу на целевом устройстве
image22 Остановить работающую прикладную программу Остановить исполнение прикладной программы на целевом устройстве

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

На рис. Рис. 5 приведено состояние данной в панели, когда соединение с целевым устройством установлено и на нём уже есть прикладная программа. Соответственно, можно запустить с помощью кнопки «Запуск прикладной программы» её или передать новую, используя кнопку «Передача прикладной программы».

image23

Рис. 5 – Панель инструментов сборки проекта и соединения с целевым устройством

Когда соединение с целевым устройством установлено, но при этом сделаны изменения проекте и необходима сборка нового исполняемого файла – во время сборки в целях защиты от ошибок кнопки становятся недоступными (см. рис. Рис. 6).

image24

Рис. 6 – Панель инструментов сборки проекта и соединения с целевым устройством

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

Дерево проекта

Дерево проекта обычно расположено в левой части окна среды разработки «Beremiz» (см. рис. Рис. 7) и отображает структуру элементов, из которых состоит проект.

image25

Рис. 7 – Дерево проекта

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

  • ресурсы;
  • программные модули (функции, функциональные блоки и программ) и их составные части;
  • типы данных;
  • плагины модулей УСО.

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

Добавление элемента в дерево проекта

В правом нижнем углу дерева проекта находится кнопка «+» (см. рис. Рис. 8), при нажатии на которую, появляется меню для выбора добавления необходимого элемента в проект.

image26

Рис. 8 – Всплывающее меню добавления элементов проекта на панели проекта

В случае добавления программного модуля, т.е. выбора пункта «Функция», «Функциональный блок» или «Программа», появится диалог «Создать новый программный модуль» (см. рис. Рис. 9).

image27

Рис. 9 – Диалог добавления программного модуля

В данном диалоге три поля:

  • «Имя программного модуля»;
  • «Тип программного модуля»;
  • «Язык».

Имя, присвоенное по умолчанию, может быть заменено на имя, соответствующее назначению данного программного модуля. В зависимости от того, какой программный модуль был выбран во всплывающем меню, в поле «Тип программного модуля» будет подставлено именование данного программного модуля. В поле «Язык» необходимо выбрать из списка (см. рис. Рис. 10) один из языков стандарта IEC 61131-3 (IL, ST, LD, FBD, SFC), на котором будут реализованы алгоритмы и логика работы данного добавляемого программного модуля.

image28

Рис. 10 – Выбор языка для программного модуля

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

image29

Рис. 11 – Диалог ввода имени создаваемого нового типа данных

Добавление нескольких элементов одного типа, например нескольких программ, функций, функциональных блоков приводит к их группировке в дереве проекта. Еще одним способом добавления нового элемента является нажатие правой клавиши мыши по определённому разделу в дереве проекта. Например, при нажатии на «Программы», появится всплывающее меню (см. рис. Рис. 12). В данном меню можно выбрать «Добавить программный модуль» или «Вставить программный модуль», если он был скопирован в буфер обмена.

image30

Рис. 12 – Всплывающее меню добавления и вставки программного модуля

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

  • панель настроек проекта;
  • панель, содержащая текстовый редактор языков ST и IL;
  • панель, содержащая графические редакторы диаграмм языков FBD, SFC, LD;
  • панель настроек ресурса;
  • панель редактирование типа данных;
  • панели настроек плагинов модулей УСО.

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

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

Удаление осуществляется наведением на определённый элемент в дереве проекта и нажатием на него правой клавишей мыши, а далее в появившемся меню выбирается пункт «Удалить» (см. рис. Рис. 13)

image31

Рис. 13 – Удаление элемента

Переименование, копирование и вставка программных модулей

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

image32

Рис. 14 – Пункт «Копировать программный модуль»

Вставка программного модуля осуществляется в меню (нажатие правой клавишей мыши по данному элементу) корневого элемента дерева проекта, соответствующего проекту (см. рис. Рис. 15):

image33

Рис. 15 – Пункт «Вставка программного модуля»

Другим способом выполнения вышеописанной операции является вызов меню для элемента группировки программных модулей одного типа (см. рис. Рис. 16).

image34

Рис. 16 – Пункт «Вставка программного модуля»

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

Панель списка переменных и констант

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

image35

Рис. 17 – Панель переменных и констант

Каждая переменная имеет следующие параметры:

  • имя, представляющее собой уникальный идентификатор переменной в пределах её области видимости и действия;
  • класс: «Глобальная», «Входная», «Выходная», «Входная/Выходная», «Локальная», «Внешняя», «Временная»;
  • тип, определяющий тип переменной и может принадлежать базовому типу (в соответствии со стандартом IEC 61131-3), пользовательскому типу (псевдониму и поддиапазону существующего типа, перечислению, массиву, структуре) или типу функционального блока (стандартному или пользовательскому);
  • адрес – идентификатор, необходимый для связывания данной переменной с переменной плагина модуля УСО (подробнее в п. 7.1.4);
  • начальное значение – инициализация переменной некоторым начальным значением;
  • опция – задание константности, сохраняемости (сохранение её значения в энергонезависимой памяти) и несохраняемости переменной;
  • документация – комментарий к назначению данной переменной или константы.

Первый символ имени переменной или константы должен быть буквой, или символом подчеркивания, далее могут следовать цифры, буквы латинского алфавита и символы подчеркивания. Набор возможных вариантов классов переменных зависит от типа элемента проекта, редактирования которого осуществляется. Двойной клик на полю «Адрес» вызывает появление кнопки «…», показанной на рис. Рис. 18:

image36

Рис. 18 – Поле «Адрес» панели переменных и констант

Нажатие на данную кнопку приводит к появлению диалога «Просмотр адресов» (см. рис. Рис. 19), т.е. списка переменных модулей УСО, которые могут быть связанны с переменой в панели переменных и констант. При выборе в данном диалоге определённой переменной и нажатии клавиши «OK» в поле «Адрес» будет добавлен адрес переменной внешнего модуля УСО.

image37

Рис. 19 – Диалог «Просмотр адресов», вызываемый из поля «Адрес»

Поле опции позволяет определить переменную как константу. Соответственно, если компилятор обнаружит в коде фрагмент, в котором происходит изменение этой переменной – будет выведена ошибка компиляции «Assignment to CONSTANT variables is not be allowed» в «Отладочной консоли». Квалификатор «Константа» не может быть использован в объявлении функциональных блоков. Добавление, удаление и перемещение переменных происходит с помощью специальных кнопок на панели переменных и констант. Описания данных кнопок представлены в таблице 3.

Панель переменных и констант предоставляет возможность фильтровать отображаемые переменные по их конкретным классам («Входная», «Выходная», «Входная/Выходная», «Внешняя», «Локальная», «Временная») или сгруппированным классам («Интерфейс» и «Переменные»). Данная операция выполняется с помощью функции «Фильтр по классам» (см. рис. Рис. 20).

image38

Рис. 20 – Фильтрация отображения переменных в панели переменных и констант

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

Таблица 3 – Кнопки добавления, удаление и перемещения переменных на панели переменных и констант

Внешний вид кнопки Наименование кнопки Функции кнопки
image39 Добавить переменную Добавить новую переменную в панель переменных и констант со значениями по умолчанию
image40 Удалить переменную Удалить выделенную переменную или константу
image41 Добавить переменные Добавление переменных внешних добавленных в проект плагинов (подробнее в п. 7)
image42 Переместить переменную вверх Перемещение переменной в таблице переменных и констант вверх на одну позицию
image43 Переместить переменную вниз Перемещение переменной в таблице переменных и констант вниз на одну позицию

Панель настройки проекта

Панель редактирования проекта (см. рис. Рис. 21) состоит из панели переменных и констант, а также настроек сборки проекта и данных о проекте.

image44

Рис. 21 – Панель настройки проекта

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

Настройки сборки проекта (см. рис. Рис. 22) позволяют задать следующие параметры:

  • «URI адрес» – унифицированный (единообразный) идентификатор ресурса, в данном случае под ресурсом понимается целевое устройство. Данный адрес необходим для режима отладки, о котором подробно рассказано в п. 9;
  • «Отключить внешние модули» – установка данного флага позволяет не учитывать при сборке проекта внешние плагины (см. п. 7);
  • «Библиотеки» – подключаемые дополнительные библиотеки: «Python_Library» и «SVGUI_Library»;
  • «Целевая платформа» – выбор из списка компилятора для архитектуры целевого устройства;
  • «Компилятор» – имя исполняемого файла компилятора (если он определён в глобальных переменных среды), либо полный путь к нему;
  • «CFLAGS» – указание флагов С компилятора;
  • «Компоновщик» – имя исполняемого файла компоновщика (если он определён в глобальных переменных среды), либо полный путь к нему;
  • «LDFLAGS» – указание флагов компоновщика;
  • «CygwinPath» – путь к папке, где находится UNIX-подобная среда Cygwin, необходимая для работы кросскомпиляторов.

image45

Рис. 22 – Панель с настройками проекта

Так же в настройках сборки проекта имеются две кнопки, описание которых приведено в таблице 4.

Таблица 4 – Кнопки в панели настройки сборки проекта

Внешний вид кнопки Наименование кнопки Функции кнопки
image46 Промежуточный IEC код Вызов «Панели отображения промежуточного кода» (см. п. 6.5.1), для вывода кода, из которого генерируется ST код всего проекта
image47 Файлы проекта Вызов «Панели файлов проекта», в которой можно выбрать файлы необходимые для передачи на целевое устройство вместе с исполняемым файлом (см. п. 6.5.2)

Вкладка «Проект» (см. рис. Рис. 23) позволяет задать: имя проекта, версию проекта, имя продукта, версию продукта и релиз продукта.

image48

Рис. 23 – Вкладка данные о проекте

Вкладка «Автор» (см. рис. Рис. 24) позволяет задать: Имя компании, URL-адрес компании, Имя автора, Название организации.

image49

Рис. 24 – Вкладка данные об авторе проекта

Вкладка «Параметры графики» (см. рис. Рис. 25) позволяет задать размеры страницы и разрешение сетки для редакторов диаграмм графических языков FBD, LD и SFC.

image50

Рис. 25 – Вкладка настроек параметров редакторов графических языков

Вкладка «Разное», изображенная на рис. Рис. 26, позволяет выбрать язык интерфейса для среды разработки «Beremiz» и указать дополнительное текстовое описание для проекта.

При запуске среды разработки «Beremiz» языком по умолчанию является язык, соответствующий текущей локали операционной системы, если файл для данной локали присутствуют. В случае отсутствия данных файлов, устанавливается английская локаль, которая доступна всегда. Файлы доступных локалей располагаются в папке beremiz/locale.

image51

Рис. 26 – Вкладка с настройками языка и описанием проекта

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

Панель отображения промежуточного кода

Данная панель (см. рис. Рис. 27) представляет собой текстовый редактор, отображающий с подсветкой синтаксиса и нумерацией строк код на языке ST, доступный только для чтения, без возможности редактирования.

image52

Рис. 27 – Панель отображения промежуточного кода на языке ST

Открытие данной панели доступно после сборки проекта с помощью соответствующей кнопки (см. таблица 4).

Панель файлов проекта

Панель файлов проекта (см. рис. Рис. 28) содержит встроенный проводник файлов (справа), в котором файлы могут быть выделены и перенесены в левую часть.

image53

Рис. 28 – Вкладка файлы проекта

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

Таблица 5 – Кнопки в панели файлов проекта

Внешний вид кнопки Наименование кнопки Функции кнопки
image54 Удалить файл списка файлов проекта Удаление выделенного файла из левого списка добавленных файлов в проект
image55 Добавить файл в проект Добавить выделенный файл из проводника файлов в проект
image56 Добавить файл в проводник Добавить в текущую папку проводника файлов слева выделенный файл в списке файлов проекта

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

Текстовый редактор языков ST и IL

Текстовый редактор языков ST и IL (см. рис. Рис. 29) позволяет создавать и редактировать алгоритмы и логику выполнения программных модулей на языках ST и IL.

image57

Рис. 29 – Редактор языков ST и IL

Он обеспечивают следующие возможности:

  • подсветку синтаксиса кода, написанного пользователем, т.е. выделения особыми параметрами шрифта ключевых слов данных языков;
  • нумерации строк, что может быть полезным при возникновении ошибок в программе, т.к. транслятор кода ST в C выдаёт номер строки, в которой найдена ошибка;
  • сворачивание кода структурных элементов языка: определения функции, определение типа и т.д.

Увеличение или уменьшение размера шрифт выполняется с помощью Ctrl + <колёсико мыши>.

Описание синтаксиса, основных конструкций и примеров использования языка ST приведены в приложении 3, а языка IL в приложении 4.

Графические редакторы диаграмм языков FBD, SFC, LD

Данные редакторы позволяют создавать и редактировать алгоритмы и логику выполнения программных модулей, написанных на языках FBD, SFC и LD.

Редактор языка FBD

Основными элементами языка FBD являются: переменные, функции, функциональные блоки и соединения. При редактировании FBD диаграммы, в панели инструментов появляется следующая панель (см. рис. Рис. 30).

image58

Рис. 30 – Панель редактирования FBD диаграмм

С помощью данной панели можно добавить все элементы языка FBD (назначение каждой кнопки описано в таблице 6).

Таблица 6 – Кнопки панели редактирования FBD диаграммы

Внешний вид кнопки Наименование кнопки Функции кнопки
image59 Выделение объектов на диаграмме Перевод указателя мыши в состояние, при котором можно осуществлять выделение объектов редакторе одного из графических языков
image60 Перемещение диаграммы Перевод указателя мыши в состояние, при котором можно изменять размеры редактора одного из графических языков, с помощью его перемещения
image61 Создать новый комментарий Вызов диалога создания комментария
image62 Добавить переменную Вызов диалога добавления переменной
image63 Добавить функцию или функциональный блок Вызов диалога добавления функции или функционального блока
image64 Добавить соединение Вызов диалога добавления соединения

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

Аналогичные действия можно выполнить с помощью всплывающего меню в области редактирования FBD диаграмм. Вызов данного меню происходит нажатием правой клавишей мыши и выбором пункта «Добавить», в котором будет: «Блок», «Переменная», «Соединение», «Комментарий» (см. рис. Рис. 31).

image65

Рис. 31 – Всплывающее меню редактора языка FBD

Далее рассмотрено добавление каждого элемента в отдельности.

Добавление функции или функционального блока

При добавлении функции или функционального блока одним из описанных выше способов, появится диалог «Свойства блока» (см. рис. Рис. 32).

image66

Рис. 32 – Свойства функции или функционального блока

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

Опция «Управление выполнением» добавляет в функцию или функциональный блок дополнительные параметры EN/ENO, о которых подробнее рассказано в приложении 5. Для сохранения изменений необходимо нажать «OK». Одним из свойств является «Порядок выполнения», его назначение рассматривается в п. 6.7.1.5.

Добавление (путем копирования существующего блока), удаление и переименование функции или функционального блока осуществляется при помощи команд меню «Редактирование» в главном меню или с помощью всплывающего меню диаграммы (см. рис. Рис. 31).

Следует отметить, что функция или функциональный блок могут быть так же добавлены из «Панели библиотеки функций и функциональных блоков» (см. п. 6.11), перетаскиванием мыши (Drag&Drop) выбранного блока на панель редактирования диаграммы FBD.

Добавление переменной

Переменные добавляются из панели переменных и констант с помощью перетаскивания (Drag&Drop) левой клавишей мыши за область, выделенную красным цветом на рис. Рис. 33, в область редактирования FBD диаграмм.

image67

Рис. 33 – Добавление переменной из панели переменных и констант

Изменить параметры переменной можно в диалоге «Свойства переменной» (см. рис. Рис. 34), нажав на неё два раза левой клавишей мыши.

image68

Рис. 34 – Свойства переменной

В данном диалоге можно задать порядок выполнения переменной и изменить её класс («Входная», «Выходная», «Входная/Выходная»).

Добавление соединения

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

После выбора добавления элемента «Соединение» появится диалог «Свойства соединения» (см. рис. Рис. 35).

image69

Рис. 35 – Диалог добавления соединения для FBD

В данном диалоге можно выбрать тип соединения: «Выходное соединение» – для выходного значения, «Входное соединение» – для входного значения, а так же необходимо указать имя данного соединения. На рис. Рис. 36 представлен пример использования соединений.

image70

Рис. 36 – Пример FBD диаграммы с использованием соединений

Функция «MAX» на выходе «OUT» имеет некоторое значение, которое с помощью соединения «RESULT» передаётся на вход «IN1» в функцию «MIN». В функции «MAX» используется соединение типа «Выходное соединение», в функции «MIN» – типа «Входное соединение». Имена у этих соединений, соответственно, одинаковые.

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

Редактор FBD диаграмм (и остальные редакторы, о которых будет рассказано ниже) позволяют добавлять комментарии на диаграмму. После выбора на панели редактирования комментария и добавления его в область редактирования появится диалог (см. рис. Рис. 37) для ввода текста комментария.

image71

Рис. 37 – Диалог добавления комментария

После нажатия кнопки OK комментарий появится на диаграмме (см. рис. Рис. 38).

image72

Рис. 38 – Добавленный комментарий к FBD диаграмме

Порядок выполнения функций и функциональных блоков

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

Если обратиться к рис. Рис. 39, то порядок выполнения функций будет следующим: 1) SUB 2) MUL 3) ADD.

image73

Рис. 39 – Схема, содержащая функции с порядком выполнения (обсчета) по расположению

Порядок выполнения может быть изменён вручную с помощью диалога свойств. Данная опция «Порядок выполнения» выделена красным цветом на рис. Рис. 40.

image74

Рис. 40 – Свойство порядок выполнения функции или функционального блока

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

image75

Рис. 41 – Схема, содержащая функции с порядком выполнения заданным вручную

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

Редактор языка LD

Язык LD или РКС (Релейно-Контактные Схемы) представляет собой графическую форму записи логических выражений в виде контактов и катушек реле. Основными элементами языка LD являются: шина питания, катушка, контакт. Добавить данные элементы, так же как и элементы языка FBD, можно несколькими способами.

Как только активной становится вкладка с редактированием LD диаграммы, в панели инструментов появляется панель (см. рис. Рис. 42) с элементами языка LD.

image76

Рис. 42 – Панель редактирования LD диаграмм

Аналогично редактору языка FBD с помощью данной панели можно добавить все элементы языка LD, а так же и FBD, т.к. есть возможность комбинированного применения языков на одной диаграмме. В таблице 7 приведено описание кнопок данной панели. Описание остальных кнопок, относящихся к языку FBD, находится в таблице 6.

Таблица 7 – Кнопки панели редактирования LD диаграммы

Внешний вид кнопки Наименование кнопки Функции кнопки
image77 Создать новую шину питания Вызов диалога создания новой шины питания
image78 Создать новую катушку Вызов диалога создания новой катушки
image79 Создать новый контакт Вызов диалога создания нового контакта

Во всплывающем меню для редактора LD диаграмм (см. рис. Рис. 43), так же как и в панели инструментов помимо элементов LD языка, доступны элементы языка FBD.

image80

Рис. 43 – Всплывающее меню редактора языка LD

Добавление шины питания

При добавлении шины питания, одним из описанных выше способов, появится диалог «Свойства шины питания» (см. рис. Рис. 44).

В данном диалоге указываются следующие свойства:

  • тип шины питания: шина питания слева или шина питания справа;
  • количество контактов на добавляемой шине питания.

image81

Рис. 44 – Свойство шины питания

На рис. Рис. 45 приведены две добавленные шины питания: левая с тремя контактами и правая с одним контактом.

image82

Рис. 45 – Шины питания на LD диаграмме

Добавление контакта

При добавлении контакта на LD диаграмму появится диалог «Редактирование значения контакта» (см. рис. Рис. 46).

image83

Рис. 46 – Редактирование контакта

Данный диалог позволяет определить модификатор данного контакта:

  • «Нормальный»;
  • «Инверсный»;
  • «Нарастание фронта»;
  • «Спад фронта».

Кроме того, диалог позволяет выбрать из списка «Имя» переменную, «связываемую» с данным контактом. Следует отметить, что «связываемые» переменные должны быть определены в панели переменных и констант для данного программного модуля типом BOOL.

Еще одним способом добавления контакта на диаграмму является метод Drag&Drop из панели переменных и констант переменной типа BOOL и класса: «Входная», «Входная/Выходная», «Внешняя», «Локальная», «Временная». Для этого необходимо зажать левой кнопкой мыши за первый столбец (который имеет заголовок #) переменную, удовлетворяющую описанным выше критериям и перенести в область редактирования диаграммы (см. рис. Рис. 47).

image84

Рис. 47 – Добавление контакта на диаграмму из панели переменных и констант

Добавление катушки

При добавлении катушки на LD диаграмму появится диалог «Редактирование значения катушки» (см. рис. Рис. 48).

image85

Рис. 48 – Редактирование катушки

В данном диалоге можно определить модификатор данного контакта:

  • «Нормальный»;
  • «Инверсный»;
  • «Установка»;
  • «Сброс»;
  • «Нарастание фронта»;
  • «Спад фронта».

Кроме того, производится выбор из списка «Имя» переменной, «связываемой» с данным контактом. Эти переменные, как и для контактов, должны быть определены в панели переменных и констант для данного программного модуля типом BOOL.

Аналогично добавлению контакта с помощью Drag&Drop можно добавить и катушки, но в данном случае переменная должна относиться к классу «Выходная» (см. рис. Рис. 49).

image86

Рис. 49 – Добавление катушки на диаграмму из панели переменных и констант

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

Редактор языка SFC

Основными элементами языка SFC являются: начальный шаг, шаг, переход, блок действий, дивергенции, «прыжок». Программа на языке SFC состоит из набора шагов, связанных переходами.

Как только активной становится вкладка с редактированием SFC диаграммы, в панели инструментов появляется следующая панель (см. рис. Рис. 50).

image87

Рис. 50 – Панель редактирования SFC диаграмм

В таблице 8 приведено описание кнопок данной панели. Описание остальных кнопок, относящихся к языку FBD и LD (за исключением катушки) и так же находящихся на этой панели, приведены в таблицах 6 и 7 соответственно.

Таблица 8 – Кнопки панели редактирования SFC диаграммы

Внешний вид кнопки Наименование кнопки Функции кнопки
image88 Создать новый начальный шаг Вызов диалога редактирования шага
image89 Создать новый шаг Вызов диалога редактирования шага
image90 Создать новый переход Вызов диалога редактирования перехода
image91 Создать новый блок действий Вызов диалога редактирования блока действий
image92 Создать новую дивергенцию Вызов диалога создания новой дивергенции и конвергенции
image93 Создать новый «прыжок» Вызов диалога создания «прыжка»

Далее даётся описание добавления приведённых в таблице 8 элементов языка SFC.

Добавление шага инициализации и шага

Процедура добавления шага инициализации и обычного шага ничем не отличается. В обоих случаях вызывается диалог «Редактировать шаг» (см. рис. Рис. 51).

image94

Рис. 51 – Диалоги редактирования шага инициализации и обычного шага SFC диаграммы

Согласно стандарту IEC 61131-3, на SFC диаграмме должен быть один шаг инициализации, который характеризует начальное состояние SFC-диаграммы и отображается со сдвоенными линиями на границах (см. рис. Рис. 52).

image95

Рис. 52 – Шаг инициализации языка SFC

В случае, если при добавлении шага не указано его имя – будет выдана ошибка (см. рис. Рис. 53).

image96

Рис. 53 – Ошибка отсутствии имени шага во время его добавления

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

  • «Входная»;
  • «Выходная»;
  • «Действие».

image97

Рис. 54 – Добавление шага на SFC диаграмму

«Действие» добавляет соединитель для связывания данного шага с блоком действий. «Входной» и «Выходной» соединители, как правило, соединены с переходом. Соответственно, после нажатия кнопки OK, на диаграмму будет добавлен шаг с указанными соединителями (см. рис. Рис. 55).

image98

Рис. 55 – Шаг SFC диаграммы с соединителями входа и действия

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

При добавлении на SFC диаграмму перехода, появится диалог «Редактировать переход» (см. рис. Рис. 56).

image99

Рис. 56 – Диалог редактирования перехода для SFC диаграммы

В данном диалоге необходимо выбрать тип перехода и его приоритет. Тип перехода может быть:

  • «Ссылка»;
  • «Встроенный код»;
  • «Соединение».

При выборе типа перехода «Ссылка» в открывающемся списке (см. рис. Рис. 57) будут доступны переходы, предопределённые в дереве проекта для данного программного модуля, написанного на языке SFC. Добавление предопределённого перехода описывается ниже после описания всех добавляемых элементов языка SFC.

image100

Рис. 57 – Всплывающий список с доступными предопределёнными переходами

При выборе типа перехода «Встроенный код» (см. рис. Рис. 58), условие перехода можно написать в виде выражения на языке ST.

image101

Рис. 58 – Условие перехода в виде встроенного кода, написанного на языке ST

Реализация перехода таким способом удобна в случае, когда необходимое условие короткое, например: переменные типа f3 и f4 INT равны. Встроенный код для такого условия выглядит следующим образом (см. рис. Рис. 58):

f3 = f4

Так же например можно в качестве условия просто указать переменную. В случае её значения равного 0 – будет означать FALSE, все остальные значения – TRUE.

При выборе типа перехода «Соединение» (см. рис. Рис. 59), в качестве условия перехода можно использовать выходные значения элементов языка FBD или LD.

image102

Рис. 59 – Выбор условия перехода как соединение с элементами других графических языков IEC 61131-3

При выборе типа перехода «Соединение», у добавленного перехода появится слева контакт, который необходимо соединить с выходным значением, например, функционального блока языка FBD или катушки LD диаграммы. Стоит отметить, что данное выходное значение должно быть типа BOOL. Ниже, на рис. Рис. 60 красным цветом выделен пример перехода, условия которого задано с помощью языка LD – двух последовательно соединённых контактов языка LD.

image103

Рис. 60 – Пример SFC диаграммы, в которой один из переходов задан с помощью языка LD

Добавление блока действий

При добавлении блока действий на диаграмму появится диалог «Редактировать свойство блока действий» (см. рис. Рис. 61).

image104

Рис. 61 – Диалог «Редактировать свойство блока действий»

Данный блок действий может содержать набор действий. Добавить новое действие можно нажав кнопку «Добавить» и установив необходимые параметры:

  • «Квалификатор»;
  • «Продолжительность»;
  • «Тип»: «Действие», «Переменная», «Встроенный код»;
  • «Значение»;
  • «Индикатор».

Поле «Квалификатор» определяет момент времени, когда действие начинается, сколько времени продолжается и когда заканчивается. Выбрать квалификатор можно из списка (см. рис. Рис. 62).

image105

Рис. 62 – Меню выбора квалификатора для действия в диаграмме SFC

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

Таблица 9 – Квалификаторы действий SFC диаграммы

Имя квалификатора Поведение блока действия
D Действие начинает выполняться через некоторое заданное время (если шаг еще активен) и выполняется до тех пор, пока данный шаг активен
L Действие выполняется в течение некоторого заданного интервала времени, после чего выполнение действия останавливается
N Действие выполняется, пока данный шаг активен
P Действие выполняется один раз, как только шаг стал активен
S Действие активируется и остается активным пока SFC диаграмма выполняется
R Действие выполняется, когда диаграмма деактивизируется
DS Действие начинается выполняться через некоторое заданное время, только в том случае если шаг еще активен
SL Действие активно в течении некоторого, заданного интервала
SD Действие начинается выполняться через некоторое время, даже в том случае если шаг уже не активен

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

«Тип» определяет код или конкретную манипуляцию, которая будет выполняться во время активации действия. В случае выбора «Действия» появляется возможность, как и в случае с переходом, использовать предопределённые действия в дереве проекта для данного программного модуля, написанного на языке SFC (см. рис. Рис. 63).

image106

Рис. 63 – Выбор предопределённого действия

Добавление предопределённого действия также как добавление предопределённого перехода описывается ниже после описания всех добавляемых элементов языка SFC.

В случае выбора типа действия «Переменная» в поле «Значение» появляется возможность выбрать переменные (см. рис. Рис. 64), относящиеся к данному программному модулю.

image107

Рис. 64 – Выбор предопределённой переменной

Как только шаг становится активным, данная переменная в зависимости от своего типа принимает значение 0, 0.0, FALSE и другие нулевые значения типов. Как только действие начинает выполняться, переменная принимает значение 1, 1.0, TRUE и другие единичные значения типов. В случае если действие прекратило своё выполнение переменная снова принимает значение 0, 0.0, FALSE и другое нулевое значение, в зависимости от своего типа.

В случае выбора «Встроенный код», появляется возможность в поле «Значение» написать на языке ST код, который будет выполняться, когда действие становится активным (см. рис. Рис. 65).

image108

Рис. 65 – Написание встроенного кода для действия

Следует отметить, что в конце встроенного кода для действия необходимо поставить «;», в отличие от встроенного кода для перехода.

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

image109

Рис. 66 – Ассоциирование шага step2 блоком действия, содержащим два действия

Добавление дивергенции

При добавлении дивергенции, появится диалог «Создать новую дивергенцию и конвергенцию» (см. рис. Рис. 67).

image110

Рис. 67 – Добавление дивергенции

В первую очередь следует выбрать тип дивергенции:

  • «Дивергенция»;
  • «Конвергенция»;
  • «Параллельная дивергенция»;
  • «Параллельная конвергенция».

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

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

image111

Рис. 68 – Пример SFC диаграммы, содержащей дивергенцию

Пример конвергенции выделен красным цветом на рис. Рис. 69.

image112

Рис. 69 – Пример SFC диаграммы, содержащей конвергенцию

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

image113

Рис. 70 – Пример SFC диаграммы, содержащей параллельную дивергенцию

Добавление «прыжка»

Элемент «прыжок» на SFC диаграмме подобен выполнению оператора GOTO при переходе на определённую метку в коде в различных языках программирования. После выбора добавления прыжка на SFC диаграмму, появится диалог (см. рис. Рис. 71), в котором необходимо выбрать из списка шаг, к которому будет происходить «прыжок» – переход от одного шага SFC диаграммы к другому.

image114

Рис. 71 – Диалог добавления «прыжка»

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

image115

Рис. 72 – Прыжок с шага «secondStep» на «firstStep»

Согласно стандарту IEC 61131-3, между шагом и прыжком должен обязательно быть определён переход.

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

В случае, если необходимо использовать определённое условие перехода между множеством шагов, есть возможность определить данное условие перехода в структуре SFC диграммы. Данная операция выполняется нажатием на данную SFC диаграмму на дереве проекта (п. 6.3) правой клавишей мыши и выбором «Добавить переход» (см. рис. Рис. 73).

image116

Рис. 73 – Всплывающее меню SFC диаграммы в панели проекта

Далее появится диалог под названием «Создать новый переход» (см. рис. Рис. 74). В нём необходимо выбрать уникальное имя перехода и язык, в котором будет описанно данное условие.

image117

Рис. 74 – Диалог «Создать новый переход»

В случае, если переходы с введённым именем уже существуют, то будет выведено сообщение об ошибке (см. рис. Рис. 75).

image118

Рис. 75 – Сообщение об ошибке добавления существующего программного модуля

Добавление действия в структуру SFC диаграммы (см. рис. Рис. 76) происходит аналогично добавлению перехода в данную структуру.

image119

Рис. 76 – Всплывающее меню SFC для структуры диаграммы

После выбора «Добавить действие» во всплывающем меню, вызванном с помощью нажатия правой кравиши мыши по программному модулю, написанном с помощью языка SFC, появится диалог «Создать новое действие» (см. рис. Рис. 77).

image120

Рис. 77 – Диалог «Создать новое действие»

В данном диалоге необходимо указать «Имя действия» (должно быть уникальным) и выбрать язык (ST, IL, FBD, LD), на котором будет написано данное действие. Если имя действия не заполнено будет выведено сообщение об ошибке (см. рис. Рис. 78).

image121

Рис. 78 – Ошибка не заполнения имени действия при его добавлении

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

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

Панель редактирования ресурса

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

image122

Рис. 79 – Вкладка ресурс главной рабочей области

Добавление переменных в ресурс ничем не отличается от добавления переменных в программные модули, единственное исключение – переменные могут быть только класса «Глобальная». Основной задачей данной панели является возможность добавить экземпляр, указать для него программный модуль типа «Программа», из ранее определённых в проекте, для поля «Тип» и выбрать задачу из добавленных в список «Задачи».

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

Панель редактирования типа данных (см. рис. Рис. 80) позволяет определить различные параметры создаваемого пользовательского типа данных.

image123

Рис. 80 – Вкладка создания нового типа данных

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

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

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

Прямое наследование

При выборе «Прямое наследование» (см. рис. Рис. 81), из списка указывается базовый тип и его начальное значение.

image124

Рис. 81 – Добавление псевдонима типа данных

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

Поддиапазон существующего типа

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

image125

Рис. 82 – Добавление нового типа данных, представляющего поддиапазон существующего типа

Перечисляемый тип

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

image126

Рис. 83 – Добавление перечисляемого типа данных

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

Таблица 10 – Кнопки редактирования значений перечисляемого типа

Внешний вид кнопки Наименование кнопки Функции кнопки
image127 Редактировать Редактировать выделенное поле в таблице
image128 Добавить Добавить новое поле в таблицу
image129 Удалить Удалить выделенное поле в таблице
image130 Переместить вверх Переместить вверх выделенное поле в таблице
image131 Переместить вниз Переместить вниз выделенное поле в таблице

Также есть возможность задать начальное значение данного перечисляемого типа в поле «Начальное значение».

Массив

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

image132

Рис. 84 – Добавление типа данных – массива

Размерность массива задаётся в следующем формате:

<начальное значение>..<конечное значение>

Структура

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

image133

Рис. 85 – Добавление типа данных – структуры

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

Выше были рассмотрены варианты редактирования различных элементов, из которых состоит проект, согласно стандарту IEC 61131-3. Далее будет продолжено рассмотрение остальных компонент среды разработки «Beremiz»

Панель экземпляров проекта

Панель экземпляров проекта (см. рис. Рис. 86) обычно располагается слева в среде разработки «Beremiz» и отображаемые в ней экземпляры зависят от выбранного элемента в дереве проекта.

image134

Рис. 86 – Панель экземпляров проекта

При выборе в дереве проекта элемента, соответствующего ресурсу, в панели экземпляров проекта будут отображены экземпляры (см. п. 6.8), определённые в данном ресурсе, а так же глобальные переменные ресурса. На рис. Рис. 87 показано, как в панели редактирования ресурса определена глобальная переменная «globalValue» и два экземпляра для программных модулей «program0» и «program1»:

image135

Рис. 87 – Два экземпляра проекта в панели редактирования ресурса

Соответственно, при выборе в дереве проекта ресурса, в котором определены экземпляры (описанные выше) и глобальная переменная, панель экземпляров будет выглядеть, как показано на рис. Рис. 88:

image136

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

При выборе в дереве проекта элемента, соответствующего программным модулям «Программа» и «Функциональный блок» в панели экземпляров будут отображены переменные, определённые в них. Ниже на рис. Рис. 89 приведён пример программного модуля типа «Программа» с именем «program0», в котором определено 6 переменных различных классов.

image137

Рис. 89 – Программный модуля типа «Программа»

Соответственно, при выборе в дереве проекта данного программного модуля в панели экземпляров будут отображены, определённые выше переменные (см. рис. Рис. 90).

image138

Рис. 90 – Панель экземпляров проекта при выборе в дереве проекта программного модуля типа «Программа»

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

Таблица 11 – Кнопки на панели экземпляров проекта

Внешний вид кнопки Функции кнопки
image139 Кнопка отображения графика изменения значения переменной в режиме отладки
image140 Кнопка запуска режима отладки для экземпляра

В случае нажатия кнопки запуска режима отладки для экземпляра программы, написанной на одном из графических языков (FBD, LD или SFC), откроется вкладка с панелью, на которой диаграмма будет отображена в режиме отладки (см. п. 9). Если кнопка запуска режима отладки нажимается для элемента переменной, то переменная будет добавлена в панель отладки (см. п. 6.14).

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

Панель библиотеки функций и функциональных блоков

Панель библиотеки функций и функциональных блоков (см. рис. Рис. 91), как правило, располагается справа в среде разработки «Beremiz». Она содержит коллекцию стандартных функций и функциональных блоков, разделённых по разделам в соответствии с их назначением, которые доступны при написании алгоритмов и логики работы программных модулей.

image141

Рис. 91 – Панель библиотеки функций и функциональных блоков

Выделены следующие разделы для функций и функциональных блоков: стандартные, дополнительные, преобразования типов данных, операций с числовыми данными, арифметических операций, временных операций, побитовых и смещения бит, операций выбора, операций сравнения, строковых операций, модулей «Python» и «SVGUI».

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

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

Имеется специальное поле поиска функционального блока по имени. Более подробное описание каждого функционального блока приведено в приложении 2.

Отладочная консоль

Панель, содержащая отладочную консоль (см. рис. Рис. 92), как правило, располагается в правом нижнем углу среды разработки «Beremiz».

image142

Рис. 92 – Успешная сборка в отладочной консоли

Она служит для отображения в виде текстовых сообщений:

  • результатов генерации ST и C кода;
  • результатов компиляции и компоновки прикладной программы;
  • процесса соединения и передачи прикладной программы на целевое устройство;
  • различных промежуточных манипуляций в процессы создания прикладной программы.

В случае, если необходимо вывести предупреждения среды разработки «Beremiz» или ошибки компиляторов во время их работы («MatIEC» или C кода) цвет вывода текстовых сообщений становится красным. Критические ошибки также выделяется красным цветом, но при этом еще желтым фоном (см. рис. Рис. 93).

image143

Рис. 93 – Ошибка сборки проекта в отладочной консоли

Поиск элементов в проекте

Для поиска интересующего элемента в проекте используется диалог «Поиск в проекте» (см. рис. Рис. 94). Его вызов происходит с помощью главного меню программы (п. 6.1) или панели инструментов (п. 6.2).

image144

Рис. 94 – Диалог поиска в проекте

В появившемся диалоге можно установить различные параметры поиска: шаблон поиска, область поиска, чувствительность к регистру при поиске, а так же записать шаблон поиска в виде регулярного выражения. После того как все параметры установлены, необходимо нажать кнопку «Поиск» в этом диалоге. Ниже на рис. Рис. 95 приведен пример поиска элемента с именем «ValueH».

image145

Рис. 95 – Результат поиска элемента в проекте

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

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

Панель отладки располагается в правой части среды разработки «Beremiz» (см. рис. Рис. 96).

image146

Рис. 96 – Панель отладки

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

Изменение значений переменной во время отладки прикладной программы осуществляется нажатием правой клавишей мыши в поле «Значение» интересующей переменной и в появившемся всплывающем меню (см. рис. Рис. 97) выбирается «Установить значение».

image147

Рис. 97 – Всплывающее меню манипуляций со значением переменной

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

image148

Рис. 98 – Установка значения переменной во время отладки

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

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

Панель графика изменения значения переменной в режиме отладки

Данная панель (см. рис. Рис. 99) открывается в отдельной вкладке в случае, если в панели экземпляров проекта (см. п. 6.10) для переменной нажимается кнопка отображения графика изменения значения переменной в режиме отладки (см. таблица 11).

image149

Рис. 99 – График изменения значения переменной во время выполнения прикладной программы

На данной панели есть возможность установить:

  • «Интервал» – временной отрезок, за который отображается изменений графика;
  • «Масштаб» – задание приближения отображения графика;
  • «Позиция» – перемещение по отображению графика, от начала и до конца.

Также на данной панели в правом нижнем углу располагаются вспомогательные кнопки. Описание данных кнопок приведено в таблице 12:

Таблица 12 – Кнопки на панели экземпляров проекта

Внешний вид кнопки Функции кнопки
image150 Очистка отображения графика
image151 Переход к отображению текущего значения графика, т.е. сдвиг параметра «Позиция» максимально вправо.
image152 Сброс настроек масштаба до настроек по умолчанию: x 1.0
image153 Экспортировать в буфер обмена значения изменения графика

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

  1. Внешние плагины для модулей УСО

    1. Механизм плагинов

Среда разработки «Beremiz» предоставляет интерфейс, позволяющий связывать внешние источники данных, такие как модули УСО (их параметры, состояния) с программными модулями (в частности с их переменными), написанными на языках высокого уровня (IEC 61131-3), из которых состоит прикладная программа. Интерфейс реализован с помощью механизма плагинов для модулей УСО. Данный механизм представляет собой:

  • классы для взаимодействия с компонентами «Beremiz» и редактор настройки различных параметров данного плагина, написанные на языке Python;
  • драйверы внешних устройств, написанные на языке C и компилируемые вместе со сгенерированным кодом проекта.

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

Добавление плагина в проект

Как упоминалось в п. 6.3, добавление плагинов, как и программных модулей, осуществляется через всплывающее меню дерева проекта (см. рис. Рис. 100).

image154

Рис. 100 – Всплывающее меню панели проекта

В меню для добавления доступны плагины модулей: «TCP интерфейс», «Modbus интерфейс» «МДВ», «МДВыв», «МАВ 1.2.1», «МАО». Подробнее о каждом плагине будет рассказано в следующих разделах. Так же операция добавления может быть выполнена через главное меню среды разработки «Beremiz» (см. рис. Рис. 101).

image155

Рис. 101 – Добавление плагинов через главное меню среды разработки «Beremiz»

После того, как в меню выбран пункт с необходимым плагином, он добавляется в структуру проекта. На рис. Рис. 102 в проект добавлено два плагина с именами «mdo_0» и «mav121_0», соответствующие модулям УСО: «МДВыв» и «МАВ 1.2.1».

image156

Рис. 102 – Структура проекта после добавления двух плагинов

Далее даётся описание процессу настройки плагина и заданию соответствующих ему параметров с помощью редактора плагина.

Редактор плагина

При двойном щелчке левой кнопкой мыши по плагину в дереве проекта появится вкладка с редактором данного плагина, позволяющим задать настройки модуля и различные параметры в зависимости от типа модуля. На рис. Рис. 103 приведен пример вкладки с редактором плагина для модуля «mdo_0» (модуль дискретного вывода «МДВыв»).

image157

Рис. 103 – Редактор плагина модуля «МДВыв»

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

  • уникальное имя плагина;
  • идентификатор плагина в проекте;
  • флаги «CFLAGS» и «LDFLAGS» необходимые, соответственно, для компиляции и компоновки, файлов (содержащих драйвера модулей УСО), соответствующих данному плагину.

В случае указания имени плагина, которое уже имеется в проекте, будет добавлен цифровой постфикс, например, «mdo_1_1» (см. рис. Рис. 104).

image158

Рис. 104 – Добавление цифрового постфикса для уникальности имени плагина

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

Идентификаторы переменных плагина

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

image159

Рис. 105 – Отображение уникальных идентификаторов добавленных плагинов

Данный идентификатор представлен в следующем формате:

<идентификатор плагина>.x, где

<идентификатор плагина> – является уникальным числовым идентификатором в рамках текущего проекта и присваивается автоматически средой разработки «Beremiz», но может быть изменён с помощью редактора плагина;

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

Изменить идентификатор плагина можно с помощью редактора плагина, как показано на рис. Рис. 106, с помощью стрелочек «Вверх» и «Вниз», выделенных красным цветом.

image160

Рис. 106 – Изменение идентификатора плагина с помощью редактора плагина

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

Адреса переменных плагина

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

<символ «%»><идентификатор класса><идентификатор типа><идентификатор плагина><символ «.»><номер переменной>

Идентификатор класса переменной представляет собой символ «I» – если переменная входная и «Q» – если переменная выходная. Далее в зависимости от типа переменной плагина подставляется соответствующий идентификатор для данного типа. Соотношение типов данных и их идентификаторов приведено в таблице 13. В конце добавляется точка и порядковый номер переменной в данном плагине.

Таблица 13 – Соотношение типов данных и идентификаторов типа

Тип Идентификатор типа
BOOL X
SINT, USINT, STRING, BYTE B
INT, UINT, WORD, WSTRING W
DINT, UDINT, REAL, DWORD D
LINT, ULINT, LREAL, LWORD L

Например, входная переменная, соответствующая дискретному сигналу (типа BOOL) под номером 1 для модуля с идентификатором 0.x будет выглядеть следующим образом: «%IX0.1».

В среде разработки «Beremiz» существуют следующие правила для переменных внешних плагинов (модулей):

  1. Переменная под номером 0 (оканчивающаяся на 0), например, %QD0.0 является переменной состояния в целом модуля;
  2. Переменная под нечётным номером (оканчивающаяся на 1, 3, 5 и т.д.) является переменной значения сигнала для канала модуля или другого источника данных модуля, например %ID1.5;
  3. Переменная под чётным номером и большая 0 (оканчивающаяся на 2, 4, 6) является переменной состояния для канала модуля или другого источника данных модуля, например %QD1.6.

Следует отметить правило для переменных внешних плагинов: 2*n-1 – значение, 2*n – состояние, где n – номер канала или другого источника данных модуля. Например, переменная %ID1.5 является значением 3-го сигнала, а переменная %ID1.6 является состоянием 3-го сигнала.

Далее подробнее рассказано о каждом плагине доступном в среде разработки «Beremiz» и его редакторе. В п. 7.5 даётся описание процесса связывания переменных плагинов и переменными программных модулей с применением описанных выше адресов переменных плагина.

  1. Плагины дискретных модулей

    1. Модуль дискретного ввода «МДВ»

Редактор модуля дискретного ввода «МДВ» с 32 каналами (см. рис. Рис. 107), позволяет задать:

  • «Базовый адрес».

image161

Рис. 107 – Редактор модуля дискретного ввода «МДВ»

В виде таблицы отображен список доступных для связывания переменных. Переменная с нулевым номером («mdv_0_condition») хранит состояние всего модуля в целом. Переменная с нечётным номером хранит значение сигнала. Например, «mdv_0_signal2» соответствует второму сигналу модуля дискретного ввода. А перемеменная «mdv_0_condition4» – соответствует состоянию 4 сигнала. Для дискретных модулей состояние сигналов равно по умолчанию 0.

Модуль дискретного вывода «МДВыв»

Редактор модуля дискретного вывода «МДВыв» с 32 каналами (см. рис. Рис. 108) позволяет задать:

  • «Базовый адрес».

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

image162

Рис. 108 – Редактор модуля дискретного вывода «МДВыв»

  1. Плагины аналоговых модулей

    1. Модуль аналогового ввода «МАВ 1.2.1»

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

В целом для модуля можно установить:

  • «Базовый адрес»;
  • «Минимальное напряжение»;
  • «Максимальное напряжение»;
  • «Тип модуля»;
  • «Представление измерений».

image163

Рис. 109 – Редактор плагина модуля аналогового ввода «МАВ 1.2.1»

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

Данный редактор позволяет задать для каждого сигнала:

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

Значения множителя и слагаемого могут быть заданы автоматическим вычислением, при выборе флажка «Автоматическое вычисление» (см. рис. Рис. 110).

image164

Рис. 110 – Установка в ручную значений множителя и слагаемого

Модуль аналогового вывода «МАО»

Редактор данного модуля представлен на рис. Рис. 111.

В целом для модуля можно установить:

  • «Базовый адрес»;
  • «Минимальное напряжение»;
  • «Максимальное напряжение»;
  • «Тип модуля»;
  • «Представление измерений».

image165

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

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

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

  • множитель;

  • слагаемое;

  • фильтрация шумов сигнала, указывающая в процентах, изменения отклонения значения сигнала, которые не будут рассматриваться;

  • минимальное электрическое значение измеряемого сигнала, которое может выдать датчик;

  • максимальное электрическое значение измеряемого сигнала, которое может выдать датчик;

  • минимальное значение физической величины, соответствующее минимальному значению сигнала датчика;

  • значение нагрузочного резистора.

  • максимальное значение физической величины, соответствующее максимальному значению сигнала датчика;

    1. Плагин «TCP интерфейс»

Плагин «TCP интерфейс» позволяет различным внешним модулям (для которых также есть соответствующие плагины) и прикладным программам взаимодействовать (получать и передавать различные данные) с устройствами «верхнего уровня». При использовании плагина «TCP интерфейс», в общих настройках плагина (см. рис. Рис. 112) необходимо указать следующие флаги компоновки (LDFLAGS):

-L. -ltcpsrv -L. –ltagsmanager

image166

Рис. 112 – Установка флагов компоновки для плагина «TCP интерфейс»

Данные флаги необходимы, т.к. при выполнении плагина «TCP интерфейс» происходит обращение к библиотекам libtcpsrv.so и libtagsmanager.so, которые находятся на целевом устройстве. Редактор плагина «TCP интерфейс» (см. рис. Рис. 113) позволяет выполнять следующие операции:

  • задать адрес порта, по которому могут подключаться внешние программные средства;
  • добавлять/удалять переменные, которые могут быть связаны с программами, написанными на языках IEC 61131-3;
  • добавить/удалить переменные, связанные с различными внешними модулями (дискретными, аналоговыми), плагины, которых уже добавлены (ниже про данную возможность рассказано подробнее).

image167

Рис. 113 – Редактор плагина «TCP интерфейс»

Связывание переменных внешних модулей с плагином «TCP интерфейс»

Связывание переменных внешних модулей с плагином «TCP интерфейс» происходит следующим образом. Во-первых, в проект добавляется необходимый плагин, соответствующий внешнему модулю, переменные которого будут связываться. Данное действие осуществляется с помощью дерева проекта (п. 6.3) или главного меню программы (п. 6.1). После того как плагин добавлен, необходимо объявить интересующние переменные (внешнего модуля) глобальными на уровне проекта. Данную операцию оптимальнее выполнить с помощью кнопки «Добавить переменные» (см. таблица 3) на панели переменных и констант.

В появившемся диалоге (см. рис. Рис. 114) выбран модуль с идентификатором «mdo_0» («МДВыв») и отмечены галочкой необходимые переменные, соответствующие определённым сигналам.

image168

Рис. 114 – Выбор переменных модулей для добавлениях их в глобальную область проекта

Нажатие кнопки «Добавить» добавляет отмеченные переменные на панель переменных и констант. После того как переменные добавлены глобально на уровне проекта (см. рис. Рис. 115), они будут доступны для связывания в плагине «TCP интерфейс».

image169

Рис. 115 – Добавленные глобальные переменные модуля «mdo_0» («МДВыв»)

Далее все операции выполняются уже в редакторе плагина «TCP интерфейс». В нём необходимо нажать кнопку «Модули» (см. рис. Рис. 116).

image170

Рис. 116 – Выбор добавления переменных модулей, объявленных глобально

В появившемся диалоге будут доступны все переменные модулей, объявленные глобально. Далее необходимо выделить с помощью галочки интересующие переменные и нажать кнопку «Добавить» (см. рис. Рис. 117).

image171

Рис. 117 – Добавление глобальных переменных проекта как переменных плагина «TCP интерфейс»

После этого переменные будут добавлены как переменные плагина «TCP интерфейс» (см. рис. Рис. 118).

image172

Рис. 118 – Добавленные переменные модуля «mdo_0» («МДВыв») как переменные плагина «TCP интерфейс»

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

Добавление собственных переменных плагина «TCP интерфейс»

Плагин «TCP интерфейс» позволяет добавлять собственные переменные, которые будут доступны программным модулям как переменные плагина модуля УСО. Переменные могут быть следующих типов: DINT, LINT, REAL, LREAL. Информация о типах данных приведена в приложении 3 в описании языка ST. Добавление новой переменной осуществляется с помощью кнопки «Добавить переменную» (см. рис. Рис. 119).

image173

Рис. 119 – Добавление собственной переменной плагина «TCP интерфейс»

В добавленном поле необходимо указать «Имя», «Класс» и «Тип» для новой переменной (см. рис. Рис. 120).

image174

Рис. 120 – Указание типа добавленной переменной в плагин модуля «TCP интерфейс»

Поле «Адрес» для новой переменной будет None, что означает, что переменная не связана ни с каким внешним модулем. После того как переменная добавлена, в данном случае её имя «tcp_in», класс – «input» (т.е. входная) и тип – REAL (вещественный), она доступна как переменная плагина модуля «TCP интерфейс» в программных модулях (см. рис. Рис. 121).

image175

Рис. 121 – Добавленная переменная «tcp_in» модуля «TCP интерфейс»

Связывание переменных программных модулей с внешними переменными

Связывание внешних переменных с переменными программных модулей осуществляется с помощью адресов переменных, рассмотренных в п. 7.1.4. Данная операция осуществляется следующим образом. Выбирается программный модуль, переменные которого необходимо связать с переменными плагинов. Далее на панели переменных и констант (п. 6.4) выбирается переменная, которую необходимо связать и выполняется двойной щелчок мышью по полю «Адрес» данной переменной для того, чтобы появилась кнопка «…» (см. рис. Рис. 122).

image176

Рис. 122 – Поле «Адрес» панели переменных и констант

Нажав появившуюся кнопку «…» в поле «Адрес» появится диалог «Просмотр адресов» (см. рис. Рис. 123), в котором отображаются доступные для связывания переменные плагинов. Список отображаемых переменных в данном диалоге зависит от типа и класса переменной в панели переменных и констант, с которой связывается внешняя переменная.

image177

Рис. 123 – Диалог просмотра адресов

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

image178

Рис. 124 – Добавленный адрес переменной внешнего модуля

Среда разработки «Beremiz» позволяет добавить сразу множество переменных, связанных с плагинами внешних модулей. На панели переменных и констант имеется кнопка «Добавить переменные» (см. таблица 3), которая вызывает диалог «Модули» (см. рис. Рис. 125).

image179

Рис. 125 – Диалог добавления переменных модулей

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

image180

Рис. 126 – Добавление переменных с помощью диалога «Модули»

В данном диалоге имеются кнопки «Выделить всё» и «Снять выделение», позволяющие быстро выделить все переменные текущего модуля (выбранного из списка, находящегося над кнопками) или, соответственно снять выделение со всех переменных.

Работа с проектом

В данном разделе рассмотрены основные приёмы работы в среде разработки «Beremiz», которые необходимы при создании прикладной программы.

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

Новый проект создаётся с помощью главного меню «Файл» – «Новый» (см. рис. Рис. 127), либо с помощью кнопки «Новый» на панели управления.

image181

Рис. 127 – Создание нового проекта с помощью главного меню

Далее появится диалог (см. рис. Рис. 128), в котором необходимо выбрать папку, где будет храниться данный проект.

image182

Рис. 128 – Диалог выбора папки для нового проекта

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

  • «beremiz.xml» – в данном XML файле сохраняются настройки специфичные для среды разработки «Beremiz» относительно проекта;

  • «plc.xml» – в данном XML файле сохраняется полное описание проекта: всех программных модулей, ресурсов, пользовательских типов данных, данных о проекте, настроек редакторов графических языков IEC 61131-3;

  • папки с настройками плагинов внешних модулей УСО;

  • папка «build», которая хранит генерируемый ST и C код, а также получаемый исполняемый бинарный файл.

    1. Настройка проекта

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

image183

Рис. 129 – Вызов панели настройки проекта с помощью корневого элемента дерева проекта

Глобальные переменные проекта

Глобальные переменные позволяют программным модулям типа «Программа» и «Функциональный блок» использовать общие переменные, которые будут определены в глобальной области видимости проекта.

Ниже, на рис. Рис. 130, в панели переменных и констант создана глобальная переменная «globalValue» с начальным значением 10, с помощью кнопки «Добавить переменную» (см. таблица 3).

image184

Рис. 130 – Объявление глобальный переменной проекта

Для того чтобы к данной глобальной переменной можно было обращаться из программных модулей типа «Программа» или «Функциональный блок» необходимо в их панели редактирования в панели переменных и констант создать переменную с таким же именем, как и ранее объявленная глобальная, и установить её класс «Внешняя». На рис. 131 приведён пример объявления в программном модуле «program0» переменной «globalValue» класса «Внешняя», типа INT и изменение её значения с помощью языка ST.

image185

Рис. 131 – Использование глобальной переменной в программном модуле

На рис. 132 в программном модуле «program1» также определена переменная «globalValue» класса «Внешняя» и изменение её значения с помощью языка ST.

image186

Рис. 132 – Использование глобальной переменной в программном модуле

Соответственно, переменная «globalValue» будет изменяться во время выполнения в двух программных модулях: «program0» и «program1».

Настройки сборки проекта и соединения с целевым устройством

Для использования написанной прикладной программы необходимо её собрать (скомпилировать и скомпоновать), т.е. получить исполняемый файл и передать на целевое устройство для отладки или просто исполнения. В связи с этим основными настройками являются: «URI адрес» целевого устройства и целевая платформа, указывающая архитектуру платформы целевого устройства. На рис. 133 данные параметры выделены красным цветом.

image187

Рис. 133 – Выбор целевой платформы для сборки прикладной программы

Как правило, «URI адрес» указывается в формате:

PYRO://<IP-адрес целевого устройства>:<порт>

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

Например, целевая платформа указывается «Sparc», если архитектура целевого устройства «SPARC».

Данные о проекте

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

image188

Рис. 134 – Указание данных о проекте

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

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

Программные модули

Добавление программных модулей (программ, функций, функциональных блоков) осуществляется с помощью всплывающего меню дерева проекта, в котором необходимо выбрать пункт «Функция», «Функциональный блок» или «Программа». Далее появится диалог «Создать новый программный модуль» (см. рис. 135).

image189

Рис. 135 – Диалог добавления программного модуля

В данном диалоге три поля:

  • «Имя программного модуля»;
  • «Тип программного модуля»;
  • «Язык».

Имя, присвоенное по умолчанию, может быть заменено на имя, соответствующее назначению данного программного модуля. В зависимости от того, какой программный модуль был выбран во всплывающем меню, в поле «Тип программного модуля» будет подставлено именование данного программного модуля. В поле «Язык» необходимо выбрать из списка (см. рис. 136) один из языков стандарта IEC 61131-3 (IL, ST, LD, FBD, SFC), на котором будет реализованы алгоритмы и логика работы данного добавляемого программного модуля.

image190

Рис. 136 – Выбор языка для программного модуля

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

Программа

Ниже будет приведён пример добавления в проект программы, написанной на языке FBD. Логика и алгоритм работы данного программного модуля следующие: определены две глобальные переменные «globalValue» и «globalLevel», если значение «globalValue» больше 10.0, то присвоить переменной «globalLevel» значение 100, в противном случае присвоить «globalLevel» значение 50.

Сначала следует добавление программы в проект, осуществляемое с помощью меню дерева проекта, выбором пункта «Программа» (см. рис. 137):

image191

Рис. 137 – Выбор в дереве проекта добавления программы

В появившемся диалоге (см. рис. 138) выбирается язык FBD и нажимается кнопка «OK».

image192

Рис. 138 – Диалог добавления программы

Далее в открывшейся вкладке с панелью редактирования данного программного модуля в панели переменных и констант (см. рис. 139) добавляются переменные: «globalValue» типа REAL, класса «Внешняя» и «globalLevel» типа INT, класса «Внешняя».

image193

Рис. 139 – Объявление в программе внешних переменных

Предполагается, что эти переменные уже определены глобальными переменными проекта в панели редактирования проекта (см. рис. 140), как описывается в п. 8.2.1.

image194

Рис. 140 – Глобальные переменные проекта

Далее необходимо обратиться к редактору языка FBD. Для написания алгоритма и логики выполнения данной программы будут добавлены две функции: «GT» и «SEL». Функция «GT» обозначает сравнение «Больше чем» и находится во вкладке «Операции сравнения». Она может содержать от 2 до 20 входных значений (в данном примере их будет 2) и одно выходное значение «OUT». Если значение «IN1» больше значения «IN2», то на выходе «OUT» будет TRUE, в противном случае FALSE.

Функция «SEL» обозначает «Выбор одного из двух значений» и находится во вкладке «Операции выбора». Она содержит три входных переменных «G», «IN0», «IN1» и одну выходную «OUT». Если «G» равно 0 (или FALSE), то выходной переменной «OUT» присваивается значение «IN0». Если «G» равно 1 (или TRUE), то выходной переменной «OUT» присваивается значение «IN1».

Добавление данных функций удобнее осуществить переносом соответствующей функции с помощью мыши (Drag&Drop) из панели библиотеки функций и функциональных блоков в область редактирования FBD диаграммы данного программного модуля (см. рис. 141):

image195

Рис. 141 – Добавление двух функций на FBD диаграмму

Далее, так же используя мышь, переносятся переменные «globalValue» и «globalLevel» на FBD диаграмму. Как уже упоминалось ранее (см. п. 6.7.1.2), необходимо левой клавишей мыши зажать столбец «#» для переменной в панели переменных и констант, далее перенести указатель на область редактирования FBD диаграммы и отпустить кнопку мыши (Drag&Drop). Такую манипуляцию нужно произвести для обоих переменных (см. рис. 142).

image196

Рис. 142 – Перенесённые переменные на FBD диаграмму

Переменную «globalValue» можно сразу соединить с входом «IN1» функции «GT». Чтобы переменную «globalValue» можно было соединить с выходом «OUT» функции «SEL», необходимо сделать двойной щелчок левой кнопкой мыши по «globalValue» на FBD диаграмме и в появившемся диалоге «Свойства переменной» указать класс «Выходная», как показано на рис. 143:

image197

Рис. 143 – Указание класса «Выходная» для переменной

После этого переменную «globalValue» можно соединить с выходом «OUT» функции «SEL» и выход «OUT» функции «GT» с входом «G» функции «SEL» (см. рис. 144).

image198

Рис. 144 – Соединение входов и выходом функций на диаграмме FBD

Далее необходимо добавить 3 числовых литерала, которые будут напрямую соединены с входом «IN2» функции «GT» и входами «IN0» и «IN1» функции «SEL». В панели редактирования FBD диаграммы выбирается кнопка «Добавить переменную» (см. таблица 6) и в появившемся диалоге «Свойства переменной» (см. рис. 145) в поле выражения пишется «10.0». Нажимается кнопка «OK».

image199

Рис. 145 – Добавление переменной на FBD диаграмму

Добавленный литерал соединяется с входом «IN2» функции «GT», как показано на рис. 146:

image200

Рис. 146 – Соединение добавленной переменной с выходом функции

Аналогичным образом создаются литералы со значениями 50 и 100 для входов «IN0» и «IN1» функции «SEL» и соединяются с ними (см. рис. 147).

image201

Рис. 147 – Пример программного модуля, написанного на языке FBD

Соответственно, в случае если значение переменной «globalValue» больше 10.0, то на выходе «OUT» функции «GT» будет значение TRUE, тем самым на вход функции «SEL» поступит тоже True и выходное значение «OUT» будет равно «IN1», т.е. 100.

Далее будет рассмотрен пример добавления программного модуля типа «Функция»

Функция

Ниже будет приведен пример добавления в проект функции, и её использование в программном модуле типа «Программа». Добавление функции осуществляется с помощью меню дерева проекта, выбором пункта «Функция» (см. рис. 148):

image202

Рис. 148 – Выбор в дереве проекта добавления функции

В появившемся диалоге «Создать новый программный модуль» в поле «Имя программного модуля» укажем имя «GetStatus» и выберем «Язык» ST из списка языков стандарта IEC 61131-3 (см. рис. 149). Язык SFC не может быть использован для описания алгоритма и логики работы функции.

image203

Рис. 149 – Диалог добавления пользовательской функции

В появившейся панели редактирования функции выберем тип возвращаемого значения функции – STRING (см. рис. 150).

image204

Рис. 150 – Выбор возвращаемого значения фунцией

Далее в панели переменных и констант указываются переменная «value» (хотя переменных может быть несколько) класса «Входная» и в редакторе языка ST пишется алгоритм и логика работы данной функции, как показано на рис. 151:

image205

Рис. 151 – Опредение функции алгоритма и логики выполнения фунции

С помощью блока CASE…OF определяются возвращаемые значения функции в зависимости от значения «value». Если ни одно из 3 условий не подходит, то возвращается «Error».

Далее необходимо создать программный модуль «Программа» на языке FBD и в появившейся панели его редактирования добавить две переменные «in_value» и «out_status», как показано на рис. 152:

image206

Рис. 152 – Добавленный программный модуль «Программа» на языке FBD

На панели библиотеки функций и функциональных блоков в разделе «Пользовательские программные модули» необходимо выбрать функцию «GetStatus» и с помощью указателя мыши (зажав левую кнопку мыши) перенести данную функцию (Drag&Drop) в область редактирования FBD диаграммы программного модуля «program0» (см. рис. 153).

image207

Рис. 153 – Добавление на FBD диаграмму пользовательской функции

Аналогичным образом «перетаскиваются» переменные из панели переменных и констант в область редактирования FBD диаграммы (см. рис. 154).

image208

Рис. 154 – Добавление на FBD диаграмму переменных из панели переменных и констант

Для того чтобы переменную «out_status» можно было соединить с «выходом» функции «GetStatus», необходимо в диалоге свойств данной переменной (который вызывается двойным щелчком левой кнопки мыши по переменной в области редактирования FBD диаграммы) указать класс «Выходная» (см. рис. 155).

image209

Рис. 155 – Изменение «класса» переменной FBD диаграммы

Теперь переменные «in_value» и «out_status» можно соединить соответственно с «входом» и «выходом» функции «GetStatus» (см. рис. 156).

image210

Рис. 156 – Пример FBD диаграммы с использованием пользовательской функции

В результате созданная функция будет возвращать текстовое значение в переменную «out_status» в зависимости от значения переменной «in_value». Стоит отметить, что в данном примере значение переменной «in_value» постоянно равно 5 (для упрощения примера), но она также может зависеть от других переменных или быть связана, используя поле «Адрес», например с переменными внешних модулей УСО.

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

Добавление пользовательского функционального блока происходит аналогично добавлению функции. Ниже приведён пример создания функционального блока и его использования. После выбора в дереве проекта добавить «Функциональный блок», создаётся функциональный блок с именем «RectParams» (см. рис. 157), который будет считать площадь и периметр прямоугольника с заданными сторонами.

image211

Рис. 157 – Диалог добавления пользовательского функционального блока

В отличие от функции, функциональный блок может быть описан на любом языке стандарта IEC 61131-3, включая язык SFC. На рис. 158 показана реализация данного функционального блока на языке ST.

image212

Рис. 158 – Описание пользовательского функционального блока на языке ST

Возвращаемого значения у функционального блока нет. Добавленные переменные, обозначающие ширину – «width» и высоту – «height» имеют класс «Входная» и тип INT. Выходные значения: площадь – «area» и периметр – «perimeter» определены соответственно классом «Выходная» и так же типа INT. Ниже находится текст алгоритма расчёта площади и периметра на языке ST. Реализованный функциональный блок становится доступным в панели библиотеки функций и функциональных блоков (см. п. 6.11) и может использоваться в программных модулях типа «Программа» и «Функциональный блок». На рис. 159 показано использование созданного функционального блока «RectParams» в FBD диаграмме.

image213

Рис. 159 – Использование созданного функционального блока в FBD диаграмме

С входом «width» соединена переменная «width», а с входом «height» литерал «40». Результат выполнения данного функционального блока также помещается, соответственно, в «area» и «perimeter». Следует отметить, что при попытке удаления функции или функционального блока из проекта (см. рис. 160), где эти добавленные программные модули уже используются, будет выдана ошибка.

image214

Рис. 160 – Удаление функционального блока

Пример сообщения об ошибке удаления программного модуля приведен на рис. 161.

image215

Рис. 161 – Сообщение об ошибке при удалении функционального блока

Плагины модулей УСО

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

В проект, содержащий программный модуль типа «Программа» («program0»), написанный на языке ST, добавляются два плагина модулей УСО: «МДВ-У» и «МДВыв-У». Данная операция осуществляется с помощью соответствующих пунктов меню дерева проекта (см. рис. 162):

image216

Рис. 162 – Выбор в меню дерева проекта плагина модуля «МДВ-У» для добавления в проект

После добавления плагинов модулей «МДВ-У» и «МДВыв-У», дерево проекта выглядит, как показано на рис. 163:

image217

Рис. 163 – Дерево проекта после добавления двух плагинов модулей УСО

Далее в программном модуле «program0» необходимо создать переменные, связанные с переменными модулей, которые были добавлены выше. Т.к. переменных будет добавлено несколько, данную операцию удобнее всего осуществить с помощью кнопки «Добавить переменные» (см. таблица 3) на панели переменных и констант. В появившемся диалоге отображены переменные модуля «mdo-0». Далее отмечаются необходимые для добавления переменные данного модуля и нажимается кнопка «Добавить», как показано на рис. 164:

image218

Рис. 164 – Добавление переменных модуля «mdo-0»

В «Списке модулей» выбирается модуль «mdv-0» и отмечаются интересующие переменные. Выполняется аналогичная операция добавления с помощью кнопки «Добавить» (см. рис. 165).

image219

Рис. 165 – Добавление переменных модуля «mdv-0»

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

image220

Рис. 166 – Панель переменных и констант после добавления переменных модулей УСО

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

image221

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

Если первый или второй сигналы, соответственно переменные «mdv0_singnal1» и «mdv0_singnal2», модуля «МДВ-У» (в проекте «mdv0») равны TRUE, то переменным модуля «МДВыв-У» «md0_signal2» и «md0_signal3» присваивается значение TRUE, в противном случае – FALSE. Если третий сигнал модуля «МДВ-У» «mdv0_signal3» равен FALSE, то переменной модуля «МДВыв-У» «md0_signal1» присваивается TRUE, в противном случае FALSE.

Ресурс

Согласно стандарту IEC 61131-3, каждый проект должен иметь как минимум один ресурс, с определённым в нём как минимум одним экземпляром. Экземпляр представляет собой элемент, связанный с программным модулем типа «Программа» и одной определённой задачей. По умолчанию, среда разработки «Beremiz» создаёт для нового проекта один ресурс.

Глобальные переменные ресурса

Глобальные переменные ресурса объявляются аналогично глобальным переменным проекта (см. п. 8.2.1) на панели переменных и констант (см. рис. 168) выбранного ресурса с использованием кнопки «Добавить переменную», либо «Добавить переменные» (см. таблица 3).

image222

Рис. 168 – Пример объявления глобальной на уровне проекта константы

Использование данных глобальных переменных на уровне ресурса также аналогично использованию глобальных переменных проекта в программных модулях. Ниже, на рис. 169, показано, как в программном модуле «program0» добавлено две переменных класса «Внешняя» с такими же именами, как и глобальными переменные, объявленные выше для ресурса.

image223

Рис. 169 – Объявление и использование глобальных переменных ресурса

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

Задачи и экземпляры ресурса

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

После добавления задачи с помощью кнопки «Добавить» (данная кнопка аналогична кнопки «Добавить» на панели переменных и констант), необходимо задать её уникальное имя (поле «Имя») и выбрать тип выполнения задачи (поле «Тип выполнения», см. рис. 170):

  • «Цикличное» – выполнение программного модуля типа «Программа» через заданный интервал времени, указанный в поле «Интервал»;
  • «По условию» – выполнение программного модуля типа «Программа» один раз при наступлении значения TRUE глобальной переменной типа BOOL, определённой на уровне проекта, либо на уровне ресурса, указанной в поле «Флаг условия».

image224

Рис. 170 – Выбор типа выполнения задачи

В случае выбора типа выполнения «Цикличное», в поле «Интервал» необходимо указать интервал, с которым будет выполняться данная задача. Двойной щелчок левой кнопкой мыши по полю «Интервал» приводит к появлению кнопки «...» (см. рис. 171).

image225

Рис. 171 – Добавление задачи с цикличным режимом выполнения

Нажатие данной кнопки вызывает диалог «Редактировать продолжительность» (см. рис. 172), в котором можно указать время, используя микросекунды, миллисекунды, секунды, минуты, часы и дни.

image226

Рис. 172 – Диалог редактирования продолжительности задачи

Завершение ввода времени кнопкой «OK» приводит к закрытию диалога и добавлению данного интервала времени в поле «Интервал» добавляемой задачи (см. рис. 173).

image227

Рис. 173 – Добавленный интервал выполнения

В случае выбора типа выполнения «По условию» в поле «Флаг условия» необходимо указать переменную типа BOOL, определённую глобально либо на уровне проекта (см. п. 8.2.1), либо на уровне ресурса (см. п. 8.5.1). На рис. 174 выбирается переменная «globalFlag», определённая в данном ресурсе.

image228

Рис. 174 – Выбор переменной типа BOOL для определения условия выполнения задачи

Задача будет выполнена один раз, как только значение переменной, определённой в этом поле, будет TRUE.

Поле «Приоритет» позволяет указать приоритет выполнения задачи, по умолчанию все задачи имеют приоритет 0. Следует отметить, что в ресурсе должна быть определена как минимум одна задача с типом выполнения «Цикличное», в противном случае будет ошибка в компиляции в отладочной консоли (см. п. 6.12).

После того как задачи определены, их можно использовать в экземплярах. Создание экземпляра происходит аналогичным образом с помощью кнопки «Добавить». Необходимо выбрать уникальное имя экземпляра и далее указать программный модуль типа «Программа» в поле «Тип» и одну из задач в поле «Задача». Например, в проекте определено два программных модуля типа «Программа»: «program0» и «program1» (см. рис. 175).

image229

Рис. 175 – Проект, содержащий два программными модулями типа «Программа»

Соответственно, при создании экземпляра в поле «Тип» оба этих программных модуля будут доступны (см. рис. 176).

image230

Рис. 176 – Выбор программного модуля типа «Программа» для экземпляра

Аналогичным образом выбирается задача из списка, в котором будут отображены определённые ранее задачи (см. рис. 177).

image231

Рис. 177 – Выбор задачи для экземпляра

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

Типы данных

Добавление типа данных происходит выбором пункта «Типа данных» в меню дерева проекта (см. рис. 178) в уже созданный проект, содержащий программный модуль типа «Программа» – «program0».

image232

Рис. 178 – Выбор пункта меню добавления пользовательского типа данных в дереве проекта

Будет создан массив типа INT размерностью 11 элементов. В появившемся диалоге указывается имя создаваемого типа данных, например «MyArrayType» (см. рис. 179) и нажимается кнопка «OK».

image233

Рис. 179 – Диалог ввода имени создаваемого пользовательского типа данных

В дереве проекта появляется панель редактирования добавленного типа данных с именем «MyArrayType (см. п. 6.9). В поле «Механизм создания нового типа» необходимо выбрать «Массив» и указать тип INT, как показано на рис. 180:

image234

Рис. 180 – Выбор базового типа для массива

С помощью кнопки «Добавить» (см. таблица 10) создаётся поле для массива с указанием его размерности (см. рис. 181) в соответствующем формате.

image235

Рис. 181 – Задание размерности для массива

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

image236

Рис. 182 – Выбор добавленного типа данных в панели переменных и констант программного модуля

Добавим две переменные «temp_value» и «out_value» типа INT в панель переменных и констант. Ниже, на рис. 183, пример кода на языке ST, в котором используется переменная «mas», тип которой массив, добавленный выше.

Сначала локальной переменной «temp_value» присваивается значение 10:

temp_value := 10;

Далее первому элементу массива «mas» (нумерация элементов в массиве начинается с 0) присваивается значение переменной «temp_value»:

mas[0] := temp_value;

Второму элементу массива «mas» присваивается значение 20:

mas[1] := 20;

И в конце второй локальной переменной присваивается первый элемент массива «mas»:

out_value := mas[0];

Далее будет рассмотрена процедура сборки и отладки проекта.

image237

Рис. 183 – Пример использования массива в коде на языке ST

Сборка, передача на целевое устройство и отладка прикладной программы

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

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

Возможность передачи на целевое устройство прикладной программы и её отладки определяется наличием запущенной на целевом устройстве серверной части среды разработки «Beremiz».

Среда разработки «Beremiz» предоставляет следующие возможности отладки:

  • просмотр и изменение значения всех переменных проекта, используя панель отладки, (см. п. 6.14);
  • визуально отслеживание выполнения программ на графических языках и изменение значения различных графических элементов конкретного языка;
  • отображение значений переменных в виде графика (см. п. 6.15).

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

Запуск серверной части для отладки

Серверная часть среды разработки «Beremiz», необходимая для передачи исполняемого файла на целевое устройство и его отладки, находится в сценарии на языке Python: Beremiz_service.py. Запуск данного файла осуществляется из командной строки, следующей командой с параметрами по умолчанию (см. таблица 13):

$ python Beremiz_service.py

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

Таблица 13 – Параметры командной строки запуска серверной части среды «Beremiz»

Параметр Операция
-i Указание IP адреса для обращения клиента, по умолчанию 127.0.0.1 (localhost)
-p Номер порта, по умолчанию 3000
-h Вывод в консоль справки по работе с данным сервером
-a Автоматический запуск целевого устройства (0 – выключить, 1 – включить), по умолчанию 0
-x Включить/выключить иконку в панели задач (0 – выключить, 1 – включить), по умолчанию 0
-t Включить/выключить web-интерфейс с использованием библиотеки Twisted (0 – выключить, 1 – включить), по умолчанию 0. Данный web-интерфейс позволяет отслеживать состояние выполнения исполняемого файла через браузер, по адресу: http://<ip-адрес целевого устройства>:<8009>. 8009 – порт по умолчанию.

После указания всех параметров команды запуска серверной части «Beremiz» можно ввести адрес директории, в которой будут храниться файлы на файловой системе целевого устройства. По умолчанию этой директорией является та, в которой находится Beremiz_service.py.

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

Соединение с целевым устройством и передача исполняемого файла

После того как скрипт серверной части среды разработки «Beremiz» запущен, можно производить соединение с целевым устройством. В панели настроек проекта (см. п. 6.5) необходимо указать URI-адрес целевого устройства:

PYRO://<IP-адрес>:<номер порт>

На рис. 184 показан URI адрес целевого устройства PYRO://192.168.23.226 и выделена красным цветом кнопка «Соединиться с целевым устройством» (см. таблица 2), которая используется для соединения с целевым устройством.

image238

Рис. 184 – Соединение с целевым устройством

В случае успешного соединения, в отладочной консоли будет выведено соответствующее сообщение и выведен статус прикладной программы (см. рис. 185).

image239

Рис. 185 – Отладочная консоль после соединения с целевым устройством

Статусы прикладной программы могут быть следующие:

  • «Empty» – прикладная программа отсутствует;
  • «Started» – прикладная программа на целевом устройстве есть и она выполняется;
  • «Stopped» – прикладная программа на целевом устройстве есть, но остановлена.

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

image240

Рис. 186 – Отладочная консоль после передачи прикладной программы, запуска и остановки

Отладка текстовых языков

После установки соединения с целевым устройством и запуском прикладной программы на выполнение, среда разработки «Beremiz» позволяет отслеживать и изменять значения переменных программных модулей, из которых состоит проект. Необходимо обратиться к панели экземпляров (см. п. 6.10) и используя соответствующие кнопки, выделенные красным цветом на рис. 187, добавить переменных панель отладки (см. п. 6.14):

image241

Рис. 187 – Добавление переменных для отладки из панели экземпляров

На панели отладки сразу же отобразятся текущие значения добавленных переменных (см. рис. 188).

image242

Рис. 188 – Панель отладки значений переменных

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

image243

Рис. 189 – Всплывающее меню манипуляций со значением переменной

Появится диалог, показанный на рис. 190.

image244

Рис. 190 – Установка значения переменной во время отладки

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

image245

Рис. 191 – Ошибка при вводе недопустимого значения изменяемой переменной в режиме отладки

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

image246

Рис. 192 – Переменные в режиме отладки

Для возврата переменной в «нормальный» режим (т.е. вывести из режима отладки), необходимо снова обратиться к всплывающему меню и выбрать «Освободить значение» (см. рис. 193):

image247

Рис. 193 – Всплывающее меню манипуляций со значением переменной

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

Отладка FBD диаграмм

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

image248

Рис. 194 – Панель экземпляров проекта

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

image249

Рис. 195 – Пример отладки FBD диаграммы

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

Отладка LD диаграммы

Отладка LD диаграммы осуществляется аналогично отладке FBD диаграммы. Для вызова всплывающего меню (см. рис. 196), в котором можно установить желаемое значение для контакта или катушки необходимо нажать правую клавишу мыши.

image250

Рис. 196 – Пример отладки LD диаграммы

Появится диалог (см. рис. 197), в котором нужно ввести значение типа BOOL: TRUE – контакт «ON», FALSE – контакт «OFF».

image251

Рис. 197 – Отладка LD диаграммы

После установки в режиме отладки, для данного примера, контакта «IN2» (см. рис. 198), в значение «TRUE» катушка OUT1 приняла значение TRUE, т.к. данная схема представляет собой реализацию «Логического ИЛИ» для IN1 и IN2.

image252

Рис. 198 – Отладка LD диаграммы

Отладка SFC диаграммы

Отладка SFC диаграммы происходит аналогично отладке диаграмм FBD и LD. С помощью всплывающего меню (см. рис. 199), есть возможность устанавливать активность для шагов и переходов.

image253

Рис. 199 – Пример отладки SFC диаграммы

На рис. 200 показано, как устанавливается значение (после выбора «Установить значение», появится диалог) TRUE для шага «firstStep».

image254

Рис. 200 – Пример отладки SFC диаграммы

После установки значения шага в TRUE с помощью режима отладки, шаг будет выделен голубым цветом. Как можно заметить по рис. 201, т.к. шаг «firstStep» стал активным, блок действий, ассоциированный с ним, так же стал активным (выделен зелёным цветом), а действия внутри него, в данном случае одно действие по увеличению переменной «count» на 1:

count := count + 1;

стало выполняться.

image255

Рис. 201 – Пример отладки SFC диаграммы

Так как квалификатор этого действия – N, то оно будет выполняться до тех пор, пока шаг активен.

График изменения значения переменной

Среда разработки «Beremiz» так же позволяет отображать в виде графика изменение значения переменной в режиме отладки. Для вывода панели с графиком, необходимо выбрать в панели экземпляра кнопку отображения графика изменения значения переменной в режиме отладки (см. таблица 11) для необходимой переменной, выделенную красным цветом на рис. 202:

image256

Рис. 202 – Выбор кнопки на панели экземпляров для отображения графика изменения значения переменной

Появившееся панель графика изменения переменной (см. рис. 203) позволяет отслеживать то, как значение определённой переменной изменяется в течение времени.

image257

Рис. 203 – График изменения переменной

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

График, изображенный на рис. 203, соответствует изменению переменной из программного модуля на рис. 204:

image258

Рис. 204 – Пример программного модуля тип «Программа» на языке ST

Как видно из графика, переменная «value» изменяется по закону синуса, что соответствует алгоритму, записанному на языке ST.

  1. Пример создания прикладной программы

    1. Описание примера

Пример, создаваемый ниже, будет работать с двумя модулями УСО (построенных на архитектуре «SPARC»): модулем дискретного ввода и TCP интерфейсом, а так же содержать два программных модуля на языках SFC и ST, с определённым алгоритмом и логикой работы. Данные, полученные с сигналов модуля дискретного ввода, соответствующие 3-му и 4-му сигналу будут напрямую связаны с TCP интерфейсом и доступны как теги для внешних программных средств.

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

Создание проекта начинается с выбора в главном меню «Файл» – «Новый», как показано на рис. 205:

image259

Рис. 205 – Создание нового проекта

В появившемся диалоге необходимо выбрать пустую папку, где будет создан проект, и нажать кнопку «ОК». В созданном новом проекте (см. рис. 206) в дереве проекта отображен созданный по умолчанию ресурс с именем «resource1».

image260

Рис. 206 – Созданный новый проект

Далее следует настройка параметров проекта.

Настройка параметров проекта

С помощью дерева проекта выбирается корневой элемент, соответствующий вызову панели настройки проекта. Необходимо снять флаг дополнительных библиотек «Python_Library» и «SVGUI_Library». Целевая платформа выбирается «Sparc». В качестве «URI адреса» указывается в IP адрес и порт целевого устройства с начальной приставкой PYRO, на котором автоматически запускается серверная часть среды разработки «Beremiz» (см. п. 9.1):

PYRO://192.168.23.226:3000

Соответственно, панель настройки проекта будет выглядеть, как показано на рис. 207.

image261

Рис. 207 – Настройка параметров проекта

Следующим шагом будет добавление необходимых элементов проекта с помощью меню дерева проекта.

Добавление плагинов для модулей УСО

Как ранее было сказано, существует интерфейс, позволяющий связывать внешние источники данных, такие как модули УСО (их параметры, состояния) с программными модулями, из которых состоит прикладная программа. Данный интерфейс осуществлён с помощью механизма плагинов для модулей УСО. Далее в проект будут добавлены плагины модулей: «МДВ-У» и «TCP интерфейс».

Добавление плагина модуля «МДВ-У»

Добавим плагин для модуля дискретного ввода «МДВ-У» с помощью меню дерева проекта (см. рис. 208).

image262

Рис. 208 – Добавление плагина для модуля МДВ-У

В появившейся вкладке настройки плагина «МДВ-У» (см. рис. 209) параметры, заданные по умолчанию, изменены не будут:

  • «COM порт»: COM1;
  • «Сетевой адрес»: 1.

image263

Рис. 209 – Панель настройки плагина модуля МДВ-У

Объявим переменные соответствующие 3-му и 4-му сигналу, добавленного выше модуля «МДВ-У», глобальными на уровне проекта, чтобы их можно было связать с плагином «TCP интерфейс». Данная операция выполняется в настройках параметров проекта. Необходимо обратиться к панели переменных и констант и нажать на ней кнопку «Добавить переменные», которая на рис. 210 выделена красным цветом:

image264

Рис. 210 – Кнопка добавить переменных на панели переменных и констант настройки проекта

В появившемся диалоге отмечаются сигналы «mdv0_signal3» и «mdv0_signal4» и нажимается кнопка «Добавить» (см. рис. 211).

image265

Рис. 211 – Добавление переменных плагина «TCP интерфейс», как глобальных переменных проекта

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

image266

Рис. 212 – Список глобальных переменных проекта

Далее следует добавление плагина модуля «TCP интерфейс».

Добавление плагина модуля «TCP интерфейс»

Добавление плагина «TCP интерфейс» осуществляется аналогично добавлению плагина модуля «МДВ-У» через всплывающее меню дерева проекта (см. рис. 213).

image267

Рис. 213 – Добавление плагина для модуля «TCP интерфейс»

В плагине «TCP интерфейс» указываются флаги (см. п. 7.4), необходимые для его сборки в параметре «LDFLAGS»:

-L. -ltcpsrv -L. –ltagsmanager

Далее добавляются две переменные, с помощью кнопки «Добавить переменную», относящиеся к самому плагину, т.е. две его собственные переменные «tcp_out1» и «tcp_out2» (см. рис. 214):

image268

Рис. 214 – Добавленные переменные плагина «TCP интерфейс»

Установим у них класс «output», т.е. выходные переменные и тип «DINT». Так же добавим две связанные переменные с плагином «МДВ-У» с помощью кнопки «Модули». В появившемся диалоге устанавливаются галочки для двух ранее объявленных глобально переменных модуля «МДВ-У»: «mdv_signal4» и «mdv_signal3» и нажимается кнопка «Добавить» (см. рис. 215):

image269

Рис. 215 – Добавление двух переменных модуля

Добавленные переменные отобразятся в список переменных плагина «TCP интерфейс», показанный на рис. 216.

image270

Рис. 216 – Добавленные переменные в настройках плагина

На этом настройка плагина «TCP интерфейс» завершена. После добавления двух плагинов для модулей УСО, дерево проекта выглядит, как показано на рис. 217:

image271

Рис. 217 – Дерево проекта после добавления двух плагинов для модулей УСО

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

Добавление программных модулей

Два программных модуля, первый на языке SFC, второй на языке ST будут определять значения переменных плагина «TCP интерфейс» в зависимости от сигналов модуля «МДВ-У».

Добавление программы, написанной на языке SFC

В меню дерева проекта, вызываемого с помощью кнопки «+» выбирается программный модуль «Программа» (см. рис. 218).

image272

Рис. 218 – Добавление программного модуля «Программа» с помощью меню дерева проекта

В появившемся диалоге происходит выбор языка «SFC» и нажимается кнопка «OK» (см. рис. 219).

image273

Рис. 219 – Добавление программы на языке SFC

После того, как данный программный модуль добавлен появляется его окно редактирования. Необходимо добавить две переменные типа BOOL на панель переменных и констант данного программного модуля и назвать их соответственно «flagStart» и «flagFinish», как показано на рис. 220.

image274

Рис. 220 – Две добавленные переменные для программного модуля на языке SFC

Далее происходит связывание этих двух переменных с двумя сигналами «mdv0_signal1» и «mdv0_signal2» модуля дискретного ввода с помощью поля «Адрес» (двойное нажатие левой клавишей мыши по данному полю) и вызов диалога просмотра адресов (см. рис. 221).

image275

Рис. 221 – Связывание переменных типа BOOL с переменными модуля УСО

В результате на панели переменных и констант программного модуля «program0» будут две переменных типа BOOL, связанные с двумя сигналами «mdv0_signal1» и «mdv0_signal2» модуля дискретного ввода (см. рис. 222).

image276

Рис. 222 – Две переменные типа BOOL связанные с переменными модуля «МДВ-У»

Теперь можно перейти к созданию SFC диаграммы. Выберем на панели редактирования кнопку создания нового шага инициализации и добавим его в область редактирования. В появившемся диалоге (см. рис. 223) определим только выходной соединитель.

image277

Рис. 223 – Добавление шага инициализации

Далее добавим еще один шаг с названием «mainStep» (см. рис. 224).

image278

Рис. 224 – Добавление шага

Соответственно, после добавления двух шагов, панель редактирования SFC диаграммы выглядит следующим образом (см. рис. 225):

image279

Рис. 225 – Создание SFC диаграммы

Далее необходимо добавить переход между шагом «initStep» и «mainStep». Выбираем на панели управления кнопку «Добавить новый переход» и в появившемся диалоге «Редактировать переход» (см. рис. 226) устанавливаем тип перехода «Встроенный код» со значением «flagStart». Нажимаем кнопку «OK».

image280

Рис. 226 – Добавление перехода

Теперь необходимо соединить, посредством перехода, шаги «initStep» и «mainStep» с помощью их контактов. В результате SFC диаграмма будет выглядеть, как показано на рис. 227:

image281

Рис. 227 – Создание SFC диаграммы

Далее будет произведено добавление еще одного перехода, у которого тип «Соединение» (см. рис. 228)

image282

Рис. 228 – Добавление перехода типа «Соединение»

Верхний конец добавленного перехода соединяется с выходным соединением шага «mainStep» (см. рис. 229).

image283

Рис. 229 – Создание SFC диаграммы

С помощью указателя мыши переменная «flagFinish» перетаскивается из панели переменных и констант в область редактирования, и её левый контакт соединяется с контактом добавленного выше перехода, как показано на рис. 230.

image284

Рис. 230 – Создание SFC диаграммы

Для того чтобы после выполнения второго условия диаграмма возвращалась в начальное состояние необходимо сделать переход на шаг «initStep». Данную операцию удобнее реализовать с помощью добавление «прыжка» (см. рис. 231).

image285

Рис. 231 – Добавление «прыжка» на SFC диаграмму

Выходное соединение перехода соединяется с «прыжком» и в результате получается SFC диаграмма, показанная на рис. 232:

image286

Рис. 232 – Создание SFC диаграммы

Теперь необходимо добавить в шаг «mainStep» выполнение действия. В панель переменных и констант добавляется еще одна переменная с именем «value» (см. рис. 233).

image287

Рис. 233 – Добавление переменной «value» программный модуль «program0»

Данная переменная будет изменяться во время выполнения действия и будет связана с переменной «tcp_out1». Данная операция выполняется с помощью двойного щелчка по полю «Адрес» добавленной переменной «value» и нажатия кнопки «…» для выбора диалога «Просмотр адресов», как показано на рис. 234:

image288

Рис. 234 – Связывание переменной программного модуля с переменной плагина «TCP интерфейс»

Далее создаётся блок действий, в который добавляется одно действие с квалификатором N (см. таблица 9), типа «Встроенный код» и в поле «Значение» пишется код (см. рис. 235), который будет исполняться, когда данное действие становится активным:

value := value + 1;

image289

Рис. 235 – Редактирование блока действий

После того как действие добавлено, его контакт, расположенный справа, можно соединить с контактом шага (см. рис. 236).

image290

Рис. 236 – SFC диаграмма

В результате получилась SFC диаграмма, состоящая из двух шагов, двух переходов одного блока действий и одного «прыжка». Выполнение (состояние) данной диаграммы зависит от входных сигналов модуля «МДВ-У», т.к. условия переходов зависят от переменных «flagStart» и flagFinish, которые связаны с сигналами модуля «МДВ-У».

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

Добавление программы, написанной на ST

Для добавления программного модуля «Программа» необходимо снова обратиться к меню дерева проекта, выбрав в нём соответствующий элемент (см. рис. 237).

image291

Рис. 237 – Добавление программы в дерево проекта

Появится диалог создания нового программного модуля, в котором необходимо указать «Язык» ST (см. рис. 238) и нажать кнопку «OK».

image292

Рис. 238 – Диалог добавления программы, написанной на языке ST

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

image293

Рис. 239 – Добавленная программа в дереве проекта

В появившейся вкладке редактирования программного модуля, написанного на языке ST, в панели переменных и констант добавим переменную «sig5» типа BOOL. С помощью поля «Адрес» свяжем её с переменной модуля «МДВ-У» с названием «mdv0_signal5», соответствующей сигналу под номером 5, как показано на рис. 240.

image294

Рис. 240 – Связывание переменной модуля «МДВ-У» с переменной программного модуля

Далее добавляется еще одна переменная типа DINT, которая связывается с добавленной переменной «tcp_out2» модуля «TCP интерфейс» (см. п. 7.4.2). Связывание происходит аналогично связыванию «mdv0_signal5» с помощью поля «Адрес» (см. рис. 241).

image295

Рис. 241 – Связывание переменной модуля «TCP интерфейс» с переменной программного модуля

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

image296

Рис. 242 – Панель переменных и констант добавленного программного модуля «program1»

Далее следует написание алгоритма и логики работы данного программного модуля. На языке ST будет записано следующе условие: в случае если переменная «sig5» равна TRUE, т.е. 1, то присвоить переменной «out» значение 10, в противном случае, если переменная «sig5» равна FALSE, т.е. 0, то присвоить переменной «out» значение 20, как показано на рис. 243.

image297

Рис. 243 – Пример простой логики на языке ST

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

Создание экземпляра программы

Для создания экземпляров необходимо обратиться к элементу «Ресурс», созданному по умолчанию, в дереве проекта, как показано на рис. 244.

image298

Рис. 244 – Выбор элемента «Ресурс» в дереве проекта

Появится новая вкладка с панелью редактирования ресурса (см. рис. 245).

image299

Рис. 245 – Панель редактирования ресурса

В появившейся панели необходимо добавить две задачи с типом выполнения «Цикличное», одна из которых продолжительностью 500 мс, а другая 1000 мс. С помощью кнопки добавить (данная кнопка аналогична кнопки добавления переменной в панели переменных и констант) добавляется задача, поле «Тип выполнения» устанавливается «Цикличное» и делается двойной щелчок по полю «Интервал» (см. рис. 246).

image300

Рис. 246 – Добавление новое задачи

В появившемся диалоге (рис. 247) указывается продолжительность в 500 мс и нажимается кнопка «OK».

image301

Рис. 247 – Редактирование продолжительности задачи

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

image302

Рис. 248 – Добавленные задачи

Далее создаётся два экземпляра: «instance1» и «instance2». Данная операция осуществляется аналогичным образом, используя кнопку добавления экземпляра. Каждый из добавленных экземпляров ассоциируется с программным модулем типа «Программа» (соответственно «program0» и «program1»), используя поле «Тип» и с задачей (соответственно «task1» и «task2»), используя поле «Задача» (см. рис. 249).

image303

Рис. 249 – Связывание экземпляра с программой и задачей

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

image304

Рис. 250 – Панель ресурса после добавления задачей и экземпляров

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

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

Сборка проекта осуществляется с помощью кнопки «Собрать проект» (см. таблица 2). На рис. 251 данная кнопка выделена красным цветом:

image305

Рис. 251 – Кнопка сборки проекта

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

image306

Рис. 252 – Успешная сборка проекта

Сообщения-предупреждения, выделенные красным цветом, связаны с тем, что для сборки проекта используется UNIX-подобная оболочка Cygwin.

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

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

Как упоминалось в п. 9, для возможности передачи прикладной программы и её отладки необходимо на целевом устройстве иметь запущенную серверную часть среды разработки «Beremiz» (см. п. 9.1), представляющую собой скрипт «Beremiz_service.py». В данном примере предполагается, что она уже автоматически запущена на целевом устройстве, с IP-адресом 192.168.23.226 и портом 3000. Соответственно в настройках проекта указано PYRO://192.168.23.226:3000 (см. п. 10.3), как показано на рис. 253:

image307

Рис. 253 – Панель настройки проекта

Нажатие кнопки «Соединиться с целевым устройством» (см. таблица 2) инициирует соединение с целевым устройством. На рис. 254 данная кнопка выделена красным цветом:

image308

Рис. 254 – Кнопка соединения с целевым устройством

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

image309

Рис. 255 – Отладочная консоль после соединения с целевым устройством

Состояние «Empty» указывает, что на целевом устройстве отсутствует какая либо прикладная программа. Далее необходимо передать собранный исполняемый файл с помощью кнопки «Передача прикладной программы» (см. таблица 2), выделенной на рис. 256 красным цветом:

image310

Рис. 256 – Кнопка передачи прикладной программы

В отладочной консоли будет выдано соответствующее сообщение «Передача успешно выполнена», показанное на рис. 257:

image311

Рис. 257 – Отладочная консоль после соединения с целевым устройством

Запуск прикладной программы осуществляется с помощью кнопки «Запуск прикладной программы» (см. таблица 2), выделенной на рис. 258 красным цветом:

image312

Рис. 258 – Кнопка запуска прикладной программы

В отладочной консоли будет выдано соответствующее сообщение «ПЛК запущен на выполнение», показанное на рис. 259:

image313

Рис. 259 – Отладочная консоль после запуска прикладной программы

Остановка прикладной программы осуществляется с помощью кнопки «Остановить работающую прикладную программу» (см. таблица 2), выделенной на рис. 260 красным цветом:

image314

Рис. 260 – Кнопка остановки прикладной программы

В отладочной консоли будет выдано соответствующее сообщение «Отладчик отключён», показанное на рис. 261:

image315

Рис. 261 – Отладочная консоль после остановки прикладной программы

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

Отладка прикладной программы

После того как прикладная программа запущена, можно обратиться к дереву проекта и выбрать элемент «resource1». В панели экземпляров будут отображены два экземпляра, определённых в ресурсе «resource»: «instance1» для «program0» и «instance2» для «program1». Если нажать кнопку запуска режима отладки для экземпляра, выделенную на рис. 262 красным цветом для «instance1»:

image316

Рис. 262 – Дерево проекта и панель экземпляров проекта

Откроется новая вкладка, содержащая FBD диаграмму, переведённую в режим отладки, как показано на рис. 263:

image317

Рис. 263 – Пример FBD диаграммы в режиме отладки

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

image318

Рис. 264 – Добавление переменной «value» на панель отладки

Значение переменной «value» равно 0, т.к. это значение присвоено ей при инициализации. Для того, чтобы значение начало изменяться необходимо сделать шаг «mainStep» активным. Это может произойти, если в модуле «МДВ-У» 1-ый сигнал станет TRUE, т.к. переход «flagStart», зависит именно от него. Другим способом перевести переход «flagStart» в состояние TRUE является механизм отладки SFC диаграммы. Для этого на SFC диагрмме необходимо нажать правой кнопкой мыши по переходу «flagStart» и выбрать «Установить значение» в появившемся всплывающем меню, как показано на рис. 265.

image319

Рис. 265 – Всплывающее меню отладки переда SFC диаграммы

В появившемся диалоге «Ввода значения переменной типа “BOOL”» устанавливается значение «True». Далее следует нажатие кнопки «OK», как показано на рис. 266.

image320

Рис. 266 – Установка значения True для перехода

Соответственно, после установки перехода «flagStart» на SFC диаграмме в значение TRUE, шаг «mainStep» выделен зелёным цветом (см. рис. 267).

image321

Рис. 267 – SFC диаграмма во время отладки

Блок действий, ассоциированный с этим шагом, также становится и активным и выделен зелёным цветом. Единственное действие начинает выполняться. Следовательно, в панели отладки видно, как значение переменной «value» увеличивается на единицу с периодичностью в 500 миллисекунд, т.к. экземпляр программы «program0» связан с задачей, у которой интервал 500 мс (см. п. 10.6).

Библиотека функций и функциональных блоков

Функции и функциональные блоки представляют собой предопределённые элементы, которые могут быть использованы при написании алгоритмов и логики программных модулей типа «Функциональный блок» и «Программ», как на текстовых, так и на графических языках стандарта IEC 61131-3.

Данные элементы имеют параметры на входе и на выходе. Как правило, каждый параметр имеет имя и своё назначение.

Стандартные функциональные блоки

Бистабильный SR-триггер

Данный функциональный блок представляет собой бистабильный SR-триггер, с доминирующим входом S (Set). Выход Q1 становится “1”, когда вход S1 становится “1”. Это состояние сохраняется, даже если S1 возвращается обратно в “0”. Выход Q1 возвращается в “0”, когда вход R становится “1”. Если входы S1 и R находятся в “1” одновременно, доминирующий вход S1 установит выход Q1 в “1”. Когда функциональный блок вызывается первый раз, начальное состояние Q1 это “0”.

Бистабильный RS-триггер

Данный функциональный блок представляет собой бистабильный RS-триггер, с доминирующим входом R (Reset). Выход Q1 становится “1”, когда вход S становится “1”. Это состояние сохраняется, даже если S возвращается обратно в “0”. Выход Q1 возвращается в “0”, когда вход R1 становится “1”. Если входы S и R1 находятся в “1” одновременно, доминирующий вход R1 установит выход Q1 в “0”. Когда функциональный блок вызывается первый раз, начальное состояние Q1 это “0”.

SEMA – Семафор

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

R_TRIG – Индикатор нарастания фронта

Данный функциональный блок представляет собой индикатор нарастания фронта, который генерирует на выходе одиночный импульс при нарастании фронта сигнала. Выход Q становится “1”, если происходит переход из “0” в “1” на входе CLK . Выход остается в состоянии “1” от одного выполнения блока до следующего (один цикл); затем выход возвращается в “0”.

F_TRIG – Индикатор спада фронта

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

Выход Q становится “1”, если происходит переход из “1” в “0” на входе CLK . Выход будет оставаться в состоянии “1” от одного выполнения блока до следующего; затем выход возвращается в “0”.

CTU – инкрементный счётчик

Данный функциональный блок представляет собой инкрементный счётчик. Сигнал “1” на входе R вызывает присваивание значения “0” выходу CV . При каждом переходе из “0” в “1” на входе CU значение CV увеличивается на 1. Когда CV >= PV, выход Q устанавливается в “1”.

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

Входы CU, RESET и выход Q типа BOOL, вход PV и выход CV типа WORD.

По каждому фронту на входе CU (переход из FALSE в TRUE) выход CV увеличивается на 1. Выход Q устанавливается в TRUE, когда счетчик достигнет значения заданного PV. Счетчик CV сбрасывается в 0 по входу RESET = TRUE.

CTD – декрементный счётчик

Данный функциональный блок представляет собой декрементный счётчик. Сигнал “1” на входе LD вызывает присваивание значения на входе PV выходу CV . При каждом переходе из “0” в “1” на входе CD значение CV уменьшается на 1.

Когда CV <= 0, выход Q принимает значение “1”.

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

CTUD – реверсивный счётчик

Данный функциональный блок представляет собой реверсивный счётчик. Сигнал “1” на входе R вызывает присваивание значения “0” выходу CV . Сигнал “1” на входе LD вызывает присваивание значения на входе PV выходу CV . При каждом переходе из “0” в “1” на входе CU значение CV увеличивается на 1. При каждом переходе из “0” в “1” на входе CD значение CV уменьшается на 1.

Если сигнал “1” приходит одновременно на входы R и LD, вход R обрабатывается первым.

Когда CV >= PV, выход QU имеет значение “1”.

Когда CV <= 0, выход QD принимает значение “1”.

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

TP – повторитель импульсов

Данный функциональный блок представляет собой повторитель импульсов и используется для генерирования импульса с заданной продолжительностью. Если IN становится “1”, Q становится “1”, и начинается отсчет внутреннего времени (ET). Если внутреннее время достигает значения PT, Q становится “0” (независимо от IN). Отсчет внутреннего времени останавливается/сбрасывается, если IN становится “0”. Если внутреннее время не достигло значения PT, импульс IN не влияет на внутреннее время. Если внутреннее время достигло значения PT, и IN равен “0”, отсчет внутреннего времени останавливается/сбрасывается, и Q становится “0”.

TON – таймер с задержкой включения

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

Если IN становится “1”, запускается отсчет внутреннего времени (ET). Если внутреннее время достигает значения PT, Q становится “1”. Если IN становится “0”, Q становится “0”, а подсчет внутреннего времени останавливается/сбрасывается. Если IN становится “0” до того, как внутреннее время достигло значения PT, подсчет внутреннего времени останавливается/сбрасывается, а выход Q не устанавливается в “0”.

TOF – таймер с задержкой отключения

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

Если IN становится “1”, Q становится “1”.

Если IN становится “0”, запускается отсчет внутреннего времени (ET).

Если внутреннее время достигает значения PT, Q становится “0”.

Если IN становится “1”, Q становится “1”, а подсчет внутреннего времени останавливается/сбрасывается.

Если IN становится “1” до того, как внутреннее время достигло значения PT, подсчет внутреннего времени останавливается/сбрасывается, а выход Q не устанавливается в “0”.

Дополнительные функциональные блоки

RTC – часы реального времени

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

Вход PDT (Preset DT) предназначен для установки времени. Часы начинают отсчет времени от значения PDT. Выход Q (BOOL) повторят значение EN. Выход CDT (Current DT) дает текущее значение даты и времени.

INTEGRAL – Интеграл

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

DERIVATIVE – Производная

Функциональный блок производная выдаёт значение XOUT пропорционально скорости изменения входного параметра XIN.

PID – Пропорционально-интегрально-дифференциальный регулятор

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

HYSTERESIS – гистерезис

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

Преобразования типов

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

Числовые операции

ABS – модуль числа

Данная функция возвращает модуль входного числа IN.

SQRT – квадратный корень

Данная функция возвращает в OUT квадратный корень входного числа IN.

LN – натуральный логарифм

Данная функция возвращает значение натурального логарифма от IN.

LOG – логарифм по основанию 10

Данная функция возвращает значение логарифма по основанию 10 от IN.

EXP – возведение в степень экспоненты

Данная функция возвращает значение экспоненты, возведённой в степень IN.

SIN – синус

Данная функция возвращает значение синуса IN.

COS – косинус

Данная функция возвращает значение косинуса IN.

TAN – тангенс

Данная функция возвращает значение тангенса IN.

ASIN – арксинус

Данная функция возвращает значение арксинуса IN.

ACOS – арккосинус

Данная функция возвращает значение арккосинуса IN.

ATAN – арктангенс

Данная функция возвращает значение арктангенса IN.

Арифметические операции

ADD – сложение

Данная функция возвращает результат сложения IN1 и IN2.

MUL – умножение

Данная функция возвращает результат умножения IN1 и IN2.

SUB – вычитание

Данная функция возвращает результат вычитания из IN1 значения IN2.

DIV – деление

Данная функция возвращает результат деления IN1 на IN2.

MOD – остаток от деления

Данная функция возвращает остаток от деления IN1 на IN2.

EXPT – возведение в степень

Данная функция возвращает значение IN1 возведённое в степень IN2.

MOVE – присвоение

Данная функция возвращает значение IN.

Временные операции

ADD_TIME – сложение переменных типа TIME

Данная функция складывает входные значения IN(k) типа TIME и возвращает результат типа TIME. Количество входов IN(n) изменяемое - от 2 до 20. По умолчанию 2.

ADD_TOD_TIME – сложение времени дня TOD с интервалом времени TIME

Данная функция складывает входную переменную IN1 типа TOD (TIME_OF_DAY) с переменной IN2 типа TIME. Возвращаемая величина имеет тип TIME_OF_DAY.

ADD_DT_TIME – прибавление промежутка времени TIME к моменту времени DT

Данная функция ADD_DT_TIME прибавляет промежуток времени (формат TIME) к моменту времени (формат DT) и поставляет в качестве результата новый момент времени (формат DT). Момент времени (параметр T) должен лежать в диапазоне от DT#1990-01-01-00:00:00.000 до DT#2089-12-31-23:59:59.999.

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

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

MULTIME – умножение времени TIME на число

Данная функция выполняет умножение входного значения IN1 типа TIME на число IN2 типа ANY_NUM и возвращает результат типа TIME.

SUB_TIME – разность двух значений типа TIME

Данная функция вычитает из входного значения IN1 типа TIME значение на входе IN2 типа TIME и возвращает результат типа TIME.

SUB_DATE_DATE – разность двух значений типа DATE

Данная функция вычитает из входного значения IN1 типа DATE входное значение IN2 типа DATE и возвращает их разницу типа TIME.

SUB_TOD_TIME – вычитание из времени дня TOD интервала времени TIME

Данная функция вычитает из входного значения IN1 типа TOD (TIME_OF_DAY) входное значение IN2 типа TIME и возвращает результат типа TIME_OF_DAY.

SUB_DT_TIME – вычитание из момента времени DT промежутка времени TIME

Данная функция вычитает промежуток времени (формат TIME) из момента времени (формат DT) и поставляет в качестве результата новый момент времени (формат DT). Момент времени (параметр T) должен лежать в диапазоне от DT#1990-01-01-00:00:00.000 до DT#2089-12-31-23:59:59.999. Функция не выполняет входной проверки. Если результат вычитания не лежит внутри допустимого диапазона, то результат ограничивается соответствующим значением и бит двоичного результата (BR) слова состояния устанавливается в “0”.

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

DIVTIME – деление времени TIME на число

Данная функция выполняет деление входного значения IN1 типа TIME на число IN2 типа ANY_NUM и возвращает результат типа TIME.

Операции смещения бит

SHL – арифметический сдвиг влево

Данная функция возвращает арифметический сдвиг аргумента IN на N бит влево с заполнением битов справа нулями.

SHR – арифметический сдвиг вправо

Данная функция возвращает арифметический сдвиг аргумента IN на N бит вправо с заполнением битов слева нулями.

ROR – циклический сдвиг направо

Данная функция возвращает циклический сдвиг аргумента IN на N бит влево.

ROL – циклический сдвиг влево

Данная функция возвращает циклический сдвиг аргумента IN на N бит вправо.

Побитовые операции

AND – побитовое И

Данная функция представляет собой организацию «логического И» для всех входных аргументов IN1…INn.

OR – побитовое ИЛИ

Данная функция представляет собой организацию «логического ИЛИ» для всех входных аргументов IN1…INn.

XOR – побитовое исключающее ИЛИ

Данная функция представляет собой организацию «логического исключающего ИЛИ» для всех входных аргументов IN1…INn.

NOT – побитовая инверсия

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

Операции выбора

SEL – выбор из двух значений

Данная функция возвращает один из двух аргументов IN1 или IN2 в зависимости от значения аргумента G. Если G = 0, то результат равен Х1, иначе X2.

MAX – максимум

Данная функция возвращает максимум из входных аргументов IN1 и IN2.

MIN – минимум

Данная функция возвращает минимум из входных аргументов IN1 и IN2.

LIMIT – ограничитель значения

Данная функция возвращает значение входного аргумента IN, в случае превышения им значения MX – возвращается MX, в случае если IN меньше MN – возвращается MN.

MUX – Мультиплексор (выбор 1 из N)

Данная функция возвращает значение на входе IN(K), в зависимости от входного K. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.

Операции сравнения

GT – больше чем

Данная функция сравнивает все входные аргументы и выдаёт в результате значение True, если выполнится следующее условие: (IN1 > IN2) & (IN2 > IN3) & … (INn-1 > INn), в противном случае в результат выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.

GE – больше чем или равно

Данная функция сравнивает все входные аргументы и выдаёт в результате значение True, если выполнится следующее условие: (IN1 >= IN2) & (IN2 >= IN3) & … (INn-1 >= INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.

EQ – равенство

Данная функция сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 = IN2) & (IN2 = IN3) & … (INn-1 = INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.

LT – меньше чем

Данная функция сравнивает все входные аргументы и выдаёт в результате значение True, если выполнится следующее условие: (IN1 < IN2) & (IN2 < IN3) & … (INn-1 < INn), в противном случае в результат выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.

LE – меньше чем или равно

Данная функция сравнивает все входные аргументы и выдаёт в результат значение True, если выполнится следующее условие: (IN1 <= IN2) & (IN2 <= IN3) & … (INn-1 <= INn), в противном случае в результат выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.

NE – не равно

Данная функция сравнивает все входные аргументы и выдаёт в результат значение True, если выполнится следующее условие: (IN1 <> IN2) & (IN2 <> IN3) & … (INn-1 <> INn), в противном случае в результат выдаётся False. Количество входов IN(n) изменяемое - от 2 до 20. По умолчанию 2.

Строковые операции с переменными типа STRING

LEN – длина строки

Данная функция возвращает в результат длину строки IN. Входному параметру можно ставить в соответствие только символически определенную переменную.

LEFT – левая часть строки

Данная функция возвращает в результат из строки IN первые L символов. Если L больше, чем текущая длина переменной типа STRING, то возвращается входное значение. При L = 0 и при пустой строке в качестве входного значения возвращается пустая строка. Если число L отрицательно, то выводится пустая строка. Параметру IN и возвращаемому значению можно ставить в соответствие только символически определенную переменную.

RIGHT – правая часть строки

Данная функция возвращает в результат из строки IN последние L символов. Если L больше, чем текущая длина переменной STRING, то возвращается входное значение. При L = 0 и при пустой строке в качестве входного значения возвращается пустая строка. Если число L отрицательно, то выводится пустая строка. Параметру IN и возвращаемому значению можно ставить в соответствие только символически определенную переменную.

MID – середина строки

Данная функция возвращает в результат из строки IN L-символов, начиная с позиции P. Если сумма L и (P–1) превосходит текущую длину переменной типа STRING, то возвращается строка символов, начиная с P-го символа входной строки до ее конца. Во всех остальных случаях (P находится вне текущей длины, P и/или L равны нулю или отрицательны) выводится пустая строка. Параметру IN и возвращаемому значению можно ставить в соответствие только символически определенную переменную.

CONCAT – объединение двух переменных STRING

Данная функция возвращает в результат объединение (конкатенацию) строк IN1 и IN2.

CONCAT_DAT_TOD – объединение (конкатенация) времени

Данная функция возвращает в результат типа DT конкатенацию входных значений типов DATE и TOD, соответственно IN1 и IN2.

INSERT – вставка в переменной STRING

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

DELETE – удаление в переменной STRING

Данная функция возвращает в результат строку IN1, в которой удалено L символов, начиная с позиции P. Если L и/или P равны нулю или P больше, чем текущая длина входной строки, то возвращается входная строка. Если сумма L и P больше, чем входная строка символов, то строка символов удаляется до конца. Если L и/или P имеют отрицательное значение, то выводится пустая. Входному параметру IN и выходному параметру можно ставить в соответствие только символически определенную переменную.

REPLACE – замена в переменной STRING

Данная функция возвращает в результат строку IN1, в которой символы, начиная с позиции P, заменены L первыми символами строки IN2. Если L равно нулю, то возвращается первая строка символов. Если P равно нулю или единице, то замена происходит, начиная с 1-го символа (включительно). Если P лежит вне первой строки символов, то вторая строка присоединяется к первой строке. Если L и/или P отрицательны, то возвращается пустая строка. Входным параметрам IN1 и IN2 и выходному параметру можно ставить в соответствие только символически определенную переменную.

FIND – поиск в переменной STRING

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