前年冬天被一个电话拉去现场,客户是做循环水加药的,问题听着很小:PLC上累计的流量比流量计表头显示的少了12%。就这12%,让加药泵常年欠加,水池余氯一直压不住。
我第一反应是表脏了,拆下来一看叶轮干净得发亮。拿手持频率计卡在输出端,频率和理论值分毫不差。表没毛病,PLC也在老老实实数脉冲,那这12%是从哪儿蒸发的?
答案在西门子S7-1200的DI点默认参数上:输入滤波时间6.4 ms。而那只DN50涡轮流量计的脉冲宽度只有0.5 ms。滤波窗口比脉冲本身还宽,等于拿筛子接沙子,一部分脉冲直接被磨没了。把滤波改成0.05 ms,或者干脆让信号走HSC高速计数器,数字当场对齐。
这类项目最烦的地方就在这儿——手册上每个参数都写着“支持”,真接上系统才发现坑埋在中间那一层。下面这几段把我这几年踩过的坑捋一捋,你如果正在做脉冲流量的采集,基本能对号入座。
先分清:你搜的“脉冲流量”到底是哪一个
中文里“脉冲流量”这词被两拨完全不同的人在用。一拨是工业仪表的人,说的是流量计输出的脉冲信号,靠数脉冲数换算体积;另一拨是运维和互联网的人,说的是流量曲线上的尖峰——秒杀、直播开播、定时任务集中触发,带宽在几十秒里冲到平日的十倍。
判别方法很简单:你的搜索词里带“当量”“K系数”“脉冲数”“PLC”,那就是前者;带“QPS”“带宽”“突发”“削峰”,那是后者。这两个方向的解法南辕北辙,搜错方向能白搭一下午。
这篇文章主体写工业侧,因为那部分的参数可算、步骤可复现;网络侧的脉冲流量我在最后一节做个对照,你会发现两者怕的东西其实是一回事:采样端跟不上事件密度。
脉冲当量和K系数,公式其实就一行
原理没什么玄的。脉冲输出型流量计(涡轮、涡街、部分齿轮/椭圆齿轮)每过一个固定体积,就吐一个脉冲。这个“一个脉冲代表多少体积”叫脉冲当量,它的倒数就是K系数,单位一般是P/L(脉冲每升)或者P/m³。
公式:累计流量(L) = 脉冲总数 ÷ K系数(P/L);瞬时流量(L/s) = 脉冲频率(Hz) ÷ K系数(P/L)。
拿我手上这只DN50涡轮举例,铭牌上K = 200 P/L,也就是1个脉冲 = 5 mL。
- 瞬时流量 6 m³/h → 6000 L/h → 1.667 L/s
- 对应脉冲频率 f = 1.667 × 200 ≈ 333 Hz
- PLC每100 ms采一次,每次大约读到33个脉冲
这里有两个新人最容易翻车的单位坑。第一,铭牌上有的标P/L有的标P/m³,差1000倍,抄错一位数是灾难。第二,很多厂家给的K系数其实是标定值加修正曲线,大口径涡轮在小流量段线性度很差,DN50在1 m³/h以下K值可能飘到240 P/L,你如果拿满量程K值去算小流量,误差就是这么来的。
还有个隐形问题:脉冲计数器会溢出。16位计数器到65535就翻零,按2400万脉冲一天算,半小时就爆。32位到42.9亿,这只表大概能撑三个月。所以累计量在PLC里一定要转成浮点或者用64位,别偷懒用INT。
接线这一步,丢脉冲九成出在这儿
脉冲输出大体三种:NPN集电极开路(OC)、PNP、推挽,还有老式干簧管干接点。OC输出是NPN三极管对地拉低,必须外接上拉电阻,很多人忘了这一步,量出来信号“时有时无”,还以为是表坏了。
几个具体数值,直接抄:供电12–24 VDC,负载电流≤20 mA;上拉电阻按R = V/I估,24 V配2.2 kΩ或4.7 kΩ都能跑,太小了发热,太大了边沿变缓。线用双绞屏蔽,屏蔽层单端接地,接PLC那一侧,两头都接反而成环,干扰更严重。
线长超过30米就要留意了。50米普通屏蔽线分布电容大约2500 pF,配4.7 kΩ上拉,RC时间常数约11.75 µs,对0.5 ms的脉冲宽度还很富裕,但如果你用的是上拉100 kΩ的懒人接法,边沿能拖到几百微秒,PLC直接认不出来。
另外一条:信号线和变频器输出线、伺服动力线别塞同一根线槽。我见过一个现场,脉冲线跟变频器输出捆在一起走了15米,PLC每分钟随机多出几十个脉冲,把变频器单独走槽之后立刻干净了。分不开的话,套磁环、加信号隔离器,两三百块能省掉几天扯皮。
PLC端的坑比线缆更多
硬件通了对不对,还得看控制器。我把常见的几个坑列一下:
- 输入滤波。前面说的6.4 ms就是这只鬼。西门子S7-1200可以在硬件组态里把每个DI点的输入滤波单独设,最低能到0.05 ms,但通用DI点仍然不建议接高频脉冲,老老实实走HSC。
- HSC的最大计数频率要核算。S7-1200的HSC单相最高100 kHz,双相80 kHz,看着够用,但高速计数模块和普通DI点的能力差着两个数量级,别混着算。
- 不要用扫描周期去读脉冲。扫描周期是波动的,几毫秒到几十毫秒跳,靠“本次扫描读到的高电平”计数,漏掉多少全凭运气。
- 采样周期要满足基本约束。按333 Hz信号、100 ms采样,平均每次33个脉冲,属于统计意义上够用;但如果你要在屏幕上显示瞬时流量,这个刷新率看着会一跳一跳,建议做一阶滤波,时间常数取1–3秒,别取10秒,否则加药响应拖得太慢。
丢脉冲现场五步排查法
按这个顺序走,省时间:
第一步,测表端。手持频率计量输出频率,跟 f = Q(L/s) × K(P/L) 对一下,偏差在1%以内说明表没问题,往第三步走。
第二步,测表端不正常。查叶轮/发生体是否卡阻、介质有没有气泡、K系数是不是用小流量段的值代了满量程。
第三步,比对计数。PLC读一分钟的脉冲总数,和频率计显示值×60对比,差多少一目了然。
第四步,差在采集侧。依次查:输入滤波设置、上拉电阻阻值、线长、屏蔽层接地位置、是否与动力线共槽。
第五步,还查不出来。把屏蔽线换成隔离型脉冲分配器输出,或者干脆换4–20mA方案,别死磕。
四种输出方式横向对比
| 维度 | 脉冲输出 | 4-20 mA | Modbus RTU | HART |
|---|---|---|---|---|
| 承载信息 | 累计量+瞬时量 | 仅瞬时量 | 全部 | 全部 |
| 抗干扰 | 差 | 好 | 好 | 好 |
| 可靠传输距离 | <100 m | <1000 m | 1200 m(RS485) | 1500 m |
| 断电累计保持 | 计数器侧负责 | 无 | 有 | 有 |
| 断线检测 | 无 | 有(<3.6 mA报警) | 靠超时判断 | 有 |
| 单点成本 | 最低 | 中 | 中 | 高 |
我的实际建议:只要现场有强电干扰、传输超过50米、或者需要断线报警,直接上4-20mA或RS485,脉冲输出留给短距离、低成本、纯累计计量的场景。别为了省两百块在配电柜里跟变频器斗智斗勇。
顺带说一句网络侧的“脉冲流量”
做互联网的同学嘴里那个脉冲流量,本质上是一样的结构:短时间内事件密度暴涨,采样端跟不上。工控侧表现为丢脉冲数,互联网侧表现为丢请求、连接队列打满、限流误伤。两边解法也互通——工控是提高采样频率加硬件计数,互联网是提前扩容加令牌桶削峰。区别只在于,前者丢的是几升水,后者丢的是几单生意。
最后一句实在话:脉冲流量这套东西不难,难的是每一层都差一点点,12%的误差未必来自一个地方,可能是滤波吃掉5%、线缆干扰3%、K系数取值偏4%。所以排查时别指望一次找准,把每一层单独量出来,问题自己就浮上来了。