
泵站温度监控听起来就是“温度超标报警”这么点事真要做成一套能交付的系统牵扯到的东西远比想象中多。从PT100传感器选型、温度变送器怎么把4-20mA信号送给S7-200到梯形图里做量程换算和泵联锁控制再到上位机用组态王搭出温度曲线和报警画面每一环都有讲究。这篇文章我拿一套典型配置——西门子S7-200 PLC加组态王6.55——把泵站温度系统从梯形图解释、接线原理到组态画面的整个链路拆开讲把带注释的程序逻辑和图纸要点逐一交代清楚。适合正在做泵房、水厂、换热站改造项目的工程师也适合课程设计或毕业设计选这个方向的同学。不少朋友拿到这种项目第一反应是先把组态王画面画起来画到一半才发现底下PLC的地址和上位机变量对不上模拟量算出来的温度能偏出十几度。这活儿真要干利索顺序应该是先理清硬件接线和I/O表再写梯形图最后才轮到组态王。咱就按这个顺序往下聊。1. 项目概述与整体方案1.1 需求拆解标题背后到底包含了几件事“S7-200 PLC程序 组态王组态画面 泵站温度系统温度 带解释的梯形图 接线图原理图图纸”这个标题其实描述的不是一个单点功能而是一整套交钥匙性质的小型自动化项目。拆开来看至少包含以下四个层面温度采集选什么传感器信号怎么进PLCAIW寄存器怎么读这属于硬件链路。逻辑控制温度超限怎么报警超高怎么联锁停泵手自动模式怎么切换这属于梯形图程序。上位机监控组态王画面怎么做温度数值、泵状态、报警记录、趋势曲线如何展示和操作这属于组态开发。图纸交付原理图、端子接线图、I/O分配表现场施工和调试全靠它们属于工程文档。这四部分不是互相独立的任何一个环节出错整套系统都跑不顺。常见问题是有人只给了梯形图不给接线图有人只做了画面但变量没对上下位机地址。做完整交付必须把这四块当成一个整体来设计。1.2 系统架构与信号流向整套系统的信号走向用一句话就能说明白温度变送器把PT100的电阻变化转成4-20mA电流信号送入S7-200的模拟量扩展模块EM231PLC在梯形图里把模拟量原始值换算成实际温度再根据逻辑控制泵的启停同时通过串口或以太网把数据送给组态王。具体链路传感器层PT100铂电阻配合温度变送器输出4-20mA标准信号。采集层S7-200 CPU 224加EM231模拟量扩展模块AIW0、AIW2等地址存原始数值。控制层CPU224运行梯形图程序完成量程换算、超温报警、泵逻辑控制。执行层Q0.0输出给中间继电器中间继电器驱动接触器接触器控制泵电机。监控层组态王通过PPI或TCP协议和S7-200通信做画面显示、历史记录和远程操作。有的朋友会问为啥不直接让S7-200 CPU 224XP用内置的两路模拟量输入非要多加一个EM231。224XP确实自带2路AI但很多泵站项目需要测水温、轴承温度、电机温度等多个点位2路不够用。而且EM231四路模拟量模块很常见扩展上去以后后续想加压力、液位、流量信号也方便不用再动硬件方案。2. 硬件选型与接线图原理2.1 控制器与模拟量模块怎么选S7-200这台老家伙停产很多年了但市面上存量巨大大量老泵站、小型水厂、换热站还在用它跑。新项目我一般会建议客户考虑S7-200 SMART但如果是老设备改造维护或者手里已经有一套S7-200备件直接用完全没毛病。这套系统的逻辑迁移到S7-200 SMART上也很容易。CPU型号选CPU 224继电器输出型。原因就一个I/O点数和价格平衡得好。温度点不多的情况下CPU 224自带14DI/10DO外围接按钮、热继电器、接触器都够用。如果泵站里有两三台泵或者要控制的设备种类多CPU 226是更稳的选择但那属于点数大的场景本文按单台泵控制来讲。模拟量扩展模块选EM231 4AI四路输入。这里有个重要提醒EM231的量程选择靠模块上的DIP拨码开关不同批次模块的拨码定义不完全一样拿到手第一件事就是看模块侧面的铭牌贴纸按上面的说明把量程拨到4-20mA档位。我现场遇到过不止一次模块出厂默认是0-10V量程接上4-20mA以后AIW值全乱套排查了半天才发现是拨码没拨。这块信息一定别凭经验铭牌上写得清清楚楚。2.2 温度传感器与变送器选择泵站里要测的温度点常见的有这么几个循环水温度、泵轴承温度、电机绕组温度。前两者用PT100铂电阻最普遍测温范围宽、线性度好、价格便宜。PT100在0℃时阻值100欧姆100℃时阻值138.5欧姆变化量很小直接接PLC模拟量模块是不行的必须经过温度变送器把电阻信号转成标准的4-20mA电流信号。变送器量程怎么选这是个细节。测水温量程选0-100℃比较常用测轴承温度可能用到-20℃到150℃得根据现场设备的温度范围来定。量程选小了超量程信号会封顶数据失真量程选大了分辨率又不够。选型时留出20%左右余量比较合理。至于为啥选4-20mA而不是0-10V这算是老生常谈但还是要强调电流信号在长距离传输中抗干扰能力强电压信号在线路上会有压降损失而且4-20mA有个天然好处——低于4mA说明断线或传感器故障程序里可以直接做故障判断。这个特性后面写梯形图时能用上。2.3 电气接线图的关键细节整套系统的电气接线我习惯分成主回路、控制回路、模拟量信号回路三块来画图现场施工人员拿到以后不容易乱。主回路就是电机供电链路断路器QF做短路保护和隔离接触器KM主触点控制电机通断热继电器FR做过载保护最后到电机M。这块没什么花活但热继电器整定电流一定要按电机铭牌电流来调别凭感觉。控制回路的重点是PLC输出点到接触器之间为什么要加中间继电器。很多新手直接拿PLC的Q点去驱动接触器线圈短期能转长期大概率出问题。PLC继电器输出触点容量有限而接触器线圈在吸合瞬间的冲击电流不小频繁通断很容易把触点寿命耗完。加一个中间继电器KA做隔离接线成PLC输出Q0.0 - 中间继电器KA线圈KA的常开触点再去驱动接触器KM线圈。这样PLC只管小电流信号主回路的大电流交给接触器和热继电器去扛整个系统安全性和寿命都上来了。模拟量信号回路是很多人容易接错的地方。两线制温度变送器只有两根线供电和信号共用接法是这样的开关电源的24V接变送器的正极变送器的负极信号端接EM231的A输入端子EM231的A-端子接回开关电源的24V-。靠着这个回路电流信号完整地流经变送器和PLC模拟量模块AIW读到的就是4-20mA对应6400到32000的原始值。接线时还有两个硬性要求信号线用屏蔽双绞线屏蔽层单端接地模拟量线绝对不要和动力线穿同一根管否则变频器一启动AIW的数值能跳到你怀疑人生。3. 梯形图程序设计详解3.1 I/O地址分配表梯形图写之前第一步永远是先把地址规划清楚。地址分配合理程序写到后面才不乱。这套系统的I/O表我列在下面地址类型说明量程/信号AIW0模拟量输入1#循环水温度4-20mA对应0-100℃AIW2模拟量输入1#泵轴承温度4-20mA对应0-150℃I0.0数字量输入1#泵启动按钮常开I0.1数字量输入1#泵停止按钮常开I0.2数字量输入手自动切换ON自动 OFF手动I0.3数字量输入热继电器FR故障信号常闭Q0.0数字量输出1#泵接触器控制经中间继电器驱动M0.0内部标志温度高报警超90℃置位M0.1内部标志温度过高联锁跳闸超95℃置位VW100变量存储1#水温工程值单位0.1℃90.0℃存900VW102变量存储1#轴承温度工程值单位0.1℃这里有个习惯要特别说明温度工程值我存成0.1℃的整数而不是带小数的实数。90.0℃存成整数900。这么做的好处是S7-200的整数运算比浮点运算快得多梯形图里直接比较VW100和900简洁又不容易出错。显示的时候组态王那边把900除以10显示成90.0就可以了上位机做这步转换很轻松。3.2 模拟量滤波与工程量换算模拟量读数跳变是所有PLC项目的通病。S7-200的AIW直接读出来的原始值叠加了现场的电磁干扰以后总会在某个值附近来回蹦。程序里做数字滤波是成本最低、最有效的办法。工程上最常用的滤波算法是采样平均值连续采样五次累加后除以五。如果采样周期是100毫秒五次平均就能把50Hz工频干扰的影响削掉一截。更高级的一阶惯性滤波能用加权的方式让数据更平滑但整数运算实现起来麻烦对泵站温度这种变化缓慢的对象平均值滤波完全够用。量程换算是梯形图里的重头戏公式本身不复杂但细节极容易踩坑。S7-200模拟量输入把4-20mA映射成6400到32000的整数值温度变送器量程0-100℃对应4-20mA所以换算关系如下。温度工程值0.1℃ AIW原始值 - 6400 × 1000 / (32000 - 6400)化简以后分母是25600乘数是1000。推导思路不复杂先把AIW的原始值减去6400把4mA对应的零点偏移消掉得到“去掉偏移后的值”这个值在0到25600之间对应0到100℃乘以1000是为了把结果放大成0.1℃精度否则整数除法会把小数部分全部舍掉最后除以25600得到实际温度×10。写程序的时候要注意两点先减偏移再乘除这个顺序不能乱否则4mA对应的零点和满量程的对应关系就错了乘法用双整数做因为AIW最大能到32000减完偏移乘完1000以后数值已经超过16位整数的32767上限必须用32位的双整数来存。换算这一段如果用梯形图指令来写大致思路是先读AIW0存到VW10再用ITD指令把16位整数转成32位双整数存到VD14然后用双整数减指令减去6400乘以1000最后除以25600结果存到VD24。注意这里的VD14、VD24是连续的32位地址千万别和后面要用的VW地址重叠了地址规划一步错后面排查起来非常痛苦。3.3 泵组控制与超温联锁泵的控制逻辑我习惯用启保停电路加联锁条件的方式来做而不是用置位复位指令满天飞。启保停电路直观、调试方便、现场维护人员看着也眼熟。但超温联锁这个环节必须用置位和复位来锁定故障状态。具体逻辑是这样设计的自动模式下按一下启动按钮I0.0如果此时没有超温跳闸标志M0.1且热继电器没动作泵就启动Q0.0输出并自锁。按停止按钮I0.1泵停止。这是最基础的启保停。超温联锁的难点在于温度超过95℃时立刻停泵这是第一层保护。但温度降到95℃以下之后泵能不能自动重新启动答案是不行必须人工复位。为啥因为超温说明系统可能出了比较严重的故障如果温度一降下来泵就自动重启泵和管道反复承受热冲击设备损伤很大甚至可能造成二次事故。因此温度过高联锁跳闸时要把M0.1置位保持住只有操作人员确认故障排除后按下复位按钮在组态王上做一个复位按钮或者现场加一个复位开关才把M0.1复位重新允许启动。这个逻辑在泵站控制里是标配也是很多新手程序里最容易缺的一环。梯形图的网络规划如下网络1初始化用SM0.1在PLC上电的第一个扫描周期复位M0.0、M0.1把报警状态清掉。SM0.1只在第一个扫描周期为ON这是S7-200做初始化最常用的位。网络2模拟量采集和滤波循环读取AIW0五次累加后除以五结果存到VW20。AIW2同样处理存到VW22。可以用定时中断或者直接用循环扫描间隔来做采样间隔。网络3量程换算VW20滤波后的原始值通过ITD转成VD24减6400乘1000除25600结果存VW100。AIW2的处理方式一样量程换算是0-150℃对应的公式系数不同结果存VW102。网络4超温报警比较VW100是否大于900也就是90.0℃如果大于置位M0.0。这里报警值设90℃比联锁跳闸的95℃低5℃目的是先提醒值班人员温度异常提前处理如果继续升高到跳闸值才切断泵。网络5联锁跳闸比较VW100是否大于95095.0℃或者VW102大于某个轴承温度阈值比如1200代表120.0℃满足任意一个条件置位M0.1。联锁跳闸动作优先级最高。网络6复位逻辑在组态王上做了个复位按钮通过M10.0远程控制复位或者现场按钮复位按下后当温度确认降到安全值以下复位M0.1。这里有个细节复位按钮我用的是上升沿触发防止按钮一直按着导致M0.1一复位又被置位形成反复抖动的玄学问题。网络7泵启停控制核心就是一个启保停电路。自动模式下 (I0.0 启动按钮 OR Q0.0 自锁) AND NOT I0.1 停止按钮 AND NOT M0.1 联锁跳闸 AND NOT M0.3 热继电器故障 → Q0.0。手动模式就直接用I0.0点动控制。网络8输出Q0.0经过中间继电器驱动接触器。这套逻辑写完以后建议先在电脑上用软件模拟一遍看看逻辑时序对不对。西门子有对应的S7-200仿真工具虽然模拟量没法完全模拟但数字量控制逻辑能跑通大体流程没问题再往真机上灌。这几年AI辅助写PLC代码的工具也多起来了有些能直接生成梯形图或者指令表片段我试过用来做逻辑草稿还挺快但关键的量程换算、联锁恢复逻辑这些地方AI给的方案还是得自己逐行检查工程师的脑子和经验才是兜底的东西。4. 组态王组态画面实操4.1 设备通讯配置工控这块做上位机画面组态王虽然界面老气了点但架不住项目里到处都是兼容性好驱动全。这套项目用组态王6.55完全够用。装好组态王以后第一步不是画画面而是先和设备通信上。通信都还没通画出来的画面全是死变量一点意义没有。新建工程以后在工程浏览器的“设备”下面配置新设备。S7-200和组态王通信走串口PPI协议的情况最多。驱动路径在设备列表里选PLC - 西门子 - S7-200系列PPI。选完以后要设置串口参数波特率一般和PLC的通信波特率保持一致默认9600比较稳。设备地址填PLC的站号S7-200出厂默认站地址是2不是1这个细节坑过不少人。如果PLC的波特率和站地址在系统块里改过组态王这里要跟着改两边对不上就通信失败。如果现场S7-200配了CP243-1以太网模块或者第三方以太网模块那就走TCP方式驱动选S7-200系列TCP填上模块的IP地址。TCP方案的好处是通信速度快、抗干扰强、不用占电脑串口但前提是有网口模块成本高一些。配置完以后组态王有自带测试功能在设备配置界面点“测试”能看到和PLC通信是否成功。如果通信不上优先检查串口是否被占用、波特率和站号对不对、PC/PPI电缆驱动装没装好。这步不解决后面全白搭。4.2 数据词典变量定义通信通了以后就要在数据词典里建变量。数据词典就是组态王和PLC之间的中间层画面上的每个元素都要绑定这里定义的变量。变量定义有几个注意点。一个是类型要对应上。S7-200的AIW是16位无符号整数组态王里对应USHORT类型VW100如果存的是0.1℃精度的整数定义成INT16位有符号整数就行。一个是寄存器和地址的填写方式不同驱动略有区别PPI驱动下读VW100寄存器类型选“V”地址填100代表从VW100开始取16位。读AIW0寄存器类型选“AI”地址填0。读Q0.0寄存器类型选“Q”地址填0数据类型选Bit。读M10.0寄存器类型选“M”地址填0数据类型选Bit。这块容易出错的是数据类型没选对导致组态王读出来的值完全不是PLC里的值。工程值的转换可以在PLC里做完也可以在上位机做。我强烈建议在PLC梯形图里完成量程换算组态王直接读VW100的整数然后用“转换方式”里的线性转换把0-1000映射成0.0-100.0显示。这样上位机只是做显示层的转换逻辑都在PLC里就算组态王重新装了或者换台电脑底层换算逻辑不会丢。变量表大致这样建变量名连接设备寄存器数据类型读写属性说明水温工程值泵站PLCV 100INT只读显示用0.1℃轴承温度泵站PLCV 102INT只读显示用泵运行状态泵站PLCQ 0Bit只读泵运行指示灯温度高报警泵站PLCM 0Bit只读报警提示联锁跳闸泵站PLCM 1Bit只读跳闸状态远程启泵泵站PLCM 10Bit读写组态王远程启动远程停泵泵站PLCM 11Bit读写组态王远程停止故障复位泵站PLCM 12Bit读写复位联锁4.3 画面绘制与动画连接组态王画面绘制说白了就是画一张工艺流程图在图上把设备和变量做动画连接。画面风格看自己审美但功能一定要到位。我的习惯是先画一个简单的泵站工艺图一个水罐、一段管道、一台泵、一个电机图标温度测点在管道上引出来。组态王的图库里有一些泵、阀门、管道的现成图元可以省不少功夫。画完以后要做动画连接这才是画面能“动”起来的关键。温度的显示用“文本”工具双击文本在动画连接里选择“模拟值输出”绑定水温工程值变量格式设成一位小数运行时就能显示“25.3℃”这样的值。泵的运行状态用泵图元的“填充属性”绑定泵运行状态变量条件为真时填充绿色为假时填充灰色。要更形象一点可以在泵旁边加一个指示灯圆同样绑定状态变量。超温报警提示用报警标志M0.0控制一个指示灯的颜色正常时绿色报警时红色同时可以设置闪烁效果这个在组态王里叫“隐含”和“闪烁”动画连接。闪烁的作用是报警以后能第一时间抓住现场操作员的目光比单纯变色干扰性更强。远程控制按钮的做法是在画面上放两个按钮一个“远程启动”一个“远程停止”它们的“按下时”命令语言里分别写入赋值语句 \\本站点\远程启泵1; 和 \\本站点\远程停泵1;。释放的时候再赋0。这样组态王就是通过M10.0和M11.0的短脉冲来触发PLC的逻辑。画面上的按钮一定要和PLC梯形图里的M地址严格对应名字可以变地址不能错。4.4 趋势曲线与报警记录温度数据如果只看当前值等于没发挥上位机的优势。组态王的历史趋势曲线和报警记录才是每天运行追溯的利器。历史趋势曲线配置分两步。第一步在数据词典里把温度变量的“记录”属性勾上设定记录死区。记录死区的意思是温度变化超过这个范围才往历史库里存比如死区设0.5温度从25.0变到25.4这条不记只有变化超过0.5度才记一条。这么做是为了避免数据量过大同时也能保证曲线足够平滑。然后在画面里放置“历史趋势曲线”控件绑定刚才的温度变量设置展示的时间范围比如最近24小时。运行时操作员就能看到一天里温度的整体走向异常波动一目了然。报警记录这块组态王有专门的报警系统。在数据词典里给温度变量设置上限报警值90℃报警组可以根据需要分类比如“温度报警组”。然后在画面里放一个“报警窗口”控件把变量关联进去。运行时温度一旦超过90℃报警窗口会实时弹出记录包括时间、变量名、报警值、状态。报警记录时间不对这个坑很多人都会遇到根子在于组态王报警记录取的是运行电脑的系统时间如果电脑系统时间不对、时区不对或者跨天时钟漂移报警记录就会错乱。组态王本身没有自动校时功能现场要么定期校时要么在电脑上做计划任务对时。4.5 把温度数据写进MySQL数据库组态王的实时画面和曲线只能在电脑屏幕上看。但有些项目要求做数据追溯比如每隔一分钟把温度存到数据库日后出报表、做分析用。这块组态王也能做通过它的SQL访问功能。大致的方案是在装有组态王的电脑上装一个MySQL数据库用Navicat之类的工具建好一张表字段有采集时间、水温、轴承温度、泵状态等。然后在组态王的工程里配置好ODBC数据源写到SQL Server/MySQL的连接配置里。接着在画面里写命令语言用定时器每隔60秒执行一次SQLInsert把当前变量值插入数据库表。这样一来MySQL里就会积累完整的温度历史数据后续做报表、拉图表、训练分析模型都有素材。这步属于进阶功能基础项目可以不接数据库但一旦客户提“我要看历史数据报表”这就成了加分项。工程上我碰到过好几个泵站改造项目最后客户都是要求把运行数据落库方便他们做设备健康管理。5. 常见问题与排查技巧实录5.1 组态王和S7-200通信失败通信不上是这套系统里出现频率最高的问题症状是组态王画面上的数据全变成灰色的“”。排查顺序很重要别一上来就怀疑驱动坏了。先看硬件链路串口线或USB转PPI电缆插没插好驱动装没装上。再看设备配置组态王的设备地址和PLC站号是否一致。S7-200默认站地址是2如果你在系统块里改过记得两边都改。然后看波特率PC/PPI电缆、PLC系统块、组态王设备配置这三个地方的波特率必须一致。还要确认串口没被其他软件占用比如西门子的编程软件如果开着会把串口占住组态王自然连不上。一个容易被忽视的点是组态王的“设备测试”功能它能精确告诉你通信失败在哪个环节。如果设备测试里能读到数据但画面里是问号那是变量定义或者寄存器类型配错了如果设备测试都读不到那问题还在这三步里电缆、站地址、波特率。5.2 模拟量读数异常模拟量这一块我踩过的坑比数字量多十倍不止。常见的异常有几种。AIW读数恒为0。先检查变送器有没有输出用万用表量信号端电流4-20mA范围内是否正常。如果变送器有输出但AIW还是0大概率是EM231的量程拨码拨错了拨到了0-10V的档位电压信号接了个电流进去。还有一个可能模块供电没接EM231没有单独的24V供电AIW读出来就是0。AIW读数到顶恒定在32000附近。这通常是信号超过了量程或者接线短路了。马达起来以后变频器一开AIW就顶到32000多半是模拟量线没有屏蔽被变频器干扰到了信号被抬高成超量程。读数跳变忽高忽低。最有效的处理套路是先看屏蔽层接没接是不是单端接地再看模拟量线和动力线是不是穿在同一根管子里如果是物理分开重走线。然后程序里做平均值滤波。有条件的可以加装信号隔离器把传感器和PLC之间的电气联系隔开抗干扰能力立竿见影。5.3 泵无法启动或频繁启停泵启动不了先看联锁标志是不是锁住了。M0.1联锁跳闸如果处于置位状态泵是不能启动的这是保护逻辑在起作用不是故障。操作员看到泵不转第一反应是“程序坏了”但其实很可能就是温度曾经超限过联锁还没复位。画面上把联锁跳闸状态用醒目的红色指示灯做出来能省掉很多扯皮。频繁启停的原因一是温度在报警值附近来回抖导致报警复位再报警建议在程序里针对报警值做死区处理——比如报警值设90℃但恢复值设85℃温度要降到85℃以下才解除报警状态这样一个振荡区间就不会让泵反复启停。二是按钮变量没有用脉冲触发组态王里按钮按下赋值1松开没赋0PLC那边一直收到启动信号松都松不开。记得按钮按下时置1释放时置0PLC侧用上升沿指令去捕捉按钮动作。5.4 避坑清单汇总我把这套系统里容易出问题的地方汇总成一个清单照着检查能少走很多弯路首先EM231的量程拨码和模块供电一定要在通电前确认通电后拨码改了也不生效。其次模拟量换算先减6400再乘除这个顺序错了温度值就会整体偏大20%。然后联锁跳闸一定要保持状态温度恢复不允许自动重启泵这是设备安全底线。再有组态王和PLC的通信参数站地址、波特率、串口占用三板斧先确认。接着温度显示不对先算一遍公式算下来没问题再怀疑传感器。最后画面上的按钮和PLC里的M地址图纸、注释、数据词典三处必须完全对应改了一处忘了另外两处调试到天亮都找不到毛病。这清单说起来都是小事情但实际项目里每一个都导致过几小时的排查折腾。做这套系统最大的经验就是稳扎稳打先把PLC底层逻辑调明白了再往上做画面最后接数据库层层推进返工最少。