Школа для Электрика. Все Секреты Мастерства. Образовательный сайт по электротехнике  
ElectricalSchool.info - большой образовательный проект на тему электричества и его использования. С помощью нашего сайта вы не только поймете, но и полюбите электротехнику, электронику и автоматику!
Электрические и магнитные явления в природе, науке и технике. Современная электроэнергетика, устройство электрических приборов, аппаратов и установок, промышленное электрооборудование и системы электроснабжения, электрический привод, альтернативные источники энергии и многое другое.
 
Школа для электрика | Правила электробезопасности | Электротехника | Электроника | Провода и кабели | Электрические схемы
Автоматизация | Тренды, актуальные вопросы | Обучение электриков | Электронные учебники | Калькулятор по электротехнике | Контакты



Автоматизация производственных процессов: датчики, исполнительные механизмы, ПЛК, частотники, HMI/SCADA и промышленные сети. Примеры типовых задач автоматизации, схемы подключения, основы программирования и диагностика, чтобы внедрять решения быстрее и надёжнее.

 

База знаний | Избранные статьи | Эксплуатация электрооборудования | Электроснабжение
Электрические аппараты | Электрические машины | Электропривод | Электрическое освещение

 Школа для электрика / Автоматизация производственных процессов / Structured Text в CODESYS V3.5: как создать первую программу ПЛК


 Школа для электрика в Telegram

Structured Text в CODESYS V3.5: как создать первую программу ПЛК



Structured Text, или ST, - это текстовый язык программирования промышленных контроллеров. Он входит в семейство языков IEC 61131-3 и позволяет создавать алгоритмы управления с помощью переменных, условий, циклов, функций и функциональных блоков. В отличие от графических языков LD и FBD, программа на ST записывается в виде структурированного текста, поэтому особенно удобна для математических расчётов, обработки массивов, рецептур, диагностических сообщений и сложной логики.

Для начинающего специалиста Structured Text может показаться похожим на обычное программирование. Однако у него есть важная особенность: программа работает не сама по себе, а внутри циклической задачи ПЛК. Контроллер регулярно считывает входы, выполняет код и передаёт рассчитанные значения на выходы.

ПЛК в шкафу управления

Почему инженеры изучают Structured Text

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

Structured Text позволяет компактно описывать:

  • математические формулы;
  • обработку аналоговых сигналов;
  • массивы и структуры данных;
  • последовательности технологических операций;
  • конечные автоматы;
  • алгоритмы диагностики;
  • управление несколькими одинаковыми механизмами;
  • обмен данными с HMI, SCADA и промышленными сетями.

Язык поддерживает условные конструкции IF...THEN...ELSE, многовариантный выбор CASE и циклы FOR, WHILE, REPEAT. Именно поэтому он подходит как для небольших программ, так и для сложных функциональных блоков.

Например, условие включения насоса можно записать так:

IF xStart AND xLevelOk AND xProtectionOk THEN
    xPumpCommand := TRUE;
ELSE
    xPumpCommand := FALSE;
END_IF;

Здесь контроллер включает насос только при наличии команды запуска, нормальном уровне и исправной защите.

Как работает программа ПЛК

ПЛК выполняет пользовательскую программу циклически. Упрощённо один цикл можно представить так:

  1. Контроллер считывает сигналы с входов.
  2. Значения входов передаются в программу.
  3. Выполняются инструкции Structured Text.
  4. Рассчитываются управляющие сигналы.
  5. Результаты передаются на физические выходы.
  6. Цикл повторяется.

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

Например, если к входу подключён датчик уровня, программа в каждом цикле проверяет его состояние:

IF xLevelLow THEN
    xPumpCommand := FALSE;
ELSE
    xPumpCommand := TRUE;
END_IF;

Если уровень стал ниже допустимого, насос отключается. При этом важно учитывать не только синтаксис, но и физику процесса: задержки, инерционность оборудования, аварийные состояния и безопасное поведение при отказе датчика.

Переменные и типы данных

