Просмотр полной версии : Задача по заднему фронту входного сигнала
Papagun78
04.05.2018, 10:33
ПЛК 110, CoDeSys v2.3.9.41
Необходимо организовать прерывание по фронтам одного сигнала. По переднему фронту один алгоритм, по заднему - другой. Организовал задачу "по событию". Настроек фронта в принципе нет в настройках задачи. Сначала надеялся что это значит, что прерываться будет по обоим фронтам. Написал проверочную программку, если вход "1" то передний фронт, если вход "0" - то задний. Но нет, не заработало.
Вопрос такой: возможно ли организовать прерывание по заднему фронту входного дискретного сигнала? Если возможно - то как это сделать? Если невозможно - то как быть если это всё-таки необходимо сделать в программе?
а там, например, инвертировать сигнал и второе прерывание организовывать по нему не устроит?
Papagun78
04.05.2018, 10:40
а там, например, инвертировать сигнал и второе прерывание организовывать по нему не устроит?
В таком случае теряется смысл это делать прерыванием. Реакция нужна очень быстрая, а инверсия произойдёт в процессе скана когда до него дойдёт очередь.
Вы сейчас решили заявить, что первая строчка в PLC_PRG выполняется не первой в очереди скана?
Papagun78
04.05.2018, 12:03
Вы сейчас решили заявить, что первая строчка в PLC_PRG выполняется не первой в очереди скана?
Я посмел надеяться, что прерывание - это именно прерывание. По событию должна выполниться PRG, привязанная к событию. Выполниться мгновенно, не дожидаясь окончания очередного скана. Во всяком случае я на это надеюсь.
А инверсия выполнится в процессе скана. Даже если она будет самой-самой первой строчкой в скане. А событие может произойти в любой момент, худший вариант - в начале скана. В этом случае теряется целый скан времени, за это время мой двигатель может уехать далеко от запланированного места.
Papagun78
04.05.2018, 12:06
Я посмел надеяться, что прерывание - это именно прерывание. По событию должна выполниться PRG, привязанная к событию. Выполниться мгновенно, не дожидаясь окончания очередного скана. Во всяком случае я на это надеюсь.
А инверсия выполнится в процессе скана. Даже если она будет самой-самой первой строчкой в скане. А событие может произойти в любой момент, худший вариант - в начале скана. В этом случае теряется целый скан времени, за это время мой двигатель может уехать далеко от запланированного места.
И мы ушли от основного вопроса:
"Вопрос такой: возможно ли организовать прерывание по заднему фронту входного дискретного сигнала?"
Как быстро надо реагировать на фронт сигнала ? ПЛК110 не [М02] ?
Я посмел надеяться, что прерывание - это именно прерывание. По событию должна выполниться PRG, привязанная к событию. Выполниться мгновенно, не дожидаясь окончания очередного скана. Во всяком случае я на это надеюсь.
А инверсия выполнится в процессе скана. Даже если она будет самой-самой первой строчкой в скане. А событие может произойти в любой момент, худший вариант - в начале скана. В этом случае теряется целый скан времени, за это время мой двигатель может уехать далеко от запланированного места.
о каком тогда сигнале идет речь? Если это физический вход, то он обработается перед прогоном основной программы, ни о каком изменении его во время прохождения цикла речи быть не может. Если Вы надеетесь обрабатывая быстрые входа в высокочастотном таймере запустить новое прерывание, так помните что это тоже прерывание и пока оно не закончится другое не начнется. Поэтому инвертируйте, других вариантов не будет
о каком тогда сигнале идет речь? Если это физический вход, то он обработается перед прогоном основной программы, ни о каком изменении его во время прохождения цикла речи быть не может. Если Вы надеетесь обрабатывая быстрые входа в высокочастотном таймере запустить новое прерывание, так помните что это тоже прерывание и пока оно не закончится другое не начнется. Поэтому инвертируйте, других вариантов не будет
Время цикла основной программы ПЛК - 1 мс, а прерывание по ВЧ таймеру может быть 20 мкс. Чувствуете разницу ?
Время цикла основной программы ПЛК - 1 мс, а прерывание по ВЧ таймеру может быть 20 мкс. Чувствуете разницу ?
Еще раз повторю, ВЧтаймер такое же прерывание - из него еще прерывание не вызвать, в нем вообще смысла нет плодить события, можно оба фронта обрабатывать в одном коде
Papagun78
04.05.2018, 13:21
Как быстро надо реагировать на фронт сигнала ? ПЛК110 не [М02] ?
Да, именно он.
К сожалению не могу воспользоваться для этого сигнала быстрым входом. Быстрые входы сконфигурированы под энкодер, и хоть он один, остальные два входа всё равно потеряны безвозвратно. Считаю это глупостью конечно! Почему нельзя сконфигурировать один энкодер и оставить два быстрых входа?
Еще раз повторю, ВЧтаймер такое же прерывание - из него еще прерывание не вызвать, в нем вообще смысла нет плодить события, можно оба фронта обрабатывать в одном коде
В прерывании 20 мкс прямое управление быстрыми входами/выходами невозможно ?
Вообще самое лучшее решение вопроса - это Hardella. Там такие задачи решаются легко.
Да, именно он.
К сожалению не могу воспользоваться для этого сигнала быстрым входом. Быстрые входы сконфигурированы под энкодер, и хоть он один, остальные два входа всё равно потеряны безвозвратно. Считаю это глупостью конечно! Почему нельзя сконфигурировать один энкодер и оставить два быстрых входа?
Hardella вам в помощь: http://www.owen.ru/forum/showthread.php?t=23013. И не забудьте Владимиру Ситникову спасибо сказать.
И что-то там с таймером - тоже не прерывание а его имитация
Сказки не надо рассказывать. Нормальное прерывание. Успешно пользовался им.
Владимир Ситников
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 напрямую возможностей гораздо больше (как по таймингам, так и по программированию)
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot