
Сообщение от
info
Доброго дня. Подскажите, как лучше решить следующую задачу:
Есть 10 самотщелкивающихся кнопок(входы в реле) и соответственно 10 выходов(нагрузок).
Нажатие одной кнопки 1 должно запускать выход 1. При этом выход должен работать до нажатия любой другой кнопки. Нажатая следующей кнопка должна запустить свой выход и выключить предыдущую нагрузку. при этом очередность нажатия на копки(запуск нагрузок) ничем не регулируется и может осуществляться в любом порядке, соответственно любая кнопка должна включать свой выход и выключать любой из других 9 возможно работающих
Сделал ФБ на ST,
кнопки могут быть нажаты, нажаты частично, отжаты все или часть, всё равно срабатывает последняя нажатая кнопка 1 Последняя кнопка.jpg
При желании можно и R_Trig -10 штук, внутрь ФБ запихнуть. В проект переносится копипастом.
При одновременном нажатии, срабатывает самая старшая кнопка.
Если надо, при включении нажатую кнопку, вместо N, x:udint:=1; присвойте 2, будет включаться на 1 выход.
Код:
function_block Perecl // Переключатель на 10 независимых кнопок
var_input //объявление входных переменных
I1,I2,I3,I4,I5,I6,I7,I8,I9,I10: bool;
end_var
var_output //объявление выходных переменных
Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10: bool;
end_var
var //объявление локальных переменных
N, x:udint:=1;
end_var
if i1 and x<>2 then x:=2; N:=1; N.1:=TRUE; end_if
if i2 and x<>4 then x:=4; N:=1; N.2:=TRUE; end_if
if i3 and x<>8 then x:=8; N:=1; N.3:=TRUE; end_if
if i4 and x<>16 then x:=16; N:=1; N.4:=TRUE; end_if
if i5 and x<>32 then x:=32; N:=1; N.5:=TRUE; end_if
if i6 and x<>64 then x:=64; N:=1; N.6:=TRUE; end_if
if i7 and x<>128 then x:=128; N:=1; N.7:=TRUE; end_if
if i8 and x<>256 then x:=256; N:=1; N.8:=TRUE; end_if
if i9 and x<>512 then x:=512; N:=1; N.9:=TRUE; end_if
if i10 and x<>1024 then x:=1024; N:=1; N.10:=TRUE; end_if
Q1:=N.1; Q2:=N.2;Q3:=N.3;Q4:=N.4;Q5:=N.5; Q6:=N.6; Q7:=N.7;Q8:=N.8;Q9:=N.9;Q10:=N.10;
end_function_block