
干过温室大棚控制项目的朋友应该都有体会这类项目看起来简单无非是几个温度湿度传感器、几台风机水泵但真正落地的时候涉及的东西远比想象中多。前两年我帮一个做设施农业的客户改造旧温室甲方原话是“帮我弄个自动控制人在屋里点一下触摸屏就能开风机、开天窗”最终我给的方案就是基于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标准库里的FC105UNSCALE就是干这个的输入IN接模拟量原始值HI_LIM和LO_LIM设成量程上下限BIPOLAR选择单极性还是双极性。但我要提醒一点FC105转换出来的是实数给触摸屏显示没问题。如果后面还要做PID或者阈值比较建议把关键测量值单独存到一个数据块里比如DB100的REAL变量方便监控和调试。实际项目里我更推荐自己写小白公式加滑动平均滤波。温室的传感器信号本身变化缓慢完全没必要那种毫秒级的实时刷新但现场变频器一启动模拟量通道就容易出现毛刺。我的做法是在OB35里每500ms采一次样放到一个长度10的循环队列里然后做算术平均。这样风机启动瞬间的毛刺基本被平均掉了。如果你用的是FC105可以在FC105输出后面再接一个“平滑滤波”小程序——注意S7-300里没有直接的一阶惯性滤波块得自己在OB35里用公式写Y Y (X - Y) × KK取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插槽号填2S7-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高级算法把基础的滞回控制和联锁做扎实把触摸屏做得让操作工觉得“我一打开就知道现在设备在干嘛、哪里不正常”项目就已经成功一大半了。等到甲方提出精细控制需求再一步步往里面加功能。我每次回访项目现场看到温度曲线平稳、风机不频繁启停触摸屏上报警记录干干净净说实话比做十个新项目还有成就感。