Просмотр полной версии : Подсчет колич импульсов скользящим окном
lamburov
24.03.2015, 13:37
для ПР114:
Натолкните на мысль как без массивов (их нет в ПР) организовать подсчет количества импульсов (передних или задних фронтов) пришедших на вход за определенный интервал времени до настоящего момента? То есть количество импульсов в скользящем окне.
Дребезг (геркона) фильтровать DTRIG или по-другому ? (время дребезга не знаю, очевидно <=1/10 :-) )
Интервал времени "на ходу " изменяться не будет, но может быть задан от 10 до 180 сек, его дискретность подойдет от 1 до 10 сек. Частота импульсов до 11 Гц.
Пока других мыслей кроме большого (от 18 штук =180/10) количества таймеров+счетчиков нет.
PS: реализовать нужно именно на ПР114
Алексей Геннадьевич
24.03.2015, 13:45
Дребезг фильтруйте настройками дискретного входа.
lamburov
24.03.2015, 13:54
Дребезг фильтруйте настройками дискретного входа.
у дискретного входа ПР114, ПР110 нет настроек фильтрации
по скользящему окну есть мысли ?
Алексей Геннадьевич
24.03.2015, 14:09
у дискретного входа ПР114, ПР110 нет настроек фильтрации
Есть. Читайте РЭ внимательнее.
по скользящему окну есть мысли ?
Интересно, что такое хотите соорудить?
Скользящее окно организуйте записью счетчика с определенным дискретом.
lamburov
24.03.2015, 15:08
1. Есть. Читайте РЭ внимательнее.
2. Интересно, что такое хотите соорудить?
1. Путаете фильтрацию дребезга аналогового входа. У дискретного такого нет
2. Читайте внимательнее первое сообщение
lamburov
24.03.2015, 15:08
Скользящее окно организуйте записью счетчика с определенным дискретом.
плодить по ветке на каждый шаг дискретизации скользящего окна или есть способ проще ?
Предлагаю: Сдвиговый регистр длинной в максимальную ширину окна и счётчик.
lamburov
24.03.2015, 15:44
Предлагаю: Сдвиговый регистр длинной в максимальную ширину окна и счётчик.
Спасибо за идею, если я правильно понял
нужен регистр общей длиной =180*11 бит (окно 180 сек, частота 11 Гц) ?
Алексей Геннадьевич
24.03.2015, 15:44
1. Путаете фильтрацию дребезга аналогового входа. У дискретного такого нет
Правда? А если найду?
17321
2. Читайте внимательнее первое сообщение
Интересует что у вас за установка.
lamburov
24.03.2015, 16:27
Правда? А если найду
Интересует что у вас за установка.
Спасибо, в руководстве этого нет, только в пункте меню
Измерение скорости в производственной линии и выдача воздействий в зависимости от интервалов скорости
Засада со свдигом SHL/SHR - при сдвиге они дополняют число нулями, нужно "вручную" подставлять бит, а сдвиговый регистр и так длинный и программа из-за пустяка разрастается стремительно
Спасибо за идею, если я правильно понял
нужен регистр общей длиной =180*11 бит (окно 180 сек, частота 11 Гц) ?
Для 11 отсчётов в секунду и 4 бит хватит. Т.е. регистр размером 180*4 бит. Но тут уж дело хозяйское...
lamburov
24.03.2015, 17:01
Для 11 отсчётов в секунду и 4 бит хватит. Т.е. регистр размером 180*4 бит. Но тут уж дело хозяйское...
да, так разумно, но
двигать через SHL/SHR неудобно, дополняет справа/ слева нулями
что делать?
Алексей Геннадьевич
24.03.2015, 17:36
Измерение скорости в производственной линии и выдача воздействий в зависимости от интервалов скорости
Воздействий какого именно характера? Изменение скорости, частоты ударов палками, выдача изменяющегося обьёма/массы сырья на конвейер? Вы подробнее опишите: тот метод который вы хотите применить сожрёт все 450 ФБ и ещё попросит...
lamburov на результат SHL/SHR наложите маску на нужный бит и сделайте макросом
ну нету в ОЛ ROL/ROR но не смертельно же.
lamburov
24.03.2015, 17:56
1. Воздействий какого именно характера? Изменение скорости, частоты ударов палками, выдача изменяющегося обьёма/массы сырья на конвейер? Вы подробнее опишите: тот метод который вы хотите применить сожрёт все 450 ФБ и ещё попросит...
1. Измерение тех импульсов, которые выдает геркон, а воздействие на систему и это к теме не относится. Если интересно пишите в личную почту - расскажу.
2. Да, количество ФБ будет нарастать стремительно
lamburov
24.03.2015, 18:04
на результат SHL/SHR наложите маску на нужный бит и сделайте макросом
ну нету в ОЛ ROL/ROR но не смертельно же.
Пишу на ПР впервые, в OwenLogiс для каждого применения создается копия макроса или используется как вызов подпрограммы с одной копии макроса?
Так еще же надо прописывать переносы битов в соседний регистр, общая длина составного регистра 90-180 байт
lamburov на результат SHL/SHR наложите маску на нужный бит и сделайте макросом
ну нету в ОЛ ROL/ROR но не смертельно же.
как это нет ,уже давно сделаны макросы ролов ...ищите
Для 16 битного будет примерно так. Насчет составного не знаю, а надо ли ?
Гуру макросов пусть глянут, быстро накидал. А как вы сделаете составной регистр, если ПР не оперирует 180 битными значениями ????
rovki да ?, блин, когда уже сделают на форуме поиск по вложениям человеческий ??????
1. Измерение тех импульсов, которые выдает геркон, а воздействие на систему и это к теме не относится. Если интересно пишите в личную почту - расскажу.
2. Да, количество ФБ будет нарастать стремительно
используйте макросы СТЕК .
Алексей Геннадьевич
24.03.2015, 18:19
1. Измерение тех импульсов, которые выдает геркон, а воздействие на систему и это к теме не относится. Если интересно пишите в личную почту - расскажу.
Относится. Вам нужно выбрать другой метод, а для выбора его нужно знать что за воздействие и для чего оно осуществляется.
2. Да, количество ФБ будет нарастать стремительно
Причём в ОЛ всё будет жутко тормозить под конец написания... Между прокладками последних связей вы успеете вырастить ребёнка и сплясать на его свадьбе.
Пишу на ПР впервые, в OwenLogiс для каждого применения создается копия макроса или используется как вызов подпрограммы с одной копии макроса?
Копия макроса, каждый можно настроить отдельно в свойствах макроса.
Для 16 битного будет примерно так. Насчет составного не знаю, а надо ли ?
Гуру макросов пусть глянут, быстро накидал. А как вы сделаете составной регистр, если ПР не оперирует 180 битными значениями ????
rovki да ?, блин, когда уже сделают на форуме поиск по вложениям человеческий ??????
вот тут ролы и роры и стек
для ПР114:
Натолкните на мысль как без массивов (их нет в ПР) организовать подсчет количества импульсов (передних или задних фронтов) пришедших на вход за определенный интервал времени до настоящего момента? То есть количество импульсов в скользящем окне.
Дребезг (геркона) фильтровать DTRIG или по-другому ? (время дребезга не знаю, очевидно <=1/10 :-) )
Интервал времени "на ходу " изменяться не будет, но может быть задан от 10 до 180 сек, его дискретность подойдет от 1 до 10 сек. Частота импульсов до 11 Гц.
Пока других мыслей кроме большого (от 18 штук =180/10) количества таймеров+счетчиков нет.
PS: реализовать нужно именно на ПР114
как то мудрено написали ...Если б подробнее и понятнее (для тупых;)) ,то давно бы уже решение получили.....
Вы мешаете тактику (путь-средства) и стратегию (цель) в одну кучу .Сначала поставьте задачу четко ,а уж потом и средства найдутся оптимальные
lamburov
24.03.2015, 19:39
как то мудрено написали ...Если б подробнее и понятнее (для тупых;)) ,то давно бы уже решение получили.....
в каждый момент нужно знать количество импульсов, пришедших на дискретный вход между моментами времени
"сейчас" и "сейчас минус X сек"; X=180, импульсы следуют с частотой от 0 до 11 Гц
можно считать импульсы по передним или задним фронтам, это не принципиально
Так вам только два отсчета сейчас и сейчас-180????
Так вам только два отсчета сейчас и сейчас-180????
Не "Два отсчёта" , а "Общее количество импульсов между отсчётами".
Я так думаю, чтобы не заморачиваться с переполнением счётчика, проще будет подсчитывать сумму всех по-секундных отсчётов в сдвиговом регистре окна.
Счетчик сбрасывается в каждом новом отсчете .А значение сохранится в стеке
Алексей Геннадьевич
24.03.2015, 20:39
в каждый момент нужно знать количество импульсов,
"Каждый момент" - это сколько? 10 мс, 1 секунда, 10 секунд? Какая скорость обновления данных?
пришедших на дискретный вход между моментами времени "сейчас" и "сейчас минус X сек"; X=180, импульсы следуют с частотой от 0 до 11 Гц
можно считать импульсы по передним или задним фронтам, это не принципиально
Задача похожа на вычисление средней скорости. Если это так, то попробуйте применить макрос усреднения.
lamburov
24.03.2015, 20:59
Так вам только два отсчета сейчас и сейчас-180????
не так.
нужно в любой текущий момент знать количество импульсов пришедших МЕЖДУ " сейчас" и "сейчас минус 180 сек"
в каждый момент нужно знать количество импульсов, пришедших на дискретный вход между моментами времени
"сейчас" и "сейчас минус X сек"; X=180, импульсы следуют с частотой от 0 до 11 Гц
можно считать импульсы по передним или задним фронтам, это не принципиально
lamburov
24.03.2015, 21:02
"Каждый момент" - это сколько? 10 мс, 1 секунда, 10 секунд? Какая скорость обновления данных?
Задача похожа на вычисление средней скорости. Если это так, то попробуйте применить макрос усреднения.
Каждый момент - это очередной цикл программы. какой макрос усреднения и использует ли он "скользящее окно" (по времени отсюда и до минус 180 сек) ?
не так.
нужно в любой текущий момент знать количество импульсов пришедших МЕЖДУ " сейчас" и "сейчас минус 180 сек"
вот вам 8 отсчетов назад можете смотреть сколько было импульсов .сначала заполните полностью стек .Здесь будет накапливаться сумма ,а если нужны просто значения (кол-во импульсов между отсчетами ) ,то нужно изменить немного схему.
Все дальше сами ,домысливать ,а потом допиливать можно долго .....:cool:
Алексей Геннадьевич
24.03.2015, 21:34
Каждый момент - это очередной цикл программы.
1) В ПР нет чётко задаваемого времени выполнения цикла. "Плавает" в зависимости от сложности программы. Среднее время выполнения цикла: 1-5 мс.
2) При такой постановке задачи вам не хватит ресурсов ПР.
3) Выкладывайте максимально полную постановку технологической задачи. Что конкретно вы регулируете, и почему критично именно 180 сек с минимальной дискретностью? Не сферического коня в вакууме же вы проектируете.
Возможно решение задачи более простыми методами.
Каждый момент - это очередной цикл программы. какой макрос усреднения и использует ли он "скользящее окно" (по времени отсюда и до минус 180 сек) ?
что бы получить усреднение в скользящем окне , сложите выходы стека и разделите на количество выходов стека .....
lamburov
25.03.2015, 14:45
3) Выкладывайте максимально полную постановку технологической задачи. Что конкретно вы регулируете, и почему критично именно 180 сек с минимальной дискретностью? Не сферического коня в вакууме же вы проектируете. Возможно решение задачи более простыми методами.
Алексей Геннадьевич, одно из подразделений компании удивлено Вашим интересом. Хорошо если просто ищете работу или Вам заняться нечем, а вдруг иностранный агент? Прошу прислать мне в личную почту скан всех страниц Вашего личного паспорта.
что бы получить усреднение в скользящем окне , сложите выходы стека и разделите на количество выходов стека .....
Я еще нормировал по количеству отсчетов и их времени , см ниже (один выход стека = отсчет в 3 сек)
rovki, спасибо Вам и Ryzhij за помощь, Алексею Геннадьевичу тоже спасибо (про скан паспорта не забываем !)
вчера написал программу и сделал макросы примерно как у Вас, дополнил еще FIFO (memory stack) обратным движением решстров (pop push полный комплект) и инициализацией стека в нули и единицы).
на отладку пока времени не было, займусь в конце недели.
Из обнаруженного неудобного -в среде OvenLogic есть ограничение на количество входов и выходов макроса 8+8
Вы как ветеран форума наверняка уже обращали внимание.
По моей программе - наверное импульс сброса счетчика (0,01сек) и он же проталкивания стека вперед формально может растянуться больше чем на 1 цикл программы.
Имеет смысл делать его меньше 0,01 с ?
Еще из предполагаемых косяков - возможное наложение по времени счетного импульса и имульса сброса, в этом случае пропадет счетный, но количественно для истемы это не критично.
Досадно конечно, что разработчик схемы применил ПР вменсто ПЛК, но из-за большого колдичества оборудования это исправить уже нет возможности.
На ST такая задача решается без обсуждений.
Алексей Геннадьевич
25.03.2015, 15:38
Из обнаруженного неудобного -в среде OvenLogic есть ограничение на количество входов и выходов макроса 8+8
После запуска в производство ПР200 могут увеличить кол-во.
По моей программе - наверное импульс сброса счетчика (0,01сек) и он же проталкивания стека вперед формально может растянуться больше чем на 1 цикл программы.
Он гарантированно растянется на 2-5 циклов.
Имеет смысл делать его меньше 0,01 с ?
R\F trig поставьте и не парьтесь.
Еще из предполагаемых косяков - возможное наложение по времени счетного импульса и имульса сброса, в этом случае пропадет счетный, но количественно для истемы это не критично.
Растяните счётный импульс используя "обратную связь" - это задержка выполнения на 1 цикл.
Еще из предполагаемых косяков - возможное наложение по времени счетного импульса и имульса сброса, в этом случае пропадет счетный, но количественно для истемы это не критично.
Используйте явную обратную связь -задержка на 1 цикл ПР исключит данную проблему
Я так и знал -топикастор программист ,изложение мыслей сооответствующее :D
Алексей Геннадьевич
25.03.2015, 18:24
а вдруг иностранный агент?
А то.
http://ic.pics.livejournal.com/olhanninen/5517159/447640/447640_original.jpg
И стек типа FIFO то же были уже со сбросом и реверсом ....:rolleyes:А так же стек для вещественных чисел :rolleyes:
lamburov
26.03.2015, 09:29
Используйте явную обратную связь -задержка на 1 цикл ПР исключит данную проблему
Как исключит, если счетные импульсы случайные (могут прийти в любой момент)?
Василий Кашуба
26.03.2015, 10:40
Как исключит, если счетные импульсы случайные (могут прийти в любой момент)?
Если счётные импульсы длиннее 1 цикла ПР, то ПР их посчитает.
Алексей Геннадьевич
26.03.2015, 12:09
Как исключит, если счетные импульсы случайные (могут прийти в любой момент)?
Как-то так.
Как исключит, если счетные импульсы случайные (могут прийти в любой момент)?
Для случайных импульсов и нужно скользящее окно + правильное время фильтрования по входу ...
Алексей Геннадьевич
26.03.2015, 15:25
lamburov
Посмотрите. Импульсы не пропадают.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot