
- •Раздел 2. Программирование контроллеров 2
- •Раздел 2. Программирование контроллеров
- •2.1. Системное и прикладное программное обеспечение
- •2.2. Ос реального времени.
- •2.3. Рабочий цикл и время реакции плк
- •2.4. Классификация методов разработки по контроллеров
- •2.5. Стандарт iec 61131-3.
- •2.6. Инструментальная система программирования контроллеров iSaGraf.
- •2.7. Данные и переменные в iSaGraf
- •2.8. Языки программирования контроллеров
- •2.8.1. Язык sfc.
- •2.8.1.1. Основные графические компоненты языка.
- •2.8.1.2. Динамические правила языка sfc.
- •2.8.1.3. Описание действий внутри шагов.
- •2.8.1.4. Описание условий прикрепленных к переходу.
- •2.8.2. Язык fbd.
- •2.8.3. Язык ld.
- •2.8..4 Язык st.
- •2.8.5. Язык il
- •2.9. Программирование задач логического управления на стандартных языках.
- •2.10. Последовательность создания прикладных программ в системе iSaGraf.
- •2.11 Повторное использование кода в iSaGraf
- •2.11.1. Типы программных модулей
- •2.11.2. Определение интерфейса программных модулей
- •2.11.3. Словарь локальных переменных
- •2.11.4. Вызов программного модуля
- •2.11.4.1. Вызов функций и подпрограмм
- •2.11.4.2. Вызов функциональных блоков
- •2.11.5. Управление программами-потомками на языке sfc.
- •2.12. Библиотека iSaGraf
2.8.3. Язык ld.
LD (Ladder Diagram) - графический язык программирования, являющийс стандартизованным вариантом класса языков релейно-контактных схем. Логические выражения на этом языке описываются в виде реле, которые широко применялись в области автоматизации в 60-х годах. Ввиду своих ограниченных возможностей язык дополнен привнесенными средствами: таймерами, счетчиками и т.п. Происхождение: различные варианты языка релейно-контактных схем (Allen-Bradley, AEG Schneider Automation, GE-Fanuc, Siemens).
Присутствие в стандарте языка LD определяется, скорее всего, данью традициям: для релейной техники было разработано огромное количество оборудования и алгоритмов. Сегодня, имея типовой набор цифрового ввода/вывода, можно создавать управляющие системы на отлаженной годами алгоритмической базе.
Это графическое представление булевых функций содержащее контакты (входные переменные) и обмотки (выходные переменные). Графические символы языка LD очень похожи на изображение в релейно-контактных схемах, при этом приняты следующие условные изображения.
Для изображения входных контактов существует несколько символов:
Прямой(замыкающий)
Обратный
контакт(размыкающий)
Контакт
с обнаружением нарастания фронта
Контакт
с обнаружением падающего фронта
Контакт с обнаружением положительного фронта
Значение
правого края TRUE, если BOO1(предыдущее) =
FALSE и BOO1(текущее) = TRUE
Контакт с обнаружением отрицательного фронта
Значение
правого края TRUE, если BOO1(предыдущее) =
TRUE и BOO1(текущее) = FALSE
Используется несколько типов обмоток:
Прямая
обмотка
Обратная
обмотка
Катушка с обнаружением положительного фронта
O
ut1
устанавливается в TRUE, когда булево
состояние левого подключения меняется
от FALSE к TRUE.
Выходная переменная сбрасывается в FALSE во всех других случаях
Катушка с обнаружением отрицательного фронта
Out1 устанавливается в TRUE, когда булево состояние левого подключения меняется от TRUE к FALSE
В
ыходная
переменная сбрасывается в FALSE во всех
других случаях
Пример на языке LD.
Output 1 – равен TRUE , если Input 1= TRUE
Output 1 – равен FALSE , если Input 2 = TRUE
Output 2 – равен TRUE , если Input 1 + Input 2 = TRUE
2.8..4 Язык st.
ST (Structured Text) - текстовый высокоуровневый язык общего назначения, по синтаксису ориентированный на Паскаль. Происхождение: Grafcet (Telemechanique-Groupe Schneider). Язык по умолчанию используется для описания действий внутри шагов и переходов.
Основной синтаксис языка.
Программа на языке ST это список операторов, каждый из которых заканчивается «;».
В программе имена переменных и констант разделяются либо неактивными разделителями: ENTER, ТАБ, либо активными, которые имеют заранее определённое значение (например, разделители “<“, “>“...). Комментарии могут вставляться в текст произвольным образом и оформляются следующим образом: ( * комментарий * ).
Основные операторы языка.
( ) - для выделения частей выражения с целью изменения приоритета выполнения операций , в их отсутствии используется приоритет по умолчанию.
Булевы операторы: NOT , AND , OR , XOR ,
REDGE – обнаружение переднего фронта ,
FEDGE – обнаружение спада или заднего фронта.
Арифметические операторы:
+ сложение , - вычитание
,
умножение , /
деление.
Операторы сравнения: < , > , = , <> , <= , >= .
:= - присваивает переменной значение некоторого выражения или константы:
< переменная > := <любое выражение или константа >
X1:= a+b.
Переменная должна быть внутренней или входной , также иметь один тип с выражением.
Return завершает выполнение текущей программы.
Условное действие IF...END_IF
Простейшая форма (инструкция выполняет действие, если условие истинно).
IF условие THEN действия;
END_ IF;
Полная форма
IF условие1 THEN действие1;
ELSIF условие2 THEN действие 2;
ELSE действие3;
END_IF;
WHILE – это циклическая структура для группы операторов на языке ST , условие продолжения которой вычисляется до каждой итерации.
while < условие > do
< оператор 1 >;
< оператор 2 >;
end_while;
Инструкция выполняет повторно действие пока условие истинно.
— Условие проверяется до выполнения действия. Если при первой проверке условие ложно, то действие не выполняется ни разу.
— Допускается вложение различных управляющих структур WHILE.
Примечание.
Т.к. система программирования и исполнения программ на языке ST является циклической синхронизации, то исходные переменные не обновляются в течение операции while и следовательно изменение состояния входной переменной не может быть использовано для описания условия оператора while.
REPEAT – циклическая структура , условие продолжения которой вычисляется после каждой итерации .
Repeat
< оператор 1 >;
< оператор 2 >;
until < условие >;
end_repeat;
Инструкция выполняет повторно действие до момента, когда условие станет истинно.
Примечание аналогичное для while.
FOR - выполняет ограниченное количество итераций , используя целочисленную переменную (integer) для ограничения.
for < index > := < min > to < max > by <step >
do < оператор 1 >;
< оператор 2 >;
end_for;
где index – внутренняя переменная , step – шаг изменения переменной (при отсутствии равно 1).
Инструкция выполняет обработку операции определенное количество раз, увеличивая индекс на 1 в каждом цикле.
FOR индекс: = начальное значение ТО конечное значение DO
действие;
END_FOR;
— Когда индекс строго больше конечного значения, выполнение программы продолжается с инструкции, следующей за ключевым словом END_FOR.
— Индекс увеличивается автоматически, без участия пользователя.
— Действие представляется списком инструкций.
— Начальное значение и конечное значение могут быть цифровыми выражениями типа 'слово'.
— Индекс может быть объектом типа 'слово', который доступен в режиме чтения.
— Допускается вложение различных управляющих структур FOR.
Множественный выбор CASE
О
ператор
CASE позволяет
выполнить разные действия, в зависимости
от значения целочисленной переменной:
Оператор множественного выбора CASE позволяет выполнить различные группы выражений в зависимости от значения одной целочисленной переменной или выражения. Синтаксис:
CASE <целочисленное выражение> OF
<значение 1>: <выражения 1>;
<значение 2>, <значение 3>: <выражения 3>;
<значение 4>..<значение 5>: <выражения 4>;
ELSE
<выражения ELSE>;
END_CASE;
Если значение выражения совпадает с заданной константой, то выполняется соответствующая группа выражений. Прочие условия не анализируются (<значение 1>: <выражения 1>;).
Если несколько значений констант должны соответствовать одной группе выражений, их можно перечислить через запятую (<значение 2> , <значение 3>: <выражения 3>;).
Диапазон значений можно определить через двоеточие (<значение 4>..<значение 5>: <выражения 4>;).
Группа выражений ELSE является необязательной. Она выполняется при несовпадении ни одного из условий (<выражения ELSE>;).
Пример:
CASE byLeft/2 OF
0,127: bReset := TRUE; Varl := 0;
16..24: Varl := 1;
ELSE
Varl := 2;
END_CASE;
Значениями выбора CASE могут быть только целые константы, переменные использовать нельзя. Одинаковые значения в альтернативах выбора задавать нельзя, даже в диапазонах. Так, следующий пример обязан вызвать ошибку при трансляции:
CASE byLeft OF
20: Varl := 0;
16..24: Varl := 1;
END_CASE;
Безусловно, оператор CASE «слабее» оператора IF, не имеющего подобных ограничений. Но формат CASE не только выразителен для программиста, но и более эффективен. Использование целочисленных констант позволяет транслятору выполнить оптимизацию кода, часто весьма существенную (ПЕТРОВ).
EXIT
— Ключевое слово EXIT используется для остановки вычислений в цикле и продолжения с инструкции, следующей за ключевым словом конца цикла.
— Оно может быть использовано только внутри одного из трех циклов: WHILE, REPEAT или FOR.
— Оно прерывает выполнение ближайшего цикла, т.е. не останавливает выполнение других окружающих его циклов.
Операторы управления таймерными параметрами.
TSTART пуск обновление таймерной переменной, после выполнения этого оператора таймерная переменная наращивается на каждом временном цикле выполнения программы вплоть до остановки оператором TSTOP.
Пример программы на ST.
Вариант 1:
if input1 then output1:=true;
end if;
if input2 then output1:=false;
end if;
output2:= input1 or input2;
Вариант 2
bol:=(bol1 OR bol2) AND NOT(bol3)