Руководство по программированию ПЛК BRIC в среде разработки OpenPLC
Интегрированная среда разработки OpenPLC предназначена для создания и отладки прикладных программ на языках стандарта IEC 61131-3 для программируемых логических контроллеров. В качестве языков описания алгоритмов и логики работы данных программ, могут выступать как текстовые Structured Text (далее ST) и Instruction List (далее IL), так и графические Function Block Diagram (далее FBD), Ladder Diagram (далее LD), Sequential Function Chart (далее SFC).
Руководство по программированию ПЛК BRIC в среде разработки OpenPLC
Интегрированная среда разработки OpenPLC предназначена для создания и отладки прикладных программ на языках стандарта IEC 61131-3 для программируемых логических контроллеров. В качестве языков описания алгоритмов и логики работы данных программ, могут выступать как текстовые Structured Text (далее ST) и Instruction List (далее IL), так и графические Function Block Diagram (далее FBD), Ladder Diagram (далее LD), Sequential Function Chart (далее SFC).
В данном руководстве представлено описание порядка программирования ПЛК BRIC в среде разработки BEREMIZ. Документ содержит информацию о назначении программы, условиях выполнения, элементах пользовательского интерфейса, порядке разработки прикладных программ. Рассмотрены основные её компоненты и их назначение. Описан процесс работы с редакторами языков стандарта IEC 61131-3. В документе приведены тексты сообщений, выдаваемых в ходе выполнения программы и описание их содержания.
Инсталлятор в формате «.exe» можно скачать кликнув по
При переходе по ссылке открывается страница загрузки файла «Beremiz_BRIC_0_12_0_4_Setup.exe».
После скачивания необходимо запустить файл, дважды кликнув левой клавишей мыши. Открывается окно установки, в котором предлагается выбрать директорию.
После выбора папки необходимо нажать кнопку «OK», с момента которого начинается процесс распаковки файлов.
При успешной установке Beremiz выводится окно уведомления.
В результате установки в выбранной директории появится папка «Beremiz», в котором содержатся файлы и папки, представленные на рисунке ниже. Также появится ярлык на рабочем столе.
Запуск Beremiz осуществляется двойным нажатием левой клавишей мыши по файлу «Beremiz.exe», либо по ярлыку на рабочем столе.
Запуск интегрированной среды разработки OpenPLC и обзор главной страницы
Для создания нового проекта для ПЛК BRIC необходимо зайти в OpenPLC, обозначенную значком, указанным на рисунке.
Проект в Beremiz представляет собой именованную папку, в которой лежат исходные файлы. Папка должна быть обязательно пустой и не защищена от записи. Если в папке уже есть файлы, будет выдана соответствующая ошибка. В созданной папке будут сохранены следующие файлы и папки:
«beremiz.xml» – в данном XML файле сохраняются настройки специфичные для среды разработки Beremiz относительно проекта;
«plc.xml» – в данном XML файле сохраняется полное описание проекта: всех программных модулей, ресурсов, пользовательских типов данных, данных о проекте, настроек редакторов графических языков IEC 61131-3;
папка «build», которая хранит генерируемый ST и C код, а также получаемый исполняемый бинарный файл прошивки.
Внимание
Название проекта не должно содержать пробел и недопустимые символы
ШАГ 1. СОЗДАНИЕ НОВОГО ПРОЕКТА
Новый проект создаётся с помощью главного меню «File» – «New», либо с помощью кнопки «New» на панели управления.
Имя программного модуля, присвоенное по умолчанию, может быть заменено на любое имя, соответствующее назначению данного программного модуля.
Тип основного программного модуля – «Программа», в дальнейшем в проект можно добавить дополнительные программные модули, функции и функциональные блоки.
В поле «Язык» необходимо выбрать из списка один из языков стандарта IEC 61131-3 (IL, ST, LD, FBD, SFC), на котором будут реализованы алгоритмы и логика работы данного добавляемого программного модуля.
При нажатии кнопки «ОК» в проект будет добавлен основной программный модуль с выбранными параметрами, ресурс проекта будет конфигурирован по умолчанию: добавлена одна задача циклического выполнения с интервалом 20 мс, и один экземпляр основной программы. При нажатии кнопки «Cancel» будет создан пустой проект без каких-либо настроек.
Для подробного описания процесса создания разработаем новую программу на языке FBD. Например, пусть программа является счетчиком, увеличивающий значение выхода на единицу до тех пор, пока на входе «RES» не будет установлено значение True. Инкрементация значения происходит в каждом цикле основной программы. Регулировать интервал цикла можно изменяя длительность задачи для экземпляра основной программы в панели ресурсов.
Также для подробного изучения создания проекта добавим функциональные блоки счетчиков, написанных на языках FBD, LD и ST.
Конфигурационные переменные проекта
Конфигурационные переменные позволяют программным модулям типа «Программа» и «Функциональный блок» использовать общие переменные, которые будут определены в глобальной области видимости проекта.
В панели переменных и констант добавим конфигурационную константу «ZERO» типа INT с начальным значением 0, с помощью кнопки «Добавить переменную». Таким же образом добавим остальные переменные. На рисунке ниже предоставлен результат объявления конфигурационных переменных.
Для того чтобы к данной конфигурационной переменной можно было обращаться из программных модулей типа «Программа» или «Функциональный блок» необходимо в их панели редактирования в панели переменных и констант создать переменную с таким же именем, как и ранее объявленная глобальная, и установить её класс «Внешний» (External).
Настройки сборки проекта и соединения с ПЛК BRIC
Для использования написанной прикладной программы необходимо её собрать (скомпилировать и скомпоновать), т.е. получить исполняемый файл и передать на целевое устройство (ПЛК BRIC) для отладки или просто исполнения. В связи с этим основными настройками являются: «URI системы исполнения» - адрес целевого устройства, и целевая платформа - архитектура платформы целевого устройства.
Адресом последовательно порта ПЛК 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).
Добавление пользовательского функционального блока происходит путем нажатия на пункт «Функциональный блок» во всплывающем меню дерева проекта . В диалоговом окне задаем имя функционального блока в поле «POU Name», в поле «POU Type» выбираем «functionBlock», в поле «Language» выбираем язык, на котором будет написан алгоритм работы блока.
Создаём функциональный блок с именем «FBD», в котором инструментами языка FBD будет реализован счетчик , принимающий на вход переменную RES типа BOOL, и возвращающий значение счетчика OUT. На рисунке ниже показана реализация данного функционального блока.
Описание пользовательского функционального блока на языке 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» и может использоваться в программных модулях типа «Программа» и «Функциональный блок».
Внимание
Наименование функционального блока не должно совападать с существуюущими в библиотеке
Использование созданного функционального блока FBD в основном программном модуле
Функциональный блок на языке LD
Создаём функциональный блок с именем «FBD», в котором инструментами языка FBD будет реализован счетчик , принимающий на вход переменную RES типа BOOL, и возвращающий значение счетчика OUT.
Добавим в панель переменных и констант возвращаемое значение «OUT» типа INT и класса «Выход», локальную переменную «COUNT» типа INT, внешнюю конфигурационную переменную «ZERO» типа INT, и входную переменную «RES» типа BOOL.
Для удобства редактирования LD диаграмм в редакторе существует функция Drag&Drop , необходимые функциональные блоки и переменные можно добавить в поле редактирования из библиотеки функций и функциональных блоков из таблицы переменных путем перетаскивания в поле редактирования. Необходимо левой клавишей мыши зажать столбец «#» для переменной в панели переменных и констант, далее перенести указатель на область редактирования LD диаграммы и отпустить кнопку мыши (Drag&Drop).
Добавим шину питания, к ней присоединим контакт, связанный с переменной «RES».
Далее добавим числовой литерал со значением «1» при помощи кнопки «Создать новую переменную», в диалоговом окне создания переменной в поле «Expression» напишем «1». Таким способом задается шаг инкрементации счетчика. Для написания алгоритма и логики выполнения данной программы будут добавлены две функции: «ADD» и «SEL». Добавление данных функций удобнее осуществить переносом соответствующей функции с помощью мыши (Drag&Drop) из панели Библиотеки функций и функциональных блоков в область редактирования LD диаграммы функционального блока.
На рисунке ниже показана реализация всего функционального блока на языке LD.
Функциональный блок становится доступным в панели библиотеки функций и функциональных блоков «User-defined POUs» и может использоваться в программных модулях типа «Программа» и «Функциональный блок». На рисунке ниже показано использование созданного функционального блока «FB_LD» в основном программном модуле, написанном на языке FBD.
Внимание
Наименование функционального блока не должно совападать с существуюущими в библиотеке
Использование функционального блока на языке LD в основном программном модуле
Функциональный блок на языке ST
Создаём функциональный блок с именем «FB_ST», в котором инструментами языка ST будет реализован счетчик , принимающий на вход переменную RES типа BOOL, и возвращающий значение счетчика OUT.
На рисунке ниже показана реализация данного функционального блока на языке ST.
Описание пользовательского функционального блока на языке ST
Функциональный блок становится доступным в панели библиотеки функций и функциональных блоков «User-defined POUs» и может использоваться в программных модулях типа «Программа» и «Функциональный блок».
Внимание
Наименование функционального блока не должно совападать с существуюущими в библиотеке
Использование функционального блока на языке ST в основном программном модуле
Ресурс
Согласно стандарту IEC 61131-3, каждый проект должен иметь как минимум один ресурс, с определённым в нём как минимум одним экземпляром. Экземпляр представляет собой элемент, связанный с программным модулем типа «Программа» и одной определённой задачей. По умолчанию, инструментальная среда разработки Beremiz создаёт для нового проекта один ресурс.
Глобальные переменные ресурса объявляются аналогично глобальным переменным проекта на панели переменных и констан выбранного ресурса с использованием кнопки «Добавить переменную», либо «Добавить переменные»
Пример объявления в проекте глобальной переменной
Использование данных глобальных переменных на уровне ресурса также аналогично использованию конфигурационных переменных проекта в программных модулях. Для использования в программном модуле глобальной переменной ресурса, добавьте в модуль переменную класса «Внешняя» (External) с таким же именем, как у глобальной переменной, объявленные выше для ресурса.
Для создания экземпляра необходимо наличие как минимум одного программного модуля типа «Программа» в проекте и как минимум одной задачи, определённой в панели редактирования ресурса.
После добавления задачи с помощью кнопки «Добавить» (данная кнопка аналогична кнопки «Добавить» на панели переменных и констант), необходимо задать её уникальное имя (поле «Name») и выбрать тип выполнения задачи (поле «Triggering»):
«Циклический» – выполнение программного модуля типа «Программа» через заданный интервал времени, указанный в поле «Interval»;
«Прерывание» – выполнение программного модуля типа «Программа» один раз при наступлении значения TRUE глобальной переменной типа BOOL, определённой на уровне проекта, либо на уровне ресурса, указанной в поле «Single».
В случае выбора типа выполнения «Cycle», в поле «Interval» необходимо указать интервал, с которым будет выполняться данная задача. Двойной щелчок левой кнопкой мыши по полю «Interval» приводит к появлению кнопки «…». Нажатие данной кнопки вызывает диалог «Edit Duration» в котором можно указать время, используя микросекунды, миллисекунды, секунды, минуты, часы и дни.
Завершение ввода времени кнопкой «OK» приводит к закрытию диалога и добавлению данного интервала времени в поле «Interval» добавляемой задачи.
В случае выбора типа выполнения «Interrupt» в поле «Источник» необходимо указать переменную типа BOOL, определённую глобально либо на уровне проекта, либо на уровне ресурса. На рисунке ниже выбирается переменная «globalFlag», определённая в данном ресурсе.
Выбор переменной типа BOOL как источника прерывания для начала выполнения задачи
Задача будет выполнена один раз, как только значение переменной, определённой в этом поле, будет TRUE. Поле «Priority» позволяет указать приоритет выполнения задачи, по умолчанию все задачи имеют приоритет 0. Следует отметить, что в ресурсе должна быть определена как минимум одна задача с типом выполнения «Cycle», в противном случае будет ошибка в компиляции в отладочной консоли . После того как задачи определены, их можно использовать в экземплярах. Создание экземпляра происходит аналогичным образом с помощью кнопки «Добавить». Необходимо выбрать уникальное имя экземпляра и далее указать программный модуль типа «Программа» в поле «Type» и одну из задач в поле «Task».
В каждом проекте в ресурсе должен быть определен как минимум один экземпляр, в противном случае будет ошибка выдана компиляции в отладочной консоли.
ШАГ 2. СБОРКА И ПЕРЕДАЧА НА ЦЕЛЕВОЕ УСТРОЙСТВО ПРИКЛАДНОЙ ПРОГРАММЫ
Следующими шагами после создания основных элементов проекта является его сборка (компиляция и компоновка), передача полученного исполняемого файла на целевое устройство.
Сборка проекта осуществляется с помощью соответствующих кнопок, находящихся на панели инструментов . Для успешного завершения данной операции каждый проект должен иметь как минимум один ресурс (как уже упоминалось, при создании проекта по умолчанию ресурс будет создан). В ресурсе должна быть определена, как минимум, одна задача циклического типа и, как минимум, один экземпляр. Соответственно, проект обязан содержать, как минимум, один программный модуль типа «Программа», причём тело, т.е. алгоритм и логика его выполнения, не может быть пустым (в противном случае будет ошибка компиляции).
Для сборки проекта нажмите кнопку «Сборка проекта в директории сборки».
Результаты сборки выводятся в консоль, расположенную в нижней части окна программы, ошибки сборки выделяются красным цветом. На примере нашего проекта после сборки в консоль выведено сообщение о том, что сборка проведена успешно (подчеркнуто красным цветом).
Пересборку проекта можно осуществить, очистив директорию сборки проекта нажатием на кнопку «Очистить директорию сборки проекта». Будет удален сгенерированный на языке ST код проекта и скомпилированный бинарный файл прошивки ПЛК. После этого нажмите кнопку «Сборка проекта в директории сборки», и проект будет собран заново.
Итоговый бинарный файл, который будет загружен в ПЛК, находится в папке проекта с названием sofi_task_crc.bin. На рисунке ниже показан путь в папке проекта файла и название файла.
Далее нажимаем на кнопку «Enter Password» и вводим пароль (пароль по умолчанию «bric»), после чего нажимаем на кнопку «Download task» и выбираем запрашиваемый файл sofi_task_crc.bin. После нажатия кнопки «Download» дожидаемся окончания загрузки. После появления надписи «File Upload Done!» нажимаем на кнопку «Apply changes». Переход на главную страницу произойдет автоматически через 10 секунд.
Нажимая кнопку «Hide self regs» и устанавливая минимальный «Update period» мы можем в режиме реального времени наблюдать за изменениями показаний счетчиков при «RES» в состоянии False.
WEB-страница контроллера с переменными при RES в состоянии False
При изменении состояния переменной «RES» в True, путем нажатия кнопки «Change value», мы можем увидеть сброс всех счетчиков.
WEB-страница контроллера с переменными при RES в состоянии True
Для ПЛК BRIC имеется возможность опроса данных по протоколу Modbus, ретрансляции и расширения адресного пространства. Для этого необходимо заложить в структуру проекта элемент «Поддержка Modbus» и элемент для выполнения необходимого функционала:
ModbusRTUMaster (фоновый опрос устройств для чтения и записи данных по протоколу Modbus);
ModbusRoute (ретрансляция пакетов из одного канала в другой);
MemoryArea (расширение адресного пространства).
По умолчанию, Modbus адресное пространство имеет зарезервированную область адресов:
0х30000–0х39999 – Область адресов, выделенных под чтение и запись массивов пользовательской программы;
0х40000–0х49999 – Oбласть адресов, выделенных под чтение и запись регистров пользовательской программы;
0х60000–0х69999 – Область адресов, выделенных под системные регистры ПЛК.
Настройка интерфейсов и протоколов обмена в OpenPLC имеет следующую последовательность действий:
Обмен данными со сторонними устройствами по Modbus осуществляет элемент «ModbusRTUMaster». Для подключения необходимо добавить его в элемент «Поддержка Modbus», щелкнув правой клавишей мыши и выбрав пункт «Добавить ModbusRTUMaster». Затем в окне конфигурации настроить канал опроса. Для каждого физического канала может быть не более одного элемента «ModbusRTUMaster».
Установка параметров ModbusRTUMaster включает следующие позиции:
Последовательный порт (выбрать порт из перечня: RS_232_UART, RS_485_1_UART, RS_485_2_UART)
Скорость передачи данных (выбор производится из установленного ряда: 1200, 2400, 4800, 9600,14400, 19200, 28800, 38400, 56000 57600, 76800, 115200 бит/с.)
Количество информационных битов
Тип чётности байта при её наличии (выбор производится из установленного ряда: even(чётный), none(без чётности), odd(нёчетный))
Количество Стоп–битов
Период опроса.
Далее необходимо добавить элементы «ModbusRequest» и настроить их. Разрешается добавлять несколько элементов с разными параметрами, тогда они будут встроены в порядок опроса последовательно.
Установка параметров ModbusRequest включает следующие позиции:
Выбор команды (описание команд указано в Приложении Г)
Адрес slave–устройства с которым производится обмен данными по Modbus протоколу
Число Reg/Coil в одном пакете (для Reg до 120)
Адрес первого Reg/Coil в пакете согласно адресного пространства slave–устройства
Таймаут в мс. (не должен превышать период опроса).
После установления необходимых параметров «ModbusRequest» необходимо обозначить глобальные переменные, которые используются при передаче данных по протоколу Modbus. Для этого в панели переменных и констант необходимо для переменной в ячейке «Location» записать ссылку на адрес. Подробное описание конфигурирования см. в разделе Привязка глобальным переменным Modbus адреса.
ПЛК BRIC имеет возможность ретранслировать пакеты из одного канала в другой. Также есть возможность приёма-передачи пакетов Modbus TCP в Modbus RTU и Modbus RTU – Modbus RTU. Для подключения подмодуля «ModbusRoute» необходимо подвести курсор к созданной ветке «Поддержка Modbus», щелкнуть правой клавишей мыши и выбрать пункт «Добавить ModbusRoute».
ПЛК BRIC имеет возможность увеличить адресное пространство для каждого типа регистров (Coils, Input Discrete, Input Registers, Holding Registers) при помощи подключения подмодуля «MemoryArea». Для подключения «MemoryArea» необходимо подвести курсор к созданной ветке «Поддержка Modbus», щелкнуть правой клавишей мыши и выбрать пункт «Добавить MemoryArea».
Установка параметров MemoryArea включает следующие позиции:
Выбор типа регистра адресного пространства (Coils, Input Discrete, Input Registers, Holding Registers)
Regs_number количество регистров в адресном пространстве 3
Start_Address первый Modbus-адрес адресного пространства.
Расположение разных типов регистров независимо, поэтому номера регистров разных типов могут иметь одинаковое значение. Ограничением по количеству регистров является:
Размер итогового файла сборки проекта, указываемого в отладочной панели под элементом «dec» строки (text data bss dec hex filename), составляющий не более «197524»
Количество регистров в адресном пространстве (65530).
Для запроса с ПЛК информации хранящейся в пользовательских регистрах, необходимо интересуемым переменным присвоить Modbus адреса. Для этого в панели переменных и констант для необходимой переменной в ячейке «Location» требуется записать Modbus адрес 1 .
Глобальная переменная используется для записи Reg/Coil slave–устройства (WriteSingleСoil, WriteSingleRegister, WriteMultipleCoils, WriteMultipleRegisters)
I
Глобальная переменная используется для чтения Reg/Coil slave–устройства (ReadCoils, ReadInputDiscretes, ReadHoldingRegisters, ReadInputRegisters)
M
Глобальная переменная используется для записи чтения
В ПЛК BRIC реализовано подключение нескольких устройств линейки BRIC по межмодульной шине. Для этого необходимо добавить «Поддержка modules» в структуру проекта, созданного в OpenPLC. Для добавления нового устройства необходимо подвести курсор к созданной ветке «Поддержка modules», щелкнуть левой клавишей мыши и выбрать пункт «Добавить AO/DO/DI/AI/BRIC», как показано на рисунке ниже:
Добавление в структуру проекта модуля расширения/ПЛК по межмодульной шине
В окне добавленного модуля автоматически присваивается номер модуля расширения/ПЛК в межмодульной шине, пользователь имеет возможность изменить номер (верхний левый угол окна).
Область регистров модулей расширения/ПЛК делятся на 2 типа:
PDO – регистры, автоматически опрашиваемые ведущим ПЛК;
SDO – регистры, опрашиваемые ведущим ПЛК при указании пользователем.
Внимание
Для работы с переменными SDO необходимо в окне модуля расширения/ПЛК в ячейке «Polling» указать действие, которое необходимо совершить с переменной («read» – чтение, «write» – запись). После этого их можно использовать в функциях, ФБ и программах.
Подсветку синтаксиса кода, написанного пользователем, т.е. выделения особыми параметрами шрифта ключевых слов данных языков;
Нумерации строк, что может быть полезным при возникновении ошибок в программе, т.к. транслятор кода ST в C выдаёт номер строки, в которой найдена ошибка;
Сворачивание кода структурных элементов языка: определения функции, определение типа и т.д.
Увеличение или уменьшение размера шрифт выполняется с помощью Ctrl + <колёсико мыши>.
В качестве результата сравнения всегда используется значение типа BOOL.
4. Операция присвоения
Для обозначения присвоения используется парный знак «:=». В правой и левой части выражения должны быть операнды одного типа (автоматического приведения типов не предусмотрено). В левой части выражения (принимающая сторона) может быть использована только переменная. Правая часть может содержать выражение или константу.
Служит для задания цикла с фиксированным количеством итераций.
Формат конструкции следующий:
FOR<переменная управления> := <выражение1> TO <выражение2>
[BY< выражение3>] DO
<выполняемое выражение>
END_FOR;
Примечание
Выражения <выражение1> … <выражение1> вычисляются до входа в цикл, поэтому изменения значений переменных, входящих в любое из этих выражений, не приведет к изменению числа итераций.
При задании условий цикла считается, что <переменная управления>, <выражение1> …<выражение3> имеют тип INT. Выход из цикла будет произведен в том случае, если значение переменной цикла превысит значение <выражение3>.
Например:
FORi:=1TO10BY2DOk:=k*2;END_FOR;
Оператор BY задает приращение переменной цикла (в данном случае i будет увеличиваться на 2 при каждом проходе по циклу). Если оператор BY не указан, то приращение равно 1.
Например:
FOR i := 1 TO k / 2 DO
var3 := var3 + k;
k := k – 1;
END_FOR;
Внутри цикла могут использоваться другие циклы, операторы IF и CASE. Для выхода из цикла (любого типа) может использоваться оператор EXIT.
На строках между DO и END_FOR производится изменение переменной k, при этом эти строки выполнятся пять раз.
Например:
FORi:=1TO5DOi:=55;END_FOR;
При первом проходе значение i будет равно 1, потом в теле цикла изменится на 55, но на втором проходе значение i станет равно 2 – следующему значению по условиям цикла.
7. Цикл WHILE
Служит для определения цикла с предусловием. Цикл будет исполняться до тех пор, пока выражение в предложении WHILE возвращает TRUE.
CASE_ELEMENT – это список значений, перечисленных через запятую. Элементом списка может быть целое число или диапазон целых чисел. Диапазон задается следующим образом BEGIN_VAL.. END_VAL.
Если текущее значение <выражение> не попало ни в один CASE_ELEMENT, то управление будет передано на предложение ELSE. Если предложение ELSE не указано, то никаких действий выполнено не будет.
Значение <выражение> может быть только целым.
Например:
CASE k OF
1:
k := k * 10;
2..5:
k := k * 5;
i := 0;
6, 9..20:
k := k – 1;
ELSE
k := 0;
i := 1;
END_CASE;
При задании списка значений необходимо выполнять следующие условия:
– наборы значений внутри одного CASE не должны пересекаться;
– при указании диапазона значений начало диапазона должно быть меньше его конца.
Действия, предусмотренные для обработки каждого из случаев CASE, могут использовать циклы, операторы IF и CASE.
Основа языка программирования IL, как и в случае Assembler, это переходы по меткам и аккумулятор. В аккумулятор загружается значения переменной, а дальнейшее выполнение алгоритма представляет собой извлечение значения из аккумулятора и совершение над ним операций. В таблице приведены операторы языка IL. Пример программы выполненной на IL приведен на рисунке.
Основными элементами языка FBD являются: переменные, функциональные блоки и соединения. При редактировании FBD диаграммы, в панели инструментов появляется следующая панель:
Перевод указателя мыши в состояние, при котором можно осуществлять выделение объектов в редакторе
Перемещение диаграммы
Перевод указателя мыши в состояние, при котором можно изменять размеры редактора
Создать новый комментарий
Вызов диалога создания комментария
Добавить переменную
Вызов диалога добавления переменной
Добавить ФБ
Вызов диалога добавления функционального блока
Добавить соединение
Вызов диалога добавления соединения
Для этого необходимо указателем мыши выбрать необходимую кнопку и нажать на свободное место в области редактирования FBD диаграммы. В зависимости от выбранного элемента появятся определённые диалоги добавления данного элемента.
Аналогичные действия можно выполнить с помощью всплывающего меню в области редактирования FBD диаграмм. Вызов данного меню происходит при помощи нажатия правой клавишей мыши и выбора пункта «Add» (Добавить), в котором будет: «Block» (Блок), «Variable» (Переменная), «Connection» (Соединение), «Comment» (Комментарий).
В данном диалоге приведено краткое описание функционального блока в нижнем левом окне и предоставлена возможность задать некоторые свойства (имя, количество входов, порядок выполнения).
Добавление блока происходит путем перетаскивания необходимой функции из панели библиотеки функций и функциональных блоков, через окно «Block Properties» или путем копирования существующего блока.
Переменные добавляются из панели переменных и констант с помощью перетаскивания левой клавишей мыши за область (#), указанную на рисунке ниже в область редактирования FBD диаграмм или через диалог «Variable Properties» (Свойства переменной), вызванный через всплывающего меню редактора языка FBD.
Добавление переменной из панели переменных и констант
В данном диалоге можно задать порядок выполнения переменной и изменить её класс («Input» (Входная), «Output» (Выходная), «InOut» (Входная/Выходная)).
Когда необходимо передать выходное значение одного функционального блока на один из входов другого для удобства можно использовать элемент «Connection» (Соединение). На схемах с большим количеством функциональных блоков элемент «Connection» позволяет избежать пересечения прямых соединений, которые приводит к тому, что схема становится менее понятной.
В данном диалоге можно выбрать тип соединения: «Connector» (Выходное соединение) – для выходного значения, «Continuation» (Входное соединение) – для входного значения, а так же необходимо указать имя данного соединения. Ниже представлен пример использования соединений.
Редактор FBD диаграмм позволяют добавлять комментарии на диаграмму. После выбора на панели редактирования комментария и добавления его в область редактирования появится диалог для ввода текста комментария.
Последовательность исполнения функций и функциональных блоков определяется порядком их выполнения. Автоматически он регламентируется следующим образом: чем выше и левее расположен верхний левый угол, описывающего функцию или ФБ прямоугольника, тем раньше данная функция или функциональный будет выполнен. Порядок выполнения может быть изменён вручную с помощью диалога свойств опцией «Execution Order» (Порядок выполнения).
Данный диалог позволяет определить модификатор данного контакта:
«Normal» (Нормальный);
«Negated» (Инверсный);
«Rising Edge» (Нарастание фронта);
«Falling Edge» (Спад фронта).
Диалог позволяет выбрать из списка переменную, к которой он связан. Переменные должны быть определены в панели переменных и констант и иметь тип переменной BOOL.
Еще одним способом добавления контакта на диаграмму перетаскивание из панели переменных и констант переменной типа BOOL и класса: «Входная», «Входная/Выходная», «Внешняя», «Локальная», «Временная». Для этого необходимо зажать левой кнопкой мыши за первый столбец (который имеет заголовок #) переменную, удовлетворяющую описанным выше критериям и перенести в область редактирования диаграммы.
При добавлении катушки на LD диаграмму появится диалог «Edit Coil Values» (Редактирование значения катушки).
Основными элементами языка SFC являются: начальный шаг, шаг, переход, блок действий, дивергенции, «прыжок». Программа на языке SFC состоит из набора шагов, связанных переходами.
Как только активной становится вкладка с редактированием SFC диаграммы, в панели инструментов появляется следующая панель.
Перевод указателя мыши в состояние, при котором можно осуществлять выделение объектов в редакторе
Перемещение диаграммы
Перевод указателя мыши в состояние, при котором можно изменять размеры редактора
Создать новый комментарий
Вызов диалога создания комментария
Создать новый начальный шаг
Вызов диалога редактирования шага
Создать новый шаг
Вызов диалога редактирования шага
Создать новый переход
Создать новый переход
Создать новый блок действий
Вызов диалога редактирования блока действий
Создать новую дивергенцию
Вызов диалога создания новой дивергенции и конвергенции
Создать новый «прыжок»
Вызов диалога создания«прыжка»
Добавить переменную
Вызов диалога добавления переменной
Добавить ФБ
Вызов диалога добавления функционального блока
Добавить соединение
Вызов диалога добавления соединения
Создать новую шину питания
Вызов диалога создания новой шины питания
Создать новый контакт
Вызов диалога создания нового контакта
Процедура добавления шага инициализации и обычного шага ничем не отличается. В обоих случаях вызывается диалог «Edit Step» (Редактировать шаг).
Диалоги редактирования шага инициализации и обычного шага SFC диаграммы
Согласно стандарту IEC 61131-3, на SFC диаграмме должен быть один шаг инициализации, который характеризует начальное состояние SFC-диаграммы и отображается со сдвоенными линиями на границах.
При добавлении на SFC диаграмму перехода, появится диалог «Edit transition» (Редактировать переход).
В данном диалоге необходимо выбрать тип перехода и его приоритет. Тип перехода может быть:
«Reference» (Ссылка);
«Inline» (Встроенный код);
«Connection» (Соединение).
При выборе типа перехода «Ссылка» в открывающемся списке будут доступны переходы, предопределённые в дереве проекта для данного программного модуля, написанного на языке SFC. Добавление предопределённого перехода описывается ниже после описания всех добавляемых элементов языка SFC.
При выборе типа перехода «Inline» условие перехода можно написать в виде выражения на языке ST.
Условие перехода в виде встроенного кода, написанного на языке ST
Реализация перехода таким способом удобна в случае, когда необходимо короткое условие, например: переменные «f3» и «f4» типа INT равны. Встроенный код для такого условия выглядит следующим образом:
f3 = f4
Так же, например, можно в качестве условия просто указать переменную. В случае её значения равного 0 – будет означать FALSE, все остальные значения – TRUE.
При выборе типа перехода «Connection», в качестве условия перехода можно использовать выходные значения элементов языка FBD или LD.
При выборе типа перехода «Connection», у добавленного перехода появится слева контакт, который необходимо соединить с выходным значением, например, функционального блока языка FBD или катушки LD диаграммы. Стоит отметить, что данное выходное значение должно быть типа BOOL.
При добавлении блока действий на диаграмму появится диалог «Edit action block properties» (Редактировать свойство блока действий).
Поле «Qualifier» определяет момент времени, когда действие начинается, сколько времени продолжается и когда заканчивается. Выбрать квалификатор можно из списка.
Подробное описание квалификаторов, которые выбираются из предлагаемого списка при добавлении действия приведено в таблице.
Действие начинает выполняться через некоторое заданное время (если шаг еще активен) и выполняется до тех пор, пока данный шаг активен
L
Действие выполняется в течение некоторого заданного интервала времени, после чего выполнение действия останавливается
N
Действие выполняется, пока данный шаг активен
P
Действие выполняется один раз, как только шаг стал активен
S
Действие активируется и остается активным пока SFC диаграмма выполняется
R
Действие выполняется, когда диаграмма деактивизируется
DS
Действие начинается выполняться через некоторое заданное время, только в том случае если шаг еще активен
SL
Действие активно в течении некоторого, заданного интервала
SD
Действие начинается выполняться через некоторое время, даже в том случае если шаг уже не активен
Поле «Duration» необходимо для установки интервала времени необходимого для некоторых квалификаторов, описанных выше.
«Type» определяет код или конкретную манипуляцию, которая будет выполняться во время активации действия. В случае выбора «Действия» появляется возможность, как и в случае с переходом, использовать предопределённые действия в дереве проекта для данного программного модуля, написанного на языке SFC.
Элемент «Jump» (прыжок) на SFC диаграмме подобен выполнению оператора GOTO при переходе на определённую метку в коде в различных языках программирования. После выбора добавления «прыжка» на SFC диаграмму, появится диалог, в котором необходимо выбрать из списка шаг, к которому будет происходить «прыжок» – переход от одного шага SFC диаграммы к другому.
В данном диалоге также присутствует и шаг инициализации (начальный шаг). После выбора шага и нажатия кнопки OK. На SFC диаграмме появится стрелочка, которую нужно соединить с переходом. Справа от стрелочки находится имя шага, к которому осуществляется переход в случае выполнения условия перехода, находящегося выше и соединённого с ней.
Описание функциональных блоков библиотеки ИСР BEREMIZ для ПЛК BRIC
Внимание
Для использования стандартных и дополнительных функциональных блоков в языке ST необходимо перетащить необходимый из библиотеки в зону перечисления переменных и дать наименование.
Данный ФБ представляет таймер, реализующий задержку выключения. Когда вход изменяется с TRUE на FALSE (задний фронт) проходит определенное время, пока выход не станет FALSE.
Вход
Тип
Описание
IN
BOOL
Подача импульса
PT
ULINT
Время задержки в формате ULINT
Выход
Тип
Описание
Q
BOOL
Если IN = TRUE => Q = TRUE. При переходе IN в FALSE, если ET = PV, то Q = 0, иначе Q = 1
ET
ULINT
Счетчик времени считает пока ET < PV и был переход IN из TRUE в FALSE
TT
BOOL
TRUE, пока ET < PV
Форма записи на языке ST:
FB(
IN := (*BOOL*),
PT := (*ULINT*),
ET => (*ULINT*),
Q => (*BOOL*),
TT => (*BOOL*));
ФБ WRITE_DO_SC устанавливает номера дискретных выходов, на которых включить программную защиту от КЗ и дискретные выхода на которых сработала программная защита от КЗ.
Вход
Тип
Описание
DO_SC_FLAG
UINT
Запись перечисления дискретных выходов, на которых сработала аппаратная защита от короткого замыкания (использовать только возможность сброса)
DO_SC_EN
UINT
Запись перечисления дискретных выходов, на которых сработала программная защита от короткого замыкания (использовать только возможность сброса)
ФБ UNIX_TIME устанавливает время на ПЛК (время указывается в мс.).
Вход
Тип
Описание
UNIX_TIME_WRITE
UDINT
Запись Unix time на ПЛК
Выход
Тип
Описание
UNIX_TIME_READ
UDINT
Unix time
UNIX_TIME_WRITED
UDINT
Последние записанное значени UNIX_TIME_WRITE
Примечание
Время задается в контроллер только по изменению UNIX_TIME_WRITE, начальное значение для сравнения 0.
ФБ можно использовать для чтения UNIX time в нескольких местах программы, для этого UNIX_TIME_WRITE
оставляем нулевым.
ФБ READ_DI предоставляет данные с дискретных входных каналов ПЛК записанного в одну переменную типа (UDINT) при этом 0 бит соответствует DI_0, а 15 бит DI_15.
ФБ WRITE_DI_NOISE_FLTR_10US для указанного дискретного входа задается период нечувствительности импульса в диапазоне от 0 до 65512, при этом считается в десятках мс.
Вход
Тип
Описание
DI_NUMBER
UINT
Номер канала дискретного входа ПЛК BRIC
DI_NOISE_FLTR_VALUE_10US
UINT
Период, за который счетчик обнаруживает не более 1 импульса
Данный ФБ представляет собой бистабильный SR–триггер, с доминирующим входом S (Set).
Вход
Тип
Описание
S1
BOOL
Вход (доминирующий)
R
BOOL
Сброс
Выход
Тип
Описание
Q1
BOOL
Выход становится «1», когда на вход S1 приходит «1». При переходе S1 в «0» сохраняется состояние. Выход Q1 возвращается в «0», когда вход R становится «1»
Форма записи на языке ST:
FB(
S1 := (*BOOL*),
R := (*BOOL*),
Q1 => (*BOOL*));
Данный ФБ представляет собой бистабильный RS–триггер, с доминирующим входом R (Reset).
Вход
Тип
Описание
S
BOOL
Вход
R1
BOOL
Сброс (доминирующий)
Выход
Тип
Описание
Q1
BOOL
Выход становится «1», когда вход R1 становится «0». При переходе R1 в «0» сохраняется состояние. Выход Q1 возвращается в «1», когда вход S становится «1»
Форма записи на языке ST:
FB(
S := (*BOOL*),
R1 := (*BOOL*),
Q1 => (*BOOL*));
Вычитающий счетчик работает только до достижения минимального значения используемого типа данных, суммирующий счетчик работает только до достижения максимального значения используемого типа данных. Переполнения не происходит.
Данный ФБ представляет собой часы реального времени и имеет много вариантов использования, включая добавление временных отметок, для установки даты и времени в формируемых отчетах, в аварийных сообщениях и т.д.
Данный ФБ представляет собой устройство в цепи обратной связи, используемое в системах автоматического управления для формирования управляющего сигнала
Вход
Тип
Описание
AUTO
BOOL
Включение режима ПИД-регулятора (0 - ручное регулирование, 1 - автоматическое)
DIR
BOOL
Направление регулирования ( 0 - обратное регулирование, 1 - прямое. По умолчанию стоит прямое регулирование)
PV
REAL
Входной сигнал (автоматический режим)
SP
REAL
Заданное значение (уставка в автоматическом режиме)
Данный ФБ возвращает в OUT значение входного аргумента IN, в случае превышения им значения MX – в OUT возвращается MX, в случае если IN меньше MN – в OUT возвращается MN.
Вход
Тип
Описание
MN
ANY
Вход (нижний предел)
IN
ANY
Вход
MX
ANY
Вход (верхний предел)
Выход
Тип
Описание
OUT
ANY
Выход
Форма записи на языке ST:
LIMIT(
MN := (*ANY*),
IN := (*ANY*),
MX := (*ANY*),
OUT => (*ANY*));
Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 > IN2) & (IN2 > IN3) & … (INn–1 > INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.
Вход
Тип
Описание
IN1
ANY
Вход 1
IN2
ANY
Вход 2
…
ANY
Вход …
Выход
Тип
Описание
OUT
BOOL
Выход
Форма записи на языке ST:
GT(
IN1 := (*ANY*),
IN2 := (*ANY*),
OUT => (*BOOL*));
Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 >= IN2) & (IN2 >= IN3) &… (INn–1 >= INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.
Вход
Тип
Описание
IN1
ANY
Вход 1
IN2
ANY
Вход 2
…
ANY
Вход …
Выход
Тип
Описание
OUT
BOOL
Выход
Форма записи на языке ST:
GE(
IN1 := (*ANY*),
IN2 := (*ANY*),
OUT => (*BOOL*));
Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 = IN2) & (IN2 = IN3) & … (INn–1 = INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.
Вход
Тип
Описание
IN1
ANY
Вход 1
IN2
ANY
Вход 2
…
ANY
Вход …
Выход
Тип
Описание
OUT
BOOL
Выход
Форма записи на языке ST:
EQ(
IN1 := (*ANY*),
IN2 := (*ANY*),
OUT => (*BOOL*));
Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 < IN2) & (IN2 < IN3) & … (INn–1 < INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.
Вход
Тип
Описание
IN1
ANY
Вход 1
IN2
ANY
Вход 2
…
ANY
Вход …
Выход
Тип
Описание
OUT
BOOL
Выход
Форма записи на языке ST:
LT(
IN1 := (*ANY*),
IN2 := (*ANY*),
OUT => (*BOOL*));
Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 <= IN2) & (IN2 <= IN3) & … (INn–1 <= INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.
Вход
Тип
Описание
IN1
ANY
Вход 1
IN2
ANY
Вход 2
…
ANY
Вход …
Выход
Тип
Описание
OUT
BOOL
Выход
Форма записи на языке ST:
LE(
IN1 := (*ANY*),
IN2 := (*ANY*),
OUT => (*BOOL*));
Данный ФБ сравнивает все входные аргументы и выдаёт на выходе OUT значение True, если выполнится следующее условие: (IN1 <> IN2) & (IN2 <> IN3) &… (INn–1 <> INn), в противном случае в OUT выдаётся False. Количество входов IN(n) изменяемое – от 2 до 20. По умолчанию 2.
Вход
Тип
Описание
IN1
ANY
Вход 1
IN2
ANY
Вход 2
…
ANY
Вход …
Выход
Тип
Описание
OUT
BOOL
Выход
Форма записи на языке ST:
NE(
IN1 := (*ANY*),
IN2 := (*ANY*),
OUT => (*BOOL*));
В OpenPLC имеется возможность архивирования данных пользовательского проекта. Весь процесс создания архивов можно описать в двух шагах:
Добавление в структуру проекта «Поддержки Архивов»;
Написание программы для архивирования данных.
Добавление в структуру проекта «Поддержки Архивов»
Для добавления в структуру проекта необходимо щелкнуть правой кнопкой мыши в область дерева проекта и нажать «Поддержка Архивов». Далее необходимо подвести курсор к созданной ветке «Поддержка Архивов», щелкнуть левой клавишей мыши и выбрать пункт «Добавить Arch», как показано на рисунке ниже:
Появляется окно добавленного архива с определенными настройками по умолчанию. Область адресов, выделенных регистров для базовых настроек архивирования начинается с 50000. Данные, начинающиеся с адреса 50013 по 50025 (по умолчанию), являются заголовком архива. Туда входят идентификатор, длина заголовка в битах, длина суммы пользовательских данных и заголовка в битах, время, дата в представлении UNIX, флаг и уникальная контрольная сумма архива и его порядковый номер. В опциях они обозначены как arc_header_data.
Примечание
Переменная Arch_save_arc является триггером для записи данных в архив: при изменении из 0 в 1 данные записываются.
Для записи пользовательских данных в архив необходимо написать определенную программу. Для примера возьмем ранее реальзованную программу beremiz_project. Программу напишем на языке ST. На рисунке ниже представлены данные для программы.
В глобальные переменные arc_out1…arc_out3 записываются данные переменных OUT1…OUT3, в arc_res – переменная RES при изменении Arch_0_save_arc с 0 на 1. Локальная булевая переменная arc_save с каждым циклом будет менять свое значение, тем самым меняя значение Arch_0_save_arc. Реализация программы представлена ниже:
Далее необходимо добавить переменные arc_resarc_out1…arc_out3 в окно данных архива. Обратите внимание, в «Polling» автоматически присваивается значение write, а так же присваивается адрес переменной:
После написания программы, необходимо создать задачу для данной программы, указать время цикла. Пользовательские данные будут записываться с циклом в 1 минуту, реализация представлена ниже:
Данные архива пользовательских переменных и заголовка, представленных в формате U8
CONFIG__ARCH_0_SAVE_ARC
U16
Запись данных в архив
CONFIG__ARCH_0_ARC_FOR_READ
U32
Данные архива из буфера, представленные для чтения
CONFIG__ARCH_0_ID_NUMBER
U16
Уникальный идентификатор архива данных
CONFIG__ARCH_0_BODY_LEN
U16
Размер архива с учетом заголовка и пользовательских данных
CONFIG__ARCH_0_UNIX_TIME_LAST_ARC
U32
Время записи последних данных в архив в формате UNIX
CONFIG__ARCH_0_ARCS_NUMBER
U32
Количество архивов, доступных для чтения
CONFIG__ARCH_0_LAST_READED
U32
Номер последнего прочитанного архива
CONFIG__ARCH_0_FIRST_AVAILABLE
U32
Номер первого архива, доступного для чтения
В ПЛК BRIC с версией OS 0.30.2.5 и выше предоставлена возможность преобразования архивов в нужные типы данных, а также сохранения их в формате txt для дальнейших манипуляций. Для этого необходимо зайти в WEB-интерфейс архива, введя IP-адрес/arc.html.
В данном окне прописана информация о заголовке архива, а также первый параметр пользовательских данных – в нашем примере это переменная RES. Добавим и остальные переменные с помощью кнопки Add param и преименуя их в OUT1…OUT3. Далее устанавливается тип данных переменной.
Следующим шагом является выбор номера и диапазона количества архива. Выберем от 0 до 20 архивов, после чего нажимаем кнопку Get arcs. Результат представлен на рисунке ниже:
Результат вывода пользовательских архивных данных
По таблице данных видно, что в момент изменения параметра RES с 0 на 1 все счетчики были сброшены в 0. Имеется возможность сохранить данный архив с помощью кнопки Save to file. Архив будет сохранен в фомате txt по указанному пути.
ПРИЛОЖЕНИЕ А. ДЕТАЛЬНОЕ ОПИСАНИЕ ПАНЕЛЕЙ ГЛАВНОГО ОКНА
Имя переменной, представляющее собой уникальный идентификатор переменной в пределах её области видимости и действия;
Класс переменной, указывающий на ее роль в структуре проекта:
«Глобальная» (только этот тип, если указывается в главном окне проекта);
«Входная» (указывает, что данная переменная зависит от значения переменной подаваемой на вход данного ФБ, функции);
«Выходная» (указывает, что от данной переменной зависит значение переменной выходящей из выхода данного ФБ, функции);
«Входная/Выходная», «Локальная» (используется только в данном ФБ, функции и удаляется по окончании работы ФБ, функции);
«Внешняя» (возможно использовать любой программой/ФБ/функцией проекта);
«Временная».
Тип, определяющий тип переменной и может принадлежать базовому типу (в соответствии со стандартом IEC 61131–3: BOOL, SINT, INT, LINT, DINT, USINT, UINT, ULINT, UDINT, REAL, LREAL, BYTE, STRING, WORD, LLWORD, DWORD, TIME, DAT, TOD, DT (последние 4 могут используются только в качестве внутренних переменных)), пользовательскому типу (ФБ, массиву);
Адрес – идентификатор, необходимый для связывания данной переменной с Modbus–переменной;
Начальное значение – инициализация переменной некоторым начальным значением;
Опция – задание константности, реманентности (сохранение её значения в энергонезависимой памяти) и нереманентности переменной;
Документация – комментарий к назначению данной переменной или константы.
Первый символ имени переменной или константы должен быть буквой, или символом (_), далее могут следовать цифры, буквы латинского алфавита и символы подчеркивания.
При выборе типа переменной «Array» (Массив) появится окно «Edit array type properties» (изменение свойств массива).
Свойство «Base Type» определяет какому типу будут принадлежать элементы массива. Номера элементов массива при помощи кнопки «Edit item». Пример удачного создания массива приведен на рисунке ниже
При выборе в дереве проекта элемента, соответствующего ресурсу, в панели экземпляров проекта будут отображены экземпляры, определённые в данном ресурсе, а также глобальные переменные ресурса.
Панель библиотеки функций и функциональных блоков
Панель библиотеки функций и функциональных блоков содержит коллекцию стандартных функций и функциональных блоков, разделённых по разделам в соответствии с их назначением, которые доступны при написании алгоритмов и логики работы программных модулей. Выделены следующие разделы для функций и функциональных блоков: стандартные, дополнительные, преобразования типов данных, операций с числовыми данными, арифметических операций, временных операций, побитовых и смещения бит, операций выбора, операций сравнения, строковых операций. Помимо стандартных функций и функциональных блоков, данная панель содержит раздел «пользовательские программные модули». В него попадают функции и функциональные блоки, добавленные в конкретный проект, т.е. содержащиеся в дереве проекта. Использование данных функций и функциональных блоков осуществляется перетаскиванием необходимого блока с помощью зажатой левой кнопки мыши в область редактирования: либо текстовый редактор (ST), либо графический редактор (FBD). Имеется специальное поле поиска функционального блока по имени.
Отладочная панель служит для отображения в виде текстовых сообщений:
— Результатов генерации ST и C кода;
— Результатов компиляции и компоновки прикладной программы;
— Процесса соединения и передачи прикладной программы на целевое устройство;
— Различных промежуточных манипуляций в процессы создания прикладной программы.
В случае, если необходимо вывести предупреждения ИСР Beremiz или ошибки компиляторов (MatIEC или C кода) во время их работы цвет вывода текстовых сообщений становится красным (исключением составляет: CMake Warning: Manually–specified variables were not used by the project: CMAKE_SH). Критические ошибки также выделяется красным цветом, но при этом еще желтым фоном (см. Приложение Д).
ПРИЛОЖЕНИЕ Б. ОСНОВНЫЕ ТЕРМИНЫ И ОПРЕДЕЛЕНИЯ OPENPLC
Целевое устройство – аппаратное средство с определённой архитектурой процессора, на котором могут исполняться различные исполняемые файлы, обращающиеся с помощью него к модулям устройства связи с объектом (УСО).
Прикладная программа (исполняемый файл) для целевого устройства – скомпилированный и скомпонованный so–файл, который будет выполняться на целевом устройстве.
Плагин для модуля УСО – интерфейс, состоящий из специальных драйверов и элементов пользовательского интерфейса для OpenPLC, позволяющий связывать переменные модулей УСО с переменными программных модулей, из которых состоит проект.
Проект – совокупность программных модулей (программ, функциональных блоков, функций), плагинов внешних модулей УСО, ресурсов, пользовательских типов данных, сборка(компиляция и компоновка) которых, представляет собой прикладную программу для целевого устройства. Каждый проект сохраняется в отдельном файле.
Переменная – область памяти, в которой находятся данные, с которыми оперирует программный модуль.
Ресурс – элемент, отвечающий за конфигурацию проекта: глобальные переменные и экземпляры проекта, связываемыми с программными модулями типа «Программа» и задачами.
Программный модуль – элемент, представляющий собой функцию, ФБ или программу. Каждый программный модуль состоит из раздела объявлений и кода. Для написания всего кода программного используется только один из языков программирования стандарта IEC 61131–3.
Функция – программный модуль, который возвращает только единственное значение, которое может состоять из одного и нескольких элементов (если это битовое поле или структура).
Функциональный блок – программный модуль, который принимает и возвращает произвольное число значений, а так же позволяет сохранять своё состояние (подобно классу в различных объектно–ориентированных языках). В отличие от функции ФБ не формирует возвращаемое значение.
Программа – программный модуль, представляющий собой единицу исполнения, как правило, связывается (ассоциируется) с задачей.
Задача – элемент представляющий время и приоритет выполнения программного модуля типа «Программа» в рамках экземпляра проекта.
Экземпляр – представляет собой программу, как единицу исполнения, связанную (ассоциированную) с определённой задачей. Так же, как экземпляр, рассматриваются переменные, определённые в программных модулях: программа и ФБ.
Пользовательский тип данных – тип данных, добавленный в проект и представляющий собой: псевдоним существующего типа, под диапазон существующего типа, перечисление, массив или структуру.
Класс переменной – тип использования переменной:
Локальная (появляется при работе ФБ где фигурирует);
Вход (локальная переменная, требующая подключения внешней переменной на вход ФБ/функции, где она фигурирует);
Выход (локальная переменная, требующая подключения внешней переменной на выход из ФБ/функции, где она фигурирует);
Вход/Выход (локальная переменная, требующая подключения внешней переменной на выход и вход ФБ/функции, где она фигурирует),
Внешняя (сохраняется в адресном пространстве ПЛК) 1 .
Не поддерживаются типы переменных TIME, DATE, TOD, DT, STRING
Исходное значение – значение переменной на момент запуска программы на ПЛК.
Настройка переменной – возможность изменение переменной:
constant (неизменная);
retain (сохранение значения при перезагрузке ПЛК);
non-retain (сброс значения при перезагрузке).
ПРИЛОЖЕНИЕ В. КОМБИНАЦИИ БЫСТРОГО ВЫЗОВА КОМАНД ИСР BEREMIZ
Часть операций, выполняемых с помощью выбора определённого пункта меню мышью, могут быть исполнены с помощью «горячей клавиши». Далее будет подробно описаны «горячие клавиши».
Меню «Файл» предназначено для работы с проектом и предоставляет следующие пункты:
«Новый» – создание нового проекта (CTRL + N);
«Открыть» – открытие существующего проекта (CTRL + O);
«Сохранить» – сохранение текущего проекта пункт (CTRL + S);
«Сохранить как» – сохранение текущего проекта в папку отличную от той, в которой он сохранён на данный момент (CTRL + SHIFT + S);
«Закрыть вкладку» – закрытие активной вкладки для открытого проекта (CTRL + W);
«Закрыть проект» – закрыть открытый проект (CTRL + SHIFT + W);
«Параметры страницы» – настройка параметров страницы для печати на принтере активной программы, представленной в виде диаграммы (CTRL + ALT + P);
«Просмотр» – предварительный просмотр перед печатью на принтере активной программы (CTRL + SHIFT + P);
«Печать» – печать на принтере активной программы (CTRL + P);
«Выход» – закрытие текущего проекта и выход из программы OpenPLC (CTRL+ Q);
«Отменить» – отмена последнего действия в редакторе (CTRL + Z);
«Повторить» повтор отменённого действия в редакторе (CTRL + Y);
«Вырезать» – удалить в буфер обмена выделенные элементы в редакторе (CTRL + X);
«Копировать» – копировать в буфер обмена выделенные элементы в редакторе (CTRL + C);
«Вставить» – вставить из буфера обмена находящиеся там элементы в редактор (CTRL + V);
«Поиск в проекте» – вызов диалога поиска данных в проекте (CTRL + SHIFT + F);
«Выделить всё» – выделение всех элементов в активной вкладке редактора (CTRL +A);
«Обновить» – обновление данных и снятие выделения в редакторе (CTRL + R);
ПРИЛОЖЕНИЕ Г. ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ПО РАБОТЕ С MODBUS
Последовательный порт — наименование канала, по которому осуществляется связь по протоколу.
Скорость — скорость передачи данных по каналу.
Чётность — выбор режима (проверка на четность/проверка на нечетность/без проверки).
Стоп–биты — количество битов оповещающих об окончании сообщения.
Период опроса — время между повторным опросом.
Адрес устройства — указание идентифицируемого номера устройства с кем осуществляется обмен данными
Число каналов — сколько регистров/реле используются в записи/чтении (для функций 05, 06 всегда равно 1).
Начальный адрес — номер первого регистра/реле используемого в записи/чтении.
Таймаут — время необходимое для ответа slave–устройству.
а) Функция 01 (ReadCoils) — Команда используется для получения состояний определенного количества реле, начиная с указанного в запросе. Состояние одного реле при этом передается одним битом. Если бит установлен в 1 – реле включено, если 0 – реле отключено.
б) Функция 02 (ReadInputDiscretes) — Команда используется для получения состояний определенного количества дискретных входов, начиная с указанного в запросе. Состояние одного входа при этом передается одним битом. Если бит установлен в 1 – вход замкнут, если 0 – вход разомкнут.
в) Функция 03 (ReadHoldingRegisters) — Команда используется для чтения указанного количества 2–Байтных регистров.
г) Функция 04 (ReadInputRegisters) — Команда используется для получения состояний определенного количества 2–Байтных регистров, хранящих состояние дискретных входов, начиная с указанного в запросе. Значение одного регистра передается двумя байтами.
д) Функция 05 (WriteSingleСoil) — Команда используется для включения/отключения одного реле. Требуемое состояние реле передается двумя байтами.
е) Функция 06 (WriteSingleRegister) — Команда выполняет запись нового значения в указанный регистр.
ж) Функция 15 (WriteMultipleCoils) — Команда используется для групповой установки состояний определенного количества реле, начиная с указанного. Состояние одного реле при этом передается одним битом. Если бит установлен в 0 – реле отключено, если 1 – реле включено.
з) Функция 16 (WriteMultipleRegisters) — Команда выполняет запись новых значений в указанные регистры.
ПРИЛОЖЕНИЕ Д. ЧАСТО ВСТРЕЧАЕМЫЕ ОШИБКИ ПРИ НАПИСАНИИ ПРОЕКТА В OPENPLC
Причиной возникновения ошибки, указанной на рисунке ниже является использование типа переменной (TIME, DATE, TOD, DT, STRING) не поддерживаемой в классе «внешняя» для платформы «Sofi». Для исправления ошибки необходимо перевести их в локальный класс переменных и при необходимости изменения/считывания их использовать преобразователи типов переменных.
Причиной возникновения ошибки, указанной на рисунке ниже является использование в программном модуле переменных внешнего класса не указанных на главной странице.
Причиной возникновения ошибки, указанной на рисунке ниже является использование функциональных блоков, поддерживаемых только платформой «Sofi». В разделе Config необходимо поменять платформу на «Sofi».
Причиной возникновения ошибки, указанной на рисунке ниже является отсутствие подключенной переменной на входе в функциональный блок.
Причиной возникновения ошибки, указанной на рисунке ниже является неверный адрес на несуществующий путь в поддержке Modbus или несоответствие типа указанного в адресе переменной.
Причиной возникновения ошибки, указанной на рисунке ниже является неверное название папки проекта (наличие пробела).
Причиной возникновения ошибки, указанной на рисунке ниже является отсутствие task в resource и не все программы проинициализированы в Instances.