搞恒压供水这行的人都知道,S7-200这个老将虽然已经被S7-200 SMART和S7-1200逐渐替代,但在存量项目里依然随处可见,尤其是中小型楼宇、小区、工厂的供水系统。去年接了个三泵恒压供水的改造单子,甲方明确要求用S7-200,因为柜子里那台老CPU224XP还能用,再换新平台成本就上去了。想着这活儿典型的不能再典型,就把整个"手搓"过程完整记录下来,顺便把这一路踩过的坑、调过的参、烧过的保险都捋一遍。写这篇东西的主要目的,是给刚入行PLC或者打算自己捣鼓供水项目的朋友一个能直接抄作业的参考,同时把一些文档里不会写的工程细节讲透。
1. 项目整体设计与方案选型
1.1 恒压供水系统到底在解决什么问题
先说说恒压供水本身。家里水龙头打开,水流忽大忽小,洗澡时水温忽冷忽热,这多半就是管网压力不稳造成的。传统供水方式是水泵工频运行,靠高位水箱或者水塔来调节压力,缺点是占地面积大、水质容易二次污染、能耗还高。恒压供水的思路是用水泵直接给管网增压,通过压力变送器实时检测管网压力,PLC读到这个压力值后和设定压力做比较,自动调节水泵电机的转速,让管网压力始终稳定在设定值附近。用户用水量大了,变频器就升频加快水泵转速;用水量小了,变频器就降频降低转速。水压恒定,省电省水,这就是它的核心价值。
这次项目是三泵配置,简单说就是三台水泵配合一台变频器工作。为什么要三台泵而不是一台大泵呢?一是因为单台大泵在低流量工况下效率太低,大马拉小车,浪费电;二是设备运行需要有备用冗余,一台泵坏了还有第二台、第三台顶上,不至于一停水整个系统瘫痪。三泵系统的典型工作模式是"一变两工"或者"一变一工一备",根据管网压力和流量需求自动切换泵组组合。
1.2 为什么选S7-200而不是新款PLC
说实话,S7-200在这个项目里不是最优选,但却是最合适的选择。首先,甲方柜子里已经有一个闲置的CPU224XP,用它是零成本。其次,S7-200的PID指令、模拟量处理能力、定时器和计数器资源,应付三泵恒压供水这种规模的逻辑绰绰有余。第三,S7-200的编程软件STEP 7-Micro/WIN虽然界面老旧,但稳定成熟,梯形图编程方式老工程师都能上手,维护成本低。
不过S7-200也确实有让人头疼的地方。它的模拟量模块选择少,扩展模块插槽有限;程序存储空间只有8KB,写复杂逻辑时要精打细算;通信接口的协议支持也比较基础,虽然支持Modbus RTU(加库函数),但调试起来不如S7-1200的PROFINET省心。如果你是新项目、新柜子、预算充裕,我建议直接上S7-200 SMART或者S7-1200,平台新、功能强、性价比也高。但如果和我这次一样是利旧改造或者预算紧张,S7-200完全够用,关键是把程序结构和硬件配置吃透。
1.3 三泵方案的具体控制思路
这个系统的控制思路分三个层次。
第一层是单泵变频恒压。用压力变送器采集管网压力(4-20mA信号),PLC读取模拟量通道换算成实际压力值,和设定压力对比,通过PID指令输出0-10V或4-20mA信号给变频器,变频器调节水泵电机转速。这是最基础的闭环控制。
第二层是自动加减泵。当一台泵变频运行达到频率上限(比如50Hz)仍然达不到设定压力,说明用水量超过单台泵的能力,这时PLC发指令把当前泵切到工频运行,同时启动第二台泵变频运行。用两台泵同时供水,压力就能满足。反之,当两台泵运行、变频泵频率降到下限(比如30Hz)且管网压力持续偏高,说明用水量减少,PLC停掉工频泵,让变频泵单独运行。
第三层是泵组轮换和故障切换。三台泵交替作为主变泵、辅泵、备用泵,保证每台泵的工作时间均衡,避免某一台泵长期运行而另外两台泵长期闲置,这在机械密封和轴承寿命上非常重要。故障切换是在当前运行的泵发生故障时,PLC自动把备用泵投进去,保证供水不中断。
这些逻辑层层递进,后面我会一节一节把实现细节拆开讲。
2. 硬件选型与电气设计
2.1 主要硬件清单
这个系统我不推荐一上来就画巨复杂的原理图。先列清单,搞清楚每个设备干什么,电气设计就有脉络了。
| 设备 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| PLC主模块 | 西门子S7-200 CPU224XP CN | 1台 | 自带2路模拟量输入、1路模拟量输出 |
| 模拟量扩展模块 | EM231(4路AI) | 1块 | 备用,用于压力、液位、流量采集 |
| 变频器 | 7.5kW,支持端子控制和模拟量调速 | 1台 | 一拖三方案,需支持工频/变频切换 |
| 压力变送器 | 0-1.6MPa,4-20mA输出,二线制 | 1只 | 安装在出水管网总管上 |
| 水泵电机 | 7.5kW三相异步电机 | 3台 | 立式离心泵或管道泵 |
| 工频接触器 | 额定电流25A,线圈220VAC | 3只 | 控制工频回路 |
| 变频接触器 | 额定电流25A,线圈220VAC | 3只 | 控制变频回路 |
| 热继电器 | 整定电流范围10-18A | 3只 | 工频运行时过载保护 |
| 中间继电器 | 24VDC线圈型 | 若干 | PLC输出驱动接触器用 |
| 断路器 | D型曲线,20A及32A/40A | 5-6只 | 分配电源回路 |
| 开关电源 | 24VDC 5A | 1只 | PLC输入及烟感、指示灯供电 |
| 触摸屏 | 7寸,支持Modbus RTU从站 | 1台 | 可选,用于参数设置和状态显示 |
CPU224XP自带了一路模拟量输出(0-10V),可以直接控制变频器的频率给定。压力变送器信号接自带的AIW0。模拟量扩展模块我加了一块,主要是为了以后接液位传感器、流量计或者出水压力表预留通道,实际这次调试只用了AIW0,EM231属于冗余备份,但在系统扩展性上很有价值。
2.2 主电路接线设计与电流计算
主电路这块最容易出问题,我首先把电流算明白。7.5kW的三相异步电机,额定电流大约是I = P / (√3 × U × cosφ × η)。取电压380V、功率因数0.85、效率0.88,那么额定电流约等于7500 / (1.732 × 380 × 0.85 × 0.88) ≈ 15.3A。考虑启动冲击和工频直接启动时的瞬间电流(可以达到额定电流6-7倍),工频接触器和断路器都要留足余量。我选25A接触器和D型32A断路器,正好覆盖这个电流等级。
主电路结构如下:总进线经过总断路器QF0分成两路,一路接变频器输入端子,另一路作为工频电源母排。每台水泵电机有两个供电路径,一路从变频器输出经过本泵的变频接触器KM1F、KM2F、KM3F,另一路从工频母排经过相应的工频接触器KM1W、KM2W、KM3W。两个接触器之间必须有电气互锁和程序互锁,防止同时吸合导致变频器输出和工频电源短路,这是一个绝对不能省的保护。
泵的实际对应关系要记清楚,比如KM1F对应泵1变频、KM1W对应泵1工频。热继电器串在工频回路里,变频回路靠变频器自己做过载保护,不重复加热继电器。变频器输出端不能接接触器来控制启停,只能在变频器输入端或者控制端子上处理,因为变频器输出端直接断开会产生过电压冲击,严重时烧模块。正确做法是用变频器内部的继电器输出或者外部中间继电器的干接点来控制变频器的启动停止,频率信号用模拟量端子送入。
2.3 控制电路与PLC I/O分配
控制电路我用的是220VAC控制回路和24VDC信号回路的混合方案。PLC的数字量输入点接的是24VDC,中间继电器线圈也是24VDC,由开关电源供电。接触器线圈是220VAC,由中间继电器的常开触点驱动。PLC输出到中间继电器,中间继电器再驱动接触器,这样可以避免接触器线圈的感性冲击直接打坏PLC输出点。
S7-200 CPU224XP的输入输出分配我列在下面,直接照着接线就行:
| PLC地址 | 功能 | 说明 |
|---|---|---|
| I0.0 | 手动/自动切换 | 万能转换开关 |
| I0.1 | 一号泵故障信号 | 热继电器常闭触点 |
| I0.2 | 二号泵故障信号 | 热继电器常闭触点 |
| I0.3 | 三号泵故障信号 | 热继电器常闭触点 |
| I0.4 | 变频器故障信号 | 接变频器故障继电器输出 |
| I0.5 | 管网低压报警输入 | 电接点压力表下限触点 |
| I1.0 | 启动按钮 | 自动模式启动 |
| I1.1 | 停止按钮 | 自动模式停止 |
| Q0.0 | 泵1变频接触器KM1F | 中间继电器KA1驱动 |
| Q0.1 | 泵1工频接触器KM1W | 中间继电器KA2驱动 |
| Q0.2 | 泵2变频接触器KM2F | 中间继电器KA3驱动 |
| Q0.3 | 泵2工频接触器KM2W | 中间继电器KA4驱动 |
| Q0.4 | 泵3变频接触器KM3F | 中间继电器KA5驱动 |
| Q0.5 | 泵3工频接触器KM3W | 中间继电器KA6驱动 |
| Q0.6 | 变频器启动信号 | 中间继电器常开触点控制 |
| Q0.7 | 报警输出 | 蜂鸣器/指示灯 |
| AIW0 | 管网压力变送器信号 | 4-20mA,0-1.6MPa量程 |
| AQW0 | 变频器频率给定 | 0-10V,对应0-50Hz |
这里面Q0.6接的是变频器的数字量启动端子。有些变频器支持三线式控制或者用多功能端子,做一个"启动指令+频率给定"的组合,具体看变频器说明书。频率给定走AQW0输出0-10V,接到变频器的模拟量输入AI1,对应0-50Hz,如果输出频率不想超过50Hz,可以在变频器参数里限制最高频率。
3. S7-200程序编写与PID控制
3.1 程序框架与功能规划
S7-200的程序虽然不像大型PLC那样分OB、FB、FC,但也可以用主程序+子程序+中断程序的结构来组织。我把整个程序分成三个子程序:PID_Control(PID控制)、Pump_Logic(加减泵与轮换逻辑)、Alarm_Process(故障与报警处理)。主程序里就是调用这些子程序,加上一些启动初始化条件判断。
这样分模块的好处是调试时能单独查一个问题,不用在一大坨梯形图里大海捞针。S7-200的子程序调用是局部变量传递,全局变量用V区。我建议把关键参数定在V区并留出触摸屏读写地址,比如设定压力VD200,PID参数VD300-VD320,加减泵延时VD400等,调试和用户后期调整都很方便。
3.2 PID回路配置与参数换算
恒压供水控制的核心就是PID。PID控制可以理解为数学化的经验控制:比例项根据当前偏差大小输出,积分项消除稳态误差,微分项预测偏差变化趋势。在供水这种大惯性、纯滞后明显的系统里,比例和积分是主角,微分作用很弱,常常设为零甚至关闭,因为压力反馈本身波动就大,微分项会放大噪声。
S7-200的PID指令在向导里设置,回路编号用PID0。关键参数有:
- 采样时间:我设置的是0.5秒,也就是每500ms执行一次PID计算。供水管网压力变化比较慢,采样太快反而容易输出震荡。
- 给定值SP:设定压力值除以变送器量程范围的比例值。比如量程0-1.6MPa,设定压力0.5MPa,那SP = 0.5 / 1.6 = 0.3125,写成实数0.3125填入VD204。
- 反馈值PV:把AIW0的模拟量读数换算成0-1.0之间的实数。4-20mA对应AIW0=6400-32000(S7-200的模拟量转换是0-20mA对应0-32000,4mA时读到6400),实际压力0-1.6MPa对应0.0-1.0的比例,所以PV = (AIW0 - 6400) / (32000 - 6400),这个结果本身就是0-1.0的小数,可以直接给PID用。
- 输出值Output:PID计算出的0-1.0的小数,乘32000再写入AQW0,转换成0-10V给变频器。或者直接设定模拟量输出范围为0-10V,将0-1.0映射到0-32000。
S7-200的PID指令输出可以直接通过向导配置映射到模拟量输出,省去手写换算的麻烦。建议打开向导中"使用模拟量输出"选项,配置完的状态字会自动关联到AQW0。
整个转化逻辑可以用梯形图实现,先读AIW0,做浮点减法、除法,得到标准化反馈。然后PID计算,再把输出标准化值写到AQW0。我在实际项目里用向导做完PID块之后,还会手动在外面加一层"输出限幅"逻辑,防止PID输出异常时变频器拿到超范围的频率指令。
3.3 三泵切换与轮换逻辑
这是程序里最费心思的部分。泵的切换逻辑说白了就两句话:压力不够就加泵,压力太高就减泵。但实现起来要注意滞环和延时。
先定义几个关键的频率阈值。变频泵运行频率达到48Hz(上限附近)且压力仍然低于设定值0.02MPa,持续30秒,就触发加泵动作。反之,双泵运行时变频泵频率降到32Hz以下,且压力高于设定值0.02MPa,持续30秒,就触发减泵动作。
为什么设置滞环和延时?如果不加延时,管网压力出现一个瞬间波动就可能引起反复加减泵,导致接触器频繁吸合,电机频繁启停,非常伤设备。30秒的延时就是让系统确认"确实长期压力不够"才动作,过滤掉瞬时扰动。滞环则是让加泵和减泵的动作点不重叠,避免在临界点附近来回切换。
加泵动作的第一步不是直接启动第二台泵,而是先把当前变频泵切换到工频。这个切换过程要小心:先断开变频泵的变频接触器,等一秒钟(断电延时),再合上它的工频接触器,然后再启动第二台泵变频运行。切换瞬间第一台泵会有一两秒的断电,但电机转动惯性还在,不会完全停下来就重新带电,对系统没什么压力。关键是顺序不能错,绝不能变频接触器和工频接触器同时闭合。
减泵时正好相反,先停第二台泵的变频输出,把当前变频泵频率降到下限,然后断开工频泵的工频接触器。这样系统压力会有一个短暂的下降,但很快PID会自动把频率提上去补偿。
轮换逻辑我用了两个累计运行时间定时器来记录每台泵的总运行时间,每次需要加泵时优先选择累计运行时间最短的那台泵作为变频泵,每次减泵时优先停掉累计运行时间最长的工频泵。这样可以保证三台泵的使用率平均。轮换周期一般是切换3-5次后轮换一次,如果每次加减泵都换泵,接触器动作太频繁,反而不划算。
3.4 故障保护与手动模式
故障保护逻辑分为三个层面。第一层面是过载保护,热继电器常闭触点串在控制回路中,热继电器动作后对应泵的工频接触器直接断电,同时输入点I0.1-I0.3信号送给PLC,PLC检测到故障信号后把对应的泵在程序里标记为"故障泵",不再参与轮换和自动加泵。
第二层面是变频器故障保护。I0.4接变频器的故障继电器输出,一旦变频器报警,PLC立即停掉所有变频泵,保留工频运行的泵继续供水,同时输出Q0.7报警。程序里必须有一个专门处理变频器故障的子程序,因为在"一变多工"模式下,变频器一旦挂掉,整个闭环控制就没了,不能让它带病工作。
第三层面是超压和低压保护。压力变送器读数高于1.2倍设定压力时,PLC强制把所有泵都停下来并报警,这个属于超压停机保护。管网压力长期低于低压报警值(比如0.1倍量程)时,说明可能发生管网爆管或者水源缺水,需要停机保护水泵防止空转烧毁叶轮。
手动模式在调试和维护时必不可少。万能转换开关切到手动档时,PLC的自动程序全部屏蔽,操作人员在柜门面板上可以直接按按钮启动/停止每一台泵的变频或工频运行。注意手动模式也要保留接触器互锁和热继电器保护,万一调试时接错线,至少不会烧设备。
4. 实操过程与PID参数整定
4.1 接线与上电检查步骤
实操作业先从接线开始。我按以下顺序走了一遍:
首先断掉总电源,确认无电后按原理图接线,先接主电路(断路器、接触器、变频器、电机),再接控制电路(中间继电器、接触器线圈、变频器控制端子),最后接PLC I/O和模拟量信号线。模拟量信号线我用了屏蔽双绞线,屏蔽层单端接地(在PLC侧接地),这个细节对压力信号稳定影响很大。
上电前用万用表电阻档量一下各处有没有短路,包括相间短路、对地短路、接触器互锁通断是否正确。这一步不能省,我曾经遇到过一台变频器上电直接跳闸,查了半天发现是变频器输出端和工频回路线缆破皮对地短路,要是上电前仔细量一遍就不会烧前级保险了。
确认无误后,先合控制电源,给PLC通电下载程序。下载完先只测试点位,不接泵负载,手动吸合每个接触器,确认PLC输出点和中间继电器、接触器一一对应。这个叫"空载点动",把所有点位都验一遍再过。
4.2 变频器参数设置
变频器参数设置是整个调试的基础。我用的变频器是常见的国产7.5kW三相变频器,需要设置的核心参数如下:
- 运行方式选择:端子控制(外部端子启动/停止)
- 频率设定方式:模拟量AI输入(外部0-10V电压或4-20mA电流)
- 最高频率:50Hz,上限频率50Hz
- 加速时间:10秒,减速时间:10秒(供水系统惯性大,加减速时间不宜太短,否则容易过流/过压报警)
- 电机额定参数:380V / 15.3A / 1460rpm / 50Hz
- 过载保护电流值:15.5A-16A
- 启动方式:直接启动(不搞S曲线起步,供水负载不大,直接启动即可)
- 停车方式:自由停车(不是减速停车,因为变频器输出端要切换接触器,减速停车容易产生过电压)
- 转差补偿和自动转矩提升:开启中等强度,低频段力距足一些,对启动有帮助
特别强调停车方式设成自由停车,这在"一变多工"系统里是硬性要求。因为当变频泵要切工频时,如果变频器还在输出,先断变频接触器就会打出电弧,轻则拉弧烧触点,重则损坏变频器模块。自由停车模式在收到停车指令后立即封锁输出,接触器断开时基本无电流。
4.3 PID参数整定过程
PID参数整定是这次调试里最花时间的环节。我先说结论:供水系统的PID参数一般比例增益在1-5之间,积分时间在2-10秒之间,微分时间铃为零。整定还是要按步骤来,我用的方法是先纯比例再加积分。
第一步,把积分时间设成最大,微分关掉,比例增益从0.5开始加。系统给定0.5MPa,观察压力变化。如果压力波动不大且偏稳定,小幅加大比例增益;如果看到压力是等幅振荡,比例增益大了,往回退一点。我最后纯比例整定时比例增益定在1.8,压力曲线有小余差(稳态偏差),但基本稳定。
第二步,加入积分作用消除余差。积分时间先设5秒,观察压力是否过冲。积分时间越短积分作用越强,如果过冲明显就增大积分时间。我试了几组:积分时间3秒时系统过冲0.03MPa然后拉回来,有点太猛;积分时间10秒时响应有点慢,压力回落时间偏长。最后折中取5秒,压力波动控制在±0.01MPa以内,效果不错。
第三步,验证动态响应。人为打开一个放水阀模拟用水量突然增加,观察系统压力从跌落0.06MPa到恢复设定值的时间。我记录的恢复时间是8秒,没有明显的振荡和超调,PID参数算合格。
| PID参数 | 初始尝试值 | 最终取值 |
|---|---|---|
| 比例增益 | 0.5起调 | 1.8 |
| 积分时间 | 5秒 | 5秒 |
| 微分时间 | 0 | 0 |
| 采样时间 | 0.5秒 | 0.5秒 |
4.4 加减泵功能联动调试
PID稳定后,开始做加减泵联动测试。我分几步验证:
第一次测试是加泵。用放水阀把流量拉到很大,单台泵频率升到48Hz后压力还是在0.45MPa左右上不去。观察了40秒,系统触发加泵逻辑,当前泵切工频,第二台泵变频启动。切换时压力有大概0.04MPa的短暂跌落,第二台泵启动后PID升频,大约20秒压力回到0.50MPa。这时变频泵频率降到了约36Hz,系统进入双泵稳态。
第二次测试是减泵。慢慢关小放水阀,双泵运行时变频泵频率降到30Hz低于设定值32Hz且压力持续偏高,30秒延时后系统减泵。减泵瞬间由于工频泵电缆被断开,压力从0.51MPa跌到0.48MPa,但单台泵随即提速补压,大约15秒恢复到0.50MPa。第一次减泵测试的压力跌落有点大,我把减速泵的停泵顺序做了调整,先把工频泵的出口阀关小一点(由电动阀配合)再断接触器,后续实测压力跌落只有不到0.02MPa。
轮换逻辑我是靠模拟故障来验证的。手动在触摸屏上把1号泵标记为故障,系统自动把下一轮变频泵切到2号泵,1号泵不再参与加泵,整个过程没影响供水压力。故障切换的检测和处理逻辑在S7-200里用了两个定时器,一个检测热继电器信号,一个确认延时,确认后立即把故障泵踢出轮换队列。
5. 常见问题与排障实录
5.1 模拟量压力信号跳变
调试第一天就遇到压力信号跳变的问题,AIW0读数在正常值附近上下乱跳,最大偏差超过0.02MPa,导致PID输出跟着抖,变频器频率忽高忽低。排查过程是这样的:
先怀疑压力变送器本体故障,用万用表串联测电流,4-20mA信号基本稳定,说明变送器没问题。再用示波器看PLC的AIW通道输入端电压,发现有很多高频毛刺。顺着线路检查,发现压力变送器的信号线缆和变频器输出电缆走在了同一个线槽里,间距只有不到5厘米。变频器输出是高频PWM波形,对模拟量信号的干扰非常严重。
解决办法是把两路线缆分开走,距离拉开到30厘米以上,压力信号线换屏蔽双绞线,屏蔽层在PLC侧接地。如果不具备重新布线的条件,还有一个止损方案是在PLC程序里对AIW0做多次采样取平均,我写了一个自定义的滤波子程序,连续采8次去掉最大最小求平均,多少能压住一些干扰。但治标不治本,布线分层才是根本。
5.2 接触器切换瞬间压力波动过大
这个问题在第一次加泵联动测试时特别明显。压力从0.50MPa掉到0.43MPa,持续了接近2秒才回升。原因有两个:一是切换时间太长,从断开变频接触器到合上工频接触器中间隔了1秒多,这段时间泵完全停转,压力掉得多;二是工频泵直接启动瞬间电流巨大,管网水锤效应明显。
优化方案是把切换间隙缩短到0.6秒。具体做法是工频接触器合闸前不等待太长时间,PLC输出触点经过中间继电器再驱动接触器,响应时间本身就有大约0.1-0.2秒的延迟,再配合程序延时0.4秒就足够了。同时我在工频泵出口装了缓闭止回阀,减少切换时的水锤冲击。第二次测试时压力跌落控制在0.04MPa以内,完全可接受。
5.3 变频器低频震荡
系统在小流量工况下出现过一阵低频震荡,现象是变频器频率在25-35Hz之间来回摆动,压力波动大约0.02MPa,水泵运行声音忽高忽低。这个其实不是变频器故障,而是PID参数在小偏差区间内出现了临界振荡。
解决方案是在PID控制回路里加了一个"死区"处理:当压力偏差绝对值小于设定值的1%(也就是0.005MPa)时,PID输出保持不变,不继续计算。这么做的意思是,微小偏差不用调整,等偏差积累到一定程度再动作,能有效抑制震荡。注意死区不能设太大,否则压力稳态偏差会变大,1%比较合适。
另外,把变频器的模拟量滤波时间从默认的0.01秒改成0.1秒,也能抑制频率指令的快速跳动。这个参数在变频器面板上就能设置,调完以后系统明显安静了。
5.4 S7-200存储空间不足
三泵逻辑加上PID和故障处理,程序越写越长,快下载时提示存储空间不足。S7-200的程序存储是按块分配的,V区、M区、T/C区都有固定范围。解决办法是尽量复用V区地址,把多个子程序的中间变量放在同一个V区范围内,而不是每个程序都单独申请一大片地址。同时把一些不用了的调试用临时变量删掉,精简定时器和计数器。
如果程序确实太大,还有一个办法是用"块移动"思想:把不常用的参数块放到V区末尾,运行时再传回来。但S7-200毕竟老平台,程序臃肿是常态,写代码时就要有省着用的意识。比如加减泵延时我就复用了同一个定时器逻辑,三次判断分别判断三个泵的状态,而不是给每个泵各写一套完整延时程序。
5.5 触摸屏通信偶尔掉线
调试期间触摸屏和S7-200之间用的Modbus RTU协议,偶尔出现掉线,表现为画面数据卡住不动,过十几秒自己恢复。排查后发现是通信帧冲突导致的,触摸屏是Modbus主站,但程序里用Micro/WIN在线监控程序时,Micro/WIN也在发请求,两个主站同时访问PLC自然冲突。解决方法是调试时断开触摸屏通信或者不打开Micro/WIN监控界面,正常运行时不冲突就没事。
S7-200的PORT1口可以做Modbus RTU从站通信,需要在程序里调用Modbus从站库指令,初始化时把波特率、从站地址、奇偶校验设置正确。我在触摸屏上就能直接修改设定压力、PID参数和加减泵延时值,这个功能在实际使用中非常重要,不然每次调参数都要开电脑连PLC,太不方便。
6. 项目验收与经验总结
6.1 系统验收测试结果
项目调试完成后,我和甲方现场做了验收测试,主要项目和数据记录如下:
| 测试项目 | 测试条件 | 测试结果 |
|---|---|---|
| 恒压误差 | 流量变化50%时 | ±0.01MPa以内 |
| 单泵转双泵 | 流量增大触发加泵 | 切换时间约6秒,压力波动±0.04MPa |
| 双泵转单泵 | 流量减小触发减泵 | 切换时间约8秒,压力波动±0.03MPa |
| 故障切换 | 模拟1号泵热继电器跳闸 | 约5秒投入备用泵,供水不中断 |
| 手动模式 | 每台泵单独启停 | 正常 |
| 报警功能 | 超压、低压、变频器故障 | 正常 |
6.2 电气设计和程序架构心得
做这类项目我越来越体会到,供水控制系统真正难的不是PLC程序本身,而是对系统物理特性的理解。PID参数整定、加减泵延时、滞环区间、接触器互锁,每一个点看起来都是小问题,但组合在一起效果完全不一样。程序再花哨,硬件接线有问题照样不出水;参数调得再漂亮,切换逻辑时序不对,实际运行起来也会水锤、过压、烧接触器。
S7-200虽然老了,但用好它的人现在依然吃香。这个项目的程序框架完全可以直接迁移到S7-200 SMART、S7-1200甚至信捷、汇川等国产PLC上,逻辑结构不变,只需要换指令和地址映射。三泵恒压供水是一个非常好的学习载体,麻雀虽小五脏俱全,模拟量采集、PID闭环、逻辑切换、故障保护、通信人机,每一种功能都覆盖到了,建议初学PLC的朋友拿这类项目练手。