刚做完这个小区泵房的恒压供水改造时业主群算是消停了。之前一到晚高峰五六楼的花洒就成涓涓细流物业被投诉得焦头烂额。改造方案最后拍板用西门子S7-200 PLC加组态王组态软件变频器驱动两台水泵压力变送器做闭环反馈。这套组合在中小型泵房项目里确实是经典配置——S7-200虽然早已停产多年但存量系统量大资料全维修师傅基本都会组态王的上位机监控方便又不贵业主调试好之后操作工很快就能上手。这篇就把这次项目的完整方案拆开讲IO分配、接线原理、梯形图核心逻辑、组态王画面怎么做以及现场调试时踩过的几个坑给正在做恒压供水或者准备做课程设计的人一个可以直接参考的范本。1. 系统构成与硬件选型为什么这套组合在泵房项目里长盛不衰1.1 控制目标与总体方案恒压供水的控制目标一句话就能说清楚不管管网用水量怎么变把出水母管压力稳定在设定值附近。用水量小水泵降速用水量大水泵升速一台变频泵不够用就切入第二台泵水压过高再退回一台泵。整个过程不能靠人盯着水压表手动调频必须由PLC自动完成同时上位机实时显示压力、频率、泵状态能改设定值、能看报警。项目的总体结构是典型的闭环控制系统压力变送器检测出水母管压力输出4-20mA信号进PLC的模拟量输入通道AIW0PLC内部做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.51#泵过载热继电器FR1常闭点I0.62#泵过载热继电器FR2常闭点Q0.0变频器启动给变频器DI启动端子Q0.11#变频接触器KM1变频输出到1#泵Q0.22#变频接触器KM2变频输出到2#泵Q0.31#工频接触器KM3工频电源到1#泵Q0.42#工频接触器KM4工频电源到2#泵Q0.5故障报警灯故障时闪亮AIW0出水压力反馈变送器4-20mAAQW0变频器频率给定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做分子分母导致压力显示偏小很多。至于AQW0CPU224本体只有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输出类型选模拟量输出到AQW0PID参数先填一组初始值向导会生成一个名为PID0_INIT的子程序。主程序里直接调用这个子程序过程变量填AIW0给定值填一个V区浮点地址比如VD104。向导生成的子程序内部已经把采样周期、标定、输出限量都处理好了出错概率极低。第二种是手写PID指令适合想搞明白原理或者需要对PID参数做特殊操作的人。S7-200的PID指令格式是PID TBL, LOOPTBL是回路表起始地址整个表占80个字节从VB100开始的典型布局是VB100开始的浮点数为过程变量PV数值范围0.0-1.0的归一化值偏移4字节是给定值SP同样归一化偏移8字节是输出值Mn0.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实型PLCVD200FLOAT只读压力设定I/O实型PLCVD104FLOAT读写PID输出I/O实型PLCVD112FLOAT只读运行状态I/O整型PLCM0.0BIT只读变频器故障I/O整型PLCM0.2BIT只读系统综合故障I/O整型PLCM0.1BIT只读这里关键的技术点是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秒左右。再往下减压力曲线开始出现周期性小幅振荡那就把积分时间回调一档。微分时间大多数情况下不需要。供水压力本身滞后不大加微分容易把高频噪声放大成继电器抖动。我最后的参数是Kc0.65Ti12秒Td0采样时间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或者国产PLCPID闭环、双泵切换、上位机监控这套思路是完全通用的搞懂这一次后面再遇到类似的泵站、供热、空压机恒压项目本质都是一回事。