xiaoqizi
級別: 論壇先鋒
|
這個官方的STEP7編程語言介紹里有個現成的SCL的例子,可以拿去參考一下 例程如下: 這里取10個數據,去掉最小最大求平均的功能塊程序,用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 |
---|---|
|