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 здійснює негайний вихід з програми. Приклад оформлення фрагменту тексту програми на STFOR 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:
Примітки
Джерела
Посилання
|