PDA

Просмотр полной версии : Энкодер и ПЛК160



Ильнур
30.07.2012, 23:13
Всем привет!Я хотел разобраться в одной проблеме,надеюсь кто-нибудь в этом поможет)))Есть ПЛК160 и сервопривод со своим блоком управления.С блока я снимаю количество импульсов.В конфигурации ПЛК выбрал Z-Encoder+Counter.У блока нстроил кол-во импульсов за один оборот 1000 импульсов и скорость 5 об/мин.В кон-ции Range поставил 1000.В коде сделал следующее,когда энкодер достигает 999 импульсов,во-первых подаю сигнал на остановку,а затем через указатель обнуляю счетчик в ПЛК.Проблема у меня в следующем:во-первых иногда у меня пролетает условия проверки и счетчик после основки бывает на равен 0.Что можно сделать в данной ситуации???Если что вот кусок кода где обнуляется счетчик:
IF M2_State = 1 OR Povorot_Privod_M2 THEN
Povorot_Privod_M2 := TRUE;
IF M2_Encoder_Counter >= 985 THEN
M2_Speed := 0.2;
IF M2_Encoder_Counter >= 999 THEN
M2_Start := 1;
M2_Encoder := ADR(M2_Encoder_Counter);
M2_Encoder^ := 0;
Povorot_Privod_M2 := FALSE;
M2_Speed := 1;
ELSE
M2_Start := 0;
END_IF
ELSE
M2_Start := 0;
M2_Speed := 1;
END_IF;
END_IF;

Yegor
31.07.2012, 06:13
счетчик после основки бывает на равен 0И чему же он равен?

Ильнур
31.07.2012, 09:27
Бывает равен 3 или 5, может быть M2_Encoder_Counter = 0 ,а затем M2_Encoder_Counter = 2.Я не знаю почему так происходит.Может проблема в самом энкодере.

lara197a
31.07.2012, 09:27
Пропишите условие, по таймеру после остановки еще раз обнулить или перед следующим пуском сначала сбросить в ноль, а потом запустить.

Ильнур
31.07.2012, 12:29
Хорошо попробую.

Ильнур
31.07.2012, 12:55
Сделал обнуление если сервопривод выключен. Проблема осталась.Т.е. иногда сервопривод проскакивает условие.У меня конечно есть мысли почему это так,но не знаю прв ли я.Этот кусок кода который я привел в начале вопроса вызывается через функциональный блок.И я думаю что на вызов и выполнение функционального блока уходит куда больше времени, чем на считывание импульсов с энкодера. И из-за этого программа просто не успевает отреагировать.

lara197a
31.07.2012, 17:58
Сделайте через IF перед пуском.

Ильнур
31.07.2012, 23:56
Хотел бы спросить.А если изменить время мин.или макс. выполнения цикла в конфигурации ПЛК,допустим чтобы цикл выполнялся с максимальной частотой.Или это не поможет?

capzap
01.08.2012, 07:15
во вопервых кто Вам мешает взять и попробовать
Во вторых программа выполняется между этими временами, если выполнилась за более короткий срок, то окончание цикла произойдет когда истечет минимальное время. Меньше миллисекунды время не задать
В третьих в задачах можно перевести проект на работу не только в циклическом виде
В четвертых есть пример работы через прерывания

Ильнур
01.08.2012, 09:02
во вопервых кто Вам мешает взять и попробовать
Во вторых программа выполняется между этими временами, если выполнилась за более короткий срок, то окончание цикла произойдет когда истечет минимальное время. Меньше миллисекунды время не задать
В третьих в задачах можно перевести проект на работу не только в циклическом виде
В четвертых есть пример работы через прерывания
Можно насчет третьего поподробнее или где можно почитать насчет этого, и в четвертых, где можно найти этот пример?