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

Учебное пособие 800454

.pdf
Скачиваний:
14
Добавлен:
01.05.2022
Размер:
2.9 Mб
Скачать

L и T (STL) Команды Load (L) и Transfer (T) выпол-

няются независимо от RLO. Данные пересылаются через аккумулятор 1.

Команда Load записывает в аккумулятор 1 значение из источника, указанного после инструкции L. Неиспользуемые разряды 32 -х разрядного аккумулятора 1 устанавливаются в

"0" (рис. 7.4).

Команда Transfer копирует часть или все содержимое аккумулятора 1 по указанному адресу. Когда выполняется команда Transfer, содержимое ACCU1 сохраняется. Одна и та же информация, таким образом, может быть передана по нескольким адресам.

Аккумуляторы являются вспомогательной памятью CPU, которая используется для копирования данных из одного адреса в другой, для команд ср авнения и математических операций. S7-300 имеет 2 аккумулятора, а S7-400 – четыре. В обеих системах аккумуляторы имеют по 32 разряда.

Рис. 7.4. Содержимое аккумулятора при передаче данных

80

ВLAD или FBD Вы можете использовать вход EN блока MOVE для выполнения операций Load и Transfer в зависимости от RLO.

ВSTL загрузка и передача выполняются независимо от RLO, но Вы можете запрограммировать передачу, зависимую от RLO, используя условные переходы для пропуска команд

Load / Transfer.

Инструкции преобразования типов

Команды пересылки только в некоторых случаях могут быть использованы в качестве команд конвертирования числовых форматов разной разрядности (например, DINT -> INT).

Пример: требуется вывести на 7-сегментный индикатор значение вещественной переменой (REAL). Каждый символ на индикаторе это единицы, десятки, сотни и т.д. (тетрады числа в формате BCD). Последовательность преобразований можно представить так: REAL -> DINT -> INT -> BCD. В этой последовательности DINT -> INT осуществляется командой пересылки. Остальные преобразования выполняются инструкциями конвертирования типов (в редакторе LAD/FBD папка

Converter).

Другой пример использования формата BCD - задача обратная. Программа пользователя должна выполнить математические функции, используя значения, вводимые с переключателей. Математические функции не могут выполняться в BCD - формате, поэтому исходный числа должны быть преобразованы в двоичный код (рис. 7.5).

Система команд S7-300/400 имеет в своем составе большое число команд по преобразованию данных. Все эти команды имеют похожий формат:

EN, ENO - если на входе разрешения EN RLO=1, то преобразование выполняется. Выход разрешения ENO всегда имеет тот же сигнал, что и вход EN, кроме отдельных операций, в которых при ошибках ENO устанавливается в 0, что рассмотрено ниже.

81

Рис. 7.5. Операции преобразования, BCD <-> INT

IN - когда EN = 1 значение на входе IN читается для в ы- полнения над ним операции преобразования.

OUT - результат преобразования.

BCD_I / BTI - команда преобразования BCD в integer читает значение на входе IN как трехзначное BCD число (+/- 999) и преобразует его в величину integer (16 бит).

I_BCD / ITB - команда преобразования Integer в BCD читает значение на входе IN как 16-битное целое число (integer) и преобразует его в трехзначное BCD число (+/- 999). Если происходит переполнение, то ENO = 0.

BCD_DI / BTD - преобразует BCD число (+/- 9999999) в формат двойного целого (32 бит).

DI_BCD / DTB - преобразует число в формате двойное целое в семизначное BCD число (+/- 9999999). Если происходит переполнение, то ENO = 0.

Другой пример операции преобразования. В программе пользователя, которая работает с целыми числами (INT), необходимо выполнять деление, которое может иметь результат

82

меньше 1. Поскольку эту величину можно представить только как реальное число, то необходимо преобразование в числа REAL. Таким образом, чтобы сделать деление, целые числа должны быть сначала преобразованы в двойное целое (DINT), а затем в числа REAL (рис 7.6).

Рис. 7.6. Операции преобразования, INT -> DINT -> REAL

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

BCD_I - преобразование BCDкода в INT;

I_BCD - преобразование INT в BCD – код;

BCD_DI - преобразование BCD - кода в DINT;

I_DI - преобразование INT в DINT;

DI_BCD - преобразование DINT в BCD;

DI_R - преобразование DINT в REAL;

INV_I - инверсия числа типа INT;

INV_DI - инверсия числа типа DINT;

NEG_I - дополнительный код числа типа INT;

NEG_DI - дополнительный код числа типа DINT;

83

NEG_R - инверсия знака числа типа REAL;

ROUND - округление до двойного целого;

TRUNC - выделение целой части;

CEIL - округление в ближайшего большего;

FLOOR - округление до ближайшего меньшего.

В командах округления входной операнд имеет тип REAL, выходной – DINT.

Инструкции сравнения CMP оценивают значения двух операндов одинакового типа (рис. 7.7).

Рис. 7.7. Операции сравнения

Вы можете использовать инструкции сравнения CMP, чтобы сравнить два числа в следующих форматах:

I - сравнение двух чисел INT;

D - сравнение двух чисел DINT;

