ВУЗ: Пермский национальный исследовательский политехнический университет
Категория: Лекция
Дисциплина: Системы реального времени
Добавлен: 15.11.2018
Просмотров: 852
Скачиваний: 20
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2018-01-11
1
Системы реального времени
Лекция 3
Стандарт программирования ПЛК
Использование даже простых, но полномасштабных компьютерных конфигураций
на нижних уровнях промышленных систем для непосредственного управления
оборудованием невыгодно как по экономическим соображениям, так и по причине
избыточной сложности. В системах автоматизации для этого традиционно применяются
более простые и дешевые устройства – программируемые логические контроллеры (ПЛК).
В первом поколении ПЛК представляли собой релейные схемы, вырабатывающие
сигналы для оборудования по правилам булевой логики. Сегодня они стали более
интеллектуальными [1].
Одним из главных требований к ПЛК всегда была и остается возможность его
эксплуатации существующим техническим персоналом и возможность быстрой замены
старого оборудования. Поэтому языки программирования компьютеров и встраиваемых
микропроцессорных систем управления плохо подходят для программирования ПЛК.
Здесь нужны более простые и наглядные языки, позволяющие излагать задачу в близких к
применяемым технологиям категориях. Привлечение же к программированию
специализированной фирмы неизбежно порождает зависимость, если реализация не
является достаточно прозрачной. Сложный язык программирования ПЛК снижает его
шансы на конкурентном рынке существенно больше, чем массогабаритные показатели [2].
С целью повышения скорости и качества разработки программ для ПЛК в 1979
году в рамках Международной электротехнической комиссии (МЭК) была создана
специальная группа технических экспертов по проблемам ПЛК, включая аппаратные
средства, монтаж, тестирование, документацию и связь. В 1982 году был выпущен первый
вариант стандарта МЭК 61131 (IEC 61131 или IEC 1131), а всего на текущий момент
времени было выпущено 3 редакции. Стандарт включает в себя 8 частей:
1) Общая информация.
2) Требования к оборудованию и тестам.
3) Языки программирования.
4) Руководства пользователя.
5) Спецификация сообщений.
6) Промышленные сети.
7) Программирование с нечеткой логикой.
8) Руководящие принципы применения и реализации языков ПЛК.
Рассмотрим более подробно 3-ю часть стандарта (МЭК 61131-3). В этой части
описаны 5 языков программирования ПЛК. Среди них три графических и два текстовых.
К графическим языкам относятся: язык релейных схем, язык функциональных блоков,
язык диаграмм состояний. К текстовым – assembler-подобный язык Instruction List и
паскале-подобный язык Structured Text.
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2018-01-11
2
Такое количество языков программирования ПЛК, определённое стандартом МЭК
61131-3, объясняется тем, что при разработке стандарта было обнаружено так много
вариаций языков контроллеров, что оказалось невозможно выбрать какой-то один язык
программирования как базовый [1].
Языки программирования ПЛК
Языки стандарта МЭК 61131-3 базируются на следующих принципах [3]:
вся программа разбивается на множество функциональных элементов - Program
Organization Units (POU), каждый из которых может состоять из функций,
функциональных блоков и программ. Любой элемент программы может быть
сконструирован иерархически из более простых элементов;
стандарт требует строгой типизации данных. Указание типов данных позволяет
легко обнаруживать большинство ошибок в программе до ее исполнения;
имеются средства для исполнения разных фрагментов программы в разное
время, с разной скоростью, а также параллельно. Например, один фрагмент
программы может сканировать концевой датчик с частотой 100 раз в секунду, в
то время как второй фрагмент будет сканировать датчик температуры с частотой
один раз в 10 сек;
для выполнения операций в определенной последовательности, которая задается
моментами времени или событиями, используется специальный язык
последовательных функциональных схем (SFC);
стандарт обеспечивает совместное использование всех пяти языков, поэтому для
каждого фрагмента задачи может быть выбран любой, наиболее удобный, язык;
программа, написанная для одного контроллера, может быть перенесена на
любой контроллер, совместимый со стандартом МЭК 61131-3.
Все языки, включенные в стандарт МЭК 61131-3, можно комбинировать. Полная
реализация МЭК 61131-3 доступна как коммерческий продукт: например, это
инструментальная графическая среда разработки прикладных программ для
программируемых логических контроллеров ISaGRAF производства фирмы Rockwell
Automation (Милуоки, штат Висконсин, США), инструментальный программный
комплекс промышленной автоматизации CODESYS фирмы 3S-Smart Software Solutions
GmbH (Кемптен, Германия), среда разработки MULTIPROG фирмы Advantech и другие
[7].
Язык релейных схем (Ladder Diagram, LD)
Язык релейных или релейно-контактных схем (Ladder Diagram, LD) – графический
язык, реализующий структуры электрических цепей. Впервые появился в виде
электрических схем, которые состояли из контактов и обмоток электромагнитных реле.
Такие схемы использовались в автоматике конвейеров для сборки автомобилей до эры
микропроцессоров. Язык релейной логики был интуитивно понятен людям, слегка
знакомым с электротехникой и поэтому оказался наиболее распространенным в
промышленной автоматике. Обслуживающий персонал легко находил отказ в
оборудовании, прослеживая путь сигнала по релейной диаграмме (рисунок 1).
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2018-01-11
3
Рисунок 1 – Пример программы на языке LD
Основными элементами языка являются контакты и катушки. Различаются
нормально замкнутые и нормально разомкнутые контактные элементы, которые можно
сопоставить с нормально замкнутыми и нормально разомкнутыми кнопками в
электрических цепях.
─┤├─ Нормально разомкнутый контакт.
Разомкнут при значении ложь, назначенной ему переменной и замыкается при
значении истина.
─┤/├─ Нормально замкнутый контакт.
Замкнут, если переменная имеет значение ложь, и разомкнут, если переменная
имеет значение истина.
─( )─ Катушка.
Итог логической цепочки копируется в целевую переменную, которая
называется катушка (англ. coil). Это слово имеет обобщенный образ
исполнительного устройства, поэтому в русскоязычной документации обычно
говорят о выходе цепочки, хотя можно встретить и частные значения термина,
например катушка реле.
Конкретные версии языка реализуются обычно в рамках программных продуктов,
для работы с определенными типами ПЛК. Часто такие реализации содержат команды,
расширяющие множество стандартных команд языка, что вызвано желанием
производителя полнее учесть желания заказчика, но в итоге приводят к несовместимости
программ, созданных для контроллеров различных типов.
Однако язык LD проблематично использовать для реализации сложных
алгоритмов, поскольку он не поддерживает подпрограммы, функции, инкапсуляцию и
другие средства структурирования программ с целью повышения качества
программирования.
Эти
недостатки
затрудняют
многократное
использование
программных компонентов, что делает программу длинной и сложной для обслуживания.
Сложные вычисления в этом языке невозможны. Недостатком является также то, что
только маленькая часть программы умещается на мониторе компьютера или панели
оператора при программировании.
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2018-01-11
4
Несмотря на указанные недостатки, язык LD относится к наиболее
распространенным в мире [3], хотя чаще всего используется для программирования
только простых задач.
Язык функциональных блоков (Function Block Diagram, FBD)
Язык функциональных блоков (Function Block Diagram, FBD) является графическим
языком и наиболее удобен для программирования процессов прохождения сигналов через
функциональные блоки. Язык FBD удобен для схемотехников, которые легко могут
составить электрическую схему системы управления на «жесткой логике», но не имеют
опыта программирования.
Функциональные блоки представляют собой фрагменты программ, написанных на
IL, SFC или других языках, которые могут быть многократно использованы в разных
частях программы и которым соответствует графическое изображение, принятое при
разработке функциональных схем электронных устройств (см. рисунок 2).
Рисунок 2 – Пример программы на языке FBD
Язык FBD может быть использован для программирования функций,
функциональных блоков и программ, а также для описания шагов и переходов в языке
SFC. Функциональные блоки инкапсулируют данные и методы, чем напоминают
объектно-ориентированные языки программирования, но не поддерживают наследование
и полиморфизм.
Типичным применением языка FBD является описание «жесткой логики» и
замкнутых контуров систем управления. Язык функциональных блоков является удобным
также для создания и пополнения библиотеки типовых функциональных блоков, которую
можно многократно использовать при программировании задач промышленной
автоматизации. К типовым блокам относятся блок таймера, ПИД-регулятора, блок
секвенсора, триггера, генератора импульсов, фильтра, и т.п. [4]
Язык диаграмм состояний (Sequential Function Chart, SFC)
Графический язык диаграмм состояний (Sequential Function Chart, SFC) создан на
базе математического аппарата сетей Петри, описывающий последовательность состояний
и условий переходов. Для создания программы используются следующие структурные
элементы: шаг (и начальный шаг), переход, блок действий, прыжок и связи типа
дивергенция и конвергенция (рисунок 3).
Ст. преп. каф. ИТАС Фёдоров Андрей Борисович
версия документа 2018-01-11
5
Рисунок 3 – Пример программы на языке SFC
Программа состоит из шагов и условий переходов. Шаги показываются на схеме
прямоугольниками, а условия переходов – жирной перечеркивающей линией. Программа
выполняется сверху вниз. Начальный шаг на схеме показывается в виде двойного
прямоугольника. Условия переходов записываются рядом с их обозначениями. Каждый
шаг программы может представлять собой реализацию сложного алгоритма, написанного
на одном из языков стандарта МЭК 61131-3 [4].
При выполнении программы каждый шаг активен до тех пор, пока не активен
переход, следующий за ним. Как только активируется переход, текущий шаг отключается
и активируется следующий шаг в последовательности. Переход также может иметь код,
который образует необходимые условия для выполнения перехода.
Язык удобно использовать в системах с повторяющимися многошаговыми
процессами или последовательностью повторяющихся процессов. Язык достаточно
нагляден, а сегментация кода упрощает поиск неисправностей.
К недостаткам относится то, что такой стиль программирования подходит не для
всех систем, т.к. структура, которая накладывается на программу, может ее значительно
усложнить. Дополнительные ресурсы, требующиеся для такого программирования,
приводят к замедлению процесса написания программы по сравнению с другими языками.
Также язык очень сложно конвертировать в другие языки [5].
Assembler-подобный язык Instruction List (IL)
Язык Instuction List (IL) – один из текстовых языков программирования стандарта
МЭК 61131-3. Синтаксис языка очень похож на Assembler.