//**************************************************************************************
// 两个传感器二选一输出
//**************************************************************************************
FUNCTION FC60: VOID
TITLE = 'TWO_SL_ONE'
{
S7_m_c:= 'true';
S7_alarm_ui:= '1' // Setting for PCS 7 message dialog ('0'=standard message dialog)
}
AUTHOR: EBC_LW
NAME: TWOSLONE
VERSION: '0.01'
FAMILY: EBC
KNOW_HOW_PROTECT
VAR_INPUT
IN1
: STRUCT
VALUE : REAL;
ST : BYTE;
END_STRUCT;//输入值1
IN2
: STRUCT
VALUE : REAL;
ST : BYTE;
END_STRUCT;//输入值2
SelMode:INT; //选择输入参数0:参数选择1:最小值2:最大值3:平均值
Sel_In2 : STRUCT
VALUE :BOOL;
ST : BYTE;
END_STRUCT;//选择模式:0:IN1输出1:IN2输出
END_VAR
VAR_IN_OUT
END_VAR
VAR_OUTPUT
In2Selected: STRUCT
VALUE : BOOL;
ST : BYTE;
END_STRUCT;//选定的输入参数
OUT: STRUCT
VALUE : REAL;
ST : BYTE;
END_STRUCT;//模拟过程值
END_VAR
VAR_TEMP
END_VAR
VAR
END_VAR
// 判断值是否正常
IF (IN1.ST =B#16#80) &(IN2.ST=B#16#80) THEN //如果两个值都正常则判断选择模式
CASE SelMode OF
0 : //按照选择参数选择输出
IF Sel_In2.ST = B#16#80 THEN
IF Sel_In2.VALUE=1 THEN
OUT:=IN2;
ELSE
OUT:=IN1;
END_IF;
END_IF;
OUT.ST:=B#16#80;
1 ://选择最小值
OUT.VALUE:=MIN(IN1:=IN1.VALUE,IN2:=IN2.VALUE);
OUT.ST:=B#16#80;
2 :// 选择最大值
OUT.VALUE:=MAX(IN1:=IN1.VALUE,IN2:=IN2.VALUE);
OUT.ST:=B#16#80;
3 ://取平均值
OUT.VALUE:=(IN1.VALUE+IN2.VALUE)/2;
OUT.ST:=B#16#80;
ELSE
IF IN1.ST =B#16#80 THEN
OUT:=IN1;
ELSE
OUT:=IN2;
END_IF;
END_CASE;
END_IF;
END_FUNCTION
//原创程序请多交流 QQ 275578306