Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

2. Вычитание. Содержание  Целочисленная_математика




2. Вычитание

Формат: -R  

Описание. ACCU1: = ACCU2 - ACCU1;

Содержимое ACCU1 и ACCU2 рассматривается как числа с плавающей точкой. Из содержимого ACCU2 вычитается содержимое ACCU1 и результат сохраняется в ACCU1. По значению битов CC1, CC0, OS и OV можно судить о результате вычитания (см. таблицу, приведенную в описании команды '+R').

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

Пример:

       OPN DB 10

       L  -3. 90289

       L  MD 14

       -R

       T  DBD 25

3. Умножение

       Формат: *R

Описание. ACCU1: = ACCU1 * ACCU2;

Содержимое ACCU1 и ACCU2 рассматривается как числа с плавающей точкой. Содержимое ACCU2 умножается на содержимое ACCU1 и результат сохраняется в ACCU1. По значению битов CC1, CC0, OS и OV можно судить о результате умножения (см. таблицу, приведенную в описании команды '+R').

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

Пример:

       OPN DB 25

       L     ID   10 

       L     MD 14

       *R

       T     DBD 25

Содержание


Математика_с_плавающей_точкой

Содержание

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 STA RLO /FC
Зависит от - - - - - - - - -
Воздействует на - - - - - - - - -

Пример:

       L  -150. 12092

       ABS

       T  MD 8  // MD8: =150. 12092

       //

       L  3. 00074

       ABS

       T  MD 12 // MD12: =3. 00074

Содержание


Содержание                                            Целочисленная_математика

Десяти команд, образующих данную группу, вполне достаточно для организации целочисленных вычислений:

8 Сложение_Long_Integer

8 Сложение_Integer

8 Сложение_с_константой

8 Вычитание_Long_Integer

8 Вычитание_Integer

8 Умножение_Long_Integer

8 Умножение_Integer

8 Деление_Long_Integer

8 Деление_Integer

8 Остаток_от_деления

Содержание


Целочисленная_математика

Содержание

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 -
- 2. 147. 483. 648 £ Сумма < 0 -
                         0 < Сумма £ + 2. 147. 483. 647 -
                                 Сумма = - 4. 294. 967. 296
+ 2. 147. 483. 647 < Сумма £ + 4. 294. 967. 724
- 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
Зависит от - - - - - - - - -
Воздействует на - Х Х Х Х - - - -

Содержание


Целочисленная_математика

Содержание

Установка битов в слове состояния:

  CC1 CC0 OV OS
                                 Сумма = 0 -
              - 32768 £ Сумма < 0 -
                         0 < Сумма £ + 32767 -
                                 Сумма = - 65536
             + 32767 < Сумма £ + 65534
              - 65535 £ Сумма < - 32768

Пример:

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-ое слово глобального

                                 // блока данных

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
Зависит от - - - - - - - - -
Воздействует на - - - - - - - - -

Содержание


Целочисленная_математика

Содержание

Пример:

       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
Зависит от - - - - - - - - -
Воздействует на - Х Х Х Х - - - -

Установка битов в слове состояния:

  CC1 CC0 OV OS
                               Разность = 0 -
- 2. 147. 483. 648 £ Разность < 0 -
                       0 < Разность £ + 2. 147. 483. 647 -
+ 2. 147. 483. 647 < Разность £ + 4. 294. 967. 295
- 4. 294. 967. 295 £ Разность < - 2. 147. 483. 648

Содержание


Целочисленная_математика

Содержание

Пример:

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 -
     - 32768 £ Разность < 0 -
                0 < Разность £ + 32767 -
    + 32767 < Разность £ + 65534
     - 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 OS OR STA RLO /FC
Зависит от - - - - - - - - -
Воздействует на - Х Х Х Х - - - -

Содержание


Целочисленная_математика

Содержание

Установка битов в слове состояния:

  CC1 CC0 OV OS
                                 Умн. = 0 -
- 2. 147. 483. 648 £ Умн. < 0 -
                         0 < Умн. £ + 2. 147. 483. 647 -
