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

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

.pdf
Скачиваний:
937
Добавлен:
16.02.2016
Размер:
4.28 Mб
Скачать
как число с плавающей
/FC
-
-
/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

Зависит от

-

-

-

-

-

-

-

-

Воздействует на

-

Х

Х

Х

Х

-

-

-

Пример:

 

 

 

 

 

 

 

 

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