
去年接了个设施农田的智能灌溉项目三百多亩地客户提的需求很直接自动浇水、现场能看到设备状态、出问题能报警最好还能手动应急。我听完脑子里基本就有了框架——用三菱PLC做控制中枢配一台MCGS触摸屏当现场操作界面。这套组合在中小型农业项目里非常成熟比纯继电器电路灵活比上位机加组态软件省钱维护门槛也低。项目从选型、编程到现场调试前后忙了一个多月现在运行了快一年整体很稳定。今天把整套系统的设计思路、梯形图逻辑、MCGS组态过程和现场踩过的坑整理出来给准备做类似项目的朋友一个参考。1. 需求分析到方案定型为什么是PLC加触摸屏而不是纯单片机1.1 传统灌溉到底差在哪里做方案之前我先跟客户去田里转了两天。他们原来的灌溉方式很原始水泵房有人值守到点去开泵几个大棚轮流浇水全凭经验判断土地干不干。问题非常明显一是浪费水很多时候地已经浇透了还在漫灌水费电费都白搭二是费人工尤其在夏天半夜还得起来改阀门三是怕停电、怕水泵空转设备坏了也不容易及时发现。这其实就是农业自动化的典型痛点。解决思路不复杂用传感器感知土壤湿度PLC根据湿度自动控制水泵和电磁阀触摸屏用来显示数据、修改参数、切换手动自动。整个系统做到“自动为主、手动兜底”。1.2 系统总体架构三个层级划分我把整个系统分成三层这样后面不管是画图纸还是写程序脑子里都特别清楚。层级设备职责传感器层土壤湿度传感器、液位开关、热继电器采集湿度和关键状态信号控制层三菱FX3U PLC、模拟量模块、中间继电器、接触器逻辑判断、执行控制、保护联锁监控层MCGS触摸屏显示数据、参数设置、报警提示、历史曲线控制层是整个系统的心脏PLC负责所有逻辑判断MCGS触摸屏通过编程口和PLC通信既能显示湿度、阀门状态这些信息也能下发指令。1.3 为什么选三菱FX3U和MCGS这个组合选型的时候也考虑过别的方案比如单片机加显示屏或者直接用组态软件加采集模块。最终定三菱加MCGS原因有三。第一三菱FX系列PLC在农业和中小型设备里用得非常多指令直观梯形图编程上手快现场电工多少都见过后期维护不会抓瞎。FX3U的可靠性在这种温差大、灰尘多、偶尔有人不小心碰到接线的环境里是经过验证的。第二MCGS组态软件价格亲民控件丰富做画面效率高下载和修改也方便。触屏本身稳定还能存历史数据。用上位机组态系统比如WinCC加采集卡虽然功能更强但成本翻好几倍对农田灌溉这种场景属于杀鸡用牛刀。第三PLC和触摸屏用编程口通信一根线就搞定不需要额外写通信协议MCGS里设备驱动都是现成的。这对交付周期很有利。2. 硬件选型与IO分配点表比图纸更重要2.1 先把整套系统的IO点数理清楚很多新手一上来就画接线图我的习惯是先做IO点表。点表是PLC项目的地基地基歪了后面全歪。这个项目我按客户需求理出的点数如下。数字量输入X0启动按钮常开X1停止按钮常闭X2手动/自动切换开关X3水塔液位下限开关低液位时闭合X4水泵热继电器过载信号常闭数字量输出Y0水泵接触器Y1~Y61号到6号灌溉区电磁阀模拟量输入CH11号区土壤湿度传感器4-20mACH22号区土壤湿度传感器4-20mA预留备用点也留了输入输出各留了8个点方便后面扩展气象站、水肥机什么的。2.2 PLC主体和扩展模块怎么选IO点算下来约15个数字量加2路模拟量我选了FX3U-32MR/ES。这是一款自带16输入16输出的继电器输出型PLC继电器输出适合直接控制接触器和中间继电器触点容量比晶体管输出大抗冲击也更好。虽然晶体管输出响应快但驱动电磁阀这种感性负载继电器型更皮实。模拟量这块FX3U本体没有模拟量输入需要加扩展模块我选了FX3U-4AD。这是一款4通道模拟量输入模块支持4-20mA、0-10V等信号默认设置下4-20mA对应数字量0~4000正好满足两路湿度传感器的需求。选它还有个原因4AD模块自带光电隔离对现场干扰有一定抑制作用。电源配置上有个容易忽视的问题PLC自带的24V输出不能带太多负载。我这套系统里DC24V电磁阀加上中间继电器工作电流接近1.5A所以额外配了一个明纬24V/5A开关电源专门给电磁阀和继电器供电PLC自带的24V只给传感器供电。这样两边互不干扰也能避免其中一个负载短路把PLC供电拉崩。2.3 传感器和执行机构选型土壤湿度传感器选的是4-20mA电流环输出的不锈钢探针式传感器。选电流输出而不是电压输出是因为电流信号抗干扰能力强传输距离几十米没有问题。量程选的0到100%体积含水量埋深30厘米正好是作物根系主要分布区。液位用浮球开关装在蓄水塔里低液位时触点闭合给PLC一个信号。水泵是7.5kW三相异步电机通过接触器控制热继电器做电流过载保护。电磁阀是常闭型DC24V电磁阀断电自动关阀这样即使系统故障断电管路也不会一直跑水。2.4 接线图的几个关键细节点表确认后我画接线图时重点处理了几个细节。PLC数字量输入共用一个COM端24V电源的负极接COM传感器和开关信号接对应的X端子。停止按钮用常闭触点接X1这样线断了或者按钮坏了系统会默认停止安全优先。输出侧Y0接接触器线圈但中间串了中间继电器。所有电磁阀也是 PLC输出点先驱动中间继电器再由中间继电器触点去控制电磁阀。这样做的原因是PLC继电器输出触点直接接感性负载时分断瞬间的反电动势容易拉弧时间长了触点会烧坏。中间继电器线圈两端还反向并联了一个续流二极管吸收断电时的反向电压。这个细节务必加上能大大延长继电器触点寿命。模拟量信号线用屏蔽双绞线屏蔽层在PLC这端单端接地。动力线和信号线分开走线槽间隔尽量在30厘米以上防止动力侧启停干扰模拟量信号。3. 梯形图设计湿度判断、轮灌逻辑和各类保护3.1 程序框架主程序加两个子任务梯形图程序我是用GX Works2写的整体结构分主程序段、手动控制子程序和自动控制子程序三块。这样分的好处是后面改逻辑不会牵一发动全身排查问题也清楚。主程序里用M8002PLC上电瞬间ON的特殊继电器做初始化把输出全部复位同时将湿度上限、下限等参数初始写入D寄存器。之后就是一个循环扫描过程先是采样模拟量并做滤波处理然后根据X2的手自动状态跳转。手动模式下自动运行的保持寄存器全部清掉防止切到手动时自动逻辑还在内部维持输出。自动模式下手动按钮输入被屏蔽。逻辑上保证任何时候只有一种控制方式生效。3.2 模拟量采集与工程量换算土壤湿度传感器输出4-20mAFX3U-4AD模块默认将其转换为数字量0~4000。要显示成湿度百分比必须做工程量换算。换算公式很简单实际湿度 采集数字量 / 4000 × 100%。比如当前数字量是2200湿度就是55%。我在程序里用浮点运算指令DEBN等处理这个换算计算完再放回D寄存器。模拟量滤波这里要重点说。现场用水泵一启动电压波动、动力线耦合都会让采集值跳变。我一开始直接用实时值做判断结果水泵刚启停那两秒湿度值能蹦出五六个百分点。后来在程序里做了滑动平均滤波每隔100毫秒读一次模拟量通道连续读20次求和后除以20作为当前值。测试下来效果非常明显数字量波动从正负50压到正负5以内。滤波时间常数也不用太大太大了会造成滞后阀门响应迟钝。3.3 自动灌溉核心逻辑湿度下限开、上限停自动灌溉逻辑是我整个程序的核心。客户设定每个区域的湿低下限和上限比如下限45%、上限65%。当1号区湿度低于下限时PLC打开1号区电磁阀同时启动水泵当湿度回升到上限以上时先停止水泵延时几秒后关闭电磁阀保证管道里的水能停稳。实际梯形图里我用了区间比较指令ZCP。先把湿度换算值放在D100把下限D102和上限D103作为比较区间比较结果对应三个状态低于下限、在区间内、高于上限。三个状态分别驱动不同的内部继电器后续逻辑就清晰多了。水泵和电磁阀的动作顺序有个细节水泵启动前先检查是否有至少一个电磁阀处于打开状态。这样做的目的是避免水泵在出口阀全关的情况下启动造成憋压和水锤。停机顺序反过来先停水泵再延时关闭电磁阀。虽然这个系统只有六个分区但这个习惯养成了后面做几十个分区的项目也稳。3.4 手动/自动切换与互锁保护手动模式是为了应急和调试。切换开关X2打到手动位时面板上手动按钮直接控制Y0到Y6。这部分的梯形图逻辑就是简单的按钮上升沿置位、停止按钮复位不做任何自动判断。但这里必须加互锁保护否则自动逻辑可能从背后“偷偷”执行。做法是在自动模式输出链路里串联X2的常闭触点手动模式输出链路里串联X2的常开触点同时在两个模式之间用M量互锁——自动模式激活时手动模式内部继电器全部复位。保护逻辑还包括水塔液位下限X3闭合时不管手动还是自动一律禁止水泵启动已经在运行的话立即停泵Y0复位。防止水泵空转烧坏机械密封。热继电器过载X4断开时同样强制停泵并且置位过载报警M50。系统刚上电或程序复位时所有输出必须先复位延时2秒后才允许投入自动状态。这些保护条件在梯形图里的位置其实是讲究的必须放在输出控制的最后端也就是无论前面的自动/手动逻辑怎么组合最终输出继电器Y0能否得电都要经过保护条件这一关。3.5 报警和状态记录报警用M量做比如液位低报警M50、过载报警M51、自动模式传感器断线报警M52。传感器断线这个报警要单独说4-20mA的信号如果线路断了电流会变成0对应数字量也变成0。但0可能被当成“土壤干透”处理导致系统误浇水。所以我在程序里加了一个检测数字量低于50就认为是断线不进自动判断同时触发断线报警。运行时间统计用三菱FX3U的累计计时特性通过特殊寄存器辅助把水泵运行的总时间累计到D200寄存器里供客户做维保参考。MCGS画面里可以直接显示这台泵已经跑了多少小时。4. MCGS组态开发通讯配置、变量绑定和画面设计4.1 建工程和选设备MCGS组态软件的开发流程说白了三步工程建好设备连好画面绑好。我用的触摸屏型号是TPC7062Ti10寸左右做灌溉画面足够了。新建工程之后最关键的步骤是设备窗口配置。我在设备窗口里先添加“通用串口父设备”再在它下面添加“三菱FX系列编程口”驱动。串口参数设置成9600波特率、8位数据位、偶校验、1位停止位这和FX3U编程口默认参数一致。连接线直接用MCGS配套的三菱编程线一头接触摸屏COM口另一头接PLC的编程口简单可靠。这一块我提醒一下MCGS的“三菱FX系列编程口”驱动默认操作的是PLC内部的M、D、X、Y软元件地址是十进制形式的和梯形图软件里看到的M0、D100一样不需要额外换算但要注意X和Y在编程口通信里看到的是八进制软元件号。输入点X0到X7对应地址可以直接填X0、X1超过X7就要小心别填错成X8那是不存在的。4.2 实时数据库变量与PLC地址的映射关系MCGS的实时数据库是组态和PLC之间的桥。我在里面建的变量大概有这些变量名关联设备通道说明QD_BTNM0启动按钮TZ_BTNM1停止按钮SD_MODEM2自动模式允许HUMIDITY_1D1001号区湿度浮点HUMIDITY_2D1012号区湿度浮点PUMP_RUNY0水泵运行状态VALVE_1Y11号区电磁阀状态ALARM_LOWM50液位低报警SET_H_LIMITD103湿度上限设定MCGS里添加设备通道时要选好寄存器的读写属性。按钮类变量选读写状态显示类选只读参数设定类选读写。特别注意浮点数在MCGS和三菱D寄存器之间是怎么放的三菱PLC里一个32位浮点数占两个D寄存器比如D100和D101MCGS通讯时通道地址填D100数据类型选浮点它会自动按高低字节组合读取。这个不对的话显示出来的湿度值会是几万甚至乱码一看就是数值解析错了。4.3 主画面设计思路MCGS画图的原则不是花哨而是清晰。主画面我用素材库里的农田背景画一条简单的水管走向图管道上对应位置放六个分区阀门图标。湿度数字直接用“标签构件”关联HUMIDITY_1、HUMIDITY_2变量单位是%。电磁阀和水泵的状态用指示灯构件表示运转时变绿停止时灰白故障报警时变红闪烁。按钮部分用标准按钮按下时写PLC变量值1松开时写0。在MCGS里这个动作是在按钮的“按下”和“弹起”事件里分别写动画连接实现的这个要记得做不然PLC收不到完整的按钮脉冲。参数设定窗口单独做一页或者用用户窗口切换实现。湿度上限下限用“输入框构件”绑定SET_H_LIMIT变量客户可以在触摸屏上直接改PLC程序里用MOV指令传给D103实时生效。4.4 报警、历史曲线和数据存盘报警不用自己画灯泡闪MCGS有现成的报警显示构件。我把M50、M51、M52这些报警变量加到报警配置里设置报警优先级和文字说明。出现报警时画面自动弹报警窗口提示是液位低还是过载。直到现场解除故障人工确认后报警状态才恢复。历史曲线对客户很有吸引力。MCGS里有实时曲线和历史曲线构件把湿度1、湿度2接进去设定采样周期60秒可以看到一天内湿度变化的全过程。配合历史数据存盘策略把湿度、水泵状态按整点存盘月底能导出来做灌溉分析。存盘策略这块我在设备窗口里建了一个周期性策略每600秒把需要记录的变量存一次历史数据库。MCGS的存盘文件在触摸屏里会自动循环覆盖容量不用太担心。4.5 模拟运行和现场联调画面做完建议先用MCGS自带的模拟运行功能跑一遍。模拟环境里可以手动给变量赋值检查画面动画、报警是否正常跳转。这块能查出一大堆变量名拼写错误、构件没绑对的问题。真正联调时先把PLC程序下载好再连接触摸屏。第一次连上后打开MCGS的“设备调试”窗口能看到实时读到的PLC寄存器值。如果显示通讯正常再试几个关键读写操作。我习惯先读Y0状态再在触摸屏上按启动按钮看PLC程序里对应的M0有没有置位。通讯正常的话这一步马上就能验证。5. 现场接线与调试从信号干扰到通讯故障的排查5.1 模拟量信号干扰湿度值乱跳第一次联动试运行时静态测试都好好的。水泵一启动MCGS画面上的湿度值就开始乱跳幅度大到能触发误浇水。我第一反应是模拟量线路受干扰了。用万用表在传感器端测量4-20mA电流水泵不启动时信号很稳水泵一启动电流就在跳。检查发现施工队把模拟量信号线和动力电缆走在同一个线槽里而且屏蔽层在传感器端和PLC端都接了地形成了地环路。处理办法分两步。一是把模拟量线重新单独走管信号线和动力线间距拉开到30厘米以上二是屏蔽层改成PLC端单端接地另一端悬空。另外我在PLC输入侧加了一个信号隔离器把传感器的4-20mA信号隔离后再进FX3U-4AD。这样处理后水泵启动的瞬间湿度波动从正负50压到正负3以内程序里的滑动平均滤波再兜底完全满足使用。5.2 电磁阀直接接PLC输出导致触点烧结这个坑是在第二批货发出去之后客户才反馈的。问题表现是PLC的Y0指示灯亮但水泵接触器不吸合。现场打开发现PLC内部继电器触点表面有一层烧蚀的痕迹触点黏连了。原因不复杂电磁阀线圈是感性负载断电瞬间会产生很高的反向电动势虽然PLC继电器输出有一定的分断能力但频繁通断感性负载会大大缩短触点寿命。而我在第一批接线图里已经把中间继电器加上了客户收到的第二批产品里施工人员为了省事把电磁阀直接接到了PLC输出点上。解决办法是重申接线规范所有电磁阀、接触器线圈都必须经过中间继电器中转。中间继电器线圈两端用续流二极管反向并联把断电反电动势引入二极管续流保护继电器触点。整改后到现在没再出过同类问题。5.3 触摸屏与PLC通讯偶尔中断运行了大概两周客户反映触摸屏偶尔提示“设备通讯失败”持续几秒又自己恢复。这种偶发问题排查起来最耗时间。我先检查通讯线接头发现触摸屏端DB9接头焊点有虚焊用手稍微晃一下线就断断续续。重新处理好接头后用了两天没问题。但第三天又出现一次。后来我在PLC这边加了一个FX3U-485-BD通信板和触摸屏改用RS485通信距离拉远也不怕而且抗干扰能力比编程口强。程序改动不大MCGS设备驱动换成“三菱FX3U-485”对应驱动通信参数保持一致故障彻底消失。5.4 MCGS工程下载和版本兼容问题开发交付过程中还遇到一个软件层面的问题我在开发电脑上用高版本MCGS组态软件建的工程下载到客户另一台老款触摸屏时提示工程格式不兼容界面完全打不开。解决方法是把整个工程备份后用与触摸屏固件匹配的旧版MCGS重新编译。这里提醒做项目交付的朋友工程文件版本要和目标设备固件版本对应下载前先查设备型号和系统版本。如果触摸屏已经在线可以在MCGS运行环境里查看版本号。别等到了现场才发现打不开耽误工期。6. 项目交付后的几点经验6.1 程序注释和交付文档比程序本身更重要这套系统运行稳定后我把梯形图全套加上详细注释每个网络对应哪个功能、哪个地址对应哪个阀门、修改哪个D寄存器对应触摸屏哪个参数全部写清楚。客户那边的电工拿到注释后的梯形图自己能看懂七八成后面改分区、调整湿度上下限都不用再找我。GX Works2里每个网络都可以写注释。我习惯在每个程序段开头加一个总注释说明这段实现什么逻辑再给每个关键线圈加注释。MCGS工程里同样是这个思路每个变量要有中文描述画面上的每个构件也要命名规范不然后期维护的人根本猜不到“D210”是什么意思。6.2 预留扩展能力别把IO和程序写满做项目时手里一定要留余量。像这次PLC的模拟量模块只用了2路还有2路空着数字量输入输出各留了8个备用点程序里专门留了空的子程序区标注好“预留气象站扩展”“预留水肥一体机”。后来客户果然说要加一套小型气象站把雨量、风速接进来联动灌溉。因为我预留了模拟量通道和空余程序段加个模块、写几十行梯形图就搞定了完全不用拆柜子换PLC。6.3 给客户做培训时的几个重点项目交付时我到现场给客户和电工做了半天培训。重点讲了三个事一是怎么在触摸屏上修改湿度上下限告诉他们这个参数平时最常用二是什么时候切手动模式、怎么操作强调手动模式下报警保护依然有效水泵不会干转三是遇到“系统没反应”先看什么——先看触摸屏通讯状态再看有没有报警提示最后再看手动模式能不能动泵用排除法定位问题。培训完我还留了一张简单的故障排查表贴在配电柜门里。表格列了常见故障现象、可能原因、处理办法比如“触摸屏显示通讯失败——检查通讯线两端接头”“水泵不启动但无报警——检查液位浮球是否卡住”。客户遇到小问题自己就能处理也减少了很多售后电话。这套系统从交付到现在运行将近一年客户最大的感受是再也不用来回跑水泵房了遇到下雨天系统也能根据湿度自动停灌。我做项目这些年最大的体会是自动化方案不是越复杂越好像这种基于三菱PLC和MCGS组态的农田灌溉系统稳定、易维护、好培训才是农业现场真正需要的。