☰
基于S7-300 PLC与Wincc Flexible的温室大棚自动控制系统全解析
2026/10/19 11:00:34 网站建设 项目流程

干过温室大棚控制项目的朋友应该都有体会,这类项目看起来简单,无非是几个温度湿度传感器、几台风机水泵,但真正落地的时候,涉及的东西远比想象中多。前两年我帮一个做设施农业的客户改造旧温室,甲方原话是“帮我弄个自动控制,人在屋里点一下触摸屏就能开风机、开天窗”,最终我给的方案就是基于S7-300 PLC加Wincc Flexible触摸屏。这套组合放在今天虽然不是最新的技术,但胜在稳定、资料多、现场电工也熟,特别适合中小型温室的控制需求。如果你正准备接类似的活儿,或者在学校做相关的课题设计,这篇东西应该能帮你少走不少弯路。

我会从系统硬件选型、PLC程序架构、触摸屏画面组态、现场调试踩坑这几个维度来拆解整个项目,每一步都会讲清楚“为什么这么做”,而不是只给你一堆配置截图。

1. 温室控制项目的系统架构与硬件选型逻辑

1.1 从控制需求反推设备清单

温室大棚要控制的物理量其实就那几个:空气温度、空气湿度、土壤湿度、光照强度。对应的执行机构也无非是风机、湿帘水泵、灌溉电磁阀、补光灯、热风机或者卷帘电机。但正因为执行机构种类多、分布散,才需要PLC做集中控制,取代原来那种“一个温控器管一台风机”的分散模式。

我建议拿到需求之后,先画一张控制点表,把每一个输入输出点列清楚。拿我那个客户的项目举例,一个5000平米左右的连栋温室,分了4个控制分区,每个分区大概有:

  • 温度传感器2路(PT100,测空气温度)
  • 湿度传感器1路(4-20mA变送器,测空气湿度)
  • 土壤湿度传感器1路(4-20mA,测基质水分)
  • 光照传感器1路(0-10V,测光合有效辐射)
  • 风机接触器1路(大风机,降温用)
  • 湿帘水泵接触器1路
  • 灌溉电磁阀1路
  • 补光灯接触器1路
  • 卷帘电机正反转各1路(开关天窗)

这样算下来,一个分区大概需要模拟量输入5路、数字量输入若干(接触器反馈、手自动转换开关)、数字量输出5路左右。4个分区加起来,模拟量输入20路、数字量输出20多路。这个规模用一台S7-300加扩展模块绰绰有余,没必要上海洋系列的冗余系统,也别想着用S7-1200硬扛——不是说1200不行,而是甲方指定的就是300,而且很多老温室里已经用了300的CPU,维护备件能通用。

1.2 S7-300模块选型与信号接入规划

S7-300的CPU我选的是CPU 314C-2PN/DP,原因很简单:自带Profinet口,触摸屏可以直接走以太网连接,不用再配CP343-1通信处理器,省掉一块不小的成本。如果你手头只有老款CPU 315-2DP,那也没关系,后面触摸屏通信那里我会讲怎么用MPI或者DP口来连。

模拟量这块要重点说。温度传感器用PT100的话,直接进SM331 RTD模块。但如果温室比较大、传感器线拉得远,RTD的三线制接线方式必须严格按端子图来,线阻不一致会导致温度偏差很大。我那个项目用的是SM331 AI8x12位,其中4个通道组态成RTD,另外4个通道组态成4-20mA,用来接湿度和光照变送器,一个模块就把模拟量全包了。选型的时候注意订货号后面带不带“0AB0”这种后缀,不同后缀的通道组态方式略有差异,组态前要看手册。

数字量模块SM321和SM322是常规选择,输入用24VDC直流输入,输出用继电器输出——温室里风机、水泵的接触器线圈电流大,而且全是感性负载,PLC晶体管输出直接带容易烧点,继电器输出更皮实。每一个输出点我都建议在PLC和接触器之间串一个中间继电器,电流隔离一下,日后哪个接触器吸合不良直接换继电器,不用拆PLC端子。

电源规划也是很多人忽略的点。传感器用DC24V供电,PLC模块的L+也要DC24V,但这两路最好分开:传感器电源用一个独立的24V开关电源,PLC电源用另一个。因为变频器、接触器吸合时电网冲击很大,共用电源时传感器信号容易跳变。而且模拟量信号线必须用屏蔽双绞线,屏蔽层在PLC柜内单端接地,另一端悬空,这个习惯能帮你省掉后面调干扰的无数时间。

2. S7-300程序的组织方式与控制逻辑

2.1 模拟量采集与工程量换算

S7-300的程序不是一把梭写在一个OB1里,那样后面维护的人会骂人。我的习惯是:OB1只做总调度,实际功能放在FC或者FB里。温室项目里至少要有三个核心块:一个FC做模拟量采集和工程量转换,一个FC做温湿度控制逻辑,一个FC做报警和联锁,中断OB35做周期采样和PID计算。

