最好的人
级别: *
精华主题: * 篇
发帖数量: * 个
工控威望: * 点
下载积分: * 分
在线时间: (小时)
注册时间: *
最后登录: *
查看最好的人的 主题 / 回贴
楼主  发表于: 2012-02-03 17:09
请教,如何用step7300  lad做个模拟量滤波的块
xiaoqizi
级别: 论坛先锋
精华主题: 0
发帖数量: 446 个
工控威望: 1316 点
下载积分: 2402 分
在线时间: 714(小时)
注册时间: 2009-07-06
最后登录: 2024-11-12
查看xiaoqizi的 主题 / 回贴
1楼  发表于: 2012-02-05 01:13
这个官方的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
xiaoqizi
级别: 论坛先锋
精华主题: 0
发帖数量: 446 个
工控威望: 1316 点
下载积分: 2402 分
在线时间: 714(小时)
注册时间: 2009-07-06
最后登录: 2024-11-12
查看xiaoqizi的 主题 / 回贴
2楼  发表于: 2012-02-05 01:16
没注意,楼主想 要梯形图的!不好意思,将就一下吧