去年接了个设施农田的智能灌溉项目,三百多亩地,客户提的需求很直接:自动浇水、现场能看到设备状态、出问题能报警,最好还能手动应急。我听完脑子里基本就有了框架——用三菱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~Y6:1号到6号灌溉区电磁阀
模拟量输入:
- CH1:1号区土壤湿度传感器,4-20mA
- CH2:2号区土壤湿度传感器,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写的,整体结构分主程序段、手动控制子程序和自动控制子程序三块。这样分的好处是后面改逻辑不会牵一发动全身,排查问题也清楚。
主程序里用M8002(PLC上电瞬间ON的特殊继电器)做初始化,把输出全部复位,同时将湿度上限、下限等参数初始写入D寄存器。之后就是一个循环扫描过程:先是采样模拟量并做滤波处理,然后根据X2的手自动状态跳转。
手动模式下,自动运行的保持寄存器全部清掉,防止切到手动时自动逻辑还在内部维持输出。自动模式下,手动按钮输入被屏蔽。逻辑上保证任何时候只有一种控制方式生效。
3.2 模拟量采集与工程量换算
土壤湿度传感器输出4-20mA,FX3U-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组态软件的开发流程,说白了三步:工程建好,设备连好,画面绑好。我用的触摸屏型号是TPC7062Ti,10寸左右,做灌溉画面足够了。
新建工程之后,最关键的步骤是设备窗口配置。我在设备窗口里先添加“通用串口父设备”,再在它下面添加“三菱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_BTN | M0 | 启动按钮 |
| TZ_BTN | M1 | 停止按钮 |
| SD_MODE | M2 | 自动模式允许 |
| HUMIDITY_1 | D100 | 1号区湿度(浮点) |
| HUMIDITY_2 | D101 | 2号区湿度(浮点) |
| PUMP_RUN | Y0 | 水泵运行状态 |
| VALVE_1 | Y1 | 1号区电磁阀状态 |
| ALARM_LOW | M50 | 液位低报警 |
| SET_H_LIMIT | D103 | 湿度上限设定 |
MCGS里添加设备通道时,要选好寄存器的读写属性。按钮类变量选读写,状态显示类选只读,参数设定类选读写。特别注意浮点数在MCGS和三菱D寄存器之间是怎么放的:三菱PLC里一个32位浮点数占两个D寄存器(比如D100和D101),MCGS通讯时通道地址填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组态的农田灌溉系统,稳定、易维护、好培训,才是农业现场真正需要的。