А как в таком случае обнулять счет на ПЛК с буковками М02?
А как в таком случае обнулять счет на ПЛК с буковками М02?
Никак. Это технически невозможно. "Обнуление" должно происходить в основной программе
Тролль-наседка, добрый, нежный и ласковый
Уважаемый Владислав, я понимаю, что краткость - сестра таланта, однако можно по подробнее пояснить про обнуление быстрого счетчика в 110М2? Если обнулять счетчик в принципе невозможно вообще никак и нигде, то какой смысл в этом счетчике?
Формат регистра счетчика - WORD, т. е. 0…65535 по абсолютному значению, т. е. придется программно учитывать переполнение аппаратного счетчика?
Последний раз редактировалось Sulfur; 05.10.2016 в 14:23.
У вас установлен счётчик электричества?
Теперь примените к нему свои слова "Если обнулять счетчик в принципе невозможно вообще никак и нигде, то какой смысл в этом счетчике?"
И как? Нет смысла в "счётчике электричества" или есть?
Теперь вернёмся к "быстрому счётчику". Да, он просто считает, и когда достигает максимума, то сбрасывается.
"Учитывать переполнение" это пара строк кода:
total : DWORD;
newValue, prevValue : WORD;
newValue := counter;
total := total + WORD_TO_DWORD(newValue - prevValue);
prevValue := newValue;
Разумеется, и "total" тоже рано или поздно может переполниться.
Какая конечная задача требуется от этого счётчика?
Последний раз редактировалось Владимир Ситников; 06.10.2016 в 12:37.
В начале темы я описывал задачу. Но повторюсь:
1. На валу двигателя транспорта подачи материала установлен энкодер с разрешением 500 имп\об.
2. Частота вращения двигателя - максимум 3000 об\мин (обычно 2000 об\мин)
3. Двигатель работает от частотника.
4. Время, достаточное для подачи нужного количества материала ~0.4-0.6 сек за цикл.
5. Энкодер подключен к счетчику, который управляет частотником двигателя.
6. Двигатель низкоинерционный, остальная механика транспорта тоже. Останов происходит практически мгновенно, переезды есть, но они не критичны и их можно попытаться компенсировать программно.
От данного счетчика требуется отсчитать нужное количество импульсов и остановить двигатель. В следующем цикле счетчик должен быть обнулен до старта двигателя (переменная total в Вашем примере).
Т. е. счетчик должен уверенно и без пропусков считывать от одной фазы энкодера сигнал частотой до 30 кГц.
В принципе, я примерно так и сделал, как в предоставленном примере, но надеялся, что вдруг есть какая-нибудь другая возможность управления аппаратным счетчиком.
ЗЫ: Про сервопривода с функцией позиционера я знаю, однако задача стоит именно в таком способе позиционирования.
А какая точность/стабильность получилась?
Устраивает?
Объект сдан или ещё подобное планируется?
Раз вы написали "В продолжении темы быстрого счетчика и энкодера в одном флаконе", поэтому я подумал, что у вас какая-то новая задача, т.к. исходная тема обсуждалась в марте:
Попробую ещё разок:
Если видели тему по PRU программированию, то могли заметить, что я уже сделал ФБ для управления ШД с разгоном и поэтессами.
Можно сделать PRU ФБ и для вашей задачи. Пока ФБ делаю только я, но, возможно, скоро их смогут делать все желающие.
Например:
1) На вход "количество импульсов" -- длина пробега, и параметр "поехали"
2) По команде "поехали" блок будет активировать один из быстрых выходов
3) При достижении нужного количества импульсов, выход отключается
4) На выходе ФБ возвращается "пройденное расстояние" (на всякий случай) и "состояние" (ждём команды, едем, приехали)
5) В состоянии "приехали" счёт импульсов продолжается (чтобы можно было понять "какой перелёт оказался")
6) В состоянии "ждём команды" импульсы просто игнорируются. Или с ними что-то нужно делать?
Такой ФБ сможет без проблем отрабатывать на частотах порядка 100кГц, при этом 485, ethernet и прочее отваливаться не будет.
1. По сравнению с полноценными позиционерами - хуже.
2. Среднее расстояние подачи - 100-120мм, настоящий позиционер "гуляет" в пределах +-0,5 мм (возможно из за деформации материала и люфтов в механике), подобная реализация (не на ПЛК) "гуляет" на +-2мм, однако на %% брака это практически не сказывается, только немного увеличивается расход материала.
3. Данный проект находится в вялотекущей разработке, на реальной машине работает несколько другая система, но она морально и физически устарела, и просится на замену. Реализация этого счетчика средствами ПЛК позволит исключить один жутко импортный блок.
Это замечательно. Тему я просматривал, разработка нужная и полезная, но в моем случае. Т. к. имеющиеся привода не поддерживают принцип управления Step\Dir.
Это будет просто прекрасно.
Я даже прикидывал примерную схему тут
Параллельно с данным счетчиком должен работать ABZ энкодер с небольшой добавкой в виде детектора физического нуля после включения ПЛК.
Последний раз редактировалось Sulfur; 06.10.2016 в 14:02.
Фото\видео - без проблем. Только не гарантирую когда это будет. В среднесрочной перспективе могу только провести эксперимент на реальной машине, если она встанет на долгий ремонт по железу. В условиях лаборатории проверить весь комплекс просто нет возможности.
Немного не так. ABZ-энкодер стоит на главном валу машины, это другой двигатель и другой частотник. Разрешение этого энкодера 360имп\об, По показаниям этого энкодера включаются и выключаются разные другие устройства, в том числе и транспорт. Детектор физического нуля необходим для того, что бы не включались устройства до тех пор, пока физический ноль не будет найден. Это связано с тем, что регистр энкодера в момент включения ПЛК равен нулю, а машина практически никогда не останавливается в 0 (обычно 150-190*), появляется "смещение", которое может привести к поломке оснастки и другой механики, если устройства включатся не в свое время. После определения физ.нуля детектор не оказывает никакого влияния на работу машины до следующего выключения.
В одном проекте я реализовал этот детектор программно ( на ПЛК110-60 старой модели), т. к. и модуль энкодера делал тоже программно, а показания энкодера сохранял а Retain.
1. Ненужно учитывать переполнение.
2. Зачем считать обязательно с нуля? Совершенно ни к чему обнулять регистр счетчика, нужно продолжать считать импульсы с того состояния, которое осталось в нем от предыдущего цикла.
Просто из текущего значения в счетчике нужно вычитать значение, которое было в нем перед стартом, т.к. WORD - без знаковое целое число, то результат арифметической операции "вычитание" всегда будет правильным, не смотря не то, что после 65535 счетчик начнет считать с 0.
Например
в счетчике было 65530
после старта значения в нем будут увеличиваться 65530, 65531, 65532, 65533, 65534, 65535, 0, 1, 2 ....
т.е. начальное значение в счетчике было 65530.
Теперь каждый раз при обращении в программе к регистру счетчика нужно вычитать начальное значение, в нашем случае получим
65530-65530=0
65531-65530=1
65532-65530=2
65533-65530=3
65534-65530=4
65535-65530=5
0 - 65530=6
1 - 65530=7
2 - 65530=8
3 - 65530=9
и т.д.
Т.е. никакое переполнение учитывать не надо.
Последний раз редактировалось petera; 06.10.2016 в 14:57.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg