刚做完这个小区泵房的恒压供水改造时,业主群算是消停了。之前一到晚高峰,五六楼的花洒就成涓涓细流,物业被投诉得焦头烂额。改造方案最后拍板用西门子S7-200 PLC加组态王组态软件,变频器驱动两台水泵,压力变送器做闭环反馈。这套组合在中小型泵房项目里确实是经典配置——S7-200虽然早已停产多年,但存量系统量大,资料全,维修师傅基本都会;组态王的上位机监控方便又不贵,业主调试好之后操作工很快就能上手。这篇就把这次项目的完整方案拆开讲:IO分配、接线原理、梯形图核心逻辑、组态王画面怎么做,以及现场调试时踩过的几个坑,给正在做恒压供水或者准备做课程设计的人一个可以直接参考的范本。
1. 系统构成与硬件选型:为什么这套组合在泵房项目里长盛不衰
1.1 控制目标与总体方案
恒压供水的控制目标一句话就能说清楚:不管管网用水量怎么变,把出水母管压力稳定在设定值附近。用水量小,水泵降速;用水量大,水泵升速;一台变频泵不够用,就切入第二台泵;水压过高,再退回一台泵。整个过程不能靠人盯着水压表手动调频,必须由PLC自动完成,同时上位机实时显示压力、频率、泵状态,能改设定值、能看报警。
项目的总体结构是典型的闭环控制系统:
压力变送器检测出水母管压力,输出4-20mA信号进PLC的模拟量输入通道AIW0;PLC内部做PID运算,把运算结果通过模拟量输出通道AQW0输出0-10V电压信号给变频器的AI模拟量输入端;变频器根据这个电压信号调节输出频率,改变水泵电机转速,最终影响管网压力;压力变化又反馈回变送器,形成闭环。
组态王上位机通过PC/PPI电缆与PLC通信,做实时监控和数据下发。整套系统不依赖上位机,PLC脱离组态王也能独立运行恒压控制,上位机挂了不影响供水,这是这套方案最让人放心的一点。
1.2 关键设备选型与接线原理
硬件选型上我这次用的是:
- PLC:西门子S7-200 CPU224 CN。这只本体带14路数字量输入、10路数字量输出、2路模拟量输入(AIW0/AIW2)、1路模拟量输出(AQW0),做双泵恒压供水不用再扩展模拟量模块,成本很低。
- 变频器:国产通用型矢量变频器,功率7.5kW,支持0-10V外部模拟量给定频率,有运行/故障继电器输出端子就行。不挑品牌,主流牌子都行。
- 水泵电机:两台7.5kW离心泵,一用一备轮换。
- 压力变送器:量程0-1.6MPa,两线制4-20mA输出,供电DC24V。
- 接触器:每台泵两个,一个接变频器输出,一个接工频电源,共四个。必须有机械互锁装置,同时二次回路里也要电气互锁。
主电路原理图比较简单:总断路器出来后分两路,一路直接给变频器供电,变频器输出端分别通过1#变频接触器和2#变频接触器接到两台电机;另一路通过两个工频接触器直接给两台电机供工频电源。正常自动工况下,泵要么走变频回路要么走工频回路,两个接触器绝对不允许同时闭合,否则变频器输出和工频电源短路,瞬间炸模块。
二次回路的核心就是接触器互锁。梯形图里同一个电机的工频接触器线圈回路必须串入变频接触器的常闭触点,变频接触器回路也必须串入工频接触器的常闭触点,软件互锁之外,硬件接触器辅助触点还要再做一层互锁。这是双泵恒压供水里最不能省的安全措施,现场检修时有人手动按接触器试机也不至于出大事。
2. IO分配与信号匹配:把每一路信号都落到端子排上
2.1 PLC输入输出分配表
IO分配是正经画图前的第一步,分配得好不好直接影响后面梯形图好不好写。我这套系统的分配如下:
| 地址 | 信号 | 说明 |
|---|---|---|
| I0.0 | 启动按钮(常开) | 自动运行启动 |
| I0.1 | 停止按钮(常闭) | 停止运行,停机时泵全部停 |
| I0.2 | 手动/自动切换 | 拨到手动用于检修 |
| I0.3 | 变频器故障反馈 | 变频器故障继电器输出 |
| I0.4 | 水池低液位 | 液位开关,防空抽 |
| I0.5 | 1#泵过载 | 热继电器FR1常闭点 |
| I0.6 | 2#泵过载 | 热继电器FR2常闭点 |
| Q0.0 | 变频器启动 | 给变频器DI启动端子 |
| Q0.1 | 1#变频接触器KM1 | 变频输出到1#泵 |
| Q0.2 | 2#变频接触器KM2 | 变频输出到2#泵 |
| Q0.3 | 1#工频接触器KM3 | 工频电源到1#泵 |
| Q0.4 | 2#工频接触器KM4 | 工频电源到2#泵 |
| Q0.5 | 故障报警灯 | 故障时闪亮 |
| AIW0 | 出水压力反馈 | 变送器4-20mA |
| AQW0 | 变频器频率给定 | 0-10V电压信号 |
这里说明一下,停止按钮用常闭点,梯形图里用LDN I0.1读取。这样做的好处是按钮线断线时相当于按下停止,符合安全习惯。热继电器常闭点和变频器故障继电器输出也全部接成PLC数字量输入,故障时信号变化能被PLC捕捉到。
2.2 模拟量通道的接线与量程设置
模拟量部分的接线是新手最容易翻车的地方。压力变送器是两线制,正端接开关电源的24V+,负端接CPU224模拟量输入第一路的A+端子,B-端子接24V公共端M。CPU224本体的模拟量输入量程是靠面板上的DIP开关切换的,出厂默认是0-10V电压输入,接4-20mA电流信号时必须把对应开关拨到电流挡,否则AIW0读数会完全不对。接线前一定先翻一下手册确认对应通道的拨码组合。
另一个容易被忽略的点是S7-200的AIW满量程值。CPU224的模拟量输入是12位分辨率,但内部数值被格式化成0-32000对应0-20mA或0-10V。也就是说,4-20mA信号对应AIW读数是6400-32000,不是0-32000。PLC内做量程换算时基准要用25600做分母,我见过有人直接拿32000做分子分母导致压力显示偏小很多。
至于AQW0,CPU224本体只有0-10V电压输出,没有电流输出。好在绝大多数变频器都接受0-10V作为频率给定,直接用双芯屏蔽线从AQW0引到变频器AI端子就行,屏蔽层单端接地。如果变频器只认4-20mA电流信号,那就得加一块EM232模拟量输出模块,多花几百块钱,选型时最好提前确认变频器参数,省得后面加模块改接线。
2.3 主电路与二次回路的互锁设计
前面提过接触器互锁,这里再展开一次。双泵变频/工频切换有个必须遵守的流程:任何状态下,同一台泵的变频接触器和工频接触器不能同时闭合。切换过程必须遵循"先断开当前回路,延时确认断开,再闭合目标回路"的顺序。
梯形图里我做了三层保护:
第一层,软件互锁。Q0.1和Q0.3两个线圈的回路里互相串入对方的常闭触点,程序上就不允许同时输出。
第二层,硬件互锁。接触器辅助触点互串,KM1线圈回路串KM3的常闭辅助触点,KM3线圈回路串KM1的常闭辅助触点,KM2和KM4同理。
第三层,机械互锁。选接触器时选带机械连锁的辅助触头组,或者两个接触器并排安装时加装机械连锁卡件。
第二、三层是防止软件跑飞、PLC输出乱跳时依然能保证安全。水泵变频切换时接触器在带负载的情况下动作,电弧不小,机械互锁能让动作机构物理上互相卡住,可靠性比单纯电气互锁更高。
3. 梯形图核心逻辑:PID闭环与双泵工变频切换
3.1 PID回路在S7-200里的两种落地方式
恒压供水的核心是PID闭环。S7-200做PID有两种思路:用指令向导生成,或者手写PID指令操作回路表。
第一种是主流做法,省心可靠。在STEP 7-Micro/WIN里打开菜单"工具-指令向导",选择PID,然后配置:回路号用0,给定值范围设0.0-1.6MPa,过程变量选AIW0,输出类型选模拟量输出到AQW0,PID参数先填一组初始值,向导会生成一个名为PID0_INIT的子程序。主程序里直接调用这个子程序,过程变量填AIW0,给定值填一个V区浮点地址比如VD104。向导生成的子程序内部已经把采样周期、标定、输出限量都处理好了,出错概率极低。
第二种是手写PID指令,适合想搞明白原理或者需要对PID参数做特殊操作的人。S7-200的PID指令格式是PID TBL, LOOP,TBL是回路表起始地址,整个表占80个字节,从VB100开始的典型布局是:
- VB100开始的浮点数为过程变量PV,数值范围0.0-1.0的归一化值
- 偏移4字节是给定值SP,同样归一化
- 偏移8字节是输出值Mn,0.0-1.0
- 偏移12字节是增益Kc
- 偏移16字节是采样时间(秒)
- 偏移20字节是积分时间(分钟)
- 偏移24字节是微分时间(分钟)
无论用哪种方式,有个概念必须清楚:PID的SP和PV在回路内部都是归一化数值,不是真实的压力MPa值。所以要么在向导参数里把量程标定进去,要么自己在程序里做归一化转换。做完之后从VD104读到的还是浮点工程量0.4,从AIW0读到的原始数字要换算,PID子程序内部才把它转成0.0-1.0的归一化量参与运算。
3.2 双泵切换的状态机与定时器逻辑
PID输出对应的是频率给定,输出0.0-1.0大致对应0-50Hz。单泵变频运行能覆盖大部分工况,但高峰用水量超过一台泵的变频能力时,PID输出会长时间顶在最大值附近,这时候要切入第二台泵。反过来,用水量回落,两台泵一起变频时PID输出可能掉到很低,需要退出一台,让另一台回到变频调节。
这套切换逻辑我用状态机加定时器实现,比单纯比较PID输出后立即动作稳定得多。核心逻辑是这样:
初始状态为1#泵变频运行,2#泵停止。PID输出持续大于0.95并保持60秒(用定时器T37累计),判定当前单泵变频能力不足,进入切换流程:先断开KM1,停掉1#泵变频回路,延时3秒确认接触器断开且变频器已经停止输出,再闭合KM3让1#泵切到工频运行,同时闭合KM2并输出变频器启动信号,让2#泵投入变频运行。
此时系统状态变为1#泵工频、2#泵变频。当PID输出持续小于0.15并保持60秒(用定时器T38累计),说明两台泵多了,要退回一台:先断开KM2停掉2#泵变频回路,再断KM3让1#泵退出工频,延时3秒后闭合KM1让1#泵重新回到变频运行,系统恢复初始状态。
延时3秒这个数值要强调一下。接触器断开后触头间的电弧需要时间熄灭,变频器输出关断后内部电容电压也需要时间泄放,延时太短会造成电弧重燃或者变频器输出侧带电操作,非常危险。现场整定过多次,3秒是一个安全可靠的下限,条件允许可以放大到5秒。
梯形图的STL示意如下(S7-200的语句表,对应的LAD逻辑就是这些触点和线圈的连线):
// 系统启动标志,M0.0为运行中 LD I0.0 O M0.0 AN I0.1 AN I0.3 AN I0.4 = M0.0 // 双泵切换:PID输出上限判断,VD112存放PID输出归一化值 // 切换到2#泵条件:运行中,1#泵变频接触器Q0.1闭合,2#泵未投 LD M0.0 LPS AR>= VD112, 0.95 AN T37 TON T37, 600 LRD LD T37 AN Q0.4 S Q0.2 // 断开1#变频接触器 LDN Q0.1 AN T39 TON T39, 30 // 3秒延时 LD T39 S Q0.3 // 合1#工频接触器 S Q0.0 // 变频器启动 S Q0.2 // 合2#变频接触器 R T37 LPP ...这段并不是完整的项目程序,但逻辑顺序和关键触点能对上,实际写梯形图时只要保持这个状态顺序,把各自对应的接触器输出线圈放好,程序结构就不会乱。
3.3 手动/自动模式与保护逻辑
手自动切换是给检修和应急留的口子。拨到手动时,PID回路完全旁路,用按钮直接控制工频接触器启停,方便电工单独试泵、打循环、排空管路。注意手动模式下虽然是直接控制接触器,软件互锁依然有效,KM1和KM3不可能同时输出,这是底线。
自动模式下保护逻辑按优先级排列:
第一优先是变频器故障。I0.3为1时立即断开Q0.0变频器启动信号,断开所有变频接触器,如果此时有泵在工频运行则保持工频泵继续运行——供水不能停,同时Q0.5报警灯点亮,组态王上报"变频器故障"。
第二优先是水池低液位。I0.4动作时,无论哪台泵在变频还是工频,统一停止运行,防止水泵空转损坏机械密封。低液位恢复后要人工复位或者延时自动重启,我用的是延时5分钟自动恢复,防止液位信号抖动导致频繁启停。
第三优先是热过载。I0.5或I0.6动作对应停掉过载的那台泵,同时报警。这里有个细节:热继电器常闭触点串联在PLC输入点里,过载时信号由1变0,梯形图里要用LDN I0.5来读,不要写反。
所有保护触发后,组态王上位机都能显示具体报警原因。这就需要在PLC里把保护状态映射到M区或者V区变量,组态王读这些变量做报警显示。我这里把M0.1定义为综合故障位,M0.2定义为变频器故障,M0.3定义为低液位故障,M0.4定义为1#泵过载,M0.5定义为2#泵过载,后面组态王报警配置直接用这几个地址。
4. 组态王监控画面:从通信配置到图库动画
4.1 通信链路:PPI电缆参数必须一致
组态王和S7-200通信最常用的是PC/PPI编程电缆,有原生RS232口的,也有USB口的。USB口的注意装好驱动后每次插入可能分配不同的COM口号,组态王配置设备时要到设备管理器里确认实际COM号。
在组态王工程里新建设备时,设备驱动路径选"PLC-西门子-S7-200系列-PPI",然后配置COM口参数。我的实际参数是COM3、波特率9600、PLC站号2。这几个参数必须和PLC系统块里设置的一致。PLC侧在STEP 7-Micro/WIN的"系统块"里能把通信口参数改掉,默认波特率是9600,站地址默认是2,和组态王默认值刚好能匹配上。
一个很容易踩的坑是:如果把STEP 7-Micro/WIN的PG/PC接口设置成PPI并保持通信窗口开着,COM口被Micro/WIN占用,组态王就连不上。调试阶段经常出现"组态王通信失败,但Micro/WIN能连PLC"的现象,原因多半就是这个。所以下装完程序后,一定要把Micro/WIN的通信窗口关掉,或者把PG/PC接口切换成其他方式释放串口。
4.2 数据词典与PID参数的在线整定
组态王的数据词典是整个上位机的核心。这里我列几个关键的变量定义:
| 变量名 | 类型 | 连接设备 | 寄存器 | 数据类型 | 读写 |
|---|---|---|---|---|---|
| 压力反馈 | I/O实型 | PLC | VD200 | FLOAT | 只读 |
| 压力设定 | I/O实型 | PLC | VD104 | FLOAT | 读写 |
| PID输出 | I/O实型 | PLC | VD112 | FLOAT | 只读 |
| 运行状态 | I/O整型 | PLC | M0.0 | BIT | 只读 |
| 变频器故障 | I/O整型 | PLC | M0.2 | BIT | 只读 |
| 系统综合故障 | I/O整型 | PLC | M0.1 | BIT | 只读 |
这里关键的技术点是VD200。AIW0读出来的是0-32000的整数,组态王虽然也能直接读AIW0,但读出来是原始数字,做显示还得自己算,麻烦而且容易错。我的做法是在PLC内部把AIW0换算成浮点工程量存到VD200,组态王直接读VD200,画面上的压力显示值和趋势曲线都直接用这个变量,省时省力。
PLC内换算的梯形图指令序列大概是:MOVW AIW0到VW300,再用整数转双整数、双整数转实数指令把VW300转成VD300里的浮点数,减去6400.0,除以25600.0,再乘以1.6,得到浮点工程量存在VD200。一组浮点指令就能搞定。
VD104是PID给定值,我在组态王画面上放了一个输入框,操作工直接在监控画面上输入0.4之类的压力值,写入VD104就完成了压力设定修改。同时我把PID增益Kc和积分时间Ti也映射成了两个I/O实型变量,一个存VD112后面的VD??,一个存VD104后面的VD??。这样可以在组态王运行画面里直接整定PID参数,不用每次插编程电缆上传下载程序,现场调试效率高很多。
4.3 画面开发:图库元件、趋势曲线与报警
组态王的画面开发,新手最容易陷入"一切都要自己画"的误区。实际上组态王自带图库管理器,里面有大量现成的工业图元:水泵、电机、阀门、管道、水箱、指示灯、按钮、仪表盘等等。开发画面时直接从图库里拖出来用,再配动画连接,十几分钟就能拼出像样的监控画面。
我的主监控画面布局是:最上面一条工艺管线,管线上画了出水母管、压力表、两个水泵图标,管线用图库里的管道元件,颜色深蓝表示压力正常,压力越限时管线颜色变红。两个水泵图标分别关联Q0.3、Q0.4等泵运行位,水泵运行时图标旋转动画(图库里有旋转效果),停止时静止。
压力显示用了两种方式:一个是数字文本显示,直接显示"水压0.42MPa",关联VD200;另一个是表盘,从图库里拖一个仪表盘,把指针旋转范围的动画效果和VD200关联,量程设0-1.6MPa,看起来就和一个真实的压力表一样。这种表盘动画在现场特别管用,操作工不用看数字也能凭指针位置判断水压状态。
趋势曲线是必须的。我在画面上放了一个实时趋势曲线控件,添加了两条曲线:压力反馈VD200和压力设定VD104,颜色一红一蓝,刷新周期1秒。靠这两条曲线能直观看到PID调节过程,超调量、振荡周期、收敛时间一眼就能看出来,调试PID时比看数字痛快得多。
报警配置在数据词典里做。给"压力反馈"设置报警上下限:上限1.5MPa,下限0.2MPa,死区0.02MPa。死区一定要设,不然压力在报警限附近轻微波动时,报警会反复触发和恢复,组态王报警窗口会被刷屏。变频器故障、低液位、过载这几个开关量直接在变量属性里勾上报警,报警优先级设置为高。画面上放一个报警窗口控件,报警事件实时滚动显示,同时可以配置声音报警,故障时监控室喇叭响铃。
5. 现场调试与坑点记录:PID整定和通信异常排查
5.1 压力反馈值跳变的定位过程
这套系统刚通电调试时,我遇到一个非常典型的故障:压力变送器输出电流稳定在12.8mA,用万用表在变送器端子处量是正常的,但组态王画面上压力数值在0.1MPa到0.7MPa之间乱跳。
第一反应是干扰。检查了屏蔽层,发现变频器和PLC控制柜共地,屏蔽层也在柜内接地,理论上问题不大。但后来冷静下来一想,AIW0读数异常的第一怀疑对象应该是量程设置——S7-200的模拟量输入量程由面板DIP开关决定,接4-20mA时如果开关还在电压挡,读数同样会乱套。
翻出CPU224面板一查,果然DIP开关还保持在出厂默认的0-10V电压挡。把对应通道拨到电流挡,断电重启后AIW0读数立刻稳定下来。12.8mA对应压力折合大约0.4MPa,和现场压力表完全吻合。
这次排障的教训是:模拟量异常不要急着怀疑干扰和屏蔽,先确认量程挡位是否符合实际信号类型。电压输入和电流输入的内部采样电路不一样,挡位错了信号进来就是乱的。
5.2 PID参数整定的实操顺序
PID参数我是用组态王在线整定的,比一遍遍改梯形图方便太多。整定思路是标准的经验法,但做过几个项目后我总结了一套适合恒压供水的顺序:
先把积分时间放到最大(接近关断积分),微分时间设为0,只用比例P试。增益从0.3开始,观察组态王趋势曲线:如果压力曲线缓慢爬升、长期有稳态误差,每次增大增益0.1,直到曲线出现明显超调后回调一档。恒压供水这种单容过程,纯比例阶段增益大概落在0.5-0.8之间。
纯比例跑稳定之后,引入积分。积分时间从0.5分钟开始,逐步减小。每调一次看趋势曲线,正常情况下超调量会小幅增加,稳态误差被消除。我最终落在0.2分钟,也就是12秒左右。再往下减,压力曲线开始出现周期性小幅振荡,那就把积分时间回调一档。
微分时间大多数情况下不需要。供水压力本身滞后不大,加微分容易把高频噪声放大成继电器抖动。我最后的参数是Kc=0.65,Ti=12秒,Td=0,采样时间0.2秒。跑了一个晚上,高峰和低谷时段压力波动都在0.03MPa以内,泵切换瞬间会有短暂波动,但30秒内能拉回设定值。
另外特别提醒一点:PID参数整定前先确认变频器加减速时间。我用的变频器默认加速时间10秒、减速时间10秒,和PID调节周期配合得还可以。如果水泵电机功率大或者管路长,加减速时间要适当加大,否则PID输出变化稍微剧烈一点,变频器就会报过流或者过压。
5.3 组态王连不上PLC的排查链路
组态王通信故障出现的概率仅次于调试初期。我整理了一条实际排查顺序,照着走基本一次就能定位:
第一步,看PLC本身是否正常。CPU面板的RUN灯是否亮,SF灯有没有闪。SF灯亮说明PLC程序有严重问题或者硬件故障,这时候通信肯定也建立不了,先解决PLC本身问题。
第二步,用STEP 7-Micro/WIN测试通信。在Micro/WIN里选择通信菜单,搜一下站。如果能搜到PLC,说明电缆、PLC通信口、波特率这些底层链路都是好的,问题出在组态王设备配置;如果Micro/WIN也搜不到,先从电缆和PG/PC接口设置下手。
第三步,检查串口占用。组态王运行前,Micro/WIN的通信窗口必须关闭,PG/PC接口不能再占用PPI协议。我遇到过最隐蔽的情况是系统后台常驻了一个S7-200的OPC服务占着COM口,把它停掉组态王就通了。
第四步,核对组态王设备定义里的站号和波特率。PLC站号默认2,组态王默认也是2,一般没问题;波特率如果现场改过PLC通信口设置,组态王里未必同步改,两头不一致就通信失败。
第五步,组态王设备配置成功后有测试功能,点测试能读到设备返回的数据,可以快速确认通信是否已经打通。测试通过后再去建变量,效率高很多。
这套排查顺序我后来也写进了运行维护手册里。物业的电工不懂PLC,但按这个顺序走,至少能判断是硬件问题还是配置问题,打电话求援时也能说清楚现象。
最后再分享两个小经验
这套系统交付运行之后,我回头想了一下,有两个习惯确实帮了大忙。
第一个是归档资料。接触器的互锁在图纸上体现得不明显,但现场核查时必须逐台确认。我把每台接触器的主触点和辅助触点都拍了照片,标注好端子号存档。后来一次物业自己动过接线,导致1#泵工频接触器辅助触点接触不良,对照照片五分钟就找到问题。做工程项目,一分图纸对应一分现场,省不了。
第二个是PID初始值的记录。组态王在线整定确实方便,但万一参数调乱了,得有能恢复的初始值。我在项目调试时每调一版参数都随手记在调试记录本上,Kc从0.3到0.65的每一步都留了档。实际运行一年后想优化一下,翻出记录本就知道当前值是怎么一步一步定出来的,不会两眼一抹黑。
恒压供水这个课题,从学校课程设计到工程实际项目,S7-200和组态王这套经典组合依然有大量的参考资料和存量系统。就算以后要移植到S7-1200或者国产PLC,PID闭环、双泵切换、上位机监控这套思路是完全通用的,搞懂这一次,后面再遇到类似的泵站、供热、空压机恒压项目,本质都是一回事。