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

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

  • «beremiz.xml» – в данном XML файле сохраняются настройки специфичные для среды разработки Beremiz относительно проекта;
  • «plc.xml» – в данном XML файле сохраняется полное описание проекта: всех программных модулей, ресурсов, пользовательских типов данных, данных о проекте, настроек редакторов графических языков IEC 61131-3;
  • папка «build», которая хранит генерируемый ST и C код, а также получаемый исполняемый бинарный файл прошивки.

Внимание

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

ШАГ 1. СОЗДАНИЕ НОВОГО ПРОЕКТА

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

../_images/1.png

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

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

../_images/100.png

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

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

  • «POU Name»;
  • «POU Type»;
  • «Language».
../_images/101.png

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

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

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

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

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

Для подробного описания процесса создания разработаем новую программу на языке FBD. Например, пусть программа является счетчиком, увеличивающий значение выхода на единицу до тех пор, пока на входе «RES» не будет установлено значение True. Инкрементация значения происходит в каждом цикле основной программы. Регулировать интервал цикла можно изменяя длительность задачи для экземпляра основной программы в панели ресурсов.

Также для подробного изучения создания проекта добавим функциональные блоки счетчиков, написанных на языках FBD, LD и ST.

Конфигурационные переменные проекта

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

В панели переменных и констант добавим конфигурационную константу «ZERO» типа INT с начальным значением 0, с помощью кнопки «Добавить переменную». Таким же образом добавим остальные переменные. На рисунке ниже предоставлен результат объявления конфигурационных переменных.

../_images/90.png

Объявление конфигурационных переменных

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

Настройки сборки проекта и соединения с ПЛК BRIC

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

../_images/91.png

Конфигурация проекта

Примечание

Адресом последовательно порта ПЛК BRIC по умолчанию является 192.168.1.232.

Внимание

ПЛК BRIC и модули расширения имеют архитектуру целевой платформы «Sofi», поэтому во вкладке «Config» в разделе TargetType требуется установить целевую платформу «Sofi».

Программа

Ниже будет приведён пример добавления в проект программы, написанной на языке FBD. Логика и алгоритм работы данного программного модуля следующие: определена переменная RES типа BOOL, отвечающая за включение/выключение каждого из трёх счетчиков, определены три переменныe OUT1..OUT3 типа INT, в них хранится значение каждого из трёх счетчиков, и добавлены три функциональные блоки, представляющих собой инкрементирующий счетчик на языках FBD, LD и ST. При запуске программы начальное значение переменной RES устанавливается по умолчанию True. Значения счетчиков начнут увеличиваться, начиная с 0, когда переменная RES примет значение False. Для обнуления счетчиков переменную RES необходимо форсировать значением True. Переменным OUT1..OUT3 будет присвоено начальное значение конфигурационной константы ZERO, таким образом значения счетчиков обнулятся.

Путём нажатия на кнопку «+» на правом верхнем углу добавим в панели переменных и констант переменную RES типа BOOL, отвечающую за вкл/выкл каждого из трёх счетчиков, а так же три переменные OUT1..OUT3 типа INT. Классы переменных назначим как Внешняя (External). Далее необходимо обратиться к редактору языка FBD. Для написания алгоритма и логики выполнения данной программы нам понадобятся функциональные блоки счетчиков.

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

../_images/102.png

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

Наведя мышь на переменную OUT1 в редакторе FBD и нажимая правую кнопку можно поменять тип переменной с Input на Output.

../_images/103.png

Выбор коннектора для блока переменной

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

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

../_images/104.png

Диалог создания нового функционального блока

Функциональный блок на языке FBD

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

../_images/105.png

Описание пользовательского функционального блока на языке FBD

Для написания алгоритма и логики выполнения данной программы будут добавлены две функции: «ADD» и «SEL».

Функция «ADD» находится во вкладке «Arithmetics» в Библиотеке функций и функциональных блоков , обозначает сложение от 2 до 20 входных значений (в нашем примере их 2) на входах «IN1» и «IN2», возвращает результат вычисления на выход «OUT».

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

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

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

Функциональный блок становится доступным в панели библиотеки функций и функциональных блоков «User-defined POUs» и может использоваться в программных модулях типа «Программа» и «Функциональный блок».

Внимание

Наименование функционального блока не должно совападать с существуюущими в библиотеке

../_images/106.png

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

Функциональный блок на языке LD

Создаём функциональный блок с именем «FBD», в котором инструментами языка FBD будет реализован счетчик , принимающий на вход переменную RES типа BOOL, и возвращающий значение счетчика OUT.

Добавим в панель переменных и констант возвращаемое значение «OUT» типа INT и класса «Выход», локальную переменную «COUNT» типа INT, внешнюю конфигурационную переменную «ZERO» типа INT, и входную переменную «RES» типа BOOL.

Для удобства редактирования LD диаграмм в редакторе существует функция Drag&Drop , необходимые функциональные блоки и переменные можно добавить в поле редактирования из библиотеки функций и функциональных блоков из таблицы переменных путем перетаскивания в поле редактирования. Необходимо левой клавишей мыши зажать столбец «#» для переменной в панели переменных и констант, далее перенести указатель на область редактирования LD диаграммы и отпустить кнопку мыши (Drag&Drop).

Добавим шину питания, к ней присоединим контакт, связанный с переменной «RES».

../_images/107.png

Диалог добавления контакта

Полученная конструкция будет подавать сигнал на сброс счетчика при переходе значения переменной «RES» в True.

../_images/108.png

Контакт ассоциированный с переменной RES