模拟量转换说起来就是一条公式:工程值 = 原始值 / 27648 × 量程上限(针对单极性0-10V或4-20mA)。S7-300标准库里的FC105(UNSCALE)就是干这个的,输入IN接模拟量原始值,HI_LIM和LO_LIM设成量程上下限,BIPOLAR选择单极性还是双极性。但我要提醒一点:FC105转换出来的是实数,给触摸屏显示没问题。如果后面还要做PID或者阈值比较,建议把关键测量值单独存到一个数据块里,比如DB100的REAL变量,方便监控和调试。

实际项目里我更推荐自己写小白公式加滑动平均滤波。温室的传感器信号本身变化缓慢,完全没必要那种毫秒级的实时刷新,但现场变频器一启动,模拟量通道就容易出现毛刺。我的做法是:在OB35里每500ms采一次样,放到一个长度10的循环队列里,然后做算术平均。这样风机启动瞬间的毛刺基本被平均掉了。如果你用的是FC105,可以在FC105输出后面再接一个“平滑滤波”小程序——注意S7-300里没有直接的一阶惯性滤波块,得自己在OB35里用公式写:Y = Y + (X - Y) × K,K取0.2到0.3之间,效果等同于对一个惯性环节做指数平滑。

这里有个新手常犯的错:把传感器断线当成真实温度处理。PT100断线时SM331的原始值会跳到0或者满量程,如果逻辑里写的是“温度高于35℃开风机”,断线时就可能变成满量程而误开风机。所以模拟量采集块里一定要做断线判断,断线时把对应通道的“数据有效”位置0,控制逻辑看到无效值必须维持上一次输出状态,不能把风机全打开。

2.2 温湿度闭环控制:从开关控制到简化PID

温室控制的核心逻辑说穿了就是一组带滞回的比较器。设定温度25℃,不要写成“高于25开风机、低于25关风机”——这样风机会在设定点附近疯狂抖动,接触器一天吸合几百次,寿命直接报废。正确做法是设一个滞回区间,比如23℃到27℃:温度高于27℃启动风机,低于23℃停止风机。中间这4℃就是死区,风机不会频繁启停。这个逻辑我在每个控制分区都单独做了一份,参数放在DB块里,甲方在触摸屏上就能改。

很多刚从学校出来的工程师一上来就琢磨PID。但你想想,温室是什么系统?一个大惯性、大延迟、执行机构还是开关式风机的系统。PID输出是连续的,执行机构只有开和关,这中间需要一个脉冲调制或者阀门开度转换层,整定起来非常痛苦。我碰过不止一次,PID参数调节过程里温室温度像荡秋千,甲方看着曲线脸都绿了。所以我的建议是:先做带滞回的分段控制,能满足90%的应用场景。如果甲方非要精确控温,比如做花卉培育要求±1℃,那再上PID,在OB35里调用FB41,采样周期设2到5秒,比例增益从3开始往下调,积分时间设到300秒以上,微分直接关掉。同时给FB41的输出加一个变化率限制,防止执行机构突变。

湿度和温度实际上是耦合的:开风机除湿的同时会降温,开湿帘加湿降温的同时湿度会上升。所以在逻辑里必须有优先级关系。我用的策略是:温度高优先于湿度,先保证降温;湿度高于85%时即使温度达标也开通风风机,但湿帘水泵要禁止启动,防止越除越湿;土壤湿度控制反倒是独立的,低于下限开电磁阀滴灌,高于上限关闭,中间设滞回。这些逻辑听上去简单,真正调试时就会发现问题——比如湿帘开启后温度降得很快,但湿度瞬间冲到95%,如果你只盯着温度,风机和水泵就同时傻转了。

2.3 报警与联锁逻辑的组织方法

报警和联锁是温室控制里容易被低估的部分,但恰恰是甲方验收时最看重的。报警点一般包括:空气温度过高(比如超过42℃)、温度传感器断线、风机过载反馈、水泵过载反馈、采暖设备故障(如果有)、急停按钮被按下。每个报警点要有独立的位变量,产生报警时除了置位,还要在触摸屏上弹窗并记录时间。

报警在PLC里怎么传给Wincc Flexible?最简单的做法是:在触摸屏项目的报警组态里新建一个报警,触发条件选择PLC变量,比如“DB100.DBX0.0”。当这个位变成1时,画面报警视图会显示预设的报警文本。这个方法不用写SFC17/18那种复杂协议,够用且好维护。但你要记得,报警产生后必须存储时间戳,否则甲方问“几点报警的”你就得翻历史曲线猜——这块后面说触摸屏趋势的时候我会展开。

