PDA

Просмотр полной версии : И снова ПЛК 110-32 + энкодер



Sinys
04.02.2014, 22:21
Доброго времени суток. Очень надеюсь на помощь или хотя бы свежую мысль.
Судя по поиску, эта тема уже весьма замылена, но решения своей проблемы я там так и не нашел.

Итак. Имеем связку: ПЛК 110-32, ПЧВ Дельта, мотор+редуктор (асинхронник на 1500 об/мин + понижающий редуктор 1/40), энкодер инкрементальный 360 имп/об (опять же от Дельты), который закреплен на валу редуктора через металлическую муфту.
Мотор-редуктор приводит в действие цепную передачу с "неким", жестко закрепленным на цепи, предметом.

При выполнении программы предмет опускается вниз (до датчика индуктивности "ноль"), обнуляется значение энкодера, задаются пределы движения "предмета" (верхняя и нижняя уставки, к примеру 500 и 100) и "предмет" начинает движение туда-обратно по этим уставкам.

Проблема. При 30-50 проходов туда-обратно фактический проход "предмета" осуществляется уже по значениям ~470 и 70. То есть уставки как будто "съехали" на одинаковую величину. Причем значения на входе модуля энкодера продолжают меняться в изначально заданных пределах.

Уже не знаю на что думать. Цепь натянута жестко, люфта практически нет, можно даже сказать, что совсем нет, но не буду так категоричен. В своей программе ошибки исключил, так как смотрел в первую очередь на показания, приходящие на вход модуля. Судя по заданным условиям не должно быть пропусков импульсов.

В общем-то задача состоит не в очень точном позиционировании конечного элемента, а поддержании заданных уставок с допустимой погрешностью (несколько миллиметров вполне сойдет) в течении нескольких десятков циклов прохода "туда-обратно" без повторного обнуления энкодера в процессе работы. (циклов через 60-70 обнулится уже будет можно).
Вот вроде бы и все. Заранее прошу прощения, если имеются ошибки в оформлении темы. Буду рад любым ответам.
С уважением, Александр.

lara197a
04.02.2014, 23:07
как импульсы считаете? как организована область входов?

Sinys
04.02.2014, 23:16
Два быстрых входа заменены на модуль "Fast Encoder". Подсчет импульсов реализован программно через функциональный блок с обработкой прохода через 0.
Вот собственно код:
in_prev := in_now;
in_now := enc_in;
jump := enc_imp / 2;
delta := in_now - in_prev;
IF delta > 0 OR delta < 0 THEN
IF delta > -1 * jump AND delta < jump THEN
acc := acc + delta;
ELSE
IF delta > 0 THEN
acc := acc - enc_imp + delta;
ELSE
acc := acc + enc_imp + delta;
END_IF
END_IF
END_IF
IF reset THEN
acc := 0;
END_IF
enc_out := acc;
Реализовывал по примеру , выложенному на форуме.
В качестве "enc_in" служит %IW0.0

lara197a
04.02.2014, 23:34
я не понял, зачем Вам переход через 0?
поставьте к примеру не 0, а 100(или 1000)
и считайте только положительные значения, без всяких наворотов.
Вы же влазите в размер 0-65535.
если нет, то преобразуйте в Dword
программу напишите так:
C:dword;
оттуда, M:word;

C:=C + ((оттуда - M) and 65535);
M:=оттуда;
в программе работайте только с переменной С.
обнуление или присвоение какого либо др. значения этой переменной на значение в энкодере(оттуда) не влияет.

Sergey666
04.02.2014, 23:39
Что это :-"IF delta > -1 * jump AND delta < jump THEN" , зачем это ???

Код какой-то мутноватый , выкиньте лишнюю муру , вот типа это :-"jump := enc_imp / 2".

Примеры примерами но и свои мозги иметь надо .

Sinys
05.02.2014, 00:01
Да, вполне себе влезаю в диапазон до 65535. Скорее всего так и буду делать. Данный пример использовал для теста работы. Но хотелось бы, перед критикой данной обработки, обратить внимание на следующий момент. Даже если уйти от всех программных подсчетов импульсов и работать сугубо с входом модуля энкодера(вводил отдельную переменную, в которую писал текущее значение энкодера при индексировании) имеем абсолютно идентичную картину. Для примера: уставки 100 и 200, значения на входе "Fast Encoder" примерно 98 и 203, "объект" физически перемещается +/- также 98-203. Проходит 30-50 циклов работы. Картина следующая: уставки 100-200 (разумеется не менялись), значения на входе "Fast Encoder" 98-203, "объект" физически катается ~65-175. Потому и задумался в первую очередь о люфте механики...

