- •Лабораторная работа 1 Программирование плк на языке ld.
- •Общие сведения.
- •Порядок выполнения работы
- •Составление прикладной программы.
- •6. Запись программы в контроллер
- •Лабораторная работа 2 Программирование плк на языке st.
- •Общие сведения.
- •Оператор выбора if
- •Цикл for
- •Основные типовые конструкции в st
- •Вызов функционального блока в st
- •Циклы while и repeat
- •2. Порядок выполнения работы
- •3. Создание проекта программы.
- •Аккумулятор
- •Переход на метку
- •Модификаторы
- •Операторы
- •Порядок выполнения работы
- •3. Создание проекта программы.
- •Соединительные линии
- •Порядок выполнения fbd
- •Метки, переходы и возврат
- •2. Порядок выполнения работы
- •Создание проекта программы.
- •Переходы
- •Начальный шаг
- •Параллельные ветви
- •Альтернативные ветви
- •Переход на произвольный шаг
- •2. Порядок выполнения работы
- •3. Создание проекта программы.
- •Литература
Аккумулятор
Абсолютное большинство инструкции IL выполняют некоторую операцию с содержимым аккумулятора. Операнд, конечно, тоже принимает участие в инструкции, но результат опять помещается в аккумулятор. Например, инструкция SUB 10 отнимает число 10 от значения аккумулятора и помещает результат в аккумулятор. Команды сравнения сравнивают значение операнда и аккумулятора, результат сравнения ИСТИНА или ЛОЖЬ вновь помещается в аккумулятор. Команды перехода на метку способны анализировать аккумулятор и принимать решение - выполнять переход или нет. Аккумулятор IL является универсальным контейнером, способным сохранять значения переменных любого типа.
В аккумулятор можно поместить значение типа BOOL, затем INT или REAL, транслятор не будет считать это ошибкой. Такая гибкость не означает, что аккумулятор способен одновременно содержать несколько значений разных типов. Только одно, причем тип значения также фиксируется в аккумуляторе. Если операция требует значение другого типа, транслятор выдаст ошибку. В стандарте МЭК вместо термина «аккумулятор» используется термин «результат» (result). Так, инструкция берет «текущий результат» и формирует «новый результат». Тем не менее почти все руководства по программированию различных фирм широко используют термин «аккумулятор».
Переход на метку
Программа на IL выполняется подряд, сверху вниз. Для изменения порядка выполнения и организации циклов применяется переход на метку. Переход на метку может быть безусловным JMP - выполняется всегда, независимо от чего-либо. Условный переход JMPC выполняется только при значении аккумулятора ИСТИНА. Переход можно выполнять как вверх, так и вниз. Метки являются локальными, другими словами, переход на метку в другом POU не допускается. Переходы нужно организовывать достаточно аккуратно, чтобы не получить бесконечный цикл:
Скобки
Последовательный порядок выполнения команд IL можно изменять при помощи скобок. Открывающая скобка ставится в инструкции после операции. Закрывающая скобка ставится в отдельной строке. Инструкции, заключенные в скобки, выполняются в первую очередь. Результат вычисления инструкций в скобках помещается в дополнительный аккумулятор, после чего выполняется команда, содержащая открывающую скобку.
Например:
LD 1
ST Counter
LD 5
MUL (2
SUB 1
)
ST y (*y = 5* (2-1) = 5*)
LD 5
MUL 2
SUB 1
ST y (*y = 5 * 2 - 1 = 9*)
Скобки могут быть вложенными. Каждое вложение требует организации некоего временного аккумулятора. Это вызывает неоднозначность при выходе из блока скобок командами JMP, RET,CAL и LD. Применять эти команды в скобках нельзя.
Модификаторы
Добавление к мнемонике некоторых операторов символов -модификаторов «С» и «N» модифицирует смысл инструкции. Символ «N» (negation) вызывает диверсию значения операнда до выполнения инструкции. Операнд должен быть типов BOOL, BYTE, WORD или DWORD. Символ «С» (condition) добавляет проверку условий к командам перехода, вызова и возврата. Команды JMPC, CALC, RETC будут выполняться только при значении аккумулятора ИСТИНА. Добавление символа 'N' приводит к сравнению условия с инверсным значением аккумулятора. Команды JMPCN, CALCN, RETCN будут выполняться только при значении аккумулятора ЛОЖЬ. Модификатор «N» без «С» не имеет смысла в данных операциях и не применяется.
