PDA

Просмотр полной версии : Задача по заднему фронту входного сигнала



Papagun78
04.05.2018, 10:33
ПЛК 110, CoDeSys v2.3.9.41

Необходимо организовать прерывание по фронтам одного сигнала. По переднему фронту один алгоритм, по заднему - другой. Организовал задачу "по событию". Настроек фронта в принципе нет в настройках задачи. Сначала надеялся что это значит, что прерываться будет по обоим фронтам. Написал проверочную программку, если вход "1" то передний фронт, если вход "0" - то задний. Но нет, не заработало.

Вопрос такой: возможно ли организовать прерывание по заднему фронту входного дискретного сигнала? Если возможно - то как это сделать? Если невозможно - то как быть если это всё-таки необходимо сделать в программе?

capzap
04.05.2018, 10:35
а там, например, инвертировать сигнал и второе прерывание организовывать по нему не устроит?

Papagun78
04.05.2018, 10:40
а там, например, инвертировать сигнал и второе прерывание организовывать по нему не устроит?

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

capzap
04.05.2018, 11:46
Вы сейчас решили заявить, что первая строчка в PLC_PRG выполняется не первой в очереди скана?

Papagun78
04.05.2018, 12:03
Вы сейчас решили заявить, что первая строчка в PLC_PRG выполняется не первой в очереди скана?

Я посмел надеяться, что прерывание - это именно прерывание. По событию должна выполниться PRG, привязанная к событию. Выполниться мгновенно, не дожидаясь окончания очередного скана. Во всяком случае я на это надеюсь.

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

Papagun78
04.05.2018, 12:06
Я посмел надеяться, что прерывание - это именно прерывание. По событию должна выполниться PRG, привязанная к событию. Выполниться мгновенно, не дожидаясь окончания очередного скана. Во всяком случае я на это надеюсь.

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

И мы ушли от основного вопроса:
"Вопрос такой: возможно ли организовать прерывание по заднему фронту входного дискретного сигнала?"

Вольд
04.05.2018, 12:11
Как быстро надо реагировать на фронт сигнала ? ПЛК110 не [М02] ?

capzap
04.05.2018, 12:15
Я посмел надеяться, что прерывание - это именно прерывание. По событию должна выполниться PRG, привязанная к событию. Выполниться мгновенно, не дожидаясь окончания очередного скана. Во всяком случае я на это надеюсь.

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

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

Вольд
04.05.2018, 12:54
о каком тогда сигнале идет речь? Если это физический вход, то он обработается перед прогоном основной программы, ни о каком изменении его во время прохождения цикла речи быть не может. Если Вы надеетесь обрабатывая быстрые входа в высокочастотном таймере запустить новое прерывание, так помните что это тоже прерывание и пока оно не закончится другое не начнется. Поэтому инвертируйте, других вариантов не будет

Время цикла основной программы ПЛК - 1 мс, а прерывание по ВЧ таймеру может быть 20 мкс. Чувствуете разницу ?

capzap
04.05.2018, 12:59
Время цикла основной программы ПЛК - 1 мс, а прерывание по ВЧ таймеру может быть 20 мкс. Чувствуете разницу ?

Еще раз повторю, ВЧтаймер такое же прерывание - из него еще прерывание не вызвать, в нем вообще смысла нет плодить события, можно оба фронта обрабатывать в одном коде

Papagun78
04.05.2018, 13:21
Как быстро надо реагировать на фронт сигнала ? ПЛК110 не [М02] ?

Да, именно он.
К сожалению не могу воспользоваться для этого сигнала быстрым входом. Быстрые входы сконфигурированы под энкодер, и хоть он один, остальные два входа всё равно потеряны безвозвратно. Считаю это глупостью конечно! Почему нельзя сконфигурировать один энкодер и оставить два быстрых входа?

Вольд
04.05.2018, 13:45
Еще раз повторю, ВЧтаймер такое же прерывание - из него еще прерывание не вызвать, в нем вообще смысла нет плодить события, можно оба фронта обрабатывать в одном коде

В прерывании 20 мкс прямое управление быстрыми входами/выходами невозможно ?

Вообще самое лучшее решение вопроса - это Hardella. Там такие задачи решаются легко.

Вольд
04.05.2018, 13:46
Да, именно он.
К сожалению не могу воспользоваться для этого сигнала быстрым входом. Быстрые входы сконфигурированы под энкодер, и хоть он один, остальные два входа всё равно потеряны безвозвратно. Считаю это глупостью конечно! Почему нельзя сконфигурировать один энкодер и оставить два быстрых входа?

Hardella вам в помощь: http://www.owen.ru/forum/showthread.php?t=23013. И не забудьте Владимиру Ситникову спасибо сказать.

Вольд
04.05.2018, 14:48
И что-то там с таймером - тоже не прерывание а его имитация

Сказки не надо рассказывать. Нормальное прерывание. Успешно пользовался им.

Владимир Ситников
04.05.2018, 20:54
Быстрые входы сконфигурированы под энкодер, и хоть он один, остальные два входа всё равно потеряны безвозвратно. Считаю это глупостью конечно!
У вас какая модель ПЛК?
ПЛК110-30/32М02 или ПЛК110-60М02?

Если я правильно понимаю, то 4 быстрых входа только у ПЛК110-60.
А там либо ABZ энкодер + счётчик, либо 2 AB энкодера, либо счётчики, либо просто входы.

Технически, наверное, ОВЕН могли бы сделать и вариант 1 AB энкодер + два простых выхода, 1 AB энкодер + счетчики, 1 AB энкодер + счётчик + простой вход.
Но так можно до бесконечности.


Почему нельзя сконфигурировать один энкодер и оставить два быстрых входа?
Если нужны быстрые входы-выходы, то Hardella вполне поможет. Можно одной левой обрабатывать входы-выходы с микросекундной точностью. Можно и быстрее, но тогда придётся мозг включать.

Подход следующий:
1) 1 раз пишете обработку входов-выходов. Энкодер, входы, выходы (ну что вам нужно). Обработка энкодера (https://hardella.com/docs/pru/examples/fast-encoder/) есть в штатной поставке, поэтому остаётся дописать нужную вам логику по входам. Но можно и энкодер с нуля сделать (если, например, доверия к своему коду больше)
2) Hardella превращает это в *.exp файл (его нужно импортировать в КДС проект) и PRU*.prg файлы (их нужно загрузить в ПЛК и перезагрузить ПЛК)
3) Всё, дальше про Hardella можно не вспоминать
4) Если не понравилось, удаляем prg файлы из ПЛК и перегружаем его

Подобного, наверное, можно добиться работой в direct control с использованием "20 мкс таймера", но при программировании PRU напрямую возможностей гораздо больше (как по таймингам, так и по программированию)