PDA

Просмотр полной версии : сложение/вычитание при помощи энкодера



B.S.V
05.08.2018, 15:40
День добрый.

ПЛК 110

Задача: Есть ручной энкодер на пульте управления.
Нужно увеличивать и уменьшать значение переменной при помощи этого энкодера, но не на единицу, а на 200.
То есть определяем направление вращения и на каждый импульс энкодера прибавляем к переменной 200.
Пишу на ST.
Уже череп сломал. Есть идеи?
Заранее Благодарю.

SA104
05.08.2018, 20:43
b=a*200 , где а - число импульсов с энкодера - не подходит?

B.S.V
05.08.2018, 20:53
Нет. Есть переменная у которой изначальное значение равно 6400, и на каждый импульс экодера ее надо увеличивать или уменьшать на 200.

что то типа:
а - направление;
b = 6400
c = 200

если а = TRUE
то на каждый импульс b:= b + c;
иначе на каждый импульс b:= b - c;

как к импульсу с энкодера привязать арифметическую операцию?

lara197a
05.08.2018, 22:01
может выходную переменную сразу умножать на 200,
а энкодер пусть вычитает- прибавляет 1 ?

B.S.V
05.08.2018, 22:17
6400 * 200 = 1280000 !!!!
А мне надо 6600, 6800, 7000, 7200 и т.д.
Ну и в обратную сторону соответственно...

petera
05.08.2018, 22:43
Нет. Есть переменная у которой изначальное значение равно 6400, и на каждый импульс экодера ее надо увеличивать или уменьшать на 200.

что то типа:
а - направление;
b = 6400
c = 200

если а = TRUE
то на каждый импульс b:= b + c;
иначе на каждый импульс b:= b - c;
как к импульсу с энкодера привязать арифметическую операцию?

PROGRAM PLC_PRG
VAR
R_TR: R_TRIG;
Impuls: BOOL;
a: BOOL; (*Направление*)
b: UDINT:= 6400;
END_VAR

R_TR(CLK:=Impuls);
IF R_TR.Q AND a THEN
b:= b + 200;
ELSIF R_TR.Q AND NOT a THEN
b:= b - 200;
END_IF

B.S.V
05.08.2018, 23:02
))) Красота
Я понимал что надо использовать триггер... но не дозрел как... а тут так все просто ))
Благодарствую.