Structured text

Матеріал з Вікіпедії — вільної енциклопедії.
(Перенаправлено з 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:

  • FBD (англ. Function Block Diagram) — функціональні-блокові діаграми;
  • IL (англ. Instruction List) — список інструкцій асемблерного типу
  • SFC (англ. Sequential Function Chart) — мова діаграм станів;
  • LD (англ. Ladder Diagram) — релейно-контактні схеми.

Примітки[ред. | ред. код]

  1. 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

Посилання[ред. | ред. код]