Стандарт IEC 61131-3
IEC 61131-3 — это международный стандарт, определяющий синтаксис, семантику и правила применения языков программирования для программируемых логических контроллеров (ПЛК). Разработан Международной электротехнической комиссией (IEC) и является частью более общего стандарта IEC 61131, который регламентирует все аспекты проектирования, эксплуатации и тестирования ПЛК. Третья часть стандарта, принятая в 1993 году и обновлённая в 2003 и 2013 годах, унифицирует подходы к созданию программного обеспечения для систем промышленной автоматизации.
История создания
До появления IEC 61131-3 каждый производитель ПЛК (Siemens, Allen-Bradley, Mitsubishi, Schneider Electric и др.) использовал собственные, часто несовместимые языки программирования. Это создавало серьёзные проблемы при переносе проектов между платформами, обучении персонала и интеграции оборудования разных вендоров. В конце 1970-х годов IEC начала работу над единым стандартом, который должен был гармонизировать программное обеспечение для ПЛК. Первая версия IEC 61131 была опубликована в 1992 году, а третья часть, посвящённая языкам программирования, — в 1993 году. В 2003 году вышла вторая редакция, в 2013 году — третья, которая уточнила ряд положений, добавила поддержку объектно-ориентированного программирования и улучшила работу с типами данных.
Структура стандарта
IEC 61131-3 определяет две группы языков программирования: текстовые и графические. Всего стандарт включает пять языков, которые делятся на два класса:
- Текстовые языки:
- Structured Text (ST) — структурированный текст, похожий на Pascal или C.
- Instruction List (IL) — список инструкций, напоминающий ассемблер.
- Графические языки:
- Ladder Diagram (LD) — релейно-контактные схемы (лестничные диаграммы).
- Function Block Diagram (FBD) — функциональные блок-схемы.
- Sequential Function Chart (SFC) — последовательные функциональные схемы (графы состояний).
Кроме того, стандарт описывает единую модель программирования, включающую:
- Программные организационные единицы (POU): функции (Functions), функциональные блоки (Function Blocks) и программы (Programs).
- Типы данных: стандартные (BOOL, INT, REAL, TIME, STRING) и пользовательские (структуры, массивы, перечисления).
- Конфигурация, ресурсы и задачи: механизмы распределения вычислительных мощностей и синхронизации выполнения кода.
Языки программирования
Structured Text (ST)
ST — это высокоуровневый текстовый язык, синтаксически близкий к Pascal. Он предназначен для реализации сложных алгоритмов, математических вычислений и логических операций. В ST используются операторы присваивания (:=), условные конструкции (IF...THEN...ELSE), циклы (FOR, WHILE, REPEAT), а также вызовы функций и функциональных блоков. Пример фрагмента кода на ST:
`` IF Temperature > 100 THEN Alarm := TRUE; ELSE Alarm := FALSE; END_IF; ``
ST широко применяется в задачах, требующих обработки данных, ПИД-регулирования, работы с массивами и строками.
Instruction List (IL)
IL — это низкоуровневый текстовый язык, напоминающий мнемокоды ассемблера. Каждая инструкция состоит из оператора (например, LD — загрузка, AND — логическое И, ADD — сложение) и операнда. IL используется редко, в основном для оптимизации быстродействия или в устаревших проектах. В третьей редакции стандарта IL объявлен устаревшим, но всё ещё поддерживается для обратной совместимости.
Ladder Diagram (LD)
LD — графический язык, основанный на электрических релейных схемах. Он интуитивно понятен инженерам-электрикам: контакты (нормально открытые и нормально закрытые) соединяются в цепочки, а катушки (выходы) активируются при выполнении условий. LD идеально подходит для простой логики включения/выключения, блокировок и аварийных сигнализаций. Пример: два последовательных контакта, управляющих катушкой реле.
Function Block Diagram (FBD)
FBD — графический язык, в котором программа строится из блоков, соединённых линиями данных. Каждый блок выполняет определённую функцию (логическую операцию, таймер, счётчик, математическое действие). FBD удобен для проектирования систем непрерывного управления, например, в химической промышленности или энергетике. Блоки могут быть стандартными (из библиотек) или пользовательскими.
Sequential Function Chart (SFC)
SFC — графический язык для описания последовательных процессов. Программа разбивается на шаги (steps) и переходы (transitions). Каждый шаг может содержать действия (например, включение клапана), а переходы определяют условия перехода к следующему шагу. SFC напоминает графы состояний и широко применяется в автоматизации дискретных производств (упаковка, сборочные линии, конвейеры).
Единая модель программирования
IEC 61131-3 вводит понятие программных организационных единиц (POU):
- Функция (Function) — блок, который возвращает одно значение и не имеет внутреннего состояния. Пример:
ABS(x),SIN(x). - Функциональный блок (Function Block) — блок, который может хранить внутреннее состояние (память). Пример: таймер
TON, счётчикCTU. Функциональные блоки могут быть инстанцированы многократно. - Программа (Program) — основная единица, которая объединяет функции и функциональные блоки, а также связывает их с физическими входами/выходами ПЛК.
Стандарт также определяет конфигурацию (Configuration) — совокупность ресурсов (Resources), каждый из которых может выполняться на отдельном процессоре или ядре. Внутри ресурса запускаются задачи (Tasks), которые циклически или по событиям вызывают программы.
Типы данных
IEC 61131-3 поддерживает широкий спектр типов данных:
- Базовые:
BOOL,BYTE,WORD,DWORD,LWORD,SINT,INT,DINT,LINT,USINT,UINT,UDINT,ULINT,REAL,LREAL,TIME,DATE,STRING,WSTRING. - Пользовательские: структуры (
STRUCT), массивы (ARRAY), перечисления (ENUM), псевдонимы (TYPE).
В третьей редакции добавлена поддержка объектно-ориентированных элементов: методы, свойства, интерфейсы и наследование функциональных блоков.
Применение
IEC 61131-3 является основой для разработки программного обеспечения в большинстве современных ПЛК. Его поддерживают такие производители, как Siemens (TIA Portal, Step 7), Schneider Electric (EcoStruxure Control Expert), Rockwell Automation (Studio 5000), CODESYS (среда разработки, используемая многими вендорами), Beckhoff (TwinCAT), Omron (Sysmac Studio) и другие.
Стандарт применяется в:
- Промышленной автоматизации: управление станками, конвейерами, роботами.
- Энергетике: управление электростанциями, подстанциями, системами распределения.
- Транспорте: автоматизация железнодорожных переездов, тоннелей, метро.
- Зданиях: системы отопления, вентиляции, кондиционирования (HVAC), управления освещением.
- Нефтегазовой отрасли: управление насосами, клапанами, компрессорами.
Преимущества и ограничения
Преимущества
- Унификация: единый подход к программированию ПЛК от разных производителей.
- Переносимость: программы могут быть перенесены между совместимыми системами с минимальными изменениями.
- Многоязыковость: возможность выбора языка, наиболее подходящего для конкретной задачи.
- Модульность: функциональные блоки и библиотеки позволяют повторно использовать код.
- Надёжность: стандарт проверен десятилетиями эксплуатации в критических системах.
Ограничения
- Сложность освоения: для инженеров, не знакомых с программированием, ST и SFC могут быть сложны.
- Производительность: интерпретация графических языков может быть менее эффективной, чем машинный код.
- Ограниченная поддержка ООП: объектно-ориентированные возможности появились только в третьей редакции и реализованы не у всех производителей.
- Фрагментация: несмотря на стандарт, многие вендоры добавляют расширения, нарушающие переносимость.
Интересные факты
- IEC 61131-3 стал основой для создания открытой среды разработки CODESYS, которая используется более чем 250 производителями ПЛК.
- В России стандарт IEC 61131-3 часто применяется в системах автоматизации на базе ПЛК отечественного производства (например, «Овен», «ДеКон», «Текон»).
- В 2020-х годах наблюдается тенденция к интеграции IEC 61131-3 с языками общего назначения (C++, Python) и облачными платформами (Industrial IoT).
Критика
Основные претензии к стандарту связаны с его сложностью и избыточностью. Некоторые разработчики считают, что пять языков — это слишком много, и что для большинства задач достаточно двух-трёх. Кроме того, IL и SFC критикуются за низкую читаемость и сложность отладки. Также отмечается, что стандарт не полностью решает проблему переносимости кода между разными средами разработки из-за различий в реализации расширений.
Источники
- IEC 61131-3:2013 — Programmable controllers — Part 3: Programming languages.
- John, K. H., & Tiegelkamp, M. (2010). IEC 61131-3: Programming Industrial Automation Systems. Springer.
- CODESYS Group. (2023). IEC 61131-3 Standard Overview.
- Siemens AG. (2022). TIA Portal Programming Guidelines.
- ГОСТ Р МЭК 61131-3-2016 — Контроллеры программируемые. Часть 3. Языки программирования.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →