-----
18.11.2017 форум перенесён на другой хостинг. О замеченых глюках просьба сообщать администраторам.
-----
На форуме обязательно:
  1. Заполнить свой профиль на Русском языке. См. Правила, п.2.d.
  2. Не писать свой вопрос в первую попавшуюся тему, а вместо этого создать свою. См. Правила, п.3.a.
Рекламу на своём форуме мы не размещаем ни на каких условиях.

Подсчет колич импульсов скользящим окном

PLC, прочие контроллеры, промышленные компьютеры, операторские панели

Автор темы
lamburov
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 24 мар 2015, 02:40
Имя: lamburov григорий

Подсчет колич импульсов скользящим окном

Сообщение lamburov » 24 мар 2015, 03:32

для ПР114 Овен:
Натолкните на мысль как без массивов организовать подсчет количества импульсов (передних или задних фронтов) пришедших на вход за определенный интервал времени до настоящего момента? То есть количество импульсов в скользящем окне.


Дребезг фильтровать DTRIG или по-другому ? (время дребезга не знаю, очевидно <=1/10 :-) )

Интервал времени "на ходу " изменяться не будет, но может быть задан от 10 до 180 сек, его дискретность подойдет 1 сек. Частота импульсов от 0 до 11 Гц.


Бондарев Михаил
почётный участник форума
почётный участник форума
Сообщения: 945
Зарегистрирован: 25 июл 2008, 22:23
Имя: Бондарев Михаил Владимирович
Поблагодарили: 1 раз

Re: Подсчет колич импульсов скользящим окном

Сообщение Бондарев Михаил » 24 мар 2015, 20:29

почему без массивов?

Интересно было бы посмотреть на решения (с костылями и без) которые в конечном виде не будут сводиться к работе с массивами.


Автор темы
lamburov
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 24 мар 2015, 02:40
Имя: lamburov григорий

Re: Подсчет колич импульсов скользящим окном

Сообщение lamburov » 24 мар 2015, 22:39

Бондарев Михаил писал(а):почему без массивов?


потому что в явном виде не доступны ни массивы ни циклы для оперирования массивами


Бондарев Михаил писал(а):Интересно было бы посмотреть на решения (с костылями и без) которые в конечном виде не будут сводиться к работе с массивами.


это ни что иное как развертывание циклов и прописывание всех проходов
некоторые операции удастся формально спрятать в макросы


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 25 мар 2015, 08:18

Если нужно обязательно без массивов, то можете применить фильтрацию. При периоде измерения 1 секунда и частоте среза фильтра 0.1 Гц после фильтра 3 порядка шум будет в 3-4 знаке после запятой.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 3223
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 89 раз
Поблагодарили: 140 раз

Re: Подсчет колич импульсов скользящим окном

Сообщение Ryzhij » 25 мар 2015, 08:50

А члены уравнения в формуле цифровой фильтрации это не массив? ;)
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


Автор темы
lamburov
здесь недавно
здесь недавно
Сообщения: 4
Зарегистрирован: 24 мар 2015, 02:40
Имя: lamburov григорий

Re: Подсчет колич импульсов скользящим окном

Сообщение lamburov » 25 мар 2015, 12:49

rwg писал(а):Если нужно обязательно без массивов

Не то чтобы "нужно обязательно без массивов", их просто нет в ПР

С подачи Ryzhij ( спасибо, его идея со сдвиговым регистром) написал, отладкой займусь позже.
Неприятное ограничение - в макросах OwenLogic количество входов и выходов ограничено 8+8, поэтому пришлось сократить количество отсчетов в и увеличить время дискретизации.

PS: какого размера регистры сдвигаю точно не знаю, тип "INT" в реле вроде бы 16 бит, тогда 16бит * 4 группы по 8 регистров=32 регистра "INT"
ресурсы расходуемые макросом видимо не отображаются в основной программе (работаю с ПР первый раз и могу ошибаться)
написанные макросы видны в меню макросов, а редактировать их не могу

