Программирование на языке LD

При программировании на языке LD в виде релейно-контактной схемы программа разделяется на сегменты. Каждый сегмент представляет собой отдельную цепь, по которой может протекать ток. Шина питания находится слева (вертикальная линия). Таким образом, каждому логическому уравнению соответствует свой сегмент.

По умолчанию в блоке PLCPRG (PRG) уже есть пустой шаблон сегмента. Для создания нового сегмента необходимо на панели инструментов нажать пиктограмму Е «Цепь (Перед)» или И «Цепь (После)».

Рассмотрим ввод программы на языке лестничных диаграмм (LD) для реализации логического уравнения

где Q1 - логическая переменная, связанная с выходом %QX1.0;

II, 12, 13 - логические переменные, связанные с соответствующими дискретными входами, которые описаны в таблице 1.2;

12 - инверсное значение логической переменной 12.

В адресах контроллера уравнение (1.1) примет следующий вид:

где %QX1.0, %1Х0.0, %1Х0.1, %1Х0.2 - переменные уравнения (1.1), записанные в адресах контроллера.

Шаг 1. Установить в токовую цепь (сегмент) обмотку (рисунок 1.7, а). Для этого нажать на кнопку * *.

Шаг 2. Щёлкнуть по тому месту (непосредственно по линии), куда нужно установить замыкающий (нормально открытый) контакт (рисунок 1.7, б).

Шаг 3. Вставить замыкающий контакт, нажав на пиктограмму 1-L (рисунок

1.7, в).

Шаг 4. Вставить параллельный замыкающий контакт, нажав на пиктограмму Ь **1 (рисунок 1.7, г).

Шаг 5. Выделить место, куда необходимо поставить нормально замкнутый (размыкающий) контакт (рисунок 1.7, д).

Шаг 6. Вставить размыкающий контакт, нажав на пиктограмму 1^1 (рисунок

1.7, е).

Порядок программирования управляющей программы

Рисунок 1.7- Порядок программирования управляющей программы

Шаг 7. Теперь необходимо ввести адреса контактов. Для этого щёлкнуть по знакам «???» над контактом и ввести адрес (ввод адреса завершается нажатием клавиши «ENTER») (рисунок 1.8).

Присвоение адресов компонентам программы

Рисунок 1.8 - Присвоение адресов компонентам программы

Для удобства пользователя при разработке программы доступна символьная адресация. Для этого необходимо предварительно объявить переменные в окне задания переменных проекта следующим образом:

  • - выбрать элемент на схеме, ввести имя переменной и нажать «ENTER»',
  • - в открывшемся окне выбрать класс, тип, адрес переменной и нажать «ОК» (рисунок 1.9).

После объявления всех входных и выходных переменных программа примет вид, представленный на рисунке 1.10, а окно задания переменных - на рисунке 1.11.

Для удаления какого-либо элемента программы необходимо его выделить и нажать на клавиатуре клавишу Delete. Для отмены предыдущего действия необходимо выбрать в меню «Правка» пункт «Отменить».

Задание переменных

Рисунок 1.9 - Задание переменных

Вид программы с использованием обозначенных переменных

Рисунок 1.10 - Вид программы с использованием обозначенных переменных

Окно задания переменных

Рисунок 1.11- Окно задания переменных

В случае некорректного ввода адреса или символического имени программа высвечивает некорректное обозначение красным цветом.

После ввода программы необходимо скомпилировать ее. Для этого в выпадающем меню «Проект» необходимо выбрать пункт «Компилировать», либо нажать клавишу F11. Лог компиляции программы будет выведен в окно сообщений. Если программа набрана правильно (рисунок 1.12, а), то последняя строка будет иметь вид: «0 ошибок, 0 предупреждений». В том случае, если в программе будут найдены ошибки (рисунок 1.12, б), то они будут выделены в логе красным цветом. Также в последней строке будет: «X ошибок, X предупреждений». После исправления ошибок необходимо еще раз откомпилировать программу. После компиляции программа готова к загрузке в память ПЛК.

Примеры сообщений после компиляции пользовательской

Рисунок 1.12 - Примеры сообщений после компиляции пользовательской

программы

Рассмотрим реализацию логического уравнения (1.1) на других языках:

1) на языке инструкций (/L) программа будет иметь достаточно простой и понятный вид

LDN %/A'O.l (загрузить инверсный контакт);

AND %1Х0.0 (загрузить контакт);

