Rapid SCADA v6 水厂与管廊监视实战:液位、流量、泵状态和输送量核对
本篇完成什么把液位、瞬时流量、累计水量和泵命令分开用一小时示例核对输送量和异常状态。水厂画面里“流量500”和报表里“水量500”看起来一样物理意义却可能不同。前者若是 m³/h后者应是某个时间区间的 m³直接复制数值无法证明一小时输送了多少水。本文基于 Rapid SCADA v6 的采集和归档机制给出泵房或管廊子系统的监视设计。示例编号和算法用于联调自动泵控、气体检测和专用安全联锁需按项目设计及设备能力实施不由页面脚本承担。1. 一台泵至少区分状态、故障和命令示例通道名称单位/类型核对要点4101水池液位mInput量程、安装零点、质量和更新时间4102泵运行反馈状态Input来自真实运行接点或设备回读4103泵故障状态Input与停机状态分开4104远方允许状态Input操作入口的必要条件之一4105瞬时流量m³/hInput测量位置、工况、流向4106正向累计水量m³Input清零、回绕、倍率、表号4110泵启停请求适用的可输出类型与运行反馈分开不自行改反馈值管廊气体浓度、门禁、积水和通风应按各自测点建模。气体通道必须标明气体种类与单位不能将 ppm、%VOL 和 %LEL 混为一种百分数。通道在同一配置库中保持唯一对象组织区域和权限。驱动标签、输入公式和显示格式分别核对把显示单位改成 m³不会把原本的 m³/h 自动转换成累计水量。2. 一小时输量用哪种数据计算同一累计表计在 10:00 为10000.0 m³11:00 为10480.0 m³该小时输量为480.0 m³。累计量差分必须使用同一计量段的有效读数。如果只有瞬时流量历史需按实际时间间隔积分。简化示例前半小时400 m³/h后半小时560 m³/h则输量为400 × 0.5 560 × 0.5 480 m³这是假设两段流量各自恒定的算例。实际采样中应明确采用阶梯保持还是梯形积分、允许的最大间隔以及缺数规则。最后一刻的560 m³/h不能代替整小时560 m³。累计量差分与瞬时量积分的来源、质量和算法应分列保存。差分模块配置及结束时刻归属可参考 能耗月报实战计量单位改为水量不改变时间边界问题。3. 给流量积分加上时间覆盖完整算一遍若水表没有可靠累计量只能从瞬时流量归档估算区间输量先选择插值模型。这里使用零阶保持从一条有效采样开始流量保持到下一条采样或允许保持期限超过期限的部分算未知。该假设适合哪些过程需要按仪表输出与变化速度验证。以下保存为flow_integral.py用 Python 3 即可复现。时间单位为秒流量单位为m³/h结果除以3600完成量纲换算正式适配时用UTC时间戳不使用浏览器打开页面后的计时。importmathdefintegrate(samples,start,end,max_hold):ifendstartormax_hold0:raiseValueError(窗口或允许保持时长错误)rowssorted(samples,keylambdarow:row[0])iflen({row[0]forrowinrows})!len(rows):raiseValueError(重复时间戳须先按来源版本消解)volume,covered0.0,0.0forindex,(stamp,flow,good)inenumerate(rows):next_stamprows[index1][0]ifindex1len(rows)elseend leftmax(start,stamp)rightmin(end,next_stamp,stampmax_hold)ifrightleftorgoodisnotTrueornotmath.isfinite(flow):continuesecondsright-left volumeflow*seconds/3600coveredsecondsreturn{knownVolumeM3:volume,volumeM3:volumeifcoveredend-startelseNone,coveredSeconds:covered,unknownSeconds:end-start-covered,coverage:covered/(end-start)}samples[(0,400.0,True),(1800,560.0,True)]print(integrate(samples,0,3600,max_hold1800))print(integrate(samples,0,3600,max_hold900))第一次输出完整输量480 m³、覆盖3600秒、未知0秒。第二次将允许保持时间改成900秒两个半小时区间各只接受前15分钟已知积分240 m³、覆盖1800秒、未知1800秒、覆盖率50%完整volumeM3为空。这个差别说明同一组数据缺数规则不同可信结论也不同。不能看见240就当作整小时输量更不能直接除以50%放大到480除非项目明确采用估算模型并另外标记估算。演示中1800秒保持仅为手算复现不是生产采样或缺数门槛建议。从归档拿数据时窗口前那一条不能丢查询10:00–11:00时还要按规则取得10:00前最后一条记录。它可能支撑窗口起点也可能已经过期。代码通过max(start, stamp)裁掉窗口外部分再用stampmax_hold限制支持范围避免把09:59的流量一直保持到11:00。适配层先把归档数据转换成(UTC秒数, m³/h数值, 归一化有效标记)并核对源通道、流向、倍率与质量。原始的坏值记录也保留在序列中它会截断上一条值的支持区间若先删除所有坏值再积分会让旧值跨过明确失效时刻。出现相同时间戳、不同值时先根据数据来源和修订版本消解代码直接报错不用“取最大流量”代替业务规则。负流量表示净逆流还是异常按计量方向定义处理本函数保留符号不偷偷取绝对值。这段程序是统计处理示例。Rapid SCADA归档的实际读取接口、分页和分辨率应使用目标版本的服务/API实现不能在报表SQL里假设官方归档就是本文Python列表或某个固定数据库表。让累计表、积分和储池平衡在同一张核对单里相遇同一小时可以保存三组不同证据累计表边界示值差480 m³流量历史按本例积分480 m³、覆盖100%储池平衡由进出水、其他支路和容积变化计算。它们来源不同结果不一致时要定位原因不能相互覆盖到“看起来一致”。对于前述等截面池定义平衡残差进水量-出水量-储量变化。进水300、出水320、储量变化-20时残差300-320-(-20)0 m³。若漏掉一条20 m³排空支路也可能得到20 m³残差所以残差异常先核对计量边界和时间不能直接判定某块表损坏。正式记录至少包含窗口起止UTC、源通道、算法版本、有效/未知秒数、结果单位、读数版本及重算时间。缺数后补时重算同一个窗口并修订结果禁止把新结果再次加进旧小时累计。本地已验证480 m³完整窗口、50%覆盖窗口、跨窗口起点、坏值中断和重复时标拒绝。现场继续用仪表冻结值或已知注入量比对记录采样与误差本例的计算通过不代表实际仪表已经校准。4. 泵已启动不等于管路已经建立输送设备请求经过权限、模式、联锁和命令链到达设备后至少检查运行反馈与约定的过程反馈。若运行接点为1但流量始终不变应记录“运行但过程反馈异常”而不是仅让泵图标转动。哪些反馈可以判定启动成功、等待多久、是否允许重试属于现场设计参数。不要把某个示例流量阈值当成所有泵的统一判据也不要通过向状态通道写1模拟设备成功。平台显示的操作记录应关联操作人/策略来源、请求通道、请求值、时间、驱动结果与后续反馈。查看权限和控制权限在服务端分别校验。5. 液位与流量对账需要测量边界用储池液位变化估算体积时需要实际的液位—容积关系。只有截面积恒定、几何和零点已确定时才可使用ΔV A × Δh。异形池、锥底或多个连通池不能直接套一个面积。例如截面积100 m²的理想等截面水池一小时液位下降0.2 m储量减少20 m³。若同期进水300 m³、出水320 m³在忽略其他支路的示例条件下可以闭合。不能只拿出水量与液位变化相比就判定流量计失准。需要把进出支路、溢流、排空和测量误差的范围列清再做平衡偏差告警。统计结果保留源时间、计量边界和质量不从一张工艺图上的文字临时相减。6. 断链、清零和补传怎么处理情况处理中间失联但两端累计读数可靠、无复位可求整个区间总量中间小时分布仍未知边界读数缺失标记缺数不能无说明地补0计数器下降核对清零、换表或已知模数回绕分段处理后补数据乱序按原始时间写入和去重重算受影响区间当前值更新但报表空查目标归档、时间、状态和计算结果不先改版式对实时画面显示最后一次读数时同时显示失联和数据时间对日报区分实测、估算和缺失。三者不使用同一个绿色“正常”代替。7. 交付前用小样本证明口径核对一小时480 m³的两种算例验证一个跨整点窗口、一次边界缺数和一次累计清零。模拟只读账号发令、命令有回执但无运行反馈、运行正常但过程反馈缺失分别确认权限和记录。水厂、管廊和楼宇可以复用平台的通道与权限机制但它们的工艺和安全逻辑不同。复用应体现在数据链和验收方法上而不是只换一段通道号就宣称完成了行业方案。官网Rapid SCADA 中文站