logo search
Всё по МСА доц

3.5. Язык структурированного текста

Язык структурированного текста (StructuredTextST) относится к классу текстовых языков высокого уровня. Этот язык подобен таким языкам программирования, какPascalиС. На его основе можно создавать гибкие процедуры обработки данных. Язык структурированного текста является основным для описания шагов и транзакций языкаSFC. Кроме этого, он имеет «выходы» во все остальные языки, что делает его универсальным в применении.

Язык STиспользуется для создания программ путем записи строк, состоящих из алфавитно-цифровых символов. Фраза составляется из основных элементов языкаST. Пример:

! %L2: (* Вот предложение с меткой, комментариями *)

SET %M0; %MW4 := %MW2 + %MW9;

(* и различными инструкциями *)

%MF12 :=SQRT(%MF14);

Основные инструкции языка ST:

Язык содержит четыре управляющие структуры:

Каждая управляющая структура обрамляется ключевыми словами, она начинается и заканчивается в данном выражении. Допускается вложение управляющих структур независимо от их типа. Управляющие структуры могут предшествовать или следовать за любой инструкцией.

Программы на языке STсоставляются из выражений. Каждое выражение языка состоит из метки, комментариев и инструкций. Каждый из этих элементов может отсутствовать, таким образом, возможно пустое выражение, т.е. состоящее только из комментариев, либо состоящее из единственной метки. Каждое выражение начинается с восклицательного знака, который обычно вводится автоматически. Выражение на языкеSTможет содержать несколько инструкций, при этом каждая инструкция должна заканчиваться символом «точка с запятой». Фрагмент программы на языкеSTпоказан ниже.

! %L95:

IF%I3.3AND%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 и 2)

ASIN

Арксинус (результат между –/2 и +/2)

ATAN

Арктангенс (результат между –/2 и +/2)

DEG_TO_RAD

Преобразование градусов в радианы

RAD_TO_DEG

Преобразование радиан в градусы

Логические инструкции над словами и двойными словами

AND

Логическое И

OR

Логическое ИЛИ

XOR

Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ

NOT

Логическое дополнение

SHL

Логический сдвиг влево

SHR

Логический сдвиг вправо

ROL

Циклический логический сдвиг влево

ROR

Циклический логический сдвиг вправо

Инструкции для управления программой

HALT

Останов выполнения программы

JAMP

Безусловный переход к метке

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

Квадратно-волновой сигнальный генератор