OR %1Х0.2 (загрузить параллельный контакт);

ST %QX .0 (результат выдать на обмотку);

  • 2) разработка программы на языке функциональных блоковых диаграмм (FBD) ведется в следующей последовательности:
    • - в свойствах проекта настроить язык программирования FBD;
    • - на панели инструментов левой клавишей мыши нажать пиктограмму^ . На рабочем поле в новом сегменте должно появиться изображение элемента (рисунок
  • 1.13, а), в поле названия элемента указать тип элемента AND («И»);
  • - около входов элемента указать адреса %1Х0.0 и %1Х0.1 сверху вниз соответственно;
  • - на входе, соответствующем адресу %1Х0А, нажать правую клавишу мыши и выбрать пункт «Инверсия» (рисунок 1.13, б);
  • - установить курсор на выходной части элемента «И»;
  • - левой клавишей мыши нажать пиктограмму . В поле названия элемента указать тип элемента OR («ИЛИ»), напротив свободного входа указать адрес %1Х0.2 (рисунок 1.13, в);
  • - установить курсор на выходной части элемента OR («ИЛИ»);
  • - левой клавишей мыши нажать пиктограмму В сформировавшемся выходе необходимо указать адрес %QX1.0. Программа примет итоговый вид (рисунок
  • 1.13, г).
Программа на языке FBD

Рисунок 1.13- Программа на языке FBD

Рассмотрим вставку функции на примере создания следующей программы: если кратковременно включить тумблер /1 (адрес IX0.0), то включится выход Q1 (адрес QX 1.0), если кратковременно включить тумблер /2 (адрес /Х0.1), то выход Q выключится. Для этого воспользуемся функцией SR- триггера:

  • 1) установить выходную обмотку с адресом %ОХ1.0 и контакт с адресом % 1X0.0',
  • 2) установить курсор в новом сегменте. Левой клавишей мыши на панели инструментов нажать пиктограмму ^. В появившемся окне (рисунок 1.14, а) в закладке «Стандартные функциональные блоки» раскрыть библиотеку «Стандартные функциональные блоки». В открывшемся перечне раскрыть закладку «Bistable Function Blocks», в которой выбрать функциональный блок SR, после чего нажать «ОК». В сегменте установится блок SR -триггера (рисунок 1.14, б);
  • 3) в поле «???» над блоком вписать название блока SR 1;
  • 4) во входной цепи RESET на месте «???» установить адрес %1Х0.1 Программа примет следующий вид (рисунок 1.14, в).

Для программирования контроллера ПЛК150 доступно четыре вида таймеров:

  • -таймер-формирователь импульса (7Т5);
  • - таймер с задержкой включения (TON);
  • - таймер с задержкой выключения (TOF);
  • - часы реального времени (RTC).
l.l4 —Пример использования функциональных блоков

Рисунок l.l4 —Пример использования функциональных блоков

В таблице 1.3 приведены примеры реализации таймеров на языках IL и ST.

На рисунке 1.15 представлено графическое изображение блоков таймеров, используемое в языке FBD. Блок, реализующий таймер, имеет следующие входы и выходы: IN - вход запуска, EN - вход разрешения, РТ - уставка (заданное время), Q - выход (состояние таймера), ЕТ- оставшееся время.

Таблица 1.3 - Примеры реализации таймеров на языках IL и ST

Вид

таймера

Пример

объявления

Пример IL

Пример ST

ТР

TPInst: ТР

CAL TPInst

