接手这套项目的时候,业主反复问过一句话:“三台泵为什么不能一起变频?既然有变频器,直接一台变频器拖三台电机,不是更省事?”——做过楼宇供水改造的朋友,大概率都听过类似的问题。答案其实不复杂:一拖三的“拖”,不是同时拖,而是轮流拖、组合拖。一台变频器负责软启动和压力调节,工频回路负责补足大流量,三台泵按运行时间轮换着当主力,这就是恒压供水行业里最经典的一拖三方案。这篇文章以西门子S7-1200为核心控制器,从水力原理、硬件选型、控制策略、TIA Portal程序实现、Modbus-RTU通信到现场调试易踩的坑,把这套系统完整拆一遍。适合正在做或者准备做恒压供水项目的电气工程师、PLC程序员参考,也适合刚入门想搞懂一拖三控制逻辑的朋友。
1. 一拖三设计背后的水力逻辑
1.1 变频调速为什么能稳压
先解决一个基础问题:为什么改变水泵转速就能稳住压力。水泵的Q-H特性曲线是一条随流量增大扬程下降的曲线,管网阻抗曲线则是一条抛物线。用水量变化时,如果泵转速不变,工作点只能沿着原特性曲线跑,压力就会随流量波动。把变频器加进去之后,转速降低,Q-H曲线整体下移,相当于把泵的“性格”改了,可以让工作点始终落在设定压力这条水平线上。
这里还藏着一个节能逻辑。根据泵的相似定律,流量与转速成正比,扬程与转速的平方成正比,轴功率与转速的三次方成正比。频率从50Hz降到40Hz,转速变成80%,功率理论上只有原来的51%。所以恒压供水从来不是为了“调压”,而是为了在变流量工况下不靠阀门硬憋,靠转速匹配负荷。这个原理在选变频器容量、做节能核算的时候,是要给业主讲清楚的。
1.2 一拖三的两种结构,工程上要分清
“一拖三”在市面上有两种理解,方案结构完全不同。
第一种是严格意义上的一拖三:一台变频器,通过三组变频接触器分别驱动任意一台泵,同时每台泵又有独立的工频接触器直接接电网。系统启动时先由变频器拖动一台泵软启动,调节压力;流量不够了,把当前泵切到工频旁路运行,再用变频器启动第二台泵继续调节;流量超出第二台泵能力时,重复前面的动作,把第二台也切到工频,再用变频器启动第三台泵。这样的组合方式,最大供水能力是三台泵的流量总和,变频器始终只带一台泵,容量不需要按三台泵叠加,投资被压下来了。
第二种是简化的一拖三:一台变频器通过接触器切换驱动三台泵,但同一时刻只有一台泵能运行,没有工频旁路。这种结构适合单泵流量就能满足最大需求的场合,切换只是泵与泵之间的轮换,本质是“一备两用”。它的控制简单很多,但供水能力有限,不是本文讨论的重点。
还有一种常见误区是把三台泵同时接到变频器输出端,让变频器同时拖动三台电机。这等于变频器容量要按三台泵的电流总和选,小流量时变频器效率很低,而且切换逻辑会被拖死,现场很少这么干。
| 方案 | 变频器容量 | 供水能力 | 切换复杂度 | 适用场景 |
|---|---|---|---|---|
| 严格一拖三(变频+工频旁路) | 单台泵容量 | 三台泵总和 | 高 | 供水波动大、要求压力稳定的场合 |
| 简化一拖三(纯变频轮换) | 单台泵容量 | 单台泵流量 | 中 | 单泵可满足流量、需要泵轮换的场合 |
| 三台泵同时变频 | 三台泵容量 | 三台泵总和 | 低 | 极少采用,成本和效率不划算 |
1.3 S7-1200适合干这个活
这套系统需要一个可靠的小型PLC来承担压力闭环、泵组状态机、通信和故障保护。S7-1200的优势在于本身集成了PID功能块,支持Modbus-RTU库指令,TIA Portal组态又直观,一台1214C加一块通信板就能搞定。相比老一代200 SMART,1200的数据类型、指令库和调试手段都更现代,后续要接以太网、扩展IO或者挂触摸屏也方便。选它做一拖三的控制器,是性价比和可维护性都比较均衡的选择。
2. 硬件选型与主回路设计
2.1 S7-1200及外围器件选型
硬件这关没过,后面程序写得再漂亮都没用。以三台4kW水泵为例,我习惯这样配:
- PLC:CPU 1214C DC/DC/DC,订货号6ES7214-1AG40-0XB0或后续G2版本,14DI/10DO,本体自带2路模拟量输入(0-10V)。因为压力变送器是4-20mA,本体AI不够直接接,所以加一块SM1231 AI 8x13bit模拟量输入模块,8路足够以后扩展。
- 通信板:CB1241 RS485通信板(6ES7241-1CH30-1XB0),用于和变频器走Modbus-RTU。
- 变频器:选带Modbus-RTU接口和内置PID的通用型,比如ABB ACS510、汇川MD290、台达VFD-M系列,容量按电机额定电流的1.1~1.2倍选。4kW电机额定电流约8.8A,选5.5kW变频器留出余量。
- 接触器:每台泵配两个交流接触器,一个变频接触器(KM1F用于把变频器输出接到1号泵),一个工频接触器(KM1G用于把电网直接接到1号泵),电流按电机额定电流的1.5倍选,建议12A。三台泵共6个接触器。
- 电机保护:每台泵的工频回路必须装热继电器或电机保护断路器,变频器只能保护自己当前带的那台泵,工频运行那台的过载必须靠独立保护元件。
- 压力变送器:二线制4-20mA,量程按泵扬程的1.2倍选,供水系统常见0-1.0MPa或0-1.6MPa,供电用24VDC。
选型时有几个点要特别提醒。第一,接触器的线圈电压要和PLC输出侧匹配,S7-1200输出是DC24V,但大接触器线圈常有AC220V规格,所以PLC输出不能直接带接触器,中间要加DC24V中间继电器,再由继电器的常开触点去控制接触器线圈。第二,中间继电器必须选带续流二极管或者阻容吸收的型号,否则感性负载断电时产生的反电动势会打坏PLC输出点。第三,压力变送器的24V电源要和变频器动力线分开走线,模拟量信号线用屏蔽双绞线,屏蔽层在PLC侧单端接地。
2.2 主回路拓扑与接触器互锁细节
主回路的结构是这样的:三相380V进线分成两路,一路进变频器,变频器输出端接三个变频接触器的上口,三个下口分别去三台电机;另一路经过总断路器和三个工频接触器,直接接到三台电机。也就是说每台电机的接线盒里有两条回路可以接通它:一条是变频器经过KM1F,另一条是电网经过KM1G。
这里有一个绝对的死规矩:同一台泵的变频接触器和工频接触器,任何时候都不能同时闭合。一旦同时闭合,电网会反送电到变频器输出端,直接炸变频器。除了PLC程序里做软互锁,接触器选型时还要用辅助触点做电气互锁,把KM1F的常闭触点串在KM1G的线圈回路里,反之亦然。硬件互锁和软件互锁双层保险,这是我在现场验收时必查的一项。
变频输出侧的接触器通断,也必须在变频器完全停止输出之后进行。变频器运行过程中去拉接触器,触头之间会产生电弧,轻则烧触点,重则损坏变频器IGBT模块。所以控制程序里所有切换动作前,都要先给变频器发停机指令,并等待它的运行反馈信号断开,再操作接触器。这个时序问题在第三章状态机里会重点说。
2.3 压力变送器与取压注意事项
压力变送器的安装位置直接影响PID调节效果。取压点要选在出水干管上水流比较平稳的直管段,远离弯头、阀门和泵出口太近的位置。我见过一个现场把取压点装在泵出口阀门后面不到20cm的地方,阀门稍微一动压力就大幅波动,PID根本没法整定。另外,取压管如果太长或者里面有空气,会造成压力响应滞后,建议取压管尽量短,在最高点加排气阀,定期排一次气。
变送器量程选大不选小,但不能大过头。选0-1.6MPa的量程来做0.5MPa的恒压,4-20mA对应精度会被稀释,PID调节分辨率下降。合理的量程是额定工作压力的1.5~2倍,0.5MPa的工况选0-1.0MPa比较舒服。
3. 控制策略设计
3.1 PID闭环与采样周期选择
压力闭环是整个系统的核心。设定值SP是目标压力,过程值PV来自压力变送器,输出MV是给变频器的频率给定(0~100%对应0~50Hz)。在S7-1200里直接调用PID_Compact块,不要自己写PID算法,它内置了抗积分饱和、输出限幅、手动/自动无扰切换这些功能,泵切换时没有这些特性会非常痛苦。
采样周期的选择很关键。恒压供水是一个大惯性过程,水泵和管网本身有滞后,采样周期太短反而会让PID过于敏感。我实际工程里习惯把采样时间设在500ms到1s之间,太快的采样没有意义,还会放大压力波动噪声。这个采样时间要和PID_Compact的调用周期匹配,比如在OB30循环中断里设500ms调用一次PID,或者直接在OB1里调用但采样时间参数填1s。
初始PID参数可以按经验给:比例增益P从1.0起步,积分时间I给5秒左右,微分D先关闭。现场微调的时候,观察压力曲线是否有等幅振荡:振荡周期短、频率高,一般是P太大;振荡周期长、缓慢漂移,一般是I太小。恒压供水现场参数成套下来,P在1~3、I在3~8秒的范围比较常见。
3.2 泵组循环切换:增泵、减泵的条件
一拖三的控制核心是“什么时候该加泵、什么时候该减泵、加哪台泵、减哪台泵”。条件设置不合理,系统就会频繁启停,接触器磨损快,压力波动也大。
增泵条件我这样设计:当前变频泵频率已经升到48Hz以上,并且持续60秒,压力仍然低于设定值减去死区(比如低于设定值0.02MPa),这时候判定为“一台泵已经顶不住大流量”,需要投入第二台泵工频运行。加一个持续延时,是为了过滤掉瞬间用水高峰造成的假信号,避免短时间内频繁切泵。
减泵条件反过来:当前变频泵频率降到28Hz以下,持续120秒,压力仍然高于设定值加上死区,说明水量需求很小,一台工频泵加一台变频泵过于富裕,这时停掉一台工频泵,让变频泵继续单泵调节。如果压力还在升高,变频频率继续下降,再次满足减泵条件,就再停一台,直到只剩一台泵变频运行。
泵的选择用“运行时间最短优先”原则。每台泵的累计运行时间存在DB里,每次需要增泵或启动首泵时,自动选累计时间最短的那台作为当前变频泵。这是为了三台泵磨损均匀,避免某一台泵常年干活、另外两台躺灰。这套逻辑用SCL写不复杂,但却是业主在使用中感知最明显的点——轮换做得好的系统,维护工单都少很多。
3.3 切换状态机:安全是底线
增泵的切换过程是最容易让新手翻车的地方,顺序做反了轻则压力掉底,重则烧变频器。我把切换过程拆成状态机,每一步都检查反馈条件:
- PID切到手动,输出预置100%(让当前变频泵先满频运行一小段时间)。
- 给变频器发停机指令,等运行反馈变成“停止”。
- 断开当前泵的变频接触器。
- 延时300~500ms,再闭合当前泵的工频接触器——此时这台泵变成工频泵全速运行。
- 选出下一台变频泵,闭合它的变频接触器。
- 启动变频器,PID切回自动,输出从预置值自动接管。
整个切换过程的要点就在于“先停机、再断开、延时后闭合、再启动”。现场烧变频器的案例,十有八九是切换时序没做对,变频器还没完全停止就拉了接触器。减泵的过程相对简单:先停掉工频泵接触器,再让变频泵接管压力即可。
3.4 休眠唤醒的配合
夜间或者零散用水时段,用水量非常小,如果变频器还一直低频运行,既不节能又伤泵。休眠逻辑就是为解决这个场景设计的:当单台泵变频运行,频率低于25Hz,压力正常保持,持续30~60秒,系统停机休眠,靠气压罐维持管网压力。
唤醒条件要单独设置,一般取压力低于设定值的下限(比如低于0.45MPa)延时3秒后重新启动首泵。这里有个经验教训:唤醒压力不能设得太靠近省定压力,否则系统会在休眠唤醒之间反复震荡,压力罐还没补满又停,接触器一天能动作几百次。休眠和唤醒之间至少要有0.1MPa左右的回差。
气压罐在这里的作用是缓冲。罐的容积越大,休眠时间越长,泵的启停次数越少。如果现场没有气压罐,休眠功能要慎用,否则频繁启停比不休眠还折磨设备。
3.5 故障保护与降级运行
这套系统的保护体系要从几个层面铺开:
- 每台泵的电机保护(热继/电机保护断路器)独立动作,任意一台泵过载,系统把该泵标记为故障,从泵组队列里剔除,剩余泵继续工作。
- 变频器故障(过流、过压、过热)通过变频器故障继电器接入PLC数字量输入,一旦动作,立即停止变频运行,并根据现场需求决定是否自动切到工频应急模式。
- 干转保护:如果泵房有液位计或流量开关,低液位/无水信号直接联锁停泵;没有液位计时,可以通过变频器输出电流判断空转状态,空载电流明显低于正常值,持续几秒就报干转。
- 超压保护:压力超过设定值的120%或者量程的95%,立即停机报警。
故障处理的原则是“保设备优先于保供水”,宁可短暂停水,也不能把泵烧了。每个故障状态都要在HMI上有独立指示灯和文字提示,方便现场人员快速定位。
4. S7-1200程序实现
4.1 项目组态与程序框架
在TIA Portal里新建项目后,选CPU型号和固件版本必须和实际硬件一致,不一致会导致编译报警或下载失败。CPU选好以后,在设备组态里插入信号板CB1241 RS485通信板和模拟量模块SM1231,系统会自动分配地址,记下AI模块的通道地址。
程序框架我是这样搭的:
- OB100启动组织块:调用MODBUS_COMM_LOAD初始化RS485端口,给全局变量赋初值。
- OB1主程序:调用泵组控制FB、手动控制逻辑、报警处理。
- OB30循环中断:调用PID_Compact,采样周期500ms或1s。
- FB_PumpControl:泵组状态机、泵轮换逻辑。
- FC_ModbusPoll:Modbus轮询变频器状态和写频率给定。
把泵组逻辑封装成一个FB而不是写在OB1里,好处是后续换成一拖四、一拖六,只需要修改FB内部的数组长度和切换条件,外部接口基本不用动。这套设计我在多个项目里复用,维护成本低很多。
4.2 PID_Compact的调用细节
PID_Compact在TIA里拖进循环中断OB后,要组态几个关键参数:Input选择AI模块的压力通道,经过标定变成工程量;Setpoint是目标压力;Output可以选输出0~100%给Modbus通信写频率,也可以选Output_PER直接输出4-20mA模拟量给变频器。具体用哪种取决于变频器是走Modbus还是走模拟量,我建议能用Modbus就用Modbus,给定精度高而且能同时读回来频率电流,排查问题方便。
PID_Compact的手动/自动切换在切泵时要重点用。切换状态机里,进入切换流程时把PID切到手动,ManualValue给一个预置输出值(比如40%对应20Hz),等新泵启动、压力稳定后再切回自动。这样PID在切换瞬间不会因为压力偏差突然变大而积分冲头,避免了恢复自动后出现大幅度超调。S7-1200的PID_Compact本身内置了手动到自动的无扰切换,我在现场实测下来很稳。
4.3 泵组切换状态机SCL参考
下面给一段精简的状态机SCL,核心是8个状态。完整工程里还需要加上定时器、故障条件和泵队列管理,这里为了说明逻辑做了简化。
CASE Step OF 0: // 待机,检测是否需要启动 IF Pressure < StartLevel AND NOT Fault THEN SelectPump(); // 选出运行时间最短的泵 VFD_Contact[RunPump] := TRUE; // 闭合该泵变频接触器 Step := 1; END_IF; 1: // 等待变频接触器反馈 IF VFD_ContactON[RunPump] THEN VFD_StartCmd := TRUE; // 启动变频器 Step := 2; END_IF; 2: // 正常运行,判断增/减泵 IF Freq >= 48.0 AND Pressure < SP - 0.02 AND AddTimer THEN PID_Auto := FALSE; PID_Manual := 100.0; // 保持满频 VFD_StartCmd := FALSE; // 停变频器 Step := 3; ELSIF Freq <= 28.0 AND Pressure > SP + 0.03 AND ReduceTimer THEN RemovePump(); // 停一台工频泵 Step := 2; ELSIF Freq <= 25.0 AND Pressure > SP AND SleepTimer THEN VFD_StartCmd := FALSE; Step := 6; // 进入休眠 END_IF; 3: // 增泵:等待变频器完全停止 IF NOT VFD_Running THEN VFD_Contact[RunPump] := FALSE; // 断开当前变频接触器 Step := 4; END_IF; 4: // 断开接触器后延时,再合工频接触器 IF ContactOffDelay THEN GF_Contact[RunPump] := TRUE; // 当前泵切到工频 Step := 5; END_IF; 5: // 选下一台泵,闭合其变频接触器并启动 IF GF_ContactON[RunPump] THEN RunPump := SelectNextPump(); VFD_Contact[RunPump] := TRUE; VFD_StartCmd := TRUE; PID_Auto := TRUE; PID_Manual := 45.0; Step := 2; END_IF; 6: // 休眠 IF Pressure < WakeUpLevel THEN Step := 0; END_IF; END_CASE;这里特别要注意Step 3里的VFD_Running是变频器的运行反馈数字量,不是程序里的启动标志。必须等反馈确认变频器真正停止,才能去拉接触器。这个信号如果没接线或者反馈点坏了,宁可报警停机也不要往下走,安全永远有冗余。
4.4 运行时间轮换逻辑
泵轮换需要维护一个运行时间累计表。每台泵一个DINT变量,当泵处于运行状态时累加秒数。选泵逻辑用“最短时间优先”:
RunPump := 1; MinTime := RunTime[1]; FOR i := 2 TO 3 DO IF RunTime[i] < MinTime THEN MinTime := RunTime[i]; RunPump := i; END_IF; END_FOR;泵运行时间表在HMI上显示出来,业主做维护保养计划的时候非常有用。我还会把每次增泵切换的累计次数也记下来,接触器到寿命了提前提醒更换,这算是额外加分项。
5. 变频器Modbus-RTU通信:也聊聊MODBUS_COMM_LOAD
5.1 MODBUS_COMM_LOAD的正确打开方式
S7-1200从V4.0固件开始,Modbus-RTU主站指令就是MODBUS_COMM_LOAD加MODBUS_MASTER这两个,取代了早期方案里需要自己拼报文的做法。很多朋友遇到“s7-1200 g2 modbus_comm_load”的问题,往往是在TIA Portal指令面板里没找到入口,或者不知道初始化端口这个步骤。指令位置在左侧指令树的“通信 > 通信 > 其他 > Modbus(RTU)”,拖拽到OB100时TIA会自动把库函数添加进项目。如果是新建的G2 CPU,固件V4.x以上,指令是通用的。
MODBUS_COMM_LOAD是初始化指令,放在启动OB100里调用一次。关键参数就这么几个:PORT填通信板的硬件标识符,在TIA里点下拉箭头就能选到;BAUD设波特率,要和变频器面板上设置一致,常见9600或19200;PARITY选无校验、奇校验还是偶校验,同样要和变频器一致;TIMEOUT填超时时间,我习惯给1000ms,太短容易被干扰误报错。调用时REQ给TRUE即可,这条指令只执行一遍,不是周期执行的。
如果不做初始化直接调用MODBUS_MASTER,程序会报错或者一直超时。这是新手最容易犯的错——以为主站指令本身具备初始化端口功能,其实MODBUS_COMM_LOAD负责“把端口配置成Modbus从站/主站的工作模式”,MODBUS_MASTER只是在这个端口上发起一次主站请求。
5.2 轮询逻辑和频率给定
Modbus轮询我用一个1秒的时钟脉冲触发,每个上升沿调用一次MODBUS_MASTER。轮询任务一般包括:读变频器运行频率、读输出电流、读故障状态、写频率给定。S7-1200同一时间只能有一个Modbus主站请求在执行,所以需要做一个简单的轮询队列,把不同的读写请求排好队,不要在同一周期同时触发多个MODBUS_MASTER。
写频率给定是这个系统里最重要的通信任务。PID_Compact的Output是0~100%的REAL数据,先映射到0到最大频率(比如50Hz),再乘以变频器手册规定的精度系数。很多变频器的频率寄存器精度是0.01Hz,写2700就代表27.00Hz,有的变频器是0.1Hz,这里必须看手册,写错了现场表现就是“频率对不上”。
MODBUS_MASTER的DATA_ADDR填的是Modbus协议地址,从0开始计数。手册里如果说频率给定额定地址是40001,那DATA_ADDR就填0;如果直接给寄存器地址0x2000,就直接填8192。这里存在一个“寄存器编号和协议地址”的偏移问题,容易混淆,我的建议是拿着串口调试工具在PC上先试通变频器,确认地址和数据类型,再往PLC里填。
5.3 通信排查思路
现场通信故障排查,按这个顺序做最快:
- 确认硬件接线。RS485的A接A、B接B,别接反;屏蔽层单端接地;距离长时两端加120欧终端电阻。
- 确认参数一致。波特率、校验位、站号,PLC侧和变频器侧逐项核对。
- 用PC串口调试工具直连变频器,手动读写几个寄存器,验证变频器Modbus从站功能本身是好的。
- 查PLC程序,确认MODBUS_COMM_LOAD执行成功的信息(DONE信号),确认MODBUS_MASTER每次REQ之间有时间间隔。
- 看错误代码。S7-1200 Modbus指令的错误代码在ERROR和STATUS引脚里,查手册对应的错误码,能快速定位是端口未初始化、超时、还是从站无响应。
字节序也是个隐蔽的坑。很多变频器寄存器默认是大端模式,PLC写入后如果出现频率乱跳或者显示值不对,可以检查通信数据的word字节顺序是否需要交换,这个设置一般在变频器通信参数里,叫“字序”或“Word Order”。
6. 现场调试实录
6.1 压力振荡问题排查
恒压供水最常见的调试问题就是压力振荡。遇到这种问题,我会按照“先机械、后控制”的顺序排查。先看取压点有没有装在湍流区,取压口有没有进气;再看变频器加减速时间是否太慢,加减速时间过长会造成调节滞后,让PID误以为输出不够而持续加码;最后才动PID参数。
PID参数整定我是这样做的:先把P和I调小,让系统在手动模式下给定一个固定频率,观察压力是否平稳;然后切自动,P从1.0开始加,每次加0.3左右,观察曲线,发现等幅振荡的频率快了,往回退一点;P调稳后再慢慢减小积分时间,增强消除静差的能力。整个过程配合TIA的Trace功能看压力趋势,比盯触摸屏上的数字直观得多。
6.2 切换瞬间出现压力掉底
增泵切换的瞬间,如果压力突然大幅下降,首先要检查切泵时序里“停变频器”和“合工频接触器”之间的时间。从停变频器到工频接触器闭合,这段时间系统里只有水流的惯性在维持压力,一旦时间太长,压力就会往下掉。我的做法是把状态机每步的延时都做成HMI可调参数,现场根据压力表现微调,一般断开变频接触器后的延时设在300~500ms比较合适。
还有一个容易被忽略的因素:PID在切泵瞬间的输出预置值。如果预置输出太低,新泵启动后频率加得太慢,压力回升也就慢。我习惯在切换前把PID手动输出位预置到100%,让老泵满频运行,切换完成后新泵从45%左右接管,再交给PID自动细调。这套组合在几个项目里效果都不错。
6.3 断线与超压的双重保护
模拟量断线检测不能省。4-20mA信号正常时,S7-1200的AI通道数值在0~27648之间,4mA大约对应5530。一旦变送器断线,信号电流变成0,通道数值接近0。程序里要做一个判断:AI数值小于1000(即电流低于1mA左右)就判定压力传感器故障,立刻把PID切到手动、输出频率降到0、报警停机,防止PID因为压力“消失”而持续提高频率,把系统憋到超压。
超压保护独立于PID之外,做一个硬条件:压力大于设定值的120%或者超过量程的95%,直接停变频器并断开接触器,不经过PID。这个保护要放在程序的最顶层,任何状态下都必须生效。
6.4 给调试留的后门
我在每个项目的HMI上都留了一个调试页面:可以手动模拟压力设定值,可以强制指定某台泵作为首启泵,可以单步触发增泵/减泵切换。这套“后门”在单机调试和现场问题复现时帮了大忙,尤其是业主反馈“偶尔掉压”“偶尔频繁启停”这类偶发问题,用调试页面手动触发一次切换,很快能复现问题。
调试模式一定要设置密码权限,正常运行时不能让操作工乱动,否则容易造成误操作。这个页面平时隐藏,只有工程师权限能打开。
最后再分享一个习惯:这套泵组控制逻辑我始终坚持封装成独立FB,泵的数量、功率、压力设定值全部参数化。做完一个一拖三项目,下次改成一拖四、一拖六的时候,基本就是复制整个FB再扩展数组的事。如果你正准备做这类恒压供水项目,强烈建议一开始就按这个思路设计程序框架,别把逻辑全部散在OB1里,后面扩展和排查会省太多事。