Краткий справочник по STL
.pdfS7-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 |
Зависит от |
- |
- |
- |
- |
- |
- |
- |
- |
|
Воздействует на |
- |
Х |
Х |
Х |
Х |
- |
- |
- |
|
Пример: |
|
|
|
|
|
|
|
|
|
L |
MD 0 |
|
|
|
|
|
|
|
|
L |
MD 32 |
|
|
|
|
|
|
|
|
/R |
|
|
|
|
|
|
|
|
|
TMD 20
5. Модуль_числа Формат: ABS
Описание. ACCU1 := Abs (ACCU1) ; Содержимое ACCU1 рассматривается
точкой. Берется модуль этого числа и результат сохраняется в ACCU1. |
|
|
||||||
|
BR |
CC1 |
CC0 |
OV |
OS |
OR |
STA |
RLO |
Зависит от |
- |
- |
- |
- |
- |
- |
- |
- |
Воздействует на |
- |
- |
- |
- |
- |
- |
- |
- |
Пример: |
|
|
|
|
|
|
|
|
L -150.12092
ABS
TMD 8 // MD8 :=150.12092
//
L 3.00074
ABS
TMD 12 // MD12 :=3.00074
Содержание
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 |
- |
|
- 2.147.483.648 ≤ |
Сумма < 0 |
|
|
0 |
|
1 |
0 |
- |
|
0 < |
Сумма ≤ + 2.147.483.647 |
1 |
|
0 |
0 |
- |
|||
|
Сумма = - 4.294.967.296 |
0 |
|
0 |
1 |
1 |
|||
+ 2.147.483.647 < |
Сумма ≤ + 4.294.967.724 |
0 |
|
1 |
1 |
1 |
|||
- 4.294.967.295 ≤ |
Сумма < - 2.147.483.648 |
1 |
|
0 |
1 |
1 |
|||
Пример: |
|
|
|
|
|
|
|
|
|
LID 10 // Значение ID10 загружено в ACCU1
LMD 14 // ID10 загружено в ACCU2. Значение MD14
// загружено в ACCU1.
+D // Сложить ACCU2 и ACCU1, результат сохранить в ACCU1.
TDBD 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 Система команд |
|
|
Описание |
||
|
|
Целочисленная_математика |
|||
|
|
|
|
Содержание |
|
Установка битов в слове состояния: |
CC1 |
CC0 |
OV |
OS |
|
|
|
||||
|
Сумма = 0 |
0 |
0 |
0 |
- |
- 32768 ≤ |
Сумма < 0 |
0 |
1 |
0 |
- |
0 < |
Сумма ≤ + 32767 |
1 |
0 |
0 |
- |
|
Сумма = - 65536 |
0 |
0 |
1 |
1 |
+ 32767 < |
Сумма ≤ + 65534 |
0 |
1 |
1 |
1 |
- 65535 ≤ |
Сумма < - 32768 |
1 |
0 |
1 |
1 |
Пример: |
|
|
|
|
|
L IW 10 |
// Значение IW10 загружено в ACCU1_L |
|
|
LMW 14 // Значение IW10 переписывается в ACCU2_L
// Значение MW 14 загружается в ACCU1_L +I // Сложить ACCU2_L и ACCU1_L, результат
// сохранить в ACCU1_L
TDBW 25 // Передать результат в 25-ое слово глобального
//блока данных
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.
TDBW 25 // Передать содержимое ACCU1_L (результат) в
//25-ое слово глобального блока данных.
//
L MD 20 // ACCU1 :=MD20 ;
LMD 24 // ACCU2 :=MD20 ; ACCU1 :=MD24 ;
+D |
// ACCU1 :=ACCU1 + ACCU2 ; |
+-200 // ACCU1_L :=ACCU1_L - 200 ;
T MD 26 // MD26 :=ACCU1 ;
//
LID 12 // ACCU1 :=ID12 ;
LMD 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 |
Зависит от |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Воздействует на |
- |
Х |
Х |
Х |
Х |
- |
- |
- |
- |
Установка битов в слове состояния: |
|
|
CC1 |
CC0 |
OV |
OS |
|||
|
|
|
|
|
|
||||
|
Разность = 0 |
|
|
|
0 |
0 |
0 |
- |
|
- 2.147.483.648 ≤ |
Разность < 0 |
|
|
|
0 |
1 |
0 |
- |
|
0 < |
Разность ≤ + 2.147.483.647 |
1 |
0 |
0 |
- |
||||
+ 2.147.483.647 < |
Разность ≤ + 4.294.967.295 |
0 |
1 |
1 |
1 |
||||
- 4.294.967.295 ≤ |
Разность < - 2.147.483.648 |
|
1 |
0 |
1 |
1 |
Содержание
56
S7-300/400 Система команд |
Описание |
Целочисленная_математика
Содержание
Пример:
LID 10 // ACCU1 :=ID10 ;
L |
MD 14 // ACCU2 |
:=ID10 ; ACCU1 :=MD14 ; |
-D |
// ACCU1 |
:=ACCU2 - ACCU1 ; |
TDBD 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 |
- |
|
- 32768 ≤ |
Разность < 0 |
|
|
0 |
|
1 |
0 |
- |
||
|
0 < |
Разность ≤ + 32767 |
|
1 |
|
0 |
0 |
- |
||
+ 32767 < |
Разность ≤ + 65534 |
|
0 |
|
1 |
1 |
1 |
|||
- 65535 ≤ |
Разность < - 32768 |
|
1 |
|
0 |
1 |
1 |
|||
Пример: |
|
|
|
|
|
|
|
|
|
|
L |
IW |
10 // ACCU1_L :=IW10 ; |
|
|
|
|
|
|
||
L |
MW |
14 // ACCU2_L :=IW10 ; |
ACCU1_L :=MW14 ; |
|
|
|||||
-I |
|
// ACCU1_L :=ACCU2_L - ACCU1_L ; |
|
|
|
TDBW 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 |
OS |
OR |
STA |
RLO |
/FC |
Зависит от |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Воздействует на |
- |
Х |
Х |
Х |
Х |
- |
- |
- |
- |
Содержание
57
S7-300/400 Система команд |
Описание |
Целочисленная_математика Содержание
Установка битов в слове состояния:
|
|
|
|
CC1 |
CC0 |
OV |
OS |
|
|
|
Умн. = 0 |
0 |
0 |
0 |
- |
- 2.147.483.648 ≤ |
Умн. < 0 |
0 |
1 |
0 |
- |
||
|
|
0 < |
Умн. ≤ + 2.147.483.647 |
1 |
0 |
0 |
- |
+ 2.147.483.647 < |
Умн. ≤ + 4.294.967.295 |
0 |
1 |
1 |
1 |
||
- 4.294.967.295 ≤ |
Умн. < - 2.147.483.648 |
1 |
0 |
1 |
1 |
||
Пример: |
|
|
|
|
|
|
|
L |
ID |
10 |
// ACCU1 :=ID10 ; |
|
|
|
|
L |
MD |
14 |
// ACCU2 :=ID10 ; ACCU1 :=MD14 ; |
|
|
|
|
*D |
|
|
// ACCU1 :=ACCU1 * ACCU2 ; |
|
|
|
TDBD 25 // Содержимое ACCU1 (результат) передается в
//25-ое двойное слово глобального блока данных.
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 |
|
Зависит от |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Воздействует на |
- |
Х |
Х |
Х |
Х |
- |
- |
- |
- |
Установка битов в слове состояния: |
|
CC1 |
|
CC0 |
OV |
OS |
|||
|
|
|
|
|
|
||||
|
Умн. = 0 |
|
|
0 |
|
0 |
0 |
- |
|
- 32.768 ≤ |
Умн. < 0 |
|
|
0 |
|
1 |
0 |
- |
|
0 < |
Умн. ≤ + |
32.767 |
|
1 |
|
0 |
0 |
- |
|
+ 32.767 < |
Умн. ≤ + |
1.073.741.824 |
0 |
|
1 |
1 |
1 |
||
- 1.073.709.056 ≤ |
Умн. < - 32.768 |
|
1 |
|
0 |
1 |
1 |
Пример: |
|
|
|
L |
IW 10 |
// ACCU1_L :=IW10 ; |
|
L |
MW 14 |
// ACCU2_L :=IW10 ; |
ACCU1_L :=MW14 ; |
*I |
|
// ACCU1 :=ACCU1_L * ACCU2_L ; |
TDBW 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 |
- |
|
- 2.147.483.648 ≤ |
Частн. < 0 |
|
|
0 |
|
1 |
0 |
- |
|
0 < |
Частн. ≤ + 2.147.483.647 |
1 |
|
0 |
0 |
- |
|||
|
Частн. = + 2.147.483.648 |
1 |
|
0 |
1 |
1 |
|||
|
Деление на нуль |
|
1 |
|
1 |
1 |
1 |
Внимание. Результат деления оказывается равным нулю, когда делимое равно нулю, а также, когда абсолютное значение делимого меньше абсолютного (т.е. без учета знака, или еще говорят 'модуль числа') значения делителя (это является следствием отбрасывания дробной части результата деления).
Пример:
LID 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 |
Зависит от |
- |
- |
- |
- |
- |
- |
- |
- |
- |
Воздействует на |
- |
Х |
Х |
Х |
Х |
- |
- |
- |
- |
Установка битов в слове состояния: |
|
CC1 |
|
CC0 |
OV |
OS |
|||
|
|
|
|
|
|
||||
|
Частн. = 0 |
|
|
0 |
|
0 |
0 |
- |
|
- 32.768 ≤ |
Частн. < 0 |
|
|
0 |
|
1 |
0 |
- |
|
0 < |
Частн. ≤ + 32.767 |
|
1 |
|
0 |
0 |
- |
||
|
Частн. = + 32.768 |
|
1 |
|
0 |
1 |
1 |
||
Пример: |
Деление на нуль |
|
1 |
|
1 |
1 |
1 |
||
|
|
|
|
|
|
|
|
|
|
L IW 10 |
// Пусть IW10=23 |
|
|
|
|
|
|
LMW 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 |
|
CC0 |
OV |
OS |
||||
|
|
|
|
|
|
|
||||
|
|
Остаток = 0 |
|
|
0 |
|
0 |
0 |
- |
|
- 2.147.483.648 ≤ |
Остаток < 0 |
|
|
0 |
|
1 |
0 |
- |
||
|
0 < Остаток ≤ + 2.147.483.647 |
1 |
|
0 |
0 |
- |
||||
Пример: |
Деление на нуль |
|
1 |
|
1 |
1 |
1 |
|||
|
|
|
|
|
|
|
|
|
||
ID |
10 |
// ACCU1 :=ID10 ; |
|
|
|
|
|
|
||
L |
MD 14 |
// ACCU2 :=ID10 ; |
ACCU1 :=MD14 ; |
|
|
|
MOD // Остаток от деления ACCU2 / ACCU1 сохраняется в ACCU1
TMD 20 // Запишем остаток в MD20
Содержание
60
S7-300/400 Система команд |
Описание |
Содержание Команды_программного_контроля
Используя 10 команд данной группы, пользователь может создавать программы со сложной организацией:
Краткое_вступительное_слово
Включить_MCR_ресурс
Выключить_MCR_ресурс
Записать_в_стек
Прочитать_из_стека
Безусловный_вызов_без_параметров
Условный_вызов_без_параметров
Вызов_CALL
Конец_блока
Конец_блока_безусловный
Конец_блока_условный
Содержание
61