В Structured Text каждая переменная должна иметь тип. Это помогает компилятору обнаруживать ошибки ещё до загрузки программы в контроллер.

Наиболее распространённые типы:

Тип

Назначение

BOOL

логическое состояние: TRUE или FALSE

INT

знаковое целое число

DINT

расширенное целое число

UINT

беззнаковое целое число

REAL

вещественное число

LREAL

вещественное число повышенной точности

WORD

16-битное слово для битовых операций

DWORD

32-битное слово

STRING

текстовая строка

TIME

интервал времени

Пример объявления переменных:

VAR
    xSystemEnable : BOOL := FALSE;
    iStep         : INT := 0;
    rTemperature  : REAL := 20.0;
    tDelay        : TIME := T#5s;
END_VAR

В этом примере:

  • xSystemEnable хранит разрешение работы;
  • iStep содержит номер текущего шага;
  • rTemperature хранит температуру;
  • tDelay задаёт временную задержку пять секунд.

Правильный выбор типа имеет практическое значение. Если для счётчика деталей выбрать слишком маленький тип, он может переполниться. Если аналоговое значение обрабатывать как целое число, можно потерять дробную часть.

Операторы и синтаксис

Основой ST является оператор присваивания:

xMotorOn := TRUE;

Важное правило: в Structured Text присваивание обозначается как :=, а одиночный знак = используется для сравнения.

xMotorOn := TRUE;       // присваивание
xReady := xState = 3;   // сравнение

Каждая завершённая инструкция обычно заканчивается точкой с запятой.

Пример математического расчёта:

rPower := rVoltage * rCurrent;

Пример логической проверки:

xReady := xPressureOk AND xTemperatureOk AND NOT xEmergencyStop;

Пример ограничения значения:

rOutput := LIMIT(0.0, rCommand, 100.0);

Такой подход полезен для аналоговых выходов: управляющий сигнал не выйдет за пределы от 0 до 100 процентов.

Условия и режимы работы

В промышленной автоматизации оборудование часто имеет несколько режимов: ручной, автоматический, наладочный или аварийный. Для их обработки удобно применять CASE.

CASE eMode OF
    E_Mode.Manual:
        xManualControl := TRUE;
        xAutomaticControl := FALSE;
    E_Mode.Automatic:
        xManualControl := FALSE;
        xAutomaticControl := TRUE;
    E_Mode.Setup:
        xManualControl := TRUE;
        xAutomaticControl := FALSE;
ELSE
    xManualControl := FALSE;
    xAutomaticControl := FALSE;
END_CASE;

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

Таймеры и последовательности

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

Для таких задач используются стандартные функциональные блоки, например TON.

fbStartDelay(
    IN := xStartCommand,
    PT := T#3s
);
IF fbStartDelay.Q THEN
    xMotorCommand := TRUE;
END_IF;

В этом примере двигатель включается через три секунды после появления команды запуска.

На практике таймеры используются для:

  • задержки включения;
  • задержки отключения;
  • фильтрации сигналов;
  • контроля времени операции;
  • формирования импульсов;
  • обнаружения зависания механизма;
  • ограничения продолжительности аварийного режима.

Функции и функциональные блоки

Одна из сильных сторон Structured Text - возможность создавать повторно используемые программные компоненты.

Функция выполняет расчёт и возвращает результат:

FUNCTION ScaleSignal : REAL
VAR_INPUT
    rRaw    : REAL;
    rInMin  : REAL;
    rInMax  : REAL;
    rOutMin : REAL;
    rOutMax : REAL;
END_VAR
ScaleSignal :=
    (rRaw - rInMin) /
    (rInMax - rInMin) *
    (rOutMax - rOutMin) +
    rOutMin;

Такую функцию можно использовать для масштабирования сигналов давления, температуры, скорости или положения.

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

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

Типичные ошибки начинающих

