回复:流量累积

面条

  • 帖子

    59
  • 精华

    2
  • 被关注

    9

论坛等级:游侠

注册时间:2008-05-13

普通 普通 如何晋级?

发布于 2008-05-14 10:12:52

0楼

FUNCTION_BLOCK "FLUX_base"

TITLE = 'FLUXbase'
//流量累积计算
//
//算法原理:
// 当前积分量 = 积分量 + 以前的计算误差
// 当前累积量 = 当前积分量 + 原累积量
// 当前计算误差 = 原累积量 - 当前累积量 + 当前积分量

//
//版本: 1.2
//作者: QLHCCO
//创建: 2008.05.09 V1.0
//更新: 2008.05.15 V1.1
//更新: 2008.05.15 V1.2
// v1.2版本的更新变动较大,在精度处理方面还是原来的思想,在输出显示方面
// 采用了DINT数据类型,修正数据超过7位数时个位无法显示的问题。
//
VERSION: '1.2'
AUTHOR: qlhcco
NAME: FLUXbase
FAMILY: FLUX

VAR_INPUT
RS : BOOL := FALSE ; //初始化(手动)
PV : REAL := 0.0 ; //瞬时流量
CYC : REAL := 100.0 ; //采样时间(MS)
PLL : REAL := 0.0 ; //允许的最小瞬时流量
END_VAR
VAR_IN_OUT
OV : DINT := 0 ; //累积量输出
OV_MIN : REAL := 0.0 ; //累积量<1.0
ERROR : REAL := 0.0 ; //累计误差
PV_ALT : REAL := 0.0 ; //上周期瞬时流量
END_VAR
VAR_TEMP
tbRS : BOOL ; //初始化
Average : REAL ; //瞬时平均值
Integral : REAL ; //当前积分量
OVminFlk : REAL ; //上周期小累积量
trOVmin : REAL ; //当前累积量<1.0
trError : REAL ; //当前累计误差
OVminDint : DINT ; //当前小累积量长整型表示
trOV : DINT ; //当前累积量
END_VAR
trOV := OV ;
OVminFlk := OV_MIN ;
trOVmin := OV_MIN ;
trError := ERROR ;

Average := ( PV + PV_ALT ) / 2.0 ;
tbRS := trOV >= 2000000000 AND trOVmin >= 0.0 OR RS;

IF tbRS THEN //初始化
trOV := 0 ;
OVminFlk := 0.0 ;
trOVmin := 0.0 ;
trError := 0.0 ;
END_IF;

IF Average >= PLL THEN //小信号切除
//注:为什么误差(ERROR)加到积分(Integral)里,而不是加到累积量(OV_MIN)
//在浮点数计算的加减有一个原则,加法时,小数值与小数值与小数值先相加
//然后再加大数值的数据,减法时,大数值先相减,然后加减小数值.
Integral := Average * ( CYC / 3.6E+6 ) + trError ; //计算当前积分量
trOVmin := Integral + OVminFlk ;
trError := OVminFlk - trOVmin + Integral ; //误差动态误差计算
ELSE
trOVmin := OVminFlk ;
END_IF ;

OVminDint := REAL_TO_DINT( trOVmin ) ; //取出OV_MIN的整数部分
OV := trOV + OVminDint ;
OV_MIN := trOVmin - DINT_TO_REAL( OVminDint ) ; //将OV_MIN的整数部分去除,留下小数部分
ERROR := trError ;
PV_ALT := PV ;
END_FUNCTION_BLOCK
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54663条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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