请问三选一和三选二如何理解? 三选一 function_block threeselectone var_input pv1:sfloat;(*输入值1*) pv2:sfloat;(*输入值2*) pv3:sfloat;(*输入值3*) flag1:word;(*输入值1质量码*) flag2:word;(*输入值2质量码*) flag3:word;(*输入值3质量码*) db:sfloat;(*偏差值*) sel:uint;(*模式选择*) end_var var_output pv:sfloat;(*模式选择*) io_bad:bool;(*输出值质量判断结果*) end_var var io1_bad:bool; io2_bad:bool; io3_bad:bool; db1:bool; db2:bool; db3:bool; ave:sfloat; mid:sfloat; pv_temp:sfloat; num:sfloat; end_var num=0; db1=off; db2=off; db3=off; if (and_word(flag1,2048)=2048) or (and_word(flag1,256)=256) then io1_bad=on; num=num+1; else io1_bad=off; end_if; if (and_word(flag2,2048)=2048) or (and_word(flag2,256)=256) then io2_bad=on; num=num+1; else io2_bad=off; end_if; if (and_word(flag3,2048)=2048) or (and_word(flag3,256)=256) then io3_bad=on; num=num+1; else io3_bad=off; end_if; if num=0 then ave=(pv1+pv2+pv3)/3; end_if; if max_sfloat(pv1,pv2) =pv3 then mid=min_sfloat(pv1,pv2); else mid=pv3; end_if; end_if; if abs_sfloat(pv1 - pv2) db then db1=on; end_if; if abs_sfloat(pv1 - pv3) db then db2=on; end_if; if abs_sfloat(pv2 - pv3) db then db3=on; end_if; if num=0 then if db1=on and db2=on and db3=on then num=num+3; end_if; if db1=on and db2=on and db3=off then ave=(pv2+pv3)/2; num=num+1; end_if; if db1=on and db2=off and db3=on then ave=(pv1+pv3)/2; num=num+1; end_if; if db1=off and db2=on and db3=on then ave=(pv1+pv2)/2; num=num+1; end_if; else if num=1 then if io1_bad=on then if abs_sfloat(pv2 - pv3) db*2 then num=num+2; else ave=(pv2+pv3)/2; end_if; end_if; if io2_bad=on then if abs_sfloat(pv1 - pv3) db*2 then num=num+2; else ave=(pv1+pv3)/2; end_if; end_if; if io3_bad=on then if abs_sfloat(pv1 - pv2) db*2 then num=num+2; else ave=(pv1+pv2)/2; end_if; end_if; end_if; end_if; if sel=0 then if num=0 then pv_temp=mid; io_bad=off; else pv_temp=pv; io_bad=on; end_if; end_if; if sel=1 then if num 2048) or (and_word(flag1,256) 256) then pv_temp=pv1; end_if; if (and_word(flag2,2048) 2048) or (and_word(flag2,256) 256) then pv_temp=pv2; end_if; if (and_word(flag3,2048) 2048) or (and_word(flag3,256) 256) then pv_temp=pv3; end_if; io_bad=off; end_if; if num=3 then pv_temp=pv; io_bad=on; end_if; end_if; pv=pv_temp; end_function_block查看更多