Программируемые логические контроллеры SIMATIC S7-300 400. лабораторный практикум. Таратынов О.Ю., Ткалич С.А
.pdfL и 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