
Языки программирования стандарта МЭК 61131-3
сергей рылов
к.т.н., эксперт по автоматизации производства,
Школа Fine Start
На этот раз давайте разберём
международный стандарт МЭК 61131-3, описывающий языки программирования
для программируемых логических
контроллеров (ПЛК).
Стандарт МЭК 61131-3 устанавливает пять языков программирования ПЛК, три графических и два текстовых.
Более подробно о данных языках и базисных принципах рассматриваемого стандарта, расскажу в этой статье.

Первоначально стандарт назывался IEC 1131-3 и был опубликован в 1993 г. но в 1997 г. МЭК (IEC) перешел на новую систему обозначений и в названии стандарта добавилась цифра «6». Продвижением стандарта занимается организация PLCopen (http://www.plcopen.org).
Основной целью стандарта было повышение скорости и качества разработки программ для ПЛК, а также создание языков программирования, ориентированных на технологов, обеспечение соответствия ПЛК идеологии открытых систем, исключение этапа дополнительного обучения при смене типа ПЛК.
Системы программирования, основанные на МЭК 61131-3, характеризуются следующими показателями:
- надежностью создаваемого программного обеспечения. Надежность обеспечивается тем, что программы для ПЛК создаются с помощью специально предназначенной для этого среды разработки, которая содержит все необходимые средства для написания, тестирования и отладки программ с помощью эмуляторов и реальных ПЛК, а также множество готовых фрагментов программного кода
- возможностью простой модификации программы и наращивания ее функциональности
- переносимостью проекта с одного ПЛК на другой
- возможностью повторного использования отработанных фрагментов программы
- простотой языка и ограничением количества его элементов
Языки МЭК 61131-3 появились не как теоретическая разработка, а как результат анализа множества языков, уже используемых на практике и предлагаемых рынку производителями ПЛК.
Стандарт устанавливает пять языков программирования со следующими названиями:
- список инструкций (IL — Instruction List)
- структурированный текст (ST — Structured Text)
- релейно-контактные схемы, или релейные диаграммы (LD — Ladder Diagram)
- диаграммы функциональных блоков (FBD — Function Block Diagram)
- последовательные функциональные схемы (SFC — «Sequential Function Chart»)
Языки IL и ST являются текстовыми. Графическими языками являются LD, FBD, SFC.
В стандарт были введены несколько языков (а не один) для того, чтобы каждый пользователь мог применить наиболее понятный ему язык.
Программисты чаще выбирают язык IL (похожий на ассемблер) или ST, похожий на язык высокого уровня Паскаль. Специалисты, имеющие опыт работы с релейной логикой, выбирают язык LD. Специалисты по системам автоматического управления (САУ) и схемотехники выбирают привычный для них язык FBD.
Выбор одного из пяти языков определятся не только предпочтениями пользователя, но и смыслом решаемой задачи.
Если исходная задача формулируется в терминах последовательной обработки и передачи сигналов, то для нее проще и нагляднее использовать язык FBD. Если задача описывается как последовательность срабатываний некоторых ключей и реле, то для нее нагляднее всего будет язык LD. Для задач, которые изначально формулируются в виде сложного разветвленного алгоритма, удобнее будет язык ST.
Языки МЭК 61131-3 базируются на следующих принципах:
- вся программа разбивается на множество функциональных элементов — Program Organization Units (POU), каждый из которых может состоять из функций, функциональных блоков и программ. Любой элемент МЭК-программы может быть сконструирован иерархически из более простых элементов
- стандарт требует строгой типизации данных. Указание типов данных позволяет легко обнаруживать большинство ошибок в программе до ее исполнения
- имеются средства для исполнения разных фрагментов программы в разное время, с разной скоростью, а также параллельно. Например, один фрагмент программы может сканировать концевой датчик с частотой 100 раз в секунду, в то время как второй фрагмент будет сканировать датчик температуры с частотой один раз в 10 сек
- для выполнения операций в определенной последовательности, которая задается моментами времени или событиями, используется специальный язык последовательных функциональных схем (SFC)
- стандарт поддерживает структуры для описания разнородных данных. Например, температуру подшипников насоса, давление и состояние «включено-выключено» можно описать с помощью единой структуры «Pump» и передавать ее внутри программы как единый элемент данных
- стандарт обеспечивает совместное использование всех пяти языков, поэтому для каждого фрагмента задачи может быть выбран любой, наиболее удобный, язык
Список инструкций, IL
Язык IL напоминает ассемблер и используется для реализации функций, функциональных блоков и программ, а также шагов и переходов в языке SFC. Основным достоинством языка является простота его изучения.
Наиболее часто язык IL используется в случаях, когда требуется получить оптимизированный код для реализации критических секций программы, а также для решения небольших задач с малым количеством разветвлений алгоритма.
В основе языка лежит понятие аккумулятора и переходов по меткам.
Пример программы на зыке IL с комментариями приведен в листинге 1.
Начинается программа с загрузки в аккумулятор значения переменной. Дальнейшие шаги программы состоят в извлечении содержимого аккумулятора и выполнении над ним ограниченного числа допустимых действий (их в языке всего 24).

Листинг 1. Пример программы на языке IL
Структурированный текст, ST
Язык ST является текстовым языком высокого уровня и очень сильно напоминает Паскаль:
Листинг 2. Пример программы на языке ST
IF Voltage>220 THEN
Current:=Current - 10; (*Если V>220 В, то уменьшить ток на 10*)
ELSE
Current:=50; Speed:= ON;(*Установить ток 50А и включить мотор*)
END_IF;
Язык ST имеет много отличий от языка Паскаль и разработан специально для программирования ПЛК. Он содержит множество конструкций для присвоения значений переменным, для вызова функций и функциональных блоков, для написания выражений условных переходов, выбора операторов, для построения итерационных процессов.
Этот язык предназначен в основном для выполнения сложных математических вычислений, описания сложных функций, функциональных блоков и программ.
Язык релейно-контактных схем, LD
Графический язык релейной логики впервые появился в виде электрических схем, которые состояли из контактов и обмоток электромагнитных реле (Рис. 1).

Такие схемы использовались в автоматике конвейеров для сборки автомобилей до эры микропроцессоров.
Язык релейной логики был интуитивно понятен людям, слегка знакомым с электротехникой и поэтому оказался наиболее распространенным в промышленной автоматике. Обслуживающий персонал легко находил отказ в оборудовании, прослеживая путь сигнала по релейной диаграмме.
Однако язык LD проблематично использовать для реализации сложных алгоритмов, поскольку он не поддерживает подпрограммы, функции, инкапсуляцию и другие средства структурирования программ с целью повышения качества программирования. Эти недостатки затрудняют многократное использование программных компонентов, что делает программу длинной и сложной для обслуживания.
Инкапсуляция (от лат. in capsule — в оболочке) — это заключение данных и функционала в оболочку. В объектно-ориентированном программировании в роли оболочки выступают классы: они не только собирают переменные и методы в одном месте, но и защищают их от вмешательства извне.
Для выполнения арифметических функций в язык LD были добавлены функциональные блоки, которые выполняли операции сложения, умножения, вычисления среднего и т.д.
Сложные вычисления в этом языке невозможны. Недостатком является также то, что только маленькая часть программы умещается на мониторе компьютера или панели оператора при программировании.
Несмотря на указанные недостатки, язык LD относится к наиболее распространенным в мире, хотя используется для программирования только простых задач.
Диаграммы функциональных блоков, FBD
FBD является графическим языком и наиболее удобен для программирования процессов прохождения сигналов через функциональные блоки.
Язык FBD удобен для схемотехников, которые легко могут составить электрическую схему системы управления на «жесткой логике», но не имеют опыта программирования.
Функциональные блоки представляют собой фрагменты программ, написанных на IL, SFC или других языках, которые могут быть многократно использованы в разных частях программы и которым соответствует графическое изображение, принятое при разработке функциональных схем электронных устройств, см. Рис. 2.

Язык FBD может быть использован для программирования функций, функциональных блоков и программ, а также для описания шагов и переходов в языке SFC. Функциональные блоки инкапсулируют данные и методы, чем напоминают объектно-ориентированные языки программирования, но не поддерживают наследование и полиморфизм.
Все то, что во время компиляции или исполнения программы может содержать или обрабатывать значения различных типов — является полиморфным, например:
- переменные, меняющие свое значение на значение другого типа
- объекты, обладающие свойствами, которые могут менять значение текущего типа на значение другого типа
- функции, принимающие аргументы различных типов
Но пожалуй, самое лаконичное определение полиморфизма, можно найти в книге Бенджамина Пирса «Типы в языках программирования»: Термин «полиморфизм» обозначает семейство различных механизмов, позволяющих использовать один и тот же участок программы с различными типами в различных контекстах.
Под контекстом, грубо говоря, понимается набор всех доступных переменных в текущем участке программы.
Типичным применением языка FBD является описание «жесткой логики» и замкнутых контуров систем управления.
Язык функциональных блоков является удобным также для создания и пополнения библиотеки типовых функциональных блоков, которую можно многократно использовать при программировании задач промышленной автоматизации.
К типовым блокам относятся блок таймера, ПИД-регулятора, триггера, генератора импульсов, фильтра, и т. п.
Последовательные функциональные схемы, SFC
SFC называют языком программирования, хотя по сути это не язык, а вспомогательное средство для структурирования программ.
Он предназначен специально для программирования последовательности выполнения действий системой управления, когда эти действия должны быть выполнены в заданные моменты времени или при наступлении некоторых событий. В его основе лежит представление системы управления с помощью понятий состояний и переходов между ними.
Язык SFC предназначен для описания системы управления на самом верхнем уровне абстракции, например, в терминах «Старт», «Наполнение автоклава», «Выполнение этапа № 1», «Выполнение этапа № 2», «Выгрузка из автоклава».
Язык SFC может быть использован также для программирования отдельных функциональных блоков, если алгоритм их работы естественным образом описывается с помощью понятий состояний и переходов.
Например, алгоритм автоматического соединения модема с коммутируемой линией описывается состояниями «Включение», «Обнаружение тона», «Набор номер», «Идентификация сигнала» и переходами «Если длинный — то ждать 20 сек», «Если короткий — перейти в состояние «Набор Номера» и т.д.
На Рис. 3 показан фрагмент программы на языке SFC.
Программа состоит из шагов и условий переходов.
Шаги показываются на схеме прямоугольниками, условия переходов—жирной перечеркивающей линией.
Программа выполняется сверху вниз.
Начальный шаг на схеме показывается в виде двойного прямоугольника.
Условия переходов записываются рядом с их обозначениями.
Каждый шаг программы может представлять собой реализацию сложного алгоритма, написанного на одном из МЭК-языков.


Сергей Рылов
К.Т.Н., ЭКСПЕРТ ПО АВТОМАТИЗАЦИИ ПРОИЗВОДСТВА, ШКОЛА FINE START
Более 10 лет опыта инженером по автоматизации, инженером-программистом АСУ ТП и инженером-проектировщиком АСУ ТП в разных отраслях промышленности.
Принимал участие в таких крупных проектах автоматизации, как проекты ГУП «Мосгортранс» и ОАО "Линде Газ Рус".
Заинтересовала статья?
Освоить востребованную профессию в сфере автоматизации производства вы можете в Школе Fine Start. Узнайте детали в каталоге наших профессий
