- Введение
- Продукция
- Маркировка
- Функции
- Руководство пользователя
- О документации
- Меры безопасности
- Индикация
- Максимальная конфигурация
- CAN-топология
- Подключение CAN-шины
- Разъемы и провода
- Монтаж модулей
- Общие правила и нормы эксплуатации
- Технические характеристики
- Условия эксплуатации
- Использование по назначению
- Маркировка
- Техническое обслуживание
- Транспортирование и хранение
- Упаковка
- Гарантийные обязательства
- Обновление
- Платформа CAN bp
- CANopen
- ISOBUS (ISO 11783)
- Решения
- Параметризация
- Программирование
- Литература и источники
- Образование
- Дополнительная информация
Работа с проектом¶
Данный раздел отражает основные приемы работы в среде разработки Beremiz, необходимые при создании прикладной программы. Прикладная программа для целевой платформы является результатом сборки проекта с определенной конфигурацией.
Проект в Beremiz представляет собой именованную папку, в которой лежат исходные файлы. Папка должна быть обязательно пустой и не защищена от записи. Если в папке уже есть файлы, будет выдана соответствующая ошибка. В созданной папке будут сохранены следующие файлы и папки:
«beremiz.xml» – в данном XML файле сохраняются настройки специфичные для среды разработки Beremiz относительно проекта;
«plc.xml» – в данном XML файле сохраняется полное описание проекта: всех программных модулей, ресурсов, пользовательских типов данных, данных о проекте, настроек редакторов графических языков IEC 61131-3;
папка «build», которая хранит генерируемый ST и C код, а также получаемый исполняемый бинарный файл прошивки.
Создание нового проекта¶
Новый проект создаётся с помощью главного меню «Файл» – «Новый»
(см. image144
), либо с помощью кнопки «Новый»
на панели управления.
Далее появится диалог (см. image145
) , в котором необходимо выбрать
папку, где будет храниться данный проект.
В появившемся диалоге вам будет предложено настроить основной
программный модуль проекта (см. image146
). В данном диалоге три поля:
«Имя POU»;
«Тип POU»;
«Язык».
Имя программного модуля, присвоенное по умолчанию, может быть заменено на любое имя, соответствующее назначению данного программного модуля.
Тип основного программного модуля – «Программа», в дальнейшем в проект можно добавить дополнительные программные модули, функции и функциональные блоки.
В поле «Язык» необходимо выбрать из списка один из языков стандарта IEC 61131-3 (IL, ST, LD, FBD, SFC), на котором будут реализованы алгоритмы и логика работы данного добавляемого программного модуля.
При нажатии кнопки ОК в проект будет добавлен основной программный модуль с выбранными параметрами, ресурс проекта будет конфигурирован по умолчанию: добавлена одна задача циклического выполнения с интервалом 20 мс, и один экземпляр основной программы. При нажатии кнопки Отмена будет создан пустой проект без каких-либо настроек.
В рамках описания процесса создания нового проекта за основу выбран проект «First steps» из стандартного набора тестовых проектов IDE Beremiz. Основной программный модуль в этом проекте написан на языке FBD, соответственно, в диалоге необходимо выбрать язык FBD, в дальнейшем язык основного программного модуля возможно изменить.
Настройка проекта¶
Следующим шагом после создания проекта является его настройка, включающая в себя задание глобальных переменных, установку параметров компиляции и компоновки, и заполнение данных о проекте.
Вызов панели настройки проекта осуществляется при выборе (двойном щелчке
левой кнопкой мыши) корневого элемента дерева проекта, который по
умолчанию, сразу после создания проекта называется «Unnamed»(см. image147
).
На панели присутствуют три вкладки:
Конфигурационные переменные;
Свойства проекта;
Конфигурация.
Конфигурационные переменные проекта¶
Конфигурационные переменные позволяют программным модулям типа «Программа» и «Функциональный блок» использовать общие переменные, которые будут определены в глобальной области видимости проекта.
Ниже, на image149
, в панели переменных и констант добавим
конфигурационную константу «ResetCounterValue» типа INT с начальным
значением 17, с помощью кнопки «Добавить переменную» (см. таблицу 3).
Для того чтобы к данной конфигурационной переменной можно было обращаться из программных модулей типа «Программа» или «Функциональный блок» необходимо в их панели редактирования в панели переменных и констант создать переменную с таким же именем, как и ранее объявленная глобальная, и установить её класс «Внешний».
Настройки сборки проекта и соединения с целевым устройством¶
Для использования написанной прикладной программы необходимо её собрать
(скомпилировать и скомпоновать), т.е. получить исполняемый файл и
передать на целевое устройство для отладки или просто исполнения. В
связи с этим основными настройками являются: «URI системы исполнения» -
адрес целевого устройства, и целевая платформа - архитектура платформы
целевого устройства (см. image150
).
Как правило, «URI системы исполнения» указывается в формате:
<Тип коннектора>)://<Адрес последовательного порта подключения>:<битрейт>
Тип коннектора выбирается в зависимости от типа сервиса подключения к целевому устройству. Например, для отладки прикладной программы на локальной машине при помощи Soft PLC, целевым устройством является служба «Beremiz service» и тип коннектора следует выбрать «LOCAL». Для отладки прикладной программы вне локальной машины используется библиотека PYRO, в это случае «URI целевого устройства» указывается в формате:
PYRO://<IP-адрес целевого устройства>:<порт>
Если в проекте используются дополнительные библиотеки, их следует добавить в конфигурации проекта, нажав «checkbox» напротив добавляемой библиотеки в подменю «Библиотеки».
Данные о проекте¶
При создании нового проекта, все обязательные поля в настройках информации о проекте заполняются значениями по умолчанию. Рекомендуется заменить данные настройки по умолчанию на релевантную информацию (см.:numref:image152), позволяющую удобным образом различать проекты.
Большая часть данных в информации проекте являются необязательным для заполнения, но обязательные должны быть заполнены, такие поля помечены в подсказках в именовании каждого пункта. После задания настроек проекта, как правило, следует добавление в проект необходимых программных модулей (функций, функциональных блоков и программ), реализация их алгоритмов и логики работы с помощью текстовых и графических языков стандарта IEC 61131-3.
Программные модули¶
Добавление программных модулей (программ, функций, функциональных блоков) осуществляется с помощью всплывающего меню дерева проекта, в котором необходимо выбрать пункт «Функция», «Функциональный блок» или «Программа». Далее появится диалог «Создать новый POU».
Проект «First steps» представляет собой основной программный модуль, написанный на языке FBD, в котором используются 5 функциональных блоков, написанных на пяти разных языках IEC 61131-3. Каждый функциональный блок это счетчик, увеличивающий значение выхода на единицу до тех пор, пока на входе Reset не будет установлено значение True. Инкрементация значения происходит в каждом цикле основной программы. Регулировать интервал цикла можно изменяя длительность задачи для экземпляра основной программы в панели ресурсов.
В созданный проект необходимо добавить программу program0, функцию и 5 функциональных блоков: CounterST, CounterLD, CounterFBD, CounterSFC, CounterIL. Если при создании проекта основной программный модуль program0 не был добавлен, его следует добавить вручную. Далее рассмотрено добавление каждого программного модуля в отдельности.
Программа¶
Ниже будет приведён пример добавления в проект программы, написанной на языке FBD. Логика и алгоритм работы данного программного модуля следующие: определена переменная Reset типа BOOL, отвечающая за сброс каждого из пяти счетчиков, определены пять переменных Cnt1..Cnt5 типа INT, в них хранится значение каждого из пяти счетчиков, и добавлены пять функциональных блоков, представляющих собой инкрементирующий счетчик на пяти языках IEC 61131-3. При запуске программы начальное значение переменной Reset устанавливается по умолчанию False. Значения счетчиков начнут увеличиваться, начиная со значения по умолчанию (для типа INT равно 0). Для сброса счетчиков переменную Reset необходимо форсировать значением True, затем вернуть значение False. Переменным Cnt1..Cnt5 будет присвоено начальное значение конфигурационной константы ResetCounterValue, таким образом значения счетчиков сбросятся, и начнется отсчет начиная с 17.
Сначала следует добавление программы в проект, осуществляемое с помощью
меню дерева проекта, выбором пункта «Программа» (см. image153
):
В появившемся диалоге (см. image154
) выберем язык FBD и тип POU
«программа».
Добавим в панели переменных и констант переменную Reset типа BOOL, отвечающую за сброс каждого из пяти счетчиков, а так же пять переменных Cnt1..Cnt5 типа INT, в которых будут храниться значения каждого из пяти счетчиков. Далее необходимо обратиться к редактору языка FBD. Для написания алгоритма и логики выполнения данной программы нам понадобятся функциональные блоки счетчиков, создание которых рассмотрено в п. 6.3.2.
Для удобства редактирования FBD диаграмм в редакторе существует функция Drag&Drop , необходимые функциональные блоки и переменные можно добавить в поле редактирования из библиотеки функций и функциональных блоков и таблицы переменных путем перетаскивания в поле редактирования. необходимо левой клавишей мыши зажать столбец «#» для переменной в панели переменных и констант, далее перенести указатель на область редактирования FBD диаграммы и отпустить кнопку мыши (Drag&Drop).
Перенесем 5 экземпляров переменной Reset и все переменные Cnt1..Cnt5 в
поле редактирования диаграммы как показано на image155
:
Из библиотеки функций и функциональных блоков добавим пользовательские
функциональные блоки. Добавление данных функциональных блоков удобнее
осуществить переносом соответствующей функции с помощью мыши (Drag&Drop)
из панели библиотеки функций и функциональных блоков в область
редактирования FBD диаграммы данного программного модуля как показано
на image156
:
Добавим связи между функциональными блоками и входными и выходными переменными.
Функциональный блок¶
Добавление пользовательского функционального блока происходит путем
нажатия на пункт «Функциональный блок» во всплывающем меню дерева
проекта . В диалоговом окне (см. image158
) задайте имя
функционального блока в поле «Имя POU», в поле «Тип POU» выберите
«функциональный блок», в поле «Язык» выберите язык, на котором будет
написан алгоритм работы блока.
Функциональный блок на языке ST
Создайте функциональный блок с именем «CounterST» (см. image159
), в
котором инструментами языка ST будет реализован счетчик , принимающий на
вход переменную Reset типа BOOL, и возвращающий значение счетчика Out.
В отличие от функции, функциональный блок может быть описан на любом
языке стандарта IEC 61131-3, включая язык SFC. На image160
показана
реализация данного функционального блока на языке ST.
Возвращаемое значение «Out» имеет тип INT и класс «Выход». Добавленные
локальная переменная «Cnt» и внешняя конфигурационная переменная
«ResetCounterValue» имеют тип INT, входная переменная «Reset» имеет тип
BOOL. Реализованный функциональный блок становится доступным в панели
библиотеки функций и функциональных блоков и может
использоваться в программных модулях типа «Программа» и «Функциональный
блок». На image161
показано использование созданного функционального
блока «CounterST» в основном программном модуле, написанном на языке
FBD.
С входом «Reset» соединена общая для всех счетчиков переменная «Reset»
типа BOOL, результат выполнения помещается в переменную «Cnt1» типа INT.
Следует отметить, что при попытке удаления функции или функционального
блока из проекта (см. image162
), где эти добавленные программные модули
уже используются, будет выдана ошибка.
Реализации на других языках полностью идентичны по набору входных, выходных и локальных переменных. Далее будут описаны примеры функциональных блоков на остальных четырех языках IEC 61131-3.
Функциональный блок на языке FBD
Создайте функциональный блок с именем «CounterFBD», в котором
инструментами языка FBD будет реализован счетчик , принимающий на вход
переменную «Reset» типа BOOL, и возвращающий значение счетчика «Out».
Для удобства редактирования FBD диаграмм в редакторе существует функция
Drag&Drop , необходимые функциональные блоки и
переменные можно добавить в поле редактирования из библиотеки функций и
функциональных блоков и таблицы переменных путем
перетаскивания в поле редактирования (см. image163
). необходимо левой
клавишей мыши зажать столбец «#» для переменной в панели переменных и
констант, далее перенести указатель на область редактирования FBD
диаграммы и отпустить кнопку мыши (Drag&Drop).
Добавим возвращаемое значение «Out» типа INT и класса «Выход», локальную переменную «Cnt» типа INT, внешнюю конфигурационную переменную «ResetCounterValue» типа INT, и входную переменную «Reset» типа BOOL.
Перенесенные на поле редактирования переменные отображаются как
прямоугольные блоки с коннекторами входа и выхода(см. image164
).
После переноса в поле редактирования всех переменных, добавьте числовой
литерал со значением «1» при помощи кнопки «Создать новую
переменную», в диалоговом окне создания переменной в поле «Выражение»
напишите «1» (см. image165_2
). Таким способом задается шаг инкрементации
счетчика.
Для того чтобы переменной «Cnt» можно было одновременно и присвоить
значение и передать это значение переменной Out, задайте класс
переменной «Вход/Выход». Сделать это можно щелчком правой кнопкой мыши
по блоку переменной, во всплывающем меню следует выбрать «Вход/Выход»
(см. image166
), или щелкнув по блоку двойным щелчком левой кнопки мыши,
выбрав в выпадающем списке «Класс» вариант «Вход/Выход»(см. image167
).
Далее необходимо обратиться к редактору языка FBD. Для написания алгоритма и логики выполнения данной программы будут добавлены две функции: «ADD» и «SEL».
Функция «ADD» находится во вкладке «Математика» в Библиотеке функций и функциональных блоков , обозначает сложение от 2 до 20 входных значений (в нашем примере их 2) на входах «IN1» и «IN2», возвращает результат вычисления на выход «OUT».
Функция «SEL» обозначает «Выбор одного из двух значений» и находится во вкладке «Операции выбора». Она содержит три входных переменных «G», «IN0», «IN1» и одну выходную «OUT». Если «G» равно 0 (или FALSE), то выходной переменной «OUT» присваивается значение «IN0». Если «G» равно 1 (или TRUE), то выходной переменной «OUT» присваивается значение «IN1».
Добавление данных функций удобнее осуществить переносом соответствующей
функции с помощью мыши (Drag&Drop) из панели Библиотеки функций и
функциональных блоков в область редактирования FBD диаграммы
функционального блока. Результатом вышеизложенных действий должна стать
FBD диаграмма без соединений (см. image168
).
Следующим шагом станет соединение выходов переменных со входами функций.
Соединим числовой литерал 1 с входом «IN1» функции ADD, а выход «OUT»
функции ADD соединим с входом «IN0» функции SEL. В свою очередь, выход
«OUT» функции SEL соединим с входным коннектором переменной Cnt, а
выходной коннектор переменной Cnt соединим с входом переменной «Out».
Соединение блоков осуществляется путем зажатия левой кнопки мыши на
коннекторе блока, будет создана линия связи которую необходимо протянуть
до коннектора присоединяемого блока (см. image169
).
Далее присоединим переменную «Reset», управляющую сбросом счетчика, на вход «G» функции «SEL», а конфигурационную переменную «ResetCounterValue» на вход «IN1». Таким образом, меняя значение переменной «Reset» мы управляем значением переменной «Cnt» через функцию выбора значения «SEL» . Осталось добавить связь между переменной «Cnt» и входом «IN2» функции сложения ADD, тем самым обеспечив увеличение значения счетчика на 1 за один цикл ПЛК.
Полученная реализация алгоритма счетчика на языке FBD представлена
на image170
.
Функциональный блок становится доступным в панели библиотеки функций и
функциональных блоков и может использоваться в программных
модулях типа «Программа» и «Функциональный блок». На image171
показано
использование созданного функционального блока «CounterFBD» в основном
программном модуле, написанном на языке FBD.
Функциональный блок на языке SFC
Создайте функциональный блок с именем «CounterSFC», в котором инструментами языка SFC будет реализован счетчик , принимающий на вход переменную «Reset» типа BOOL, и возвращающий значение счетчика «Out».
Добавим в панель переменных и констант возвращаемое значение «Out» типа INT и класса «Выход», локальную переменную «Cnt» типа INT, внешнюю конфигурационную переменную «ResetCounterValue» типа INT, и входную переменную «Reset» типа BOOL.
Для удобства редактирования SFC диаграмм в редакторе существует функция
Drag&Drop, необходимые функциональные блоки и
переменные можно добавить в поле редактирования из библиотеки функций и
функциональных блоков и таблицы переменных путем
перетаскивания в поле редактирования (см. image163
). необходимо левой
клавишей мыши зажать столбец «#» для переменной в панели переменных и
констант, далее перенести указатель на область редактирования SFC
диаграммы и отпустить кнопку мыши (Drag&Drop).
Добавим начальный шаг диаграммы, нажав на кнопку «Создать исходный шаг»,
в диалоге изменим название шага по умолчанию на название «Start»,
коннектор потребуется только «Выход»(cм. image172
)
Следуя алгоритму, возможны два состояния – счетчик увеличивается и счетчик сброшен. Добавим альтернативное ветвление с двумя ветвями. Согласно стандарту IEC 61131-3, каждая ветвь альтернативного ветвления должна оканчиваться переходом. Условиями переходов будет являться состояние переменной «Reset» : для первой ветви выражение «NOT Reset» , для второй ветви просто значения «Reset» (см.:numref:image173).
В первом состоянии добавим шаг с действием «Count» (см. image174
), в
действии на языке ST опишем увеличение счетчика на единицу, и присвоение
значения переменной «Out» (см. image175
).
Во второй ветви добавим шаг с действием «ResetCounter», в действии опишем присвоение переменной «Cnt» значение переменной «ResetCounterValue», и значению «Out» значение переменной «Cnt» (см.:numref:image176).
Первая ветвь отвечает за инкрементацию счетчика, вторая – за сброс (см. image177
).
Для выходов из состояния добавим в первой ветви переход с условием
«Reset», во второй ветви добавим переход с условием «NOT Reset»(см. image178
).
Далее, объединим ветви альтернативным объединением. Для того чтобы
программа выполнялась циклически, после объединения добавим безусловный
переход к начальному шагу «Start». Полученная реализация счетчика на
языке SFC представлена на image179
.
Функциональный блок становится доступным в панели библиотеки функций и
функциональных блоков и может использоваться в программных
модулях типа «Программа» и «Функциональный блок». На
image180
показано
использование созданного функционального блока «CounterSFC» в основном
программном модуле, написанном на языке FBD.
Функциональный блок на языке IL
Создайте функциональный блок с именем «CounterIL», в котором инструментами языка IL будет реализован счетчик , принимающий на вход переменную Reset типа BOOL, и возвращающий значение счетчика Out.
Добавим в панель переменных и констант возвращаемое значение «Out» типа INT и класса «Выход», локальную переменную «Cnt» типа INT, внешнюю конфигурационную переменную «ResetCounterValue» типа INT, и входную переменную «Reset» типа BOOL.
Для удобства редактирования кода в редакторе IL существует функция
Drag&Drop , необходимые переменные можно добавить в поле
редактирования из таблицы переменных путем перетаскивания в поле
редактирования (см. image162
). необходимо левой клавишей мыши зажать
столбец «#» для переменной в панели переменных и констант, далее
перенести указатель на область редактирования и отпустить кнопку мыши
(Drag&Drop).
Напишем инструкции для сброса счетчика и сохранения результатов. Инструкцию для сброса счетчика назовем «ResetCnt», она загрузит операнд ResetCounterValue в аккумулятор:
ResetCnt:
(\* reset counter \*)
LD ResetCounterValue
Инструкцию для сохранения результатов назовем «QuitFb», она будет сохранять значения операндов «Cnt» и «Out»:
QuitFb:
(\* save results \*)
ST Cnt
ST Out
Загрузим в аккумулятор значение операнда «Reset». Если значение операнда «True», следует перейти к инструкции сброса счетчика ResetCnt, в случае значения «False» значение операнда должно увеличиться на единицу.
LD Reset
JMPC ResetCnt
(\* increment counter \*)
LD Cnt
ADD 1
JMP QuitFb
ResetCnt:
(\* reset counter \*)
LD ResetCounterValue
QuitFb:
(\* save results \*)
ST Cnt
ST Out
Полученная реализация счетчика на языке IL представлена на image181
.
Функциональный блок становится доступным в панели библиотеки функций и
функциональных блоков и может использоваться в программных
модулях типа «Программа» и «Функциональный блок». На image182
показано
использование созданного функционального блока «CounterIL» в основном
программном модуле, написанном на языке FBD.
Функциональный блок на языке LD
Создайте функциональный блок с именем «CounterLD», в котором инструментами языка LD будет реализован счетчик , принимающий на вход переменную «Reset» типа BOOL, и возвращающий значение счетчика «Out».
Добавим в панель переменных и констант возвращаемое значение «Out» типа INT и класса «Выход», локальную переменную «Cnt» типа INT, внешнюю конфигурационную переменную «ResetCounterValue» типа INT, и входную переменную «Reset» типа BOOL.
Для удобства редактирования LD диаграмм в редакторе существует функция
Drag&Drop , необходимые функциональные блоки и
переменные можно добавить в поле редактирования из библиотеки функций и
функциональных блоков и таблицы переменных путем
перетаскивания в поле редактирования (см. image163
). необходимо левой
клавишей мыши зажать столбец «#» для переменной в панели переменных и
констант, далее перенести указатель на область редактирования LD
диаграммы и отпустить кнопку мыши (Drag&Drop).
Добавим шину питания, к ней присоединим контакт, связанный с переменной
«Reset» (см. image183
).
Полученная конструкция будет подавать сигнал на сброс счетчика при
переходе значения переменной «Reset» в True (см. image184
)
Далее добавим числовой литерал со значением «1» при
помощи кнопки «Создать новую переменную», в диалоговом окне создания
переменной в поле «Выражение» напишите «1» (см. image165
). Таким способом
задается шаг инкрементации счетчика.
Перенесенные на поле редактирования переменные отображаются как
прямоугольные блоки с коннекторами входа и выхода(см. image185
).
Для того чтобы переменной «Cnt» можно было одновременно и присвоить
значение и передать это значение переменной Out, задайте класс
переменной «Вход/Выход». Сделать это можно щелчком правой кнопкой мыши
по блоку переменной, во всплывающем меню следует выбрать «Вход/Выход»
(см. image166_2
), или щелкнув по блоку двойным щелчком левой кнопки мыши,
выбрав в выпадающем списке «Класс» вариант «Вход/Выход»(см. image167_2
).
Для написания алгоритма и логики выполнения данной программы будут добавлены две функции: «ADD» и «SEL».
Функция «ADD» находится во вкладке «Математика» в Библиотеке функций и функциональных блоков, и обозначает сложение от 2 до 20 входных значений (в нашем примере их 2) на входах «IN1» и «IN2», возвращает результат вычисления на выход «OUT».
Функция «SEL» обозначает «Выбор одного из двух значений» и находится во вкладке «Операции выбора». Она содержит три входных переменных «G», «IN0», «IN1» и одну выходную «OUT». Если «G» равно 0 (или FALSE), то выходной переменной «OUT» присваивается значение «IN0». Если «G» равно 1 (или TRUE), то выходной переменной «OUT» присваивается значение «IN1».
Добавление данных функций удобнее осуществить переносом соответствующей функции с помощью мыши (Drag&Drop) из панели Библиотеки функций и функциональных блоков в область редактирования FBD диаграммы функционального блока. Результатом вышеизложенных действий должна стать LD диаграмма без соединений.
Следующим шагом станет соединение выходов переменных со входами функций. Соединим числовой литерал 1 с входом «IN1» функции ADD, а выход «OUT» функции ADD соединим с входом «IN0» функции SEL. В свою очередь, выход «OUT» функции SEL соединим с входным коннектором переменной Cnt, а выходной коннектор переменной Cnt соединим с входом переменной «Out». Соединение блоков осуществляется путем зажатия левой кнопки мыши на коннекторе блока, будет создана линия связи которую необходимо протянуть до коннектора присоединяемого блока .
Далее присоединим сигнал с контакта, ассоциированного с переменной «Reset», управляющей сбросом счетчика, на вход «G» функции «SEL», а конфигурационную переменную «ResetCounterValue» на вход «IN1». Таким образом, меняя значение переменной «Reset» мы управляем значением переменной «Cnt» через функцию выбора значения «SEL» . Осталось добавить связь между переменной «Cnt» и входом «IN2» функции сложения ADD, тем самым обеспечив увеличение значения счетчика на 1 за один цикл ПЛК.
Полученная реализация алгоритма счетчика на языке LD представлена
на image188
.
Функциональный блок становится доступным в панели библиотеки функций и функциональных блоков и может использоваться в программных модулях типа «Программа» и «Функциональный блок». На рис. 146 показано использование созданного функционального блока «CounterFBD» в основном программном модуле, написанном на языке FBD.
Функция
Добавление пользовательской функционального блока происходит путем нажатия на пункт «Функция» во всплывающем меню дерева проекта. В диалоговом окне задайте имя функции в поле «Имя POU», в поле «Тип POU» выберите «функция», в поле «Язык» выберите язык, на котором будет написан алгоритм работы функции.
Создадим функцию «AverageVal» на языке ST, которая будет вычислять среднее значение счетчиков в цикле. Поскольку счетчики никак не синхронизированы, среднее значение должно быть дробным. Выберем тип возвращаемого значения функции – для дробного значения это тип REAL.
В панели редактирования переменных и констант добавим пять переменных «Cnt1»..«Cnt5» типа INT, класса «Вход». К этим входам будут подключены выходные значения функциональных блоков, рассмотреных выше. Добавим переменную «InputsNumber» типа REAL, класса «Локальный».
Далее в редакторе языка ST пишется алгоритм и логика работы данной функции, как показано на рис. 149:
Для приведения типа INT к типу REAL воспользуемся функцией INT_TO_REAL из библиотеки функций и функциональных блоков, она преобразует значение типа INT на входе IN в значение типа REAL на выходе OUT (INT:IN) =>(REAL:OUT).
Добавим функцию в основной программный модуль. На панели библиотеки функций и функциональных блоков в разделе «Пользовательские POU» необходимо выбрать функцию «AverageVal» и с помощью указателя мыши (зажав левую кнопку мыши) перенести данную функцию (Drag&Drop) в область редактирования FBD диаграммы программного модуля «program0».
Подключим к входам функции значения пяти счетчиков. Для сохранения
результата вычисления функции создадим переменную «AVCnt». На image194
показано использование созданной функции «AverageVal» в основном
программном модуле, написанном на языке FBD.
Ресурс¶
Согласно стандарту IEC 61131-3, каждый проект должен иметь как минимум один ресурс, с определённым в нём как минимум одним экземпляром. Экземпляр представляет собой элемент, связанный с программным модулем типа «Программа» и одной определённой задачей. По умолчанию, инструментальная среда разработки Beremiz создаёт для нового проекта один ресурс.
Глобальные переменные ресурса¶
Глобальные переменные ресурса объявляются аналогично глобальным переменным проекта на панели переменных и констан выбранного ресурса с использованием кнопки «Добавить переменную», либо «Добавить переменные» (см. таблицу 3).
Использование данных глобальных переменных на уровне ресурса также аналогично использованию конфигурационных переменных проекта в программных модулях. Для использования в программном модуле глобальной переменной ресурса, добавьте в модуль переменную класса «Внешняя» с таким же именем, как у глобальной переменной, объявленные выше для ресурса.
Задачи и экземпляры ресурса¶
Для создания экземпляра необходимо наличие как минимум одного программного модуля типа «Программа» в проекте и как минимум одной задачи, определённой в панели редактирования ресурса.
После добавления задачи с помощью кнопки «Добавить» (данная кнопка
аналогична кнопки «Добавить» на панели переменных и констант),
необходимо задать её уникальное имя (поле «Имя») и выбрать тип
выполнения задачи (поле «Запуск», см. image196
):
«Циклический» – выполнение программного модуля типа «Программа» через заданный интервал времени, указанный в поле «Интервал»;
«Прерывание» – выполнение программного модуля типа «Программа» один раз при наступлении значения TRUE глобальной переменной типа BOOL, определённой на уровне проекта, либо на уровне ресурса, указанной в поле «Источник».
В случае выбора типа выполнения «Цикличное», в поле «Интервал» необходимо указать интервал, с которым будет выполняться данная задача. Двойной щелчок левой кнопкой мыши по полю «Интервал» приводит к появлению кнопки «…».
Нажатие данной кнопки вызывает диалог «Редактировать продолжительность» в котором можно указать время, используя микросекунды, миллисекунды, секунды, минуты, часы и дни.
Завершение ввода времени кнопкой «OK» приводит к закрытию диалога и добавлению данного интервала времени в поле «Интервал» добавляемой задачи.
В случае выбора типа выполнения «Прерывание» в поле «Источник»
необходимо указать переменную типа BOOL, определённую глобально либо на
уровне проекта, либо на уровне ресурса.
На image200
выбирается переменная «globalFlag», определённая в данном
ресурсе.
Задача будет выполнена один раз, как только значение переменной, определённой в этом поле, будет TRUE. Поле «Приоритет» позволяет указать приоритет выполнения задачи, по умолчанию все задачи имеют приоритет 0. Следует отметить, что в ресурсе должна быть определена как минимум одна задача с типом выполнения «Цикличное», в противном случае будет ошибка в компиляции в отладочной консоли . После того как задачи определены, их можно использовать в экземплярах. Создание экземпляра происходит аналогичным образом с помощью кнопки «Добавить». Необходимо выбрать уникальное имя экземпляра и далее указать программный модуль типа «Программа» в поле «Тип» и одну из задач в поле «Задача». Например, в проекте определено два программных модуля типа «Программа»: «program0» и «program1».
Соответственно, при создании экземпляра в поле «Тип» оба этих программных модуля будут доступны (см. рис. 159).
Аналогичным образом выбирается задача из списка, в котором будут отображены определённые ранее задачи.
В каждом проекте в ресурсе должен быть определен как минимум один экземпляр, в противном случае будет ошибка выдана компиляции в отладочной консоли.
Типы данных¶
Добавление типа данных происходит выбором пункта «Типа данных» в меню
дерева проекта (см. image204
) в уже созданный проект, содержащий
программный модуль типа «Программа» – «program0».
Будет создан массив типа INT размерностью 11 элементов. В дереве проекта
появится панель редактирования добавленного типа данных с именем
«datatype0». В поле «Механизм создания нового типа»
необходимо выбрать «Массив» и указать тип INT, как показано на image205
:
С помощью кнопки «Добавить» (см. таблицу 10) создаётся поле для массива с указанием его размерности в соответствующем формате.
После выполнения вышеперечисленных операций тип «datatype0» может быть использован для определения переменных в программных модулях, так же как и базовые типы данных.
Сборка и передача на целевое устройство прикладной программы¶
Следующими шагами после создания основных элементов проекта является его сборка (компиляция и компоновка), передача полученного исполняемого файла на целевое устройство и отладка данной прикладной программы.
Сборка проекта осуществляется с помощью соответствующих кнопок, находящихся на панели инструментов . Для успешного завершения данной операции каждый проект должен иметь как минимум один ресурс (как уже упоминалось, при создании проекта по умолчанию ресурс будет создан). В ресурсе должна быть определена, как минимум, одна задача циклического типа и, как минимум, один экземпляр. Соответственно, проект обязан содержать, как минимум, один программный модуль типа «Программа», причём тело, т.е. алгоритм и логика его выполнения, не может быть пустым (в противном случае будет ошибка компиляции).
Возможность передачи на целевое устройство прикладной программы и её отладки определяется наличием запущенной на целевом устройстве серверной части среды разработки Beremiz.
Среда разработки Beremiz предоставляет следующие возможности отладки:
Просмотр и изменение значения всех переменных проекта, используя панель отладки;
Визуально отслеживание выполнения программ на графических языках и изменение значения различных графических элементов конкретного языка;
Отображение значений переменных в виде графика.
Далее подробнее рассказывается про сборку прикладной программы, соединение с целевым устройством и передачу на него исполняемого файла и его отладке.
Сборка прикладной программы¶
Прежде чем проект будет передан ПЛК, его необходимо собрать. Настроить целевую платформу для сборки можно в окне настройки проекта, на вкладке Конфигурация.
Для сборки проекта нажмите кнопку «Сборка проекта в директории сборки» (см. табл. 2). Результаты сборки выводятся в консоль, расположенную в нижней части окна программы, ошибки сборки выделяются красным цветом. На примере проекта First_steps после сборки в консоль выведено сообщение о том, что сборка проведена успешно.
Пересборку проекта можно осуществить, очистив директорию сборки проекта нажатием на кнопку «Очистить директорию сборки проекта» (см. табл.2). Будет удален сгенерированный на языке ST код проекта и скомпилированный бинарный файл прошивки ПЛК. После этого нажмите кнопку «Сборка проекта в директории сборки», и проект будет собран заново.
Запуск серверной части для отладки¶
Серверная часть среды разработки 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. Он позволяет отслеживать состояние выполнения программы через браузер. Адрес: http://<ip-адрес целевого устройства>:<8009>. 8009 – порт по умолчанию. |
После указания всех параметров команды запуска серверной части Beremiz можно ввести адрес директории, в которой будут храниться файлы на файловой системе целевого устройства. По умолчанию этой директорией является временная папка, созданная для текущего запущенного экземпляра службы Beremiz_service.
Как правило, данный сценарий запускается в автоматическом режиме при включении целевого устройства, средствами операционной системы.
Соединение с целевым устройством и передача исполняемого файла
После того как скрипт серверной части среды разработки Beremiz запущен, можно производить соединение с целевым устройством. В панели настроек проекта необходимо указать URI-адрес целевого устройства:
PYRO://<IP-адрес>:<номер порт>
На image210
показан URI адрес целевого устройства LOCAL://,это адрес
Soft PLC на локальной машине, и выделена красным цветом кнопка
«Покдлючиться к целевому ПЛК» (см. таблицу 2), которая используется для
соединения с целевым устройством.
В случае успешного соединения, в отладочной консоли будет выведено соответствующее сообщение и выведен статус прикладной программы.
Статусы прикладной программы могут быть следующие:
«PLC Empty» – прикладная программа отсутствует;
«PLC Started» – прикладная программа на целевом устройстве есть и она выполняется;
«PLC Stopped» – прикладная программа на целевом устройстве есть, но остановлена.
Используя кнопки передачи, запуска и остановки прикладной программы на
целевом устройстве (см. таблицу 2) можно передать исполняемый файл
прикладной программы, запустить его и остановить. В отладочной консоли
будут выведены соответствующие сообщения (после передачи, запуска и
остановки прикладной программы), как показано на image212
:
Отладка прикладной программы¶
После установки соединения с целевым устройством и запуском прикладной программы на выполнение, среда разработки Beremiz позволяет отслеживать и изменять значения переменных программных модулей, из которых состоит проект.
Retain переменные в прикладной программе¶
В SoftPLC реализована поддержка переменных, для которых в прикладной программе определено свойство реманентности (Retain-переменные). При подключении к серверной части среды разработки Beremiz, создается временная папка для хранения прикладной программы, загружаемой в SoftPLC, Retain переменные хранятся в этой временной папке в виде бинарного файла, содержащего в себе хеш-сумму проекта, значения Retain переменных в бинарном формате, и контрольную сумму файла, вычисляемую по алгоритму CRC32.
Запуск отладчика¶
Осуществив передачу скомпилированной программы на SoftPLC, запустите отладку, нажав кнопку «Запустить ПЛК» (см. табл. 2). Переменные принимают исходные значения, затем начинается исполнение программы в ПЛК. Отладчик запущен.
Отладка текстовых языков¶
Работа с отладчиком подразумевает работу с экземпляром загруженной в ПЛК программы. Функциональные блоки, функции и переменные тоже имеют свои экземпляры, доступные для отладки только после того как программа будет запущена на исполнение. В левом нижнем углу основного окна среды разработки расположена панель экземпляров проекта. В адресной строке написан адрес ресурса, для которого ниже отображены экземпляры программ, глобальных переменных и функциональных блоков определенных в данном ресурсе.
Переход к родительскому экземпляру и его глобальным переменным осуществляется кнопкой «Родительский экземпляр»(см. табл. 11).
Кнопка «Отладка экземпляра» (см. табл. 11) напротив адресной строки в верхней части панели запустит отладку выбранного ресурса(программы или функционального блока). Для того чтобы включить отладку экземпляра блока или переменной, нажмите кнопку напротив этого элемента на панели. На панели отладки отобразятся текущие значения добавленных переменных.
После того как переменная выведена на панель отладки, для того чтобы установить значение нажмите кнопку «Форсировать значение».
В появившемся диалоге введите значение переменной (см. image217
). Для
булевых переменных в диалоге присутствует кнопка «Переключить значение»,
которая меняет значение переменной на противоположное. После изменения
значения переменной, она будет выделена синим цветом в таблице
переменных и их значений во вкладке «Отладчик».
Форсируя значение переменной, вы устанавливаете неизменяемое значение, переопределение которого выполняемой программой будет невозможно. После установки значения, его можно освободить, дав возможность программе изменять значение переменной. Для освобождения переменной нажмите кнопку «Освободить значение».
Для корректного изменения, вводимое значение должно соответствовать типу
переменной, иначе будет выведено сообщение об ошибке, как показано
на image219
:
Отладка графических языков¶
Во время отладки прикладной программы, в которой часть программных
модулей написаны на графических языках, есть возможность видеть
изменения всех значений на диаграмме и вносить необходимые изменения
прямо на ней. Как уже упоминалось ранее, в случае нажатия
кнопки запуска режима отладки (на image220
выделены красным цветом) для
экземпляра программы, написанной на одном из графических языков,
откроется вкладка с панелью диаграммы в режиме отладки.
Эти вкладки полностью повторяют те, в которых графические диаграммы программ или функциональных блоков редактируются, за исключением того что во вкладках отладчика невозможно внести какие-либо изменения, а связи между элементами выделяются разным цветом в зависимости от значения переменной, передаваемого по этой связи.
Линии, не выделенные цветом передают либо булевое значение False, либо переменную не булевого типа (INT, DINT, WORD, REAL, TIME, и т.д.). Оранжевого цвета связи, передающие константное выражение. Светло-зелёным цветом выделены связи, которые передают булевое значение True. Связи, выделенные светло-голубым и тёмно-синим цветом передают значения непосредственно установленные пользователем, значение True соответствует светло-голубому цвету, False - тёмно-синему.
Отладка FBD диаграммы
В режиме отладки FBD диаграммы есть возможность устанавливать входные и выходные значения переменных (с помощью всплывающего меню, которые вызывается нажатием правой клавишей по соединению) для функциональных блоков, а также в целом видеть все остальные значения на входах и выходах элементов диаграммы.
Изменённые значения в режиме отладки выделяются синим цветом. После выбора во всплывающем меню «Освободить значение» значение возвращается в то, которое получается в результате выполнения логики и алгоритма данного модуля на данном участке, а соединение на диаграмме становятся исходного цвета.
Отладка LD диаграммы
Отладка LD диаграммы осуществляется аналогично отладке FBD диаграммы. Для вызова всплывающего меню (см. рис. 196), в котором можно установить желаемое значение для контакта или катушки необходимо нажать правую клавишу мыши.
Появится диалог (см. image224
), в котором нужно ввести значение типа
BOOL: TRUE–контакт «ON», FALSE – контакт «OFF».
Отладка SFC диаграммы
Отладка SFC диаграммы происходит аналогично отладке диаграмм FBD и LD. С
помощью всплывающего меню (см. image225
), есть возможность устанавливать
активность для шагов и переходов.
На image226
показано, как устанавливается значение (после выбора
«Форсировать значение», появится диалог) TRUE для шага «ResetCounter».
После установки значения шага в TRUE с помощью режима отладки, шаг будет
выделен голубым цветом. Как можно заметить по image227
, т.к. шаг
«ResetCounter» стал активным, блок действий, ассоциированный с ним, так
же стал активным (выделен зелёным цветом), а действия внутри него, в
данном случае присвоение переменной «Cnt» значения конфигурационной
переменной «ResetCounterValue», а переменной «Out» значения переменной
«Cnt»:
Cnt := ResetCounterValue;
Out := Cnt;
стало выполняться.
Так как квалификатор этого действия – N, то оно будет выполняться до тех пор, пока шаг активен.
График изменения значений переменной
Среда разработки Beremiz так же позволяет отображать в виде графика изменение значения переменной в режиме отладки. Для вывода панели с графиком, необходимо два раза кликнуть левой кнопкой мыши по кнопке «Отладка экземпляра» напротив переменной в панели экземпляров проекта.
Появившееся панель графика изменения переменной позволяет отслеживать то, как значение определённой переменной изменяется в течение времени.
На данной панели можно установить интервал обновления и масштаб отображения графика, а так же передвигать позицию графика.