(IN:=VarBOOLl, PT:=T#5s) ED TPinst.Q ST VarBOOLl

TPInst (IN:=VarBOOLl, PT.=T#5s)

VarBOOLl:=TPInst.Q

TON

TONInst: TON

CAL TONInst

(IN:=VarBOOL, PT:=T#5s) LD TONInst. Q ST VarBOOLl

TONInst

(.IN:=VarBOOL, PT:=T#5s)

TOF

TOF Inst: TOF

CAL TOFInst

(IN:=VarBOOLl, PT =T#5s) LD TOFInst. Q ST VarBOOLl

TOFInst

(IN:=VarBOOL 1, PT:=T#5s)

VarBOOLl.=TOFInst. Q

Для задания уставки времени используется идентификатор Т#.

Уставку времени можно задать в BCD-коде с использованием следующего синтаксиса: T#AAd_BBh_CCm_DDs_EEEms, где АА = сутки, ВВ = часы, СС = минуты, DD = секунды и ЕЕЕ = миллисекунды.

Каждый таймер использует структуру, хранящуюся в блоке данных, для сохранения данных о времени. При этом назначается блок данных, когда устанавливается команда таймера.

В режиме RUN текущее значение таймера уменьшается на одну единицу через интервал времени, установленный базой времени, до тех пор, пока значение времени не станет равным нулю, что соответствует срабатыванию таймера.

Для программирования контроллера ПЛК150 доступно три вида счетчиков:

  • - инкрементный (на сложение) счетчик (CTU);
  • - декрементный (на вычитание) счетчик (СТО);
  • - инкрементный/декрементный (реверсивный) счетчик (CTUD).

В таблице 1.4 приведены примеры реализации счетчиков на языках IL и ST.

— Таймеры и их временные диаграммы работы

Рисунок 1.15 — Таймеры и их временные диаграммы работы

На рисунке 1.16 представлено графическое изображение блоков счетчиков, используемое в языке FBD. Блок, реализующий счетчик, имеет следующие входы и выходы: CU - вход на сложение, CD - вход на вычитание, PV - задание (уставка) счетчика, RESET - вход сброса, LOAD - вход загрузки задания счетчика, Q, QU, QD - выход (состояние) счетчика, CV- текущее значение счетчика в двоичном формате.

Уставка счетчика задается либо константой в формате <значение>, либо из области памяти (/, Q, М). Нарастающим фронтом сигнала на входе LOAD в счетчик заносится уставка с входа PV. При нарастающем сигнале на входе CU значение счетчика увеличивается на «1». При нарастающем фронте сигнала на входе CD значение счетчика уменьшается на «1», если значение счетчика больше, чем «О». При нарастающем фронте сигнала на входе RESET счетчик сбрасывается (в счетчик записывается значение «О»).

Таблица 1.4 - Примеры

реализации счетчиков на языках IL и ST

Счетчик

Пример

объявления

Пример IL

Пример ST

CTU

CTUinst:

CTU

CAL CTUInst(CU:=VarBOOLl, RESET:=VarBOOL2, PV.=VarINT)

LD CTU Inst. Q ST VarBOOLi LD CTU Inst.CV ST VarINTI

CTUInst(CU.=VarBOOL 1, RESET =VarBOOL2, PV:=VarINTl) VarBOOL3.=CTUInst.Q VarINT2:-CTUInst.CV

CTD

CTDInst:

CTD

CAL CTDInst(CD:=VarBOOLl, LOAD:=VarBOOL2, PV:=VarINTl)

LD CTDInst. Q ST VarBOOLi LD CTDInst.CV ST VarINT2

CTDInst{CD.=VarBOOL 1, LOAD:=VarBOOL2, PV:=VarINTl) VarBOOL3:=CTDInst. Q VarINT2:=CTDInst. CV;

CTUD

CTUDinst:

CTUD

CAL CTUDImtiCU-VarBOOLl, RESET:=-VarBOOL3, LOAD.-VarBOOLA, PV:=VarINTl)

LD CTUDinst. Q ST VarBOOL5 LD CTUDinst. QD ST VarBOOLb LD CTU Inst.CV ST VarINT2

CTUDImtiCU-

VarBOOLl, RESET:=-

VarBOOL3,

LOAD:=VarBOOLA,

PV:=VarINTl)

VarBOOL5:=

CTUDinst. Q; VarBOOL6:=

CTUD Ins t.QD; VarINT2:= CTUinst.CV;

Счетчики

Рисунок 1.16- Счетчики

Значение реверсивного счетчика остается неизменным, если оба счетных входа имеют нарастающий фронт.

В счетчике CTU выход Q устанавливается в «1», когда значение СП достигает значения PV. В счетчике CTD выход Q устанавливается в «1», когда значение CV

достигает «О».

В счетчике CTUD выход QU устанавливается в «1», когда значение CV больше или равно значению PV, а выход QD - когда значение CV достигает «О».

Кроме таймеров и счетчиков в программируемом контроллере ОВЕН ПЛК150 используется стандартный набор операндов и функций, присущий всем контроллерам:

  • - логические;
  • - арифметические;
  • - операции сдвига;
  • - операции сравнения и т.д.
 
Посмотреть оригинал
< Пред   СОДЕРЖАНИЕ   ОРИГИНАЛ   След >