PDA

Просмотр полной версии : Циклическое включение/выключение реле



Alejandro
12.05.2011, 07:37
Помогите реализовать на ST циклическое вкл/выкл релейных дискретных выходов ПЛК Owen 150. Необходимо чтобы программа работала по следующему алгоритму: вкл 1 реле на 2с потом выкл...вкл 2 реле на 2с потом выкл...и так до последнего 4-го реле...после опять вкл 1 реле... и по новой. Как реализовать? Можно ли использовать цикл?

Малышев Олег
12.05.2011, 09:43
var
ton_r:TON;
state:byte:=1;
end_var
ton_r(in:=not ton_r.q,pt:=t#2s);
state:=sel(ton_r.q,state,shl(state,1));
state:=sel(state>8,state,1);
r1:=state.0;r2:=state.1;r3:=state.2;r4:=state.3;

Валенок
12.05.2011, 20:03
и еще :)

var
ton_r:TON;
state:byte:=17;
end_var
ton_r(in:=not ton_r.q,pt:=t#2s);
state:=sel(ton_r.q,state,rol(state,1));
r1:=state.0;r2:=state.1;r3:=state.2;r4:=state.3;

Малышев Олег
13.05.2011, 07:30
Ха-ха вчера мучительно думал - можно ли проще. Окажись можно. Может еще проще???

Валенок
13.05.2011, 08:27
СИ8 + одно реле ?
:)

Малышев Олег
13.05.2011, 10:02
(*Цикл r= 1ms*)
var
i:int:=0;
releys AT %qb1 : BYTE
end_var
i:=SEL(i=4000,i+1,0);
relays:=shl(1,(i div 1000));

Валенок
13.05.2011, 13:00
(*Цикл задачи(таск) = 2s*)
var
releys AT %qb1 : BYTE
end_var
relays:=mux(relays,1,2,4,0,8,0,0,0,1);

"..игра прекратиться когда все умрут.." :)

Малышев Олег
13.05.2011, 15:04
Плакал, рыдал,посыпал голову пеплом.

Николай Суриков
14.05.2011, 11:01
Вот смотрю я на Вас, аж слеза наворачивается..
Валенок победил, 4 строки кода уложил в одну)
Мб теперь стоит бороться за количество символов в строке?)
p.s. дайте ему (Валенку) приз, за рациональное использование машинного времени.

Валенок
14.05.2011, 22:43
За призом-то куда приходить ?

Малышев Олег
16.05.2011, 10:00
К сожалению, цикл плк150 не может быть больше 1 секунды.
Надо делать через таск манджер.
Будете на авиамоторной - милости просим. Нальем напиток по желанию от чая до спирта.

Alejandro
20.05.2011, 09:05
Благодарю...первые примеры работают исправно, а вот объявление типа: releys AT %qb1 : BYTE; даёт следующее - Ошибка 3728 Неверный адрес: '%QB1'....если к конкретному реле через адрес обратится то нормально, например: relays AT %QX1.0 : BOOL; компилируется... в чем проблема?

Николаев Андрей
20.05.2011, 09:20
releys AT %qb1 : BYTE
А Вы вот этот адрес откуда берете?