Структурированный текст - Structured text
Структурированный текст, сокращенно ST или же STX, является одним из пяти языков, поддерживаемых IEC 61131-3 стандарт, рассчитанный на программируемые логические контроллеры (ПЛК).[1][2] Это язык высокого уровня, который блочная структура и синтаксически напоминает Паскаль, на котором он основан.[3] Все языки разделяют IEC61131 Общие элементы. Переменные и вызовы функций определяются общими элементами, поэтому в одной программе можно использовать разные языки стандарта IEC 61131-3.
Поддерживаются сложные операторы и вложенные инструкции:
- Итерационные циклы (REPEAT-UNTIL; WHILE-DO)
- Условное исполнение (IF-THEN-ELSE; CASE)[3]
- Функции (SQRT (), SIN ())
Пример программы
(* простой конечный автомат *)TxtState := СОСТОЯНИЯ[Государственный аппарат];ДЕЛО Государственный аппарат ИЗ 1: Закрывающий клапан(); Государственный аппарат := 2; 2: Открытие клапана();ЕЩЕ BadCase();END_CASE;
В отличие от некоторых других языков программирования, здесь нет провалиться для оператора CASE: вводится первое совпадающее условие, и после выполнения его операторов блок CASE остается без проверки других условий.
Дополнительные примеры программирования ST
// Конфигурация ПЛККОНФИГУРАЦИЯ DefaultCfg VAR_GLOBAL b_Start_Stop : BOOL; // Глобальная переменная для представления логического значения. b_ON_OFF : BOOL; // Глобальная переменная для представления логического значения. Start_Stop В %IX0.0:BOOL; // Цифровой вход ПЛК (Адрес 0.0) ВКЛ ВЫКЛ В %QX0.0:BOOL; // Цифровой выход ПЛК (адрес 0.0). (Катушка) END_VAR // Планируем выполнение основной программы каждые 20 мс ЗАДАЧА Поставить галочку(ИНТЕРВАЛ := т#20РС); ПРОГРАММА Главный С Поставить галочку : Monitor_Start_Stop;END_CONFIGURATIONПРОГРАММА Monitor_Start_Stop // Актуальная программа VAR_EXTERNAL Start_Stop : BOOL; ВКЛ ВЫКЛ : BOOL; END_VAR VAR // Временные переменные для логической обработки ONS_Trig : BOOL; Rising_ONS : BOOL; END_VAR // Начало логики // Сделать первый снимок нарастающей кромки входа Start_Stop ONS_Trig := Start_Stop И НЕТ Rising_ONS; // Основная логика для Run_Contact - включить / выключить --- ВКЛ ВЫКЛ := (ONS_Trig И НЕТ ВКЛ ВЫКЛ) ИЛИ ЖЕ (ВКЛ ВЫКЛ И НЕТ ONS_Trig); // Логика Rising One Shot Rising_ONS := Start_Stop;END_PROGRAM
Пример функционального блока
//=======================================================================// Временной счетчик функционального блока: инкрементальный счет временного интервала//=======================================================================FUNCTION_BLOCK FB_Timed_Counter VAR_INPUT Выполнять : BOOL := ЛОЖНЫЙ; // Триггерный сигнал для начала отсчета времени Time_Increment : НАСТОЯЩИЙ := 1.25; // Введите время цикла (секунды) между счетчиками Count_Cycles : INT := 20; // Количество желаемых циклов счета END_VAR VAR_OUTPUT Timer_Done_Bit : BOOL := ЛОЖНЫЙ; // Бит одного выстрела, указывающий, что цикл таймера завершен Count_Complete : BOOL := ЛОЖНЫЙ; // Выходной бит, указывающий, что счет завершен Current_Count : INT := 0; // Накопление значения счетчика END_VAR VAR CycleTimer : Тонна; // Таймер FB из библиотеки команд CycleCounter : CTU; // Счетчик FB из библиотеки команд TimerPreset : ВРЕМЯ; // Преобразование Time_Increment в секундах в MS END_VAR // Начало программирования функционального блока TimerPreset := REAL_TO_TIME(в := Time_Increment) * 1000; CycleTimer( в := Выполнять И НЕТ CycleTimer.Q, pt := TimerPreset); Timer_Done_Bit := CycleTimer.Q; CycleCounter( у.е. := CycleTimer.Q, р := НЕТ Выполнять, pv := Count_Cycles); Current_Count := CycleCounter.резюме; Count_Complete := CycleCounter.q; END_FUNCTION_BLOCK
Рекомендации
- ^ Басидор, Майк (16 мая 2018 г.). «Следует ли мне ограничить программирование релейной логикой или использовать все стандарты IEC 61131?». Дизайн управления.
- ^ Стевич, Том (5 мая 2017 г.). «Очень краткая история платформ программирования ПЛК». Дизайн управления.
- ^ а б Роос, Нике. «Программирование ПЛК с использованием структурированного текста». Государственный университет Пенсильвании. Департамент компьютерных наук Университета Неймегена.