ФБ для конвертации BCD формата панелей, HEX в DEC и обратно DEC в HEX, пришлось переделать из функций, для приёма времени из панели ИП320.
Время там в шестнадцатиричной системе, да ещё и совмещено год с месяцем, день с часами, минуты с секундами.
В панелях СП307, СП310 время тоже передаётся в BCD формате, только отдельными регистрами.
Чтобы их разделить функции не достаточно. На скрине 2308 (год 23, месяц 08) принимается как 8968 1 Конвертация HEX_DEC.jpg
Код:function_block HEX_DEC // Конвертация из Шестнадцатиричной в Десятичную var_input x: udint; end_var var_output //объявление выходных переменных Q,Q1,Q2 : udint; end_var Q := x/4096 MOD 16*1000+x/256 MOD 16*100+x/16 MOD 16*10+x MOD 16; Q1:=Q/100; Q2:=Q-Q1*100; end_function_blockКод:function_block DEC_HEX // Конвертация из Десятичной в Шестнадцатиричную var_input x: udint; end_va var_output //объявление выходных переменных Q,Q1,Q2 : udint; end_var var a,b,c,d: udint; end_var a:=x/1000; b:=(x-a*1000)/100; c:=(x-a*1000-b*100)/10; d:=x-a*1000-b*100-c*10; Q := a*4096 + b*256+c*16+d; Q1:=Q/100; Q2:=Q-Q1*100; end_function_block




Ответить с цитированием