TEST.jpg
У вас нет необходимых прав для просмотра вложений в этом сообщении.


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2428
Зарегистрирован: 10 ноя 2009, 04:58
Имя: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 58 раз
Контактная информация:

Re: Подсчет колич импульсов скользящим окном

Сообщение Михайло » 25 мар 2015, 19:14

Существуют "массивы" с постоянным количеством членов, а это одно и тоже, что и несколько переменных одного типа...


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 25 мар 2015, 21:45

Ryzhij писал(а):А члены уравнения в формуле цифровой фильтрации это не массив? ;)

Пример фильтра 1 порядка:
OUT = (OUT - OUT/10 + IN);
Повторите эту формулу 3 раза и получите простейший фильтр 3 порядка. Естественно, OUT из первой формулы это IN из 2 формулы, OUT из 2 формулы это IN из 3 формулы. Всего 4 переменных. Имейте ввиду, что при IN на входе от 0 до 10 на выходе будет число от 0 до 10000.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 3223
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 89 раз
Поблагодарили: 140 раз

Re: Подсчет колич импульсов скользящим окном

Сообщение Ryzhij » 25 мар 2015, 22:06

Красиво! Надо обдумать...
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 26 мар 2015, 07:38

Ryzhij писал(а):Красиво! Надо обдумать...

EXEL Вам в помощь. За 5 минут можно управиться.


VaBo
освоился
освоился
Сообщения: 243
Зарегистрирован: 21 июл 2013, 18:32
Имя: Вадим
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение VaBo » 26 мар 2015, 09:11

rwg писал(а):Пример фильтра 1 порядка:
OUT = (OUT - OUT/10 + IN);
Повторите эту формулу 3 раза и получите простейший фильтр 3 порядка. Естественно, OUT из первой формулы это IN из 2 формулы, OUT из 2 формулы это IN из 3 формулы. Всего 4 переменных. Имейте ввиду, что при IN на входе от 0 до 10 на выходе будет число от 0 до 10000.


Погодите, а есть разница между
OUT = (OUT - OUT/10 + IN)/10 - 3 раза
и OUT = (OUT - OUT/30 + IN)/30 - 1 раз ?

PS: Фильтр этот применяю очень давно, там очень полезно при первом проходе записать сразу OUT = IN (OUT = 10*IN в вашем варианте), иначе при большой глубине фильтрации значение будет нарастать долго и нудно.


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 3223
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 89 раз
Поблагодарили: 140 раз

Re: Подсчет колич импульсов скользящим окном

Сообщение Ryzhij » 26 мар 2015, 11:28

Что-то никак не соображу, каким параметром регулировать добротность этого фильтра (ширину следящего окна)
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


VaBo
освоился
освоился
Сообщения: 243
Зарегистрирован: 21 июл 2013, 18:32
Имя: Вадим
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение VaBo » 26 мар 2015, 13:43

Ryzhij писал(а):Что-то никак не соображу, каким параметром регулировать добротность этого фильтра (ширину следящего окна)

У этого фильтра нет окна, тут экспонента.
OUT = (OUT - OUT/N + IN)/N
При N = 1 "ширина окна" единица, но уже при N=2 - в выходном значении будет учитываться все предыдущие (с учетом разрядности используемых переменных, конечно).
Как заряд конденсатора через резистор - в теории напряжение на конденсаторе никогда не достигнет напряжения источника э.д.с., так и в этом фильтре - его тау пропорционально N.


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 26 мар 2015, 18:22

VaBo писал(а):Погодите, а есть разница между
OUT = (OUT - OUT/10 + IN)/10 - 3 раза
и OUT = (OUT - OUT/30 + IN)/30 - 1 раз ?
PS: Фильтр этот применяю очень давно, там очень полезно при первом проходе записать сразу OUT = IN (OUT = 10*IN в вашем варианте), иначе при большой глубине фильтрации значение будет нарастать долго и нудно.

Разница такая же, как разница между 3 фильтрующими RC-цепочками и одной цепочкой с утроенной ёмкостью. В первом случае скорость затухания помехи 1000 раз/декаду, а во втором случае 10 раз/декаду. И частота среза фильтра в первом случае примерно в 3 раза выше.


