考试通知
西门子S7-200 SMART三托三恒压供水系统设计与PID调试 去年接了个小区二次供水的改造项目业主指定要用西门子200 SMART而且是三台泵的恒压供水要求做3托3的冗余配置。说实话恒压供水这活儿干了不下几十套但每次碰到3托3这种配置还是得仔细捋一捋逻辑因为泵切换的时机和PID参数整定直接决定系统稳不稳。这个项目最终跑下来效果不错压力波动控制在±0.01MPa以内三台泵轮换也很顺所以把整个设计和调试过程整理出来给做西门子200smart恒压供水、特别是3托3方案的朋友一个参考。不管你是刚接触PLC的初学者还是已经做过几个供水项目的老手这篇分享应该都能让你少走点弯路。1. 项目整体设计与3托3方案选型1.1 为什么用S7-200 SMART而不是1200/1500这个项目一开始业主问过要不要上1200或者1500毕竟现在博途推得猛。但我算了一笔账三台泵的恒压供水输入输出点数加起来不到30个模拟量就一路压力变送器加三路变频器频率给定如果走模拟量PID运算对200 SMART来说毫无压力。200 SMART的CPU SR40自带24点输入/16点输出再加一块EM AE04模拟量输入模块和一块EM AQ02模拟量输出模块硬件成本比1200一套下来省了将近一半。而且200 SMART的编程软件STEP 7-MicroWIN SMART上手快现场调试用网线直连就行不需要折腾博途那套复杂的项目结构。有人可能会说200 SMART的PID指令不如1200的PID_Compact功能强这倒是实话。200 SMART只有PID指令块没有自整定参数得手动调。但恒压供水这个场景压力对象的惯性很大用自整定反而容易整出激进参数导致震荡。手动整定虽然花点时间但一旦调好就非常稳定。另外200 SMART的Modbus RTU通讯库用起来很顺手三台变频器轮询读取电流、频率写入频率给定一个MBUS_CTRL加几个MBUS_MSG就搞定了。所以综合成本、开发效率和现场维护难度200 SMART做3托3恒压供水是完全够用的没必要盲目上1200。至于1500那是大型DCS或者多站点联网才会考虑一个小区的泵房用1500纯属浪费。还有热词里提到的“1500访问200smart”在这个项目里如果后期要接入小区的中控室可以考虑用200 SMART做Modbus从站让1500或者上位机来读数据但目前项目独立运行暂时没做这个扩展。选型这件事我的原则一直是够用就好余量留20%别为了面子多花钱。1.2 3托3到底指什么泵组配置与控制策略先解释一下“3托3”这个叫法。在供水行业里“托”就是“拖”的谐音一托一就是一台变频器带一台泵一托三就是一台变频器带三台泵。那3托3就是三台变频器分别带三台水泵每台泵都有自己独立的变频器硬件上一一对应。这种配置比一托三贵但好处非常明显每台泵都可以独立变频运行不需要工频旁路切换减少了对电网的冲击也避免了切换过程中的水锤。当然为了节能和延长变频器寿命系统仍然可以在用水量大的时候把某台泵切到工频运行但那是另说。这个项目的3托3具体配置是三台立式多级离心泵功率7.5kW扬程80米流量12立方米每小时。每台泵配一台西门子G120C变频器功率7.5kW。PLC通过Modbus RTU控制三台变频器的启停和频率给定同时读取每台变频器的输出频率、输出电流和故障状态。系统设定压力0.35MPa压力变送器量程0-1.0MPa输出4-20mA信号接入EM AE04模块。控制策略上系统有三种运行模式手动模式、自动模式和轮换模式。自动模式下PLC根据压力偏差决定开几台泵。具体逻辑是当实际压力低于设定压力减去0.02MPa且持续时间超过5秒就启动第一台泵变频运行如果变频泵已经跑到50Hz最大频率压力还是低于设定值减0.02MPa持续10秒就把这台泵切到工频运行通过接触器切换然后启动第二台泵变频运行以此类推最多三台泵同时运行其中最多两台工频一台变频。当用水量减小实际压力高于设定压力加0.03MPa持续30秒就先停工频泵再降低变频泵频率直到只剩一台变频泵在低频运行。如果压力仍然偏高变频泵频率降到睡眠频率比如25Hz以下持续60秒就进入睡眠状态停泵。压力掉下来再唤醒。这种“变频工频”的组合其实就是所谓的“3托3”在实际项目中的典型应用三台变频器托着三台泵通过PLC的逻辑让它们像一支队伍一样协同工作。热词里有人问“西门子200smart分段加热”其实恒压供水的加泵逻辑和分段加热有相似之处都是根据偏差分级投入只不过一个是压力一个是温度。1.3 系统架构与硬件清单整个系统的硬件架构分成三层现场仪表层、控制层和操作层。现场仪表层包括压力变送器、液位开关防止干抽、每台泵的进出水阀门手动、以及变频器自带的电机温度检测。控制层就是200 SMART PLC、模拟量模块、中间继电器、接触器。操作层是一台7寸威纶通触摸屏挂在泵房墙上显示压力、频率、电流和报警信息。具体硬件清单如下表名称型号数量备注PLC西门子S7-200 SMART CPU SR401继电器输出24DI/16DO模拟量输入模块EM AE0414通道4-20mA接压力变送器模拟量输出模块EM AQ0212通道4-20mA备用变频器西门子G120C 7.5kW3带Modbus RTU接口压力变送器0-1.0MPa4-20mA1精度0.5%FS触摸屏威纶通TK6071iQ17寸以太网通讯交流接触器施耐德LC1D183工频旁路用中间继电器欧姆龙MY2N6控制变频器启停开关电源明纬NDR-120-24124V直流这个配置里变频器的启停最开始我想用硬线控制但考虑到要读取电流和频率还是走了Modbus RTU。三台变频器的通讯口并联在一条485总线上PLC这边用CPU自带的端口0做Modbus主站。终端电阻在总线两端的变频器上拨到ON中间那台拨到OFF。通讯波特率设192008位数据位1位停止位偶校验。这个参数和G120C的默认Modbus设置匹配不用额外改。需要注意的是200 SMART的端口0和端口1都可以做Modbus主站但端口1还可以做以太网不对SR40只有端口0是RS485端口1是RS485实际上SR40有两个串口端口0和端口1都是RS485但端口1通常用作PPI或者自由口。我习惯用端口0做Modbus主站端口1留给编程或者接触摸屏如果触摸屏走串口。这个项目触摸屏走以太网所以端口1空着以后可以接上位机或者做从站。2. 核心控制逻辑与PID参数整定2.1 恒压供水的PID控制原理与200smart实现恒压供水的核心就是PID。压力变送器采集当前压力和设定压力比较差值送给PID运算输出一个0-50Hz的频率给定给变频泵。这个过程听起来简单但参数整定不好压力就会像坐过山车一样忽高忽低。200 SMART的PID指令块有八个参数回路表地址、设定值、过程变量、输出、报警、自动/手动、手动值、控制字。我一般用PID向导生成回路表这样省事但向导生成的PID参数需要手动修改。PID的参数是增益Kp、积分时间Ti、微分时间Td。对于供水系统这种大惯性、纯滞后的对象微分作用基本不用因为压力变送器信号有噪声微分会把噪声放大。所以Td设0只用PI。Kp和Ti怎么定我的经验是先在手动模式下把变频泵的频率稳定在35Hz左右观察压力实际值。然后切自动Kp从0.5开始给Ti从30秒开始给。如果压力上升太慢加大Kp如果压力震荡减小Kp或者加大Ti。这个项目最终整定下来的参数是Kp1.2Ti45秒Td0采样时间0.5秒。这个参数下压力从0升到0.35MPa大概需要25秒超调不到0.02MPa稳定后波动±0.01MPa。这里要特别说明一下PID的正反作用。对于供水系统压力低于设定值时需要加大频率所以是正作用。在200 SMART的PID向导里控制字要设置成对应的正作用模式否则一上电变频器就跑到0Hz或者50Hz。我见过有人调了半天没反应最后发现控制字搞反了。还有一点PID的输出需要做上下限限幅下限设0Hz上限设50Hz但实际运行中如果PID输出低于25Hz超过一分钟就进睡眠逻辑这个在后面讲。200 SMART的PID指令没有自整定功能所以需要耐心手动调。有个小技巧可以在触摸屏上做一个“PID参数调试”页面把Kp、Ti、Td做成可输入变量这样在现场不用改程序就能调参数。调好之后再把变量锁定或者写死到程序里。这个技巧至少帮我省了两趟跑现场的时间。2.2 泵切换逻辑加泵、减泵、轮换与故障处理泵切换逻辑是3托3项目的灵魂也是最容易出问题的地方。逻辑写得好泵切换就像老司机换挡平顺写得不好压力会像被锤子砸了一下。下面我按加泵、减泵、轮换、故障四个部分来说。加泵逻辑系统启动时默认先启动1号泵变频。如果PID输出已经达到50Hz或者变频器输出频率反馈大于49Hz压力仍然低于设定值减0.02MPa并且这个状态持续10秒PLC就认为一台泵不够用了开始加泵。加泵的动作是先把当前变频泵切到工频。切工频不是直接切换因为变频器输出和工频电源可能不同步直接切会短路。正确做法是先让变频器自由停车或者减速停车等变频器输出接触器断开后再合上工频接触器。这个过程大概需要2-3秒期间压力会掉一点但因为另一台泵马上要启动所以影响不大。切完工频后立即启动下一台泵变频运行频率从当前PID输出值开始通常是50Hz往下调。这样系统就有了一台工频泵加一台变频泵。如果两泵运行下压力还是不够继续加第三台泵逻辑同上把当前变频泵切工频启动下一台变频泵。最终最多是三台泵运行其中两台工频一台变频。这里有个细节切工频的顺序要按泵的累计运行时间轮换不能总让1号泵切工频否则1号泵磨损快。我的做法是维护一个运行时间数组加泵时选择运行时间最短的那台泵作为变频泵切工频时选择运行时间最长的变频泵。这样自然轮换。减泵逻辑当压力高于设定值加0.03MPa并且持续时间超过30秒就认为用水量小了需要减泵。减泵的顺序是先停工频泵停的时候直接断开接触器同时把变频泵的频率往下调一点防止压力反弹。如果停了一台工频泵后压力还是偏高继续减直到只剩一台变频泵。如果一台变频泵的频率降到睡眠频率25Hz以下持续60秒就进入睡眠状态停变频泵。睡眠后压力如果掉到设定值减0.05MPa就唤醒重新启动变频泵。睡眠和唤醒的阈值要留够死区不然会频繁启停。轮换逻辑为了不让某台泵长期运行系统每隔24小时可设置自动轮换一次。轮换时如果当前有多台泵运行先减到只剩一台变频泵然后切换到备用泵再重新根据压力加泵。轮换过程最好安排在夜间用水量小的时候自动进行或者手动触发。故障处理每台变频器都有故障输出继电器接到PLC的输入点。如果某台变频器报故障PLC立即把该泵从可用泵列表中剔除并报警。如果故障的是当前变频泵就自动切换到下一台可用泵变频运行。如果三台泵中有两台故障系统还能维持一台变频运行只是压力可能不稳。如果三台全故障系统停机并输出总报警。故障复位需要手动在触摸屏上点“故障复位”复位后泵重新加入可用列表。这个逻辑我是在200 SMART里用状态机写的。状态机有以下几个状态空闲、单泵变频、双泵一工一变、三泵两工一变、睡眠、故障。每个状态之间的转换条件用定时器和比较指令实现。程序里用了大量的比较和定时器但逻辑清晰调试的时候可以通过触摸屏监控当前状态排查问题很方便。2.3 模拟量采集与变频器给定压力变送器的4-20mA信号接入EM AE04的第一个通道。200 SMART的模拟量输入模块对于4-20mA信号对应的数字量范围是5530到27648。这个数字不是随便来的是200 SMART的规格0-20mA对应0-276484-20mA对应5530-27648。所以压力计算公式是实际压力 AIW值 - 5530/ 27648 - 5530 * 1.0 - 0 0。化简一下实际压力 AIW - 5530 * 1.0 / 22118。这个公式在程序里用浮点运算实现结果存到VD100里作为PID的过程变量。这里有个坑EM AE04模块的通道配置要在系统块里设置每个通道可以独立选择0-20mA或者4-20mA还有电压范围。如果设错了读出来的数值就是错的。我曾经碰到一个现场压力一直显示负值查了半天发现是模块通道设成了0-20mA而变送器是4-20mA导致5530以下的值被当成负数。所以系统块里的模拟量配置一定要和实际接线匹配。变频器给定方面因为走了Modbus RTU频率给定是通过写寄存器实现的。G120C的Modbus寄存器地址控制字是40100频率给定是40101具体地址要查G120C的通讯手册。频率给定值是一个0-16384的整数对应0-50Hz。所以如果PID输出是30Hz那么写入值就是30/50*163849830。这个换算在程序里用MUL和DIV指令完成。读取变频器的输出频率是40111寄存器读回来也是0-16384再换算成Hz显示。读取输出电流是40113换算成安培。如果不用通讯而用模拟量输出模块EM AQ02那就更简单把PID输出0-50Hz换算成0-27648写入AQW再接变频器的模拟量输入端子。但模拟量输出容易受干扰而且需要每台变频器单独接线成本也高。所以我推荐用Modbus RTU一根双绞线串三台变频器省线省事。3. 实操过程从硬件接线到程序调试3.1 硬件接线与IO分配含IO映射说明硬件接线这个环节我习惯先画一张IO分配表把每个输入输出点的功能、地址、线号都写清楚这样接线的时候不会乱。这个项目的IO分配如下地址功能说明I0.01号变频器故障常开故障时闭合I0.12号变频器故障常开故障时闭合I0.23号变频器故障常开故障时闭合I0.3手动/自动切换旋钮手动时闭合I0.4启动按钮常开I0.5停止按钮常闭I0.6液位低报警常开液位低时闭合I0.7急停常闭Q0.01号泵工频接触器控制工频运行Q0.12号泵工频接触器控制工频运行Q0.23号泵工频接触器控制工频运行Q0.31号变频器启动通过中间继电器给变频器DI1Q0.42号变频器启动同上Q0.53号变频器启动同上Q0.6报警指示灯24VQ0.7蜂鸣器24V这里要特别解释一下“IO映射”。热词里有人问“200smart PLC io映射是把输入和输出点都映射吗”在200 SMART里IO映射通常是指把物理输入输出点的状态复制到V存储区或者M存储区方便程序里统一调用。比如在程序开头用一段代码把I0.0到I0.7复制到VB100Q0.0到Q0.7复制到VB101。这样做的好处是第一如果硬件接线改了只需要改映射程序不用翻遍整个程序改点第二可以在触摸屏上直接监控VB100看输入状态不用一个个查I点第三方便做仿真测试。但IO映射不是必须的200 SMART的I点和Q点可以直接在程序里用。对于小项目直接使用I/Q点更简洁。这个项目因为点数不多我没有做完整的IO映射只在故障处理和状态机里用到了I点和Q点。但如果你做的项目点比较多建议做IO映射维护起来会轻松很多。接线的时候有几个注意点第一变频器的故障输出继电器是干接点接到PLC的输入点PLC的输入公共端接24V所以故障闭合时输入点得到24V这在200 SMART里是源型输入没问题。第二工频接触器的线圈电压是220V AC所以PLC的输出点不能直接驱动需要通过中间继电器转换。Q0.0到Q0.2控制中间继电器中间继电器的常开触点再去控制接触器线圈。第三变频器的启动信号也是通过中间继电器因为G120C的DI1是24V电平PLC的Q点输出是24V可以直接接但为了隔离我还是加了继电器。第四模拟量信号的屏蔽线要单端接地接在PLC的模拟量模块接地端子上不能两端接地否则会形成地环路干扰。3.2 变频器通讯Modbus RTU与CRC校验三台G120C变频器通过RS485总线连接A接AB接B屏蔽层接PLC的接地。PLC端口0的3脚是BRS485-8脚是ARS485这个在200 SMART的说明书里有。变频器侧的端子号要查G120C手册一般是29和30。总线两端各有一个终端电阻开关拨到ON中间那台拨到OFF。程序里用MBUS_CTRL指令初始化端口0模式选1Modbus波特率19200奇偶校验选2偶校验超时设1000ms。然后每个扫描周期调用一次MBUS_CTRL。接着用MBUS_MSG指令轮询三台变频器。MBUS_MSG的参数从站地址1到3读写类型0读或1写地址是Modbus寄存器地址数据个数数据指针。我一般把读和写分开先读三台变频器的状态和电流再写频率给定。轮询的时候要注意同一时间只能有一条MBUS_MSG指令使能否则会冲突。我的做法是用一个计数器每200ms切换一次从站轮流读写。读回来的数据存到不同的V存储区然后做量程换算。热词里有人问“s7 200smart crc校验码程序”其实Modbus RTU的CRC校验是由MBUS_MSG指令自动完成的不需要自己写。但如果你用自由口通讯自己组Modbus帧那就需要写CRC校验程序。CRC16的计算过程是预置一个16位寄存器为0xFFFF然后对每个字节与寄存器异或再循环右移8次每次如果移出的位是1就与0xA001异或。最后得到的值就是CRC。200 SMART的自由口通讯例程里通常会有这个子程序。不过对于这个项目用MBUS_MSG就足够了没必要自己写CRC。还有一个点G120C的Modbus寄存器地址和实际的参数号有对应关系。比如控制字是40100对应参数P2080不是具体要查G120C的Modbus映射表。如果写错了地址变频器没反应但也不报错就是不动。我调试的时候先用变频器面板手动启动确认变频器本身没问题再用Modbus控制。如果Modbus没反应就检查从站地址、波特率、校验位、终端电阻最后检查寄存器地址。通常问题都出在从站地址和波特率上。3.3 HMI画面设计与上位机数据读取触摸屏用的是威纶通TK6071iQ通过以太网和PLC连接PLC的IP设192.168.2.1触摸屏设192.168.2.2。画面主要分三个主监控画面、参数设置画面、报警记录画面。主监控画面显示当前压力大字体、设定压力、三台泵的运行状态变频/工频/停止、每台泵的输出频率和电流、当前系统状态单泵/双泵/三泵/睡眠、总运行时间。还有三个手动启动按钮用于检修时单独启停某台泵。参数设置画面可以修改设定压力、PID的Kp和Ti、加泵延时、减泵延时、睡眠频率、睡眠延时、轮换时间。这些参数存在PLC的V存储区掉电保持。修改后立即生效方便现场调试。报警记录画面显示最近的报警信息比如变频器故障、液位低、压力传感器断线等。报警发生时触摸屏弹窗提示同时PLC的Q0.7输出蜂鸣器响。上位机数据读取方面热词里有人问“西门子200smart 模拟量上位机怎么读取”。如果上位机是组态王或者WinCC可以通过OPC或者Modbus TCP读取。200 SMART本身不支持Modbus TCP但可以通过串口服务器把Modbus RTU转成TCP或者用PLC的以太网口走S7协议。最简单的方式是用一个支持S7协议的OPC服务器直接读V存储区。如果要用C#或者C自己写上位机可以用S7.Net或者Sharp7库直接读写V区。热词里还有“c#连接西门子opc”和“intouch跟西门子1500通讯”这些虽然和200 SMART不完全一样但思路是通的先建立通讯连接然后按地址读写。这个项目目前没有接上位机但预留了V存储区的数据地址后面如果要接中控室直接读对应的V区就行。3.4 调试步骤与现场记录调试这个项目花了三天。第一天接线第二天调试变频器和模拟量第三天调PID和泵切换逻辑。第一天接线的时候我犯了个小错误把压力变送器的24V电源和变频器的24V电源混在一起了结果变频器一启动压力信号就跳。后来把压力变送器的电源单独用一个开关电源信号屏蔽线单独接地问题就解决了。所以接线的时候模拟量信号和变频器动力线一定要分开走线槽不能平行走更不能捆在一起。第二天先调试模拟量。用手操器给压力变送器加压看PLC读到的数值对不对。0MPa时应该是55301.0MPa时应该是27648。实测0MPa时55401.0MPa时27620误差在允许范围内。然后调试变频器通讯用MBUS_MSG读变频器的输出频率对比变频器面板显示确认通讯正常。再测试写频率给定给30Hz变频器实际输出30.1Hz正常。第三天调PID。先把系统切手动启动一台泵手动调频率找到能把压力稳定在0.35MPa的频率大概是37Hz。然后切自动PID参数先给Kp0.8Ti60s。观察压力曲线上升很慢大概40秒才到设定值。把Kp加大到1.2Ti减到45s上升时间缩短到25秒超调0.01MPa稳定后波动±0.008MPa。这个参数就定下来了。接着调泵切换。手动模拟用水量增大慢慢打开出水阀门看压力下降。当压力降到0.33MPa变频泵频率跑到50Hz10秒后系统自动把1号泵切工频启动2号泵变频。切的过程中压力瞬间掉到0.30MPa然后2号泵频率迅速上升压力在5秒内恢复。这个切换冲击在可接受范围内。减泵的时候关小阀门压力上升到0.38MPa30秒后停工频泵压力回到0.35MPa附近。整个切换过程没有出现压力震荡。调试的时候我用了一个小工具在触摸屏上做了一个“手动加泵/减泵”按钮方便测试切换逻辑不用真的去开关阀门。这个按钮在正式运行时隐藏调试时显示。4. 常见问题与排查技巧实录4.1 压力波动大、震荡怎么办压力震荡是恒压供水最常见的问题表现是压力表指针来回摆变频器频率忽高忽低。原因通常有三个PID参数不合理、压力变送器安装位置不对、变频器加减速时间太短。先说PID参数。如果震荡周期很短几秒钟一般是Kp太大或者Ti太小。解决办法是减小Kp增大Ti。这个项目我试过Kp2.0Ti20s结果压力在0.34到0.36之间来回摆周期大概3秒。把Kp降到1.2Ti升到45s震荡就消失了。如果震荡周期很长几十秒可能是Ti太大积分作用太慢系统反应迟钝。这时候适当减小Ti。再说压力变送器的安装位置。变送器最好安装在出水总管上靠近水泵出口但不要直接装在泵的出口弯头上因为那里水流紊乱压力波动大。最好有一段直管段变送器装在直管段上。还有变送器的引压管不要有气囊要排空。我见过一个现场变送器装在管道顶部管道里没满水有空气压力读数一直跳。把变送器改到管道侧面就正常了。变频器的加减速时间也很关键。G120C的默认加速时间是10秒减速时间也是10秒。对于供水泵加速时间可以设短一点比如5秒减速时间要设长一点比如15秒。因为减速太快会导致压力骤升PID来不及反应。这个项目我把加速时间设6秒减速时间设20秒效果很好。4.2 泵切换时压力冲击与工频切换失败泵切换时的压力冲击主要发生在变频泵切工频的瞬间。因为变频器从运行到停止再到工频接触器吸合中间有几百毫秒到几秒的空档这时候泵不出水压力会掉。如果切换时间太长压力掉得太多用户会感觉到水压不足。解决这个问题的办法是在切工频之前先把变频器的频率降到0Hz然后自由停车等变频器输出接触器断开后立即合工频接触器。关键是“立即”中间不能有延时。在PLC程序里变频器停止信号发出后用一个定时器延时0.5秒然后输出工频接触器信号。同时另一台变频泵要在切工频的同时启动频率从50Hz开始往下调这样能快速补压。这个项目里从切工频到新泵启动间隔大概1秒压力最低掉到0.30MPa然后2秒内恢复到0.35MPa。工频切换失败的情况也有表现为接触器吸合了但泵不转或者接触器根本不吸合。原因可能是工频接触器和变频器输出接触器没有互锁导致变频器输出和工频电源短路变频器报故障。所以硬件上一定要做互锁变频器输出接触器的常闭触点串在工频接触器的线圈回路里工频接触器的常闭触点串在变频器输出接触器的线圈回路里。软件上也要互锁在PLC程序里输出工频接触器信号时先断开变频器输出接触器信号延时后再输出工频接触器。这个项目硬件互锁和软件互锁都做了没有出现过切换失败。4.3 通讯故障与模拟量干扰Modbus通讯故障的表现是触摸屏上变频器的数据不刷新或者显示“通讯错误”。排查步骤第一检查485总线的A、B线有没有接反。第二检查终端电阻有没有拨对。第三检查从站地址有没有重复。第四检查波特率和校验位设置。第五用示波器看485信号波形如果有明显失真可能是线太长或者干扰。这个项目三台变频器距离PLC最远的大概15米用普通双绞屏蔽线通讯很稳定。模拟量干扰的表现是压力读数跳动即使实际压力没变。原因通常是变频器动力线对模拟量信号的电磁干扰。解决办法模拟量信号线用屏蔽双绞线屏蔽层单端接地信号线和动力线分开走线最少距离20厘米。如果还是干扰可以在模拟量输入端并联一个0.1微法的电容或者用信号隔离器。这个项目一开始压力读数跳得厉害后来把信号线单独穿管远离动力线问题就解决了。热词里有人问“西门子200自由口通讯例程”这个项目的Modbus RTU其实也是基于自由口的一种协议但用MBUS_MSG指令简化了。如果要用自由口自己写协议那就需要处理字符接收、超时、CRC校验比较麻烦。建议能用库指令就用库指令别自己造轮子。4.4 常见问题速查表问题现象可能原因排查方法解决措施压力显示负值模拟量通道设成0-20mA而变送器是4-20mA检查系统块模拟量配置改为4-20mA或重新计算量程变频器不启动Modbus从站地址错、波特率不对、终端电阻未拨用变频器面板手动启动确认硬件正常检查通讯参数统一从站地址、波特率、校验位拨终端电阻压力震荡PID参数不合理观察震荡周期调整Kp和Ti减小Kp增大Ti或增大减速时间泵切换时压力掉太多切工频切换时间太长检查变频器停车时间、接触器吸合时间变频器自由停车接触器立即吸合新泵同时启动通讯时断时续485线接反、干扰、线太长检查A/B线用示波器看波形交换A/B线加终端电阻用屏蔽双绞线模拟量跳动动力线干扰检查信号线是否远离动力线信号线单独穿管屏蔽层单端接地泵频繁启停睡眠阈值太窄死区太小观察睡眠和唤醒的压力值增大睡眠延时和唤醒压差故障后无法复位故障未清除或复位按钮接线错检查变频器故障代码检查复位输入点清除变频器故障正确接线5. 项目扩展与个人经验杂谈5.1 从3托3扩展到多泵恒压供水的思路三托三这套逻辑稍微改一改就能扩展到四台泵、五台泵。核心思路是一样的每台泵配一台变频器PLC维护一个可用泵列表根据压力偏差决定加泵减泵通过运行时间轮换。扩展到多泵的时候注意几个点第一PLC的模拟量输入通道要够压力变送器还是只需要一路但变频器通讯的从站数量增加轮询周期会变长要确保轮询周期小于500ms否则PID响应会变慢。第二接触器和中间继电器的数量增加控制柜体积要留够。第三泵的功率如果超过15kW变频器最好用带制动单元的防止减速时过压。如果不用每台泵配变频器也可以做“一托多”的方案一台变频器带多台泵通过接触器切换哪台泵接到变频器上。这种方案成本低但切换时泵会停一下压力冲击大而且变频器故障了所有泵都不能变频运行。所以对于要求高的项目还是3托3这种一托一更可靠。以后如果这个小区要接入智慧水务平台可以在200 SMART上加一个以太网模块或者用串口服务器把Modbus RTU转成TCP让上位机读取数据。热词里提到的“西门子1200 UDP组播”和“昆仑通泰触摸屏怎么导西门子DB块数据”这些是更高级的应用但对于一个泵房来说目前的数据量用200 SMART的V存储区就够了。5.2 我在这个项目里踩过的几个坑第一个坑变频器的Modbus寄存器地址搞错了。G120C的Modbus寄存器地址和MM440不一样我一开始按MM440的地址写结果频率给定写不进去。后来查了G120C的通讯手册发现频率给定的寄存器地址是40101而MM440是40101其实MM440也是40101但控制字地址不一样。所以换变频器型号的时候一定要重新查寄存器映射表不能凭经验。第二个坑PID的输出限幅没做。有一次调试的时候PID输出算出来是负值结果变频器收到负的频率给定直接报故障。后来在程序里加了限幅如果PID输出小于0就取0大于50就取50。这个虽然是基本功但忙起来容易忘。第三个坑工频接触器和变频器输出接触器的互锁。我在程序里做了互锁但硬件上没有串常闭触点结果有一次接触器卡住了两个接触器同时吸合变频器直接炸了。后来硬件互锁加上再也没出过事。所以电气互锁和软件互锁一个都不能少。第四个坑触摸屏的通讯线用了普通网线长度超过80米信号衰减严重触摸屏时不时掉线。后来换了带屏蔽的工业网线中间加了一个交换机就稳定了。工业现场网线质量不能省。这些坑说起来都是小事但每一个都让我在现场多待了好几个小时。干我们这行经验就是一个个坑填出来的。希望这篇分享能让你在遇到200smart恒压供水3托3项目的时候心里有底手上不慌。