Скорее всего я что-то пропускаю, но люфт ведь, как правило, будет обоюдный. В обе стороны. А на деле постепенно смещаемся вниз, и все тут.

Sergey666
05.02.2014, 00:53
~65-175 откуда эти значения берете? Линейкой меряете ?

Обычно , когда вход энкодер пропускает имульсы , наоборот в большую сторону погрешность , а у вас все наоборот .
Что-то не то...

leonVl
05.02.2014, 05:51
делал что то подобное но с использованием энкодера и счетчика СИ30.
http://www.owen.ru/forum/showthread.php?t=12261
Устранения описанной Вами проблеммы добился только уменьшением скорости механизма. Все таки ИМХО вопрос пропускания импульсов скорее всего при большой частоте.

Sinys
05.02.2014, 08:17
По сути да. Ставил метки на металлической раме в концевых точках движения "объекта" (один импульс примерно равняется 1 миллиметру. 1 имп * 0.962 = 1 мм). Вот и думаю, что если даже и были бы пропуски импульсов, то опять же в обе стороны. И наблюдали бы мы своего рода рода "расширяющийся конус" в обрабатываемой зоне.
Расскажу сразу какие еще были наблюдения. 1) Пробовал плюсовать поправку к верхней уставке, которая при каждом подъеме инкрементируется. Картина интересная. Верхнее значение постепенно растет и в показаниях энкодера и в физическом плане, а вот нижнее значение оставалось абсолютно таким же ( те же 98 импульсов в нижней точке) и механизм доезжал ровно так же. И в принципе такое решение хоть и кривое, но устроило бы, если не одно "но". При изменении скорости движения механизма все летит к чертям (что было ожидаемо). 2) пробовал отказаться от рабочей программы, обрезав вообще все, что только можно и играть только с энкодером и двигателем. Механизм катался точно, но к сожалению проверял только на маленьком диапазоне (в пределах 100 импульсов). Так что сегодня опробую этот вариант, но с большим интервалом движения.

leonVL. Вот отказываюсь верить что в данном случае - слишком большая скорость движения. Даже по приблизительным расчетам, максимальная частота импульсов на вход ПЛК составляет около 200 Гц.
И еще момент, в моем случае механизм может двигаться с 5 заданными скоростями (через ПЧ), от 10 до 50 Гц. И на каждой эта ерунда имеет место быть в той или иной степени.

lara197a
05.02.2014, 10:06
пробуйте без пересчетов.
Модуль энкодера до 1000гц-1500Гц работает без пропусков.
Проверено.
У Вас частота совсем маленькая. Должно работать.

Sinys
05.02.2014, 10:14
Спасибо. Попробую убрать все лишнее и отладить сугубо работу с энкодером. Вечером отпишусь о результатах.

Kostyc
07.02.2014, 13:37
Обнуление по индуктивному датчику может дать ощутимую погрешность. Советую использовать Z импульс.

Sinys
08.02.2014, 10:16
И снова здравствуйте. Есть результаты. Причем весьма интересные. В итоге все свелось к радиальным биениям переходной муфты соединения вала редуктора и вала энкодера. Она была выточена из металла и, откровенно говоря, была кривоватой.
Заменили сие изделие на кусочек резинового шланга с нитяным армированием. Теперь работает идеально, правда с одним "но", которое пока не могу объяснить. Оборудование стоит в цехе, температура в котором примерно +5-7 град. При первом включении оборудования получается та же ошибка, которая была изначально (правда с гораздо меньшим приращением, т.е. примерно за 100 проходов туда-обратно, мы съехали вниз всего на 8 мм.), но спустя минут 5-10 работы и повторной инициализации счетчика ошибка мистическим образом исчезает и агрегат работает так как нужно на протяжении долгого периода (около 400 проходов, что полностью устраивает).
В общем-то такая ситуация. Вроде бы и проблему можно считать решенной, а вроде и осадок какой-то остался от непонимания такой картины. Всем спасибо за помощь.

Евгений_Томск
08.02.2014, 16:07
И снова здравствуйте. Есть результаты. Причем весьма интересные. В итоге все свелось к радиальным биениям переходной муфты соединения вала редуктора и вала энкодера. Она была выточена из металла и, откровенно говоря, была кривоватой.
Заменили сие изделие на кусочек резинового шланга с нитяным армированием. Теперь работает идеально, правда с одним "но", которое пока не могу объяснить. Оборудование стоит в цехе, температура в котором примерно +5-7 град. При первом включении оборудования получается та же ошибка, которая была изначально (правда с гораздо меньшим приращением, т.е. примерно за 100 проходов туда-обратно, мы съехали вниз всего на 8 мм.), но спустя минут 5-10 работы и повторной инициализации счетчика ошибка мистическим образом исчезает и агрегат работает так как нужно на протяжении долгого периода (около 400 проходов, что полностью устраивает).
В общем-то такая ситуация. Вроде бы и проблему можно считать решенной, а вроде и осадок какой-то остался от непонимания такой картины. Всем спасибо за помощь.Вам лучше конечно до конца разобраться с проблемой,а то будут потом "скребсти" сомнения. Попробую перечислить известные мне случаи,при которых может быть что-то подобное.
1.Энкодер расчитан на напряжение не 24Вольта (бывают на 5 и на 12).
2.Энкодерный выход синусоидальный,вместо прямоугольного.
3.Не соединены земли от блока питания энкодера и ПЛК.
4.Высокий уровень помех на провода,менее вероятно.
5.Какой нибудь дребезг выходов энкодера.
6.Брак энкодера (оптика),при нагрузке на ось - начинает врать.
7.Загрязнение,замасливание энкодера.
8.Не затянута клемма или провод вставлен мимо контакта.И искрит.
9.Потянут соединительный провод и есть внутренний надрыв(частичный контакт).

Можно попробовать подключить другой энкодер.Или подать сигнал энкодера на различные ПЛК
и сравнить результат.

Накидйте вкратце графическую механическую схемку узла и кусок программы обработки,марку энкодера и
электрическую схему подключения. Ребята быстрее увидят слабое место в системе,если оно есть.

Sinys
10.02.2014, 11:41
Евгений, спасибо за совет. Обязательно опробую сегодня-завтра, потому что покоя так и не дает эта проблема :)
Постараюсь подготовить полезную информацию о проекте.

Алексей Дмитриев
12.02.2014, 15:42
Если считает нормально, то могут быть:
1. Банальные помехи от привода на счетные входа. (Delta этим знаменита.) Каким кабелем подключен двигатель и как кабели двигателя и энкодера проложены? Попробуйте для снижения помех понизить несущую частоту преобразователя частоты. Был случай, когда снижение с 4 до 2 кГц полностью снимало проблему.
2. Муфта на энкодере не затянута, то есть банально в какой-то момент валы редуктора и энкодера смещаются относительно друг-друга.
3. Неисправный энкодер. По нему достаточно несильно бабахнуть, чем часто слесаря грешат, и он начинает безбожно врать.

Newcomer
05.03.2016, 12:08
я не понял, зачем Вам переход через 0?
поставьте к примеру не 0, а 100(или 1000)
и считайте только положительные значения, без всяких наворотов.
Вы же влазите в размер 0-65535.
если нет, то преобразуйте в Dword
программу напишите так:
C:dword;
оттуда, M:word;

C:=C + ((оттуда - M) and 65535);
M:=оттуда;
в программе работайте только с переменной С.
обнуление или присвоение какого либо др. значения этой переменной на значение в энкодере(оттуда) не влияет.

Добрый день.

C:=C + ((оттуда - M) and 65535);

Это работает при вращении вала энкодера в направлении, когда оттуда увеличивается. Формула отлично переваривает переполнение оттуда. Если вал энкодера вращается в направлении, когда оттуда уменьшается, то это совсем не работает.

Кто и как решает этот вопрос ?

Валенок
05.03.2016, 13:09
Пойдет ?
C:=C + (abs(word_to_int(оттуда - M)) mod 16#10000);

Newcomer
05.03.2016, 13:25
Пойдет ?
C:=C + (abs(word_to_int(оттуда - M)) mod 16#10000);

Работает в обе стороны. Валенок, ты голова.

Спасибо.

Вот проект эмулятора энкодера, любой может проверить.

Еще лучше проверить выражение Валенка на реальном железе.

vitsch
22.10.2016, 23:49
добрый день всем!
имею задачу перемещать асинхронный двигатель и останавливать каждые 120 градусов с точностью 0.3 градуса
предполагаю использовать какой нибудь плк+ частотник(с пид- регулятором) и абсолютный энкодер.
-Подскажите- реально ли все реализовать и какой лучше взять плк +частотник и энкодер?
- как подключить и использовать абсолютный энкодер?
спасибо

g.alexsandr
11.03.2017, 22:55
Доброго всем здравия . Понадобилось поработать с энкодером ,попробовал в реальном железе работает не корректно куда-бы я не крутил энкодер значение в регистре С всегда
наростает не зависимо от направления вращения.

murdemon
11.03.2017, 23:05
Надо подключить энкодер к 1 - канал А и 2 - канал B, и в ПЛК выбрать Fast Encoder
29989

g.alexsandr
12.03.2017, 10:41
У меня так и сделано .В конфигураторе в модуле Fast Encoder назначено имя регистра E в нём значение меняется правильно а в регистре C только увеличивается.

murdemon
12.03.2017, 12:24
скинь проект. И посмотрим

g.alexsandr
12.03.2017, 17:48
Да проекта ещё толком нет я хотел начать с энкодера на нём пока всё и встало. Но у меня даже тот пример который здесь выложен работает точно также. Переменные Еи М уменьшаются а С увеличивается
проверял и в симуляторе и в железе. Правильно-ли я понял что переменная С это конечная переменная с которой я буду работать дальше а переменная Е это выход модуля Fast-Encoder ?

Nixe
27.03.2017, 16:38
Здравствуйте. Сегодня столкнулся с точно такой же ерундой. В какую бы сторону ни крутил энкодер, значение регистра только увеличивается. ПЛК110-30м02, режим работы быстрых входов - Fast Encoder. Что может вызвать такое поведение у ПЛК?

Sulfur
28.03.2017, 14:16
Nixe

Напишите модуль энкодера самостоятельно. Я так и сделал, и ни разу не жалею.
Материалы по теме:
Ссылка 1. (http://www.owen.ru/forum/showthread.php?t=23600&p=234390&viewfull=1#post234390)
Ссылка 2. (https://hardella.com/)

g.alexsandr
31.03.2017, 13:53
Он и будет только увеличивать значение так-как операция ABS убирает знак минус при обратном вращении ,а операция MOD я даже не знаю зачем она здесь.
Я выкинул эти две операции и всё стало работать единственный нюанс это уменьшился диапазон в два раза из-за преобразования из WORD в INT но мне этого более чем достаточно.

Филоненко Владислав
31.03.2017, 16:32
лампочки при вращении мигают?

Nixe
03.04.2017, 09:31
Спасибо за советы, в проблеме разобрались. Дело было в бракованном энкодере. При вращении лампочки мигали одновременно, т.е. сигналы А и В не были смещены относительно друг друга. Энкодер заменили, обработку его сингалов написали сами. Все прекрасно работает.

Александр8159
29.05.2018, 21:11
Здравствуйте, возможно, похожая проблема, как у Nixe, при вращении лампочки мигают хаотично, то вместе, то еще как, как то судорожно. Подсчет импульсов идет только в плюс, причем прокатываю метровую линейку под энкодером, она с каждым последующим измерением показывает меньшую длину, каждый раз сбрасываю. Т.Е.измерения выглядят примерно так: 125 см, 100, 88 ,82, 80. Энкодер E40S6-1000-3-T-24, колесо садится металлическое обрезиненное (самодельное)диаметром см 10. Контроллер ПЛК-110-32, выставлен fast encoder. Где начать копать?

Мастеренко Иван
30.05.2018, 14:30
Здравствуйте! Похоже энкодер неисправен, попробуйте заменить его.

Александр8159
05.06.2018, 11:47
Возможно. Не посоветуете, какой лучше брать ?. И ещё, для понимания процесса. Я выставляю fast encoder, в параметрах модуля указываю количество импульсов на оборот, debounce factor из какого расчета принимается? Программу писал, как начинающий, в CFC, там тоже пара вопросов есть, сюда задать можно ?

Sulfur
05.06.2018, 14:07
Александр8159
В фаст-энкодере от Овенов нет сброса показаний. В ПЛК110-32 только два быстрых входа, т.е. Z энкодера (нулевая метка) придется реализовывать как-то по другому. В ПЛК110-60 уже четыре быстрых входа, и там уже можно использовать модуль ABZ-энкодера. А вообще по поводу быстрых входов на ПЛК110[M2] - читайте про Hardella IDE. Это очень мощный инструмент для воплощения своих хотелок на быстрых входах именно для этих ПЛК.
По поводу качества этих энкодеров - за их цену грех жаловаться. Для проверки исправности можно поменять местами фазы А и В - энкодер должен считать в другую сторону. Либо подцепить его к Овен СИ-30, если такой прибор имеется.

krmts.ru
17.10.2018, 13:41
Доброго всем здравия . Понадобилось поработать с энкодером ,попробовал в реальном железе работает не корректно куда-бы я не крутил энкодер значение в регистре С всегда
наростает не зависимо от направления вращения.

Наступали на эти грабли. Причина была в некорректном подключении, клемма S/S контроллера не была соединена с нужной клеммой питания... (РЭ, стр. 63)