流量累计程序 博途v15编写的西门子流量累计程序,封装好的FB块直接可以拿来用,并且配有视频解说,轻松学会
最近在调试现场流量计项目,发现不少新手对累计流量功能实现总是卡壳。今天就给大家拆解一个我封装好的博途V15流量累计FB块,这个模块在啤酒厂发酵罐项目上稳定运行两年多了,直接复制粘贴就能用。
先看模块的接口设计(见图1)。核心参数就四个:当前瞬时流量、累计总量输出、复位信号和累计间隔时间。这里有个坑要注意——流量计脉冲信号和工程量的转换最好在外部做,FB块专注做纯数学运算更灵活。
//FB5001主体代码片段 IF #复位信号 THEN #累计总量 := 0.0; #上次时间戳 := T#0S; ELSE #时间差 := TIME_TO_DINT(LocalTime - #上次时间戳)/1000; //转换成秒 IF #时间差 >= #间隔时间 THEN #累计总量 := #累计总量 + (#瞬时流量 * #时间差)/3600; #上次时间戳 := LocalTime; END IF; END_IF;这段代码的精髓在时间差处理。用系统时钟LocalTime替代传统的定时器,避免定时器资源占用。当两次扫描周期的时间差达到设定间隔(默认1秒),就把瞬时流量乘以时间差转换成小时单位累计。视频里会重点演示怎么处理时间戳跳变的问题。
实际调用时只需要三行代码:
CALL FB5001, DB100 瞬时流量 := "AI_Flow".工程值, 累计总量 => "Totalizer".实际值;注意工程量的单位统一性。比如流量计是m³/h,累计结果自然就是m³。模块内部自动处理单位换算,现场调试时改个系数就能适配不同量程的仪表。
流量累计程序 博途v15编写的西门子流量累计程序,封装好的FB块直接可以拿来用,并且配有视频解说,轻松学会
有个特别实用的设计是断电保持功能。在FB的Static变量声明区加了Retain属性,配合OB100做首次下载初始化,完美解决PLC重启后累计值清零的问题。这个细节在污水处理项目的24小时运行设备上特别关键。
测试时建议先用强制表模拟:给个固定10m³/h的流量信号,等6分钟后看累计值是否增加1m³。这个方法比在线监控效率高多了,当年我就是靠这个土办法三天调完八个发酵罐的计量系统。
完整程序包和视频解说已经打包好,网盘链接扔评论区。下期预告:如何用SCL重写这个FB实现毫秒级精度,适合压缩空气计量场景。