R - сравнение двух чисел REAL.

Входы IN1 и IN2 сравниваются в соответствии с выбранным типом:

== IN1 равно IN2; <> IN1 не равно IN2;

84

> IN1 больше IN2;

< IN1 меньше IN2;

>= IN1 больше или равно IN2;

<= IN1 меньше или равно IN2.

Если условие сравнения выполняется, то RLO получает значение "1". Он сопрягается с результатами опроса последующих логических операций по схеме И, если они находятся в последовательной цепи и по схеме ИЛИ в случае параллельной цепи.

Поразрядные логические инструкции над словами

комбинируют пары слов (16 бит) или двойных слов (32 бита) побитно в соответствии с правилами булевой логики (рис. 7.8).

Рис. 7.8. Операции цифровой логики

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

WAND_W - поразрядное И над словами

WOR_W - поразрядное ИЛИ над словами

WXOR_W - поразрядное исключающее ИЛИ над слова-

ми

85

WAND_DW - поразрядное И над двойными словами

WOR_DW - поразрядное ИЛИ над двойными словами

WXOR_DW - поразрядное исключающее ИЛИ над двойными словами

Операция выполняет над величинами, указанными на входах IN1и IN2, поразрядное “умножение” в соответствии с таблицей истинности для операции AND. Результат операции сохраняется по адресу, указанному на выходе OUT. Инструкция выполняется, когда EN = 1.

Математические инструкции

Система команд S7-300/400 поддерживает ряд математических функций (рис. 7.9).

Рис. 7.9. Основные математические функции

Все команды имеют аналогичный формат:

EN - команда выполняется, если на входе разрешения EN

RLO=1 .

ENO - если результат находится за пределами допустимого диапазона для соответствующего типа данных, биты пе-

86

реполнения OV и сохраненного переполнения OS устанавливаются в единицу, а на выходе разрешения ENO=0. Это предотвращает от выполнения последующие операции связанные с выходом ENO.

IN1, IN2 - величина на входе IN1 читается как первый операнд, а величина на входе IN2 как второй.

OUT - результат математической операции сохраняется по адресу, указанному на выходе OUT.

Используя математические инструкции с целыми числами, Вы можете выполнять операции с двумя числами типа

Integer (16 и 32 битовыми):

ADD_I - сложение целых чисел

SUB_I - вычитание целых чисел

MUL_I - умножение целых чисел

DIV_I - деление целых чисел

ADD_DI - сложение двойных целых чисел

SUB_DI - вычитание двойных целых чисел

MUL_DI - умножение двойных целых чисел

DIV_DI - деление двойных целых чисел

MOD_DI - получение остатка от деления двойных целых чисел

Вы можете использовать математические инструкции с плавающей точкой для выполнения следующих математических операций, использующих два 32–битных числа с плавающей точкой (вещественный тип данных REAL) в формате

IEEE:

ADD_R – сложение;

SUB_R – вычитание;

MUL_R – умножение;

DIV_R – деление;

ABS - вычисление абсолютного значения числа с плавающей точкой;

SQR - вычисление квадрата и квадратного корня (SQRT) числа с плавающей точкой;

87

LN - вычисление натурального логарифма числа с плавающей точкой;

EXP - вычисление экспоненты числа с плавающей точкой по основанию e (е = 2.71828...);

Вычисление следующих тригонометрических функций угла, представленного в виде 32–битного числа с плавающей точкой:

- синуса числа с плавающей точкой (SIN) и арксинуса числа с плавающей точкой (ASIN);

- косинуса числа с плавающей точкой (COS) и арккосинуса числа с плавающей точкой (ACOS);

- тангенса числа с плавающей точкой (TAN) и арктангенса числа с плавающей точкой (ATAN).

Инструкции сдвига

С помощью инструкций сдвига Вы можете побитно сдвигать содержимое входа IN влево или вправо (рис. 7.10).

Рис. 7.10. Операции сдвига (слово / двойное слово)

Число, задаваемое Вами для входного параметра N, показывает, на сколько битов должен производиться сдвиг. Разря-

88

ды, освобождающиеся вследствие операции сдвига, заполняются нулями или состоянием знакового бита (”0” в случае положительного числа, ”1” в случае отрицательного числа). Бит, сдвигаемый последним, загружается в бит СС1 слова состояния. Биты CC0 и OV сбрасываются в “0”. Вы можете оценить бит CC1 слова состояния с помощью операций перехода. Вы можете использовать следующие инструкции сдвига:

SHR_I - сдвиг вправо числа типа Integer

SHR_DI - сдвиг вправо числа типа Double Integer

SHL_W - сдвиг слова влево

SHR_W - сдвиг слова вправо

SHL_DW - сдвиг двойного слова влево

SHR_DW - сдвиг двойного слова вправо

Сдвиг на n битов влево умножает содержимое входа IN на 2n; сдвиг на n битов вправо делит содержимое входа IN на

2n (рис. 7.11).

Рис. 7.11. Сдвиг вправо числа со знаком

SHR_I / SSI - операция Shift Right Signed Integer (сдвиг вправо со знаком) сдвигает вправо только ACCU1-L (биты 0 -

89