news 2026/4/13 18:05:47

恒压供水一拖五辅泵程序,自由组泵配置西门子硬件,手机电脑远程控制,成熟应用于实际工程的技术方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
恒压供水一拖五辅泵程序,自由组泵配置西门子硬件,手机电脑远程控制,成熟应用于实际工程的技术方案

恒压供水一拖五+辅泵程序,可自由组泵一拖五以下都可以用,己用于实际工程。 直接就可以使用,硬件配置:西门子smart+AM03+海为B7S物联网屏,可手机电脑远程控制,有完整的程序图纸

最近在工业自动化项目里搞了个恒压供水系统,主泵一拖五带辅泵的配置,算是把西门子smart PLC玩出花了。这套方案已经在三个小区供水项目里稳定运行半年多,今天跟大家唠唠实现思路,关键代码直接扒出来看。

先说硬件组合,这套系统主打的就是经济实惠:

  • 西门子smart SR40做主控(别问为啥不用1200,甲方预算就爱这个)
  • AM03扩展模块接压力变送器+变频器
  • 海为B7S物联网屏当操作面板
  • 辅泵单独用了个国产变频器(别问牌子,问就是性价比)

重点看泵组切换逻辑。程序里用了个骚操作——动态优先级队列,这是保证五台主泵均匀磨损的关键:

// 泵状态结构体 TYPE Pump_Status : STRUCT RunHours : REAL; // 累计运行小时 Fault : BOOL; // 故障状态 Priority : INT; // 动态优先级 END_STRUCT END_TYPE // 队列排序函数 FUNCTION SortPumps : ARRAY[1..5] OF INT VAR_INPUT Pumps : ARRAY[1..5] OF Pump_Status; END_VAR VAR_TEMP i,j : INT; temp : INT; END_VAR // 冒泡排序实现动态优先级调整 FOR i := 1 TO 4 DO FOR j := i+1 TO 5 DO IF (Pumps[j].Priority < Pumps[i].Priority) AND NOT Pumps[j].Fault THEN temp := Pumps[i].Priority; Pumps[i].Priority := Pumps[j].Priority; Pumps[j].Priority := temp; END_IF END_FOR END_FOR

这段代码实现了泵组的智能轮换。每次启动优先选择运行时间最短的泵,运行时持续更新各泵的Priority值。实际调试中发现,把冒泡排序改成插入排序能减少30%的运算时间,不过smart的CPU扛得住就懒得改了。

压力闭环控制是另一个核心,直接上PID代码:

// 简化版PID功能块调用 PID_Compact_DB( COM_RST := , MANUAL := , CYCLIC := TRUE, SP_INT := 3.0, // 3公斤目标压力 PV_IN := Pressure_AI, // 压力反馈 GAIN := 1.2, // 这三个参数调了三天! TI := "T#30s", TD := "T#5s", LMN := PID_Output); // 输出给变频器

重点说下参数整定经验:小区用水高峰时压力波动大,把微分时间拉长能有效抑制震荡,但TI不能超过40秒,否则响应太慢会被业主投诉。现场调试时边调参数边观察压力曲线,最后发现把增益设为1.2时,既能快速响应又不会频繁启停泵。

物联网功能是甲方爸爸的最爱,海为屏的远程监控代码有点意思:

// 微信推送报警功能 IF Pump_Fault OR Pressure_Low_Alarm THEN HTTP_GET(URL:='http://wxapi.com/alert?msg=泵组异常'); SMS_Send(Text:='设备ID123告警', Number:='13800138000'); END_IF // 远程控制安全验证 IF Web_Command.En THEN CASE Web_Command.CMD OF 1: StartPump(Web_Command.PumpNo); // 启动指定泵 2: StopAll; // 急停 ELSE AddLog('非法指令'); END_CASE // 操作记录必须留痕 WriteDB_Log(Time(), Web_User, Web_CMD); END_IF

