Structured Text
Structured Text (ST) — это текстовый язык программирования, предназначенный для создания прикладного программного обеспечения программируемых логических контроллеров (ПЛК) и других промышленных устройств. Он является одним из пяти языков, стандартизированных международным стандартом IEC 61131-3 (Международная электротехническая комиссия, раздел 3). ST относится к языкам высокого уровня и по синтаксису и структуре близок к таким языкам, как Pascal, C или Ada, что делает его более удобным для реализации сложных алгоритмов по сравнению с графическими языками стандарта (например, релейно-контактными схемами, LD). Основное назначение Structured Text — описание логики управления технологическими процессами, математических вычислений, обработки данных и реализации последовательных алгоритмов в промышленных системах автоматизации.
История
Разработка стандарта IEC 61131-3 началась в конце 1980-х годов под эгидой Международной электротехнической комиссии (МЭК). Целью было создание единой методологии программирования для ПЛК, которая устранила бы разрозненность проприетарных решений производителей. Structured Text был предложен как текстовый язык, способный заменить устаревшие мнемокоды и ассемблерные инструкции, которые использовались в ранних контроллерах. За основу синтаксиса ST был взят язык Pascal, адаптированный для задач реального времени и управления оборудованием.
Первая редакция стандарта IEC 61131-3 была опубликована в 1993 году. В ней ST был определён как один из двух текстовых языков (наряду с Instruction List, IL). Вторая редакция (2003 год) уточнила синтаксис и добавила поддержку объектно-ориентированных элементов, таких как расширенные функциональные блоки. Третья редакция (2013 год) ввела полноценную поддержку объектно-ориентированного программирования (ООП): классы, наследование, интерфейсы, перегрузку операторов и методы. На сегодняшний день Structured Text является основным текстовым языком для большинства современных сред разработки ПЛК (CODESYS, TwinCAT, Siemens TIA Portal, B&R Automation Studio и др.), а язык Instruction List (IL) был объявлен устаревшим в третьей редакции стандарта.
Синтаксис и структура
Синтаксис Structured Text основан на принципах структурного программирования. Программа на ST состоит из последовательности операторов, которые выполняются сверху вниз. В отличие от графических языков, ST не требует явного указания порядка выполнения через связи — он задаётся порядком записи. Ключевые элементы синтаксиса включают:
- Комментарии: заключаются в круглые скобки со звёздочками:
( комментарий ). - Идентификаторы: могут содержать буквы, цифры и символ подчёркивания, не должны начинаться с цифры.
- Типы данных: стандартные (BOOL, INT, REAL, TIME, STRING) и пользовательские (STRUCT, ENUM, ARRAY).
- Операторы присваивания:
:=(например,Var1 := 10;). - Выражения: арифметические (
+,-,*,/,MOD), логические (AND,OR,NOT,XOR), сравнения (=,<>,<,>,<=,>=). - Управляющие конструкции:
IF...THEN...ELSIF...ELSE...END_IF,CASE...OF...ELSE...END_CASE,FOR...TO...BY...DO...END_FOR,WHILE...DO...END_WHILE,REPEAT...UNTIL...END_REPEAT. - Вызов функций и функциональных блоков: функции возвращают значение (например,
Result := ABS(-5);), функциональные блоки — экземпляры, сохраняющие состояние (например,MyTimer(IN := Start, PT := T#5s);).
Пример простой программы на ST, вычисляющей среднее арифметическое двух чисел:
`` PROGRAM Average VAR Input1 : REAL; Input2 : REAL; Result : REAL; END_VAR Result := (Input1 + Input2) / 2.0; END_PROGRAM ``
Классификация и типы программных единиц
Стандарт IEC 61131-3 определяет несколько типов программных единиц (POUs — Program Organization Units), которые могут быть реализованы на ST:
- Программа (PROGRAM): основная логическая единица, которая выполняется циклически. Содержит объявления переменных и тело алгоритма.
- Функция (FUNCTION): возвращает одно значение, не имеет внутреннего состояния (все переменные — локальные). Вызывается как часть выражения.
- Функциональный блок (FUNCTION_BLOCK): возвращает одно или несколько значений, сохраняет состояние между вызовами (имеет внутренние переменные). Экземпляры функциональных блоков создаются как переменные.
- Метод (METHOD): часть объектно-ориентированного расширения, связанная с классом или функциональным блоком. Позволяет реализовать поведение объекта.
- Класс (CLASS): введён в третьей редакции, поддерживает наследование, интерфейсы и полиморфизм.
Применение
Structured Text широко применяется в промышленной автоматизации для решения задач, требующих сложных вычислений, обработки больших объёмов данных или реализации алгоритмов, которые трудно выразить графически. Основные области использования:
- Управление технологическими процессами: программирование ПЛК для управления конвейерами, насосами, задвижками, дозаторами, печами и другим оборудованием.
- Математические и логические расчёты: реализация ПИД-регуляторов, фильтров, преобразований координат, расчёт расхода, давления, температуры.
- Обработка сигналов: анализ данных с датчиков, усреднение, сглаживание, выявление аномалий.
- Коммуникация и обмен данными: реализация протоколов (Modbus, Profibus, Ethernet/IP) через встроенные функции или библиотеки.
- Сложные последовательные алгоритмы: управление циклами, последовательностями операций, блокировками и аварийными остановами.
- Объектно-ориентированное программирование: создание библиотек повторно используемых компонентов (например, классов для управления клапанами, двигателями, датчиками).
Преимущества и недостатки
Преимущества
- Выразительность: позволяет реализовывать сложные алгоритмы компактнее, чем графические языки.
- Читаемость: синтаксис, близкий к Pascal, понятен инженерам, знакомым с текстовыми языками.
- Поддержка ООП: третья редакция стандарта позволяет применять современные парадигмы программирования.
- Переносимость: код на ST, написанный в соответствии со стандартом, может быть перенесён между системами разных производителей с минимальными изменениями.
- Эффективность: компиляторы ST генерируют оптимизированный машинный код для ПЛК.
Недостатки
- Сложность для начинающих: требует понимания алгоритмического мышления и синтаксиса, в отличие от интуитивно понятных релейных схем (LD).
- Меньшая наглядность: для отладки последовательных процессов часто требуется симуляция или просмотр значений переменных, в то время как графические языки позволяют визуально отслеживать поток данных.
- Зависимость от среды разработки: хотя синтаксис стандартизирован, конкретные реализации (например, в CODESYS или Siemens) могут иметь расширения и особенности, усложняющие перенос кода.
Интеграция с другими языками стандарта IEC 61131-3
Structured Text не является изолированным языком. В рамках одной программы для ПЛК можно использовать разные языки для разных частей проекта. Например, логика включения/выключения оборудования может быть реализована на релейных схемах (LD), а математический расчёт — на ST. Стандарт поддерживает вызов функциональных блоков, написанных на других языках (например, на SFC — Sequential Function Chart), из кода на ST. Это позволяет разработчикам выбирать наиболее подходящий язык для каждой задачи.
Примеры реализации
Простейший пример — реализация таймера задержки включения (TON) на ST:
`` FUNCTION_BLOCK MyTON VAR_INPUT IN : BOOL; PT : TIME; END_VAR VAR_OUTPUT Q : BOOL; ET : TIME; END_VAR VAR StartTime : TIME; Running : BOOL := FALSE; END_VAR IF IN AND NOT Running THEN StartTime := CURRENT_TIME; Running := TRUE; END_IF; IF NOT IN THEN Running := FALSE; Q := FALSE; ET := T#0s; END_IF; IF Running THEN ET := CURRENT_TIME - StartTime; IF ET >= PT THEN Q := TRUE; END_IF; END_IF; END_FUNCTION_BLOCK ``
Более сложный пример — реализация ПИД-регулятора (пропорционально-интегрально-дифференциального) на ST, который используется для поддержания заданного значения технологического параметра (например, температуры или давления).
Перспективы развития
С развитием промышленного Интернета вещей (IIoT) и киберфизических систем Structured Text продолжает оставаться востребованным языком для программирования контроллеров. Третья редакция стандарта IEC 61131-3, с поддержкой ООП, позволяет создавать более модульные и масштабируемые решения. В перспективе ожидается дальнейшая интеграция ST с языками общего назначения (например, C++ или Python) через интерфейсы, а также расширение поддержки для систем реального времени и распределённых вычислений.
Источники
- Международный стандарт IEC 61131-3:2013 — «Programmable controllers — Part 3: Programming languages».
- John, K. H., Tiegelkamp, M. — «IEC 61131-3: Programming Industrial Automation Systems» (Springer, 2010).
- Lewis, R. W. — «Programming Industrial Control Systems Using IEC 1131-3» (IEE, 1998).
- Документация среды разработки CODESYS (CODESYS GmbH).
- Документация среды разработки TwinCAT (Beckhoff Automation).
- Документация среды разработки TIA Portal (Siemens AG).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →