本次讨论重点在于介绍一种支持矩形积分法和梯形积分法切换的流量累积功能块,该功能块基于数值积分器实现,
矩形积分法算法:
y(k) = y(k-1) + x(k) * h
x(k):瞬时采样值。 h:采样周期
y(k-1) :上一时刻累计值。 y(k) :输出值
公式简化:累计变量 = 累计变量 + x(k)*h
梯形积分法:
梯形积分公式
y(k) = y(k-1) + (x(k) + x(k-1)) * h * 0.5
x(k):瞬时采样值。 h:采样周期.
x(k-1)上一时刻瞬时值
y(k-1) :上一时刻累计值。
y(k) :输出值
代码分享:
#中断计时时间 := #中断计时时间 + #中断时间ms;//中断计时
IF #中断计时时间 >= #扫描周期ms AND NOT #复位 THEN
#ms瞬时值 := #流量瞬时值 / DINT_TO_REAL(TIME_TO_DINT(#瞬时值时间单位ms));//流量时间单位换算ms
IF #模式 THEN
#梯形积分 := 0.5 * DINT_TO_REAL(#扫描周期ms) * (#ms瞬时值 + #上时刻瞬时值);//梯形面积
#瞬时值积分和 := #瞬时值积分和 + #梯形积分;
ELSE
#矩形积分 := DINT_TO_REAL(#扫描周期ms) * #ms瞬时值;//矩形积分法
#瞬时值积分和 := #瞬时值积分和 + #矩形积分;
END_IF;
#中断计时时间 := 0;
#上时刻瞬时值 := #ms瞬时值;//上一时刻采样的瞬时值
END_IF;
//避免累计时间越长出现大数吃小数的问题
IF #瞬时值积分和 >= 10000.0 THEN
#瞬时值积分和 := #瞬时值积分和 - 10000.0;
#计数 += 1;
END_IF;
#累计流量输出 := 10000.0 * DINT_TO_REAL(#计数) + #瞬时值积分和;//累计流量输出
IF #复位 THEN
#瞬时值积分和 := 0.0;
#计数 := 0;
END_IF;
加入知识星球智能制造与自动化,加入会员可下载此公众号发布文章中的相关资料(行业报告、MES、数字化技术方案、自动化教程、自动化行业标准化资料VASS\SICAR\戴姆勒等、C#上位机开发、node-red开发、人工智能教程等)。
今天的文章,如果你感觉有价值,请记得一键三连:点赞加关注,留言,转发朋友圈,分享收藏,点击在看之后,一定记着加我个人微信:ZIDHXB。