Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Как это работает в нашем случае?



- Уровень воды ниже 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 и Y5 (строки 4 и 5) программы на рис. 2.12.

Рис.2.12

 

Проведённое рассмотрение принципиальной основы программирования логических контроллеров на языке релейно – контактных схем затронуло только незначительную часть возможностей программной среды MELSEC MEDOC FX / WIN. Подбор материала и степень подробности изложения выбирались из тех соображений, чтобы сделать понятным применение языка РКС в других средах составления программ. Вопросы, более приближенные к практическому программированию, будут рассмотрены в следующих разделах.

 

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

Функционально – блоковых диаграмм ФБД (FBD)

 

ФБД – это язык программирования, который по способу формирования программы контроллера напоминает процесс составления схемы под конкретную техническую задачу. Когда полностью сформулирована задача, разработчик начинает продумывать, как он может её реализовать. Он анализирует сигналы, которые действуют на входах и должны быть обеспечены на выходах, решает:

- что,

- в какой последовательности и

- какими средствами (применением усилителей, преобразователей формы кривой: интеграторов или дифференциаторов, счётчиков, временных компонентов и т. д.)

надо сделать с этими сигналами, чтобы работа будущей «схемы» соответствовала требованиям задания.

Язык ФБД – это набор программно реализованных блоков, каждый из которых предназначен для выполнения какой – то определённой функции по преобразованию сигнала. Если подобрать достаточное количество функционально подходящих блоков и соединить их между собой соответствующим образом, получится программа работы контроллера. Что характерно: и в реальной схеме, и в программе на ФБД по линиям соединения узлов (блоков) можно проследить от начала и до самого конца всю последовательность преобразования сигнала. В программе, написанной на языке РКС, этого не удастся сделать.

Чтобы пояснить сам принцип программирования на ФБД, обратимся к простому примеру. Общеизвестен принцип измерения частоты следования импульсов. Если измеряемая частота мала ( период колебаний Tх относительно продолжителен), то удобно подсчитать число импульсов N известной частоты fсч = 1 / Tсч, которые проходят на вход счётчика за время полупериода измеряемой частоты (рис.2.9, а). Из простых и очевидных соотношений понятен механизм пересчёта результатов в значения измеряемой частоты: fх =1 / Tх ; Tх / 2 = N× Tсч; Tх = 2N × Tсч; f х =1 / (2N × Tсч).

Если измеряемая частота сигнала высокая (период короткий), этот способ измерения применить «один в один», т.е. без поправки на изменившиеся условия, вряд ли получится: при малой длительности измеряемого периода Tх частота импульсов заполнения должна быть неприемлемо высокой. Поэтому поступают иначе: формируют интервал наблюдения заранее известной длительности Tи и заполняют его импульсами измеряемой частоты fх (рис. 2.9, б). Так как Tи = M × Tх , то fх = 1 / Tх = M / Tи . Принципы измерения в обоих случаях очень похожи. Меняется лишь содержание того, что чем заполняется: специально сгенерированными импульсами fсч измеряемый интервал Tх, как в первом случае, или формируемый интервал наблюдения Tи импульсами измеряемой частоты fх , как на рис.2.9, б.

Рис. 2.9

 

Пример программирования на языке ФБД

Задача: средствами языка ФБД запрограммировать получение интервала наблюдения длительностью 10 секунд. Следует предусмотреть один дискретный вход для активизации программы и два дискретных выхода для получения отметок времени со сдвигом на полпериода друг относительно друга.

Выполнение. Перед тем, как начать что–то делать, целесообразно при всём многообразии вариантов решения остановиться на каком–то одном. Пусть для нашего примера выбранный способ решения задачи соответствует временным диаграммам на рисунке 2.10.

Входным сигналом (диагр.1) программа запускается. Формируемая непрерывная последовательность импульсов (диагр.2) поступает на счётчик (диагр.3). Временные параметры генерируемых импульсов (2) и устанавливаемый коэффициент счёта счётчика должны допускать настраиваемость программы на получение интервала наблюдения 10 секунд.

После достижения установленного коэффициента счёта надо предусмотреть мероприятия для сброса счётчика в исходное состояние. Здесь могут оказаться полезными функции укорочения импульсов, задержки появления сигнала, чтобы можно было разнести по времени действия сигналы счёта и сброса (диагр.4 и 5). Выходные сигналы (диагр.6 и 7) выдаются в виде инвертированных импульсов. Их форма кривой получается путём преобразования, похожего на деление частоты импульсов (диагр.4) вдвое с помощью элемента, работающего как D – триггер. Если формирование интервала наблюдения выполнять в соответствии с рис. 2.10, то на языке ФБД в среде α – Programming это могло бы быть представлено как на рис. 2.11. Очень легко устанавливается соответствие между временными диаграммами и программой. На каждой строке диаграмм справа проставлены номера выходных сигналов блоков, на которых эти сигналы получены.

 

 

Рис. 2.10

При включении I 01 начинает генерировать импульсы блок FLICKER. В окне описания блока заданы длительности импульса ON и паузы OFF между ними, каждая из которых равна 100ms. При таком задании период равен 200 ms, что соответствует частоте 5 Гц, т.е. получению 5 импульсов в секунду. Чтобы обеспечить общую длительность интервала 10 секунд, в счётчик COUNTER надо ввести коэффициент счёта 50. Все эти вводимые величины показаны на вкладках, представляющих собой фрагменты окон описания блоков FLICKER и COUNTER.

 
 

 

Рис.2.11

 

 

Пока счётчик не закончил очередной счёт, его выходной сигнал B 02 имеет уровень OFF, и для того, чтобы начать формирование выходного импульса, начиная с первого полупериода, установка триггера (B 03) осуществляется через инвертор (B 04). Выходной сигнал R - S триггера (B 03) делится по частоте вдвое элементом ALT (B 07), представляющим собой аналог D – триггера. Блоки задержки (B 05) и «дифференцирования» (B 06) применены для сброса счётчика в нулевое состояние.

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

Любая задача может быть решена различными способами, более или менее удачными. Программы могут отличаться набором использованных блоков, их количеством, степенью оправданности их применения. Например, задача, решаемая программой на рис. 2.11, может быть запрограммирована гораздо проще, и принять вид, изображённый на рис. 2.12.

 

Рис.2.12

По сравнению с рис.2.11 в полях задания длительностей импульса и паузы блока FLICKER вместо единиц введены коэффициенты 100. После умножения их на 100ms = 0, 1s получаются длительности импульса и паузы как раз равными требуемым 10 секундам. В этом варианте экономится объём занимаемой памяти, программа просто выглядит, легко читается.

Чтобы минимизировать излишества, допускаемые при составлении программ, надо знать назначение блоков, особенностей их применения в тех или иных условиях.

 

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 905; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.07 с.)
Главная | Случайная страница | Обратная связь