Блог

Языки программирования ПЛК: ST, FBD, LD, IL

2025-12-11 12:37
Когда ты впервые открываешь интерфейс контроллера и начинаешь писать логику управления, встаёт вопрос: на каком языке это вообще писать?
LD выглядит как электросхема, удобно для электриков. ST похож на программирование, удобно для разработчиков. FBD это блоки как в SCADA. Какой выбрать? Почему вообще пять разных языков в одном стандарте?
Ответ простой: потому что разные люди по-разному думают. Электрик видит контакты и катушки. Программист видит переменные и циклы. Инженер со SCADA видит потоки сигналов. Все правы, все решают одну задачу разными способами.

Стандарт МЭК 61131-3: как это всё началось

В 80-х и 90-х годах каждый производитель ПЛК писал на своём языке. Siemens на одном, Mitsubishi на другом, Beckhoff на третьем. Если ты разработал систему на контроллере Siemens, а потом нужно было перейти на другого производителя, приходилось переписывать программу с нуля. Месяцы работы. Новые баги. Переналадка. Заказчик боялся: что если этот производитель закроется? Что если контроллер снимут с производства?
Промышленность устала от этого хаоса. Крупные компании объединились и сказали: нужен единый стандарт. Появилась Международная электротехническая комиссия (МЭК), которая разработала стандарт 61131-3. Смысл простой: все пишут на одних и тех же языках, все контроллеры, которые этот стандарт поддерживают, понимают одно и то же.
Это была революция. Вдруг разработчик мог написать программу один раз и запустить её на контроллере любого производителя, который поддерживает МЭК 61131-3. Портативность. Надёжность. Длинный срок жизни.

LD: для тех, кто знает электросхемы

Ladder Diagram. Почему "лестница"? Потому что логика выглядит как лестница. Рельсы питания слева и справа, между ними контакты, катушки, логические элементы. Сигнал течёт сверху вниз, как ток в релейной панели.
Если ты 30 лет работал с электромеханическими реле и вдруг переходишь на ПЛК, LD выглядит как дома. Это визуальное представление логики. Видишь схему, понимаешь, как работает система.
LD удобен для дискретной логики. Кнопка нажата? Да или нет. Сигнал есть? Да или нет. Включить мотор или выключить. Вот для этого LD идеален.
На практике LD используется довольно часто в проектах ПЛК, потому что большинство задач это именно дискретная логика: включение-выключение моторов, клапанов, сигнализаций. На объектах это самое распространённое.
Но есть проблема. Если логика становится сложной, если нужно считать что-то, обойти массив данных, вычислить формулу, то LD становится неудобным. На экране становится много линий, всё запутывается. И ещё: LD плохо работает с аналоговыми сигналами. Если нужна регулировка давления или температуры, с аналоговыми значениями (4-20 мА), LD это делает, но неудобно.

ST: для программистов

Structured Text. Текстовый язык. Если ты писал на Pascal, C или Python, синтаксис ST будет знаком.
IF temperature > 80 THEN
heater:= 100;
ELSE
heater:= 0;
END_IF;
Вот так выглядит логика на ST. Это понятно любому программисту. Если температура больше 80, включить обогреватель на 100%, иначе выключить.
ST самый мощный язык в стандарте. На нём можно писать сложные алгоритмы, математические расчёты, работать с массивами, обрабатывать строки. То, что на LD займёт целый экран, на ST уместится в три строки.
Проблема ST в том, что это текст, не схема. Если ты вырос на электросхемах, текст может казаться менее наглядным. Через полгода свой код не вспомнишь, если не документировать. И ещё: не все контроллеры одинаково быстро компилируют ST. На LD компиляция часто быстрее.

FBD: для работы с сигналами