这里埋了个坑:早期版本没加操作日志,结果物业乱按手机APP导致系统宕机。后来强制所有远程操作必须记录操作时间和账号,还加了二级密码验证。现在用RSA加密传输指令,虽然smart处理起来有点吃力,但安全第一嘛。

辅泵控制逻辑反而更折腾,这货要在主泵全故障时顶上,平时还要当消防备胎。程序里用了状态机实现:

CASE StandbyPump_State OF 0: // 待机状态 IF MainPump_Fault_ALL THEN StandbyPump_State := 10; ELSIF Fire_Signal THEN StandbyPump_State := 20; END_IF 10: // 应急供水模式 Start_Standby(FullSpeed); IF NOT MainPump_Fault_ALL THEN StandbyPump_State := 0; END_IF 20: // 消防模式 Start_Standby(BoostSpeed); Reset_Fire_Signal; // 等消防信号解除 END_CASE

现场测试时发现辅泵启动瞬间会导致压力突变,后来在启动指令后加了5秒软启动延时才好。图纸里变频器接线也有讲究,主泵用RS485并联,辅泵单独走硬线控制——别问为什么,问就是被干扰搞怕过。

这套系统最爽的是扩展性,要改成一拖三或者加个什么紫外线消毒功能,直接在程序架构里插模块就行。最近又在折腾把数据对接物业ERP系统,海为屏的Python脚本功能倒是意外的好用。有需要全套图纸的老铁可以私信,记得自带U盘,甲方不许发网盘...

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 1:17:30

GitHub项目贡献第一步:用Miniconda-Python3.9复现本地bug

GitHub项目贡献第一步&#xff1a;用Miniconda-Python3.9复现本地bug 在开源社区活跃的开发者们一定都遇到过这样的场景&#xff1a;你在GitHub上发现一个感兴趣的项目&#xff0c;想帮忙修复一个标记为“good first issue”的Bug&#xff0c;兴冲冲地克隆代码、安装依赖、运行…

作者头像 李华
网站建设 2026/4/12 11:58:34

港澳物业管理痛点剖析:如何破解缺编罚则与劳动力短缺?

一、 履约之困&#xff1a;红线下的“赔付陷阱” 在港澳地区的物业合约中&#xff0c;往往存在极度严苛的“编制红线”条款。对于甲方而言&#xff0c;人数即服务质量的保障&#xff1b;对于物管公司而言&#xff0c;一旦出现缺编&#xff0c;面临的不仅是品牌受损&#xff0c;…

作者头像 李华
网站建设 2026/4/12 14:33:14

【网络安全】红蓝对抗之关于红队全方位解析

提到红队&#xff0c;似乎行内都会默认为红队就是攻击队&#xff0c;而蓝队则是防守队&#xff0c;大部分文章也会把红队解释为是一种全范围的多层攻击模拟&#xff0c;我们平常沟通确实也会这样说&#xff0c;而事实上&#xff0c;到底什么才是红队&#xff1f; 红队一般是以参…

作者头像 李华
网站建设 2026/4/8 22:21:19

面试必备之乐观锁与悲观锁

如果将悲观锁&#xff08;Pessimistic Lock&#xff09;和乐观锁&#xff08;PessimisticLock 或 OptimisticLock&#xff09;对应到现实生活中来。悲观锁有点像是一位比较悲观&#xff08;也可以说是未雨绸缪&#xff09;的人&#xff0c;总是会假设最坏的情况&#xff0c;避免…

作者头像 李华
网站建设 2026/4/4 1:32:07

PyTorch安装后cannot find CUDA:Miniconda-Python3.9修复PATH变量

PyTorch安装后cannot find CUDA&#xff1a;Miniconda-Python3.9修复PATH变量 在搭建深度学习开发环境时&#xff0c;你是否曾遇到过这样的场景&#xff1a;明明已经通过 Miniconda 安装了支持 CUDA 的 PyTorch&#xff0c;conda list 里也清楚地列着 pytorch-cuda11.8&#x…

作者头像 李华