SIEMENS Промышленные контроллеры SIMATIC S7-300/400 Описание_системы_команд Содержание S7-300/400 Система команд Описание Вступительное_слово Работа_с_аккумулятором Команды_битовой_логики Команды_сравнения Команды_преобразования Счетчики Команды_для_работы_с_блоками_данных Команды_переходов Команды_загрузки_и_передачи Математика_с_плавающей_точкой Целочисленная_математика Команды_программного_контроля Команды_сдвигов Таймеры Логика_для_WORD_и_DWORD Начало 3 Стр. 4 10 13 22 25 33 37 39 44 49 53 61 66 72 77 S7-300/400 Система команд Описание Вступительное_слово Содержание Система команд – это тот инструмент, с помощью которого пользователь пишет программу для контроллера. Собственно, речь идет о модуле CPU, который является центральным устройством любого контроллера. Размещенная в энергонезависимой памяти операционная система реального времени дополняет систему команд, предоставляя пользователю множество сервисных функций. Общее правило состоит в том, что чем старше модель CPU, тем она более производительная, тем больше у нее возможностей. Рассмотрим области, в которых могут находиться операнды: • Отображаемые области цифровых входов I и выходов Q (немецкие сокращения E и A соответственно). Программа пользователя не обращается непосредственно к входам/выходам, обращение идет в память, в область отображения. • Область неотображаемых входов PI и выходов PQ (немецкие сокращения PE и PA соответственно). Программа пользователя обращается непосредственно к этим входам/выходам. Модули цифровых входов/выходов располагаются в адресном пространстве ввода/вывода, начиная с нулевого адреса, и попадают в область отображения. Модули аналоговых сигналов располагаются сразу за отображаемой областью (начало неотображаемой области адресного пространства ввода/вывода, типичным значением является начальный адрес 256) • Область локального стека L. Размер этой области зависит от максимально возможного числа одновременных1 событий. Старшие модели CPU реагируют на большее число событий, также как и число одновременно обрабатываемых событий у них больше. Суть состоит в том, что для каждой модели CPU в любой момент времени не может возникнуть одновременных событий больше, чем Х (например, для S7-312 IFM Х=2, причем общее число обрабатываемых событий равно 3). С каждым событием жестко связан конкретный организационный блок, то есть ОВ является обработчиком события. Если событие возникло, и пользователь на этапе программирования создал соответствующий ОВ, то возможно управление будет передано этому ОВ. Это произойдет, если приоритет текущего ОВ ниже приоритета вызываемого ОВ. Содержание 1 Под выражением “Одновременные события” понимается ситуация, когда в процессе обработки предыдущего события формируется новое, более приоритетное событие, и т.д. То есть, образуется цепочка вложенных обработчиков событий. 4 S7-300/400 Система команд Описание Вступительное_слово Содержание Как только ОВ получит управление, он считается активным до того момента, пока не завершится. Каждый активный ОВ имеет свой локальный стек в области локального стека. В этом стеке хранятся временные переменные, как самого ОВ, так и все фактические параметры, локальные переменные функций и функциональных блоков, вызываемых из данного ОВ. Для примера, снова вернемся к модели CPU S7-312 IFM, область локального стека имеет размер 512 байт, что позволяет одновременно открыть только два ОВ, по 256 байт на блок. • Область меркеров М используется для хранения рабочих параметров, промежуточных результатов, каких-либо флагов и так далее. Если операционная система контроллера обслуживает Ваш запрос (например, Вы вызвали функциональный системный блок), то следует учитывать, что SFB или SFC могут использовать область меркеров для работы со своими переменными. Обычно SFB и SFC используют старшие адреса, поэтому пользователю рекомендуется использовать память меркеров, начиная с младших адресов. • Глобальные блоки данных DB • Локальные блоки данных DI • Таймеры Т и счетчики С (немецкое обозначение Z) • Регистры процессора Операнды могут принадлежать одному из множества допустимых типов: • • • • • • • • • • • • • • • • BOOL BYTE CHAR – символьный тип, например “А”, длина 1 байт WORD DWORD INT – целое число со знаком, длина 1 слово (Integer) DINT – длинное целое число со знаком, длина 2 слова (Long Integer) REAL – число с плавающей точкой, формат представления IEEE, длина 2 слова TIME – текущее время, длина 2 слова TIME_OF_DAY – время дня, длина 2 слова S5TIME – совместимость с серией S5, длина 1 слово DATE – дата, длина 1 слово DATE_AND_TIME – сложный тип данных, длина 4 слова ARRAY – сложный тип данных, массив STRING – сложный тип данных, строка UNDEF – неопределенный тип Содержание 5 S7-300/400 Система команд Описание Вступительное_слово Содержание TIME Интервал [-24d20h31m23s647ms … +24d20h31m23s647ms] Формат соответствует DINT, единица измерения 1 ms Пример: T#5h10s Рассмотрим еще один пример: T#24d59s999ms → 7B99 8A5F h T# -24s → FFFF A240 h Небольшое отступление. Как получить -24 [s]? Ответ: 24 [s] = 5DC0 h [ms] = 00000000 00000000 01011101 11000000 [ms] Теперь вычитаем 1 и инвертируем, в результате получится: 11111111 11111111 10100010 01000000 = FFFF A240 h. То есть получили -24 [s]. Естественно, обратное преобразование (инвертируем, затем прибавляем 1) позволяет из отрицательного числа получить положительное. TIME_OF_DAY Интервал [00:00:00.000 … 23:59:59.999] Формат соответствует DWORD, единица значение 00:00:00.000 – полночь. Пример: TOD#00:18:25.207 TOD#07:10:02 Миллисекунды указывать необязательно. измерения 1 ms, S5TIME – Совместимость_с_серией_S5, длина 1 слово Интервал [0 ms … 2h46m30s] Пример: S5T#10ms S5T#1h15m20s Рассмотрим более подробно используемый формат: Напомним общее правило. Адресация слова, двойного слова осуществляется по адресу старшего байта (более значащие разряды), так как он располагается в памяти по младшему адресу. Биты 15, 14 не используются Биты 13, 12 определяют базис времени: В этом случае рабочий Бит 13 Бит 12 Базис времени диапазон составляет 0 0 0.01 s [10ms … 9s990ms] 0 1 0.1 s [100ms … 1m39s900ms] 1 0 1s [1s … 16m39s] 1 1 10 s [10s … 2h46m30s] Содержание 6 S7-300/400 Система команд Описание Вступительное_слово Содержание Биты 11, 10, 9, 8 – старшая BCD цифра, определяет число сотен Биты 7, 6, 5, 4 – средняя BCD цифра, определяет число десятков Биты 3, 2, 1, 0 – младшая BCD цифра, определяет число единиц Эти три BCD цифры определяют значение коэффициента в диапазоне [0 … 999]. Зная значения базиса и коэффициента, можно рассчитать заданное время: ВРЕМЯ := Коэффициент * Базис ; DATE Интервал [1990-01-01 … 2168-12-31] Формат соответствует WORD, единица измерения 1 день, нулевое значение соответствует дате 1990-01-01. Пример: D#1998-11-23 DATE_AND_TIME Интервал [1990-01-01/00:00:00.000 … 2089-12-31/23:59:59.999] Пример: DT#1996-09-15-19:54:15.228 Для записи данных такого типа используются 8 байтов, содержимое представляется в BCD формате. Как Вы помните, старший байт располагается в памяти по младшему адресу. Значащи Условный Адрес е адрес байта в Назнач Диапазон значений разряды байта заголовк ение е ОВ1 Ст. байт 0 12 Год [00 … 99], значение 00 соответствует 1990 1 13 Мес [01 … 12] 2 14 День [01 … 31] 3 15 Час [00 … 23] 4 16 Мин [00 … 59] 5 17 Сек [00 … 59] 6 18 ms В данном байте находятся 2 старшие ms, определяя сотни и десятки [00x … 99x] Мл. байт 7 19 ms Старшая тетрада задает единицы ms [0 … 9] Младшая тетрада содержит день недели [1 … 7], значение 1 соответствует Sunday (Воскресенье) Относительно столбца “Адрес байта в заголовке ОВ1” хотелось бы сделать некоторые пояснения. Содержание 7 S7-300/400 Система команд Описание Вступительное_слово Содержание Как Вы знаете, каждый активный ОВ имеет стек в области локального стека. В момент вызова ОВ, в его стек автоматически записывается заголовок. Среди прочей информации, в заголовке присутствуют дата и время запуска ОВ. Эти дата и время размещены по приведенным в таблице адресам. Наряду с переменными, в качестве операнда могут использоваться константы: № Константа Пример 1 Константой является L ‘ABC’ группа символов в ASCII коде 2 2 или 4 байта L B#(100,12) L B#(50,8,3,72) 3 BYTE, WORD или L B#16#F7 DWORD, представленные L W#16#12 в 16-ричной системе L DW#16#EECD03E1 4 WORD или DWORD, L 2#1000111101010011 представленные в 2- L 2#11110000111100001010101011101110 ичной системе 5 Константа типа INT L -27 6 Константа типа DINT L L#19346458 7 Константа типа REAL L -8014.01 8 Константа типа TIME L T#500ms L T#1d5h3m21s2ms 9 Константа типа TIME OF L TOD#12:31:05.314 DAY 10 Константа типа S5TIME L S5T#10ms 11 Константа типа DATE L D#1996-05-22 12 Указатель на адрес Формат константы соответствует формату адресного регистра, что дает возможность указать не только адрес, но и область, в которой должен находиться операнд. L P#22.1 //Не указывая конкретно в какой области должен //находиться операнд, сообщается, что этим операндом будет бит, //расположенный по адресу 22.1 L P#Q22.1 //В отличие от предыдущего примера, в данном //случае дополнительно сообщается, что операнд будет именно из //области выходов Содержание 8 S7-300/400 Система команд Описание Вступительное_слово Содержание Замечание относительно использования указателя. Если указатель должен указывать на байт, слово или двойное слово, то необходимо задавать адрес байта и номер бита, причем номер бита должен быть равен 0 (L P#124.0). Данное требование обусловлено специфичным форматом адресных регистров. Приведем несколько примеров адресации: AN I3.7 //Адресуется входной бит L MB4 //Загружается в ACCU1 меркерный байт T QW0 //Передается слово на выход L PIW258 //Читаем аналоговое значение OPN DB3 //Открываем блок данных L DB3.DBB14 //Читаем 14 байт в этом блоке L DB3.DBX0.5 //Там же читаем 5-тый бит из нулевого байта Общий формат команды при использовании косвенной адресации: <команда> YX [адресный регистр, указатель], где Y определяет область нахождения операнда (и его указывать не обязательно), X задает размер операнда (B – байт, W – слово, D – двойное слово). Приведем пример: L B [AR1, P#8.0] Данная команда загружает байт в ACCU1. Адрес этого байта представляет собой сумму адресов: адресный регистр AR1 и адрес 8.0. Область, в которой должен находиться операнд, определяется адресным регистром. Например, адресный регистр можно проинициализировать двумя командами: L P#Q116.0 LAR1 //Таким образом, AR1 будет указывать на область выходов Еще один пример косвенной адресации: L MB [AR2, P#12.0] Второй пример отличается от первого тем, что явно задана область нахождения операнда (байт из области меркеров) Выше были рассмотрены примеры абсолютной адресации. STEP7 дает пользователю возможность работать с именами. Такая адресация носит название символьной. В заключение отметим, что SIEMENS постоянно совершенствует свои изделия, поэтому при работе с этим документом следует учитывать фактор старения информации. Обращайтесь за актуальной информацией к официальным партнерам фирмы SIEMENS, либо непосредственно в SIEMENS. Как в процессе подготовки, так и после завершения работы над документом, мы проверяли его на отсутствие ошибок, неточностей и опечаток. Однако мы не гарантируем полное их отсутствие. Поэтому, во всех неясных случаях советуем обращаться к оригиналу. Содержание 9 S7-300/400 Система команд Описание Работа_с_аккумулятором Содержание Команды данной группы не зависят и не воздействуют на регистр флагов: Декремент_Аккумулятора Инкремент_Аккумулятора Вталкивание_в_старшие_Аккумуляторы Выталкивание_из_старших_Аккумуляторов Загрузка_старших_Аккумуляторов Разгрузка_старших_Аккумуляторов Поменять_содержимое_Аккумуляторов Загрузка_первого_адресного_регистра Загрузка_второго_адресного_регистра Холостые_команды Содержание 10 S7-300/400 Система команд Описание Работа_с_аккумулятором Содержание 1. Декремент_Аккумулятора Формат: DEC <byte> Описание. ACCU1_LL :=ACCU1_LL - <byte> 2. Инкремент_Аккумулятора Формат: INC <byte> Описание. ACCU1_LL :=ACCU1_LL + <byte> 3. Вталкивание_в_старшие_Аккумуляторы Формат: PUSH Описание. На всех моделях CPU имеется два Аккумулятора, а на нескольких более производительных – четыре. Для случая двух Аккумуляторов выполняется присваивание ACCU2 :=ACCU1. Для четырех Аккумуляторов выполняются три присваивания ACCU4 :=ACCU3, ACCU3 :=ACCU2, ACCU2 :=ACCU1. 4. Выталкивание_из_старших_Аккумуляторов Формат: POP Описание. Действие данной команды противоположно предыдущей. В случае двух Аккумуляторов действие состоит в присваивании ACCU1 :=ACCU2. Для четырех Аккумуляторов выполняются три присваивания ACCU1 :=ACCU2, ACCU2 :=ACCU3, ACCU3 :=ACCU4. 5. Загрузка_старших_Аккумуляторов Формат: ENT Описание. Данная команда работает только в том случае, если в модуле процессора контроллера имеется четыре аккумулятора. Она загружает старшие Аккумуляторы ACCU4 :=ACCU3, ACCU3 :=ACCU2, ACCU2 и ACCU1 без изменения. 6. Разгрузка_старших_Аккумуляторов Формат: LEAVE Описание. Данная команда работает только в том случае, если в модуле процессора контроллера имеется четыре аккумулятора. Она разгружает старшие Аккумуляторы ACCU2 :=ACCU3, ACCU3 :=ACCU4, ACCU1 и ACCU4 без изменения. 7. Поменять_содержимое_Аккумуляторов Формат: TAK Описание. Содержимое ACCU1 и ACCU2 меняется местами. Содержание 11 S7-300/400 Система команд Описание Работа_с_аккумулятором Содержание 8. Загрузка_первого_адресного_регистра Формат: +AR1, либо +AR1 P#byte.bit Описание. Сначала рассмотрим команду +AR1. В этом случае берется значение из ACCU1_L. CPU рассматривает его как целое число со знаком в диапазоне от -32768 до +32767, т.е. integer. Выполняется корректное преобразование этого числа в 24-ех битное смещение, которое затем суммируется с содержимым AR1 (осуществляется сложение адресов: адреса из адресного регистра AR1 и полученного смещения). Результирующий адрес сохраняется в AR1. В команде +AR1 P#byte.bit к содержимому AR1 добавляется содержимое указателя. Таким образом, осуществляется сложение двух адресов: адреса из адресного регистра AR1 и адреса, на который указывает данный указатель. Результирующий адрес сохраняется в AR1. Замечание. Расширение до 24-ех бит является следствием специфичности формата адресного регистра. 9. Загрузка_второго_адресного_регистра Формат: +AR2, либо +AR2 P#byte.bit Описание. Алгоритм работы данной команды алгоритму работы предыдущей команды. аналогичен 10. Холостые_команды Описание. Существует три холостых команды: • Холостая команда BLD <byte> с параметром от 0 до 255 • Холостая команда NOP 0, состоящая из одних нулей • Холостая команда NOP 1, состоящая из одних единиц Иногда они применяются для тестовых целей, иногда для наглядности. Содержание 12 S7-300/400 Система команд Описание Команды_битовой_логики Содержание ИЛИ И_перед_ИЛИ ИЛИ_с_открывающей_скобкой ИЛИ_с_отрицанием ИЛИ_с_отрицанием_и_открывающей_скобкой И И с_открывающей_скобкой И с_отрицанием И с_отрицанием_и_открывающей_скобкой Исключающее_ИЛИ Исключающее_ИЛИ_с_открывающей_скобкой Исключающее_ИЛИ_с_отрицанием Исключающее_ИЛИ_с_отрицанием_и открывающей скобкой Закрывающая_скобка Запись_результата Сбросить_RLO Установить_RLO Инвертировать_RLO Сохранить_RLO_в_BR Установить_адресуемый_бит Сбросить_адресуемый_бит Зафиксировать_положительный_фронт Зафиксировать_отрицательный_фронт Содержание 13 S7-300/400 Система команд Описание Команды_битовой_логики Содержание 1. ИЛИ O I 1.7 O M 0.1 = Q 124.3 // Или входной бит 1.7 , // или бит 0.1 из области меркерной памяти // Результат записать в выходной бит 124.3 BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на 0 Х Х 1 Команда может адресовать бит из следующих областей: I, Q, M, L, блоки данных, T и C . 2. И_перед_ИЛИ A "button_1" // Здесь применяется символическая AN "button_2" // адресация O A "motor_N9" A "motor_N23" = "pump_N4_Off" Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR 0 STA Х RLO - /FC 1 3. ИЛИ_с_открывающей_скобкой O( A I 1.0 A I 1.1 ) O M 24.0 ON M 24.1 = M 1.0 Содержание 14 S7-300/400 Система команд Описание Команды_битовой_логики Содержание Зависит от Воздействует на BR * - CC1 - CC0 - OV - OS - OR * 0 STA 1 RLO * - /FC * 0 4. ИЛИ_с_отрицанием ON I 124.0 ON I 124.1 = Q 124.7 // Логическая единица будет записана в Q124.7 // в том случае, если хотя бы на одном из входов присутствует // логический нуль BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на 0 Х Х 1 5. ИЛИ_с_отрицанием_и_открывающей_скобкой ON( // Выполнится функция логического 'И' над A I 0.7 // I 0.7 и I 0.6 , затем результат инвертируется A I 0.6 // и участвует в функции логического ) // 'ИЛИ' с операндом M 12.1 O M 12.1 = Q 22.1 BR CC1 CC0 OV OS OR STA RLO Зависит от * * * Воздействует на 0 1 - /FC * 0 6. Логическое_И A I 124.1 A I 124.7 = Q 124.1 BR Зависит от Воздействует на - /FC * 1 CC1 - CC0 - OV - Содержание 15 OS - OR * Х STA Х RLO * Х S7-300/400 Система команд Описание Команды_битовой_логики Содержание 7. И_с_открывающей_скобкой A ERROR_FLAG A( O Activate_Check O LOGON_off ) A I 124.1 = START Зависит от Воздействует на BR * - CC1 - CC0 - OV - OS - OR * 0 STA - RLO * 1 /FC * 0 8. И_с_отрицанием AN OFF // Выполняется функция логического 'И' A POWER_ON // над POWER_ON и инверсным значением OFF = Q 124.1 // Результат записывается в Q 124.1 BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * * Воздействует на Х Х Х 1 9. И_с_отрицанием_и_открывающей_скобкой AN( // Выполняется 'ИЛИ' над worker_1 и worker_2, O worker_1 // затем полученный результат инвертируется и O worker_2 // далее выполняется логическое ‘И’ над ) // инвертированным результатом и операндом A main_worker // main_worker = Start_motor BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * * * Воздействует на 0 1 0 Содержание 16 S7-300/400 Система команд Описание Команды_битовой_логики Содержание 10. Исключающее_ИЛИ X I 1.0 X I 1.1 = Q 0.0 BR CC1 Зависит от Воздействует на - CC0 - OV - OR 0 STA Х RLO * Х /FC * 1 11. Исключающее_ИЛИ_с_открывающей_скобкой X( O I 124.0 O I 24.7 ) X I 124.5 = Q 0.0 BR CC1 CC0 OV OS OR Зависит от * * Воздействует на 0 STA 1 RLO * - /FC * 1 12. Исключающее_ИЛИ_с_отрицанием XN I 124.4 X M 1.0 = Q 124.3 BR CC1 CC0 OV OS Зависит от Воздействует на - STA Х RLO * Х /FC * 1 13. Исключающее_ИЛИ_с_отрицанием_и отрывающей скобкой XN( A I 124.7 A "Turbo_box" ) X "Turbo_II" = "Result" BR CC1 CC0 OV OS OR STA RLO Зависит от * * * Воздействует на 0 1 - /FC * 0 Содержание 17 OS - OR 0 S7-300/400 Система команд Описание Команды_битовой_логики Содержание Итак, три основных логических команды в различных вариантах применения представлены выше. Для них можно сделать следующие обобщающие замечания: 1. Использование скобок позволяет реализовать сложные логические схемы (до 8-ми уровней вложенности) 2. Команды с отрицанием отличаются от команд без отрицания только тем, что для участия в логической операции берется не сам операнд, а его инверсное значение (аналогично, инвертируется результат логической схемы, заключенной в скобки) 14. Закрывающая_скобка Формат: ) Описание. Закрывающей скобке должна предшествовать открывающая скобка, для чего используется одна из следующих команд: O(, ON(, A(, AN(, X( или XN( . Команды битовой логики, находящиеся внутри этих скобок, выполняются "в едином ключе". Закрывающая скобка восстанавливает значение битов BR и OR. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на Х 1 Х 1 Пример: A( O I 124.0 O M 12.3 ) A( O Q 124.5 O M 12.4 ) A I 124.1 = M 1.7 15. Запись_результата Формат: = <адресуемый бит> Описание. Адресуемый бит может находиться в одной из следующих областей: входы, выходы, локальный стек, меркеры, блок данных. Данная команда зависит от MCR ресурса. Видимо, более частым случаем является ситуация, когда MCR ресурсом не пользуются, тогда в адресуемый бит записывается значение RLO. (Именно в бите RLO содержится результат логической операции) Содержание 18 S7-300/400 Система команд Описание Команды_битовой_логики Содержание Если же ресурс MCR в данный момент включен, то в адресуемый бит будет записано текущее значение RLO только в том случае, если бит MA = 1 (вершина стека MCR ресурса), иначе в адресуемый бит запишется нуль. BR - CC1 - CC0 - OV - Зависит от Воздействует на Пример: A I 0.1 A I 124.0 = M 2.7 // Выполняем присвоение OS - OR 0 STA Х RLO * - /FC 0 OS - OR 0 STA 0 RLO 0 /FC 0 OR 0 STA 1 RLO 1 /FC 0 OR * - STA 1 RLO * Х /FC - STA - RLO * - /FC - 16. Сбросить_RLO Формат: CLR Описание. Команда CLR сбрасывает бит RLO в '0'. Зависит от Воздействует на BR - CC1 - CC0 - OV - 17. Установить_RLO Формат: SET Описание. Команда SET устанавливает бит RLO в '1'. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - 18. Инвертировать_RLO Формат: NOT Описание. Команда NOT инвертирует значение бита RLO. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - 19. Сохранить_RLO_в_BR Формат: SAVE Описание. Команда SAVE сохраняет значение бита RLO в бите BR Зависит от Воздействует на BR Х CC1 - CC0 - OV - Содержание 19 OS - OR - S7-300/400 Система команд Описание Команды_битовой_логики Содержание 20. Установить_адресуемый_бит Формат: S <бит> Описание. Адресуемый бит может находиться в областях: I, Q, L, M или в блоке данных. Команда S зависит от MCR ресурса. Когда ресурс не используется, адресуемый бит будет установлен, если бит RLO = 1. Пусть ресурс MCR включен. Тогда, если бит MA = 1 (вершина стека ресурса MCR) и бит RLO = 1, то адресуемый бит будет установлен. Иначе значение адресуемого бита не меняется. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR 0 STA Х RLO * - /FC 0 21. Сбросить_адресуемый_бит Формат: R <бит> Описание. Адресуемый бит может находиться в областях: I, Q, L, M или в блоке данных. Команда R зависит от MCR ресурса. Когда MCR ресурс не используется, адресуемый бит будет сброшен, если бит RLO = 1. Пусть ресурс MCR включен. Тогда, если бит MA = 1 (вершина стека ресурса MCR) и бит RLO = 1, то адресуемый бит будет сброшен. Иначе значение адресуемого бита не меняется. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 Х 0 22. Зафиксировать_положительный_фронт Формат: FP <бит> Описание. Адресуемый бит может находиться в областях: I, Q, L, M или в блоке данных. Команда FP позволяет обнаружить положительный фронт. ......... A "Counter" FP "Buffer" = "Positive_Front" ......... Отслеживание положительного фронта выполняется по отношению к Counter. Для обнаружения фронта команде FP требуется вспомогательный бит Buffer. Когда переменная Counter изменит свое логическое состояние с 0 на 1, команда FP зафиксирует положительный фронт и установит бит RLO. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 Х Х 1 Содержание 20 S7-300/400 Система команд Описание Команды_битовой_логики Содержание 23. Зафиксировать_отрицательный_фронт Формат: FN <бит> Описание. Адресуемый бит может находиться в областях: I, Q, L, M или в блоке данных. Команда FN используется для обнаружения отрицательного фронта. ......... A "Counter" FN "Buffer" = "Negative_Front" ......... Отслеживание отрицательного фронта выполняется по отношению к Counter. Для обнаружения фронта команде FN требуется вспомогательный бит Buffer. Когда переменная Counter изменит свое логическое состояние с 1 на 0, команда FN зафиксирует отрицательный фронт и установит бит RLO. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 Х Х 1 Относительно команд FP и FN следует сделать пояснение по вспомогательному биту. Обе команды рассматривают этот бит как буфер для хранения предыдущего логического состояния контролируемой переменной. Буфер достаточно проинициализировать один раз, например в ОВ100, далее команды выполняют обновление буфера автоматически. Содержание 21 S7-300/400 Система команд Описание Команды_сравнения Содержание Команды сравнения представлены тремя подгруппами: Сравнение_длинных_целых_чисел_со_знаком Сравнение_целых_чисел_со_знаком Сравнение_вещественных_чисел Содержание 22 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 CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х Х 0 0 Х Х 1 Следующая таблица показывает, какое значение будет записано в бите 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' Пример: L MD 10 L ID 24 >D // = M 2.0 0 1 1 // Если ACCU2 ( MD 10 ) больше чем ACCU1 (ID 24 ), то бит RLO будет установлен // 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 Система команд Описание Команды_преобразования Содержание Пример: L MD 10 DTR T MD 20 // Пусть, например, в MD10 было +500 // Преобразование // Результат запишем в 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 Х Содержание 29 OS Х OR - STA - RLO - /FC - 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 не изменяется. Зависит от Воздействует на Пример: L МD 2 NEGR T MD 2 BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - // Пусть, например, МD2 = 1.5E+02 // Теперь 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 Х Содержание 31 OS Х OR - STA - RLO - /FC - S7-300/400 Система команд Описание Команды_преобразования Содержание 15. Отбрасывание_дробной_части Формат: TRUNC Описание. Содержимое ACCU1 рассматривается как число с плавающей точкой, оно преобразуется в Long integer путем отбрасывания дробной части. Причем, если исходное число не умещается в формате Long integer, то это рассматривается как ошибка, и производится установка битов OV и OS. ACCU2 не изменяется. Зависит от Воздействует на BR - CC1 - CC0 - OV Х OS Х OR - STA - RLO - /FC - 16. Обмен_байтами_в_двойном_слове Формат: CAD Описание. Осуществляется обмен байтами в ACCU1 по следующей схеме: До выполнения команды 31 1 [____A___][____B___][____C___][____D___] где A, B, C и D -значения соответствующих байтов ACCU1 После выполнения 31 1 [____D___][____C___][____B___][____A___] ACCU2 не изменяется. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - RLO - /FC - 17. Обмен_байтами_в_слове Формат: CAW Описание. Осуществляется обмен байтами в ACCU1_L. ACCU2 и ACCU1_H не изменяются. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - Содержание 32 S7-300/400 Система команд Описание Счетчики Содержание Есть 7 команд для работы со счетчиками: Установить_начальное_значение_счетчика Сброс_счетчика Очистить_флаг_детектирования_фронта Подсчет_на_увеличение Подсчет_на_уменьшение Прочитать_текущее_значение_счетчика Прочитать_текущее_значение_счетчика_в BCD формате Содержание 33 S7-300/400 Система команд Описание Счетчики Содержание 1. Установить_начальное_значение_счетчика Формат: S <счетчик> Описание. Команда загружает из ACCU1_L стартовое значение в указанный счетчик, если в бите RLO имел место переход от 0 к 1. Значение в ACCU1_L должно быть в BCD формате и принадлежать отрезку [0…999]. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Пример: A I 2.3 // Входной бит I 2.3 выбран в качестве условия, по // которому будет загружаться счетчик C1 L C#350 // Начальное значение S C1 // Загрузить начальное значение в счетчик Замечание. Счетчики создаются программным способом операционной системой CPU (не путайте с Функциональными Счетными Модулями). Число счетчиков зависит от модели CPU – на старших моделях счетчиков больше. 2. Сброс_счетчика Формат: R <счетчик> Описание. Команда R <счетчик> сбрасывает текущее значение указанного счетчика в нуль, если бит RLO=1. BR CC1 CC0 OV OS OR Зависит от Воздействует на 0 Пример: A I 2.3 // Условие сброса R C3 // Сброс, если условие выполняется STA - RLO * - /FC 0 3. Очистить_флаг_детектирования_фронта Формат: FR <счетчик> Описание. Когда имеет место переход RLO от 0 к 1, команда FR <счетчик> очищает флаг обнаружения фронта, который используется для установки и счета адресуемого счетчика. Данная команда при нормальной установке или нормальном счете не требуется. Она применяется в тех случаях, когда необходимо загрузить, либо выполнить счет без учета переходов от 0 к 1 в битах, которые отвечают за такое управление (при условии, что эти биты находятся в состоянии 1). BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Содержание 34 S7-300/400 Система команд Описание Счетчики Содержание Пример: A I 2.0 FR C3 //В бите I2.0 реализуется условие для //выполнения команды FR //Очистить флаг детектирования фронта для //выбранного счетчика C3, если в бите I2.0 имеет //место положительный фронт. 4. Подсчет_на_увеличение Формат: CU <счетчик> Описание. Команда CU <счетчик> увеличивает значение выбранного счетчика на 1, если в RLO имеет место переход от 0 к 1 и значение самого счетчика меньше 999. Когда значение счетчика достигает верхнего предела 999, он останавливается. Дальнейшие переходы в RLO не имеют никакого влияния, и флаг переполнения OV не установлен. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Пример: A I 2.1 // В бите I2.1 реализуется условие для увеличения // значения счетчика на 1. Если в этом бите имеет место переход от 0 к 1, // то счетчик увеличивает свое значение. Естественно, бит RLO является // посредником между битом I2.1 и счетчиком C3 CU C3 // Счетчик увеличивает свое значение на 1, // если условие выполняется. 5. Подсчет_на_уменьшение Формат: CD <счетчик> Описание. Команда CD <счетчик> уменьшает значение выбранного счетчика на 1, если в RLO имеет место переход от 0 к 1 и значение самого счетчика больше нуля. Когда значение счетчика достигает нижнего предела (т.е. нуля), он останавливается. Дальнейшие переходы в RLO не имеют никакого влияния, и флаг переполнения OV не установлен. Зависит от Воздействует на Пример: L 9 A I 0.1 S C1 A I 0.0 CD C1 AN C1 = Q 0.0 BR - CC1 - CC0 - OV - OR 0 STA - RLO * - // Начальное значение // Если выполняется условие загрузки счетчика, то // загрузить счетчик начальным значением // Если выполняется условие декремента счетчика, // то вычесть 1 из текущего значения // Значение счетчика равно нулю ? // Q0.0 = 1 , если значение счетчика - нуль Содержание 35 OS - /FC 0 S7-300/400 Система команд Описание Счетчики Содержание 6. Прочитать_текущее_значение_счетчика Формат: L <счетчик> Описание. Команда загружает текущее значение указанного счетчика в двоичном формате (Integer) в ACCU1_L. Не забывайте, что содержимое ACCU1 предварительно сохраняется в ACCU2. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Пример: L C3 // Загрузить в ACCU1_L значение счетчика в // двоичном формате 7. Прочитать_текущее_значение_счетчика_в BCD формате Формат: LC <счетчик> Описание. Команда загружает текущее значение указанного счетчика в двоично-десятичном формате (BCD) в ACCU1_L. Не забывайте, что содержимое ACCU1 предварительно сохраняется в ACCU2. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Пример: LC C3 // Загрузить в ACCU1_L значение счетчика // в BCD формате Содержание 36 S7-300/400 Система команд Содержание Описание Команды_для_работы_с_блоками_данных Шесть команд данной группы не зависят и не воздействуют на регистр флагов. Эти команды дают пользователю возможность работать с блоками данных: Обменять_содержимое_DB_и_DI Открыть_блок_данных Прочитать_длину_глобального_блока Прочитать_длину_связанного_блока Прочитать_номер_глобального_блока Прочитать_номер_связанного_блока Содержание 37 S7-300/400 Система команд Описание Команды_для_работы_с_блоками_данных Содержание 1. Обменять_содержимое_DB_и_DI Формат: CDB Описание. Меняет содержимое регистров DB и DI между собой. 2. Открыть_блок_данных Формат: OPN <идентификатор блока данных> Описание. Сделать открытым для работы указанный блок данных, ранее открытый блок данных автоматически закрывается. Пример: OPN DB 10 // Открыть DB10 как глобальный блок данных L DBW 35 // 35-ое слово из глобального блока данных T MW 22 OPN DI 20 L DIB 12 // 12-ый байт из связанного блока данных T DBB 37 // И передать его в 37-ой байт глобального DB OPN DB 15 // Открыть DB15 как глобальный блок данных // DB10 автоматически закрывается L DBB10 // Загрузить 10-ый байт из глобального DB15 3. Прочитать_длину_глобального_блока Формат: LDBLG Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается длина текущего глобального блока данных в байтах. 4. Прочитать_длину_связанного_блока Формат: LDILG Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается длина текущего связанного блока данных в байтах. 5. Прочитать_номер_глобального_блока Формат: LDBNO Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается номер текущего глобального блока данных. 6. Прочитать_номер_связанного_блока Формат: LDINO Описание. Содержимое ACCU1 сохраняется в ACCU2, затем в ACCU1 загружается номер текущего связанного блока данных. Содержание 38 S7-300/400 Система команд Описание Команды_переходов Содержание 18 команд, образующих данную группу, дают пользователю полный набор инструментов для написания программ с условными ветвлениями: Если_установлен_BR Если_сброшен_BR Сохранение_RLO_и_переход_при_установленном RLO Сохранение_RLO_и_переход_при_сброшенном RLO Если_установлен_RLO Если_сброшен_RLO Если_установлен_OV Если_установлен_OS Если_меньше_нуля Если_меньше_или_равно_нулю Если_равно_нулю Если_не_равно_нулю Если_больше_или_равно_нулю Если_больше_нуля Если_ошибка Безусловный_переход Организация_цикла Переход_по_значению_ACCU1 Содержание 39 S7-300/400 Система команд Описание Команды_переходов Содержание 1. Если_установлен_BR Формат: JBI <метка> Описание. Выполняется переход на указанную метку, если установлен флаг BR. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 1 0 2. Если_сброшен_BR Формат: JNBI <метка> Описание. Выполняется переход на указанную метку, если сброшен флаг BR. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 1 0 3. Сохранение_RLO_и_переход_при_установленном RLO Формат: JCB <метка> Описание. Первым действием RLO копируется в BR, затем выполняется переход на указанную метку, если RLO=1 BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на Х 0 1 1 0 4. Сохранение_RLO_и_переход_при_сброшенном RLO Формат: JNB <метка> Описание. Первым действием RLO копируется в BR, затем выполняется переход на указанную метку, если RLO=0 BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на Х 0 1 1 0 5. Если_установлен_RLO Формат: JC <метка> Описание. Выполняется переход на указанную метку, если установлен флаг RLO. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR 0 STA 1 RLO * 1 /FC 0 Содержание 40 S7-300/400 Система команд Описание Команды_переходов Содержание 6. Если_сброшен_RLO Формат: JCN <метка> Описание. Выполняется переход на указанную метку, если сброшен флаг RLO. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR 0 STA 1 RLO * 1 /FC 0 7. Если_установлен_OV Формат: JO <метка> Описание. Выполняется переход на указанную метку, если установлен флаг OV. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 8. Если_установлен_OS Формат: JOS <метка> Описание. Выполняется переход на указанную метку, если установлен флаг OS. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 Замечание. Почему команда №7 'JO' не сбрасывает бит OV, а команда 'JOS' сбрасывает бит OS? 9. Если_меньше_нуля Формат: JM <метка> Описание. Если результат предыдущей арифметической команды оказался меньше нуля, то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA Зависит от * * Воздействует на Замечание. CC1=0, CC0=1 → результат меньше нуля. RLO - /FC - 10. Если_меньше_или_равно_нулю Формат: JMZ <метка> Описание. Если результат предыдущей арифметической команды оказался меньше или равен нулю, то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на Замечание. CC1=0, CC0=0 → результат равен нулю. Содержание 41 S7-300/400 Система команд Описание Команды_переходов Содержание 11. Если_равно_нулю Формат: JZ <метка> Описание. Если результат предыдущей арифметической команды оказался равен нулю, то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на 12. Если_не_равно_нулю Формат: JN <метка> Описание. Если результат предыдущей арифметической команды оказался отличен от нуля, то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на Замечание: СС1=1, СС0=0 → результат больше нуля. 13. Если_больше_или_равно_нулю Формат: JPZ <метка> Описание. Если результат предыдущей арифметической команды оказался больше или равен нулю, то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на 14. Если_больше_нуля Формат: JP <метка> Описание. Если результат предыдущей арифметической команды оказался больше нуля, то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на 15. Если_ошибка Формат: JUO <метка> Описание. Если в результате выполнения предыдущей арифметической команды возникла ошибка (например, деление на нуль), то выполняется переход на указанную метку. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * Воздействует на Замечание. СС1=1, СС0=1 → арифметическая ошибка. Содержание 42 S7-300/400 Система команд Описание Команды_переходов Содержание 16. Безусловный_переход Формат: JU <метка> Описание. Выполняется переход на указанную метку без всяких условий. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 17. Организация_цикла Формат: LOOP <метка> Описание. Вычитание 1 из ACCU1_L и если значение ACCU1_L после вычитания еще не равно нулю, то переход (обычно это переход назад, что тем самым позволяет организовать программный цикл). Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 18. Переход_по_значению_ACCU1 Формат: JL <метка> BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Описание. После команды JL должны стоять команды безусловного перехода JU (но не более 255 команд). Метка в команде JL помечает строку программы, перед которой завершается список команд JU. В самом списке команд JU не разрешается использовать другие команды. Берется текущее значение ACCU1_LL и проводится такая связь: 1. Если ACCU1_LL=0, то выполняется первая команда JU после команды JL (первая в списке); 2. Если ACCU1_LL=1, то выполняется вторая команда JU; 3. И т.д. ; 4. Наконец, если значение ACCU1_LL больше чем количество команд JU в списке, то ни одна из команд JU не выполняется, а осуществляется переход на метку, указанную в самой команде JL. Итак, при выполнении команды JL либо будет выполнена одна команда JU, либо будет выполнен переход на метку, указанную в самой команде JL. Содержание 43 S7-300/400 Система команд Описание Команды_загрузки_и_передачи Содержание Данная группа представлена 15 командами: Загрузка_ACCU1_значением_операнда Загрузка_ACCU1_содержимым_STW Загрузка_AR1_значением_из_ACCU1 Загрузка_AR1_значением_из_AR2 Загрузка_AR1_значением_операнда Загрузка_AR2_значением_из_ACCU1 Загрузка_AR2_значением_операнда Обмен_содержимого_AR1_и_AR2 Запись_из_ACCU1_в_операнд Запись_из_ACCU1_в_STW Запись_из_AR1_в_ACCU1 Запись_из_AR1_в_AR2 Запись_из_AR1_в_операнд Запись_из_AR2_в_ACCU1 Запись_из_AR2_в_адресуемый_операнд Содержание 44 S7-300/400 Система команд Описание Команды_загрузки_и_передачи Содержание 1. Загрузка_ACCU1_значением_операнда Формат: L <операнд> Описание. Сначала содержимое ACCU1 копируется в ACCU2. Затем содержимое адресуемого операнда заносится в ACCU1. Возможными операндами являются байт, слово, двойное слово из таких областей, как I, Q, PI, M, L, DB, DI. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Примеры: L IB 10 // Загрузить байт #10 из области входов L MB 120 // Загрузить байт #120 из области меркеров L DBD 8 // Загрузить двойное слово #8 из текущего // глобального блока данных L DIW 15 // Загрузить слово #15 из текущего связанного // блока данных L LD 252 // Загрузить двойное слово #252 из // локального стека Замечание. Если была загрузка байта, то он загрузится в ACCU1_LL, адресуемое слово загрузится в ACCU1_L, при этом старшие незадействованные разряды ACCU1 будут установлены в 0. 2. Загрузка_ACCU1_содержимым_STW Формат: LSTW Описание: ACCU1 := Слово Состояния; BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * * * * * * * * * Воздействует на Замечание. После выполнения данной команды ACCU1 выглядит следующим образом: Биты ACCU1 31…9 8 7 6 5 4 3 2 1 0 Содержимое нули BR CC1 CC0 OV OS OR STA RLO /FC 3. Загрузка_AR1_значением_из_ACCU1 Формат: LAR1 Описание. AR1 := ACCU1; BR CC1 CC0 OV OS Зависит от Воздействует на - Содержание 45 OR - STA - RLO - /FC - S7-300/400 Система команд Описание Команды_загрузки_и_передачи Содержание 4. Загрузка_AR1_значением_из_AR2 Формат: LAR1 AR2 Описание. AR1 := AR2; BR CC1 CC0 OV Зависит от Воздействует на - OS - OR - STA - RLO - /FC - 5. Загрузка_AR1_значением_операнда Формат: LAR1 <D> Описание. Загрузить в AR1 содержимое адресуемого двойного слова или загрузить указатель. Двойное слово может быть выбрано из таких областей, как DB, DI, L и M. BR CC1 CC0 OV OS OR STA RLO Зависит от Воздействует на Пример: LAR1 DBD 20 LAR1 LD 180 LAR1 MD 24 LAR1 P#M100.0 // Загрузить указатель на 100-ый адрес // из области меркеров 6. Загрузка_AR2_значением_из_ACCU1 Формат: LAR2 Описание. AR2 := ACCU1; BR CC1 CC0 OV OS Зависит от Воздействует на - OR - STA - RLO - /FC - /FC - 7. Загрузка_AR2_значением_операнда Формат: LAR2 <D> Описание. Загрузить в AR1 содержимое адресуемого двойного слова или загрузить указатель. Двойное слово может быть выбрано из таких областей, как DB, DI, L и M. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - Содержание 46 S7-300/400 Система команд Описание Команды_загрузки_и_передачи Содержание 8. Обмен_содержимого_AR1_и_AR2 Формат: CAR Описание. Содержимое регистров AR1 и AR2 меняется местами. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 9. Запись_из_ACCU1_в_операнд Формат: T <операнд> Описание. Копирование ACCU1 в адресуемый байт, слово или двойное слово. Данная команда зависит от MCR ресурса. Если MCR ресурс активен и бит MA = 1 (вершина стека MCR ресурса), то содержимое аккумулятора копируется в адресуемый операнд (число копируемых байтов из аккумулятора зависит от размера адресуемого операнда, см. пример). Если бит MA = 0, то в адресуемый операнд запишутся нули. Если же MCR ресурс выключен, то содержимое аккумулятора копируется в адресуемый операнд. Операнды могут быть из следующих областей: I, Q, PQ, M, L, DB. BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - Зависит от Воздействует на Пример: T QB 10 // QB10 :=ACCU1_LL ; T MW 14 // MW14 :=ACCU1_L ; T DBD 2 // Содержимое ACCU1 копируется во второе двойное // слово глобального блока данных 10. Запись_из_ACCU1_в_STW Формат: T STW Описание. Слово состояния загружается значением из аккумулятора, а именно биты с 0 по 8 из ACCU1 копируются в Слово состояния. Биты ACCU1 31…9 8 7 6 5 4 3 2 1 0 Слово состояния нули Зависит от Воздействует на BR CC1 BR Х CC1 Х CC0 CC0 Х OV OV Х Содержание 47 OS OS Х OR OR Х STA STA Х RLO /FC RLO Х /FC Х S7-300/400 Система команд Описание Команды_загрузки_и_передачи Содержание 11. Запись_из_AR1_в_ACCU1 Формат: TAR1 Описание. Содержимое ACCU1 сохраняется в ACCU2. В ACCU1 копируется содержимое адресного регистра AR1. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 12. Запись_из_AR1_в_AR2 Формат: TAR1 AR2 Описание. Содержимое адресного регистра AR1 копируется в адресный регистр AR2. ACCU1 и ACCU2 не изменяются. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на 13. Запись_из_AR1_в_операнд Формат: TAR1 <D> Описание. Содержимое адресного регистра AR1 копируется в адресуемое двойное слово, которое может находиться в одной из следующих областей: M, L, DB, DI. Содержимое ACCU1 и ACCU2 не изменяется. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на 14. Запись_из_AR2_в_ACCU1 Формат: TAR2 Описание. Содержимое ACCU1 сохраняется в ACCU2. В ACCU1 копируется содержимое адресного регистра AR2. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 15. Запись_из_AR2_в_адресуемый_операнд Формат: TAR2 <D> Описание. Содержимое адресного регистра AR2 копируется в адресуемое двойное слово, которое может находиться в одной из следующих областей: M, L, DB, DI. Содержимое ACCU1 и ACCU2 не изменяется. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на - Содержание 48 S7-300/400 Система команд Содержание Описание Математика_с_плавающей_точкой Математика с плавающей точкой представлена 5 командами: Сложение Вычитание Умножение Деление Модуль_числа Содержание 49 S7-300/400 Система команд Описание Математика_с_плавающей_точкой Содержание 1. Сложение Формат: +R Описание. ACCU1 := ACCU1 + ACCU2; Содержимое ACCU1 и ACCU2 рассматривается как числа с плавающей точкой. Содержимое регистров складывается, и результат сохраняется в ACCU1. По значению битов CC1, CC0, OS и OV можно судить о результате сложения. Таблица Результат в ACCU1 Флаги Описание знак порядок мант-са CC1 CC0 OV OS 0 255 1 1 1 1 Не число ≠0 Плюс бесконечность 0 255 0 1 0 1 1 (переполнение) любой Нормализованные 0 1..254 1 0 0 допустимы числа й Очень маленькие 0 0 0 0 1 1 ≠0 числа (переполнение) 0 0 0 0 0 0 Результат нуль 1 0 0 0 0 0 Результат нуль Очень маленькие 1 0 0 0 1 1 ≠0 отрицательные числа (переполнение) любой Нормализованные 1 1..254 0 1 0 допустимы отрицательные й числа Минус 1 255 0 0 1 1 1 бесконечность (переполнение) 1 255 1 1 1 1 Не число ≠0 Замечание. 1. данная таблица применима не только к команде сложения +R, но и к другим командам этой группы 2. 'Не число' означает, что формат чисел с плавающей точкой IEEE не выдерживается 3. '+/-Бесконечность' означает, что имеет место слишком большое положительное (или отрицательное) число Зависит от Воздействует на BR - CC1 Х CC0 Х OV Х OS Х OR - STA - RLO - /FC - Содержание 50 S7-300/400 Система команд Описание Математика_с_плавающей_точкой Содержание Пример OPN DB 10 L ID 10 // ACCU1 :=ID10 ; L MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ; +R // ACCU1 :=ACCU2 + ACCU1 ; T DBD 25 2. Вычитание Формат: -R Описание. ACCU1 := ACCU2 - ACCU1; Содержимое ACCU1 и ACCU2 рассматривается как числа с плавающей точкой. Из содержимого ACCU2 вычитается содержимое ACCU1 и результат сохраняется в ACCU1. По значению битов CC1, CC0, OS и OV можно судить о результате вычитания (см. таблицу, приведенную в описании команды '+R'). Зависит от Воздействует на Пример: OPN DB 10 L -3.90289 L MD 14 -R T DBD 25 BR - CC1 Х CC0 Х OV Х OS Х OR - STA - RLO - /FC - 3. Умножение Формат: *R Описание. ACCU1 := ACCU1 * ACCU2; Содержимое ACCU1 и ACCU2 рассматривается как числа с плавающей точкой. Содержимое ACCU2 умножается на содержимое ACCU1 и результат сохраняется в ACCU1. По значению битов CC1, CC0, OS и OV можно судить о результате умножения (см. таблицу, приведенную в описании команды '+R'). BR - Зависит от Воздействует на Пример: OPN DB 25 L ID 10 L MD 14 *R T DBD 25 CC1 Х CC0 Х OV Х Содержание 51 OS Х OR - STA - RLO - /FC - S7-300/400 Система команд Описание Математика_с_плавающей_точкой Содержание 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 Зависит от Воздействует на Пример: L -150.12092 ABS T MD 8 // MD8 :=150.12092 // L 3.00074 ABS T MD 12 // MD12 :=3.00074 STA - RLO - /FC - Содержание 52 S7-300/400 Система команд Описание Целочисленная_математика Содержание Десяти команд, образующих данную группу, вполне достаточно для организации целочисленных вычислений: Сложение_Long_Integer Сложение_Integer Сложение_с_константой Вычитание_Long_Integer Вычитание_Integer Умножение_Long_Integer Умножение_Integer Деление_Long_Integer Деление_Integer Остаток_от_деления Содержание 53 S7-300/400 Система команд Описание Целочисленная_математика Содержание 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 0 0 0 0 1 0 - 2.147.483.648 ≤ Сумма < 0 1 0 0 0 < Сумма ≤ + 2.147.483.647 Сумма = - 4.294.967.296 0 0 1 1 0 1 1 1 + 2.147.483.647 < Сумма ≤ + 4.294.967.724 1 0 1 1 - 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 - Содержание 54 S7-300/400 Система команд Описание Целочисленная_математика Содержание Установка битов в слове состояния: - 32768 ≤ 0< Сумма = 0 Сумма < 0 Сумма ≤ + 32767 Сумма = - 65536 Сумма ≤ + 65534 Сумма < - 32768 CC1 0 0 1 0 0 1 CC0 0 1 0 0 1 0 OV 0 0 0 1 1 1 + 32767 < - 65535 ≤ Пример: 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-ое слово глобального // блока данных OS 1 1 1 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 Зависит от Воздействует на - Содержание 55 S7-300/400 Система команд Описание Целочисленная_математика Содержание Пример: 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 Зависит от Воздействует на Х Х Х Х Установка битов в слове состояния: - 2.147.483.648 ≤ 0< + 2.147.483.647 < - 4.294.967.295 ≤ Разность = 0 Разность < 0 Разность ≤ + 2.147.483.647 Разность ≤ + 4.294.967.295 Разность < - 2.147.483.648 CC1 0 0 1 0 1 CC0 0 1 0 1 0 OV 0 0 0 1 1 OS 1 1 Содержание 56 S7-300/400 Система команд Описание Целочисленная_математика Содержание Пример: 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 0 0 0 0 1 0 - 32768 ≤ Разность < 0 1 0 0 0 < Разность ≤ + 32767 0 1 1 1 + 32767 < Разность ≤ + 65534 1 0 1 1 - 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 Х Содержание 57 OS Х OR - STA - RLO - /FC - S7-300/400 Система команд Описание Целочисленная_математика Содержание Установка битов в слове состояния: Умн. = 0 Умн. < 0 Умн. ≤ + 2.147.483.647 Умн. ≤ + 4.294.967.295 Умн. < - 2.147.483.648 CC1 0 0 1 0 1 CC0 0 1 0 1 0 OV 0 0 0 1 1 - 2.147.483.648 ≤ 0< + 2.147.483.647 < - 4.294.967.295 ≤ Пример: L ID 10 // ACCU1 :=ID10 ; L MD 14 // ACCU2 :=ID10 ; ACCU1 :=MD14 ; *D // ACCU1 :=ACCU1 * ACCU2 ; T DBD 25 // Содержимое ACCU1 (результат) передается в // 25-ое двойное слово глобального блока данных. OS 1 1 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 - OV 0 0 0 1 1 OS 1 1 Установка битов в слове состояния: Умн. = 0 Умн. < 0 Умн. ≤ + 32.767 Умн. ≤ + 1.073.741.824 Умн. < - 32.768 CC1 0 0 1 0 1 CC0 0 1 0 1 0 - 32.768 ≤ 0< + 32.767 < - 1.073.709.056 ≤ Пример: 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-ое слово глобального блока данных Содержание 58 S7-300/400 Система команд Описание Целочисленная_математика Содержание 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 0 0 0 0 1 0 - 2.147.483.648 ≤ Частн. < 0 1 0 0 0 < Частн. ≤ + 2.147.483.647 Частн. = + 2.147.483.648 1 0 1 1 Деление на нуль 1 1 1 1 Внимание. Результат деления оказывается равным нулю, когда делимое равно нулю, а также, когда абсолютное значение делимого меньше абсолютного (т.е. без учета знака, или еще говорят 'модуль числа') значения делителя (это является следствием отбрасывания дробной части результата деления). Пример: 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. Содержание 59 S7-300/400 Система команд Описание Целочисленная_математика Содержание Зависит от Воздействует на BR - CC1 Х CC0 Х OV Х OS Х OR - STA - RLO - /FC - OV 0 0 0 1 1 OS 1 1 Установка битов в слове состояния: CC1 0 0 1 1 1 CC0 0 1 0 0 1 Частн. = 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 0 0 1 1 CC0 0 1 0 1 OV 0 0 0 1 OS 1 Остаток = 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 Содержание 60 S7-300/400 Система команд Содержание Описание Команды_программного_контроля Используя 10 команд данной группы, создавать программы со сложной организацией: Краткое_вступительное_слово Включить_MCR_ресурс Выключить_MCR_ресурс Записать_в_стек Прочитать_из_стека Безусловный_вызов_без_параметров Условный_вызов_без_параметров Вызов_CALL Конец_блока Конец_блока_безусловный Конец_блока_условный Содержание 61 пользователь может S7-300/400 Система команд Описание Команды_программного_контроля Содержание Краткое_вступительное_слово Начнем с краткого вступительного слова. В контроллерах семейства 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, стек при этом автоматически сдвигается вверх. Содержание 2 Обращаем внимание. Переполнение стека является ошибкой, выполнение пользова­ тельской программы прекращается. 62 S7-300/400 Система команд Описание Команды_программного_контроля Содержание Эти две команды должны использоваться совместно. Естественно, возможны вложения, но при переполнении стека формируется ошибка (размер стека =8). Когда ресурс MCR включен, следующие команды (их выполнение): - '=' (присвоить бит) - 'S' (установить бит) - 'R' (сбросить бит) - 'T' (перенос/передача B, W или DW) зависят от текущего состояния бита MA (т.е. от вершины стека). 1. Включить_MCR_ресурс Формат: MCRA MCRA Описание. Данная команда включает MCR ресурс. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - 2. Выключить_MCR_ресурс Формат: MCRD RLO - /FC - MCRD Описание. Данная команда выключает MCR ресурс. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 3. Записать_в_стек MCR( Формат: MCR( Описание. Команда записывает RLO в вершину стека MCR ресурса. Уровень вложенности увеличивается на единицу. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS - OR 0 STA 1 RLO * - /FC 0 4. Прочитать_из_стека )MCR Формат: )MCR Описание. Команда переносит вершину стека MCR ресурса в RLO. Уровень вложенности уменьшается на единицу. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на 0 1 0 Вопрос. Прокомментировать для 3. и 4. зависимость и воздействие на флаги? Содержание 63 S7-300/400 Система команд Описание Команды_программного_контроля Содержание 5. Безусловный_вызов_без_параметров Формат: UC <идентификатор лог. блока> Описание. Безусловный вызов логического блока без передачи параметров. Команда сохраняет адрес возврата (селектор и относительный адрес), селекторы текущих DB и DI, бит MA в B-стеке, отключает MCR зависимость, создает распределение памяти под локальные данные. Внимание. Используя данную команду, Вы не можете связать некий DI с вызываемым логическим блоком, то есть нельзя UC FB 3, DI 2 BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на 0 0 1 0 6. Условный_вызов_без_параметров Формат: CC <идентификатор лог. блока> Описание. Команда выполняется аналогично команде UC, только вызов осуществляется, если RLO=1. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 1 1 0 Вопрос. Если локальная память распределяется, но нет возможности указать DI, то нет ли в этом парадокса? 7. Вызов_CALL Формат: CALL <ид. лог. блока, ид. DI> [параметры] Описание. Безусловный вызов функции или функционального блока с возможностью передачи параметров. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на 0 0 1 0 Замечание. 1) идентификатор DI связанного блока данных указывается, если вызывается функциональный блок, и не указывается, если вызывается функция 2) разрешается использовать символические имена 3) данную команду следует применять в тех случаях, когда в вызываемую FC или FB требуется передать параметры 4) команду CALL запрещается использовать в организационных блоках Содержание 64 S7-300/400 Система команд Описание Команды_программного_контроля Содержание 8. Конец_блока Формат: BE Описание. Команда завершения текущего блока или функции. Область локальных данных освобождается, вновь открываются те блоки данных, которые были открыты, восстанавливается MCR зависимость. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на 0 0 1 0 9. Конец_блока_безусловный Формат: BEU Описание. Конец блока безусловный. Все то же самое, что и в команде BE. Зависит от Воздействует на BR - CC1 - CC0 - OV - OS 0 OR 0 STA 1 RLO - /FC 0 10. Конец_блока_условный Формат: BEC Описание. Выполнение текущего блока завершается, если RLO=1, в этом случае выполняются действия, что в командах BE и BEU, иначе выполнение блока продолжается. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 1 1 0 Замечание. Команды завершения текущего блока следует применять в случаях, когда требуется завершить блок, не доходя до логического конца этого блока. Содержание 65 S7-300/400 Система команд Описание Команды_сдвигов Содержание Данная группа состоит из 10 команд: Циклический_сдвиг_влево_двойного_слова Циклический_сдвиг_вправо_двойного_слова Однократный_циклический_сдвиг_влево_двойного слова через бит СС1 Однократный_циклический_сдвиг_вправо_двойного слова через бит СС1 Сдвиг_двойного_слова_влево_нулями Сдвиг_слова_влево_нулями Сдвиг_двойного_слова_вправо_нулями Сдвиг_слова_вправо_нулями Сдвиг_DINT_вправо_знаковым_битом Сдвиг_INT_вправо_знаковым_битом Содержание 66 S7-300/400 Система команд Описание Команды_сдвигов Содержание Общее правило применимое к командам этой группы гласит: “Сдвиг объекта на 0 битов означает отсутствие сдвига“. 1. Циклический_сдвиг_влево_двойного_слова Формат: RLD RLD <число> Описание. Команда выполняет циклический сдвиг двойного слова влево. Если команда используется без числового операнда, то выполняется циклический сдвиг битов влево в 32-ух битном ACCU1 столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды RLD <число> выполняется такой же циклический сдвиг влево, но количество сдвигов определяется <числом>, значение <числа> находится в отрезке [0..32]. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 2. Циклический_сдвиг_вправо_двойного_слова Формат: RRD RRD <число> Описание. Команда выполняет циклический сдвиг двойного слова вправо. Если команда используется без числового операнда, то выполняется циклический сдвиг битов вправо в 32-ух битном ACCU1 столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды RLD <число> выполняется такой же циклический сдвиг вправо, но количество сдвигов определяется <числом>, значение <числа> находится в отрезке [0..32]. Зависит от Воздействует на BR - CC1 Х CC0 0 OV 0 Содержание 67 OS - OR - STA - RLO - /FC - S7-300/400 Система команд Описание Команды_сдвигов Содержание 3. Однократный_циклический_сдвиг_влево_двойного слова через бит СС1 Формат: RLDA Описание. Однократный циклический сдвиг двойного слова влево через бит CC1. Зависит от Воздействует на BR - CC1 Х CC0 0 OV 0 OS - OR - STA - RLO - /FC - 4. Однократный_циклический_сдвиг_вправо_двойного слова через бит СС1 Формат: RRDA Описание. Однократный циклический сдвиг двойного слова вправо через бит CC1. Зависит от Воздействует на BR - CC1 Х CC0 0 OV 0 OS - OR - STA - RLO - /FC - Содержание 68 S7-300/400 Система команд Описание Команды_сдвигов Содержание 5. Сдвиг_двойного_слова_влево_нулями Формат: SLD SLD <число> Описание. Сдвиг двойного слова влево, справа вталкиваются нули. Если команда используется без числового операнда, то выполняется сдвиг битов влево в 32-ух битном ACCU1 столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды SLD <число> выполняется такой же сдвиг влево, но количество сдвигов определяется <числом>, значе ние <числа> находится в отрезке [0..32]. Зависит от Воздействует на BR - CC1 Х CC0 0 OV 0 OS - OR - STA - RLO - /FC - 6. Сдвиг_слова_влево_нулями Формат: SLW SLW <число> Описание. Сдвиг слова влево, справа вталкиваются нули. Если команда используется без числового операнда, то выполняется сдвиг битов влево в ACCU1_L столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды SLW <число> выполняется такой же сдвиг влево, но количество сдвигов определяется <числом>, значе ние <числа> находится в отрезке [0..15]. Зависит от Воздействует на BR - CC1 Х CC0 0 OV 0 Содержание 69 OS - OR - STA - RLO - /FC - S7-300/400 Система команд Описание Команды_сдвигов Содержание 7. Сдвиг_двойного_слова_вправо_нулями Формат: SRD SRD <число> Описание. Сдвиг двойного слова вправо, слева вталкиваются нули. Если команда используется без числового операнда, то выполняется сдвиг битов вправо в ACCU1 столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды SRD <число> выполняется такой же сдвиг вправо, но количество сдвигов определяется <числом>, значение <числа> находится в отрезке [0..32]. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 8. Сдвиг_слова_вправо_нулями Формат: SRW SRW <число> Описание. Сдвиг слова вправо, слева вталкиваются нули. Если команда используется без числового операнда, то выполняется сдвиг битов вправо в ACCU1_L столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды SRW <число> выполняется такой же сдвиг вправо, но количество сдвигов определяется <числом>, значение <числа> находится в отрезке [0..15]. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 - Содержание 70 S7-300/400 Система команд Описание Команды_сдвигов Содержание 9. Сдвиг_DINT_вправо_знаковым_битом Формат: SSD SSD <число> Описание. Сдвиг длинного целого вправо за счет размножения знакового бита. Если команда используется без числового операнда, то выполняется сдвиг битов вправо в ACCU1 столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды SSD <число> выполняется такой же сдвиг вправо, но количество сдвигов определяется <числом>, значение <числа> находится в отрезке [0..32]. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 10. Сдвиг_INT_вправо_знаковым_битом Формат: SSI SSI <число> Описание. Сдвиг целого числа вправо за счет размножения знакового бита. Если команда используется без числового операнда, то выполняется сдвиг битов вправо в ACCU1_L столько раз, какое значение содержится в ACCU2_LL (от 0 до 255). В случае использования команды SSI <число> выполняется такой же сдвиг вправо, но количество сдвигов определяется <числом>, значение <числа> находится в отрезке [0..15]. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 - Содержание 71 S7-300/400 Система команд Описание Таймеры Содержание Девять команд данной группы дают пользователю все необходимые инструменты для работы с программными таймерами: Сделать_возможным_новый_старт_выбранного таймера Сбросить_выбранный_таймер Прочитать_в_двоичном_коде_текущее значение выбранного таймера Прочитать_в_BCD_формате_текущее значение выбранного таймера Запустить таймер можно в одном из пяти режимов. Для этой цели существуют пять разных команд. Вход сброса всегда является наиболее приоритетным входом. Мгновенный_запуск_и_зависимость_от стартового сигнала Мгновенный_запуск_с_возможностью перезапуска Задержка_включения_и_зависимость от стартового сигнала Задержка_включения_с_возможностью перезапуска Задержка_выключения_и_зависимость_от стартового_сигнала Содержание 72 S7-300/400 Система команд Описание Таймеры Содержание 1. Сделать_возможным_новый_старт_выбранного таймера Формат: FR <таймер> Описание. Команда FR сравнивает текущее состояние бита RLO с предыдущим состоянием, которое хранится в данном таймере, на предмет обнаружения положительного фронта. Если положительный фронт фиксируется, то команда очищает флаг запрета запуска таймера, то есть дается возможность вновь стартовать таймер. Эта команда применяется, когда требуется перезапустить уже работающий таймер. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Пример: A I 2.0 // Можно перезапустить таймер? FR T 1 // Если зафиксирован положительный фронт, то // разрешение на перезапуск получено. 2. Сбросить_выбранный_таймер Формат: R <таймер> Описание. Если RLO =1, то выбранный таймер останавливается, его значение сбрасывается в нуль. Зависит от Воздействует на Пример: A I 2.1 R T1 BR - CC1 - CC0 - OV - OS - OR 0 STA - RLO * - /FC 0 // Можно сбросить таймер? // Таймер сбрасывается, если I 2.1 =1 3. Прочитать_в_двоичном_коде_текущее выбранного таймера Формат: L <таймер> текущее значение Описание. Содержимое ACCU1 переписывается в ACCU2, затем текущее значение указанного таймера в двоичном коде записывается в ACCU1_L. Зависит от Воздействует на Пример: L T5 BR - CC1 - CC0 - OV - Содержание 73 OS - OR - STA - RLO - /FC - S7-300/400 Система команд Описание Таймеры Содержание 4. Прочитать_в_BCD_формате_текущее таймера Формат: LC <таймер> значение выбранного Описание. Содержимое ACCU1 переписывается в ACCU2, затем текущее значение указанного таймера в BCD формате записывается в ACCU1_L Зависит от Воздействует на Пример: LC T 1 BR - CC1 - CC0 - OV - OS - OR - STA - RLO - /FC - 5. Мгновенный_запуск_и_зависимость_от стартового сигнала (Режим ЖДУЩЕГО МУЛЬТИВИБРАТОРА СО СБРОСОМ) Формат: SP <таймер> Описание. Указанный таймер запускается, когда имеет место положительный фронт на стартовом входе. Выход Q таймера немедленно устанавливается и удерживается в состоянии 1, пока таймер работает. Таймер останавливается в трех случаях: 1. Заканчивается заданный интервал времени 2. Вход START сбросился 3. Вход RESET установился BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Пример: A I 2.1 // Есть разрешение на старт таймера? L S5T$10s // Установка времени (10 секунд) в ACCU1 SP T 1 // Если разрешение получено, то время из ACCU1 // (10 секунд) загружается в таймер, таймер стартует в режиме SP 6. Мгновенный_запуск_с_возможностью перезапуска (Режим ЖДУЩЕГО МУЛЬТИВИБРАТОРА С ПЕРЕЗАПУСКОМ) Формат: SE <таймер> Описание. Указанный таймер запускается, когда имеет место положительный фронт на стартовом входе. Выход Q таймера немедленно устанавливается и удерживается в состоянии 1, пока таймер работает. Таймер останавливается в следующих случаях: 1. Заканчивается заданный интервал времени 2. Вход RESET установился ВЫКЛЮЧЕНИЕ стартового сигнала во время работы таймера НЕ ОСТАНАВЛИВАЕТ таймер. Если таймер еще продолжает работать, а условие запуска вновь формируется, то таймер перезапускается заново. Содержание 74 S7-300/400 Система команд Описание Таймеры Содержание BR CC1 CC0 OV OS OR Зависит от Воздействует на 0 Пример: A I 2.1 // Условие запуска таймера L S5T#10s // Установка интервала времени SE T 1 // Запуск таймера в режиме SE STA - RLO * - /FC 0 7. Задержка_включения_и_зависимость от стартового сигнала (Режим ФОРМИРОВАТЕЛЯ ЗАДЕРЖКИ ВКЛЮЧЕНИЯ) Формат: SD <таймер> Описание. Таймер запускается положительным фронтом на входе START. Однако выход Q таймера устанавливается после истечения времени ЗАДЕРЖКИ при условии, что на стартовом входе все еще удерживается 1. Таким образом, таймер устанавливает свой выход Q с заданной задержкой относительно момента запуска. Таймер останавливается в следующих случаях: 1. Вход START сбросился 2. Вход RESET установился BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 8. Задержка_включения_с_возможностью перезапуска (Режим ФОРМИРОВАТЕЛЯ ЗАДЕРЖКИ ВКЛЮЧЕНИЯ С ЗАПОМИНАНИЕМ) Формат: SS <таймер> Описание. Таймер запускается положительным фронтом на входе START. Однако выход Q таймера устанавливается после истечения времени ЗАДЕРЖКИ. Таким образом, таймер устанавливает свой выход Q с заданной задержкой относительно момента запуска. Если во время формирования задержки вновь формируется условие запуска, то таймер перезапускается заново. Таймер останавливается, когда устанавливается вход RESET. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Содержание 75 S7-300/400 Система команд Описание Таймеры Содержание 9. Задержка_выключения_и_зависимость_от стартового сигнала (Режим ФОРМИРОВАТЕЛЯ ЗАДЕРЖКИ ВЫКЛЮЧЕНИЯ) Формат: SF <таймер> Описание. Выход Q таймера немедленно устанавливается по положительному фронту на стартовом входе. А сам таймер не запускается. По заднему фронту стартового сигнала запускается таймер, выход Q остается в состоянии 1 до окончания времени задержки. Таким образом, выключение выхода Q происходит с заданной задержкой относительно выключения стартового входа. Выключение таймера также производится по входу сброса. Повторное включение таймера во время формирования задержки ОСТАНАВЛИВАЕТ таймер, а его новый запуск происходит только при следующем выключении стартового входа (задний фронт). BR CC1 CC0 OV OS OR STA RLO /FC Зависит от * Воздействует на 0 0 Содержание 76 S7-300/400 Система команд Содержание Описание Логика_для_WORD_и_DWORD Шесть команд данной группы представляют собой развитие битовой логики в направлении увеличения размера операнда: Логическое_И_для_двойного_слова Логическое_И_для_слова Логическое_ИЛИ_для_двойного_слова Логическое_ИЛИ_для_слова Исключающее_ИЛИ_для_двойного_слова Исключающее_ИЛИ_для_слова Содержание 77 S7-300/400 Система команд Описание Логика_для_WORD_и_DWORD Содержание 1. Логическое_И_для_двойного_слова Формат: AD AD <32-bit constant> Описание. Выполняется функция логического И между ACCU1 и ACCU2, а если используется команда AD <32-bit constant>, то между ACCU1 и 32-ух битной константой. В любом случае содержимое ACCU2 не изменяется. Результат сохраняется в ACCU1. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 Замечание. Бит CC1 устанавливается, если результат не равен нулю. 2. Логическое_И_для_слова Формат: AW AW <16-bit constant> Описание. Выполняется функция логического И между ACCU1_L и ACCU2_L, а если используется команда AW <16-bit constant>, то между ACCU1_L и 16-ти битной константой. В любом случае содержимое ACCU2 и ACCU1_H не изменяется. Результат сохраняется в ACCU1_L. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 Замечание. Бит CC1 устанавливается, если результат не равен нулю. 3. Логическое_ИЛИ_для_двойного_слова Формат: OD OD <32-bit constant> Описание. Выполняется функция логического ИЛИ между ACCU1 и ACCU2, а если используется команда ОD <32-bit constant>, то между ACCU1 и 32-ух битной константой. В любом случае содержимое ACCU2 не изменяется. Результат сохраняется в ACCU1. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 Замечание. Бит CC1 устанавливается, если результат не равен нулю. Содержание 78 S7-300/400 Система команд Описание Логика_для_WORD_и_DWORD Содержание 4. Логическое_ИЛИ_для_слова Формат: OW OW <16-bit constant> Описание. Выполняется функция логического ИЛИ между ACCU1_L и ACCU2_L, а если используется команда ОW <16-bit constant>, то между ACCU1_L и 16-ти битной константой. В любом случае содержимое ACCU2 и ACCU1_H не изменяется. Результат сохраняется в ACCU1_L. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 Замечание. Бит CC1 устанавливается, если результат не равен нулю. 5. Исключающее_ИЛИ_для_двойного_слова Формат: XOD XOD <32-bit constant> Описание. Выполняется функция ИСКЛЮЧАЮЩЕЕ ИЛИ между ACCU1 и ACCU2, а если используется команда ХОD <32-bit constant>, то между ACCU1 и 32-ух битной константой. В любом случае содержимое ACCU2 не изменяется. Результат сохраняется в ACCU1. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 Замечание. Бит CC1 устанавливается, если результат не равен нулю. 6. Исключающее_ИЛИ_для_слова Формат: XOW XOW <16-bit constant> Описание. Выполняется функция ИСКЛЮЧАЮЩЕЕ ИЛИ между ACCU1_L и ACCU2_L, а если используется команда ХОW <16-bit constant>, то между ACCU1_L и 16-ти битной константой. В любом случае содержимое ACCU2 и ACCU1_H не изменяется. Результат сохраняется в ACCU1_L. BR CC1 CC0 OV OS OR STA RLO /FC Зависит от Воздействует на Х 0 0 Замечание. Бит CC1 устанавливается, если результат не равен нулю. Содержание 79