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

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

.pdf
Скачиваний:
937
Добавлен:
16.02.2016
Размер:
4.28 Mб
Скачать

S7-300/400 Система команд

Описание

Команды_сравнения

Содержание

Команды сравнения представлены тремя подгруппами:

Сравнение_длинных_целых_чисел_со_знаком

Сравнение_целых_чисел_со_знаком

Сравнение_вещественных_чисел

Содержание

22

Зависит от Воздействует на
/FC
-
1
OR
-
0
OV
-
0
CC1
-
Х
RLO
-
Х
STA
-
Х
CC0
-
Х
OS
-
-

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

-

-

Следующая таблица показывает, какое значение будет записано в бите 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'

0

1

1

Пример:

LMD 10

LID 24

>D

// Если ACCU2 ( MD 10 ) больше чем ACCU1 (ID 24 ),

//то бит RLO будет установлен

=M 2.0 // 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 Система команд

Описание

Команды_преобразования Содержание

Пример:

LMD 10 // Пусть, например, в MD10 было +500

DTR

// Преобразование

TMD 20 // Результат запишем в 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

OS

OR

STA

RLO

/FC

Зависит от

-

-

-

-

-

-

-

-

-

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

-

Х

Х

Х

Х

-

-

-

-

Содержание

29

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 не изменяется.

 

BR

CC1

CC0

OV

OS

OR

STA

RLO

/FC

Зависит от

-

-

-

-

-

-

-

-

-

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

-

-

-

-

-

-

-

-

-

Пример:

 

 

 

 

 

 

 

 

 

L МD 2

// Пусть, например, МD2 = 1.5E+02

 

 

 

NEGR

 

 

 

 

 

 

 

 

 

TMD 2 // Теперь 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

OS

OR

STA

RLO

/FC

Зависит от

-

-

-

-

-

-

-

-

-

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

-

-

-

Х

Х

-

-

-

-

Содержание

31