- •Содержание
- •5. Элементы языка программирования 66
- •6. Библиотека стандартных функциональных блоков 77
- •Введение
- •Общие сведения
- •Программистская модель плк с300
- •Внешний вид контроллера
- •Модули ввода/вывода
- •Распределение памяти контроллера
- •Программистская модель контроллера.
- •Регистры и флаги
- •Области операндов контроллера
- •Отображение входов и выходов
- •Область данных
- •Область меток
- •Область таймеров
- •Область счётчиков
- •Область периферии
- •Область расширенной периферии
- •Структура и обработка технологических программ
- •Система команд лмк
- •Логические команды
- •Команды присвоения битных операндов
- •Команды опроса битных переменных
- •Команды переходов
- •Команды пересылки
- •Арифметические команды
- •Команды сравнения
- •Логические байтовые и словные команды
- •Байтовые и словные команды сдвига
- •Индексная адресация.
- •Счетчики
- •Команды обработки счётчиков
- •Последовательность программирования счётчика
- •Примеры программирования счётчика
- •U е 5.0 ;Если сработал фотоэлемент на входе e5.0
- •Формат слова уставки счётчика
- •Таймеры
- •Команды обработки таймеров
- •Последовательность программирования таймера
- •Примеры программирования таймера
- •Формат слова уставки таймера
- •Организационные команды
- •Команды вызова, активизации и завершения блоков
- •Команды блокировки, деблокировки, задания допустимой длительности скана
- •Команды структурирования текста
- •Команды обработки канала связи
- •Элементы языка программирования
- •Организационные блоки
- •Особенности прерывания циклической обработки блоками ob2...Ob18
- •Программные блоки
- •Функциональные блоки
- •Формат функциональных блоков
- •Особенности использования формальных параметров
- •Блоки данных
- •Формат и использование блока назначений nb0
- •Комментарии к программе
- •Комментарий к строке
- •Комментарий к операнду
- •Комментарий к элементу цепи ркс и к цепи ркс
- •Библиотека стандартных функциональных блоков
- •Блоки организации связи по каналу “эвм”
- •Блоки обработки системы реального времени
- •Арифметические блоки
- •Блоки обработки модулей расширенной периферии
- •Системные блоки
- •Блоки регулирования
Арифметические команды
Это команды, оперирующие со словными (RW1, RW2), байтными (RB1, RB2), вещественными (RG1, RG2) аккумуляторами и словными, байтными, вещественными операндами.
Арифметические команды позволяют производить арифметические действия над беззнаковыми и знаковыми целыми числами, над вещественными числами. Команды, работающие с аккумуляторами RB1, RB2, введены для совместимости с системой команд контроллеров С100, С200 и не рекомендуются к использованию в новых программах.
1) +W - сложение аккумуляторов RW1 и RW2.
Формат команды: +W.
Аккумулятор RW1 складывается с аккумулятором RW2. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит переполнение, иначе сбрасывается в 0. При сложении знаковых чисел, если результат вне диапазона, то флаг OF устанавливается в 1, иначе сбрасывается в 0. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
2) -W - вычитание аккумулятора RW1 из аккумулятора RW2.
Формат команды: -W.
Аккумулятор RW1 вычитается из аккумулятора RW2. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит заем, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1, иначе сбрасывается в 0. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
3) ADW - сложение аккумулятора RW1 с константой.
Формат команды:
ADW КНхххх |
Сложение аккумулятора RW1 с константой в шестнадцатиричном формате; |
ADW KFxxxxx |
Сложение аккумулятора RW1 с знаковой константой в десятичном формате; |
ADW KUxxxxx |
Сложение аккумулятора RW1 с беззнаковой константой в десятичном формате; |
ADW КВххх |
Сложение аккумулятора RW1 с беззнаковой константой в десятичном формате; |
Аккумулятор RW1 складывается с константой. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит переполнение, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1, иначе сбрасывается в 0. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
4) DDW - вычитание константы из аккумулятора RW1.
Формат команды:
DDW КНхххх |
вычитание из аккумулятора RW1 константы в шестнадцатиричном формате; |
DDW KFxxxxx |
вычитание из аккумулятора RW1 знаковой константы в десятичном формате; |
DDW KUxxxxx |
вычитание из аккумулятора RW1 беззнаковой константы в десятичном формате; |
Из аккумулятора RW1 вычитается константа. Результат помещается в RW1. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. Флаг CF устанавливается в 1, если происходит переполнение, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
5) INRW - инкремент (увеличение на 1) аккумулятора RW1.
Формат команды: INRW.
Содержимое аккумулятора RW1 увеличивается на единицу. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, SF, PF, OF. Команда “заканчивает опрос”.
6) DCRW - декремент (уменьшение на 1) аккумулятора RW1.
Формат команды: DCRW.
Содержимое аккумулятора RW1 уменьшается на единицу. Флаг ZF устанавливается в 1, если результат равен 0, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Флаг PF устанавливается в 1, если результат содержит четное количество бит, равных 1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, SF, PF, OF. Команда “заканчивает опрос”.
7) IW - инкремент младшего байта аккумулятора RW1.
Формат команды: IW n, где n = 0...255.
Содержимое младшего байта аккумулятора RW1 инкрементируется n раз без переноса в старший байт. Если младший байт результата равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Флаг CF устанавливается в 1 при переполнении младшего байта RW1, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
8) DW - декремент младшего байта аккумулятора RW1.
Формат команды: DW n, где n = 0...255.
Содержимое младшего байта аккумулятора RW1 декрементируется n раз без заема из старшего байта. Если младший байт результата равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Флаг CF устанавливается в 1 при заеме, иначе сбрасывается в 0. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
9) *W -беззнаковое умножение аккумулятора RW1 на аккумулятор RW2.
Формат команды: *W.
Содержимое аккумулятора RW1 умножается на аккумулятор RW2. Результат помещается в RW1. Если есть переполнение, то флаги CF и OF устанавливаются в 1, иначе сбрасываются в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
10) *ZW - знаковое умножение аккумулятора RW1 на аккумулятор RW2.
Формат команды: *ZW.
Содержимое аккумулятора RW1 умножается на аккумулятор RW2. Результат помещается в RW1. Если есть переполнение, то флаги CF и OF устанавливаются в 1, иначе сбрасываются в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
11) /W - беззнаковое деление аккумулятора RW2 на аккумулятор RW1.
Формат команды: /W.
Содержимое аккумулятора RW1 делится на аккумулятор RW2. Частное помещается в RW1, а остаток - в RW2. Если есть “деление на 0”, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
12) /ZW - знаковое деление аккумулятора RW2 на аккумулятор RW1.
Формат команды: /ZW.
Содержимое аккумулятора RW1 делится на аккумулятор RW2. Частное помещается в RW1, а остаток - в RW2. Знак остатка равен знаку делимого. Если есть “деление на 0”, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы RW1, RW2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
13) KZW - изменение знака аккумулятора RW1.
Формат команды: KZW.
Изменяется знак аккумулятора RW1 на противоположный. Результатом этой операции можно считать преобразование аккумулятора RW1 в дополнительный код. Команда изменяет аккумулятор RW1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
14) KZR - беззнаковое преобразование аккумулятора RW1 (8 -> 16).
Формат команды: KZR.
Содержимое аккумулятора RW1 преобразуется из восьмиразрядного беззнакового числа в младшем байте аккумулятора RW1 в шестнадцатиразрядное беззнаковое число в аккумуляторе RW1. Команда изменяет аккумулятор RW1. Команда “заканчивает опрос”.
15) KZRZ - знаковое преобразование аккумулятора RW1 (8 -> 16).
Формат команды: KZRZ.
Содержимое аккумулятора RW1 преобразуется из восьмиразрядного знакового числа в младшем байте аккумулятора RW1 в шестнадцатиразрядное знаковое число в аккумуляторе RW1. Команда изменяет аккумулятор RW1. Команда “заканчивает опрос”.
16) TSTW1 - анализ аккумулятора RW1.
Формат команды: TSTW1.
Анализируется содержимое аккумулятора RW1. Флаги CF и OF устанавливаются в 0. Если аккумулятор RW1 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RW1 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RW1 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.
17) TSTW2 - анализ аккумулятора RW2.
Формат команды: TSTW2.
Анализируется содержимое аккумулятора RW2. Флаги CF и OF устанавливаются в 0. Если аккумулятор RW2 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RW2 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RW2 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.
18) +G - сложение аккумуляторов RG1 и RG2.
Формат команды: +G.
Аккумулятор RG1 складывается с аккумулятором RG2. Результат помещается в RG1. Если есть переполнение, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
19) -G - вычитание аккумулятора RG1 из RG2.
Формат команды: -G.
Аккумулятор RG1 вычитается из аккумулятора RG2. Результат помещается в RG1. Если есть заем, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
20) *G - умножение аккумулятора RG1 на RG2.
Формат команды: +G.
Аккумулятор RG1 умножается на аккумулятор RG2. Результат помещается в RG1. Если есть переполнение, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
21) /G - деление аккумулятора RG2 на RG1.
Формат команды: /G.
Аккумулятор RG2 делится на аккумулятор RG1. Результат помещается в RG1. Если есть переполнение или “деление на 0”, то флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RW1, RW2, RG1, RB1, RB2 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
22) +B - сложение аккумуляторов RB1 и RB2.
Формат команды: +B.
Аккумулятор RB1 складывается с аккумулятором RB2. Результат помещается в RB1. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если есть переполнение, то флаг CF устанавливается в 1, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Команда также изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
23) -B - вычитание аккумулятора RB1 из RB2.
Формат команды: -B.
Из аккумулятора RB1 вычитается аккумулятор RB2. Результат помещается в RB1. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если есть заем, то флаг CF устанавливается в 1, иначе сбрасывается в 0. При знаковых числах, если результат вне диапазона, то флаг OF устанавливается в 1. Команда также изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
24) INRB - инкремент (увеличение на 1) аккумулятора RB1.
Формат команды: INRB.
Содержимое аккумулятора RB1 увеличивается на единицу. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы RB1, LA и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
25) DCRB - декремент (уменьшение на 1) аккумулятора RB1.
Формат команды: DCRB.
Содержимое аккумулятора RB1 уменьшается на единицу. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
26) IB - инкремент младшего байта аккумулятора RB1.
Формат команды: IB n, где n = 0...255.
Содержимое младшего байта аккумулятора RB1 инкрементируется n раз без переноса в старший байт. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. При переполнении флаг CF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
27) DB - декремент младшего байта аккумулятора RB1.
Формат команды: DB n, где n = 0...255.
Содержимое младшего байта аккумулятора RB1 декрементируется n раз без заема из старшего байта. Если результат равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. При заеме флаг CF устанавливается в 1, иначе сбрасывается в 0 Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
28) KZB - изменение знака аккумулятора RB1.
Формат команды: KZB.
Изменяется знак аккумулятора RB1 на противоположный. Результатом этой операции можно считать преобразование аккумулятора RB1 в дополнительный код. Команда изменяет аккумуляторы LA, RB1 и флаги ZF, CF, SF, PF, OF. Команда “заканчивает опрос”.
29) TSTB1 - анализ аккумулятора RB1.
Формат команды: TSTB1.
Анализируется содержимое аккумулятора RB1. Флаги CF и OF устанавливаются в 0. Если RB1 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RB1 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RB1 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.
30) TSTB2 - анализ аккумулятора RB2.
Формат команды: TSTB2.
Анализируется содержимое аккумулятора RB2. Флаги CF и OF устанавливаются в 0. Если RB2 равен 0, то флаг ZF устанавливается в 1, иначе сбрасывается в 0. Если знаковый RB2 меньше 0, то флаг SF устанавливается в 1, иначе сбрасывается в 0. Если RB2 содержит четное количество бит, равных 1, то флаг PF устанавливается в 1, иначе сбрасывается в 0. Команда изменяет только регистр флагов F. Команда “заканчивает опрос”.