找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
在中断中编程开始累计则sum1,sum2,.........都赋值0.0.sum1=sum1+pv/周期,如果sum1>sum1_sp,则sum2=sum2+sum1,sum1=0;sum2>=sum2_sp,则sum3=sum3+sum2,sum2=0........sum=sum1+sum2+sum3+.........
最后的sum就是要输出的值。
SUBROUTINE_BLOCK SBR_1:SBR1
TITLE=子程序注释
VAR_INPUT
Reset:BOOL; // 复位请求
UnitTime:BOOL; // 瞬时时间(0小时/1分钟)
Rate:REAL; // 瞬时流量/速度
END_VAR
VAR_IN_OUT
LastAccuPtr:DWORD; // 累计量保持缓冲区(8Byte)
END_VAR
VAR_OUTPUT
AccuValue:REAL; // 累计值
END_VAR
VAR
LastTimePtr:DWORD; // 上次调用时间指针
ScanDurat:DWORD; // 扫描间隔时间
tmpR1:REAL; // 浮点数临时变量
tmpR2:REAL; // 浮点数临时变量
END_VAR
BEGIN
Network 1
// 取得扫描时间的指针(保持缓冲区偏移4byte)
LD SM0.0
MOVD LD5, LD13
+D +4, LD13
Network 2
// 非首次扫描和请求复位时,计算累加值:
// 1、先取得与前次调用时间差值(ms)
// 2、根据输入单位时长类型计算一次扫描增量
// 3、在前次累计量基础上累计增量,并保持
LDN L0.0
AN SM0.1
LPS
CITIM *LD13, LD17
AENO
DTR LD17, LD21
LRD
LPS
AN L0.1
MOVR 3600000.0, LD25
AENO
/R LD21, LD25
AENO
= L63.7
LPP
A L0.1
MOVR 60000.0, LD25
AENO
/R LD21, LD25
AENO
O L63.7
MOVR LD1, LD21
/R LD25, LD21
LPP
MOVR LD21, LD9
AENO
+R *LD5, LD9
AENO
MOVR LD9, *LD5
Network 3
// 请求或首次扫描(复位前次累计量),累计量复位或保持不变。
LD L0.0
MOVR 0.0, *LD5
AENO
LD SM0.1
OLD
MOVR *LD5, LD9
Network 4
// 保存保持扫描的时间
LD SM0.0
BITIM LD13
END_SUBROUTINE_BLOCK
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!