Структурированный текст , сокращенно ST или STX , является одним из пяти языков, поддерживаемых стандартом IEC 61131-3 , предназначенным для программируемых логических контроллеров (ПЛК). [1] [2] Это язык высокого уровня с блочной структурой, синтаксически напоминающий Паскаль , на котором он основан. [3] Все языки используют общие элементы IEC61131 . Переменные и вызовы функций определяются общими элементами, поэтому в одной программе можно использовать разные языки стандарта IEC 61131-3.
Поддерживаются сложные операторы и вложенные инструкции:
- Итерационные циклы (REPEAT-UNTIL; WHILE-DO)
- Условное исполнение (IF-THEN-ELSE; CASE) [3]
- Функции (SQRT (), SIN ())
Пример программы [ править ]
(* простой конечный автомат *) TxtState : = STATES [ StateMachine ] ;СЛУЧАЙ StateMachine OF 1 : ClosingValve () ; StateMachine : = 2 ; 2 : Открывающий клапан () ; ELSE BadCase () ; END_CASE ;
В отличие от некоторых других языков программирования, для оператора CASE нет провала: вводится первое совпадающее условие, и после выполнения его операторов блок CASE остается без проверки других условий.
Дополнительные примеры программирования ST [ править ]
// Конфигурация ПЛК КОНФИГУРАЦИЯ DefaultCfg VAR_GLOBAL b_Start_Stop : BOOL ; // Глобальная переменная для представления логического значения. b_ON_OFF : BOOL ; // Глобальная переменная для представления логического значения. Start_Stop AT % IX0 . 0 : BOOL ; // Цифровой вход ПЛК (Адрес 0.0) ON_OFF AT % QX0 . 0 : BOOL ; // Цифровой выход ПЛК (адрес 0.0). (Катушка) END_VAR // Планируем выполнение основной программы каждые 20 мс. TASK Tick ( ИНТЕРВАЛ : = t # 20 мс ) ; ПРОГРАММА Main WITH Tick : Monitor_Start_Stop ; END_CONFIGURATIONPROGRAM Monitor_Start_Stop // Фактическая программа VAR_EXTERNAL Start_Stop : BOOL ; ON_OFF : BOOL ; END_VAR VAR // Временные переменные для логической обработки ONS_Trig : BOOL ; Rising_ONS : BOOL ; END_VAR // Начало логики // Поймать передний край. Один выстрел из Start_Stop input ONS_Trig : = Start_Stop AND NOT Rising_ONS ; // Основная логика для Run_Contact - включить / выключить --- ON_OFF : = ( ONS_Trig AND NOT ON_OFF ) OR ( ON_OFF AND NOT ONS_Trig ) ; // Логика повышения One Shot Rising_ONS : = Start_Stop ; END_PROGRAM
Пример функционального блока [ править ]
// ================================================ ======================= // Временной счетчик функционального блока: инкрементный счет временного интервала // ============ ================================================== ========= FUNCTION_BLOCK FB_Timed_Counter VAR_INPUT Выполнить : BOOL : = FALSE ; // Триггерный сигнал для начала отсчета по времени Time_Increment : REAL : = 1.25 ; // Введите время цикла (в секундах) между счетчиками Count_Cycles : INT : = 20 ; // Количество желаемых циклов счета END_VAR VAR_OUTPUT Timer_Done_Bit : BOOL : = FALSE ; // Бит одного выстрела, указывающий, что цикл таймера завершен Count_Complete : BOOL : = FALSE ; // Выходной бит, указывающий, что счет завершен Current_Count : INT : = 0 ; // Накопление значения счетчика END_VAR VAR CycleTimer : TON ; // Таймер FB из библиотеки команд CycleCounter : CTU ; // Счетчик FB из библиотеки команд TimerPreset : TIME ; // Преобразование Time_Increment в секундах в MS END_VAR // Начало программирования функционального блока TimerPreset : = REAL_TO_TIME ( in : = Time_Increment ) * 1000 ; CycleTimer ( in : = Выполнить, И НЕ CycleTimer . Q , pt : = TimerPreset ) ; Timer_Done_Bit : = CycleTimer . Q ; CycleCounter ( cu : = CycleTimer . Q , r : = NOT Execute , pv : = Count_Cycles ) ; Current_Count : = CycleCounter . cv ; Count_Complete : = CycleCounter . q ; END_FUNCTION_BLOCK
Ссылки [ править ]
- ^ Bacidore, Майк (16 мая 2018). «Следует ли мне ограничивать программирование релейной логикой или использовать все стандарты IEC 61131?» . Дизайн управления .
- ^ Стевич, Том (5 мая 2017). «Очень краткая история платформ программирования ПЛК» . Дизайн управления .
- ^ a b Роос, Нике. «Программирование ПЛК с использованием структурированного текста» . Государственный университет Пенсильвании . Департамент компьютерных наук Университета Неймегена.