- •Содержание
- •5. Элементы языка программирования 66
- •6. Библиотека стандартных функциональных блоков 77
- •Введение
- •Общие сведения
- •Программистская модель плк с300
- •Внешний вид контроллера
- •Модули ввода/вывода
- •Распределение памяти контроллера
- •Программистская модель контроллера.
- •Регистры и флаги
- •Области операндов контроллера
- •Отображение входов и выходов
- •Область данных
- •Область меток
- •Область таймеров
- •Область счётчиков
- •Область периферии
- •Область расширенной периферии
- •Структура и обработка технологических программ
- •Система команд лмк
- •Логические команды
- •Команды присвоения битных операндов
- •Команды опроса битных переменных
- •Команды переходов
- •Команды пересылки
- •Арифметические команды
- •Команды сравнения
- •Логические байтовые и словные команды
- •Байтовые и словные команды сдвига
- •Индексная адресация.
- •Счетчики
- •Команды обработки счётчиков
- •Последовательность программирования счётчика
- •Примеры программирования счётчика
- •U е 5.0 ;Если сработал фотоэлемент на входе e5.0
- •Формат слова уставки счётчика
- •Таймеры
- •Команды обработки таймеров
- •Последовательность программирования таймера
- •Примеры программирования таймера
- •Формат слова уставки таймера
- •Организационные команды
- •Команды вызова, активизации и завершения блоков
- •Команды блокировки, деблокировки, задания допустимой длительности скана
- •Команды структурирования текста
- •Команды обработки канала связи
- •Элементы языка программирования
- •Организационные блоки
- •Особенности прерывания циклической обработки блоками ob2...Ob18
- •Программные блоки
- •Функциональные блоки
- •Формат функциональных блоков
- •Особенности использования формальных параметров
- •Блоки данных
- •Формат и использование блока назначений nb0
- •Комментарии к программе
- •Комментарий к строке
- •Комментарий к операнду
- •Комментарий к элементу цепи ркс и к цепи ркс
- •Библиотека стандартных функциональных блоков
- •Блоки организации связи по каналу “эвм”
- •Блоки обработки системы реального времени
- •Арифметические блоки
- •Блоки обработки модулей расширенной периферии
- •Системные блоки
- •Блоки регулирования
Индексная адресация.
Система команд блочного языка программирования контроллера (ЛМК) является функциональным аналогом системы команд языка STEP 5 фирмы SIEMENS. В связи с различием в архитектуре контроллеров, имеются незначительные отличия и в системе команд. Команды не имеют деления на основной и расширенный набор, как в STEP 5. Это позволяет использовать команды, относящиеся к “расширенному набору”, не только в функциональных блоках, как в STEP 5, но и в программных и организационных. Система команд дополнена командами работы с байтами, работающими быстрее, чем команды работы со словами.
При программировании в форме ЛМК система команд ПЛК С300 включает в себя около 200 основных команд. Большинство команд, имеющих операнд в памяти, имеют три модификации, отличающиеся адресацией операнда:
прямая адресация - в команде прямо указывается имя операнда, например: U Е3.4; R М75.6; LW DW17;
индексная адресация - индексом является содержимое какого-либо слова активного блока данных или слова меток, в команде указывается имя операнда, от которого ведется индексирование (базовый операнд) – “индексный регистр”;
Формат индексных команд:
В DWx (MWx)
+КОМАНДА ОПЕРАНД
В строке В DWx (MWx) указывается слово DWx активного блока данных или слово меток MWx, которое будет использовано в качестве индекса. Во второй строке перед командой ставится знак “+” без пробелов между ним и командой. Эти две строки являются единой командой, и между ними нельзя вставлять другие строки (даже пустые). Операнд, к которому будет произведено обращение, определяется суммой указанного имени операнда и содержимого индексного слова данных (меток), например:
В DW 17
+U Е 3.0
Если содержимое слова DW17 текущего активного блока равно 1, то команда U будет оперировать с операндом Е3.0 + 1 = Е3.1. Если содержимое слова DW17 равно 7, то операндом будет Е3.0 + 7 = Е3.7. Если номер бита превысит 7, то произойдет переход к следующему байту, т.е. если содержимое слова DW17 равно 13, то операндом будет Е3.0 + 13 = Е3.13 = Е4.5. Так индексируются битные операнды Ех.y, Ax.y, Мх.y.
Операнды типа байт, слово, бит байта или слова (QBx.y, QWx.y, DWx.у), таймер, счётчик, блок индексируются поэлементно, т.е. увеличение индекса на 1 приводит к переходу к операнду со следующим номером (от ЕВ5 к ЕВ6, от MW7 к MW8, от QB17.3 к QB18.3, от Т17 к Т18, от Z50 к Z51, от FB12 к FB13 и т.д.). Если индекс имеет отрицательное значение (-1, -2), то происходит смещение к предыдущим операндам (от ЕВ5 к ЕВ4, ЕВЗ).
При использовании индексных команд с помощью индекса можно сместить адрес обращения команды за пределы существующей в контроллере памяти, что приведет к появлению ошибки в работе программы. Поэтому следует внимательно следить за применением этих команд;
ПРИМЕР: Занести “5” в группу слов данных DW40...DW49.
; Возьмем в качестве индексного регистра DW 07
; и будем использовать промежуточное значение бита метки М1.1
; М 1.1 = 1 означает, что индексный регистр DW 07 уже обнулялся, =0 – значит, нужно его обнулить
U M 1.1 ; занесение значения метки М 1.1 в аккумулятор LA
SPB =STEP ; если значение LA равно 1, то переход на метку STEP
LW KF 0 ; иначе загрузка константы 0 в аккумулятор RW1
TW DW 07 ; перенос значения аккумулятора RW1 в индексный регистр DW 07
=1 M 1.1 ; присвоение 1 метке М 1.1
STEP :LW KF 10 ; загрузка константы 10 в аккумулятор RW1
LW DW 07 ; загрузка значения DW 07 в RW1, при этом старое значение
; RW1 (10) переместится в RW2
!=W ; сравнение аккумуляторов RW1 и RW2 (см. п.4.9.)
SPB =END ; если RW1=RW2 (это значит, что в DW 07 счет дошел до 10),
; то переход на метку END
LW KF 5 ; если аккумуляторы не равны, то записываем 5 в аккумулятор RW1
B DW 07 ; и загружаем значение аккумулятора (5) в слово данных
+TW DW 40 ; с номером 40 + [DW 07]
LW DW 07 ; загрузка значения DW 07 в аккумулятор RW1
IW 1 ; инкрементирование аккумулятора – RW1 : = RW1 + 1
TW DW 07 ; загрузка полученного значения обратно в DW 07
END :BE ; перейти в начало блока.
использование в качестве операнда формального параметра. Эти команды допустимы только в функциональных блоках.
Признаком формального параметра является то, что имя операнда начинается со знака “=” (например, =fo). В этом случае команда оперирует с операндом, который будет ей передан в качестве данного формального параметра при вызове этого функционального блока. При одном вызове в качестве =fo может быть назначен, например, операнд Е7.2 (если fo типа BI, т.е. битного типа, что определяется в заголовке функционального блока), а при другом вызове – операнд М14.7. Тогда одна и та же команда, использующая в качестве операнда =fo, при первом вызове обратится к Е7.2, а при втором - к М14.7. Такие команды удобны для написания функций, процедур, выполняющих операции над операндами, не задаваемыми жестко, а определяемыми в момент вызова этой функции, процедуры (см. п. 4.4.2).