Структурированный текст
Структурированный текст , сокращенно ST или STX , — это один из пяти языков, поддерживаемых стандартом IEC 61131-3 , разработанным для программируемых логических контроллеров (ПЛК). [1] [2] Это язык высокого уровня, имеющий блочную структуру и синтаксически напоминающий Паскаль , на котором он основан. [3] Все языки имеют общие элементы IEC61131 . Переменные и вызовы функций определяются общими элементами, поэтому в одной программе можно использовать разные языки стандарта IEC 61131-3.
Поддерживаются сложные операторы и вложенные инструкции:
- Итерационные циклы (REPEAT-UNTIL; WHILE-DO)
- Условное выполнение (IF-THEN-ELSE; CASE) [3]
- Функции (КОРЕНЬ(), SIN())
Пример программы
[ редактировать ](* simple state machine *)
TxtState := STATES[StateMachine];
CASE StateMachine OF
1: ClosingValve();
StateMachine := 2;
2: OpeningValve();
ELSE
BadCase();
END_CASE;
В отличие от некоторых других языков программирования, для оператора CASE нет провала : вводится первое условие соответствия, и после выполнения его операторов блок CASE остается без проверки других условий.
Дополнительные примеры программирования 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
Пример функционального блока
[ редактировать ]//=======================================================================
// Function Block Timed Counter : Incremental count of the timed interval
//=======================================================================
FUNCTION_BLOCK FB_Timed_Counter
VAR_INPUT
Execute : BOOL := FALSE; // Trigger signal to begin Timed Counting
Time_Increment : REAL := 1.25; // Enter Cycle Time (Seconds) between counts
Count_Cycles : INT := 20; // Number of Desired Count Cycles
END_VAR
VAR_OUTPUT
Timer_Done_Bit : BOOL := FALSE; // One Shot Bit indicating Timer Cycle Done
Count_Complete : BOOL := FALSE; // Output Bit indicating the Count is complete
Current_Count : INT := 0; // Accumulating Value of Counter
END_VAR
VAR
CycleTimer : TON; // Timer FB from Command Library
CycleCounter : CTU; // Counter FB from Command Library
TimerPreset : TIME; // Converted Time_Increment in Seconds to MS
END_VAR
// Start of Function Block programming
TimerPreset := REAL_TO_TIME(in := Time_Increment) * 1000;
CycleTimer(
in := Execute AND NOT 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
Ссылки
[ редактировать ]- ^ Басидор, Майк (16 мая 2018 г.). «Должен ли я ограничить программирование релейной логикой или использовать все стандарты IEC 61131?» . Дизайн управления .
- ^ Стевич, Том (5 мая 2017 г.). «Очень краткая история платформ программирования ПЛК» . Дизайн управления .
- ^ Jump up to: а б Роос, Нике. «Программирование ПЛК с использованием структурированного текста». Департамент компьютерных наук Неймегенского университета. CiteSeerX 10.1.1.49.2016 .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь )