PDA

Просмотр полной версии : ПЛК 110 - Сохранение значения "fast encoder".



pfuser
20.12.2014, 12:03
Здравствуйте.
Возникла небольшая проблема.

Решал две задачи.

Первая задача: контроллер ПЛК 100, использую функцию "энкодер 16 бит", пересчитываю импульсы от датчика в расстояние, управляю приводом (псевдо позиционер).
Два входа параметрирую как входы энкодера. Считает от 0 до 65000. Запоминает значение энкодера при выключении контроллера. Выставил начало оси на "0".
Все хорошо, только если быстро крутить не правильно считает. Читал форум.

Вторая задача та же, только решили заменить контроллер на ПЛК110 с целью увеличения скорости перемещения (используем функцию "fast encoder" в ПЛК110).
Большой скорости перемещения добились - все хорошо, но контроллер не помнит значения "fast encoder" при выключении.
При включении значения "fast encoder" всегда "0".
Получается, если выключил контроллер в середине пути, то при включении и затем позиционировании в минус - значение "fast encoder" 65000 и менее.
Конечно, можно попробовать написать заплатку, но все же вдруг есть стандартная функция запоминания?

Вопрос: Как сделать так, чтобы контроллер сохранял значение "fast encoder" при выключении? И соответственно увеличивал или уменьшал значение от запомненного.

Спасибо.
Заранее благодарен.

Филоненко Владислав
20.12.2014, 12:25
Используйте копирование текущего положения в retain и логику обсчёта положения при включении.

pfuser
20.12.2014, 13:17
Спасибо, за быстрый ответ.
Я понял.
Значит такой функции (запоминание значения "fast encoder") у ПЛК110 нет?

Тогда другой вопрос: "У каких контроллеров, с быстрыми входами, есть такая функция (запоминание значений энкодеров, счетчиков и пр. элементах на быстрых входах)?"

lara197a
20.12.2014, 14:13
ни у каких.
зачем?
c-retain
с:=encoder;

Yegor
20.12.2014, 15:24
Lara, эта тема не прокатит.

pfuser
20.12.2014, 15:51
ни у каких.

ПЛК 100, encoder 16 bit сохранял данные.

pfuser
20.12.2014, 15:52
Lara, эта тема не прокатит.
Согласен.
При включение перепишет на "0".

lara197a
20.12.2014, 16:20
ну мне вам, до конца разжевать?
как значения складывать?
как в первом цикле импульс выделить?

Yegor
20.12.2014, 17:43
ну мне вам, до конца разжевать?
как значения складывать?
как в первом цикле импульс выделить?Спасибо, но мы думали, что вы решение лаконичнее Владислава предлагаете.

lara197a
20.12.2014, 19:14
Хотелось бы помочь вам разобраться, а не решить за вас.
C-retain
M-просто промежуточная переменная
Enc- значение энкодера.

C:=C+(Enc-M);
M:=Enc;

lara197a
20.12.2014, 19:19
C:=C + ((Enc - M) AND 65535);
M:=Enc;

Это для енкодера 16 бит и С-32бита
(0...65535)

pfuser
21.12.2014, 21:35
C:=C + ((Enc - M) AND 65535);
M:=Enc;

Это для енкодера 16 бит и С-32бита
(0...65535)

Добрый вечер.
Большое Вам Человеческое спасибо.
Действительно все сделали за меня.
Все правильно, в переменную кладу значение разницы теперешнего показания датчика и предыдущего и если разница более, например, 64000 (думаю за скан более 1000 импульсов не проскачит), то к С:=С-(65000-енкодер) это переход в минус с 0 на 65000. Если разница предыдущего и теперешнего значения более 64000, то С:=С+(65000-М+енкодер) это переход в плюс с 65000 на 0. Третьи вариант, обычный счёт, когда разница в обоих случаях менее 64000, то С:=С+(енкодер-М).
В общем, действительно ВСЕ САМОЕ ГЛАВНОЕ сделали за меня.
Еще раз ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО.

Zecher
22.12.2014, 09:58
Во время включения установка должна выходить в начальное положение всегда!
Если вы сохраняете значение энкодера, выключаете установку, и механически изменяете положение движимой части (по разным причинам), то при включении получится полная чушь с позиционированием.

pfuser
22.12.2014, 10:05
Во время включения установка должна выходить в начальное положение всегда!
Если вы сохраняете значение энкодера, выключаете установку, и механически изменяете положение движимой части (по разным причинам), то при включении получится полная чушь с позиционированием.
Здравствуйте.
Это учтено.
В системе есть бесконтактный конечник исходного положения.
Перед работой системы запускается выход оси в исходное положение. То есть, едем в сторону конечника на маленькой скорости, как только увидели его (конечник) - реверсируем осью и ожидаем пропадание сигнала от конечника. Как только сигнал пропал - запоминаем значение от энкодера.
На панель оператора в качестве координаты выводится (значение энкодера - запомненное значение энкодера при выходе оси в "0" + то значение, которое задается наладчиком в качестве координаты исходного).

lara197a
22.12.2014, 15:03
Для сохранения координат, без питания используют совсем др. приборы, а не энкодер.
Типа резольверы или магнитные линейки.