Structured text
Структуро́ваний текст або Structured text (ST) — мова програмування стандарту IEC 61131-3[1], що призначена для програмування промислових контролерів та операторських станцій. Знайшла застосування у SCADA/HMI/SoftLogic пакетах. За структурою й синтаксисом є найближчою до мови програмування Pascal. Мова є зручною для написання великих програм й роботи з аналоговими сигналами та числами з рухомою комою.
Основні принципи мови
Основою ST-програми слугують вирази. Результат обчислення виразу присвоюють змінній за допомогою оператора «:=». Кожний вираз обов'язково має закінчуватись крапкою з комою «;». Вирази будуються із змінних, констант і функцій, розділених операторами.
Стандартні оператори у виразах мають символьне позначення, наприклад математичні дії: +, -, *, /, порівняння тощо. Крім операторів у виразі можуть використовуватись пробіли і табуляція для кращого сприйняття, а також, коментарі.
Вираз може містити інший вираз у дужках, що обчислюється у першу чергу.
Вираз обчислюється відповідно до правил пріоритету операцій. У порядку зменшення пріоритету операції розташовуються таким порядком: вираз у дужках; виклик функції; степінь EXPT; зміна знаку; заперечення NOT; множення, ділення і ділення по модулю MOD; додавання і віднімання; операції порівняння (<, >, <=, >=); рівність (=); нерівність (<>); логічні операції AND, XOR та OR.
Основні оператори мови
Оператор вибору (IF)
Оператор вибору дозволяє виконувати різні групи виразів залежно від умов, записаних логічними виразами. Повний синтаксис оператора IF виглядає так:
IF <логічний вираз IF> THEN <вирази IF>; [ ELSEIF <логічний вираз RLSEIF 1> THEN <вирази ELSEIF 1>; … ELSEIF <логічний вираз ELSEIF n> THEN <вирази ELSEIF n>; ELSE <вирази ELSE>; ] END_IF
Оператор множинного вибору (CASE)
Оператор множинного вибору CASE дозволяє виконати різні групи виразів залежно від значення однієї цілочисельної змінної або виразу. Синтаксис:
CASE <цілочисельний вираз> OF <значення 1>: <вирази 1>; <значення 2>: <вирази 2>; … <значення n>: <вирази n> [ ELSE <вирази ELSE>; ] END_CASE
Цикли WHILE та REPEAT
Цикли WHILE та REPEAT забезпечують повторення групи виразів, поки вірним є логічний вираз.
Синтаксис WHILE:
WHILE <умовний логічний вираз> DO <вирази (тіло циклу)> END_WHILE
Синтаксис REPEAT^
REPEAT <вирази (тіло циклу)> UNTIL <умовний логічний вираз> END_REPEAT
Цикл FOR
Цикл FOR забезпечує задану кількість повторень групи виразів. Синтаксис:
FOR <цілочисельний лічильник> := <початкове значення>
TO <кінцеве значення>
[BY <крок>] DO
<вирази (тіло циклу)>
END_FOR
Оператори переривання ітерацій EXIT та RETURN
Оператор EXIT, розташований у тілі циклів WHILE, REPEAT та FOR, приводить до негайного закінчення циклу. Оператор RETURN здійснює негайний вихід з програми.
Приклад оформлення фрагменту тексту програми на ST
FOR icY := 0 TO 8 DO FOR icX := 0 TO 16 DO IF iaPos[icY, icX] > iLevel THEN iBalance := iBalance + 1; ELSE IF iaPas[icY,IcX] < iLevel THEN iBalance := iBalance – 1; END_IF END_IF END_FOR iLevel := iLevel *2; END_FOR
Розширення стандарту
Існує розширений стандарт IEC 61131-3, що містить елементи об'єктно-орієнтованого програмування через розширення можливостей функціональних блоків (успадкування, властивості, методи, інтерфейси). Також розширений стандарт передбачає уведення нових типів даних, таких як вказівники, об'єднання, рядки з двома байтами на символ, посилання тощо.
Деякі виробники доповнюють свої реалізації власними нестандартними розширеннями. Прикладом можуть слугувати операції динамічного виділення й звільнення пам'яті у TwinCAT 3.1 компанії «Beckhoff» (__NEW та __DELETE відповідно). Ці розширення відкривають багато нових можливостей при написанні програм.
Приклад тексту програми мовою ST
// PLC configuration
CONFIGURATION DefaultCfg
VAR_GLOBAL
b_Start_Stop : BOOL; // Global variable to represent a boolean.
b_ON_OFF : BOOL; // Global variable to represent a boolean.
Start_Stop AT %IX0.0:BOOL; // Digital input of the PLC (Address 0.0)
ON_OFF AT %QX0.0:BOOL; // Digital output of the PLC (Address 0.0). (Coil)
END_VAR
// Schedule the main program to be executed every 20 ms
TASK Tick(INTERVAL := t#20ms);
PROGRAM Main WITH Tick : Monitor_Start_Stop;
END_CONFIGURATION
PROGRAM Monitor_Start_Stop // Actual Program
VAR_EXTERNAL
Start_Stop : BOOL;
ON_OFF : BOOL;
END_VAR
VAR // Temporary variables for logic handling
ONS_Trig : BOOL;
Rising_ONS : BOOL;
END_VAR
// Start of Logic
// Catch the Rising Edge One Shot of the Start_Stop input
ONS_Trig := Start_Stop AND NOT Rising_ONS;
// Main Logic for Run_Contact -- Toggle ON / Toggle OFF ---
ON_OFF := (ONS_Trig AND NOT ON_OFF) OR (ON_OFF AND NOT ONS_Trig);
// Rising One Shot logic
Rising_ONS := Start_Stop;
END_PROGRAM
Див. також
Інші мови програмування стандарту IEC 61131-3:
Примітки
- IEC 61131-3:2013 Programmable controllers — Part 3: Programming languages.
Джерела
- Мишель Ж. Программируемые контроллеры: Архитектура и применение: пер. с фр. / Ж. Мишель ; Переводчик И. В. Федотов ; Ред. Б. И. Лыткин . — М. : Машиностроение, 1992 . — 320 . — ISBN 5-217-00974-8
- Э. Парр. Программируемые контроллеры: руководство для инженера. — М.: БИНОМ. Лаборатория знаний, 2007. — 516 с. — ISBN 978-5-94774-340-1
- Петров И. В. Программируемые контроллеры. Стандартные языки и приёмы прикладного проектирования / Под ред. проф. В. П. Дьяконова. — М.: СОЛОН-Пресс, 2004. — 256 c. — ISBN 5-98003-079-4