這個官方的STEP7編程語言介紹里有個現(xiàn)成的SCL的例子,可以拿去參考一下
例程如下:
這里取10個數(shù)據(jù),去掉最小最大求平均的功能塊程序,用SCL編程一下就可以用了
FUNCTION_BLOCK FB2
VAR_INPUT
     PIW_IN:INT;
    HI_LIM_IN:REAL:=100.0;
    LO_LIM_IN:REAL:=0.0;
    BIPOLAR_IN:BOOL:=FALSE;
END_VAR
VAR_IN_OUT
    // I/O Parameters
END_VAR
VAR_OUTPUT
    SCALED_VAL:REAL;
    SCALED_FILTED:REAL;
    ERR:BOOL;
END_VAR
VAR_TEMP
    RET_VAL_105:WORD;
    LOOP_COUNT:INT;
    MAX_DATA:REAL;
    MIN_DATA:REAL;
    TOTAL:REAL;
    TOTAL_FILTERD:REAL;
END_VAR
VAR
    DATA_STORE:ARRAY[0..9]OF REAL;
END_VAR
    RET_VAL_105:=SCALE(IN :=PIW_IN
          ,HI_LIM :=HI_LIM_IN
          ,LO_LIM :=LO_LIM_IN
          ,BIPOLAR :=BIPOLAR_IN
          ,OUT :=SCALED_VAL
          ); 
     IF RET_VAL_105 <> 0 THEN ERR:=TRUE;
    ELSE ERR:=FALSE;
    END_IF;
    MAX_DATA:=DATA_STORE[0];//初始化
    MIN_DATA:=DATA_STORE[0];
    TOTAL:=0.0;
    TOTAL_FILTERD:=0.0;
    
    FOR LOOP_COUNT:=0 TO 8 BY 1 DO//FIFO堆棧
        DATA_STORE[LOOP_COUNT]:=DATA_STORE[LOOP_COUNT+1];
    END_FOR;
        data_store[9]:=scaled_val;//加入新檢測值
        
        
    FOR LOOP_COUNT:=0 TO 9 BY 1 DO
        //查找最大值
    IF MAX_DATA<DATA_STORE[LOOP_COUNT] THEN MAX_DATA:=DATA_STORE[LOOP_COUNT];
    END_IF;
        //查找最小值
    IF MIN_DATA>DATA_STORE[LOOP_COUNT] THEN MIN_DATA:=DATA_STORE[LOOP_COUNT];
    END_IF;
        //計算累加和
    TOTAL:=TOTAL+DATA_STORE[LOOP_COUNT];
    END_FOR;
        //計算濾波后累加和
        TOTAL_FILTERD:=TOTAL-MIN_DATA-MAX_DATA;
        //計算濾波后平均值
        SCALED_FILTED:=TOTAL_FILTERD/8.0;
END_FUNCTION_BLOCK