Сообщение от
Pvalp
Вот еще попробовал создать функцию fBOOL_INT на ST - аналог макроса BOOL_INT
Можно конечно еще причесать через FOR...
Код:
function fBOOL_INT: udint; //имя функции и тип данных выхода
var_input //объявление входных переменных
IN01 : bool; //входная переменная с типом данных bool
IN02 : bool; //входная переменная с типом данных bool
IN03 : bool; //входная переменная с типом данных bool
IN04 : bool; //входная переменная с типом данных bool
IN05 : bool; //входная переменная с типом данных bool
IN06 : bool; //входная переменная с типом данных bool
IN07 : bool; //входная переменная с типом данных bool
IN08 : bool; //входная переменная с типом данных bool
end_var
var //объявление локальных переменных
sel1 : udint; //локальная переменная с типом данных udint
sel2 : udint; //локальная переменная с типом данных udint
sel3 : udint; //локальная переменная с типом данных udint
sel4 : udint; //локальная переменная с типом данных udint
sel5 : udint; //локальная переменная с типом данных udint
sel6 : udint; //локальная переменная с типом данных udint
sel7 : udint; //локальная переменная с типом данных udint
sel8 : udint; //локальная переменная с типом данных udint
end_var
if IN01 then sel1 :=1; else sel1 :=0; end_if
if IN02 then sel2 :=2; else sel2 :=0; end_if
if IN03 then sel3 :=4; else sel3 :=0; end_if
if IN04 then sel4 :=8; else sel4 :=0; end_if
if IN05 then sel5 :=16; else sel5 :=0; end_if
if IN06 then sel6 :=32; else sel6 :=0; end_if
if IN07 then sel7 :=64; else sel7 :=0; end_if
if IN08 then sel8 :=128; else sel8 :=0; end_if
fBOOL_INT := sel1+sel2+sel3+sel4+sel5+sel6+sel7+sel8;
end_function
Это делается так
Код:
function BYTE_OF_BIT: udint; //
// (c) PeterA для ворума ОВЕН
var_input //объявление входных переменных
B0:BOOL;
B1:BOOL;
B2:BOOL;
B3:BOOL;
B4:BOOL;
B5:BOOL;
B6:BOOL;
B7:BOOL;
end_var
BYTE_OF_BIT:= SHL(SHL(SHL(SHL(SHL(SHL(SHL(bool_to_udint(B7),1) + bool_to_udint(B6),1)
+ bool_to_udint(B5),1) + bool_to_udint(B4),1) + bool_to_udint(B3),1)
+ bool_to_udint(B2),1) + bool_to_udint(B1),1) + bool_to_udint(B0);
end_function