联锁逻辑必须硬。我项目里做过几个典型的联锁:湿帘水泵启动的前提是对应风机的运行反馈已经到位,避免只有喷水不通风导致棚内闷坏;补光灯只有在光照低于设定值时允许开,而且1分钟内不许反复启停;卷帘电机正转和反转之间要有至少3秒的互锁延时,防止切换瞬间电机憋死。这些联锁是写在PLC程序里的,不能依赖触摸屏的画面判断——触摸屏死机时PLC还得继续干活。

3. Wincc Flexible触摸屏的画面结构与企业需求

3.1 画面层次规划

触摸屏我选的是TP177B,配上Wincc Flexible组态环境。这个组合在Wincc Flexible 2008里做组态比较顺手,比后来博途里的Wincc Runtime Advanced还直观。画面布局我建议按“总览—分区—操作”三个层次来做,而不是把几十个变量塞进一屏。

我的习惯是:第一个画面是系统总览,把4个分区的温度、湿度用数字显示出来,底下用几个大色块显示每个分区的工作状态(自动/手动/报警)。第二层是每个分区的详细画面,显示这个分区的传感器数值、设备启停状态、设定值修改入口。第三层才是手动操作画面,每个设备一个按钮,带状态反馈灯,但进入这个画面需要操作员权限密码。为什么把手动操作藏这么深?因为实际运行中误触风险太大。我之前有个项目,操作工想清一下屏幕灰尘,手指划过触摸屏刚好碰到“风机启动”按钮,整个温室的降温风机瞬间全开,温度跌了5度,几十万的苗子受了冷害。后来所有设备级操作按钮全部加了弹窗确认,误触问题才算根治。

还有一种隐含需求是“远程盯数”的未来扩展。触摸屏本地显示只是第一步,后面甲方一定会问“我在家里能看温度吗”。所以我在Wincc Flexible工程里一开始就把数据归档的变量建好,后面接远程网关时直接取历史数据就能用,不用返工改项目。

3.2 变量连接、IO域与状态动画

Wincc Flexible里的变量分两类:外部变量连接PLC,内部变量只在触摸屏里用。画面上的IO域直接连接到外部变量,比如“DB100温度实测值”,显示格式选“s999.9”,小数位设成1,刷新周期选500ms。设定值输入框连接的变量比如“DB100温度上限设定”,输入下限和上限要组态上,防止操作工把上限输成99。

设备状态反馈用布尔变量做外观属性。风机运行时,按钮的背景色变绿;停止时灰色。这个“绿色运行、灰色停止”的约定要贯穿所有画面,不然操作工会懵。按钮的动作用“切换位”事件,连接对应设备的启动变量。但这里有个细节:按钮控制的位和PLC内部实际驱动输出的位要做成两个变量,中间隔一个PLC里的“运行允许”逻辑。操作工在触摸屏上置位“启动请求”,PLC判断当前没有报警、没有联锁条件不满足,才真正把输出点置位。这个设计是防止触摸屏误操作绕过了安全检查。

Wincc Flexible的“画面切换”也有讲究。底部导航按钮对应不同画面,用“激活屏幕”函数实现。画面切换时最好做成整体重绘,不要用“画面窗口”嵌套——画面窗口在TP177B这种低配屏上刷新慢,操作起来有明显的迟钝感。

3.3 报警记录与趋势曲线的实现

报警这块我要单独说一说,因为这是Wincc Flexible最容易做出来但做不漂亮的地方。首先是报警类别:我建了两类,“错误”类——设备故障、断线这类严重报警,必须红色高亮并确认前不能消音;“警告”类——温度偏高等运行告警,黄色显示,可以自动消失。报警控件放在专门的画面里,开启“记录到文件”,这样报警历史才能查询。

趋势曲线要特别提醒:Wincc Flexible中哪怕你在变量管理里建了变量,也必须在变量属性里勾选“记录”,才能被趋势控件采集。好多新手组态完趋势图发现是一条直线,就是忘了这一勾。记录周期默认1秒太频繁,温室温度变化本来就是分钟级的,我通常设5秒或者10秒,存储量足够用一周以上。趋势控件的Y轴范围可以绑定变量量程,X轴时间范围设成24小时,操作工能直接看昨天到今天的温度波动。这个功能对甲方来说特别直观,验收的时候你给他看一天的温湿度曲线,比讲十页Word文档都管用。

4. 现场调试的完整排查链路与设备维护要点

4.1 通信连不上的完整排查过程

触摸屏和PLC通信不上,是我接到求助最多的问题。完整排查链路是这样的:第一步看触摸屏自诊断,TP177B开机自检时如果右下角显示PLC图标闪烁,说明项目能下载但通信还没建立。第二步检查连接参数——Wincc Flexible项目树里找到“连接”,确认通信驱动程序选的是SIMATIC S7 300/400,以太网地址填对PLC的IP,机架号填0,插槽号填2(S7-300 CPU都在2号槽)。第三步用PC/PG接口测试,把同一台电脑的STEP 7项目里的硬件组态编译下载一次,确认PLC的IP地址没被改过。

