回复:s7400中如何编写程序,不间断读取十分钟之前的数据

已锁定

askab

  • 帖子

    405
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 2020-05-22 22:38:01

5楼

设定触发时钟 ,例如1秒钟一次,取上升沿,然后依次比较

VAR_INPUT

clock:BOOL;                         //采样时钟 更加具体情况设定    

data_in : REAL;    //采集数据组 数量20个 类型 浮点数

error_1:REAL;                         //偏差值  当前值与上一个周期值 是变大 执行动作1  例如报警

error_2:REAL;                         //偏差值  当前值与上一个周期值 是变小 执行动作2  例如报警

reset:BOOL;       //故障复位

END_VAR




VAR_OUTPUT

    // Output Parameters

alarm1:ARRAY[1..20] OF BOOL;

alarm2:ARRAY[1..20] OF BOOL;

END_VAR




VAR

cout:INT; 

NO:INT;   

store_p:BOOL;    

store_data:ARRAY[1..20] OF REAL;

END_VAR

 

    FOR NO:= 1 TO 20 BY 1 DO

        // Statement Section

        IF clock AND NOT store_p THEN

            store_p:= true;

            cout:= cout +1; 

            store_data[cout] := data_in; 

            store_data[cout+1]:= store_data[cout];

        ELSIF NOT  clock THEN

            store_p:= false;

        END_IF;

         IF cout >= 20 THEN 

             cout:= 0;

             store_data[cout]:=0.0;

          END_IF;

       IF   (store_data[cout+1] - store_data[cout]) > error_1  THEN

             alarm1[ cout] := true;

        END_IF;

        IF  (store_data[cout+1] - store_data[cout]) < error_2  THEN

             alarm2[ cout] := true;

         END_IF;

          IF reset THEN

              alarm1[ cout] := false;

              alarm2[ cout] := false;

              store_data[cout]:=0.0;


          END_IF;


  


    END_FOR;


   

END_FUNCTION_BLOCK


DATA_BLOCK DB74  FB74

//

// Block Comment...

//

BEGIN


END_DATA_BLOCK


大家同行,you ok ? me !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54658条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。