Загрузил Maxim Labyntsew

Краткий справочник по STL

реклама
SIEMENS
Промышленные контроллеры SIMATIC S7-300/400
Описание_системы_команд
Содержание
S7-300/400 Система команд















Описание
Вступительное_слово
Работа_с_аккумулятором
Команды_битовой_логики
Команды_сравнения
Команды_преобразования
Счетчики
Команды_для_работы_с_блоками_данных
Команды_переходов
Команды_загрузки_и_передачи
Математика_с_плавающей_точкой
Целочисленная_математика
Команды_программного_контроля
Команды_сдвигов
Таймеры
Логика_для_WORD_и_DWORD
Начало
3
Стр.
4
10
13
22
25
33
37
39
44
49
53
61
66
72
77
S7-300/400 Система команд
Описание
Вступительное_слово
Содержание
Система команд – это тот инструмент, с помощью которого
пользователь пишет программу для контроллера. Собственно, речь идет
о модуле CPU, который является центральным устройством любого
контроллера. Размещенная в энергонезависимой памяти операционная
система реального времени дополняет систему команд, предоставляя
пользователю множество сервисных функций.
Общее правило состоит в том, что чем старше модель CPU, тем
она более производительная, тем больше у нее возможностей.
Рассмотрим области, в которых могут находиться операнды:
• Отображаемые области цифровых входов I и выходов Q
(немецкие сокращения E и A соответственно). Программа
пользователя
не
обращается
непосредственно
к
входам/выходам, обращение идет в память, в область
отображения.
• Область неотображаемых входов PI и выходов PQ (немецкие
сокращения PE и PA соответственно). Программа пользователя
обращается непосредственно к этим входам/выходам.
Модули цифровых входов/выходов располагаются в адресном
пространстве ввода/вывода, начиная с нулевого адреса, и попадают в
область отображения. Модули аналоговых сигналов располагаются
сразу за отображаемой областью (начало неотображаемой области
адресного пространства ввода/вывода, типичным значением является
начальный адрес 256)
• Область локального стека L.
Размер этой области зависит от максимально возможного числа
одновременных1 событий. Старшие модели CPU реагируют на большее
число событий, также как и число одновременно обрабатываемых
событий у них больше. Суть состоит в том, что для каждой модели CPU в
любой момент времени не может возникнуть одновременных событий
больше, чем Х (например, для S7-312 IFM Х=2, причем общее число
обрабатываемых событий равно 3). С каждым событием жестко связан
конкретный организационный блок, то есть ОВ является обработчиком
события. Если событие возникло, и пользователь на этапе
программирования создал соответствующий ОВ, то
возможно
управление будет передано этому ОВ. Это произойдет, если приоритет
текущего ОВ ниже приоритета вызываемого ОВ.
Содержание
1
Под выражением “Одновременные события” понимается ситуация, когда в процессе
обработки предыдущего события формируется новое, более приоритетное событие, и
т.д. То есть, образуется цепочка вложенных обработчиков событий.
4
S7-300/400 Система команд
Описание
Вступительное_слово
Содержание
Как только ОВ получит управление, он считается активным до того
момента, пока не завершится. Каждый активный ОВ имеет свой
локальный стек в области локального стека. В этом стеке хранятся
временные переменные, как самого ОВ, так и все фактические
параметры, локальные переменные функций и функциональных блоков,
вызываемых из данного ОВ. Для примера, снова вернемся к модели CPU
S7-312 IFM, область локального стека имеет размер 512 байт, что
позволяет одновременно открыть только два ОВ, по 256 байт на блок.
• Область меркеров М используется для хранения рабочих
параметров, промежуточных результатов, каких-либо флагов и
так далее. Если операционная система контроллера
обслуживает
Ваш
запрос
(например,
Вы
вызвали
функциональный системный блок), то следует учитывать, что
SFB или SFC могут использовать область меркеров для работы
со своими переменными. Обычно SFB и SFC используют
старшие адреса, поэтому пользователю рекомендуется
использовать память меркеров, начиная с младших адресов.
• Глобальные блоки данных DB
• Локальные блоки данных DI
• Таймеры Т и счетчики С (немецкое обозначение Z)
• Регистры процессора
Операнды могут принадлежать одному из множества допустимых
типов:
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
BOOL
BYTE
CHAR – символьный тип, например “А”, длина 1 байт
WORD
DWORD
INT – целое число со знаком, длина 1 слово (Integer)
DINT – длинное целое число со знаком, длина 2 слова (Long
Integer)
REAL – число с плавающей точкой, формат представления
IEEE, длина 2 слова
TIME – текущее время, длина 2 слова
TIME_OF_DAY – время дня, длина 2 слова
S5TIME – совместимость с серией S5, длина 1 слово
DATE – дата, длина 1 слово
DATE_AND_TIME – сложный тип данных, длина 4 слова
ARRAY – сложный тип данных, массив
STRING – сложный тип данных, строка
UNDEF – неопределенный тип
Содержание
5
S7-300/400 Система команд
Описание
Вступительное_слово
Содержание
TIME
Интервал
[-24d20h31m23s647ms … +24d20h31m23s647ms]
Формат соответствует DINT, единица измерения 1 ms
Пример:
T#5h10s
Рассмотрим еще один пример:
T#24d59s999ms → 7B99 8A5F h
T# -24s
→ FFFF A240 h
Небольшое отступление.
Как получить -24 [s]? Ответ:
24 [s] = 5DC0 h [ms] = 00000000 00000000 01011101 11000000 [ms]
Теперь вычитаем 1 и инвертируем, в результате получится:
11111111 11111111 10100010 01000000 = FFFF A240 h. То есть
получили -24 [s].
Естественно, обратное преобразование (инвертируем, затем
прибавляем 1)
позволяет из отрицательного числа получить
положительное.
TIME_OF_DAY
Интервал
[00:00:00.000 … 23:59:59.999]
Формат соответствует DWORD, единица
значение 00:00:00.000 – полночь.
Пример:
TOD#00:18:25.207
TOD#07:10:02
Миллисекунды указывать необязательно.
измерения
1
ms,
S5TIME – Совместимость_с_серией_S5, длина 1 слово
Интервал
[0 ms … 2h46m30s]
Пример:
S5T#10ms
S5T#1h15m20s
Рассмотрим более подробно используемый формат:
Напомним общее правило. Адресация слова, двойного слова
осуществляется по адресу старшего байта (более значащие разряды),
так как он располагается в памяти по младшему адресу.
Биты 15, 14 не используются
Биты 13, 12 определяют базис времени:
В
этом
случае
рабочий
Бит 13 Бит 12
Базис времени
диапазон составляет
0
0
0.01 s
[10ms … 9s990ms]
0
1
0.1 s
[100ms … 1m39s900ms]
1
0
1s
[1s … 16m39s]
1
1
10 s
[10s … 2h46m30s]
Содержание
6
S7-300/400 Система команд
Описание
Вступительное_слово
Содержание
Биты 11, 10, 9, 8 – старшая BCD цифра, определяет число сотен
Биты 7, 6, 5, 4 – средняя BCD цифра, определяет число десятков
Биты 3, 2, 1, 0 – младшая BCD цифра, определяет число единиц
Эти три BCD цифры определяют значение коэффициента в
диапазоне [0 … 999]. Зная значения базиса и коэффициента, можно
рассчитать заданное время:
ВРЕМЯ := Коэффициент * Базис ;
DATE
Интервал
[1990-01-01 … 2168-12-31]
Формат соответствует WORD, единица измерения 1 день, нулевое
значение соответствует дате 1990-01-01.
Пример:
D#1998-11-23
DATE_AND_TIME
Интервал
[1990-01-01/00:00:00.000 … 2089-12-31/23:59:59.999]
Пример:
DT#1996-09-15-19:54:15.228
Для записи данных такого типа используются 8 байтов,
содержимое представляется в BCD формате. Как Вы помните, старший
байт располагается в памяти по младшему адресу.
Значащи Условный Адрес
е
адрес
байта в Назнач Диапазон значений
разряды байта
заголовк ение
е ОВ1
Ст. байт
0
12
Год
[00 … 99], значение 00
соответствует 1990
1
13
Мес
[01 … 12]
2
14
День
[01 … 31]
3
15
Час
[00 … 23]
4
16
Мин
[00 … 59]
5
17
Сек
[00 … 59]
6
18
ms
В данном байте находятся 2
старшие ms, определяя
сотни и десятки [00x … 99x]
Мл. байт
7
19
ms
Старшая тетрада задает
единицы ms [0 … 9]
Младшая тетрада содержит
день недели [1 … 7],
значение 1 соответствует
Sunday (Воскресенье)
Относительно столбца “Адрес байта в заголовке ОВ1” хотелось бы
сделать некоторые пояснения.
Содержание
7
S7-300/400 Система команд
Описание
Вступительное_слово
Содержание
Как Вы знаете, каждый активный ОВ имеет стек в области
локального стека. В момент вызова ОВ, в его стек автоматически
записывается заголовок. Среди прочей информации, в заголовке
присутствуют дата и время запуска ОВ. Эти дата и время размещены по
приведенным в таблице адресам.
Наряду
с
переменными,
в
качестве
операнда
могут
использоваться константы:
№
Константа
Пример
1 Константой является
L
‘ABC’
группа символов в ASCII
коде
2 2 или 4 байта
L
B#(100,12)
L
B#(50,8,3,72)
3 BYTE,
WORD
или L
B#16#F7
DWORD, представленные L
W#16#12
в 16-ричной системе
L
DW#16#EECD03E1
4 WORD
или
DWORD, L
2#1000111101010011
представленные
в
2- L 2#11110000111100001010101011101110
ичной системе
5 Константа типа INT
L
-27
6 Константа типа DINT
L
L#19346458
7 Константа типа REAL
L
-8014.01
8 Константа типа TIME
L
T#500ms
L
T#1d5h3m21s2ms
9 Константа типа TIME OF
L
TOD#12:31:05.314
DAY
10 Константа типа S5TIME
L
S5T#10ms
11 Константа типа DATE
L
D#1996-05-22
12 Указатель на адрес
Формат константы соответствует формату адресного регистра, что дает
возможность указать не только адрес, но и область, в которой должен
находиться операнд.
L
P#22.1 //Не указывая конкретно в какой области должен
//находиться операнд, сообщается, что этим операндом будет бит,
//расположенный по адресу 22.1
L
P#Q22.1
//В отличие от предыдущего примера, в данном
//случае дополнительно сообщается, что операнд будет именно из
//области выходов
Содержание
8
S7-300/400 Система команд
Описание
Вступительное_слово
Содержание
Замечание относительно использования указателя. Если
указатель должен указывать на байт, слово или двойное слово, то
необходимо задавать адрес байта и номер бита, причем номер бита
должен быть равен 0 (L P#124.0). Данное требование обусловлено
специфичным форматом адресных регистров.
Приведем несколько примеров адресации:
AN I3.7
//Адресуется входной бит
L
MB4
//Загружается в ACCU1 меркерный байт
T
QW0
//Передается слово на выход
L
PIW258
//Читаем аналоговое значение
OPN DB3
//Открываем блок данных
L
DB3.DBB14 //Читаем 14 байт в этом блоке
L
DB3.DBX0.5 //Там же читаем 5-тый бит из нулевого байта
Общий формат команды при использовании косвенной адресации:
<команда> YX [адресный регистр, указатель], где Y определяет
область нахождения операнда (и его указывать не обязательно), X
задает размер операнда (B – байт, W – слово, D – двойное слово).
Приведем пример:
L
B [AR1, P#8.0]
Данная команда загружает байт в ACCU1. Адрес этого байта
представляет собой сумму адресов: адресный регистр AR1 и адрес 8.0.
Область, в которой должен находиться операнд, определяется
адресным
регистром.
Например,
адресный
регистр
можно
проинициализировать двумя командами:
L
P#Q116.0
LAR1 //Таким образом, AR1 будет указывать на область выходов
Еще один пример косвенной адресации:
L
MB [AR2, P#12.0]
Второй пример отличается от первого тем, что явно задана
область нахождения операнда (байт из области меркеров)
Выше были рассмотрены примеры абсолютной адресации. STEP7
дает пользователю возможность работать с именами. Такая адресация
носит название символьной.
В заключение отметим, что SIEMENS постоянно совершенствует
свои изделия, поэтому при работе с этим документом следует учитывать
фактор
старения
информации.
Обращайтесь
за
актуальной
информацией к официальным партнерам фирмы SIEMENS, либо
непосредственно в SIEMENS.
Как в процессе подготовки, так и после завершения работы над
документом, мы проверяли его на отсутствие ошибок, неточностей и
опечаток. Однако мы не гарантируем полное их отсутствие. Поэтому, во
всех неясных случаях советуем обращаться к оригиналу.
Содержание
9
S7-300/400 Система команд
Описание
Работа_с_аккумулятором
Содержание
Команды данной группы не зависят и не воздействуют на регистр
флагов:
 Декремент_Аккумулятора
 Инкремент_Аккумулятора
 Вталкивание_в_старшие_Аккумуляторы
 Выталкивание_из_старших_Аккумуляторов
 Загрузка_старших_Аккумуляторов
 Разгрузка_старших_Аккумуляторов
 Поменять_содержимое_Аккумуляторов
 Загрузка_первого_адресного_регистра
 Загрузка_второго_адресного_регистра
 Холостые_команды
Содержание
10
S7-300/400 Система команд
Описание
Работа_с_аккумулятором
Содержание
1. Декремент_Аккумулятора
Формат:
DEC <byte>
Описание. ACCU1_LL :=ACCU1_LL - <byte>
2. Инкремент_Аккумулятора
Формат:
INC <byte>
Описание. ACCU1_LL :=ACCU1_LL + <byte>
3. Вталкивание_в_старшие_Аккумуляторы
Формат:
PUSH
Описание. На всех моделях CPU имеется два Аккумулятора, а на
нескольких более производительных – четыре. Для случая двух
Аккумуляторов выполняется присваивание ACCU2 :=ACCU1. Для
четырех Аккумуляторов выполняются три присваивания ACCU4
:=ACCU3, ACCU3 :=ACCU2, ACCU2 :=ACCU1.
4. Выталкивание_из_старших_Аккумуляторов
Формат:
POP
Описание.
Действие
данной
команды
противоположно
предыдущей. В случае двух Аккумуляторов действие состоит в
присваивании ACCU1 :=ACCU2. Для
четырех Аккумуляторов
выполняются три присваивания ACCU1 :=ACCU2, ACCU2 :=ACCU3,
ACCU3 :=ACCU4.
5. Загрузка_старших_Аккумуляторов
Формат:
ENT
Описание. Данная команда работает только в том случае, если в
модуле процессора контроллера имеется четыре аккумулятора. Она
загружает старшие Аккумуляторы ACCU4 :=ACCU3, ACCU3 :=ACCU2,
ACCU2 и ACCU1 без изменения.
6. Разгрузка_старших_Аккумуляторов
Формат:
LEAVE
Описание. Данная команда работает только в том случае, если в
модуле процессора контроллера имеется четыре аккумулятора. Она
разгружает старшие Аккумуляторы ACCU2 :=ACCU3, ACCU3 :=ACCU4,
ACCU1 и ACCU4 без изменения.
7. Поменять_содержимое_Аккумуляторов
Формат:
TAK
Описание. Содержимое ACCU1 и ACCU2 меняется местами.
Содержание
11
S7-300/400 Система команд
Описание
Работа_с_аккумулятором
Содержание
8. Загрузка_первого_адресного_регистра
Формат:
+AR1, либо +AR1 P#byte.bit
Описание. Сначала рассмотрим команду +AR1. В этом случае
берется значение из ACCU1_L. CPU рассматривает его как целое число
со знаком в диапазоне от -32768 до +32767, т.е. integer. Выполняется
корректное преобразование этого числа в 24-ех битное смещение,
которое затем суммируется с содержимым AR1 (осуществляется
сложение адресов: адреса из адресного регистра AR1 и полученного
смещения). Результирующий адрес сохраняется в AR1.
В команде +AR1 P#byte.bit к содержимому AR1 добавляется
содержимое указателя. Таким образом, осуществляется сложение двух
адресов: адреса из адресного регистра AR1 и адреса, на который
указывает данный указатель. Результирующий адрес сохраняется в AR1.
Замечание. Расширение до 24-ех бит является следствием
специфичности формата адресного регистра.
9. Загрузка_второго_адресного_регистра
Формат:
+AR2, либо +AR2 P#byte.bit
Описание. Алгоритм работы данной команды
алгоритму работы предыдущей команды.
аналогичен
10. Холостые_команды
Описание. Существует три холостых команды:
• Холостая команда BLD <byte> с параметром от 0 до 255
• Холостая команда NOP 0, состоящая из одних нулей
• Холостая команда NOP 1, состоящая из одних единиц
Иногда они применяются для тестовых целей, иногда для
наглядности.
Содержание
12
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
 ИЛИ
 И_перед_ИЛИ
 ИЛИ_с_открывающей_скобкой
 ИЛИ_с_отрицанием
 ИЛИ_с_отрицанием_и_открывающей_скобкой
 И
 И с_открывающей_скобкой
 И с_отрицанием
 И с_отрицанием_и_открывающей_скобкой
 Исключающее_ИЛИ
 Исключающее_ИЛИ_с_открывающей_скобкой
 Исключающее_ИЛИ_с_отрицанием
 Исключающее_ИЛИ_с_отрицанием_и открывающей скобкой
 Закрывающая_скобка
 Запись_результата
 Сбросить_RLO
 Установить_RLO
 Инвертировать_RLO
 Сохранить_RLO_в_BR
 Установить_адресуемый_бит
 Сбросить_адресуемый_бит
 Зафиксировать_положительный_фронт
 Зафиксировать_отрицательный_фронт
Содержание
13
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
1. ИЛИ
O
I 1.7
O
M 0.1
=
Q 124.3
// Или входной бит 1.7 ,
// или бит 0.1 из области меркерной памяти
// Результат записать в выходной бит 124.3
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
0
Х
Х
1
Команда может адресовать бит из следующих областей: I, Q, M, L,
блоки данных, T и C .
2. И_перед_ИЛИ
A
"button_1"
// Здесь применяется символическая
AN "button_2"
// адресация
O
A
"motor_N9"
A
"motor_N23"
=
"pump_N4_Off"
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
0
STA
Х
RLO
-
/FC
1
3. ИЛИ_с_открывающей_скобкой
O(
A
I 1.0
A
I 1.1
)
O
M 24.0
ON M 24.1
=
M 1.0
Содержание
14
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
Зависит от
Воздействует на
BR
*
-
CC1
-
CC0
-
OV
-
OS
-
OR
*
0
STA
1
RLO
*
-
/FC
*
0
4. ИЛИ_с_отрицанием
ON I 124.0
ON I 124.1
=
Q 124.7
// Логическая единица будет записана в Q124.7
// в том случае, если хотя бы на одном из входов присутствует
// логический нуль
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
0
Х
Х
1
5. ИЛИ_с_отрицанием_и_открывающей_скобкой
ON(
// Выполнится функция логического 'И' над
A
I 0.7 // I 0.7 и I 0.6 , затем результат инвертируется
A
I 0.6 // и участвует в функции логического
)
// 'ИЛИ' с операндом M 12.1
O
M 12.1
= Q 22.1
BR CC1 CC0 OV
OS
OR STA RLO
Зависит от
*
*
*
Воздействует на
0
1
-
/FC
*
0
6. Логическое_И
A
I 124.1
A
I 124.7
= Q 124.1
BR
Зависит от
Воздействует на
-
/FC
*
1
CC1
-
CC0
-
OV
-
Содержание
15
OS
-
OR
*
Х
STA
Х
RLO
*
Х
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
7. И_с_открывающей_скобкой
A
ERROR_FLAG
A(
O
Activate_Check
O
LOGON_off
)
A
I 124.1
= START
Зависит от
Воздействует на
BR
*
-
CC1
-
CC0
-
OV
-
OS
-
OR
*
0
STA
-
RLO
*
1
/FC
*
0
8. И_с_отрицанием
AN OFF
// Выполняется функция логического 'И'
A
POWER_ON // над POWER_ON и инверсным значением OFF
= Q 124.1
// Результат записывается в Q 124.1
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
*
Воздействует на
Х
Х
Х
1
9. И_с_отрицанием_и_открывающей_скобкой
AN(
// Выполняется 'ИЛИ' над worker_1 и worker_2,
O
worker_1
// затем полученный результат инвертируется и
O
worker_2
// далее выполняется логическое ‘И’ над
)
// инвертированным результатом и операндом
A
main_worker // main_worker
=
Start_motor
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
*
*
Воздействует на
0
1
0
Содержание
16
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
10. Исключающее_ИЛИ
X
I 1.0
X
I 1.1
= Q 0.0
BR CC1
Зависит от
Воздействует на
-
CC0
-
OV
-
OR
0
STA
Х
RLO
*
Х
/FC
*
1
11. Исключающее_ИЛИ_с_открывающей_скобкой
X(
O
I 124.0
O
I 24.7
)
X
I 124.5
= Q 0.0
BR CC1 CC0 OV
OS
OR
Зависит от
*
*
Воздействует на
0
STA
1
RLO
*
-
/FC
*
1
12. Исключающее_ИЛИ_с_отрицанием
XN I 124.4
X
M 1.0
=
Q 124.3
BR CC1 CC0 OV
OS
Зависит от
Воздействует на
-
STA
Х
RLO
*
Х
/FC
*
1
13. Исключающее_ИЛИ_с_отрицанием_и отрывающей скобкой
XN(
A
I 124.7
A
"Turbo_box"
)
X
"Turbo_II"
=
"Result"
BR CC1 CC0 OV
OS
OR STA RLO
Зависит от
*
*
*
Воздействует на
0
1
-
/FC
*
0
Содержание
17
OS
-
OR
0
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
Итак, три основных логических команды в различных вариантах
применения представлены выше. Для них можно сделать следующие
обобщающие замечания:
1. Использование
скобок позволяет реализовать сложные
логические схемы (до 8-ми уровней вложенности)
2. Команды с отрицанием отличаются от команд без отрицания
только тем, что для участия в логической операции берется не
сам операнд, а его инверсное значение (аналогично,
инвертируется результат логической схемы, заключенной в
скобки)
14. Закрывающая_скобка
Формат: )
Описание. Закрывающей скобке должна предшествовать
открывающая скобка, для чего используется одна из следующих команд:
O(, ON(, A(, AN(, X( или XN( . Команды битовой логики, находящиеся
внутри этих скобок, выполняются "в едином ключе". Закрывающая скобка
восстанавливает значение битов BR и OR.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
Х
1
Х
1
Пример:
A(
O
I 124.0
O
M 12.3
)
A(
O
Q 124.5
O
M 12.4
)
A
I 124.1
=
M 1.7
15. Запись_результата
Формат: = <адресуемый бит>
Описание. Адресуемый бит может находиться в одной из
следующих областей: входы, выходы, локальный стек, меркеры, блок
данных. Данная команда зависит от MCR ресурса. Видимо, более
частым случаем является ситуация, когда MCR ресурсом не пользуются,
тогда в адресуемый бит записывается значение RLO. (Именно в бите
RLO содержится результат логической операции)
Содержание
18
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
Если же ресурс MCR в данный момент включен, то в адресуемый
бит будет записано текущее значение RLO только в том случае, если бит
MA = 1 (вершина стека MCR ресурса), иначе в адресуемый бит запишется
нуль.
BR
-
CC1
-
CC0
-
OV
-
Зависит от
Воздействует на
Пример:
A
I 0.1
A
I 124.0
=
M 2.7 // Выполняем присвоение
OS
-
OR
0
STA
Х
RLO
*
-
/FC
0
OS
-
OR
0
STA
0
RLO
0
/FC
0
OR
0
STA
1
RLO
1
/FC
0
OR
*
-
STA
1
RLO
*
Х
/FC
-
STA
-
RLO
*
-
/FC
-
16. Сбросить_RLO
Формат: CLR
Описание. Команда CLR сбрасывает бит RLO в '0'.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
17. Установить_RLO
Формат: SET
Описание. Команда SET устанавливает бит RLO в '1'.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
18. Инвертировать_RLO
Формат: NOT
Описание. Команда NOT инвертирует значение бита RLO.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
19. Сохранить_RLO_в_BR
Формат: SAVE
Описание. Команда SAVE сохраняет значение бита RLO в бите BR
Зависит от
Воздействует на
BR
Х
CC1
-
CC0
-
OV
-
Содержание
19
OS
-
OR
-
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
20. Установить_адресуемый_бит
Формат: S <бит>
Описание. Адресуемый бит может находиться в областях: I, Q, L,
M или в блоке данных. Команда S зависит от MCR ресурса. Когда ресурс
не используется, адресуемый бит будет установлен, если бит RLO = 1.
Пусть ресурс MCR включен. Тогда, если бит MA = 1 (вершина стека
ресурса MCR) и бит RLO = 1, то адресуемый бит будет установлен. Иначе значение адресуемого
бита не меняется.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
0
STA
Х
RLO
*
-
/FC
0
21. Сбросить_адресуемый_бит
Формат: R <бит>
Описание. Адресуемый бит может находиться в областях: I, Q, L,
M или в блоке данных. Команда R зависит от MCR ресурса. Когда MCR
ресурс не используется, адресуемый бит будет сброшен, если бит RLO =
1.
Пусть ресурс MCR включен. Тогда, если бит MA = 1 (вершина
стека ресурса MCR) и бит RLO = 1, то адресуемый бит будет сброшен.
Иначе значение адресуемого бита не меняется.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
Х
0
22. Зафиксировать_положительный_фронт
Формат: FP <бит>
Описание. Адресуемый бит может находиться в областях: I, Q, L,
M или в блоке данных. Команда FP позволяет обнаружить
положительный фронт.
.........
A
"Counter"
FP "Buffer"
=
"Positive_Front"
.........
Отслеживание
положительного
фронта
выполняется
по
отношению к Counter. Для обнаружения фронта команде FP требуется
вспомогательный бит Buffer. Когда переменная Counter изменит свое
логическое состояние с 0 на 1, команда FP зафиксирует положительный
фронт и установит бит RLO.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
Х
Х
1
Содержание
20
S7-300/400 Система команд
Описание
Команды_битовой_логики
Содержание
23. Зафиксировать_отрицательный_фронт
Формат: FN <бит>
Описание. Адресуемый бит может находиться в областях: I, Q, L,
M или в блоке данных. Команда FN используется для обнаружения
отрицательного фронта.
.........
A
"Counter"
FN "Buffer"
=
"Negative_Front"
.........
Отслеживание
отрицательного
фронта
выполняется
по
отношению к Counter. Для обнаружения фронта команде FN требуется
вспомогательный бит Buffer. Когда переменная Counter изменит свое
логическое состояние с 1 на 0, команда FN зафиксирует отрицательный
фронт и установит бит RLO.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
Х
Х
1
Относительно команд FP и FN следует сделать пояснение по
вспомогательному биту. Обе команды рассматривают этот бит как буфер
для хранения предыдущего логического состояния контролируемой
переменной. Буфер
достаточно проинициализировать один раз,
например в ОВ100, далее команды выполняют обновление буфера
автоматически.
Содержание
21
S7-300/400 Система команд
Описание
Команды_сравнения
Содержание
Команды сравнения представлены тремя подгруппами:
 Сравнение_длинных_целых_чисел_со_знаком
 Сравнение_целых_чисел_со_знаком
 Сравнение_вещественных_чисел
Содержание
22
S7-300/400 Система команд
Описание
Команды_сравнения
Содержание
1. Сравнение_длинных_целых_чисел_со_знаком
В эту группу входит шесть команд: ==D , <=D , <D , <>D , >=D , >D .
Формат: ==D , <=D , <D , <>D , >=D , >D
Описание. Данные команды сравнивают содержимое ACCU2 с
содержимым ACCU1. Содержимое ACCU2 и ACCU1 рассматривается,
как long integer 32 бита. Результат сравнения отражается в бите RLO и
битах CC1, CC0. У всех команд общий алгоритм работы. Пусть,
например, выполняется команда '<=D'. Процессор подставит значение
ACCU2 с левой стороны от знака сравнения, а значение ACCU1
подставит вместо 'D', то есть с правой стороны. Бит RLO будет
установлен, если результат сравнения истинен, иначе RLO = 0. Биты
CC1 и CC0 показывают отношение 'меньше', 'равно' или 'больше' (См.
Команды_переходов).
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
0
0
Х
Х
1
Следующая таблица показывает, какое значение будет записано в
бите RLO при различных исходных (1) и (2) условиях:
(2) А выполнялась
одна из инструкций:
(1) Пусть, имело место какое-то отношение
между ACCU2 и ACCU1:
ACCU2 > ACCU1
ACCU2=ACCU1
ACCU2 < ACCU1
'==D'
0
1
0
'≠D'
1
0
1
'>D'
1
0
0
'<D'
0
0
1
'>=D'
1
1
0
'<=D'
Пример:
L
MD 10
L
ID 24
>D
//
=
M 2.0
0
1
1
// Если ACCU2 ( MD 10 ) больше чем ACCU1 (ID 24 ),
то бит RLO будет установлен
// M 2.0 :=1 , если MD 10 > ID 24
2. Сравнение_целых_чисел_со_знаком (integer 16 бит)
В эту группу входит шесть команд: ==I , <=I , <I , <>I , >=I , >I .
Формат: ==I , <=I , <I , <>I , >=I , >I
Описание. См. описание предыдущей группы команд. Все то же
самое, за исключением того, что берутся ACCU1_L и ACCU2_L.
Содержание
23
S7-300/400 Система команд
Описание
Команды_сравнения
Оглавление
3. Сравнение_вещественных_чисел
В эту группу входит шесть команд: ==R , <=R , <R , <>R , >=R , >R .
Формат: ==R , <=R , <R , <>R , >=R , >R
Описание. Сравнивается содержимое ACCU1 и ACCU2. Значение
в Аккумуляторах рассматривается как вещественные числа с плавающей
точкой (32-bit IEEE floating point). Команды работают так же, как в
предыдущих подгруппах.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
0
Х
Х
1
Содержание
24
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
В данную группу входят 17 команд:
 from_BCD_to_Long_integer
 from_BCD_to_Integer
 from_Long_integer_to_BCD
 from_Integer_to_BCD
 from_Long_integer_to_Real
 Инвертирование_битов_двойного_слова
 Инвертирование_битов_слова
 from_Integer_to_Long_integer
 Смена_знака_для_Long_integer
 Смена_знака_для_Integer
 Смена_знака_для_Real
 Округление_до_ближайшего_целого
 Округление_до_большего_целого
 Округление_до_меньшего_целого
 Отбрасывание_дробной_части
 Обмен_байтами_в_двойном_слове
 Обмен_байтами_в_слове
Содержание
25
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
1. from_BCD_to_Long_integer
Формат: BTD
Описание. Содержимое ACCU1 рассматривается, как число в BCD
формате, оно преобразуется в Long integer и результат сохраняется в
ACCU1.
Значение в ACCU1 рассматривается как число в BCD формате:
31
30..28
27....0
знак
не используются
7 цифр BCD формата от -9.999.999 до
+9.999.999
Замечание. Если хотя бы одна цифра исходного числа (BCD
формат) оказалась принадлежащей недействительному диапазону (от 10
до 15), то контроллер распознает синхронную ошибку. По умолчанию
контроллер прекращает выполнение программы пользователя и переходит в состояние STOP.
Однако, если Вы запрограммируете OB121, то при возникновении такой ошибки управление
будет передано в OB121.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
2. from_BCD_to_Integer
Формат: BTI
Описание. Содержимое ACCU1_L рассматривается, как число в
BCD формате, оно преобразуется в Integer и результат сохраняется в
ACCU1_L. Значения ACCU1_H и ACCU2 не изменяются.
Значение в ACCU1_L рассматривается как число в BCD формате:
31....16
15
14..12
11...0
не используются
знак
не используются 3 цифры BCD формата
от -999 до +999
Замечание. Если хотя бы одна цифра исходного числа (BCD
формат) оказалась принадлежащей недействительному диапазону (от 10
до 15), то контроллер распознает синхронную ошибку. По умолчанию
контроллер прекращает выполнение пользовательской программы и
переходит в состояние STOP. Однако, если Вы запрограммируете OB121, то при
возникновении такой ошибки управление будет передано в OB121.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
Содержание
26
S7-300/400 Система команд
Описание
Команды_преобразования
Оглавление
3. from_Long_integer_to_BCD
Формат: DTB
Описание. Содержимое ACCU1 рассматривается как 32-ух битное
целое число со знаком Long integer. Оно преобразуется в BCD формат
(обратное действие к команде BTD), результат сохраняется в ACCU1.
Причем, в битах 0...27 прописываются BCD цифры, а в битах 28..31
прописывается знак '+'  0000 или '-'  1111. ACCU2 не изменяется.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Замечание. Так как BCD формат ограничен отрезком [-9.999.999 ..
+9.999.999], то если преобразуемое Long integer изначально не
находилось в этом отрезке, то будут установлены биты OV и OS в слове
состояния.
4. from_Integer_to_BCD
Формат: ITB
Описание. Содержимое ACCU1_L рассматривается как 16-ти
битное целое число со знаком Integer. Оно преобразуется в BCD формат
(обратное действие к команде BTI), результат сохраняется в ACCU1_L.
Причем, в битах 0...11 прописываются BCD цифры, а в битах 12..15
прописывается знак '+'  0000 или '-'  1111. ACCU1_H и ACCU2 не
изменяются.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Замечание. Так как BCD формат ограничен отрезком [-999 .. +999],
то если преобразуемое Integer изначально не находилось в этом отрезке,
то будут установлены биты OV и OS в слове состояния.
5. from_Long_integer_to_Real
Формат: DTR
Описание. Содержимое ACCU1 рассматривается как 32-ух битное
целое число со знаком Long integer. Оно преобразуется в 32-ух битное
вещественное число Real (число с плавающей точкой). Результат
сохраняется в ACCU1. ACCU2 не изменяется.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
На следующей странице приводится пример с подробными
пояснениями.
Содержание
27
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
Пример:
L
MD 10
DTR
T
MD 20
// Пусть, например, в MD10 было +500
// Преобразование
// Результат запишем в MD20
MD10 = 500
31
15
0
0000 0000 0000 0000 0000 0001 1111 0100
MD20 = 500.0
31
30… 23 22…
…
…0
0
10000111 111 1010 0000 0000 0000 0000
знак
порядок
23-ех битная мантисса
Число с плавающей точкой записывается в формате IEEE:
31
0
[...................] , где бит 31 - знак мантиссы. Биты 30...23 - значение
порядка, причем значимость битов следующая:
• бит 30 ≡ 128
• бит 29 ≡ 64
• .....
• бит 24 ≡ 2
• бит 23 ≡ 1
Биты 22…0 - значение мантиссы, причем значимость битов
следующая:
• бит 22 ≡ 2-1 (т.е. 0.5)
• бит 21 ≡ 2-2 (т.е. 0.25)
• бит 20 ≡ 2-3 (т.е. 0.125)
• .....
• бит 0 ≡ 2-27
Общая формула такая:
(знак) * (1.мантисса) * 2 порядок - 127
Итак, в данном примере мантисса получилась:
22
15
0
111 1010 0000 0000 0000 0000
Если Вы преобразуете ее, то получится 0.953125. Далее, после
преобразования порядка 10000111, получится 135.
Теперь возвращаемся к формуле:
(+1) * (1.953125) * 2 (135-127)
= 1.953125 * 2 8 = 500
Именно то, что и требовалось доказать.
Содержание
28
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
6. Инвертирование_битов_двойного_слова
Формат: INVD
Описание. Содержимое ACCU1 рассматривается как двойное
слово Double word. Каждый бит этого Double word инвертируется.
Результат сохраняется в ACCU1.
ACCU2 без изменений.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
7. Инвертирование_битов_слова
Формат: INVI
Описание. Содержимое ACCU1_L рассматривается как слово
Word. Каждый бит этого слова инвертируется. Результат сохраняется в
ACCU1_L.
ACCU2 и ACCU1_H без изменений.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
8. from_Integer_to_Long_integer
Формат: ITD
Описание. Содержимое ACCU1_L рассматривается как целое
число со знаком Integer, оно преобразуется в длинное целое со знаком
Long integer, то есть выполняется расширение знаковым битом.
ACCU2 не изменяется.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
9. Смена_знака_для_Long_integer
Формат: NEGD
Описание. Содержимое ACCU1 рассматривается как длинное
целое число со знаком Long integer, оно умножается на -1, то есть
выполняется смена знака, результат сохраняется в ACCU1.
В процессоре умножение на -1 реализуется путем инверсии и
прибавлением 1.
ACCU2 не изменяется.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
Содержание
29
OS
Х
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
Замечание. После выполнения команды результат будет сохранен
в ACCU1, ниже показана зависимость установки флагов от значения
результата.
CC1
CC0
OV
OS
результат =
0
0
0
0
-
- 2.147.483.648 ≤ результат ≤ -1
0
1
0
-
+1 ≤ результат ≤ + 2.147.483.647
1
0
0
-
Если же перед выполнением команды содержимое ACCU1 было
равно - 2.147.483.648, то после выполнения команды (казалось бы, что
результат будет +2.147.483.648) будут установлены флаги:
0
1
1
1
Т.е. имеет место переполнение
10. Смена_знака_для_Integer
Формат: NEGI
Описание. Содержимое ACCU1_L рассматривается как целое
число со знаком Integer, оно умножается на -1, то есть выполняется
смена знака, результат сохраняется в ACCU1_L.
ACCU2 и ACCU1_H без изменений.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
См. замечание для предыдущей команды с той разницей, что
нижняя граница теперь равна -32768 , а верхняя +32767.
11. Смена_знака_для_Real
Формат: NEGR
Описание. Содержимое ACCU1 рассматривается как число с
плавающей точкой, оно умножается на -1, результат сохраняется в
ACCU1.
ACCU2 не изменяется.
Зависит от
Воздействует на
Пример:
L
МD 2
NEGR
T
MD 2
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
// Пусть, например, МD2 = 1.5E+02
// Теперь MD2 = -1.5E+02
Содержание
30
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
12. Округление_до_ближайшего_целого
Формат: RND
Описание. Содержимое ACCU1 рассматривается как число с
плавающей точкой Real, оно преобразуется в Long integer путем
округления до ближайшего целого. Причем, если исходное число не
умещается в формате Long integer, то это рассматривается как ошибка, и
производится установка битов OV и OS. В том случае, если значение
исходного числа оказывается ровно по середине между двумя целыми
числами, то число округляется до четного числа.
ACCU2 не изменяется.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
13. Округление_до_большего_целого
Формат: RND+
Описание. Содержимое ACCU1 рассматривается как число с
плавающей точкой, оно преобразуется в Long integer путем округления
до ближайшего большего целого. Причем, если исходное число не
умещается в формате Long integer, то это рассматривается как ошибка, и
производится установка битов OV и OS.
ACCU2 не изменяется.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
14. Округление_до_меньшего_целого
Формат: RNDОписание. Содержимое ACCU1 рассматривается как число с
плавающей точкой, оно преобразуется в Long integer путем округления
до ближайшего меньшего целого. Причем, если исходное число не
умещается в формате Long integer, то это рассматривается как ошибка, и
производится установка битов OV и OS.
ACCU2 не изменяются.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
Х
Содержание
31
OS
Х
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Команды_преобразования
Содержание
15. Отбрасывание_дробной_части
Формат: TRUNC
Описание. Содержимое ACCU1 рассматривается как число с
плавающей точкой, оно преобразуется в Long integer путем
отбрасывания дробной части. Причем, если исходное число не
умещается в формате Long integer, то это рассматривается как ошибка, и
производится установка битов OV и OS.
ACCU2 не изменяется.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
16. Обмен_байтами_в_двойном_слове
Формат: CAD
Описание. Осуществляется обмен байтами в ACCU1 по
следующей схеме:
До выполнения команды
31
1
[____A___][____B___][____C___][____D___]
где A, B, C и D -значения соответствующих байтов ACCU1
После выполнения
31
1
[____D___][____C___][____B___][____A___]
ACCU2 не изменяется.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
RLO
-
/FC
-
17. Обмен_байтами_в_слове
Формат: CAW
Описание. Осуществляется обмен байтами в ACCU1_L.
ACCU2 и ACCU1_H не изменяются.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
Содержание
32
S7-300/400 Система команд
Описание
Счетчики
Содержание
Есть 7 команд для работы со счетчиками:
 Установить_начальное_значение_счетчика
 Сброс_счетчика
 Очистить_флаг_детектирования_фронта
 Подсчет_на_увеличение
 Подсчет_на_уменьшение
 Прочитать_текущее_значение_счетчика
 Прочитать_текущее_значение_счетчика_в BCD формате
Содержание
33
S7-300/400 Система команд
Описание
Счетчики
Содержание
1. Установить_начальное_значение_счетчика
Формат: S <счетчик>
Описание. Команда загружает из ACCU1_L стартовое значение в
указанный счетчик, если в бите RLO имел место переход от 0 к 1.
Значение в ACCU1_L должно быть в BCD формате и принадлежать отрезку [0…999].
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Пример:
A
I 2.3 // Входной бит I 2.3 выбран в качестве условия, по
// которому будет загружаться счетчик C1
L
C#350 // Начальное значение
S
C1
// Загрузить начальное значение в счетчик
Замечание.
Счетчики
создаются
программным
способом
операционной системой CPU (не путайте с Функциональными Счетными
Модулями). Число счетчиков зависит от модели CPU – на старших
моделях счетчиков больше.
2. Сброс_счетчика
Формат: R <счетчик>
Описание. Команда R <счетчик> сбрасывает текущее значение указанного счетчика в
нуль, если бит RLO=1.
BR CC1 CC0 OV
OS
OR
Зависит от
Воздействует на
0
Пример:
A
I 2.3 // Условие сброса
R
C3
// Сброс, если условие выполняется
STA
-
RLO
*
-
/FC
0
3. Очистить_флаг_детектирования_фронта
Формат: FR <счетчик>
Описание. Когда имеет место переход RLO от 0 к 1, команда FR
<счетчик> очищает флаг обнаружения фронта, который используется
для установки и счета адресуемого счетчика. Данная команда при
нормальной установке или нормальном счете не требуется. Она
применяется в тех случаях, когда необходимо загрузить, либо выполнить
счет без учета переходов от 0 к 1 в битах, которые отвечают за такое
управление (при условии, что эти биты находятся в состоянии 1).
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Содержание
34
S7-300/400 Система команд
Описание
Счетчики
Содержание
Пример:
A
I 2.0
FR
C3
//В бите I2.0 реализуется условие для
//выполнения команды FR
//Очистить флаг детектирования фронта для
//выбранного счетчика C3, если в бите I2.0 имеет
//место положительный фронт.
4. Подсчет_на_увеличение
Формат: CU <счетчик>
Описание. Команда CU <счетчик> увеличивает значение
выбранного счетчика на 1, если в RLO имеет место переход от 0 к 1 и
значение самого счетчика меньше 999. Когда значение счетчика
достигает верхнего предела 999, он останавливается. Дальнейшие
переходы в RLO не имеют никакого влияния, и флаг переполнения OV не
установлен.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Пример:
A
I 2.1
// В бите I2.1 реализуется условие для увеличения
// значения счетчика на 1. Если в этом бите имеет место переход от 0 к 1,
// то счетчик увеличивает свое значение. Естественно, бит RLO является
// посредником между битом I2.1 и счетчиком C3
CU C3
// Счетчик увеличивает свое значение на 1,
// если условие выполняется.
5. Подсчет_на_уменьшение
Формат: CD <счетчик>
Описание. Команда CD <счетчик> уменьшает значение
выбранного счетчика на 1, если в RLO имеет место переход от 0 к 1 и
значение самого счетчика больше нуля. Когда значение счетчика
достигает нижнего предела (т.е. нуля), он останавливается. Дальнейшие переходы в RLO
не имеют никакого влияния, и флаг переполнения OV не установлен.
Зависит от
Воздействует на
Пример:
L
9
A
I 0.1
S
C1
A
I 0.0
CD C1
AN C1
=
Q 0.0
BR
-
CC1
-
CC0
-
OV
-
OR
0
STA
-
RLO
*
-
// Начальное значение
// Если выполняется условие загрузки счетчика, то
// загрузить счетчик начальным значением
// Если выполняется условие декремента счетчика,
// то вычесть 1 из текущего значения
// Значение счетчика равно нулю ?
// Q0.0 = 1 , если значение счетчика - нуль
Содержание
35
OS
-
/FC
0
S7-300/400 Система команд
Описание
Счетчики
Содержание
6. Прочитать_текущее_значение_счетчика
Формат: L <счетчик>
Описание. Команда загружает текущее значение указанного
счетчика в двоичном формате (Integer) в ACCU1_L. Не забывайте, что
содержимое ACCU1 предварительно сохраняется в ACCU2.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Пример:
L
C3
// Загрузить в ACCU1_L значение счетчика в
// двоичном формате
7. Прочитать_текущее_значение_счетчика_в BCD формате
Формат: LC <счетчик>
Описание. Команда загружает текущее значение указанного
счетчика в двоично-десятичном формате (BCD) в ACCU1_L. Не
забывайте, что содержимое ACCU1 предварительно сохраняется в ACCU2.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Пример:
LC C3 // Загрузить в ACCU1_L значение счетчика
// в BCD формате
Содержание
36
S7-300/400 Система команд
Содержание
Описание
Команды_для_работы_с_блоками_данных
Шесть команд данной группы не зависят и не воздействуют на
регистр флагов. Эти команды дают пользователю возможность работать
с блоками данных:
 Обменять_содержимое_DB_и_DI
 Открыть_блок_данных
 Прочитать_длину_глобального_блока
 Прочитать_длину_связанного_блока
 Прочитать_номер_глобального_блока
 Прочитать_номер_связанного_блока
Содержание
37
S7-300/400 Система команд
Описание
Команды_для_работы_с_блоками_данных
Содержание
1. Обменять_содержимое_DB_и_DI
Формат: CDB
Описание. Меняет содержимое регистров DB и DI между собой.
2. Открыть_блок_данных
Формат: OPN <идентификатор блока данных>
Описание. Сделать открытым для работы указанный блок данных,
ранее открытый блок данных автоматически закрывается.
Пример:
OPN DB
10 // Открыть DB10 как глобальный блок данных
L
DBW 35 // 35-ое слово из глобального блока данных
T
MW 22
OPN DI
20
L
DIB 12 // 12-ый байт из связанного блока данных
T
DBB 37 // И передать его в 37-ой байт глобального DB
OPN DB
15 // Открыть DB15 как глобальный блок данных
// DB10 автоматически закрывается
L
DBB10
// Загрузить 10-ый байт из глобального DB15
3. Прочитать_длину_глобального_блока
Формат: LDBLG
Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в
ACCU1 загружается длина текущего глобального блока данных в байтах.
4. Прочитать_длину_связанного_блока
Формат: LDILG
Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в
ACCU1 загружается длина текущего связанного блока данных в байтах.
5. Прочитать_номер_глобального_блока
Формат: LDBNO
Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в
ACCU1 загружается номер текущего глобального блока данных.
6. Прочитать_номер_связанного_блока
Формат: LDINO
Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в
ACCU1 загружается номер текущего связанного блока данных.
Содержание
38
S7-300/400 Система команд
Описание
Команды_переходов
Содержание
18 команд, образующих данную группу, дают пользователю
полный набор инструментов для написания программ с условными
ветвлениями:
 Если_установлен_BR
 Если_сброшен_BR
 Сохранение_RLO_и_переход_при_установленном RLO
 Сохранение_RLO_и_переход_при_сброшенном RLO
 Если_установлен_RLO
 Если_сброшен_RLO
 Если_установлен_OV
 Если_установлен_OS
 Если_меньше_нуля
 Если_меньше_или_равно_нулю
 Если_равно_нулю
 Если_не_равно_нулю
 Если_больше_или_равно_нулю
 Если_больше_нуля
 Если_ошибка
 Безусловный_переход
 Организация_цикла
 Переход_по_значению_ACCU1
Содержание
39
S7-300/400 Система команд
Описание
Команды_переходов
Содержание
1. Если_установлен_BR
Формат: JBI <метка>
Описание. Выполняется переход на указанную метку, если
установлен флаг BR.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
1
0
2. Если_сброшен_BR
Формат: JNBI <метка>
Описание. Выполняется переход на указанную метку, если
сброшен флаг BR.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
1
0
3. Сохранение_RLO_и_переход_при_установленном RLO
Формат: JCB <метка>
Описание. Первым действием RLO копируется в BR, затем
выполняется переход на указанную метку, если RLO=1
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
Х
0
1
1
0
4. Сохранение_RLO_и_переход_при_сброшенном RLO
Формат: JNB <метка>
Описание. Первым действием RLO копируется в BR, затем
выполняется переход на указанную метку, если RLO=0
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
Х
0
1
1
0
5. Если_установлен_RLO
Формат: JC <метка>
Описание. Выполняется переход на указанную метку, если
установлен флаг RLO.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
0
STA
1
RLO
*
1
/FC
0
Содержание
40
S7-300/400 Система команд
Описание
Команды_переходов
Содержание
6. Если_сброшен_RLO
Формат: JCN <метка>
Описание. Выполняется переход на указанную метку, если сброшен
флаг RLO.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
0
STA
1
RLO
*
1
/FC
0
7. Если_установлен_OV
Формат: JO <метка>
Описание. Выполняется переход на указанную метку, если
установлен флаг OV.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
8. Если_установлен_OS
Формат: JOS <метка>
Описание. Выполняется переход на указанную метку, если
установлен флаг OS.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
Замечание. Почему команда №7 'JO' не сбрасывает бит OV, а
команда 'JOS' сбрасывает бит OS?
9. Если_меньше_нуля
Формат: JM <метка>
Описание. Если результат предыдущей арифметической команды оказался меньше
нуля, то выполняется переход на указанную метку.
BR CC1 CC0 OV
OS
OR STA
Зависит от
*
*
Воздействует на
Замечание. CC1=0, CC0=1 → результат меньше нуля.
RLO
-
/FC
-
10. Если_меньше_или_равно_нулю
Формат: JMZ <метка>
Описание. Если результат предыдущей арифметической команды
оказался меньше или равен нулю, то выполняется переход на указанную
метку.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
Замечание. CC1=0, CC0=0 → результат равен нулю.
Содержание
41
S7-300/400 Система команд
Описание
Команды_переходов
Содержание
11. Если_равно_нулю
Формат: JZ <метка>
Описание. Если результат предыдущей арифметической команды
оказался равен нулю, то выполняется переход на указанную метку.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
12. Если_не_равно_нулю
Формат: JN <метка>
Описание. Если результат предыдущей арифметической команды
оказался отличен от нуля, то выполняется переход на указанную метку.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
Замечание: СС1=1, СС0=0 → результат больше нуля.
13. Если_больше_или_равно_нулю
Формат: JPZ <метка>
Описание. Если результат предыдущей арифметической команды
оказался больше или равен нулю, то выполняется переход на указанную
метку.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
14. Если_больше_нуля
Формат: JP <метка>
Описание. Если результат предыдущей арифметической команды
оказался больше нуля, то выполняется переход на указанную метку.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
15. Если_ошибка
Формат: JUO <метка>
Описание. Если в результате выполнения предыдущей
арифметической команды возникла ошибка (например, деление на
нуль), то выполняется переход на указанную метку.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
Воздействует на
Замечание. СС1=1, СС0=1 → арифметическая ошибка.
Содержание
42
S7-300/400 Система команд
Описание
Команды_переходов
Содержание
16. Безусловный_переход
Формат: JU <метка>
Описание. Выполняется переход на указанную метку без всяких условий.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
17. Организация_цикла
Формат: LOOP <метка>
Описание. Вычитание 1 из ACCU1_L и если значение ACCU1_L после вычитания еще
не равно нулю, то переход (обычно это переход назад, что тем самым позволяет организовать
программный цикл).
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
18. Переход_по_значению_ACCU1
Формат: JL <метка>
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Описание. После команды JL должны стоять команды
безусловного перехода JU (но не более 255 команд). Метка в команде JL
помечает строку программы, перед которой завершается список команд
JU. В самом списке команд JU не разрешается использовать другие
команды. Берется текущее значение ACCU1_LL и проводится такая
связь:
1. Если ACCU1_LL=0, то выполняется первая команда JU после
команды JL (первая в списке);
2. Если ACCU1_LL=1, то выполняется вторая команда JU;
3. И т.д. ;
4. Наконец, если значение ACCU1_LL больше чем количество
команд JU в списке, то ни одна из команд JU не выполняется, а
осуществляется переход на метку, указанную в самой команде
JL.
Итак, при выполнении команды JL либо будет выполнена одна
команда JU, либо будет выполнен переход на метку, указанную в самой
команде JL.
Содержание
43
S7-300/400 Система команд
Описание
Команды_загрузки_и_передачи
Содержание
Данная группа представлена 15 командами:
 Загрузка_ACCU1_значением_операнда
 Загрузка_ACCU1_содержимым_STW
 Загрузка_AR1_значением_из_ACCU1
 Загрузка_AR1_значением_из_AR2
 Загрузка_AR1_значением_операнда
 Загрузка_AR2_значением_из_ACCU1
 Загрузка_AR2_значением_операнда
 Обмен_содержимого_AR1_и_AR2
 Запись_из_ACCU1_в_операнд
 Запись_из_ACCU1_в_STW
 Запись_из_AR1_в_ACCU1
 Запись_из_AR1_в_AR2
 Запись_из_AR1_в_операнд
 Запись_из_AR2_в_ACCU1
 Запись_из_AR2_в_адресуемый_операнд
Содержание
44
S7-300/400 Система команд
Описание
Команды_загрузки_и_передачи
Содержание
1. Загрузка_ACCU1_значением_операнда
Формат: L <операнд>
Описание. Сначала содержимое ACCU1 копируется в ACCU2.
Затем содержимое адресуемого операнда заносится в ACCU1.
Возможными операндами являются байт, слово, двойное слово из таких областей, как I, Q,
PI, M, L, DB, DI.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Примеры:
L
IB
10
// Загрузить байт #10 из области входов
L
MB 120
// Загрузить байт #120 из области меркеров
L
DBD 8
// Загрузить двойное слово #8 из текущего
// глобального блока данных
L
DIW 15
// Загрузить слово #15 из текущего связанного
// блока данных
L
LD
252
// Загрузить двойное слово #252 из
// локального стека
Замечание. Если была загрузка байта, то он загрузится в
ACCU1_LL, адресуемое слово загрузится в ACCU1_L, при этом старшие
незадействованные разряды ACCU1 будут установлены в 0.
2. Загрузка_ACCU1_содержимым_STW
Формат: LSTW
Описание: ACCU1 := Слово Состояния;
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
*
*
*
*
*
*
*
*
Воздействует на
Замечание. После выполнения данной команды ACCU1 выглядит
следующим образом:
Биты ACCU1 31…9
8
7
6
5
4
3
2
1
0
Содержимое
нули BR CC1 CC0 OV OS
OR STA RLO /FC
3. Загрузка_AR1_значением_из_ACCU1
Формат: LAR1
Описание. AR1 := ACCU1;
BR CC1 CC0 OV
OS
Зависит от
Воздействует на
-
Содержание
45
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Команды_загрузки_и_передачи
Содержание
4. Загрузка_AR1_значением_из_AR2
Формат: LAR1 AR2
Описание. AR1 := AR2;
BR CC1 CC0 OV
Зависит от
Воздействует на
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
5. Загрузка_AR1_значением_операнда
Формат: LAR1 <D>
Описание. Загрузить в AR1 содержимое адресуемого двойного слова или загрузить
указатель. Двойное слово может быть выбрано из таких областей, как DB, DI, L и M.
BR CC1 CC0 OV
OS
OR STA RLO
Зависит от
Воздействует на
Пример:
LAR1
DBD 20
LAR1
LD 180
LAR1 MD 24
LAR1
P#M100.0
// Загрузить указатель на 100-ый адрес
// из области меркеров
6. Загрузка_AR2_значением_из_ACCU1
Формат: LAR2
Описание. AR2 := ACCU1;
BR CC1 CC0 OV
OS
Зависит от
Воздействует на
-
OR
-
STA
-
RLO
-
/FC
-
/FC
-
7. Загрузка_AR2_значением_операнда
Формат: LAR2 <D>
Описание. Загрузить в AR1 содержимое адресуемого двойного слова или загрузить
указатель. Двойное слово может быть выбрано из таких областей, как DB, DI, L и M.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
Содержание
46
S7-300/400 Система команд
Описание
Команды_загрузки_и_передачи
Содержание
8. Обмен_содержимого_AR1_и_AR2
Формат: CAR
Описание. Содержимое регистров AR1 и AR2 меняется местами.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
9. Запись_из_ACCU1_в_операнд
Формат: T <операнд>
Описание. Копирование ACCU1 в адресуемый байт, слово или
двойное слово. Данная команда зависит от MCR ресурса.
Если MCR ресурс активен и бит MA = 1 (вершина стека MCR
ресурса), то содержимое аккумулятора копируется в адресуемый
операнд (число копируемых байтов из аккумулятора зависит от размера
адресуемого операнда, см. пример). Если бит MA = 0, то в адресуемый
операнд запишутся нули.
Если же MCR ресурс выключен, то содержимое аккумулятора
копируется в адресуемый операнд.
Операнды могут быть из следующих областей: I, Q, PQ, M, L, DB.
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
Зависит от
Воздействует на
Пример:
T
QB 10 // QB10 :=ACCU1_LL ;
T
MW 14 // MW14 :=ACCU1_L ;
T
DBD 2 // Содержимое ACCU1 копируется во второе двойное
// слово глобального блока данных
10. Запись_из_ACCU1_в_STW
Формат: T STW
Описание. Слово состояния загружается значением из
аккумулятора, а именно биты с 0 по 8 из ACCU1 копируются в Слово
состояния.
Биты ACCU1 31…9
8
7
6
5
4
3
2
1
0
Слово
состояния
нули
Зависит от
Воздействует на
BR CC1
BR
Х
CC1
Х
CC0
CC0
Х
OV
OV
Х
Содержание
47
OS
OS
Х
OR
OR
Х
STA
STA
Х
RLO
/FC
RLO
Х
/FC
Х
S7-300/400 Система команд
Описание
Команды_загрузки_и_передачи
Содержание
11. Запись_из_AR1_в_ACCU1
Формат: TAR1
Описание. Содержимое ACCU1 сохраняется в ACCU2. В ACCU1 копируется
содержимое адресного регистра AR1.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
12. Запись_из_AR1_в_AR2
Формат: TAR1 AR2
Описание. Содержимое адресного регистра AR1 копируется в
адресный регистр AR2. ACCU1 и ACCU2 не изменяются.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
13. Запись_из_AR1_в_операнд
Формат: TAR1 <D>
Описание. Содержимое адресного регистра AR1 копируется в
адресуемое двойное слово, которое может находиться в одной из
следующих областей: M, L, DB, DI. Содержимое ACCU1 и ACCU2 не изменяется.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
14. Запись_из_AR2_в_ACCU1
Формат: TAR2
Описание. Содержимое ACCU1 сохраняется в ACCU2. В ACCU1 копируется
содержимое адресного регистра AR2.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
15. Запись_из_AR2_в_адресуемый_операнд
Формат: TAR2 <D>
Описание. Содержимое адресного регистра AR2 копируется в
адресуемое двойное слово, которое может находиться в одной из
следующих областей: M, L, DB, DI. Содержимое ACCU1 и ACCU2 не изменяется.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
-
Содержание
48
S7-300/400 Система команд
Содержание
Описание
Математика_с_плавающей_точкой
Математика с плавающей точкой представлена 5 командами:
 Сложение
 Вычитание
 Умножение
 Деление
 Модуль_числа
Содержание
49
S7-300/400 Система команд
Описание
Математика_с_плавающей_точкой
Содержание
1. Сложение
Формат: +R
Описание. ACCU1 := ACCU1 + ACCU2;
Содержимое ACCU1 и ACCU2 рассматривается как числа с
плавающей точкой. Содержимое регистров складывается, и результат
сохраняется в ACCU1. По значению битов CC1, CC0, OS и OV можно
судить о результате сложения.
Таблица
Результат в ACCU1
Флаги
Описание
знак порядок
мант-са
CC1 CC0 OV
OS
0
255
1
1
1
1
Не число
≠0
Плюс бесконечность
0
255
0
1
0
1
1
(переполнение)
любой
Нормализованные
0
1..254
1
0
0
допустимы
числа
й
Очень
маленькие
0
0
0
0
1
1
≠0
числа
(переполнение)
0
0
0
0
0
0
Результат нуль
1
0
0
0
0
0
Результат нуль
Очень
маленькие
1
0
0
0
1
1
≠0
отрицательные
числа
(переполнение)
любой
Нормализованные
1
1..254
0
1
0
допустимы
отрицательные
й
числа
Минус
1
255
0
0
1
1
1
бесконечность
(переполнение)
1
255
1
1
1
1
Не число
≠0
Замечание.
1. данная таблица применима не только к команде сложения +R,
но и к другим командам этой группы
2. 'Не число' означает, что формат чисел с плавающей точкой
IEEE не выдерживается
3.
'+/-Бесконечность' означает, что имеет место слишком большое положительное (или
отрицательное) число
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
Содержание
50
S7-300/400 Система команд
Описание
Математика_с_плавающей_точкой
Содержание
Пример
OPN DB 10
L
ID 10 // ACCU1 :=ID10 ;
L
MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ;
+R
// ACCU1 :=ACCU2 + ACCU1 ;
T
DBD 25
2. Вычитание
Формат: -R
Описание. ACCU1 := ACCU2 - ACCU1;
Содержимое ACCU1 и ACCU2 рассматривается как числа с
плавающей точкой. Из содержимого ACCU2 вычитается содержимое
ACCU1 и результат сохраняется в ACCU1. По значению битов CC1, CC0,
OS и OV можно судить о результате вычитания (см. таблицу, приведенную в
описании команды '+R').
Зависит от
Воздействует на
Пример:
OPN DB 10
L
-3.90289
L
MD 14
-R
T
DBD 25
BR
-
CC1
Х
CC0
Х
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
3. Умножение
Формат: *R
Описание. ACCU1 := ACCU1 * ACCU2;
Содержимое ACCU1 и ACCU2 рассматривается как числа с
плавающей точкой. Содержимое ACCU2 умножается на содержимое
ACCU1 и результат сохраняется в ACCU1. По значению битов CC1, CC0,
OS и OV можно судить о результате умножения (см. таблицу, приведенную в
описании команды '+R').
BR
-
Зависит от
Воздействует на
Пример:
OPN DB
25
L
ID
10
L
MD 14
*R
T
DBD 25
CC1
Х
CC0
Х
OV
Х
Содержание
51
OS
Х
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Математика_с_плавающей_точкой
Содержание
4. Деление
Формат: /R
Описание. ACCU1 := ACCU2 / ACCU1 ;
Содержимое ACCU1 и ACCU2 рассматривается как числа с
плавающей точкой. Содержимое ACCU2 делится на содержимое ACCU1
и результат сохраняется в ACCU1. По значению битов CC1, CC0, OS и
OV можно судить о результате деления (см. таблицу, приведенную в
описании команды '+R').
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
Пример:
L
MD 0
L
MD 32
/R
T
MD 20
5. Модуль_числа
Формат: ABS
Описание. ACCU1 := Abs (ACCU1) ;
Содержимое ACCU1 рассматривается как число с плавающей
точкой. Берется модуль этого числа и результат сохраняется в ACCU1.
BR CC1 CC0 OV
OS
OR
Зависит от
Воздействует на
Пример:
L
-150.12092
ABS
T
MD 8
// MD8 :=150.12092
//
L
3.00074
ABS
T
MD 12 // MD12 :=3.00074
STA
-
RLO
-
/FC
-
Содержание
52
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
Десяти команд, образующих данную группу, вполне достаточно
для организации целочисленных вычислений:
 Сложение_Long_Integer
 Сложение_Integer
 Сложение_с_константой
 Вычитание_Long_Integer
 Вычитание_Integer
 Умножение_Long_Integer
 Умножение_Integer
 Деление_Long_Integer
 Деление_Integer
 Остаток_от_деления
Содержание
53
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
1. Сложение_Long_Integer
Формат: +D
Описание. ACCU1 := ACCU1 + ACCU2 ;
Содержимое ACCU1 складывается с содержимым ACCU2,
результат сохраняется в ACCU1. Содержимое ACCU1 и ACCU2
интерпретируется как 32 битные целые числа со знаком (Long Integer) .
Команда не зависит и не воздействует на бит RLO.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
Установка битов в слове состояния:
CC1
CC0
OV
OS
Сумма = 0
0
0
0
0
1
0
- 2.147.483.648 ≤ Сумма < 0
1
0
0
0 < Сумма ≤ + 2.147.483.647
Сумма = - 4.294.967.296
0
0
1
1
0
1
1
1
+ 2.147.483.647 < Сумма ≤ + 4.294.967.724
1
0
1
1
- 4.294.967.295 ≤ Сумма < - 2.147.483.648
Пример:
L
ID 10 // Значение ID10 загружено в ACCU1
L
MD 14 // ID10 загружено в ACCU2. Значение MD14
// загружено в ACCU1.
+D // Сложить ACCU2 и ACCU1, результат сохранить в ACCU1.
T
DBD 25// Передать результат в 25-ое двойное слово
// глобального блока данных.
2. Сложение_Integer
Формат: +I
Описание. ACCU1_L := ACCU1_L + ACCU2_L;
Содержимое ACCU1_L суммируется с содержимым ACCU2_L,
результат сохраняется в ACCU1_L. Содержимое ACCU1_L и ACCU2_L
интерпретируются как 16 битные целые числа со знаком (Integer). Команда
не зависит и не воздействует на бит RLO.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
Содержание
54
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
Установка битов в слове состояния:
- 32768 ≤
0<
Сумма = 0
Сумма < 0
Сумма ≤ + 32767
Сумма = - 65536
Сумма ≤ + 65534
Сумма < - 32768
CC1
0
0
1
0
0
1
CC0
0
1
0
0
1
0
OV
0
0
0
1
1
1
+ 32767 <
- 65535 ≤
Пример:
L
IW 10 // Значение IW10 загружено в ACCU1_L
L
MW 14 // Значение IW10 переписывается в ACCU2_L
// Значение MW 14 загружается в ACCU1_L
+I
// Сложить ACCU2_L и ACCU1_L, результат
// сохранить в ACCU1_L
T
DBW 25 // Передать результат в 25-ое слово глобального
// блока данных
OS
1
1
1
3. Сложение_с_константой
Формат: + <константа>
Описание.
ACCU1 :=ACCU1 + <32-ух битная константа>;
ACCU1_L :=ACCU1_L + <16-ти битная константа>;
Данная команда, в отличие от двух предыдущих, не воздействует
на флаги, и, следовательно, ее имеет смысл применять там, где
переполнение не играет роли. Операнд команды может быть 16-ти или
32-ух разрядным:
1. + <16-ти битная константа>
Содержимое ACCU1_L складывается с 16-ти битной
константой (диапазон значений от -32768 до +32767),
результат сохраняется в ACCU1_L. ACCU2 и ACCU1_H не
изменяются.
2. + <32-ух битная константа>
Содержимое ACCU1 складывается с 32-ух битной константой
(диапазон значений от -2,147,483,648 до +2,147,483,647),
результат сохраняется в ACCU1. ACCU2 не изменяется.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
-
Содержание
55
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
Пример:
L
IW 10 // Значение IW10 загружено в ACCU1_L.
L
MW 14 // Значение IW10 переписывается в ACCU2_L,
// значение MW14 загружается в ACCU1_L.
+I
// Складывает ACCU2_L и ACCU1_L, результат со// храняется в ACCU1_L.
+
25
// Складывает ACCU1_L и 16-ти битную константу
// +25, результат сохраняется в ACCU1_L.
T
DBW 25 // Передать содержимое ACCU1_L (результат) в
// 25-ое слово глобального блока данных.
//
L
MD 20 // ACCU1 :=MD20 ;
L
MD 24 // ACCU2 :=MD20 ; ACCU1 :=MD24 ;
+D
// ACCU1 :=ACCU1 + ACCU2 ;
+
-200
// ACCU1_L :=ACCU1_L - 200 ;
T
MD 26 // MD26 :=ACCU1 ;
//
L
ID 12 // ACCU1 :=ID12 ;
L
MD 14 // ACCU2 :=ID12 ; ACCU1 :=MD14 ;
+
L# -395 // Складывает ACCU1 и 32-ух битную константу
// -395, результат сохраняется в ACCU1.
>D
// Если ACCU2 > ACCU1 (т.е. ID12 > MD14 - 395)
JC LAB9
// То переход на метку LAB9.
4. Вычитание_Long_Integer
Формат: -D
Описание. ACCU1 :=ACCU2 - ACCU1;
Содержимое ACCU1 и ACCU2 рассматривается как длинные
целые числа со знаком (Long Integer). Из содержимого ACCU2
вычитается содержимое ACCU1, результат сохраняется в ACCU1.
Команда не зависит от RLO и не воздействует на него.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
Установка битов в слове состояния:
- 2.147.483.648 ≤
0<
+ 2.147.483.647 <
- 4.294.967.295 ≤
Разность = 0
Разность < 0
Разность ≤ + 2.147.483.647
Разность ≤ + 4.294.967.295
Разность < - 2.147.483.648
CC1
0
0
1
0
1
CC0
0
1
0
1
0
OV
0
0
0
1
1
OS
1
1
Содержание
56
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
Пример:
L
ID 10 // ACCU1 :=ID10 ;
L
MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ;
-D
// ACCU1 :=ACCU2 - ACCU1 ;
T
DBD 25 // Содержимое ACCU1 (результат) пересылается
// в 25-ое двойное слово глобального блока данных.
5. Вычитание_Integer
Формат: -I
Описание. ACCU1_L :=ACCU2_L - ACCU1_L;
Содержимое ACCU1_L и ACCU2_L рассматривается как целые
числа со знаком (Integer). Из содержимого ACCU2_L вычитается
содержимое ACCU1_L и результат сохраняется в ACCU1_L. Команда не
зависит от RLO и не воздействует на него.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
Установка битов в слове состояния:
CC1
CC0
OV
OS
Разность = 0
0
0
0
0
1
0
- 32768 ≤ Разность < 0
1
0
0
0 < Разность ≤ + 32767
0
1
1
1
+ 32767 < Разность ≤ + 65534
1
0
1
1
- 65535 ≤ Разность < - 32768
Пример:
L
IW 10 // ACCU1_L :=IW10 ;
L
MW 14 // ACCU2_L :=IW10 ; ACCU1_L :=MW14 ;
-I
// ACCU1_L :=ACCU2_L - ACCU1_L ;
T
DBW 25 // Содержимое ACCU1_L (результат) пересылается
// в 25-ое слово глобального блока данных.
6. Умножение_Long_Integer
Формат: *D
Описание. ACCU1 := ACCU1 * ACCU2;
Содержимое ACCU1 и ACCU2 рассматривается как длинные
целые числа со знаком (Long Integer). Выполняется умножение ACCU1 на ACCU2.
Результат сохраняется в ACCU1. По значению битов CC1, CC0, OV и OS можно судить о
результате умножения.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
Содержание
57
OS
Х
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
Установка битов в слове состояния:
Умн. = 0
Умн. < 0
Умн. ≤ + 2.147.483.647
Умн. ≤ + 4.294.967.295
Умн. < - 2.147.483.648
CC1
0
0
1
0
1
CC0
0
1
0
1
0
OV
0
0
0
1
1
- 2.147.483.648 ≤
0<
+ 2.147.483.647 <
- 4.294.967.295 ≤
Пример:
L
ID 10 // ACCU1 :=ID10 ;
L
MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ;
*D
// ACCU1 :=ACCU1 * ACCU2 ;
T
DBD 25 // Содержимое ACCU1 (результат) передается в
// 25-ое двойное слово глобального блока данных.
OS
1
1
7. Умножение_Integer
Формат: *I
Описание. ACCU1 := ACCU1_L * ACCU2_L;
Содержимое ACCU1_L и ACCU2_L рассматривается как целые
числа со знаком (Integer). Выполняется умножение ACCU1_L на ACCU2_L. Результат
сохраняется в ACCU1. По значению битов CC1, CC0, OV и OS можно судить о результате
умножения.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
OV
0
0
0
1
1
OS
1
1
Установка битов в слове состояния:
Умн. = 0
Умн. < 0
Умн. ≤ + 32.767
Умн. ≤ + 1.073.741.824
Умн. < - 32.768
CC1
0
0
1
0
1
CC0
0
1
0
1
0
- 32.768 ≤
0<
+ 32.767 <
- 1.073.709.056 ≤
Пример:
L
IW 10 // ACCU1_L :=IW10 ;
L
MW 14 // ACCU2_L :=IW10 ; ACCU1_L :=MW14 ;
*I
// ACCU1 :=ACCU1_L * ACCU2_L ;
T
DBW 25 // Содержимое ACCU1 (результат) передается в
// 25-ое слово глобального блока данных
Содержание
58
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
8. Деление_Long_Integer
Формат: /D
Описание. ACCU1 := ACCU2 DIV ACCU1;
Содержимое ACCU1 и ACCU2 рассматривается как длинные
целые числа со знаком (Long Integer). Содержимое ACCU2 делится на
содержимое ACCU1, дробная часть отбрасывается, результат
сохраняется в ACCU1. Дробную часть позволяет получить команда
'MOD'. По значению битов CC1, CC0, OS и OV можно судить о результате деления.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
Установка битов в слове состояния:
CC1
CC0
OV
OS
Частн. = 0
0
0
0
0
1
0
- 2.147.483.648 ≤ Частн. < 0
1
0
0
0 < Частн. ≤ + 2.147.483.647
Частн. = + 2.147.483.648
1
0
1
1
Деление на нуль
1
1
1
1
Внимание. Результат деления оказывается равным нулю, когда
делимое равно нулю, а также, когда абсолютное значение делимого
меньше абсолютного (т.е. без учета знака, или еще говорят 'модуль
числа') значения делителя (это является следствием отбрасывания
дробной части результата деления).
Пример:
L
ID 10 // ACCU1 :=ID10 ;
L
MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ;
/D
// Деление нацело
Пусть, например, ID10=17, а MD14=5, тогда после команды
деления в ACCU1 будет результат =3
9. Деление_Integer
Формат: /I
Описание. ACCU1_L := ACCU2_L DIV ACCU1_L;
ACCU1_H := ACCU2_L MOD ACCU1_L;
Содержимое ACCU1_L и ACCU2_L рассматривается как целые
числа со знаком (Integer). Содержимое ACCU2_L делится на содержимое
ACCU1_L. Частное от деления (т.е. целая часть) записывается в
ACCU1_L, остаток от деления записывается в ACCU1_H.
Содержание
59
S7-300/400 Система команд
Описание
Целочисленная_математика
Содержание
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
Х
OV
Х
OS
Х
OR
-
STA
-
RLO
-
/FC
-
OV
0
0
0
1
1
OS
1
1
Установка битов в слове состояния:
CC1
0
0
1
1
1
CC0
0
1
0
0
1
Частн. = 0
- 32.768 ≤ Частн. < 0
0 < Частн. ≤ + 32.767
Частн. = + 32.768
Деление на нуль
Пример:
L
IW 10 // Пусть IW10=23
L
MW 14 // Пусть MW14=4
/I
// Частное равно 5, и оно записывается в ACCU1_L
// Остаток равен 3, и он записывается в ACCU1_H
10. Остаток_от_деления
Формат: MOD
Описание. ACCU1 := ACCU2 MOD ACCU1;
Содержимое ACCU1 и ACCU2 рассматривается как длинные
целые числа со знаком (Long Integer). Содержимое ACCU2 делится на
содержимое ACCU1, от результата оставляется только дробная часть
(т.е. остаток), и именно он сохраняется в ACCU1. Целую часть позволяет
получить команда '/D'.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
Х
Х
Х
Установка битов в слове состояния:
CC1
0
0
1
1
CC0
0
1
0
1
OV
0
0
0
1
OS
1
Остаток = 0
- 2.147.483.648 ≤ Остаток < 0
0 < Остаток ≤ + 2.147.483.647
Деление на нуль
Пример:
ID 10
// ACCU1 :=ID10 ;
L
MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ;
MOD // Остаток от деления ACCU2 / ACCU1 сохраняется в ACCU1
T
MD 20 // Запишем остаток в MD20
Содержание
60
S7-300/400 Система команд
Содержание
Описание
Команды_программного_контроля
Используя 10 команд данной группы,
создавать программы со сложной организацией:
 Краткое_вступительное_слово
 Включить_MCR_ресурс
 Выключить_MCR_ресурс
 Записать_в_стек
 Прочитать_из_стека
 Безусловный_вызов_без_параметров
 Условный_вызов_без_параметров
 Вызов_CALL
 Конец_блока
 Конец_блока_безусловный
 Конец_блока_условный
Содержание
61
пользователь
может
S7-300/400 Система команд
Описание
Команды_программного_контроля
Содержание
Краткое_вступительное_слово
Начнем с краткого вступительного слова. В контроллерах
семейства S7-300 и S7-400 реализован на аппаратном уровне так
называемый ресурс MCR. Изначально этот ресурс выключен. Зачем он
нужен? Что он из себя представляет?
Ресурс MCR влияет на алгоритм выполнения следующих команд:
1. Присвоить бит {пример: = Q 124.3 }
2. Установить бит {пример: S M 5.1 }
3. Сбросить бит {пример: R M 12.0 }
4. Передача байта, слова или двойного слова {пример: T MB 15 }
Когда он выключен, то указанные команды выполняются обычным
порядком. Алгоритм выполнения этих команд несколько изменяется,
когда данный ресурс активен (см. описание соответствующих команд).
Программист, решая конкретную задачу автоматизации, сам принимает
решение об использовании, или не использовании ресурса MCR.
Воспользуйтесь рисунком из файла 'MCR.BMP'. Как видно, основным
элементом ресурса является стек, позволяющий накапливать до восьми
значений бита RLO. Такое накопление позволяет организовывать
вложения2. Есть еще два элемента ресурса MCR: действующий в данный
момент бит MA (вершина стека) и указатель стека MSP. Однако данная
информация об организации ресурса MCR в большей степени является
познавательной,
чем
представляет
практический
интерес.
С
практической точки зрения важным является то, как программист может
управлять этим ресурсом.
Итак, с аппаратным ресурсом MCR связаны четыре команды:
1. MCRA
2. MCRD
3. MCR(
4. )MCR
Команда MCRA включает ресурс. В Вашу обязанность входит
выключение ресурса с помощью команды MCRD (после того, как Вы
закончили его использовать).
Команда MCR( записывает в вершину стека текущее значение
RLO, стек при этом автоматически сдвигается вниз.
Команда )MCR выталкивает из вершины стека бит, записывая его
в RLO, стек при этом автоматически сдвигается вверх.
Содержание
2
Обращаем внимание. Переполнение стека является ошибкой, выполнение пользова­
тельской программы прекращается.
62
S7-300/400 Система команд
Описание
Команды_программного_контроля
Содержание
Эти две команды должны использоваться совместно. Естественно,
возможны вложения, но при переполнении стека формируется ошибка
(размер стека =8).
Когда ресурс MCR включен, следующие команды (их выполнение):
- '=' (присвоить бит)
- 'S' (установить бит)
- 'R' (сбросить бит)
- 'T' (перенос/передача B, W или DW)
зависят от текущего состояния бита MA (т.е. от вершины стека).
1. Включить_MCR_ресурс
Формат:
MCRA
MCRA
Описание. Данная команда включает MCR ресурс.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
2. Выключить_MCR_ресурс
Формат:
MCRD
RLO
-
/FC
-
MCRD
Описание. Данная команда выключает MCR ресурс.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
3. Записать_в_стек
MCR(
Формат:
MCR(
Описание. Команда записывает RLO в вершину стека MCR ресурса.
Уровень вложенности увеличивается на единицу.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
0
STA
1
RLO
*
-
/FC
0
4. Прочитать_из_стека
)MCR
Формат:
)MCR
Описание. Команда переносит вершину стека MCR ресурса в RLO.
Уровень вложенности уменьшается на единицу.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
0
1
0
Вопрос. Прокомментировать для 3. и 4. зависимость и воздействие
на флаги?
Содержание
63
S7-300/400 Система команд
Описание
Команды_программного_контроля
Содержание
5. Безусловный_вызов_без_параметров
Формат:
UC <идентификатор лог. блока>
Описание. Безусловный вызов логического блока без передачи
параметров. Команда сохраняет адрес возврата (селектор и
относительный адрес), селекторы текущих DB и DI, бит MA в B-стеке,
отключает MCR зависимость, создает распределение памяти под
локальные данные.
Внимание. Используя данную команду, Вы не можете связать
некий DI с вызываемым логическим блоком, то есть нельзя UC FB 3, DI 2
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
0
0
1
0
6. Условный_вызов_без_параметров
Формат:
CC <идентификатор лог. блока>
Описание. Команда выполняется аналогично команде UC, только
вызов осуществляется, если RLO=1.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
1
1
0
Вопрос. Если локальная память распределяется, но нет
возможности указать DI, то нет ли в этом парадокса?
7. Вызов_CALL
Формат:
CALL <ид. лог. блока, ид. DI> [параметры]
Описание. Безусловный вызов функции или функционального
блока с возможностью передачи параметров.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
0
0
1
0
Замечание. 1) идентификатор DI связанного блока данных
указывается, если вызывается функциональный блок, и не указывается,
если вызывается функция
2) разрешается использовать символические имена
3) данную команду следует применять в тех случаях, когда в
вызываемую FC или FB требуется передать параметры
4) команду CALL запрещается использовать в организационных
блоках
Содержание
64
S7-300/400 Система команд
Описание
Команды_программного_контроля
Содержание
8. Конец_блока
Формат:
BE
Описание. Команда завершения текущего блока или функции.
Область локальных данных освобождается, вновь открываются те блоки
данных, которые были открыты, восстанавливается MCR зависимость.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
0
0
1
0
9. Конец_блока_безусловный
Формат:
BEU
Описание. Конец блока безусловный. Все то же самое, что и в
команде BE.
Зависит от
Воздействует на
BR
-
CC1
-
CC0
-
OV
-
OS
0
OR
0
STA
1
RLO
-
/FC
0
10. Конец_блока_условный
Формат:
BEC
Описание. Выполнение текущего блока завершается, если RLO=1,
в этом случае выполняются действия, что в командах BE и BEU, иначе
выполнение блока продолжается.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
1
1
0
Замечание. Команды завершения текущего блока следует
применять в случаях, когда требуется завершить блок, не доходя до
логического конца этого блока.
Содержание
65
S7-300/400 Система команд
Описание
Команды_сдвигов
Содержание
Данная группа состоит из 10 команд:
 Циклический_сдвиг_влево_двойного_слова
 Циклический_сдвиг_вправо_двойного_слова
 Однократный_циклический_сдвиг_влево_двойного слова
через бит СС1
 Однократный_циклический_сдвиг_вправо_двойного слова
через бит СС1
 Сдвиг_двойного_слова_влево_нулями
 Сдвиг_слова_влево_нулями
 Сдвиг_двойного_слова_вправо_нулями
 Сдвиг_слова_вправо_нулями
 Сдвиг_DINT_вправо_знаковым_битом
 Сдвиг_INT_вправо_знаковым_битом
Содержание
66
S7-300/400 Система команд
Описание
Команды_сдвигов
Содержание
Общее правило применимое к командам этой группы гласит:
“Сдвиг объекта на 0 битов означает отсутствие сдвига“.
1. Циклический_сдвиг_влево_двойного_слова
Формат: RLD
RLD <число>
Описание. Команда выполняет циклический сдвиг двойного слова
влево. Если команда используется без числового операнда, то
выполняется циклический сдвиг битов влево в 32-ух битном ACCU1
столько раз, какое значение содержится в ACCU2_LL (от 0 до 255).
В случае использования команды RLD <число> выполняется такой
же циклический сдвиг влево, но количество сдвигов определяется
<числом>, значение <числа> находится в отрезке [0..32].
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
2. Циклический_сдвиг_вправо_двойного_слова
Формат: RRD
RRD <число>
Описание. Команда выполняет циклический сдвиг двойного слова
вправо. Если команда используется без числового операнда, то
выполняется циклический сдвиг битов вправо в 32-ух битном ACCU1
столько раз, какое значение содержится в ACCU2_LL (от 0 до 255).
В случае использования команды RLD <число> выполняется такой же циклический
сдвиг вправо, но количество сдвигов определяется <числом>, значение <числа> находится в
отрезке [0..32].
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
0
OV
0
Содержание
67
OS
-
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Команды_сдвигов
Содержание
3. Однократный_циклический_сдвиг_влево_двойного слова через
бит СС1
Формат: RLDA
Описание. Однократный циклический сдвиг двойного слова влево через бит CC1.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
0
OV
0
OS
-
OR
-
STA
-
RLO
-
/FC
-
4. Однократный_циклический_сдвиг_вправо_двойного слова через
бит СС1
Формат: RRDA
Описание. Однократный циклический сдвиг двойного слова вправо через бит CC1.
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
0
OV
0
OS
-
OR
-
STA
-
RLO
-
/FC
-
Содержание
68
S7-300/400 Система команд
Описание
Команды_сдвигов
Содержание
5. Сдвиг_двойного_слова_влево_нулями
Формат: SLD
SLD
<число>
Описание. Сдвиг двойного слова влево, справа вталкиваются
нули. Если команда используется без числового операнда, то
выполняется сдвиг битов влево в 32-ух битном ACCU1 столько раз, какое
значение содержится в ACCU2_LL (от 0 до 255).
В случае использования команды SLD <число> выполняется такой
же сдвиг влево, но количество сдвигов определяется <числом>, значе ние
<числа> находится в отрезке [0..32].
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
0
OV
0
OS
-
OR
-
STA
-
RLO
-
/FC
-
6. Сдвиг_слова_влево_нулями
Формат: SLW
SLW <число>
Описание. Сдвиг слова влево, справа вталкиваются нули. Если
команда используется без числового операнда, то выполняется сдвиг
битов влево в ACCU1_L столько раз, какое значение содержится в
ACCU2_LL (от 0 до 255).
В случае использования команды SLW <число> выполняется такой
же сдвиг влево, но количество сдвигов определяется <числом>, значе ние
<числа> находится в отрезке [0..15].
Зависит от
Воздействует на
BR
-
CC1
Х
CC0
0
OV
0
Содержание
69
OS
-
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Команды_сдвигов
Содержание
7. Сдвиг_двойного_слова_вправо_нулями
Формат: SRD
SRD <число>
Описание. Сдвиг двойного слова вправо, слева вталкиваются
нули. Если команда используется без числового операнда, то
выполняется сдвиг битов вправо в ACCU1 столько раз, какое значение
содержится в ACCU2_LL (от 0 до 255).
В случае использования команды SRD <число> выполняется такой
же сдвиг вправо, но количество сдвигов определяется <числом>,
значение <числа> находится в отрезке [0..32].
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
8. Сдвиг_слова_вправо_нулями
Формат: SRW
SRW <число>
Описание. Сдвиг слова вправо, слева вталкиваются нули. Если
команда используется без числового операнда, то выполняется сдвиг
битов вправо в ACCU1_L столько раз, какое значение содержится в
ACCU2_LL (от 0 до 255).
В случае использования команды SRW <число> выполняется
такой же сдвиг вправо, но количество сдвигов определяется <числом>,
значение <числа> находится в отрезке [0..15].
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
-
Содержание
70
S7-300/400 Система команд
Описание
Команды_сдвигов
Содержание
9. Сдвиг_DINT_вправо_знаковым_битом
Формат: SSD
SSD
<число>
Описание. Сдвиг длинного целого вправо за счет размножения
знакового бита. Если команда используется без числового операнда, то
выполняется сдвиг битов вправо в ACCU1 столько раз, какое значение
содержится в ACCU2_LL (от 0 до 255).
В случае использования команды SSD <число> выполняется такой
же сдвиг вправо, но количество сдвигов определяется <числом>,
значение <числа> находится в отрезке [0..32].
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
10. Сдвиг_INT_вправо_знаковым_битом
Формат: SSI
SSI
<число>
Описание. Сдвиг целого числа вправо за счет размножения
знакового бита. Если команда используется без числового операнда, то
выполняется сдвиг битов вправо в ACCU1_L столько раз, какое значение
содержится в ACCU2_LL (от 0 до 255).
В случае использования команды SSI <число> выполняется такой
же сдвиг вправо, но количество сдвигов определяется <числом>,
значение <числа> находится в отрезке [0..15].
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
-
Содержание
71
S7-300/400 Система команд
Описание
Таймеры
Содержание
Девять команд данной группы дают пользователю все
необходимые инструменты для работы с программными таймерами:
 Сделать_возможным_новый_старт_выбранного таймера
 Сбросить_выбранный_таймер
 Прочитать_в_двоичном_коде_текущее значение выбранного
таймера
 Прочитать_в_BCD_формате_текущее значение выбранного
таймера
Запустить таймер можно в одном из пяти режимов. Для этой цели
существуют пять разных команд. Вход сброса всегда является наиболее
приоритетным входом.
 Мгновенный_запуск_и_зависимость_от стартового сигнала
 Мгновенный_запуск_с_возможностью перезапуска
 Задержка_включения_и_зависимость от стартового сигнала
 Задержка_включения_с_возможностью перезапуска
 Задержка_выключения_и_зависимость_от стартового_сигнала
Содержание
72
S7-300/400 Система команд
Описание
Таймеры
Содержание
1. Сделать_возможным_новый_старт_выбранного таймера
Формат: FR <таймер>
Описание. Команда FR сравнивает текущее состояние бита RLO с
предыдущим состоянием, которое хранится в данном таймере, на
предмет обнаружения положительного фронта. Если положительный
фронт фиксируется, то команда очищает флаг запрета запуска таймера,
то есть дается возможность вновь стартовать таймер. Эта команда
применяется, когда требуется перезапустить уже работающий таймер.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Пример:
A
I 2.0
// Можно перезапустить таймер?
FR T 1
// Если зафиксирован положительный фронт, то
// разрешение на перезапуск получено.
2. Сбросить_выбранный_таймер
Формат: R <таймер>
Описание. Если RLO =1, то выбранный таймер останавливается, его значение
сбрасывается в нуль.
Зависит от
Воздействует на
Пример:
A
I 2.1
R
T1
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
0
STA
-
RLO
*
-
/FC
0
// Можно сбросить таймер?
// Таймер сбрасывается, если I 2.1 =1
3. Прочитать_в_двоичном_коде_текущее
выбранного таймера
Формат: L <таймер>
текущее
значение
Описание. Содержимое ACCU1 переписывается в ACCU2, затем текущее значение
указанного таймера в двоичном коде записывается в ACCU1_L.
Зависит от
Воздействует на
Пример:
L
T5
BR
-
CC1
-
CC0
-
OV
-
Содержание
73
OS
-
OR
-
STA
-
RLO
-
/FC
-
S7-300/400 Система команд
Описание
Таймеры
Содержание
4. Прочитать_в_BCD_формате_текущее
таймера
Формат: LC <таймер>
значение
выбранного
Описание. Содержимое ACCU1 переписывается в ACCU2, затем текущее значение
указанного таймера в BCD формате записывается в ACCU1_L
Зависит от
Воздействует на
Пример:
LC T 1
BR
-
CC1
-
CC0
-
OV
-
OS
-
OR
-
STA
-
RLO
-
/FC
-
5. Мгновенный_запуск_и_зависимость_от стартового сигнала
(Режим ЖДУЩЕГО МУЛЬТИВИБРАТОРА СО СБРОСОМ)
Формат: SP <таймер>
Описание. Указанный таймер запускается, когда имеет место
положительный фронт на стартовом входе. Выход Q таймера
немедленно устанавливается и удерживается в состоянии 1, пока
таймер работает. Таймер останавливается в трех случаях:
1. Заканчивается заданный интервал времени
2. Вход START сбросился
3. Вход RESET установился
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Пример:
A
I 2.1
// Есть разрешение на старт таймера?
L
S5T$10s // Установка времени (10 секунд) в ACCU1
SP T 1
// Если разрешение получено, то время из ACCU1
// (10 секунд) загружается в таймер, таймер стартует в режиме SP
6. Мгновенный_запуск_с_возможностью перезапуска
(Режим ЖДУЩЕГО МУЛЬТИВИБРАТОРА С ПЕРЕЗАПУСКОМ)
Формат: SE <таймер>
Описание. Указанный таймер запускается, когда имеет место
положительный фронт на стартовом входе. Выход Q таймера
немедленно устанавливается и удерживается в состоянии 1, пока
таймер работает. Таймер останавливается в следующих случаях:
1. Заканчивается заданный интервал времени
2. Вход RESET установился
ВЫКЛЮЧЕНИЕ стартового сигнала во время работы таймера НЕ
ОСТАНАВЛИВАЕТ таймер. Если таймер еще продолжает работать, а
условие запуска вновь формируется, то таймер перезапускается заново.
Содержание
74
S7-300/400 Система команд
Описание
Таймеры
Содержание
BR CC1 CC0 OV
OS
OR
Зависит от
Воздействует на
0
Пример:
A
I 2.1
// Условие запуска таймера
L
S5T#10s
// Установка интервала времени
SE T 1
// Запуск таймера в режиме SE
STA
-
RLO
*
-
/FC
0
7. Задержка_включения_и_зависимость от стартового сигнала
(Режим ФОРМИРОВАТЕЛЯ ЗАДЕРЖКИ ВКЛЮЧЕНИЯ)
Формат: SD <таймер>
Описание. Таймер запускается положительным фронтом на входе
START. Однако выход Q таймера устанавливается после истечения
времени ЗАДЕРЖКИ при условии, что на стартовом входе все еще
удерживается 1. Таким образом, таймер устанавливает свой выход Q с
заданной задержкой относительно момента запуска.
Таймер останавливается в следующих случаях:
1. Вход START сбросился
2. Вход RESET установился
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
8. Задержка_включения_с_возможностью перезапуска
(Режим
ФОРМИРОВАТЕЛЯ
ЗАДЕРЖКИ
ВКЛЮЧЕНИЯ
С
ЗАПОМИНАНИЕМ)
Формат: SS <таймер>
Описание. Таймер запускается положительным фронтом на входе
START. Однако выход Q таймера устанавливается после истечения
времени ЗАДЕРЖКИ. Таким образом, таймер устанавливает свой выход
Q с заданной задержкой относительно момента запуска.
Если во время формирования задержки вновь формируется
условие запуска, то таймер перезапускается заново.
Таймер останавливается, когда устанавливается вход RESET.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Содержание
75
S7-300/400 Система команд
Описание
Таймеры
Содержание
9. Задержка_выключения_и_зависимость_от стартового сигнала
(Режим ФОРМИРОВАТЕЛЯ ЗАДЕРЖКИ ВЫКЛЮЧЕНИЯ)
Формат: SF <таймер>
Описание. Выход Q таймера немедленно устанавливается по
положительному фронту на стартовом входе. А сам таймер не
запускается. По заднему фронту стартового сигнала запускается таймер,
выход Q остается в состоянии 1 до окончания времени задержки. Таким
образом, выключение выхода Q происходит с заданной задержкой
относительно выключения стартового входа.
Выключение таймера также производится по входу сброса.
Повторное включение таймера во время формирования задержки
ОСТАНАВЛИВАЕТ таймер, а его новый запуск происходит только при
следующем выключении стартового входа (задний фронт).
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
*
Воздействует на
0
0
Содержание
76
S7-300/400 Система команд
Содержание
Описание
Логика_для_WORD_и_DWORD
Шесть команд данной группы представляют собой развитие
битовой логики в направлении увеличения размера операнда:
 Логическое_И_для_двойного_слова
 Логическое_И_для_слова
 Логическое_ИЛИ_для_двойного_слова
 Логическое_ИЛИ_для_слова
 Исключающее_ИЛИ_для_двойного_слова
 Исключающее_ИЛИ_для_слова
Содержание
77
S7-300/400 Система команд
Описание
Логика_для_WORD_и_DWORD
Содержание
1. Логическое_И_для_двойного_слова
Формат: AD
AD
<32-bit constant>
Описание. Выполняется функция логического И между ACCU1 и
ACCU2, а если используется команда AD <32-bit constant>, то между
ACCU1 и 32-ух битной константой. В любом случае содержимое ACCU2
не изменяется. Результат сохраняется в ACCU1.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
Замечание. Бит CC1 устанавливается, если результат не равен
нулю.
2. Логическое_И_для_слова
Формат: AW
AW
<16-bit constant>
Описание. Выполняется функция логического И между ACCU1_L и
ACCU2_L, а если используется команда AW <16-bit constant>, то между
ACCU1_L и 16-ти битной константой. В любом случае содержимое
ACCU2 и ACCU1_H не изменяется. Результат сохраняется в ACCU1_L.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
Замечание. Бит CC1 устанавливается, если результат не равен
нулю.
3. Логическое_ИЛИ_для_двойного_слова
Формат: OD
OD
<32-bit constant>
Описание. Выполняется функция логического ИЛИ между ACCU1 и
ACCU2, а если используется команда ОD <32-bit constant>, то между
ACCU1 и 32-ух битной константой. В любом случае содержимое ACCU2
не изменяется. Результат сохраняется в ACCU1.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
Замечание. Бит CC1 устанавливается, если результат не равен
нулю.
Содержание
78
S7-300/400 Система команд
Описание
Логика_для_WORD_и_DWORD
Содержание
4. Логическое_ИЛИ_для_слова
Формат: OW
OW
<16-bit constant>
Описание. Выполняется функция логического ИЛИ между
ACCU1_L и ACCU2_L, а если используется команда ОW <16-bit
constant>, то между ACCU1_L и 16-ти битной константой. В любом
случае содержимое ACCU2 и ACCU1_H не изменяется. Результат
сохраняется в ACCU1_L.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
Замечание. Бит CC1 устанавливается, если результат не равен
нулю.
5. Исключающее_ИЛИ_для_двойного_слова
Формат: XOD
XOD <32-bit constant>
Описание. Выполняется функция ИСКЛЮЧАЮЩЕЕ ИЛИ между
ACCU1 и ACCU2, а если используется команда ХОD <32-bit constant>, то
между ACCU1 и 32-ух битной константой. В любом случае содержимое
ACCU2 не изменяется. Результат сохраняется в ACCU1.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
Замечание. Бит CC1 устанавливается, если результат не равен
нулю.
6. Исключающее_ИЛИ_для_слова
Формат: XOW
XOW <16-bit constant>
Описание. Выполняется функция ИСКЛЮЧАЮЩЕЕ ИЛИ между
ACCU1_L и ACCU2_L, а если используется команда ХОW <16-bit
constant>, то между ACCU1_L и 16-ти битной константой. В любом
случае содержимое ACCU2 и ACCU1_H не изменяется. Результат
сохраняется в ACCU1_L.
BR CC1 CC0 OV
OS
OR STA RLO /FC
Зависит от
Воздействует на
Х
0
0
Замечание. Бит CC1 устанавливается, если результат не равен
нулю.
Содержание
79
Скачать