+ 2. 147. 483. 647 < Умн. £ + 4. 294. 967. 295
- 4. 294. 967. 295 £ Умн. < - 2. 147. 483. 648

Пример:

L  ID 10 // ACCU1: =ID10;  

L  MD 14 // ACCU2: =ID10; ACCU1: =MD14;

*D                 // ACCU1: =ACCU1 * ACCU2;

T  DBD 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 -
             - 32. 768 £ Умн. < 0 -
                         0 < Умн. £ + 32. 767 -
            + 32. 767 < Умн. £ + 1. 073. 741. 824
- 1. 073. 709. 056 £ Умн. < - 32. 768

Пример:

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-ое слово глобального блока данных

Содержание


Целочисленная_математика

Содержание

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 -
- 2. 147. 483. 648 £ Частн. < 0 -
                         0 < Частн. £ + 2. 147. 483. 647 -
                                 Частн. = + 2. 147. 483. 648
                                 Деление на нуль

Внимание. Результат деления оказывается равным нулю, когда делимое равно нулю, а также, когда абсолютное значение делимого меньше абсолютного (т. е. без учета знака, или еще говорят 'модуль числа') значения делителя (это является следствием отбрасывания дробной части результата деления).

Пример:

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.

Содержание


Целочисленная_математика

Содержание

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

Установка битов в слове состояния:

  CC1 CC0 OV OS
                                 Частн. = 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 CC0 OV OS
                               Остаток = 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

Содержание


Содержание                              Команды_программного_контроля

Используя 10 команд данной группы, пользователь может создавать программы со сложной организацией:

8 Краткое_вступительное_слово

8 Включить_MCR_ресурс

8 Выключить_MCR_ресурс

8 Записать_в_стек

8 Прочитать_из_стека

8 Безусловный_вызов_без_параметров

8 Условный_вызов_без_параметров

8 Вызов_CALL

8 Конец_блока

8 Конец_блока_безусловный

8 Конец_блока_условный

Содержание


Команды_программного_контроля

Содержание

Краткое_вступительное_слово

Начнем с краткого вступительного слова. В контроллерах семейства 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, стек при этом автоматически сдвигается вверх.

Содержание


Команды_программного_контроля

Содержание

Эти две команды должны использоваться совместно. Естественно, возможны вложения, но при переполнении стека формируется ошибка (размер стека =8).

Когда ресурс MCR включен, следующие команды (их выполнение):

- '=' (присвоить бит)

- 'S' (установить бит)

- 'R' (сбросить бит)

- 'T' (перенос/передача B, W или DW)

зависят от текущего состояния бита MA (т. е. от вершины стека).

1. Включить_MCR_ресурс                                                              MCRA

Формат:       MCRA

Описание. Данная команда включает MCR ресурс.

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

2. Выключить_MCR_ресурс                                                           MCRD

Формат:       MCRD

Описание. Данная команда выключает MCR ресурс.

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

3. Записать_в_стек                                                                            MCR(

Формат:       MCR(

Описание. Команда записывает RLO в вершину стека MCR ресурса. Уровень вложенности увеличивается на единицу.

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

4. Прочитать_из_стека                                                                      )MCR

Формат:       )MCR

Описание. Команда переносит вершину стека MCR ресурса в RLO. Уровень вложенности уменьшается на единицу.

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

Вопрос. Прокомментировать для 3. и 4. зависимость и воздействие на флаги?

Содержание


Команды_программного_контроля

Содержание

5. Безусловный_вызов_без_параметров

Формат:       UC < идентификатор лог. блока>

Описание. Безусловный вызов логического блока без передачи параметров. Команда сохраняет адрес возврата (селектор и относительный адрес), селекторы текущих DB и DI, бит MA в B-стеке, отключает MCR зависимость, создает распределение памяти под локальные данные.

Внимание. Используя данную команду, Вы не можете связать некий DI с вызываемым логическим блоком, то есть нельзя UC FB 3, DI 2

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...