Списка инструкций (СИ).
Перед программированием на языке релейно-контактных схем нужно выполнить несколько предварительных этапов.
· Надо переопределить все составляющие оборудования в символы, понятные для контроллера. Он ведь ничего не знает о реле, выключателях, двигателях. Он может только оценить состояния входов ( включено / выключено) и по введённой в него программе принять решение о том, включить или выключить состояния тех или иных выходов.
· Заменить источник питания. В РКС для этого использованы две вертикальные прямые с обеих сторон окна описания программы. Можно считать одну из них плюсовой шиной питания, а другую – минусовой.
· Присвоить символы входам и выходам.
Как пройти эти этапы составления программы, показывается на примере простейшей задачи. На рисунке 1.16 приведена схема подачи питания на контроллер. Оно включается нажатием кнопки Start, а отключается кнопкой аварийного или штатного останова (с индексом 3). Если предположить, что некоторый контроллер по своей программе должен включить питание на контроллер, изображённый на рис.1.16, а под кнопками с ручным управлением понимать управляемые контакты, то в символике языка РКС это можно представить следующим образом.
Назначим символы входам и выходам.
Вход (X1) – нормально открытый (разомкнутый) контакт. При срабатывании кнопки Startэтот контакт замкнётся.
Вход (X2) – нормально закрытый (замкнутый) контакт. При срабатывании кнопки останова этот контакт разомкнётся.
Выход (Y1) – цепь питания контроллера, обозначающая в данном примере некоторую коммутируемую нагрузку.
Программа включения будет выглядеть так:
В реальных программах взаимодействует много сигналов, и отдельные строки записываются одна под другой (лестницей, ступеньками). Видимо поэтому язык РКС в англоязычной литературе часто обозначается как LAD (Ladder Diagram), т.е. лестничных диаграмм.
Отметим, что рассмотренную задачу включения нагрузки можно представить иначе. Речь идёт о языке, который называется “Список Инструкций” (СИ). Поскольку среда программирования MELSEC MEDOC FX / WIN позволяет составлять программу и в одном языке, и в другом, то, чтобы избежать излишних повторений при их описании, одни и те же примеры будут рассмотрены параллельно и записаны в форматах представления обоих языков (РКС и СИ).
В языке РКС и типы контактов, и их взаимодействие отображаются в тексте программы путём указания вида их соединения.
В языке СИ и тип контакта, и способ взаимодействия обозначаются соответствующей командой.
Самые простые КОМАНДЫ обозначают только тип контакта.
1. Команда LD.
И графическое отображение в РКС, и команда LDв СИ обозначают нормально открытый (незамкнутый) контакт. При замыкании X0 выход Y0 перейдёт в состояние ON (включено).
2. Подобно этому символ и команда LDI обозначают нормально закрытый (замкнутый) контакт X1, при срабатывании которого выход Y1 перейдёт в состояние OFF (выключено).
Значительная часть КОМАНД определяет характер взаимодействия сигналов.
3. Команда AND –логическое умножение (конъюнкция). Результатом операции является «истина», если оба операнда принимают значение «истина», и «ложь» - во всех других случаях.
4. Команда ANI- отрицание логического умножения, так она названа. Но не следует воспринимать её как отрицание конъюнкции.
Убедиться в том, что команда ANI и логическая функция “отрицание конъюнкции” – это не одно и то же, можно простым сравнением их таблиц состояний. Команда ANI - это скорее отрицание импликанты, так называемая коимпликанта . Можно считать её схемой совпадения на два входа с запретом по X1. Проще всего это представить себе как последовательное соединение элементов LD и LDI.
5. Команда OR -логическое сложение
Эта команда применяется для описания фрагмента соединения, при котором выходная цепь Y0 переходит во включенное состояние, если хотя бы один из входных сигналов (X0 или X1) примет значение ON.
6.Команда ORI– отрицание логического сложения.
К этой команде в полном объёме применимы те замечания, которые были сделаны по поводу команды ANI. Её следует ассоциировать только с вполне определённым соединением входных сигналов.
До сих пор перечисленные команды касались описания сигналов входных устройств, не обладающих памятью. Чаще всего это реальные устройства дискретного действия, осуществляющие связь контроллера с внешней средой.
Следует обратить внимание на то, что эти команды могут применяться не только к физически существующим устройствам (датчикам), но и к программно реализованным внутренним реле контроллера. По терминологии MELSEC MEDOC FX / WIN этим понятием объединяются самые различные внутренние элементы программы: вспомогательные реле и другие элементы коммутации. Среды программирования организованы так, что в программе можно обращаться к входным и выходным цепям этих элементов как к реально существующим устройствам.
Пример на использование внутренних реле.На рисунке 2.1 показан резервуар, на стенках которого установлены датчики, обозначения X0 и X1 которых пусть будут соответствовать уровням их установки. Текущее значение уровня
Рис.2.1
жидкости в ёмкости определяется соотношением интенсивностей расхода и пополнения её путём включения насоса, обозначаемого выходной величиной Y0.
Задача сводится к следующему. Уровень воды в ёмкости надо поддерживать в пределах от X0 до X1. Для этого при опускании уровня до X0 нужно включить насос и выключить его, когда уровень достигнет X1. Считать, что датчики X0 и X1 работают одинаково: их выходной сигнал принимает значение ON, когда измеряемый уровень опускается ниже уровня их установки.
Предстоит определиться с тем, как организовать управление включением насоса, или иначе – как программно должны быть связаны входные воздействия X0 и X1 с управляющим выходным сигналом Y0 ?
а) Пусть насос будет включаться при одновременно включенных обоих датчиках, т.е. в полном соответствии с содержанием команды AND. Что получится в итоге?
Уровень должен упасть ниже X0, чтобы можно было включить насос. Включили, восстановили уровень X0, датчик уровня X0 выключился, и вместе с ним выключился насос. При таком управлении уровень воды в резервуаре принципиально не может быть поднят выше X0.
б) Расположим в программе входные сигналы «параллельно», как это принято в команде OR, чтобы насос включался при включенном хотя бы одном из датчиков. К чему это приведёт?
-
Пока уровень ниже X1, датчик этого уровня будет включен, и, независимо от состояния датчика X0, насос будет стремиться подкачивать воду до достижения уровня X1, после чего он выключится. Из–за естественного разбора воды её уровень когда-то чуть-чуть станет ниже X1, и насос сразу будет вынужден включиться.
Иными словами, получен один из самых плохих вариантов управления, при котором «включение / выключение» насоса будет происходить постоянно и непрерывно, а регулируемый уровень не сможет уйти от X1.
в) Задача решается гораздо проще применением внутреннего реле. М1 – программно организованное внутреннее реле.
При опускании уровня ниже X0 оба датчика включены. Срабатывает “реле” М1, встаёт на самоблокировку от отпускания контакта X0 и включает насос Y0. Самоблокировка придаёт реле способность запоминать включённое состояние, поэтому часто используется в релейной схемотехнике. Реализуется она следующим образом. Реле, перейдя во включенное состояние, одной парой своих контактов шунтирует контакт (кнопку), замыкание которого вызвало срабатывание реле. Поэтому, при размыкании контакта X0, вызвавшего срабатывание реле, оно остаётся включенным через шунтирующую цепь блокирующего контакта (в примере программы это M1).
Как это работает в нашем случае?
- Уровень воды ниже X0. Датчики X0 и X1 включены, реле М1 сработало, поэтому выход Y0 (насос) включен.
- Вода между уровнями X0 и X1. Датчики X1=1, X0=0, но реле М1 останется включенным через «контакт» М1, поэтому насос останется включенным.
- Уровень превысил X1. Датчик X1 выключился, все устройства и цепи выключатся.
Задача, схожая с этой, рассмотрена на рис. 1.6 с той лишь разницей, что функция запоминания срабатывания реле в этомпримере искусственно вводилась цепью самоблокировки, тогда как в примерах на рис. 1.9 и рис. 1.10 использовались функциональные возможности элементов с памятью – триггера Шмитта и RS – триггера.
Но одно в этом примере показательно: у нас не было реле, мы не можем его подержать в руках, но оно уже работает на нас! И таких программно - организованных реле можно использовать в программе очень и очень много.
7. При составлении программы часто возникает потребность принудительной установки какого-либо элемента (допустим, R-S триггера) в одно из двух возможных (ON или OFF) состояний. Для этого предусмотрены команды SET (установить) и RST (сбросить).
8. Команда TIMERиспользуется в программах для вызова различных по величине и характеру работы выдержек времени.
Команда инициализации таймера записывается в формате: (OUT T n K m ),
где: T– обозначение таймера,
n - номер таймера от 1 до 255,
K- обозначение константы,
m - число, до которого будет вестись отсчёт времени. Шаг отсчёта времени может устанавливаться в единицах, десятках и сотнях миллисекунд в зависимости от типа ПК и номера обозначения таймера (в соответствии с нижеприводимой таблицей).
Результат умножения двухбайтного числа 32767 на шаг отсчёта времени равен максимальной выдержки времени, которую способен обеспечить активизируемый таймер.
Таймер с номером 200 на рис. 2.2,а имеет шаг отсчёта 10 ms = 0,01 s (это видно из таблицы). Следовательно, при K=123 он будет формировать выдержку времени, равную 0,01 × 123 = 1,23 s. Аналогично этому таймер T250 на рис 2.2,б - стомиллисекундный, поэтому формируемая им выдержка при K = 345 равна 0,1 × 345 = 34,5 s. Отметим ещё одно: T250 – это таймер с памятью, поэтому при прерывании сигнала X1, он не сбрасывает счёт в ноль, как T200, а только приостанавливает его на время пропадания активизирующего сигнала. С повторным появлением X1 таймер продолжит отсчёт выдержки с ранее накопленного значения. Этим определяется ещё одно различие таймеров с памятью и без неё. Таймеры без памяти сбрасываются в ноль самопроизвольно при снятии сигнала X0, а таймеры с памятью требуют подачи специального сигнала X2 сброса в исходное состояние.
а б
Рис. 2.2
Рис. 2.3
На рисунке 2.3 показаны два способа ввода уставки требуемой выдержки времени. Один из них, а именно уставка с помощью константы, ясен из предыдущего. При нём значение выдержки однозначно задаётся в самом тексте программы номером таймера и конкретным значением числа m, до которого будет вестись счёт. Изменение выдержки в этом случае невозможно без коррекции соответствующей записи в тексте программы.
Чтобы получить более гибкий способ задания выдержки времени, лучше использовать другую возможность, обеспечиваемую средой программирования. Она заключается в том, что величина выдержки времени записывается в отдельный регистр данных D с указываемым номером. Счёт будет вестись до того значения, которое записано в этом регистре. Это особенно удобно в тех случаях, когда программа разрабатывается для управления объектом, работающим не по жестко заданным характеристикам алгоритма управления, а допускает некоторое их изменение в реальных условиях (рис.2.4).
Рис. 2.4
Допустим для определённости, что окончание выгрузки какого – либо продукта из резервуара фиксировалось по срабатыванию датчика уровня. Попробуем сделать это, не прибегая к использованию датчика. Мы можем задать время, по истечении которого выгрузка гарантированно закончится, и будем управлять освобождением резервуара с помощью выдержки времени таймера. Практически сделать это несложно, если циклически повторяющаяся работа объекта будет проходить при одних и тех же условиях. Но если какая – либо характеристика процесса (вязкость среды, объём выгружаемой дозы, проходное сечение канала выгрузки и т.п.) может изменяться, то фактическое время выгрузки будет в каждом конкретном случае иным. Это потребует изменения уставки на формируемую выдержку времени таймера под изменившиеся условия работы. И вот здесь заходит речь о выполнении «обучения» программы новым характеристикам управления.
На рис.2.4 сигнал X0 вызывает переход в режим обучения. Таймеру T0 исходно задана максимально возможная выдержка, так как число 32767 – это десятичный эквивалент заполненного единицами двухбайтового регистра. Длительность нажатия X0 определяется опытным путём по моменту окончания выгрузки дозы. Эта длительность и накопленная таймером T0 выдержка – один и тот же интервал времени, который командой [MOV T0 D0] записывается в регистр D0. К содержимому этого же регистра, как к уставке выдержки времени, будет обращаться впоследствии и таймер T1 в режиме «работа» при включении X1 . Теперь канал выгрузки дозы Y0 будет включаться на время, определяемое регистром D0 до тех пор пока не изменятся условия выгрузки.
Описанная процедура может повторяться многократно путём переключения режимов «обучение» / «работа» чередованием подачи сигналов X0 / X1.
9. Команда COUNTER –счётчик. Счётчик – один из наиболее простых компонентов программного обеспечения контроллеров, так как его назначение состоит в выполнении счёта.
Счётчики бывают: суммирующие – прямой счёт (1, 2, 3, 4 , …); вычитающие – обратный счёт (.…,4, 3, 2, 1); реверсивные - выполняют счёт вверх – вниз (1, 2, 3, 4, 5, 4, 3, 2, 3, 4, 5 ,6, 7, …).
Формат записи команды инициализации счётчика:
(OUT C n K m),
где: C- обозначение счётчика,
n - номер счётчика от 1 до 255,
K - обозначение константы,
m - число, до которого ведётся счёт.
Существующие разновидности счётчиков можно классифицировать на следующие группы:
· 16 – битные счётчики для счёта «вверх» с сохранением и без сохранения полученного результата счёта при отключении питания. Они считают только внутренние программируемые сигналы счёта;
· 32 – битные счётчики для счёта «вверх – вниз» с сохранением и без сохранения результата счёта при отключении напряжения питания. Направление счёта задаётся посредством состояния специальных меркеров. Они также считают внутренние программируемые сигналы счёта.
· 32 – битный высокоскоростной счётчик (быстрый счётчик), позволяющий считать «вверх – вниз. Они обрабатывают очень быстро следующие друг за другом внешние сигналы счёта.
Адресация счётчиков и задание режимов их работы может быть различным. На рисунке 2.5 показано, как это можно сделать для 16 – битного счётчика при непосредственном задании числа счёта (K10).
Рис.2.5
Счётчик C0 будет считать импульсы по входу X1 до 10, после чего перестанет на них реагировать, но переключит состояние своего выхода, а, следовательно, и выход Y0 на уровень ON. Возвращение счётчика в исходное состояние выполняется сигналом сброса RST C0,поступающим по входуX0.
Как и в случае с таймером, коэффициент счёта счётчика можно задавать косвенно через регистр данных. На рисунке 2.6 этот регистр имеет обозначение D20.
Рис.2.6 Рис.2.7
Ранее упоминались в качестве элементов программы меркеры. Меркеры – это промежуточные элементы памяти (рис.2.7), применяемые внутри программы для запоминания двоичных результатов логических связей. “Внутри программы” – это потому, что к ним нельзя подключить аппараты, находящиеся вне контроллера. При единичном состоянии X1 меркер M0 тоже переходит в это состояние, следствием чего будет включение выходов Y2 и Y3. Если сигнал X0 имеет единичное значение, Y2 включится независимо от состояния M0.
Может сложиться ошибочное представление о том, что меркер и внутреннее реле – это одно и то же. При всей своей внешней похожести они имеют и различия. Они заключаются в том, что меркеры по своим номерам делятся на группы, каждой из которых присвоено вполне конкретное смысловое значение. Внутри каждой из групп меркеры в зависимости от номера тоже различаются по функциональному назначению.
Приведём несколько примеров для группы специальных меркеров:
M8002, M8003 – импульс инициализации;
M8012,M8012,M8013 – датчик тактов 10ms, 100ms, 1s;
M8200 – M8234 -если включится один из рядом стоящих специальных меркеров, один из принадлежащих ему счётчиков определяется как счётчик вверх. (M8200 = C200, M8217 – C217 и т.д.). Направление счёта определяется переключением меркера.
По сути дела, меркеры – это частный случай внутренних реле, отмеченные постоянно присвоенными номерами и наделённые вполне определёнными выполняемыми функциями.
Распределение пространства номеров, присваиваемых меркерам в зависимости от их функциональной принадлежности, приведено в таблице.
Напомним, что 16-битные счётчики – это счётчики «вверх». Они поэтому не требуют управления для изменения направления счёта.
Управлять изменением направления счёта можно только в 32 – битных счётчиках, и делать это надо включением / выключением
соответствующего меркера. Использование меркера M8200 (рис.2.8) активизирует счётчик C200 с управлением по входу X0.
Рис. 2.8
Фрагмент программы поясняет содержание диаграмм на рис.2.8. Включенное или выключенное состояние X0 активизирует или отключает M8200. Счетчик подсчитывает сигналы X2, после окончания счёта включает выход Y1. По входу X1 выполняется сброс счётчика. Последней инструкцией в регистр D0 словом двойной длины (DMOV) записывается число 10 для косвенного задания нового коэффициента счёта.
В качестве примера использования языков РКС и СИприводится часть общей программы управления штамповочной машиной (рис. 2.9) [ ]. При выходе ранее отштампованного изделия из штампа сигнал X0 (в синтаксисе Melsec Medoc FX / WIN он записывается как X000) имеет уровень ON. Это означает, что форма освободилась и готова для подготовки её к следующему циклу штамповки.
Рис.2.9
Он начинается с выдвижения штампа из матрицы вправо, под действием команды Y2 при условии, что форсунки подачи воздуха (Y4) и масла (Y6), показанные на блок-схеме алгоритма (рис.2.10), не будут включены – это своего рода блокировка от ложного срабатывания.
Рис.2.10
Эта блокировка обеспечивается записью строки 1 программы (рис.2.12), и она находится в полном соответствии с отображением работы объекта на временных диаграммах процесса (рис. 2.11). Действительно, выходной сигнал на открытие формы Y2 будет выдан при наличии X0 и пассивном состоянии сигналов Y4 и Y6, что равносильно соответствию их отрицаний уровням ON. Этим исчерпывается программное представление работы управляющей схемы по левой ветви алгоритма.
После выдвижения формы сигналом X1 активизируется отработка средней ветви алгоритма. Как видно из строки 2 программы, выход Y4 примет уровень ON, если не будут включены Y2 (выдвижение формы) и Y6 (включение подачи смазки). Цепь сразу встаёт на самоблокировку по Y4 последовательно с нормально замкнутым состоянием выдержки времени таймера Т2. Назначение Т2 как раз и
Рис.2.11
состоит в том, чтобы после его срабатывания остановить выполнение программы по отработке средней, а как можно заметить по строке 3 алгоритма, и правой ветви тоже. Строки 2 и 3 функционально организованы одинаково: самоблокировка по своему выходному состоянию и запрет на включение «своей» ветви, если включена одна из соседних.
За время включённого состояния Y4 или Y6 каретка, несущая форсунки подачи воздуха и смазки, должна совершить два встречных движения: перемещение из исходной точки B в точку A за заданное время выдержки таймера Т1 и вернуться за такое же время обратно в точку B. Первое из этих движений под действием Y3 происходит на интервале, когда Т1 отсчитывает свою выдержку времени, а второе – когда «свою» выдержку отсчитывает Т2. В момент окончания выдержки времени Т2 отработка рассмотренного фрагмента управления объектом завершается. Срабатывание Т2 в строке 5 вызывает переход в OFF сигналов Y4 и Y6 (строки 2 и 3), что, в свою очередь, заставит выключиться сигналы Y3 и Y3 (строки 4 и 5) программы на рис. 2.12.
Рис.2.12
Проведённое рассмотрение принципиальной основы программирования логических контроллеров на языке релейно – контактных схем затронуло только незначительную часть возможностей программной среды MELSEC MEDOC FX / WIN. Подбор материала и степень подробности изложения выбирались из тех соображений, чтобы сделать понятным применение языка РКС в других средах составления программ. Вопросы, более приближенные к практическому программированию, будут рассмотрены в следующих разделах.
Дата добавления: 2014-12-20; просмотров: 1243;