VaBo
освоился
освоился
Сообщения: 243
Зарегистрирован: 21 июл 2013, 18:32
Имя: Вадим
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение VaBo » 26 мар 2015, 19:23

rwg писал(а):Разница такая же, как разница между 3 фильтрующими RC-цепочками и одной цепочкой с утроенной ёмкостью. В первом случае скорость затухания помехи 1000 раз/декаду, а во втором случае 10 раз/декаду. И частота среза фильтра в первом случае примерно в 3 раза выше.

Три одинаковые RC-цепочки, включенные последовательно, никогда не дадут фильтр третьего порядка. Нужно, чтобы значение R от цепи к цепи возрастало хотя-бы на порядок. Ну либо буферы - повторители. Это я так, просто напоминаю.
А по сути - вот вы упомянули эксель, а сможете смоделировать оба варианта, задав на входе просто перепад от 0 к 1 и показать разницу между
OUT = OUT - OUT/10 + IN/10 - 3 раза
OUT = OUT - OUT/30 + IN/30 - 1 раз

Добавлено: А-а-а, сделал сам ради интереса. Порядок фильтра немаловажен!
У вас нет необходимых прав для просмотра вложений в этом сообщении.


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 27 мар 2015, 00:21

VaBo писал(а):Три одинаковые RC-цепочки, включенные последовательно, никогда не дадут фильтр третьего порядка. Нужно, чтобы значение R от цепи к цепи возрастало хотя-бы на порядок. Ну либо буферы - повторители.

Согласен со всем, кроме того, что не дадут фильтр 3 порядка. Порядок будет 3, но фильтр будет плохой, с плохой фильтрацией вблизи частоты среза. Про одинаковые цепочки я не писал, хотя одинаковое RC нужно. А повторители упустил с целью упрощения объяснения. Графики именно такие, как я себе представлял. Вообще привет Титцу, Шенку и их "Полупроводниковой схемотехнике".


Ryzhij
почётный участник форума
почётный участник форума
Сообщения: 3223
Зарегистрирован: 07 окт 2011, 08:12
Имя: Гаско Вячеслав Эриевич
Откуда: Рязань, Россия
Благодарил (а): 89 раз
Поблагодарили: 140 раз

Re: Подсчет колич импульсов скользящим окном

Сообщение Ryzhij » 27 мар 2015, 05:55

VaBo писал(а):А по сути - вот вы упомянули эксель, а сможете смоделировать оба варианта, задав на входе просто перепад от 0 к 1 и показать разницу между
OUT = OUT - OUT/10 + IN/10 - 3 раза
OUT = OUT - OUT/30 + IN/30 - 1 раз

Вот я не понял - куда скобки из формул делись? Опечатка?
---------------------------------------------------
«У человека в душе дыра размером с Бога, и каждый заполняет её как может». Жан-Поль Сартр


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 27 мар 2015, 07:05

Ryzhij писал(а):Вот я не понял - куда скобки из формул делись? Опечатка?

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


VaBo
освоился
освоился
Сообщения: 243
Зарегистрирован: 21 июл 2013, 18:32
Имя: Вадим
Благодарил (а): 7 раз
Поблагодарили: 4 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение VaBo » 27 мар 2015, 16:06

rwg писал(а):Постепенно произошёл переход от целых чисел к действительным. Если Вам нужна скорость работы программы - пользуйтесь целыми числами, но не забывайте про риск их переполнения.

Если нужна скорость - пользуйтесь коэффициентами, кратными степени двойки и используйте сдвиг вместо деления :ext_book:


rwg
завсегдатай
завсегдатай
Сообщения: 594
Зарегистрирован: 29 апр 2014, 08:57
Имя: Рыбкин Владимир Геннадьевич
Благодарил (а): 16 раз
Поблагодарили: 32 раза

Re: Подсчет колич импульсов скользящим окном

Сообщение rwg » 27 мар 2015, 19:51

VaBo писал(а): используйте сдвиг вместо деления

Это лишнее, компилятор сам заменит деление на сдвиг.