Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Раздел 2. Методы программирования контроллеров.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.66 Mб
Скачать

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)