При изучении Structured Text чаще всего встречаются следующие ошибки:

  • использование = вместо :=;
  • отсутствие точки с запятой;
  • смешивание несовместимых типов;
  • деление целых чисел вместо вещественного расчёта;
  • отсутствие защиты от деления на ноль;
  • бесконечные циклы;
  • неправильная обработка аварийного останова;
  • повторная запись одного выхода в разных местах программы;
  • отсутствие контроля обратной связи;
  • прямое сравнение значений типа REAL.

Например, выражение:

iResult := iRawValue / 27648 * 100;

может привести к потере точности, если оба операнда деления имеют целочисленный тип. Надёжнее заранее выполнить преобразование:

rResult :=
    TO_REAL(iRawValue) /
    TO_REAL(27648) *
    100.0;

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

Почему важно изучать ST на практике

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

Важно уметь ответить на вопросы:

  • когда именно обновляется входной сигнал;
  • что произойдёт при пропадании датчика;
  • как остановить двигатель при аварии;
  • где хранится состояние механизма;
  • как исключить повторное включение после отказа;
  • как оператор узнает причину остановки;
  • как расширить проект без переписывания всей программы.

Поэтому обучение лучше строить на практических примерах: насосной станции, конвейере, резервуаре, печи нагрева, вентиляционной установке или технологической линии.

Structured Text с нуля: синтаксис, типы данных, операторы

Электронное учебное пособие

Если вы хотите изучить Structured Text последовательно, рекомендуем электронное учебное пособие:

«Structured Text с нуля: синтаксис, типы данных, операторы в CODESYS V3.5»

Пособие рассчитано на начинающих программистов ПЛК, студентов, электриков, наладчиков, инженеров АСУ ТП и преподавателей технических дисциплин.

В книге разобраны:

  • устройство проекта в CODESYS V3.5;
  • цикл выполнения программы ПЛК;
  • синтаксис Structured Text;
  • переменные и типы данных;
  • арифметические и логические операторы;
  • условия и циклы;
  • массивы и структуры;
  • функции и функциональные блоки;
  • таймеры и счётчики;
  • дискретные и аналоговые сигналы;
  • типовые ошибки;
  • практические примеры программ управления.

Материал построен по принципу «от простого к сложному»: сначала объясняются базовые конструкции, затем они объединяются в рабочие алгоритмы автоматизации.

Скачать электронное учебное пособие:

Structured Text с нуля: синтаксис, типы данных, операторы в CODESYS V3.5

Начать лучше с первых глав и сразу повторять примеры в учебном проекте CODESYS или совместимой среде. Так теория быстрее превращается в практический навык, необходимый для разработки программ ПЛК.

Электронные учебники



Если Вам понравилась эта статья, поделитесь ссылкой на неё в социальных сетях. Это сильно поможет развитию нашего сайта!

Еще больше полезной информации по теме статьи:

  • Что стандарт МЭК 61131-3 советует программистам на языке ST
  • Структурированный текст (ST) как основной язык современного ПЛК-программирования
  • ST в примерах: 50 коротких задач для начинающих
  • Structured Text для S7-1200: как устроена первая программа, какие бывают таймеры и как правильно работать с переменными в TIA Portal
  • Языки программирования для инженера по автоматизации: что учить в 2026 году
  • Проектирование и отладка программ для программируемых логических контроллеров
  • Переменные в ST: как правильно объявлять и называть переменные
  • Основы языка ST для ПЛК: введение в Structured Text
  • Типы данных Structured Text в промышленной автоматике: понимание основ программирования ПЛК
  • Сравнение языков программирования ПЛК: FBD и CFC
  • Программирование ПЛК на языке SFC
  • IEC 61131-3 без скуки: как выбрать язык ПЛК под задачу
  • Топ-5 востребованных инструментов и технологий для инженера по автоматизации
  • Языки программирования ПЛК: как выбрать правильный язык для автоматизации производства
  • Среда программирования CoDeSys – главный инструмент программиста ПЛК
  • Управление уровнем воды в баке с использованием программируемого реле ОВЕН ПР110
  • Порядок подготовки и составления программ для программируемых контроллеров
  • Примеры программ на языке LAD для программируемых логических контроллеров










  • l>