一个我踩过好几次的坑:Wincc Flexible连接设置里的“访问点”名字,默认是“S7ONLINE”,但如果电脑上装了其他西门子软件,访问点可能被改成别的名字,导致下载程序正常但运行时通信失败。这个必须在控制面板里的“设置PC/PG接口”里看一眼,确保和项目里选的访问点一致。另外,触摸屏和PLC要在同一个网段,TP177B的IP在启动画面的“控制面板—网络”里改,改完必须断电重启——画面里点“保存”后右上角有个小对勾提示,很多调试员没等到对勾就断电,IP根本没写进去。

4.2 模拟量跳变的干扰处理

温室现场是电磁干扰的重灾区:变频器、接触器、电动阀全挤在一个配电柜附近。模拟量跳变的排障思路,我建议按“信号源—传输线—PLC通道”三段排查。先用万用表在PLC端子处量传感器输出信号,如果这个信号稳定而Wincc Flexible里看到的是跳变的,说明问题在PLC模块配置或接地。如果端子处量出来的信号本身就在晃动,那就要查传感器供电电源和线缆敷设路径。我之前遇到过湿度信号周期性跳动,跑现场发现信号线和变频器输出线绑在同一个线槽里走了一百多米,变频器一启动湿度就跟着抖。后来把信号线换到另一侧线槽,加了一根屏蔽层两端都接地(其实标准做法是单端接地,但现场干扰太强,做了试验两端接地效果反而好),问题解决。这里提醒一下,规则是死的,现场是活的,做试验用数据说话。

软件层面,如果你用了OB35滑动平均还是压不住,可以把采样时间拉长,或者加一阶惯性滤波。但别把滤波系数设得太狠——信号是稳了,反应也慢了,控制逻辑会变得懒洋洋的。传感器本身的选型也影响很大,温室湿度大的地方,探头结露会导致读数一直100%,看起来像是稳定了但其实是错的。建议湿度传感器选带防护套的,定期拿软布擦一下探头,校准周期半年一次。

4.3 参数保持、时间同步与数据安全习惯

调试完不是结束,设备维护习惯才是甲方长期用得好不好的关键。S7-300断电后程序是保存在RAM里,靠CPU电池保持。如果设备长期停电、电池又没电了,程序会丢,最惨的是连硬件组态都没了,重新下载还得先从MMC卡恢复。所以养成习惯:程序调试完成后,把MMC卡插到CPU上,选项—复制RAM到卡,这样就算电池亏电,重新上电系统也能自举恢复。这个动作我在每个项目收尾时都做,成本忽略不计,但能避免很多半夜叫你去现场的糟心事。

触摸屏和PLC的时间同步值得专门强调。Wincc Flexible里可以设置触摸屏时间从PLC同步,时间源选PLC。不这么做的后果是:报警记录和趋势曲线的时间戳和真实时间对不上,甲方查记录时发现“今天凌晨3点报警”但当时明明没人,然后怀疑组态有问题,实际上是设备时间跑偏了。时间同步在设备设置里有个地方很容易漏——选完同步后要重新下载项目到触摸屏,而且触摸屏重启后才会生效。

最后再说一个坏习惯:项目改动一定要留版本备份。Wincc Flexible项目一发不可收拾地改版,今天改个报警文本,明天加个画面,后天调个设定值,不备份的话总有一版会改崩。我现在的做法是:每个版本号命名加日期,比如“温室控制_v20240518_hj”,保留最近5个版本,其他旧的删掉。PLC程序同样,用STEP 7的归档功能打包存放,连同触摸屏项目一起放网盘,甲方那边也留一份拷到U盘。这些看似琐碎的习惯,真正到了设备出问题、急需恢复现场的时候,能把返工时间从几天压缩到小时级。

说几句真心话

温室大棚控制这个项目,技术难度说不上高,但它特别考验工程师对各种细节的耐心。传感器怎么布点、线缆怎么走、触摸屏画面怎么分权限、报警哪级该响,每一个环节都能影响用户的实际体验。S7-300加Wincc Flexible这套方案,胜在可靠和老工程师都熟悉,哪怕是十来年的老设备,现场电工也多多少少会看梯形图。

如果你是第一次做这类项目,我建议先别急着上PID高级算法,把基础的滞回控制和联锁做扎实,把触摸屏做得让操作工觉得“我一打开就知道现在设备在干嘛、哪里不正常”,项目就已经成功一大半了。等到甲方提出精细控制需求,再一步步往里面加功能。我每次回访项目现场,看到温度曲线平稳、风机不频繁启停,触摸屏上报警记录干干净净,说实话比做十个新项目还有成就感。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询