PDA

Просмотр полной версии : Быстрые прерывания



ПавелП
10.05.2023, 13:21
Привет всем.

Иногда важно знать точное событие на входе, и достаточно знать, во сколько точно происходят прерывания - нет необходимости немедленно реагировать.
При очередном выполнении POU раз в 1мс, анализ переменной содержит параметр, когда произошло прерывание, и по какому входу.
Подскажите, реализовано ли такое в какой либо библиотеке?


По документации:
... максимальная частота сигнала, подаваемого на дискретный вход 1кГц при программной обработке 10кГц при применении аппаратного счётчика и обработчика энкодера
т.е. 1кГц = 1мс и нет другого варианта - только специализированные под энкодер ...


P.S. Про PRU слыхал/читал. но это уже следующий шаг.

Валенок
11.05.2023, 08:31
Точное событие - if с проверкой входа. Точней не бывает.
Если не нужно немедленно реагировать - if с проверкой тогда, когда можно и отреагировать.

Нету за ненадобностью. Да и глупость сама по себе. Свои ифы меняем на ифы внизу? Даже описалово уже косячное - несколько одновременных срабатываний на разных каналах, и ? Имеем этих переменных с временем столько же сколько самих входов? Коза+баян.

И да, 1мс цикла это 500Гц да и идеального меандра.
Энкодер нифига не даст кроме самого факта срабатывания чего то там.
Если за каким то потребовалось быстрее 1мс не ждите "следующего шага" , переходите сразу. Или syslibport. Или другое оборудование

ПавелП
11.05.2023, 11:28
Спасибо за своё мнение, конечно, но... это точно не мнение специалиста... :)


Точное событие - if с проверкой входа. Точней не бывает. Бывает!

Если не нужно немедленно реагировать - if с проверкой тогда, когда можно и отреагировать. Да. Как общий вариант.

Нету за ненадобностью. Да и глупость сама по себе. Свои ифы меняем на ифы внизу? Даже описалово уже косячное - несколько одновременных срабатываний на разных каналах, и ? Имеем этих переменных с временем столько же сколько самих входов? Коза+баян.

Вот уж действительно, сказанное - глупость. :(
Вы собрались отменить групповое чтение всех бит порта???
AT %IB1.0: BYTE; (8 discrete imputs)
А заодно и прерывания от портов!

Т.е. входя в POU, одни раз в 1 мс, проверить байт на изменение с прошлого чтения,
и при наличии изменения, проверить время этого/этих изменений?

Валенок, вы на асме когда-нибудь хоть строку написали?


И да, 1мс цикла это 500Гц да и идеального меандра. Энкодер нифига не даст кроме самого факта срабатывания чего то там. Если за каким то потребовалось быстрее 1мс не ждите "следующего шага" , переходите сразу. Или syslibport. Или другое оборудование
Про "Энкодер" - это уже лишнее, про это я ничего не хотел.

Валенок - очнитесь.
Есть другие (https://owen.ru/forum/showthread.php?t=23013) возможности.
Цитата: "Планирую использовать ПЛК110, посмотрел на CoDeSys 2.3 и нахожусь в шоковом состоянии."

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

И для решения ОБЫЧНЫХ задач, на очень мощной железяке,
и за хорошие деньги, приходится искать дополнительные пути.

Валенок, переходите на конструктивный диалог.
Это пойдёт всем на пользу. :)

ПавелП
22.05.2023, 14:19
Привет всем.

Иногда важно знать точное событие на входе, и достаточно знать, во сколько точно происходят прерывания - нет необходимости немедленно реагировать.
При очередном выполнении POU раз в 1мс, анализ переменной содержит параметр, когда произошло прерывание, и по какому входу.
Подскажите, реализовано ли такое в какой либо библиотеке?

По документации:
... максимальная частота сигнала, подаваемого на дискретный вход 1кГц при программной обработке 10кГц при применении аппаратного счётчика и обработчика энкодера
т.е. 1кГц = 1мс и нет другого варианта - только специализированные под энкодер ...

P.S. Про PRU слыхал/читал. но это уже следующий шаг.

По ссылке (https://docs.owen.ru/product/plk160m02/759/62844#topic-62844) удалось запустить на ПЛК160, и с доработкой получить то что надо.
Глюков при тактовой проца 400 МГц с заданным (100мкс) циклом 100т не наблюдается.

"Быстрые" входы действительно удалось сделать быстрыми.
На одну полуволну сетевого напряжения 50Гц ~80 опросов,
что позволило достаточно точно считать косинус фи.
Это позволило не покупать 4 шт неприлично дорогих модуля.
Как я понял, быстро возможно читать через SysPortIn(любой порт).
Выходы: есть только релейные, и 4 ADC выхода. Но там живут черепахи... :)
Управлять симисторными группами не получится с этой версией.

Осталось разобраться:
- и реализовать осциллограф лог уровней на 4 входа;
удалось построить два графика для двух полуволн - но там 1 мс шкала.
- RAM 16 мб, что там с DMA и работой со скоростью ядра;
- PRU SoC AM1808 имеет 2 независимых ядра программируемого блока реального времени;
там некий АСМ, интересно будет порыться -
- и ПЛК160 вполне сможет работать со звуком - анализировать вибрацию и шумы. :)