Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование промышленных контроллеров. Учебное пособие
.pdf
Продолжение табл. 3.2
1 2 3
4
5
В примере D = 1, если
A = 1 или B = 1. Если A и
B имеют одинаковое состояние (оба равны 0 или
1), D = 0. Если связывается более двух операндов,
результат для нечетного
числа единичных состояний равен 1, для четного
числа единичных состояний он равен 0.
Пример:
LD A
XOR B
XOR C
XOR D
XOR E
ST F
В примере F = 1, если
B = 1 или D = 1. F = 0,
если A = 1 или C = 1, или
E = 1
NOT
–
Логическое отрицание
Содержимое
аккумулятора типов
данных
BOOL,
BYTE,
WORD или
DWORD
Содержимое аккумулятора инвертируется NOT.
Пример:
LD A
NOT
ST B
В примере B = 1, если
A = 0 и B = 0, если A = 1
ADD
(
Сложение
Литерал,
переменная,
прямой адрес
данных типа
INT, DINT,
UINT,
UDINT,
REAL или
TIME
При помощи ADD значение
операнда прибавляется к
значению аккумулятора.
Пример:
LD A
ADD B
ADD C
ST D
Пример соответствует
формуле
D = A + B + С
41

Продолжение табл. 3.2
1 2 3
4
5
SUB
(
Вычитание
Литерал,
переменная,
прямой адрес
данных типа
INT, DINT,
UINT,
UDINT,
REAL или
TIME
При помощи SUB значение операнда вычитается
из содержимого аккумулятора.
Пример:
LD A
SUB B
SUB C
ST D
Пример соответствует
формуле
D = A – B – C
MUL
(
Умножение
Литерал,
переменная,
прямой адрес
данных типа
INT, DINT,
UINT,
UDINT,
REAL или
TIME
При помощи MUL содержимое аккумулятора
умножается на значение
оператора.
Пример:
LD A
MUL B
MUL C
ST D
Пример соответствует
формуле
D = A ∙ B ∙ C
DIV
(
Деление
Литерал,
переменная,
прямой адрес
данных типа
INT, DINT,
UINT,
UDINT,
REAL или
TIME
При помощи DIV содержимое аккумулятора делится на значение операнда.
Пример:
LD A
DIV B
DIV C
ST D
Пример соответствует
формуле
D = A ꞉ B ꞉ C
42

Продолжение табл. 3.2
1 2 3
4
5
MOD
(
Деление
по модулю
Литерал,
переменная,
прямой адрес
данных типа
INT, DINT,
UINT, UDINT,
REAL или
TIME
Для MOD значение первого операнда делится
на значение второго операнда, и остаток от деления (модуль) возвращается как результат.
Пример:
LD A
MOD B
ST C
В примере C = 1, если
A = 7 и B = 2
C = 1, если A = 7 и
B = –2
C = –1, если A = –7 и
B = 2
C = –1, если A = –7 и
B = –2
GT ( Сравнение: >
Литерал,
переменная,
прямой адрес
данных типа
BOOL, BYTE,
WORD,
DWORD,
STRING, INT,
DINT, UINT,
UDINT, REAL,
TIME, DATE,
DT или TOD
При помощи GT содержимое аккумулятора
сравнивается с содержимым операнда. Если
содержимое аккумулятора больше, чем содержимое операнда,
результат – логическая
1. Если содержимое аккумулятора меньше или
равно содержимому
операнда, результат –
логический 0.
Пример:
LD A
GT 10
ST D
В примере значение
D = 1, если A больше 10,
иначе значение D = 0
43

Продолжение табл. 3.2
1 2 3
4
5
GE ( Сравнение: ≥
Литерал,
переменная,
прямой адрес
данных типа
BOOL, BYTE,
WORD,
DWORD,
STRING, INT,
DINT, UINT,
UDINT, REAL,
TIME, DATE,
DT или TOD
При помощи GE содержимое аккумулятора
сравнивается с содержимым операнда. Если
содержимое аккумулятора больше или равно
содержимому операнда,
результат – логическая
1. Если содержимое аккумулятора меньше содержимого операнда,
результат – логический
0.
Пример:
LD A
GE 10
ST D
В примере значение
D = 1, если A больше
или равно 10, иначе значение D = 0
EQ ( Сравнение: =
Литерал,
переменная,
прямой адрес
данных типа
BOOL, BYTE,
WORD,
DWORD,
STRING, INT,
DINT, UINT,
UDINT, REAL,
TIME, DATE,
DT или TOD
При помощи EQ содержимое аккумулятора
сравнивается с содержимым операнда. Если
содержимое аккумулятора равно содержимому операнда, результат – логическая 1. Если
содержимое аккумулятора не равно содержимому операнда, результат – логический 0.
Пример:
LD A
EQ 10
ST D
В примере значение
D = 1, если A = 10, иначе
значение D = 0
44

Продолжение табл. 3.2
1 2 3
4
5
NE ( Сравнение: <>
Литерал,
переменная,
прямой адрес
данных типа
BOOL, BYTE,
WORD,
DWORD,
STRING, INT,
DINT, UINT,
UDINT, REAL,
TIME, DATE,
DT или TOD
При помощи NE содержимое аккумулятора
сравнивается с содержимым операнда. Если
содержимое аккумулятора не равно содержимому операнда, результат – логическая 1.
Если содержимое аккумулятора равно содержимому операнда, результат – логический 0.
Пример:
LD A
NE 10
ST D
В примере значение
D = 1, если A не равно
10, иначе значение D = 0
LE ( Сравнение: ≤
Литерал,
переменная,
прямой адрес
данных типа
BOOL, BYTE,
WORD,
DWORD,
STRING, INT,
DINT, UINT,
UDINT, REAL,
TIME, DATE,
DT или TOD
При помощи LE содержимое аккумулятора
сравнивается с содержимым операнда. Если содержимое аккумулятора
меньше или равно содержимому операнда,
результат – логическая 1.
Если содержимое аккумулятора больше содержимого операнда, результат – логический 0.
Пример:
LD A
LE 10
ST D
В примере значение
D = 1, если A меньше
или равно 10, иначе значение D = 0
45

Продолжение табл. 3.2
1 2 3
4
5
LT ( Сравнение: <
Литерал,
переменная,
прямой адрес
данных типа
BOOL, BYTE,
WORD,
DWORD,
STRING, INT,
DINT, UINT,
UDINT, REAL,
TIME, DATE,
DT или TOD
При помощи LT содержимое аккумулятора
сравнивается с содержимым операнда. Если
содержимое аккумулятора меньше, чем содержимое операнда, результат – логическая 1.
Если содержимое аккумулятора больше или
равно содержимому
операнда, результат –
логический 0.
Пример:
LD A
LT 10
ST D
В примере значение
D = 1, если A меньше 10,
иначе значение D = 0
CAL
C, CN
(только
если содержимое аккумулятора
BOOL типа
данных)
Вызов
функционального
блока,
DFB или
подпрограммы
Имя экземпляра функционального
блока, DFB
или подпрограммы
Функциональный блок,
DFB или подпрограмма
вызывается в ограниченном или неограниченном виде CAL
FUNCT
IONSN
AME
–
Выполнение функции
Литерал,
переменная,
прямой адрес
(тип данных
зависит от
функции)
Функция выполняется
по имени функции
JMP
C, CN
(только
если содержимое аккумулятора
BOOL типа
данных)
Прыжок к
метке
TAG
При помощи JMP прыжок к метке может быть
ограниченным и неограниченным
46

Окончание табл. 3.2
1 2 3
4
5
RET
C, CN
(только
если содержимое
аккумулятора BOOL
типов данных)
Возврат к
следующей более высокой организационной
единице
программы
–
Каждая подпрограмма и
каждый DFB (производный функциональный
блок) покидается после
выполнения, т. е. происходит возврат к основной
вызывающей программе.
Если подпрограмма/DFB
покидается преждевременно, возврат к основной
программе может форсироваться, используя
RET (возврат).
RET может использоваться только в подпрограммах или DFB. Они не
могут использоваться в
основной программе
–
Редактирование
отложенных операций
–
При помощи закрывающей скобки ) начинается
выполнение восстановленного оператора. Количество закрывающих и
открывающих скобок
должно быть одинаковым.
Скобки могут быть вложенными.
Пример:
LD A
AND B
AND( C
OR D
)
ST E
В примере E = 1, если
C = 1 и/или D = 1 и A = 1
и B = 1
47

3.3.2. Метки
Инструкции может предшествовать метка с двоеточием «:».
Метка может быть помещена на пустую строку. Метки используются
в качестве операндов для некоторых операций, таких как прыжки.
Также при использовании меток должны соблюдаться следующие
правила:
1) метки всегда должны быть первыми элементами в строке;
2) имя должно быть свободным в пределах директории и не яв-
ляется чувствительным к регистру;
3) метки должны соответствовать IEC-соглашениям об имено-
вании;
4) метки разрешены только в начале «выражений», иначе в ак-
кумуляторе может быть обнаружено неопределенное значение.
В одной программе одно и то же имя не может быть использовано для обозначения более чем одной метки. Имя метки может совпадать с именем переменной. Метки служат целями для прыжков:
START: LD A
AND B
OR C
ST D
JMP start
3.3.3. Модификаторы
Символ модификатора должен завершать имя оператора без
пробелов между ними. Ниже представлены возможные модификаторы
оператора:
1) N – булево отрицание операнда;
2) ( – задержанная операция;
3) С – условная операция.
Модификатор N определяет булево отрицание операнда.
Например, инструкция ORN IX12 интерпретируется как
result := result OR NOT (IX12)
Модификатор ( указывает на то, что выполнение инструкции
должно быть задержано. Это обусловлено тем, что существует только
48

один регистр-аккумулятор, поэтому для изменения порядка выполне-
Вход
Выход
Заданные по умол-
чанию типы данных
Возможные типы
данных
%IХ
%QX
BOOL
BOOL
%I
%Q
%IB
%QB
BYTE
BYTE
%IW
%QW
INT
INT, UINT, WORD
%ID
%QD
REAL
REAL, DINT, UDINT, TIME
ния команд некоторые операции потребуется отложить. Для этого используются две вариации модификатора:
1) ( – указывает операцию, которая должна быть задержана;
2) ) – выполняет задержанную операцию.
Модификатор C указывает на то, что соответствующая инструкция должна быть выполнена, только если текущий результат имеет
значение TRUE. Модификатор C может комбинироваться с модификатором N, который указывает на то, что инструкция должна быть выполнена, если только текущий результат имеет значение FALSE.
3.4. Язык ST
Язык структурированного текста – это текстовый язык высокого
уровня с инструкциями и синтаксисом уровня адаптированного языка
Паскаль. Язык ST позволяет программировать сложные алгоритмы обработки данных – последовательности команд с использованием: переменных, вызовов функций и функциональных блоков, операторов повторения и т. д. Также этот язык подходит для описания действий внутри шагов и условий языка SFC, но в основном используется в тех случаях, когда алгоритм трудно описать с помощью графических языков.
Логика функциональных блоков создается в C++ и не может
быть изменена в ST-редакторе.
3.4.1. Выражение
Основой ST-программы служат выражения, которые состоят из
операндов (констант и переменных) и операторов. Операндом являются литерал, переменная, обращение к функции, прямой адрес. Типы
данных прямых адресов представлены в табл. 3.3.
Таблица 3.3
49

Операторы являются командами языка программирования ST.
Они должны заканчиваться точкой с запятой «;». Одна строка может
содержать несколько операторов, отделяемых точками с запятой. Результат вычисления выражения присваивается переменной при помощи оператора присваивания «:=».
Имена, используемые в исходном коде (идентификаторы переменных, константы, ключевые слова), разделены неактивными разделителями или активными разделителями, которые имеют заранее
определенное значение. Например, символ-разделитель «>» означает
сравнение больше чем, а символ «+» – операцию сложения и т. д.
К неактивным разделителям относят пробелы, символы окончания
строки и табуляции. Неактивные разделители могут быть свободно
введены между активными разделителями, константами и идентификаторами. Для улучшения читаемости программ нужно использовать
неактивные разделители в соответствии со следующими правилами:
1) не более одного оператора в строке;
2) табуляцию для сдвига сложных операторов;
3) комментарии.
Основными выражениями (инструкциями) языка ST являются [14]:
1) битовые инструкции;
2) арифметические и логические инструкции для слов и двой-
ных слов;
3) арифметические инструкции для чисел с плавающей точкой;
4) инструкции числового сравнения слов, двойных слов и чисел
с плавающей точкой;
5) числовые преобразования;
6) инструкции для таблиц, заполненных битами, словами,
двойными словами и числами с плавающей точкой;
7) инструкции для строк из символов;
8) инструкции для алфавитно-цифрового сравнения;
9) инструкции для управления временем;
10) инструкции для управления программой (программные ин-
струкции);
11) инструкции для управления ходом выполнения программы
(управляющие инструкции);
12) инструкции для стандартных функциональных типов;
13) инструкции предметной области (связь, ПИД-регулирова-
ние и т. д.).
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
