- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Счетчик оборотов
Модератор: Глоб.модераторы
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Счетчик оборотов
Здравствуйте, коллеги!
Имею задачу вычислить количество оборотов вала в минуту при помощи s7-1200, cpu1214.
Использую высокоскоростной счетчик в режиме измерения частоты.
Полученное значение умножаю на 60 и делю на количество меток. Точность правда не очень: обороты гуляют в диапазоне (60/количество меток).
Если метка всего одна, то коридор в котором находится текущая скорость равен 60 оборотов, это не сильно хорошо.
По скорости ведется тех.процесс и потому точность измерения превыше всего.
Была мысль использовать массив, допустим, из 60 элементов, в каждый из которых будет заполняться каждую секунду текущим значением скорости.
Далее если сложить все элементы массива получим скорость за минуту.
Скорость изменяется плавно и в течении некоторого времени.
Вроде как должно получится, но вот незадача - как автоматизировать сложение элементов массива и чтобы элемент i-ой секунды предыдущей минуты перезаписывался элементом i-ой секундой текущей минуты и опять суммировалось...может кто знает какой функцией можно сложить все элементы массива?
Или может есть какой более элегантный способ узнать более менее точное количество оборотов?
Имею задачу вычислить количество оборотов вала в минуту при помощи s7-1200, cpu1214.
Использую высокоскоростной счетчик в режиме измерения частоты.
Полученное значение умножаю на 60 и делю на количество меток. Точность правда не очень: обороты гуляют в диапазоне (60/количество меток).
Если метка всего одна, то коридор в котором находится текущая скорость равен 60 оборотов, это не сильно хорошо.
По скорости ведется тех.процесс и потому точность измерения превыше всего.
Была мысль использовать массив, допустим, из 60 элементов, в каждый из которых будет заполняться каждую секунду текущим значением скорости.
Далее если сложить все элементы массива получим скорость за минуту.
Скорость изменяется плавно и в течении некоторого времени.
Вроде как должно получится, но вот незадача - как автоматизировать сложение элементов массива и чтобы элемент i-ой секунды предыдущей минуты перезаписывался элементом i-ой секундой текущей минуты и опять суммировалось...может кто знает какой функцией можно сложить все элементы массива?
Или может есть какой более элегантный способ узнать более менее точное количество оборотов?
-
- почётный участник форума
- Сообщения: 635
- Зарегистрирован: 29 сен 2008, 17:05
- Имя: Алексей Угрюмов
- Страна: Россия
- город/регион: СПб
- Благодарил (а): 13 раз
- Поблагодарили: 25 раз
Счетчик оборотов
В чём вопрос то?
Массив из 60 чисел.
Раз в секунду
1) записываете в i-ый эмемент текущую скорость V = Vтекущ
2) ++i
3) если i >=60, то i = 0
4) Vср = 0
5) for j = 0 to 59, Vср += V[j]
Язык любой, какой ближе.
Только это вам ничего не даст. Это простой фильтр первого порядка, точность он не увеличит. Нужно ставить такое число меток, чтобы обеспечивать нужную точность.
Если метки чаще поставить нельзя, то возможно уже точнее мерить временной интервал между метками. Тут точность будет уже определяться минимальным дискретом времени, который можно измерить и величиной десперсии времени задержки между прохождением метки и фиксацией времени этого события в контроллере.
Массив из 60 чисел.
Раз в секунду
1) записываете в i-ый эмемент текущую скорость V = Vтекущ
2) ++i
3) если i >=60, то i = 0
4) Vср = 0
5) for j = 0 to 59, Vср += V[j]
Язык любой, какой ближе.
Только это вам ничего не даст. Это простой фильтр первого порядка, точность он не увеличит. Нужно ставить такое число меток, чтобы обеспечивать нужную точность.
Если метки чаще поставить нельзя, то возможно уже точнее мерить временной интервал между метками. Тут точность будет уже определяться минимальным дискретом времени, который можно измерить и величиной десперсии времени задержки между прохождением метки и фиксацией времени этого события в контроллере.
Alex.
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Счетчик оборотов
При таком подходе среднее значение будет постоянно увеличиваться, а необходимо, чтобы самый старый элемент массива заменялся новым, можно конечно сделать буферный массив, но это затратно по памяти будет...да персонал без меня разобраться не сможет в коде...
по поводу подсчета времени между импульсами попытался реализовать сконфигурировав вход на period. Но в мониторинге получаю постоянно растущее число...но только это ниразу не период
-
- почётный участник форума
- Сообщения: 635
- Зарегистрирован: 29 сен 2008, 17:05
- Имя: Алексей Угрюмов
- Страна: Россия
- город/регион: СПб
- Благодарил (а): 13 раз
- Поблагодарили: 25 раз
Счетчик оборотов
Вы вырвали расчёт из контекста.
В оригинале было
Но повторюсь это вам ничего не даст. По ситу это фильтр. Всё чего вы добьётесь - это сглаживание, убирание всплесков, и как следствие доп. инерционность.
Такого же эффекта можно добиться использовав обычный цифровой фильтр первого порядка, но не нужно массив городить. Результат будет такой же.
Отправлено спустя 4 минуты 45 секунд:
В оригинале было
Если предположить, что текущее измеренное значение (Vтекущ) в каждую секунду одно и тоже, и равно, например, 20. То (после установления скорости) получите массив длинной 60 в каждой из которой лежит 20. И новая 20 переписывает старую. Суммировав это массив, на любом шаге вы получите 1200. И каждый раз это будет 1200. Как он будет расти?
Но повторюсь это вам ничего не даст. По ситу это фильтр. Всё чего вы добьётесь - это сглаживание, убирание всплесков, и как следствие доп. инерционность.
Такого же эффекта можно добиться использовав обычный цифровой фильтр первого порядка, но не нужно массив городить. Результат будет такой же.
Отправлено спустя 4 минуты 45 секунд:
ровно это происходит в этих строках кодаmegavolt86 писал(а): а необходимо, чтобы самый старый элемент массива заменялся новым,
Alex.
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Счетчик оборотов
alex_ugrumov,
Все познается в сравнении, хотелось бы проверить как будет происходить сглаживание. Я в программе то могу использовать и текущую частоту, а вот для операторов будет непонятно почему скорость не достигнута а шаг уже сменился, или скорость перешагнула уставку, а шаг не сменился, будут вопросы к работоспособности системы.
Кстати может ли HCS выдавать частоту в формате real?
Все познается в сравнении, хотелось бы проверить как будет происходить сглаживание. Я в программе то могу использовать и текущую частоту, а вот для операторов будет непонятно почему скорость не достигнута а шаг уже сменился, или скорость перешагнула уставку, а шаг не сменился, будут вопросы к работоспособности системы.
Кстати может ли HCS выдавать частоту в формате real?
-
- почётный участник форума
- Сообщения: 635
- Зарегистрирован: 29 сен 2008, 17:05
- Имя: Алексей Угрюмов
- Страна: Россия
- город/регион: СПб
- Благодарил (а): 13 раз
- Поблагодарили: 25 раз
Счетчик оборотов
В Экселе это делается очень просто и наглядно.
Этот оператор называется оператором цикла. Реализия зависит от используемого языка.
А почему это вы интересно работаете по одним параметрам, а показываете другие?
Ищите эффектный способ выстрелить себе в ногу?
Есть стандартный конвертер типов. Почему его не задействовать?
Alex.
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Счетчик оборотов
У меня успешно реализован точный способ измерения с использованием прерываний. К сожалению, кодом пока не готов поделиться, надо его на работе взять.megavolt86 писал(а):Или может есть какой более элегантный способ узнать более менее точное количество оборотов?
Смысл такой: используем счетчик HSC в режиме счета импульсов (COUNT). Возможно использовать квадратурный режим с определением направления вращения A/B, но точно можно простой single phase. Настраиваем прерывание, которое будет обрабатываться при достижении порога (reference value), например, прерывание будет вызываться каждые 120 импульсов. В блоке обработки прерывания используем выход ET специально предусмотренного для этого таймера для подсчета времени между 0-ым и 120-ым импульсом. Порог нужно задать таким образом, чтобы время ET достигало порядка 1,5-2 секунд. Затем в этом же прерывании делаем нехитрое вычисление частоты вращения типа ЧВ = k*120/ET.
Потом возникла проблема, что на разных частотах вращения время ET может неприлично растягиваться и сжиматься, поэтому я с помощью функции CTRL_HSC сделал пересчет порога 120 импульсов в реальном времени на основе предыдущего значения измеренной частоты вращения.
Это тахометрический способ измерения частоты вращения. Отличие от метода Frequency заключается в том, что тут время не является фиксированной величиной, фиксировано число импульсов. В frequency наоборот: время фиксировано, число импульсов переменное (но всегда целое число - в этом и недостаток). Этот метод прекрасно работает, но не сказать, что элегантное решение.
Элегантное решение возможно на CPU121xC v4.1 или v4.0, где появился новый счетчик HSC_Period. Этот функционал предназначен для вычисления периода между соседними импульсами с наносекундной точностью. К сожалению, я не успел попробовать эту штуку, но в скором времени обязательно попробую!
Последний раз редактировалось Михайло 18 авг 2017, 16:20, всего редактировалось 1 раз.
-
- частый гость
- Сообщения: 441
- Зарегистрирован: 21 июл 2013, 19:32
- Имя: Вадим
- город/регион: Северодвинск
- Благодарил (а): 15 раз
- Поблагодарили: 39 раз
Счетчик оборотов
Оставлю ссылку на отличную (по моему мнению) статью по методам измерения частоты. Вдруг пригодится...
http://www.leoniv.diod.club/projects/me ... fc-510.pdf
http://www.leoniv.diod.club/projects/me ... fc-510.pdf
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Счетчик оборотов
Попробовал сегодня...не понял что он измеряет, на стенде двигатель с частотником, датчиком считаю проход шпонки, разгоняю до 900 оборотов( по частотнику). В режиме измерения частоты 14-15 гц, в режиме период значение накапливалось быстрыми темпами, за минуту гдето до 10 000 (в формате dint), если бы это было время периода то сразу бы появилось число и менялось не так сильно.
И никакой информации не нашел по данному типу скоростного счетчика.
А как в цикле то реализовать сумматор? Прежде чем увеличить сумму на текущее значение необходимо уменьшить сумму на самое старое значение. В цикле можно разве несколько раз обрабатывать одно и то же значение?
Теоретически текущая частота оборотов взаимосвязана со скоростью...
Спасибо, добавил в свой справочник.
-
- эксперт
- Сообщения: 3643
- Зарегистрирован: 10 ноя 2009, 04:58
- Имя: Толмачев Михаил Алексеевич
- город/регион: г. Чехов, МО
- Благодарил (а): 8 раз
- Поблагодарили: 286 раз
Счетчик оборотов
Я тоже тыкался в HSC_Period стандартными средствами и у меня ничего не получилось. Потом я уже понял, что там обязательно надо использовать какую-то новую функцию. Надо читать системный мануал.
-
- эксперт
- Сообщения: 1172
- Зарегистрирован: 14 ноя 2013, 20:35
- Имя: Анатолий Сергеевич
- Страна: Россия
- город/регион: Башкортостан
- Благодарил (а): 13 раз
- Поблагодарили: 68 раз
Счетчик оборотов
Попробовал, вызвал блок, настроил но данные все равно непонятные читает: Непонятно...в хелпе написано что elapsed time это время, но формат dint. Поменял в вачтабле формат переменной на time, вот что получилось: Еще и счетчик фронтов показывает ~200.
В итоге плюнул и решил организовать подсчет времени между импульсами и по этому времени считать скорость: Проверял правильность подсчета, вполне соответствует (+-2оборота).
Для малых скоростей (до100 об/мин) время замеряется между двумя импульсами, при скорости более 100 об/мин время замеряется между 15 импульсами.
Может кому пригодится)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- новенький
- Сообщения: 1
- Зарегистрирован: 05 июл 2018, 09:26
- Имя: Александр
- Страна: Украина
- город/регион: Запорожье
Счетчик оборотов
Добрый день!
Я только осваиваю программирование и столкнулся с аналогичной проблемой на работе.
Есть CPU314C-2DP и многооборотный датчик pvm58n-011agr0bn-1213. Задача считать с него импульсы и перевести в обороты в минуту. Получил сколько оборотов он сделал но есть проблема с тем что dint когда перепрыгивает в минус то обороты отображается неверно.Вот мое решение: Если есть возможность подсказать как сделать это все более корректно буду благодарен. Понимаю только в FBD.
Спасибо за понимание)
Я только осваиваю программирование и столкнулся с аналогичной проблемой на работе.
Есть CPU314C-2DP и многооборотный датчик pvm58n-011agr0bn-1213. Задача считать с него импульсы и перевести в обороты в минуту. Получил сколько оборотов он сделал но есть проблема с тем что dint когда перепрыгивает в минус то обороты отображается неверно.Вот мое решение: Если есть возможность подсказать как сделать это все более корректно буду благодарен. Понимаю только в FBD.
Спасибо за понимание)
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- не первый раз у нас
- Сообщения: 372
- Зарегистрирован: 12 дек 2018, 14:47
- Имя: Влад
- Благодарил (а): 1 раз
- Поблагодарили: 50 раз
Счетчик оборотов
Мне кажется датчик можно использовать как относительный при подаче сигнала на PQD для предустановленного положения. Тогда количества импульсов хватит до конца цикла.