Основы программирования ПЛК и промышленной автоматизации

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

1. Введение в ПЛК: устройство, принцип циклического выполнения и аппаратные интерфейсы

Введение в ПЛК: устройство, принцип циклического выполнения и аппаратные интерфейсы

Добро пожаловать в курс «Основы программирования ПЛК и промышленной автоматизации». Это первая статья, с которой начнется ваше погружение в мир управления технологическими процессами. Сегодня мы разберем фундамент, на котором строится вся современная автоматизация: что такое ПЛК, из чего он состоит и как именно он «думает».

Что такое ПЛК?

ПЛК (Программируемый Логический Контроллер) или PLC (Programmable Logic Controller) — это специализированный промышленный компьютер, предназначенный для управления машинами и технологическими процессами в реальном времени.

В отличие от вашего домашнего ноутбука или офисного ПК, ПЛК разработан для работы в суровых условиях. Он не боится пыли, вибраций, экстремальных температур и электромагнитных помех. Но главное отличие кроется не столько в «броне», сколько в способе обработки информации и надежности.

> ПЛК был изобретен в 1968 году как замена огромным шкафам с релейной логикой. Первая модель, Modicon 084, позволила менять логику работы станка, просто переписав программу, а не перепаивая сотни проводов. История Modicon

Архитектура ПЛК: Из чего состоит «мозг» завода

Любой ПЛК, будь то компактное устройство размером с пачку масла или огромный модульный шкаф, состоит из нескольких ключевых компонентов. Их взаимодействие определяет возможности контроллера.

!Структурная схема ПЛК: питание, процессор и модули ввода-вывода.

