ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于S7-200 PLC的绿地灌溉控制系统设计与实现

基于S7-200 PLC的绿地灌溉控制系统设计与实现 1. 为什么老掉牙的S7-200还能霸占绿地灌溉控制1.1 一个老旧平台在灌溉系统里反而合适很多人一看到S7-200就觉得是过气产品毕竟西门子现在主推的是S7-1200和S7-1500。但如果你去花木基地、小区园林、市政绿化工程转一圈会发现存量项目里S7-200和S7-200 Smart的占比依旧很高。原因说来也直白绿地灌溉的控制逻辑根本没有复杂到需要上新一代PLC而S7-200的梯形图、定时器、模拟量处理又恰好够用加上市面上二手模块、扩展模块存量巨大一台二手的CPU224XP花几百块就能到手比买个树莓派加一堆继电器还稳。我做这个项目时选型逻辑很简单灌溉系统通常分布在一个中等规模的绿地范围传感器数量不会特别多控制对象无非就是水泵、电磁阀、报警器属于典型的离散控制加少量模拟量采集。这种场合用S7-200不仅不落伍反而比1200更省事——STEP 7-Micro/WIN的梯形图编辑方式太经典了很多老工程师闭着眼都能写而且学生、现场技术员对它最熟悉出了问题随便找个老师傅都能上手排查。1.2 控制需求拆解真正常用到的只有20来个点在动手设计之前我习惯先把整个灌溉场景拆成控制需求而不是一上来就打开编程软件。以一块中等面积的绿地为例控制需求大致是这样的手动/自动切换检修时手动开泵、开阀日常运行靠自动。自动定时灌溉每天早上、傍晚各浇一轮每个分区轮流浇避免同时开阀导致水压不够。湿度反馈控制土壤湿度低于下限自动启动高于上限自动停止不能单纯依赖定时。保护条件下雨天停灌、蓄水池低水位停泵、急停优先。报警功能泵故障、传感器断线、低水位等异常时发出声光报警。把这套需求翻译成PLC信号算下来不超过20个I/O点其中还有一半是输入按钮和传感器。S7-200的CPU224XP自带14个数字量输入、10个数字量输出还自带2路模拟量输入和1路模拟量输出整块CPU几乎可以独立扛下小面积灌溉项目。如果绿地面积大、分区多、湿度传感器多就加一块EM231模拟量扩展模块所有点位也都能覆盖。说白了这种项目不是选最先进的PLC而是选最合适的PLC。S7-200在这里性价比高、资料多、代码容易移植这就是它站住脚的根本原因。1.3 整体硬件方案我最终采用的硬件配置如下这套配置比较典型也方便后面按图接线、按表编程序号设备型号/规格用途说明1PLC CPUCPU224XP AC/DC/RLY220V供电继电器输出自带2路模拟量输入2模拟量扩展EM231 4AI扩展4路4-20mA电流输入接湿度传感器3触摸屏Smart 700 IE可选显示湿度、阀门状态设定参数4土壤湿度传感器4-20mA两线制测量各分区土壤湿度5雨感开关常闭型雨量传感器下雨自动停灌6水位开关浮球式常闭触点蓄水池低水位保护7灌溉泵1.5kW-5.5kW三相泵通过接触器控制8电磁阀AC220V常闭电磁阀各分区管道通断9开关电源24V/2A给传感器和扩展模块供电这里有一个很重要的点CPU224XP自带模拟量输入是0-10V电压输入而市面上绝大多数土壤湿度传感器输出的是4-20mA电流信号。要想省掉额外转换模块最简单的做法是在传感器信号端并联一只250欧姆精密电阻把4-20mA变成1-5V再接入AIW端子。如果直接用EM231则可以设置成4-20mA输入省去电阻但要注意模块侧跳线设置和增益校准。这个细节后面接线部分会再展开也是现场最容易翻车的地方。2. 把灌溉需求翻译成信号IO分配的完整过程2.1 输入端把动作翻译成DI/AIIO分配是整个项目里最基础也最影响后续编程的一步。分配不好后面写程序时逻辑绕来绕去查线也痛苦。我的习惯是先在纸上把人机交互动作、现场传感器信号全部列出来再一个一个分配地址。输入部分我分了这么几类操作类手动/自动切换开关、手动启动按钮、手动停止按钮、急停按钮。保护类雨感开关、蓄水池低水位开关。状态类水泵过载热继电器触点、电磁阀状态反馈可选点位不够可以省略。模拟量类各分区土壤湿度传感器4-20mA。其中手动/自动切换我用单刀双掷开关接到I0.0启动和停止用自复位按钮分别接I0.1和I0.2急停采用常闭触点接I0.3常闭的好处是断线时PLC也能识别为急停动作符合安全惯例。雨感和水位开关同样采用常闭触点接线正常时回路导通触发时断开。这样即使传感器线缆被动物咬断系统也会自动进入保护状态比常开接法安全得多。2.2 输出端把结果翻译成DO输出侧相对简单核心是三样东西水泵启停、各分区电磁阀开闭、报警指示。需要注意的是S7-200的继电器输出触点额定电流虽然标称2A但不建议直接驱动大功率接触器线圈。我通常的做法是Q0.0驱动一只中间继电器再由中间继电器触点控制接触器线圈电磁阀如果功率不大且是AC220V线圈可以直接接在带浪涌吸收回路的输出点上但更稳妥的做法还是统一经过中间继电器。输出点预留几个方便以后接远程监控报警、绿色指示灯、蜂鸣器等。输出地址一旦分配好后面写程序时Q0.x就是一个固定的名词不要轻易改动。2.3 一张能直接抄的IO分配表下面是我在这个项目里最终确定的IO分配表可以直接抄到图纸和程序符号表里PLC地址注释信号类型说明I0.0SA1 手动/自动切换数字输入0手动1自动I0.1SB1 启动按钮数字输入手动模式启动I0.2SB2 停止按钮数字输入手动模式停止I0.3SB3 急停按钮数字输入常闭触点I0.4RAIN 雨感开关数字输入常闭触点闭合无雨I0.5LV 低水位开关数字输入常闭触点闭合水位正常I0.6FR 热继电器触点数字输入常闭触点闭合泵正常I0.7预留数字输入备用AIW0BEM231通道0模拟输入A区土壤湿度AIW2BEM231通道1模拟输入B区土壤湿度AIW4BEM231通道2模拟输入C区土壤湿度Q0.0KA1 水泵启动中间继电器数字输出控制接触器KM1Q0.1KA2 A区电磁阀数字输出A区灌溉Q0.2KA3 B区电磁阀数字输出B区灌溉Q0.3KA4 C区电磁阀数字输出C区灌溉Q0.4HL1 报警指示灯数字输出故障报警Q0.5HL2 运行指示灯数字输出任一阀门开启时点亮Q0.6预留/蜂鸣器数字输出备用这里需要注意如果分区数量更多比如6个区、8个区输出点就不够用了。我见过两种扩展思路一是加一块EM222继电器输出扩展模块二是用分组选通分区选通的方式比如3组×3区共9个区只需6个输出点加少量中间继电器。第二种方式造价低但逻辑复杂毕设阶段建议用第一种简单可靠。2.4 模拟量通道选择4-20mA其实要多个心眼模拟量这块是新手最容易懵的地方。S7-200读取模拟量的方式是通过AIW地址读取AIW0对应EM231扩展模块的第一路模拟量输入AIW2对应第二路以此类推。CPU224XP自带的模拟量输入则固定占用AIW0和AIW2如果扩展了EM231地址会往后顺延实际操作时以模块站地址通道地址为准。我在这里踩过一次坑用CPU224XP自带模拟量输入接4-20mA传感器时没接250欧采样电阻直接把信号线接到端子上结果PLC读到的一直是0。后来查手册才想起自带输入是0-10V电压型电流信号必须配电阻转换成电压信号。另外两线制4-20mA传感器的供电通常要与传感器串联构成回路24V正极接传感器正极传感器信号线接EM231的电流输入端子EM231内部采样电阻构成回路同时模块还需要在端子通道间跳线设置为电流输入模式。接线前一定先看模块上盖的接线图别凭直觉乱接。3. 接线图和原理图落地三条回路的走法3.1 主回路泵与保护接线图原理图这类图纸很多人在毕设里画得乱主要是没有把回路分开。我设计时的思路是分成三条回路主回路、控制回路、信号回路图纸分三张画现场接线也分三组做。主回路就是水泵的强电回路三相电源进线先经过断路器QF再进接触器KM1的主触点出线端接热继电器FR1FR1的出线接水泵电机。这中间断路器负责短路保护热继电器负责过载保护接触器负责远程启停。FR1的常闭辅助触点接到PLC的I0.6作为故障输入这样热继电器跳闸后PLC不但能切断泵输出还能触发报警。水泵功率1.5kW以下可用接触器直接控制功率再大一些记得把主回路电缆截面和断路器额定电流按电机功率核算不能只盯着PLC选型。这一块没有太多技术含量但是最涉及人身和设备安全必须画清楚、接牢靠。3.2 控制回路PLC输入侧连接控制回路里PLC的输入侧接线逻辑是这样的PLC输入公共端1M接24V负极源型输入或24V正极具体取决于你用的是PNP还是NPN传感器。对这个项目来说按钮和开关触点都是无源干接点我用源型接法即公共端接24V负极触点另一端接24V正极触点闭合时PLC输入点收到24V高电平。实际接线时开关量输入点前串联的保险管或1A熔断器也建议加上防止现场误接强电烧坏CPU输入端子。别嫌麻烦S7-200输入口虽然比一些日系PLC皮实但也经不起220V误触。急停按钮一定要用常闭触点接入I0.3程序设计里I0.3常开触点串联在所有输出回路中。一旦急停被按下输入点断开程序立即复位所有输出泵和电磁阀全部断电这是必须遵守的逻辑。3.3 传感器与执行器接线DI/DO背后的硬件细节传感器和执行器接线是图纸中信息量最大的部分。湿度传感器这块我用的是EM231扩展模块4-20mA输入方式。EM231端子最左一侧是模块供电端子需要接DC24V中间部分是各通道输入端子两线制传感器接线方式是24V正极→传感器正端传感器负端(信号)→EM231通道正端EM231通道负端与24V负极共地。电磁阀执行器侧我统一通过中间继电器过渡。中间继电器线圈由PLC输出点控制线圈两端并联RC吸收或续流二极管防止断电瞬间产生反向电动势干扰PLC输出触点。S7-200继电器输出触点本身有寿命限制动作频繁时更要注意触点电弧加RC吸收能明显延长触点寿命。4. 梯形图核心逻辑手动、自动、保护三层架构4.1 符号表先行给每个点起个人话名字编程之前先建符号表这个习惯能省很多事。S7-200的STEP 7-Micro/WIN里可以给每个地址起符号名后面梯形图里显示的就是符号名而不是I0.0、Q0.1这种裸地址。我在符号表里把IO分配表的内容填进去再补充一些内部软元件比如M0.0是手动运行标志M1.0是灌溉请求标志M3.1到M3.5是自动轮灌步骤标志VW100存放湿度下限设定值VW102存放湿度上限设定值。符号表建好之后编程就像写注释一样看得懂也改得了。下面我只挑最核心的几个程序块展开讲每个网络都给出梯形图逻辑描述和逐条解释方便直接搬到STEP 7-Micro/WIN里画。4.2 手动模式的梯形图与解释手动模式的目的是检修和局部灌溉逻辑尽量简单直接。网络结构如下第一行LDN I0.0手动模式A I0.1启动按钮O M0.0自保持AN I0.2停止按钮 M0.0。这段的意思是当切换开关在手动档按下启动按钮后M0.0置位并自保持按停止按钮则M0.0复位。手动模式下M0.0运行与否不受湿度、雨感影响但急停、低水位保护仍然有效。第二行LD M0.0AN I0.3急停正常AN I0.5低水位正常 Q0.0。这段驱动水泵中间继电器同时保留急停和低水位保护。手动模式开启后泵先启动管路压力建立。第三行LD M0.0AN I0.3 Q0.1。手动默认打开A区电磁阀。如果需要选择B区或C区可以在IO点富裕的情况下增加一个阀选择开关把选择信号接到其他输入点再分别控制Q0.2、Q0.3。解释要点手动模式其实是半自动因为保护条件还在。这也是我一贯的观点手动模式不等于把自己全裸暴露在故障风险里泵长时间空转对机械密封伤害很大所以低水位保护在手动模式也要保留。4.3 自动模式的双触发来源自动模式的启动来源有两条路定时触发和湿度触发两者是或的关系哪个先满足都能发起灌溉请求。定时触发的实现是这样利用100ms定时器T37做一个24小时时钟每过一秒钟VW20的值加1一天86400秒然后用两个比较指令判断时间是否到达早上6点和傍晚18点到达后置位一个定时灌溉标志VW110.0。湿度触发的实现是取三个分区湿度模拟量的平均值当平均值小于VW100湿度下限时认为土壤偏干置位湿度灌溉标志VW110.1。自动模式总逻辑网络如下条件说明I0.0切换开关在自动档I0.3急停未触发I0.4无雨雨感闭合I0.5水位正常低水位开关闭合I0.6泵热继电器未跳闸VW110.0 或 VW110.1定时到点 或 湿度偏低以上条件全部成立时置位M1.0灌溉请求标志。一旦进入轮灌流程就根据轮灌步依次打开各区电磁阀。灌溉完成后复位M1.0同时复位定时灌溉标志和湿度灌溉标志。这里要重点解释一下为什么用M标志而不是直接用输出点灌溉请求是条件泵和阀门的实际输出还要经过保护链、轮灌步、延时等逻辑直接拿条件去驱动输出会让程序散成碎片后面排查时非常痛苦。先置位一个中间标志再在主输出逻辑里引用这个标志是梯形图编程里最常用的解耦手段。4.4 保护链必须断在逻辑最上游保护逻辑是我在这套程序里最看重的一段。雨感、低水位、急停、热继电器跳闸任何一路异常都要能停掉整个灌溉流程而不是只停掉泵或只停掉阀。实现方式就是在自动流程的源头做总开关。我把所有保护条件串联成一个网络输出为M2.0自动流程允许标志LD I0.0 // 自动档 A I0.3 // 急停未触发 A I0.4 // 无雨 A I0.5 // 水位正常 A I0.6 // 泵热继电器正常 M2.0 // 自动运行允许M2.0可以看作自动流程的总闸后面所有自动状态步、泵启动、阀启动都要串入M2.0的常开触点。这样的好处是新增保护条件时只需要在这一处网络里加一个触点不用去改下面几十个网络。所有保护条件汇聚到一个点逻辑上非常清晰。我在实际调试中还遇到过一种隐蔽情况雨感装上之后一直处于断开状态查了半天才发现是雨感控制器工作电压和现场24V电源不匹配。所以保护输入不是接上线就行还要在监控表里实时查看每个保护输入点的状态确认逻辑电位符合预期。5. 梯形图核心逻辑模拟量处理与分区轮灌的带解释网络5.1 数字滤波网络AIW采集不再是裸数据湿度传感器的4-20mA信号虽然抗干扰能力比电压信号强但现场的泵启停、电磁阀吸合瞬间还是会在模拟量通道上叠加毛刺。如果直接用AIW原始值做比较会出现湿度数值来回跳、频繁启停泵的情况。我处理模拟量的方式是在梯形图里加一道简单的滑动平均滤波。实现思路每次扫描周期读一次AIW0累加到VD100同时计数器VW110加1当VW110达到10次时用累加值除以10得到平均湿度存入VW120然后清零累加器和计数器开始下一轮采样。由于一个扫描周期只有几十毫秒这10次采样也就是一两秒内完成的对土壤湿度这种变化缓慢的对象来说完全够用。换算公式也要提前算好4-20mA对应PLC读数0到32000土壤湿度0%到100%。VW120的值除以320再乘以100就是当前湿度百分比。我一般在触摸屏里做这个换算PLC内部直接比较VW120和VW100下限设定、VW102上限设定的原始值不换算成百分比少一次除法运算梯形图也更省。5.2 分区轮灌用步标志代替复杂移位轮灌是这个梯形图程序里最有含金量的部分。基本逻辑是灌溉请求M1.0成立后泵先启动等2秒水压建立然后打开A区阀浇满设定时间后关A区开B区再关B区开C区全部浇完后停泵结束本轮。我没有用复杂的字节移位指令而是用了经典的步标志写法用5个中间继电器分别代表5个状态步步标志含义执行动作M3.1泵启动延时步开泵T37延时2秒M3.2A区灌溉步开A阀T38延时5分钟M3.3B区灌溉步开B阀T39延时5分钟M3.4C区灌溉步开C阀T40延时5分钟M3.5结束收尾步停泵延时3秒后复位M1.0以M3.1切M3.2为例梯形图网络是这样的网络A区灌溉启动 LD M3.1 A T37 // 2秒延时到 AN M3.4 // 防止步序错乱 S M3.2, 1 R M3.1, 1解释当M3.1处于激活状态且T37延时到达后复位M3.1并置位M3.2A区开始灌溉。M3.2到M3.3的切换同理只不过把定时器换成T38延时时间按A区实际浇灌时长设定。这种写法的好处有两个一是每个步骤的标志位在监控表里一眼就能看到当前处于哪一步排障简单二是步与步之间的切换条件非常显式不存在位移位溢出这类隐性bug。缺点是程序行数多一点但对S7-200来说这点量完全不是问题。5.3 定时灌溉链T37定时器与分钟级累计S7-200的T37是100ms分辨率的定时器用它做分钟级延时非常顺手。100ms分辨率意味着设定值3000刚好是300秒即5分钟。我在程序里把每个分区的灌溉时间设定都放在VW200、VW202、VW204里比较指令直接拿VW200和T37的当前值比较这样修改灌溉时长不需要改程序只需要在触摸屏或监控表里调整数值就行。这里必须提醒一个S7-200定时器的典型问题TON定时器的使能端一旦断开定时器当前值会清零。在自动流程里如果某个保护条件瞬时抖动把M2.0断开了一下正在计时的T38会立刻归零等保护恢复后灌溉时间重新从0开始导致某区浇水时间变长。解决思路有两种一是把保护条件对定时器使能端的影响消除用TONR保持型定时器替代TON但TONR复位麻烦二是确认保护触点没有抖动必要时在保护输入点加时间过滤。我在实际项目里选择第二种方式利用S7-200输入滤波功能把雨感、低水位这类开关量的滤波时间设成6.4ms或12.8ms把瞬间抖动过滤掉既保留了TON的简洁性又避免了误停。5.4 故障报警与远程信号输出报警网络相对简单但有一个细节很值得说报警条件不能只写热继电器跳闸和传感器断线还要把轮灌超时加进去。轮灌超时的含义是灌溉请求M1.0已经置位超过某个时间比如2小时但流程步标志始终没有走到结束步说明管路可能堵塞、电磁阀故障或传感器失灵此时置位Q0.4报警提示维护人员到场检查。报警网络LD M1.0 A T50 // 2小时超时定时器到 S Q0.4, 1 // 保持报警为什么报警用S置位而不用普通输出线圈因为普通线圈在条件不满足时会自动断开报警一闪而过根本看不清。置位之后报警会一直保持直到维护人员按停止按钮复位。复位逻辑网络LD I0.2 // 停止按钮 R Q0.4, 1 // 复位报警6. 上电调试与现场踩坑实录6.1 模拟器能跑通和现场能跑通是两码事把程序写完先用STEP 7-Micro/WIN的软件模拟器跑一遍确认逻辑正确这当然是必须的。但我看到很多人在这一步就觉得项目完了结果一到现场通电各种问题全冒出来。第一个常见问题CPU的RUN/STOP开关没打到RUN位置或者没下载成功程序根本没跑起来。S7-200 CPU状态指示灯就三个PWR常亮只是有电RUN亮才是运行中现场经常有人看到PWR灯亮就说PLC正常其实程序压根没下载进去。第二个问题CPU224XP继电器输出触点是DC24V还是AC220V取决于你接的公共端。有人把不同电压接到同一个输出分组里通电瞬间输出触点粘连甚至起火。我看图纸时特别注意每组输出的公共端标注这个问题必须在一开始就避免。第三个问题模拟量模块跳线设置和程序不匹配。EM231模块侧跳线拨到4-20mA程序里也按4-20mA换算但模块量程卡位置拨错导致读出来的数值整体偏移。上电后第一件事就是打开状态表监控AIW值和实际湿度计比对误差超过3%就要重新校准。6.2 现场最容易出的三类问题结合我在这个项目里实际遇到的故障可以归纳成三类高频问题第一类是触点抖动。启动按钮、停止按钮如果直接用普通线圈自保持按键瞬间触点抖动会导致自保持逻辑偶尔失灵现象就是按了启动没反应再按一次又好了。处理办法是在程序里用上升沿指令|P|捕捉按钮动作或者用S/R置位复位指令代替自保持输出从逻辑层面消抖。第二类是电磁阀关电瞬间的反向感应电压干扰24V传感器信号。我在每个电磁阀中间继电器线圈两端并联了RC吸收回路同时把信号线和动力线分开走线槽间隔至少20公分以上。走线问题看起来像玄学实际上是模拟量跳变最直接的原因电源线、接触器出线、传感器信号线绑在一起湿度读数不跳才怪。第三类是触摸屏与PLC通信中断。Smart 700 IE触摸屏通过PPI协议和S7-200通信通信参数波特率、站地址必须一致。有人把触摸屏地址设成了2PLC站地址也是2两条主人设备互相冲突画面就会反复掉线。把触摸屏站地址改成1PLC保持2问题就消失了纯属低级但高发。6.3 扩展与触摸屏/上位机的通讯预留虽然题目只要梯形图和接线图但我还是建议在项目初期就预留通讯接口。S7-200的编程口除了下载程序还可以走PPI协议连接触摸屏或者通过自由口模式转发Modbus RTU给上位机。如果你做的是毕设触摸屏画面能显示实时湿度、各分区阀门状态、灌溉剩余时间整体答辩效果会好很多也显得系统完整。预留做法很简单PLC的Port0口用一根PPI编程电缆连接到触摸屏COM口波特率设为187.5kbps或9.6kbps协议选PPI。如果以后要接上位机软件把自由口协议程序加进去Port0或者Port1都可以用两个口互不干扰。通讯这块代码不多但能在后续系统升级时省掉重新布线的成本属于典型的一次预留、长期受益。这台设备我做完交付之后用户用了大半年没出过逻辑问题后来找到我的时候说的是电磁阀有点漏水说白了已经超出PLC控制范围了。S7-200这套系统能够稳定运行这么长时间靠的并不是什么先进算法而是把基础的IO分配、接线规范、保护逻辑这些基本功做扎实了。基本功到位一个老掉牙的PLC照样能把绿地灌溉这种实际需求伺候得明明白白。
返回列表