Язык структурированного текста
Язык структурированного текста (Structured Text – ST) относится к классу текстовых языков высокого уровня. Этот язык подобен таким языкам программирования, как Pascal и С. На его основе можно создавать гибкие процедуры обработки данных. Язык структурированного текста является основным для описания шагов и транзакций языка SFC. Кроме этого, он имеет «выходы» во все остальные языки, что делает его универсальным в применении.
Язык ST используется для создания программ путем записи строк, состоящих из алфавитно-цифровых символов. Фраза составляется из основных элементов языка ST. Пример:
! %L2: (* Вот предложение с меткой, комментариями *)
SET %M0; %MW4 := %MW2 + %MW9;
(* и различными инструкциями *)
%MF12 := SQRT (%MF14);
Основные инструкции языка ST:
- битовые инструкции;
- арифметические и логические инструкции для слов и двойных слов;
- арифметические инструкции для чисел с плавающей точкой;
- инструкции числового сравнения слов, двойных слов и чисел с плавающей точкой;
- числовые преобразования;
- инструкции для таблиц, заполненных битами, словами, двойными словами и числами с плавающей точкой;
- инструкции для строк из символов;
- инструкции для алфавитно-цифрового сравнения;
- инструкции для управления временем;
- программные инструкции – инструкции для управления программой;
- управляющие инструкции – инструкции для управления ходом выполнения программы;
- инструкции для стандартных функциональных типов;
- инструкции предметной области (связь, ПИД–регулирование и т.д.).
Язык содержит четыре управляющие структуры:
- условное действие IF;
- условные итеративные действия WHILE и REPEAT;
- повторяющееся действие FOR.
Каждая управляющая структура обрамляется ключевыми словами, она начинается и заканчивается в данном выражении. Допускается вложение управляющих структур независимо от их типа. Управляющие структуры могут предшествовать или следовать за любой инструкцией.
Программы на языке ST составляются из выражений. Каждое выражение языка состоит из метки, комментариев и инструкций. Каждый из этих элементов может отсутствовать, таким образом, возможно пустое выражение, т.е. состоящее только из комментариев, либо состоящее из единственной метки. Каждое выражение начинается с восклицательного знака, который обычно вводится автоматически. Выражение на языке ST может содержать несколько инструкций, при этом каждая инструкция должна заканчиваться символом «точка с запятой». Фрагмент программы на языке ST показан ниже.
! %L95:
IF %I3.3 AND %I3.14
THEN SET %Q4.0;
END_IF;
! %L105:
IF %M3 THEN
FOR %MW99 := 0 TO 31 DO
IF %MW100[%MW99]<>0 THEN
%MW10 := %MW100[%MW99];
%MW11:= %MW99;
%Ml:= TRUE;
EXIT;
ELSE
%M1:= FALSE;
END_IF;
END_FOR;
ELSE
%M1:= FALSE;
END_IF;
Основные команды языка ST приведены в таблице 3.3.
Таблица 3.3 Основные команды языка ST
Изображение | Функция |
Битовые инструкции | |
: = | Битовое присвоение |
OR | Булевское ИЛИ |
AND | Булевское И |
XOR | Булевское ИСКЛЮЧАЮЩЕЕ ИЛИ |
NOT | Инверсия |
RE | Возрастающий фронт |
FE | Убывающий фронт |
SET | Установка в 1 |
RESET | Сброс в 0 |
Числовое сравнение для слов, двойных слов и чисел с плавающей точкой | |
< | Меньше |
> | Больше |
<= | Меньше или равно |
>= | Больше или равно |
= | Равно |
<> | Не равно |
Битовые таблицы | |
Таблица := Таблица | Присвоение между двумя таблицами |
Таблица : = Слово | Присвоение таблице значение слова |
Таблица : = Двойное слово | Присвоение таблице значение двойного слова |
Двойное слово := Таблица | Присвоение двойному слову значения таблицы |
COPY_BIT | Копирование содержимого одной битовой таблицы в другую |
AND_ARX | Операция И между содержимым двух таблиц |
OR_ARX | Операция ИЛИ между содержимым двух таблиц |
XOR_ARX | Операция ИСКЛЮЧАЮЩЕЕ ИЛИ между содержимым двух таблиц |
NOT_ARX | Инверсия содержимого таблицы |
BIT_W | Копирование содержимого битовой таблицы в таблицу слов |
BIT_D | Копирование содержимого битовой таблицы в таблицу двойных слов |
W_BIT | Копирование содержимого таблицы слов в битовую таблицу |
D_BIT | Копирование содержимого таблицы двойных слов в битовую таблицу |
Целочисленная арифметика над словами и двойными словами | |
+, –, *, / | Сложение, вычитание, умножение, целочисленное деление |
REM | Остаток от целочисленного деления |
SQRT | Целочисленный квадратный корень |
ABS | Абсолютное значение |
INC | Приращение на единицу |
DEC | Уменьшение на единицу |
Арифметика над числами с плавающей точкой | |
+, –, *, / | Сложение, вычитание, умножение, деление |
SQRT | Квадратный корень |
ABS | Абсолютное значение |
TRUNG | Целая часть |
LOG | Логарифм с 10-м основанием |
LN | Натуральный логарифм |
ЕХР | Натуральная экспонента |
ЕХРТ | Возведение действительного числа в целую степень |
COS | Значение косинуса в радианах |
SIN | Значение синуса в радианах |
TAN | Значение тангенса в радианах |
ACOS | Арккосинус (результат между 0 и 2p ) |
ASIN | Арксинус (результат между –p/2 и +p/2) |
ATAN | Арктангенс (результат между –p /2 и +p/2) |
DEG_TO_RAD | Преобразование градусов в радианы |
RAD_TO_DEG | Преобразование радиан в градусы |
Логические инструкции над словами и двойными словами | |
AND | Логическое И |
OR | Логическое ИЛИ |
XOR | Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ |
NOT | Логическое дополнение |
SHL | Логический сдвиг влево |
SHR | Логический сдвиг вправо |
ROL | Циклический логический сдвиг влево |
ROR | Циклический логический сдвиг вправо |
Инструкции для управления программой | |
HALT | Останов выполнения программы |
JUMP | Безусловный переход к метке |
SRi | Вызов подпрограммы |
RETURN | Возврат из подпрограммы |
MASKEVT | Маскирование событий в ПЛК |
UNMASKEVT | Снятие маскирования событий в ПЛК |
Инструкции числового преобразования | |
BCD_TO_INT | BCD код ® Двоичный код |
INT_TO_BCD | Двоичный код ® BCD код |
GRAY_TO_INT | Код Грея ® Двоичный код |
INT_TO_REAL | Целое число ® Число с плавающей точкой |
DINT_TO_REAL | Целое число ® Число с плавающей точкой |
REAL_TO_INT | Число с плавающей точкой ® Целое число |
REAL_TO_DINT | Число с плавающей точкой ® Целое число |
DBCD_TO_DINT | 32-х разрядный BCD код ® 32-разрядное целое число |
DINT_TO_DBCD | 32-х разрядное целое число ® 32-разрядный BCD код |
DBCD_TO_INT | 32-х разрядный BCD код ® 16-разрядное целое число |
INT_TO_DBCD | 16-разрядное целое число ® 32-х разрядный BCD код |
LW | Извлечение наименее значимого слова из двойного слова |
HW | Извлечение наиболее значимого слова из двойного слова |
CONCATW | Совмещение (конкатенация) двух одиночных слов |
MAX_ARW, MAX_ARD | Нахождение максимального значения в таблице |
MIN_ARW, MIN_ARD | Нахождение минимального значения в таблице |
OCCUR_ARW, OCCUR_ARD | Подсчет числа элементов таблицы с заданным значением |
SORT_ARW, SORT_ARD | Сортировка таблицы в порядке возрастания или убывания |
ROL_ARW, ROL_ARD | Циклический сдвиг в таблице влево |
ROR_ARW, ROR_ARD | Циклический сдвиг в таблице вправо |
FIND_EQWP, FIND_EQDP | Нахождение первого элемента равного заданному значению |
LENGTH_ARW, LENGTH_ARD | Вычисление длины таблицы |
Инструкции для таблиц из чисел с плавающей точкой | |
Таблица:=Таблица | Присвоение между таблицами |
Таблица:=Плавающяя точка | Начальное заполнение таблицы (инициализация) |
SUM_ARR | Сумма элементов в таблице |
EQUAL_ARR | Сравнение двух таблиц |
FIND_EQR | Нахождение первого элемента равного заданному значению |
FIND_GTR | Нахождение первого элемента со значением больше заданного |
FIND_LTR | Нахождение первого элемента со значением меньше заданного |
MAX_ARR | Нахождение максимального значения в таблице |
MIN_ARR | Нахождение минимального значения в таблице |
OCCUR_ARR | Подсчет числа элементов таблицы с заданным значением |
SORT_ARR | Сортировка таблицы в порядке возрастания или убывания |
ROL_ARR | Циклический сдвиг в таблице влево |
ROR_ARR | Циклический сдвиг в таблице вправо |
LENGTH_ARR | Вычисление длины таблицы |
Инструкции для последовательности символов | |
STRING_TO_INT | Преобразование из ASCII кода в двоичный код |
STRING_TO_DINT | Преобразование из ASCII кода в двоичный код |
INT_TO_STRING | Преобразование из двоичного кода в ASCII код |
DINT_TO_STRING | Преобразование из двоичного кода в ASCII код |
STRING_TO_REAL | Преобразование из ASCII кода в код с плавающей точкой |
REAL_TO_STRING | Преобразование из кода с плавающей точкой в ASCII код |
<, >, <=, >=, ==, < > | Алфавитно-цифровые сравнения |
FIND | Определение местоположения подпоследовательности |
EQUAL_STR | Позиция первого символа отличающегося от заданного |
LEN | Длина последовательности символов |
MID | Извлечение подпоследовательности |
INSERT | Внесение подпоследовательности |
DELETE | Удаление подпоследовательности |
CONCAT | Объединение двух последовательностей |
REPLACE | Перемещение последовательности |
LEFT | Определение начала последовательности |
RIGHT | Определение конца последовательности |
Инструкции для управления временем | |
SCHEDULE | Функция часов в реальном времени |
RRTC | Чтение системной даты |
WRTC | Обновление системной даты |
PTC | Чтение даты и кода останова |
ADD_TOD | Добавление временного периода ко времени дня |
ADD_DT | Добавление временного периода к дате и времени |
DELTA_TOD | Разность между двумя моментами времени дня |
DELTA_D | Разность между датами (без учета времени) |
DELTA_DT | Разность между датами (с учетом времени) |
SUB_TOD | Вычитание временного периода из времени дня |
SUB_DT | Вычитание временного периода из даты и времени дня |
DAY_OF_WEEK | Чтение текущего дня недели |
TRANS_TIME | Преобразование длительности в дату |
DATE_TO_STRING | Преобразование даты в последовательность символов |
TOD_TO_STRING | Преобразование времени в последовательность |
DT_TO_STRING | Преобразование полной даты в последовательность |
TIME_TO_STRING | Преобразование длительности в последовательность |
Особые инструкции | |
WSHL_RBIT, DSHL_RBIT | Сдвиг слова влево с сохранением сдвинутых битов |
WSHR_RBIT, DSHR_RBIT | Сдвиг слова вправо со знаковым расширением и сохранением сдвинутых битов |
WSHRZ_С, DSHRZ_С | Сдвиг слова вправо с заполнением нулем и с сохранением сдвинутых битов |
SCOUNT | Увеличение или уменьшение счетчика с индикацией обнуления или переполнения |
ROLW, ROLD | Подсчет сдвигов влево |
RORW, RORD | Подсчет сдвигов вправо |
Инструкции для задержки времени | |
FTON | Включить задержку |
FTOF | Выключить задержку |
FTP | Импульсное время задержки |
FPULSOR | Квадратно-волновой сигнальный генератор |