Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование промышленных контроллеров. Учебное пособие

.pdf
Скачиваний:
2
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Продолжение табл. 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]