Function Block Diagram. Это как чёрные ящики. У каждого ящика входы слева, выходы справа. Ты соединяешь выходы одного с входами другого, и логика строится как блок-схема.
Один блок это компаратор (сравнивает значения), другой это ПИД-регулятор (вычисляет управляющий сигнал), третий это счётчик, четвёртый это фильтр. Ты собираешь из них логику управления, как конструктор.
FBD удобен, когда нужна сложная обработка сигналов, регулирование, работа с готовыми функциональными блоками. Если разработчик работал со SCADA-системами, FBD выглядит естественно.
Когда видишь FBD-диаграмму, сразу понимаешь, как информация протекает через систему. Датчик → блок обработки → блок решений → исполнительный механизм. Наглядно.
Плюс FBD в том, что многие типовые функции уже готовы в библиотеке. ПИД-регулятор, таймер, фильтр, счётчик. Ты их просто добавляешь в проект и подключаешь.
Минус: если логика очень сложная с множеством условий, даже FBD может стать запутанным. Слишком много стрелок, сложно разобраться в связях.

SFC: для пошаговых процессов

Sequential Function Chart. Это граф состояний. Определяются этапы (шаги), переходы между ними, что происходит на каждом этапе.
Представь производство. Шаг 1: загрузить сырьё. Шаг 2: нагреть до 80°C. Шаг 3: перемешивать 10 минут. Шаг 4: охладить. Шаг 5: выгрузить готовый продукт.
На SFC это выглядит как граф: прямоугольники это шаги, стрелки это переходы. На каждой стрелке условие: "если температура 80°C И давление в норме, то переходим на следующий шаг".
SFC удобен для batch-процессов, дозирования, везде, где чёткая последовательность и порядок важен. Глядя на график, видишь всю логику процесса. Это уже документация.
Плюс: очень наглядно, система не может перейти в следующий шаг, пока не выполнены условия, хорошо для синхронизации.
Минус: если параллельные процессы (несколько вещей одновременно), нужно тщательно синхронизировать, иначе система запутается.

IL: редко, но иногда нужен

Instruction List. Это почти ассемблер для ПЛК. Каждая строка одна инструкция.
LD sensor1
AND sensor2
ST motor
Загрузить sensor1, И sensor2, Сохранить результат в motor.
IL требует понимания того, как ровно контроллер выполняет операции. Это низкоуровневый язык. Писать сложно, читать сложнее.
Плюс: максимальная производительность, компактный код, низкие требования к ресурсам.
Минус: в современных проектах практически не используется. Его оставляют в стандарте только для совместимости со старыми проектами, которые на нём написаны.

Как это выбирать в реальной жизни

На практике выбор простой:
Дискретная логика? → LD. Включение-выключение. Да-нет. Это основная масса проектов.
Нужны вычисления, сложные условия? → ST. Если логика не умещается в LD, пишешь на ST.
Регулирование, аналоговые сигналы? → FBD. Когда нужна обработка сигналов и готовые блоки из библиотеки.
Пошаговый процесс? → SFC. Когда есть чёткие стадии и важен порядок.
Максимальная скорость критична? → IL. Но это редко.
В одном проекте используются все языки сразу. CODESYS и MasterSCADA это позволяют. Начинаешь основную логику на LD, сложные расчёты на ST, регулирование на FBD, управление последовательностью на SFC. Контроллер понимает все, потому что все работают под одним стандартом МЭК 61131-3.

Главный выигрыш стандарта

Когда система разработана на МЭК 61131-3, программа портативна. Написал на одном контроллере, потом переходишь на другого производителя, и ядро программы остаётся актуальным.
Раньше переход на другой контроллер означал переписать всю программу. Теперь переконфигурируешь интерфейсы (какой вход куда подключен), и готово. Основная логика работает.
Это защищает инвестиции. Через несколько лет контроллер может измениться, производитель может изменить предложение, но программа остаётся актуальной.

Что выбирают в России

ПЛК СТАБУР полностью поддерживает МЭК 61131-3. Можно программировать в CODESYS или в MasterSCADA. Оба инструмента поддерживают все пять языков.
В России популярен ST, потому что много инженеров выросли с программированием. Но LD широко используется тоже, потому что это дискретная логика, и именно это есть на большинстве объектов.
FBD набирает популярность при работе с регулированием и аналоговыми сигналами.
SFC используется для batch-процессов, особенно в пищевой промышленности и химии.

Итоговый совет

Выбор языка это не вопрос "какой лучше". Это вопрос "какой подходит для этой задачи и для твоей команды".
Научись писать на двух-трёх языках, и ты решишь большинство задач промышленной автоматизации. МЭК 61131-3 даёт эту свободу.