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

Посилання

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.