Основные компоненты:

  • Центральный процессор (CPU): Это «мозг» системы. Он считывает состояния входов, выполняет вашу программу и управляет выходами. В отличие от ПК, процессор ПЛК оптимизирован для выполнения логических операций с огромной скоростью.
  • Память:
  • Системная память (ROM/Firmware):* Здесь хранится операционная система контроллера. Память программы (User Memory):* Здесь хранится логика, которую вы напишете. Память данных (Data Memory):* Здесь хранятся значения переменных, таймеров и счетчиков.
  • Модули ввода/вывода (I/O Modules): Это «руки» и «глаза» контроллера. Через входы он получает информацию от датчиков, а через выходы подает команды на исполнительные механизмы (моторы, клапаны).
  • Блок питания (Power Supply): Преобразует сетевое напряжение (обычно 220В AC) в рабочее напряжение контроллера (чаще всего 24В DC).
  • Коммуникационные интерфейсы: Порты для программирования (Ethernet, USB) и связи с другими устройствами (RS-485, Profinet и др.).
  • Принцип циклического выполнения (Scan Cycle)

    Это самая важная концепция для понимания того, как писать программы для ПЛК. Обычные компьютерные программы часто ждут событий (нажатия клавиши, клика мыши). ПЛК работает иначе — он работает циклически.

    Программа в ПЛК не выполняется один раз и останавливается. Она крутится в бесконечном цикле, который называется циклом сканирования (Scan Cycle).

    !Цикл сканирования ПЛК: от чтения датчиков до управления механизмами.

    Этапы цикла сканирования:

  • Чтение входов (Input Scan): В начале цикла процессор делает «снэпшот» (мгновенный снимок) состояния всех физических входов. Если вы нажали кнопку после этого момента, ПЛК «увидит» это только в следующем цикле.
  • Выполнение программы (Program Execution): Процессор проходит по вашей программе строчка за строчкой, слева направо, сверху вниз. Он использует сохраненные значения входов для вычисления логики.
  • Запись выходов (Output Scan): Результаты вычислений не отправляются на реальные устройства мгновенно. Они записываются во временную память (образ процесса). Только когда программа полностью выполнена, ПЛК обновляет физические выходы.
  • Обслуживание (Housekeeping): Самодиагностика, обновление таймеров, связь с компьютером программиста.
  • Время, затрачиваемое на один полный оборот, называется временем цикла (Scan Time). Обычно оно составляет от 1 до 50 миллисекунд. Если цикл длится слишком долго (например, из-за ошибки в коде), срабатывает специальный сторожевой таймер (Watchdog Timer), который переводит ПЛК в режим ошибки и останавливает процесс ради безопасности.

    Аппаратные интерфейсы: Язык электрических сигналов

    Чтобы ПЛК мог взаимодействовать с реальным миром, он использует электрические сигналы. Они делятся на две большие группы: дискретные и аналоговые.

    Дискретные (цифровые) сигналы

    Это самые простые сигналы, работающие по принципу «Да/Нет» или «Истина/Ложь».

    * Дискретный вход (DI): Сигнал от датчика, который может быть только включен или выключен. Примеры:* Кнопка, концевой выключатель, датчик наличия детали, контакт реле. Физика:* Обычно наличие напряжения 24В постоянного тока считается логической «1», а отсутствие (0В) — логическим «0». * Дискретный выход (DO): Команда включить или выключить устройство. Примеры:* Катушка контактора (для запуска двигателя), сигнальная лампа, соленоид клапана. Типы выходов:* Релейные:* Механический контакт, может коммутировать большую нагрузку и разные напряжения (220В, 24В), но медленный и имеет ресурс срабатываний. Транзисторные:* Быстрые, долговечные, но работают только с постоянным током (обычно 24В) и небольшой нагрузкой.

    Аналоговые сигналы

    Используются, когда нам нужно знать не просто «есть/нет», а «сколько». Это непрерывные величины.

    * Аналоговый вход (AI): Измерение физической величины. Примеры:* Датчик температуры, датчик давления, расходомер, уровнемер. * Аналоговый выход (AO): Плавное управление. Примеры:* Управление скоростью частотного преобразователя, положением регулирующего клапана (открыт на 35%).

    #### Стандарты аналоговых сигналов

    В промышленности чаще всего используются два стандарта:

  • Токовая петля 4-20 мА: Самый популярный стандарт. Значению датчика «0%» соответствует ток 4 мА, а «100%» — 20 мА.
  • Почему не 0-20 мА?* Если ток равен 0 мА, это означает обрыв провода, а не нулевое значение. Это позволяет легко диагностировать неисправность.
  • Напряжение 0-10 В: Простой стандарт, но чувствителен к помехам и длине кабеля.
  • Математика масштабирования сигнала

    ПЛК не понимает «градусы Цельсия» или «бары давления» напрямую. Он видит цифровой код, поступающий с АЦП (Аналого-Цифрового Преобразователя). Чтобы превратить «сырые» данные в понятные инженеру физические величины, используется формула линейной интерполяции.

    Формула для пересчета значения с аналогового входа:

    Где: * — искомое физическое значение (например, температура в градусах). * — текущее значение сигнала, полученное от модуля ввода (цифровой код). * — минимальное возможное значение входного сигнала (код для 4 мА). * — максимальное возможное значение входного сигнала (код для 20 мА). * — нижняя граница диапазона датчика (например, -50 градусов). * — верхняя граница диапазона датчика (например, +150 градусов).

    Эта операция называется масштабированием (scaling) и является рутинной задачей при программировании ПЛК.

    Заключение

    Сегодня мы разобрали устройство ПЛК. Мы узнали, что это надежный промышленный компьютер, который работает циклически: читает входы, думает и обновляет выходы. Мы также рассмотрели, как он «общается» с миром через дискретные (вкл/выкл) и аналоговые (плавные) сигналы.

    В следующей статье мы перейдем к самому интересному — языкам программирования стандарта МЭК 61131-3 и начнем с изучения Ladder Diagram (LD).

    2. Основы дискретной логики и графические языки программирования LD и FBD

    Основы дискретной логики и графические языки программирования LD и FBD

    В предыдущей статье мы разобрали, как устроен ПЛК и как он «видит» мир через свои входы и выходы. Мы узнали, что контроллер работает циклически: считывает входы, выполняет программу и обновляет выходы. Но как именно выглядит эта программа? На каком языке мы объясняем контроллеру, что если нажата кнопка «Пуск» и закрыта защитная дверь, то нужно включить двигатель?

    В этой статье мы погрузимся в основы дискретной логики — математического фундамента автоматизации, а затем изучим два самых популярных графических языка программирования стандарта МЭК 61131-3: Ladder Diagram (LD) и Function Block Diagram (FBD).

    Булева алгебра: Язык нулей и единиц

    Прежде чем рисовать схемы, нужно понять, как ПЛК принимает решения. В основе работы любого цифрового компьютера лежит булева алгебра (или алгебра логики). В этом мире существует всего два состояния:

    * Логический 0 (False, Ложь): Нет сигнала, выключено, контакт разомкнут. * Логическая 1 (True, Истина): Есть сигнал, включено, контакт замкнут.

    Вся сложная логика управления заводом строится всего на трех базовых операциях с этими состояниями: И, ИЛИ, НЕ.

    Логическое И (AND)

    Эта операция требует, чтобы все условия были истинными одновременно. Представьте прессовый станок: он должен опуститься только тогда, когда оператор нажмет кнопку левой рукой И кнопку правой рукой (для безопасности).

    Математически это записывается как логическое умножение (конъюнкция):

    Где: * — результат операции (выходной сигнал, например, запуск пресса). * — состояние первого входа (левая кнопка). * — состояние второго входа (правая кнопка). * — знак логического умножения (умножение 1 на 1 дает 1, любое другое сочетание дает 0).

    !Таблица истинности и электрический аналог логического И.

    Логическое ИЛИ (OR)

    Эта операция срабатывает, если истинно хотя бы одно из условий. Например, включить сирену тревоги, если сработал датчик дыма ИЛИ если нажата ручная кнопка пожарной тревоги.

    Математически это логическое сложение (дизъюнкция):

    Где: * — результат операции (сирена). * — сигнал от датчика дыма. * — сигнал от кнопки тревоги. * — знак логического сложения (результат равен 1, если хотя бы одно слагаемое равно 1).

    Логическое НЕ (NOT)

    Это операция инверсии. Она превращает 1 в 0, а 0 в 1. Например, если датчик уровня воды НЕ активен (бак пуст), то нужно включить насос.

    Где: * — результат операции. * — входной сигнал. * — черта над символом обозначает инверсию (отрицание) значения .

    Стандарт МЭК 61131-3

    В ранние годы автоматизации каждый производитель ПЛК придумывал свой язык программирования. Это создавало хаос. Чтобы навести порядок, Международная электротехническая комиссия (IEC) разработала стандарт IEC 61131-3 (в России ГОСТ Р МЭК 61131-3). Он описывает 5 стандартных языков программирования. Сегодня мы разберем два самых наглядных и популярных из них.

    Ladder Diagram (LD): Релейно-контактная схема

    LD (Ladder Diagram) или LAD — это язык, который выглядит как электрическая схема. Он был создан специально для электриков, переходивших с релейных шкафов на ПЛК. Название «Ladder» (лестница) он получил из-за своего внешнего вида: две вертикальные шины питания по бокам и горизонтальные цепи («ступеньки») между ними.

    Основные элементы LD

  • Шины питания (Power Rails): Две вертикальные линии. Левая шина — это «плюс» или фаза, правая — «минус» или нейтраль. Логический ток течет слева направо.
  • Ступень (Rung): Горизонтальная строка, в которой записывается логика.
  • Контакты (Contacts): Элементы, проверяющие состояние входов или внутренних переменных.
  • * Нормально открытый контакт (NO — Normally Open): Обозначается как -| |-. Он пропускает «ток» (логическую истину), если связанная с ним переменная равна 1. * Нормально закрытый контакт (NC — Normally Closed): Обозначается как -|/|-. Он пропускает «ток», если переменная равна 0.
  • Катушка (Coil): Обозначается как -( )-. Это выход или результат логической операции. Если «ток» дошел до катушки, она записывает 1 в связанную переменную.
  • !Структура ступени в языке Ladder Diagram.

    Логика в LD

    * Последовательное соединение контактов реализует логику И (AND). Ток пройдет к выходу только если замкнут первый контакт И второй контакт. * Параллельное соединение контактов реализует логику ИЛИ (OR). Ток пройдет, если замкнут верхний контакт ИЛИ нижний.

    Пример: Схема самоподхвата (Latch)

    Классическая задача: запустить двигатель нажатием кнопки «Пуск» (без фиксации) и остановить кнопкой «Стоп» (нормально замкнутой).

    В LD это выглядит так:

  • Контакт кнопки «Пуск» (NO).
  • Параллельно ему ставится контакт самого двигателя (NO). Это называется «подхват».
  • Последовательно с этой парой ставится контакт кнопки «Стоп» (NO в программе, так как физически кнопка обычно NC и подает 1 в покое).
  • В конце цепи — катушка двигателя.
  • Когда вы нажимаете «Пуск», ток идет через кнопку к катушке. Двигатель включается. Его контакт-подхват замыкается. Теперь, даже если отпустить «Пуск», ток пойдет через контакт двигателя. Цепь разорвется только при нажатии «Стоп».

    Function Block Diagram (FBD): Диаграмма функциональных блоков

    FBD — это язык, который больше нравится инженерам-электронщикам и программистам, привыкшим работать с потоками данных. Он напоминает чертеж цифровой микросхемы.

    В FBD нет шин питания и «тока». Здесь есть блоки, через которые проходят сигналы слева направо.

    Основные элементы FBD

  • Функциональные блоки: Прямоугольники, внутри которых написана функция (AND, OR, XOR, Timer, Counter). У блока есть входы (слева) и выходы (справа).
  • Линии связи: Соединяют выход одного блока со входом другого, передавая значение переменной.
  • !Пример логической схемы на языке FBD.

    Логика в FBD

    Здесь все интуитивно понятно: * Чтобы реализовать И, вы берете блок с надписью & или AND и подключаете к его входам сигналы. * Чтобы реализовать ИЛИ, вы берете блок >=1 или OR. * Чтобы сделать инверсию (НЕ), на входе или выходе блока ставится маленький кружок (пузырек), обозначающий отрицание.

    Сравнение LD и FBD

    | Характеристика | Ladder Diagram (LD) | Function Block Diagram (FBD) | | :--- | :--- | :--- | | Аналогия | Электрическая схема | Электронная плата / Поток данных | | Логика И | Последовательное соединение | Блок AND | | Логика ИЛИ | Параллельное соединение | Блок OR | | Удобство | Идеален для дискретной логики и блокировок | Удобен для сложных алгоритмов и обработки аналоговых сигналов | | Популярность | Самый популярный в США и Японии | Очень популярен в Европе (особенно Siemens) |

    > «Выбор языка программирования часто зависит не от задачи, а от привычек инженера. Но профессионал должен владеть обоими инструментами». — Из рекомендаций по стандарту IEC 61131-3.

    Как выбрать между LD и FBD?

  • Используйте LD, если ваша задача — это простая логика включения/выключения, управление моторами, клапанами и создание систем безопасности (Interlocks). Электрикам службы эксплуатации будет проще читать ваш код, так как он похож на старые схемы.
  • Используйте FBD, если вы работаете с аналоговыми сигналами (масштабирование, ПИД-регуляторы), сложной математикой или передачей данных между блоками. Визуально проследить путь сигнала через цепочку блоков проще, чем через множество ступеней LD.
  • Заключение

    Сегодня мы изучили алфавит программирования ПЛК. Мы разобрали три кита логики (И, ИЛИ, НЕ) и увидели, как они реализуются в графических языках LD и FBD.

    LD позволяет нам мыслить как электрики, замыкая цепи, а FBD — как схемотехники, соединяя функциональные блоки. В современной среде разработки (IDE) вы часто можете конвертировать код из одного языка в другой одним кликом, так как под капотом они имеют одну и ту же логическую структуру.

    В следующей статье мы добавим к нашей логике четвертое измерение — время. Мы изучим таймеры и счетчики, чтобы научить наш контроллер делать паузы и считать детали.

    3. Работа с памятью, типами данных, таймерами и счетчиками в проектах автоматизации

    Работа с памятью, типами данных, таймерами и счетчиками в проектах автоматизации

    В предыдущих статьях мы научились «думать» как ПЛК, используя базовую дискретную логику (И, ИЛИ, НЕ) и языки LD/FBD. Мы можем запустить двигатель, если нажата кнопка. Но что, если двигатель должен запуститься через 10 секунд после нажатия? Или если нам нужно остановить конвейер после того, как по нему проедет ровно 100 коробок? А как хранить температуру печи, которая не является просто «включенной» или «выключенной», а имеет конкретное значение, например, 250.5 градусов?

    Для решения этих задач нам недостаточно простого «Да/Нет». Нам нужны инструменты для работы со временем, счетом и хранением информации. В этой статье мы разберем, как устроена память ПЛК, какие бывают типы данных и как использовать таймеры и счетчики — «рабочих лошадок» любой программы автоматизации.

    Организация памяти ПЛК: Бит, Байт, Слово

    Память контроллера — это огромный шкаф с ячейками. Чтобы ПЛК мог найти нужную информацию, каждая ячейка имеет свой уникальный адрес. Но прежде чем говорить об адресах, нужно понять, какого размера эти ячейки.

    Минимальная единица информации в компьютере и ПЛК — это бит.

    * Бит (Bit): Может принимать значение только 0 или 1. Это состояние контакта, кнопки или лампочки. * Байт (Byte): Группа из 8 битов. В байте можно хранить небольшое число или состояние 8 разных кнопок. * Слово (Word): Группа из 16 битов (или 2 байтов). Это стандартный размер ячейки для хранения чисел в большинстве ПЛК. * Двойное слово (Double Word / DWord): Группа из 32 битов (или 4 байтов). Используется для больших чисел или чисел с плавающей точкой.

    !Иерархия памяти: Бит, Байт, Слово и Двойное Слово.

    Области памяти (IEC 61131-3)

    Стандарт МЭК выделяет специальные зоны памяти, к которым мы обращаемся в программе. Обычно они обозначаются префиксами:

  • I (Input): Область физических входов. Сюда процессор записывает состояние датчиков в начале цикла.
  • Пример:* %IX0.0 — входной бит (X) в байте 0, бит 0.
  • Q (Output): Область физических выходов. Сюда программа пишет команды для исполнительных механизмов.
  • Пример:* %QX1.5 — выходной бит (X) в байте 1, бит 5.
  • M (Memory / Merker / Flag): Внутренняя память. Это «черновик» контроллера. Сюда мы записываем промежуточные результаты вычислений, которые не нужно выводить на физические клеммы.
  • Типы данных: Как мы интерпретируем нули и единицы

    Одна и та же последовательность нулей и единиц в памяти может означать совершенно разные вещи в зависимости от того, какой тип данных мы используем. Рассмотрим основные типы, применяемые в автоматизации.

    1. Булевый тип (BOOL)

    Самый простой тип. Занимает 1 бит. * Значения: TRUE (1) или FALSE (0). * Применение: Кнопки, датчики, флаги ошибок, команды пуска.

    2. Целые числа (INT, UINT, DINT)

    Используются для счета (количество деталей), хранения настроек времени или кодов ошибок.

    Формула для расчета максимального значения беззнакового целого числа:

    Где: * — максимальное число, которое можно записать. * — основание двоичной системы. * — количество битов, выделенных под число.

    | Тип | Размер | Диапазон значений | Описание | | :--- | :--- | :--- | :--- | | BYTE | 8 бит | 0 ... 255 | Беззнаковое число. Часто используется для обмена данными. | | INT | 16 бит | -32 768 ... +32 767 | Знаковое целое. Самый популярный формат для аналоговых сигналов. | | UINT | 16 бит | 0 ... 65 535 | Беззнаковое целое (Unsigned INT). | | DINT | 32 бита | -2 млрд ... +2 млрд | Двойное целое. Для больших счетчиков. |

    3. Вещественные числа (REAL / FLOAT)

    Это числа с «плавающей точкой» (запятой). Они нужны, когда важна точность и дробная часть. * Размер: 32 бита (стандарт IEEE 754). * Пример: 3.14, -0.005, 120.5. * Применение: Температура, давление, расход, ПИД-регулирование.

    > Важно: Никогда не сравнивайте числа REAL на точное равенство (A == B). Из-за особенностей округления в процессоре 3.0000001 не будет равно 3.0. Используйте сравнение с диапазоном (A > B - погрешность И A < B + погрешность).

    4. Время (TIME)

    Специальный тип данных для таймеров. * Формат: Обычно хранится как количество миллисекунд (DINT). * Запись в коде: T#10s, T#500ms, T#1h20m.

    Таймеры: Управление временем

    Таймеры — это функциональные блоки, которые позволяют задерживать сигналы или формировать импульсы. В стандарте IEC 61131-3 есть три основных типа таймеров.

    TON (Timer On-Delay) — Задержка включения

    Самый часто используемый таймер. Он работает как ленивый работник: вы даете ему команду, а он начинает работать только спустя заданное время.

    Как это работает:

  • На вход IN подается логическая «1».
  • Таймер начинает отсчет времени.
  • Если сигнал на входе IN держится дольше заданного времени (PT — Preset Time), то выход Q включается.
  • Если сигнал на входе IN пропадет раньше времени, таймер сбрасывается и выход не включается.
  • !Диаграмма работы таймера TON: выход активируется с задержкой после активации входа.

    Пример применения: Защита от «дребезга» контактов датчика уровня или задержка запуска конвейера после включения сирены предупреждения.

    TOF (Timer Off-Delay) — Задержка выключения

    Этот таймер продолжает держать выход включенным некоторое время после того, как входной сигнал пропал.

    Пример применения: Вентилятор в ванной комнате или проектор, который продолжает охлаждать лампу после выключения питания.

    TP (Pulse Timer) — Генератор импульса

    Как только на входе появляется сигнал, таймер выдает импульс фиксированной длины, независимо от того, как долго держится входной сигнал.

    Пример применения: Подача порции реагента или включение звонка на фиксированное время при нажатии кнопки.

    Счетчики: Подсчет событий

    Счетчики позволяют ПЛК считать дискретные импульсы. Например, сигналы от фотодатчика на конвейере.

    CTU (Count Up) — Счетчик прямого счета

    Считает от 0 вверх до заданного значения.

    Входы и выходы блока: * CU (Count Up): Вход для импульсов. Считает по переднему фронту (переход с 0 на 1). * R (Reset): Сброс счетчика в ноль. * PV (Preset Value): Уставка (до скольки считать). * Q (Output): Выход срабатывает (становится TRUE), когда текущее значение (CV) становится больше или равно уставке (PV).

    Математика работы выхода:

    Где: * — состояние выхода (истина или ложь). * — текущее значение счетчика (Current Value). * — предустановленное значение (Preset Value). * — оператор сравнения «больше или равно».

    !Функциональный блок счетчика CTU с обозначением входов и выходов.

    CTD (Count Down) — Счетчик обратного счета

    Считает от заданного значения вниз до нуля. Выход срабатывает, когда счетчик достигает 0.

    CTUD (Count Up Down) — Реверсивный счетчик

    Универсальный блок, который может считать и вверх, и вниз. Используется, например, для подсчета количества машин на парковке: въезд — плюс один, выезд — минус один.

    Практический пример: Управление смесителем

    Давайте объединим знания. Представьте задачу: нужно налить воду в бак, перемешивать её 10 секунд, а затем слить.

    Алгоритм:

  • Нажимаем кнопку «Старт» (BOOL). Срабатывает клапан налива (BOOL).
  • Датчик уровня (BOOL) сообщает, что бак полон.
  • Клапан налива закрывается, включается двигатель мешалки (BOOL).
  • Запускается таймер TON с уставкой PT = T#10s.
  • Когда таймер досчитал (выход Q = 1), мешалка выключается и открывается клапан слива.
  • В этой задаче мы использовали: * BOOL для кнопок и клапанов. * TIME для задания времени смешивания. * TON для отсчета интервала.

    Заключение

    Сегодня мы значительно расширили арсенал инструментов. Теперь вы знаете, что ПЛК — это не просто набор реле, а мощный калькулятор, способный хранить числа (INT, REAL), работать со временем (TON, TOF) и считать события (CTU).

    Понимание типов данных критически важно. Ошибка в выборе типа (например, использование INT для давления 2.5 бар) приведет к потере данных, так как дробная часть будет отброшена. А правильное использование таймеров позволяет создавать сложные автоматические последовательности без участия человека.

    В следующей статье мы перейдем к структурированию программ: узнаем, что такое функции (FC) и функциональные блоки (FB), и зачем нужен организационный блок (OB).

    4. Язык структурированного текста (ST) и создание пользовательских функциональных блоков

    Язык структурированного текста (ST) и создание пользовательских функциональных блоков

    В предыдущих статьях мы освоили графические языки LD и FBD. Они интуитивно понятны и идеально подходят для реализации простой релейной логики или потоков данных. Однако, когда дело доходит до сложных математических вычислений, обработки массивов данных или реализации сложных алгоритмов управления, графические языки становятся громоздкими и трудночитаемыми.

    Представьте, что вам нужно решить квадратное уравнение или отсортировать список аварий по времени возникновения. Рисовать это квадратиками — настоящее мучение. Здесь на сцену выходит Structured Text (ST) — текстовый язык высокого уровня, напоминающий Pascal или C.

    В этой статье мы разберем синтаксис ST, научимся писать на нем алгоритмы и, самое главное, узнаем, как упаковывать наш код в пользовательские функциональные блоки (UDFB), чтобы использовать их снова и снова.

    Что такое Structured Text (ST)?

    ST (Структурированный текст) — это один из пяти языков стандарта МЭК 61131-3. Если LD — это язык электриков, а FBD — язык схемотехников, то ST — это язык программистов.

    Почему ST становится стандартом де-факто?

  • Компактность: Сложная формула, занимающая пол-экрана в FBD, в ST умещается в одну строку.
  • Мощность: Циклы (FOR, WHILE), условные переходы (CASE, IF) и работа со строками реализуются здесь гораздо проще.
  • Универсальность: Код на ST легко переносить между контроллерами разных производителей (Siemens, Beckhoff, CodeSys, Allen-Bradley), так как текст везде примерно одинаков.
  • !Визуальное сравнение компактности кода ST по сравнению с графическим языком FBD.

    Основы синтаксиса ST

    Синтаксис ST строг, но прост. Каждая инструкция должна заканчиваться точкой с запятой ;. Это сигнал компилятору, что команда завершена.

    Присваивание

    Самая частая ошибка новичков — использование знака равенства = для присваивания. В ST, как и в Pascal, для записи значения в переменную используется оператор :=.

    * A := 10; — Правильно (Записать число 10 в переменную A). * A = 10 — Это операция сравнения (Равно ли А десяти?).

    Математические операции

    Здесь все привычно: +, -, , / — основные арифметические действия. * MOD — остаток от деления. * или ^ — возведение в степень (зависит от среды разработки).

    Рассмотрим формулу масштабирования аналогового сигнала, которую мы изучали в первой статье. В ST она выглядит так:

    Где: * — масштабированное значение (выход). * — текущее значение с датчика (вход). * — диапазоны входного сигнала. * — диапазоны физической величины.

    В коде это будет одна понятная строка:

    Управляющие конструкции

    Сила ST — в управлении потоком выполнения программы.

    Условный оператор IF

    Позволяет выполнять код только при выполнении условия.

    Оператор выбора CASE

    Идеален для создания машин состояний (State Machines) — основы любой автоматики. Вместо кучи вложенных IF, мы описываем шаги процесса.

    Циклы (FOR, WHILE, REPEAT)

    С циклами в ПЛК нужно быть предельно осторожным. Вспомните принцип циклического выполнения (Scan Cycle) из первой статьи. Программа должна выполняться быстро (за 10-20 мс).

    Если вы напишете цикл, который выполняется слишком долго (например, 100 000 итераций), время цикла ПЛК превысит допустимый предел. Сработает сторожевой таймер (Watchdog), и контроллер уйдет в ошибку (STOP), остановив все оборудование.

    > Используйте циклы только для обработки массивов ограниченного размера (например, найти среднее значение за последние 10 измерений).

    Пользовательские функциональные блоки (UDFB)

    Представьте, что у вас на заводе 50 одинаковых насосов. Для каждого нужно написать логику: пуск, стоп, обработка аварии, подсчет моточасов. Копировать код 50 раз — плохая идея. Если вы найдете ошибку, придется исправлять её в 50 местах.

    Решение — создать свой Функциональный Блок (FB). Вы пишете код один раз, а затем создаете 50 «экземпляров» (instances) этого блока.

    Структура FB

    Любой блок состоит из:

  • Интерфейса: То, что торчит наружу (болты для подключения проводов).
  • * VAR_INPUT — входные параметры (только чтение внутри блока). * VAR_OUTPUT — выходные параметры (только запись внутри блока). * VAR_IN_OUT — переменные, которые можно и читать, и менять (ссылки).
  • Внутренних переменных (VAR): Скрытая память блока (таймеры, триггеры, промежуточные расчеты).
  • Кода: Логика работы.
  • !Концептуальная схема пользовательского функционального блока (UDFB).

    Пример: Создание блока управления двигателем (Motor_Control)

    Давайте напишем простой блок на ST, который запускает двигатель и проверяет обратную связь (контактор сработал).

    Объявление переменных (Интерфейс):

    Код тела блока (ST):

    Теперь в главной программе (Main) мы можем объявить переменную Pump1 типа Motor_Control и вызывать её:

    Разница между Функцией (FC) и Функциональным блоком (FB)

    Это критически важный момент для понимания архитектуры.

    * Функция (Function / FC): Не имеет памяти. Если вы вызовете функцию с одними и теми же входными данными, она всегда вернет один и тот же результат (например, SIN(x) или масштабирование). Она забывает всё, что было в прошлом цикле. * Функциональный блок (Function Block / FB): Имеет память (свой экземпляр данных). Он «помнит», что было в прошлом цикле. Это необходимо для таймеров, счетчиков, детекторов фронтов и машин состояний.

    > Если вашему алгоритму нужно знать, что происходило 10 миллисекунд назад — используйте FB. Если результат зависит только от текущих входов — используйте FC.

    Заключение

    Язык ST открывает перед вами двери в мир профессиональной автоматизации. Он позволяет реализовывать сложные алгоритмы чисто и компактно. Комбинируя ST с мощью пользовательских функциональных блоков (UDFB), вы сможете создавать собственные библиотеки готовых решений, превращая программирование из рутины в сборку конструктора.

    В следующей статье мы рассмотрим тему, которая часто пугает новичков, но является стандартом в промышленности — ПИД-регулирование. Мы узнаем, как заставить систему поддерживать температуру или давление с высокой точностью, используя знания, полученные сегодня.

    5. Диагностика, отладка кода и базовые принципы связи с HMI и SCADA

    Диагностика, отладка кода и базовые принципы связи с HMI и SCADA

    Поздравляю! Вы прошли долгий путь от понимания того, что такое бит и байт, до написания собственных функциональных блоков на языке ST. В предыдущих статьях мы научились создавать логику управления. Но, как скажет вам любой опытный программист: «Написать код — это 20% работы. Заставить его работать правильно — остальные 80%».

    В этой статье мы переходим к этапу, который отличает новичка от профессионала: диагностика и отладка. Мы узнаем, как найти ошибку, если станок не запускается, хотя «в коде всё верно». А затем мы поднимемся на уровень выше и разберем, как наш ПЛК общается с оператором через панели HMI и диспетчерские системы SCADA.

    Типы ошибок в программировании ПЛК

    Прежде чем чинить, нужно понять, что сломалось. Ошибки делятся на две большие категории:

  • Синтаксические ошибки (Syntax Errors): Это ошибки в правилах языка. Например, вы забыли точку с запятой в ST или попытались соединить выход типа REAL со входом типа BOOL в FBD. Среда разработки (IDE) подсветит их красным еще до загрузки в контроллер. Это самые простые ошибки.
  • Логические ошибки (Logical Errors): Самые коварные. Программа загружается, контроллер работает (лампочка RUN горит зеленым), но машина ведет себя неадекватно: цилиндр не выдвигается или насос не отключается при переполнении бака. Именно для поиска таких ошибок нужны инструменты отладки.
  • Инструменты отладки и диагностики

    В отличие от IT-программистов, у инженеров АСУ ТП нет возможности остановить выполнение программы на середине, чтобы «подумать». ПЛК управляет физическими процессами в реальном времени. Если вы остановите программу, конвейер встанет, а печь может перегреться. Поэтому методы отладки здесь специфичны.

    1. Режим мониторинга (Online Monitor)

    Это базовый инструмент. Вы подключаетесь к ПЛК и видите состояние переменных в реальном времени прямо в редакторе кода.

    * В LD/FBD: Линии, по которым течет «ток» (логическая единица), подсвечиваются цветом (обычно зеленым или синим). Вы наглядно видите, на каком контакте обрывается цепь. * В ST: Рядом со строками кода появляются текущие значения переменных.

    !Режим онлайн-мониторинга позволяет видеть прохождение сигнала через логическую цепь.

    2. Таблицы наблюдения (Watch Tables)

    Иногда переменные разбросаны по разным частям программы, и следить за ними неудобно. Для этого создаются Watch Tables.

    Вы создаете список интересующих вас переменных (например, Sensor_1, Motor_Start, Timer_Value) и видите их значения в одной таблице. Это похоже на приборную панель, которую вы собираете сами для конкретной задачи.

    3. Форсирование (Forcing)

    Мощный, но опасный инструмент. Force позволяет принудительно установить значение входа или выхода, игнорируя реальное состояние датчиков или логику программы.

    Пример:* Датчик двери сломался, но вам нужно срочно проверить работу двигателя. Вы делаете «Force TRUE» для входа датчика, и ПЛК «думает», что дверь закрыта.

    > Внимание! Форсирование подменяет физическую реальность. Если вы форсируете концевой выключатель, механизм может поехать дальше положенного и сломать оборудование. Всегда снимайте все «форсы» (Unforce All) после окончания тестов.

    4. Трейс (Trace / Logic Analyzer)

    Глаз человека не способен заметить изменение сигнала, которое длится 10 миллисекунд. Но для ПЛК это целый цикл работы. Если датчик «дребезжит» или проскакивает короткий импульс ошибки, вы не увидите этого в обычном мониторе.

    Trace работает как осциллограф. Он записывает значения выбранных переменных в буфер контроллера каждый цикл, а затем выводит их в виде графика. Это единственный способ поймать «плавающие» ошибки.

    Человеко-машинный интерфейс (HMI)

    ПЛК — это «мозг», скрытый в шкафу. Но оператору нужно как-то управлять процессом: нажимать кнопки, видеть температуру, читать сообщения об авариях. Для этого используется HMI (Human Machine Interface).

    Обычно это сенсорная панель, установленная непосредственно на дверце шкафа управления или рядом с установкой.

    Как ПЛК общается с HMI?

    Связь строится на базе тегов (Tags). Тег — это связующее звено между ячейкой памяти ПЛК и графическим элементом на экране.

  • В ПЛК: Есть переменная Tank_Level (тип INT, адрес %MW100).
  • В HMI: Создается тег HMI_Level, который ссылается на адрес %MW100 в ПЛК.
  • На экране: Вы рисуете столбик (Bar Graph) и привязываете его к тегу HMI_Level.
  • Теперь, когда ПЛК меняет значение в памяти, столбик на экране растет или падает.

    !Цикл обмена данными между человеком и машиной через HMI.

    Основные функции HMI:

    * Визуализация: Отображение процесса (схемы труб, состояние моторов). * Управление: Кнопки «Пуск», «Стоп», ввод уставок (например, целевая температура). * Алармы (Alarms): Список активных аварий и журнал истории событий. * Рецепты: Возможность сохранить набор настроек (например, «Хлеб белый», «Хлеб ржаной») и загружать их в ПЛК одним нажатием.

    SCADA: Диспетчерское управление

    Если HMI управляет одним станком, то SCADA (Supervisory Control and Data Acquisition) управляет целым заводом.

    SCADA — это программный комплекс, установленный на серверах и компьютерах в диспетчерской. Она собирает данные со множества ПЛК и предоставляет глобальную картину.

    Отличия HMI от SCADA

    | Характеристика | HMI (Панель оператора) | SCADA (Система диспетчеризации) | | :--- | :--- | :--- | | Масштаб | Локальный (одна установка/станок) | Глобальный (цех, завод, месторождение) | | Железо | Специализированный промышленный планшет | Серверы, ПК, видеостены | | Хранение данных | Ограничено (дни/недели) | Огромные базы данных (годы) | | Функционал | Оперативное управление | Аналитика, отчеты, графики за год |

    Архитектура SCADA

    В основе SCADA лежит база данных тегов и система архивации. Представьте, что вам нужно построить график температуры печи за прошлый месяц. ПЛК не может хранить столько данных. SCADA опрашивает ПЛК (например, раз в секунду), записывает значение в SQL-базу данных и по запросу строит тренды.

    Протоколы связи: Язык общения устройств

    Чтобы HMI, SCADA и ПЛК понимали друг друга, они должны говорить на одном языке — протоколе связи.

    Modbus

    «Дедушка» промышленной связи. Простой, надежный, но медленный и небезопасный. Данные передаются в виде таблиц регистров (просто чисел). Чтобы понять, что лежит в регистре 40001, вам нужна бумажная документация (карта регистров).

    OPC UA (Open Platform Communications Unified Architecture)

    Современный стандарт индустрии 4.0. Это универсальный переводчик.

    * Независимость от платформы: Работает на Windows, Linux, Android. * Безопасность: Шифрование и сертификаты (как в банковских приложениях). * Семантика: Вместе со значением передается имя переменной, её тип, единицы измерения и метка времени. SCADA не нужно гадать, что такое «40001», она сразу видит объект Motor1.Temperature.

    Математика передачи данных

    При проектировании систем SCADA важно понимать, какой объем данных мы передаем. Если мы опрашиваем 1000 тегов каждую секунду, справится ли сеть?

    Пропускная способность канала связи () может быть оценена упрощенно:

    Где: * — требуемая скорость передачи данных (бит/с). * — количество опрашиваемых тегов (штук). * — средний размер одного тега в битах (включая накладные расходы протокола). * — частота опроса (Гц, раз в секунду).

    Например, если мы опрашиваем 1000 тегов (), каждый тег с заголовками занимает около 500 бит () в протоколе Modbus TCP, и делаем это 10 раз в секунду ():

    Это означает, что старая сеть на 10 Мбит/с будет загружена наполовину только опросом, что может привести к задержкам. Современные сети 100 Мбит/с или 1 Гбит/с легко справляются с такой нагрузкой.

    Заключение курса

    В этой статье мы замкнули круг. Мы начали с «железа» ПЛК, изучили логику и языки программирования, научились работать с памятью и структурировать код. Теперь вы знаете, как отлаживать свои программы и как выводить данные на экраны операторов.

    Программирование ПЛК — это бесконечный процесс обучения. Новые контроллеры становятся мощнее, появляются облачные технологии и IoT, но база, которую вы получили в этом курсе — циклическое выполнение, дискретная логика, таймеры и надежность — останется неизменной.

    Ваш путь в автоматизацию только начинается. Практикуйтесь, ломайте (в симуляторе!), чините и создавайте надежные системы, которые управляют нашим миром.