流量累计的SCL代码

已锁定

lvminhu

  • 帖子

    7
  • 精华

    1
  • 被关注

    4

论坛等级:游侠

注册时间:2015-06-23

普通 普通 如何晋级?

流量累计的SCL代码

6012

16

2017-11-14 00:38:01

基本和PCS7 Integrator 块差不多了;

 

FUNCTION_BLOCK Total
TITLE = 'Total'
{
S7_tasklist:= 'OB80,OB100';  // Block is called if there is a time error and at a warm restart
S7_m_c:=      'true';        // Block can be controlled and monitored
S7_alarm_ui:= '1'            // Setting for PCS 7 message dialog ('0'=standard message dialog)
}
//
VERSION: '1.0'
AUTHOR:AdvLibM
NAME: Total
FAMILY: AdvLibM
//KNOW_HOW_PROTECT
VAR_INPUT
 PV{S7_dynamic:='true';
           S7_edit:='para';
           S7_m_c:='true';
           S7_xm_c:='value,true;';
           S7_xqc:='value,true;';
           S7_xshortcut:='value,Auxiliary,value1;'
         }:STRUCT
    value:REAL:=0; //当前流量
    ST:BYTE:=16#ff;
END_STRUCT;

     UNIT_K{S7_dynamic:='true';S7_edit:='para';S7_m_c:='true';S7_read_back:='true'}:REAL:=1.0;// 单位换算,标准单位为L/S
     HOLD{S7_dynamic:='true';S7_edit:='para';S7_m_c:='true';S7_read_back:='true'}:BOOL:=1;//保持当前流量
     OutTrkon{S7_dynamic:='true';S7_edit:='para';S7_m_c:='true';S7_read_back:='true'}:BOOL:=0;//强制累计
     OutTrk{S7_dynamic:='true';S7_edit:='para';S7_m_c:='true';S7_read_back:='true'}:REAL:=0;// 强制值
    END_VAR
VAR_IN_OUT
   
    END_VAR
VAR_OUTPUT
   PV_OUT {S7_dynamic:='true';S7_m_c:='true'}:REAL;//流量累计
   CycleTime{S7_dynamic:='true';S7_m_c:='true'}:REAL;// 循环诊断扫描周期
 END_VAR
VAR_TEMP
    // Temporary Variables
END_VAR
VAR
PV_OUT0:REAL:=0;//累计0
PV_OUT1:REAL:=0;//累计1
TM1:TIME:=T#0MS;//循环时间点1 时间
TM0:TIME:=T#0MS;//循环时间点0 时间
FLOW1 :REAL:=0; //循环时间点1 流量
FLOW0 :REAL:=0; //循环时间点1 流量
END_VAR
BEGIN
 IF HOLD=0 THEN  //保持当前流量
      TM1:=TIME_TCK();
       TM0:=TIME_TCK();
         FLOW0:=PV.value/(UNIT_K*1000);
           FLOW1:=PV.value/(UNIT_K*1000);
ELSIF OutTrkon=1 AND HOLD=1 THEN//强制流量累计输出
    PV_OUT0:=0.5*OutTrk;
      PV_OUT1:=0.5*OutTrk;
       PV_OUT:=PV_OUT0+PV_OUT1;
         TM1:=TIME_TCK();
          TM0:=TIME_TCK();
             FLOW0:=PV.value/(UNIT_K*1000);
    FLOW1:=PV.value/(UNIT_K*1000);
ELSIF OutTrkon=0 AND HOLD=1 AND TM0-TM1>T#90S  THEN//TIME_TCK(最大值为2^31-1)重新计时点流量累计
    FLOW0:=PV.value/(UNIT_K*1000);
      CycleTime:=0;//2147483647-DINT_TO_REAL(TIME_TO_DINT(TM0-TM1));//扫描时间
       PV_OUT0:=PV_OUT0+0.5*(FLOW1+FLOW0)*CycleTime;
         PV_OUT:=PV_OUT0+PV_OUT1;
         FLOW1:=PV.value/(UNIT_K*1000);
    TM1:=TIME_TCK();
ELSIF OutTrkon=0 AND HOLD=1 AND TM0-TM1<T#90S AND TM0>=TM1  THEN//前半段流量累计
    FLOW0:=PV.value/(UNIT_K*1000);
      CycleTime:=DINT_TO_REAL(TIME_TO_DINT(TM0-TM1));//扫描时间
        PV_OUT0:=PV_OUT0+0.5*(FLOW1+FLOW0)*CycleTime;
          PV_OUT:=PV_OUT0+PV_OUT1;
          TM1:=TIME_TCK();
            FLOW1:=PV.value/(UNIT_K*1000);
  ELSIF OutTrkon=0 AND HOLD=1 AND TM1-TM0>T#90S  THEN//TIME_TCK(最大值为2^31-1)重新计时点流量累计
    FLOW1:=PV.value/(UNIT_K*1000);
      CycleTime:=0;//2147483647-DINT_TO_REAL(TIME_TO_DINT(TM1-TM0));//扫描时间
        PV_OUT1:=PV_OUT1+0.5*(FLOW1+FLOW0)*CycleTime;
          PV_OUT:=PV_OUT0+PV_OUT1;
          TM0:=TIME_TCK();
              FLOW0:=PV.value/(UNIT_K*1000);
  ELSIF  OutTrkon=0 AND HOLD=1 AND  TM0<TM1 AND TM1-TM0<T#90S  THEN//后半段流量累计
    FLOW1:=PV.value/(UNIT_K*1000);
      CycleTime:=DINT_TO_REAL(TIME_TO_DINT(TM1-TM0));//扫描时间
        PV_OUT1:=PV_OUT1+0.5*(FLOW1+FLOW0)*CycleTime;
          PV_OUT:=PV_OUT0+PV_OUT1;
          TM0:=TIME_TCK();
             FLOW0:=PV.value/(UNIT_K*1000);
       END_IF;
        ;    
END_FUNCTION_BLOCK    

流量累计的SCL代码 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54658条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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