Далее добавим числовой литерал со значением «1» при помощи кнопки «Создать новую переменную», в диалоговом окне создания переменной в поле «Expression» напишем «1». Таким способом задается шаг инкрементации счетчика. Для написания алгоритма и логики выполнения данной программы будут добавлены две функции: «ADD» и «SEL». Добавление данных функций удобнее осуществить переносом соответствующей функции с помощью мыши (Drag&Drop) из панели Библиотеки функций и функциональных блоков в область редактирования LD диаграммы функционального блока.

На рисунке ниже показана реализация всего функционального блока на языке LD.

../_images/109.png

Функциональный блок на языке LD

Функциональный блок становится доступным в панели библиотеки функций и функциональных блоков «User-defined POUs» и может использоваться в программных модулях типа «Программа» и «Функциональный блок». На рисунке ниже показано использование созданного функционального блока «FB_LD» в основном программном модуле, написанном на языке FBD.

Внимание

Наименование функционального блока не должно совападать с существуюущими в библиотеке

../_images/110.png

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

Функциональный блок на языке ST

Создаём функциональный блок с именем «FB_ST», в котором инструментами языка ST будет реализован счетчик , принимающий на вход переменную RES типа BOOL, и возвращающий значение счетчика OUT.

На рисунке ниже показана реализация данного функционального блока на языке ST.

../_images/111.png

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

Функциональный блок становится доступным в панели библиотеки функций и функциональных блоков «User-defined POUs» и может использоваться в программных модулях типа «Программа» и «Функциональный блок».

Внимание

Наименование функционального блока не должно совападать с существуюущими в библиотеке

../_images/112.png

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

Ресурс

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

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

../_images/113.png

Пример объявления в проекте глобальной переменной

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

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

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

  • «Циклический» – выполнение программного модуля типа «Программа» через заданный интервал времени, указанный в поле «Interval»;
  • «Прерывание» – выполнение программного модуля типа «Программа» один раз при наступлении значения TRUE глобальной переменной типа BOOL, определённой на уровне проекта, либо на уровне ресурса, указанной в поле «Single».
../_images/114.png

Выбор типа выполнения задачи

В случае выбора типа выполнения «Cycle», в поле «Interval» необходимо указать интервал, с которым будет выполняться данная задача. Двойной щелчок левой кнопкой мыши по полю «Interval» приводит к появлению кнопки «…». Нажатие данной кнопки вызывает диалог «Edit Duration» в котором можно указать время, используя микросекунды, миллисекунды, секунды, минуты, часы и дни.

../_images/115.png

Диалог редактирования длительности задачи

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

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

../_images/116.png

Выбор переменной типа BOOL как источника прерывания для начала выполнения задачи

Задача будет выполнена один раз, как только значение переменной, определённой в этом поле, будет TRUE. Поле «Priority» позволяет указать приоритет выполнения задачи, по умолчанию все задачи имеют приоритет 0. Следует отметить, что в ресурсе должна быть определена как минимум одна задача с типом выполнения «Cycle», в противном случае будет ошибка в компиляции в отладочной консоли . После того как задачи определены, их можно использовать в экземплярах. Создание экземпляра происходит аналогичным образом с помощью кнопки «Добавить». Необходимо выбрать уникальное имя экземпляра и далее указать программный модуль типа «Программа» в поле «Type» и одну из задач в поле «Task».

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

ШАГ 2. СБОРКА И ПЕРЕДАЧА НА ЦЕЛЕВОЕ УСТРОЙСТВО ПРИКЛАДНОЙ ПРОГРАММЫ

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

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

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

../_images/build.png

Кнопка сборки проекта

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

../_images/10.png

Результаты сборки выведены в консоль

Пересборку проекта можно осуществить, очистив директорию сборки проекта нажатием на кнопку «Очистить директорию сборки проекта». Будет удален сгенерированный на языке ST код проекта и скомпилированный бинарный файл прошивки ПЛК. После этого нажмите кнопку «Сборка проекта в директории сборки», и проект будет собран заново.

Итоговый бинарный файл, который будет загружен в ПЛК, находится в папке проекта с названием sofi_task_crc.bin. На рисунке ниже показан путь в папке проекта файла и название файла.

../_images/11.png

Расположение итогового файла проекта

Для загрузки созданного проекта необходимо нажать на кнопку «Загрузить проект»

../_images/sofi.png

Кнопка загрузки проекта

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

../_images/console_down.png

Результат загрузки проекта в ПЛК

Так же имеется второй способ загрузки user_task – через WEB-интерфейс контроллера.

Для загрузки созданного бинарного файла в ПЛК BRIC заходим в браузер по адресу указанного порта, по умолчанию: 192.168.1.232

../_images/117.png

WEB-страница контроллера

Далее нажимаем на кнопку «Enter Password» и вводим пароль (пароль по умолчанию «bric»), после чего нажимаем на кнопку «Download task» и выбираем запрашиваемый файл sofi_task_crc.bin. После нажатия кнопки «Download» дожидаемся окончания загрузки. После появления надписи «File Upload Done!» нажимаем на кнопку «Apply changes». Переход на главную страницу произойдет автоматически через 10 секунд.

Нажимая кнопку «Hide self regs» и устанавливая минимальный «Update period» мы можем в режиме реального времени наблюдать за изменениями показаний счетчиков при «RES» в состоянии False.

../_images/118.png

WEB-страница контроллера с переменными при RES в состоянии False

При изменении состояния переменной «RES» в True, путем нажатия кнопки «Change value», мы можем увидеть сброс всех счетчиков.

../_images/119.png

WEB-страница контроллера с переменными при RES в состоянии True