Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по обработке прерываний ПЛК - Kinco K306-ar и написанию основного цикла.
Диалог специалистов АВОК > ОБЩИЙ ФОРУМ > Автоматизация систем
sed_alex
Приветствую!

Это мой первый опыт работы с ПЛК и языком LD (взрыв мозга уже 5й день, но приходится учится smile.gif )



Итак в проекте будет работать следующая связка:
Частотник: LS IG5A (7,5 кВт) + Мотор редуктор на эту же мощность
HMI: Kinco MT4414T
PLC: Kinco K306-AR + Инкрементальный энкодер от Autonics (100 оборотов - комплиментарка) + пульт управления из 5 кнопок, сирена, мигалка и прочая мелочевка.

Есть 2 режима работы:

1) Автоматический - включается при нажатии на пульте кнопки "START" после чего контроллер гоняет каретку вправо до позиции "UST_Hi", останавливается, дает "Delay_1" сек задержки и идет влево до позиции UST_Lo, опять останавливается и ждет "Delay_2" сек задержки.
Цикл повторяется либо "X" кругов, либо "Y" минут (если выставлено условие по времени, по достижении заданного периода - цикл не сразу останавливается, а дожидается когда положение Энкодера будет равно "UST_Lo" т.е. каретка приедет в точку старта)
В управлении циклом задействованы 3 кнопки пульта: "START", "Pause", "Stop-RESET"
В случае нажатия кнопки Пауза - кнопками вправо, влево можно менять положения транспортера вручную, после повторного нажатия программа продолжает выполнятся.

2) Ручной режим работы - кроме описанных выше работают кнопки пульта: "Вправо", "Влево" контроллер "ждет нажатия кнопки "старт" или повторного нажатия кнопки "пауза"


Теперь самое интересное:

При выполнении основной программы мне придется обрабатывать сразу 3 прерывания:

1) Прерывание от HSC (счетчика энкодера) по условию CV=PV при достижении верхней или нижней уставки , уход на паузу и реверсирование двигателя.
(как мне уже подсказали нижняя уставка не должна быть равна 0 чтоб не возникало проблем с минусовыми значениями в случае если не смогли быстро затормозится и пролетели нижнюю уставку.

2) Прерывание по нажатию кнопок (тут немного проще в основном цикле это может быть даже не прерывание а проверка условия на IL будет выглядеть наверное так:

LD %V0.4 (Не нажата ли кнопка паузы)
Cal Pause
LD %V0.5 (не нажата ли кнопка стоп)
Cal Stop_engine

3) Прерывание по времени - тут вроде тоже все понятно задаем обработчик в цикле таймер TOF при достижении 0 отрабатываем прерывание ET=PT и ставим флаг (как достигли UST_Lo - останавливаемся) .


Собственно вопрос следующий:

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

Мозг просто отказывается понимать как это все уложить вместе.

В настоящий момент написаны только:
1) подпрограммы опроса счетчика (переписана из примера).
2) Написал 10 строк подпрограммы реверсирования двигателя (в самом частотнике заложено что при нажатии кнопки "5" тормозим и включаем реверс) подпрограмма у меня просто тупо включает выходное реле ПЛК и тем самым замыкает кнопку "5" частотника.

Пытаюсь продумать основной цикл программы и не понимаю с чего начать...






sed_alex
В общем написал обработчики:

1) Проверка установки точек разворота (пока не установлены не дает работать в автоматическом режиме)
2) Опрос пульта управления (писал 4 часа ) могу привести здесь - опознает нажатие защелкивает тригер на 1 такт выполняет подпрограмму и выходит в основую прогу установив флаг исполнения.
3) Обработчик прерывания от счетчика - вот тут засада обработчик то я написал но как заставить счетчик при достижении верхней уставки по прерыванию не обнулятся, а остановится и начать крутить движок в обратную сторону - ломаю голову.
sed_alex
Тему можно прибить.
Программа написана вопросы закрыты.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.