Время цикла ПЛК 1 мс. Что вы там собираетесь ловить ? С обычным частотником большей точности не добиться. Тут нужен ШД или сервопривод. Частотник у вас через дискретные входы управляется ?
Время цикла ПЛК 1 мс. Что вы там собираетесь ловить ? С обычным частотником большей точности не добиться. Тут нужен ШД или сервопривод. Частотник у вас через дискретные входы управляется ?
Последний раз редактировалось Вольд; 18.05.2018 в 12:11.
1. Ожидаемо, что предложили ШД или серво, заказчику желательно из того, что есть сделать ( кстати на импортном подобном станке стоит частотник с АД, видимо из за того что там надо момент хороший в широком диапазоне скоростей, но тут я спорить не буду, ибо не знаю ).
2. Такое ощущение, что время цикла гораздо больше, порядка может 40 мс может.
3. Может я неправильно вопрос задал, можно ли например считать количество циклов за секунду,
У вас энкодер, который мерит угол сгиба на каком валу сидит. Цена одного импульса этого энкодера (град/имп) какая ?
40 мс - это фантастика. Вы его сами установили ? Вашу программу этот ПЛК легко за 1 мс выполнит.
Время цикла 1 мс означает, что за 1 секунду программы выполнится 1000 раз.
Плохо что ваш ПЛК имеет релейные, а не транзисторные выходы.
Еще раз спрашиваю, каким образом управляется ПЧВ (RS-485, дискретные входы) ?
Последний раз редактировалось Вольд; 18.05.2018 в 13:00.
Ось поворотной балки с осью гиба не совпадает, поэтому градусы указывать бесполезно, и я для простоты отградуировал 0,1 условный градус на импульс. В каком смысле как подключен энкодер? Физически DI3, DI4, программно fast discrete inputs - direct control
in := SysPortIn ( 0 );
current1.0 := in.0;
current1.1 := in.1;
CASE current1 OF
0: IF old1 = 1 THEN
count1 := count1 + 1;
ELSIF old1 = 2 THEN
count1 := count1 - 1;
END_IF
1: IF old1 = 3 THEN
count1 := count1 + 1;
ELSIF old1 = 0 THEN
count1 := count1 - 1;
END_IF
2: IF old1 = 0 THEN
count1 := count1 + 1;
ELSIF old1 = 3 THEN
count1 := count1 - 1;
END_IF
3: IF old1 = 2 THEN
count1 := count1 + 1;
ELSIF old1 = 1 THEN
count1 := count1 - 1;
END_IF
END_CASE
old1 := current1;
IF reset1 = TRUE THEN
count1 := count11;
END_IF
current2.0 := in.2;
current2.1 := in.3;
CASE current2 OF
0: IF old2 = 1 THEN
count2 := count2 + 1;
ELSIF old2 = 2 THEN
count2 := count2 - 1;
END_IF
1: IF old2 = 3 THEN
count2 := count2 + 1;
ELSIF old2 = 0 THEN
count2 := count2 - 1;
END_IF
2: IF old2 = 0 THEN
count2 := count2 + 1;
ELSIF old2 = 3 THEN
count2 := count2 - 1;
END_IF
3: IF old2 = 2 THEN
count2 := count2 + 1;
ELSIF old2 = 1 THEN
count2 := count2 - 1;
END_IF
END_CASE
old2 := current2;
IF reset2 = TRUE THEN
count2 := count21;
END_IF