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