搞过PLC项目的都有体会照明控制看着不起眼做起来却一点不含糊。这次要分享的是一套基于S7-200 PLC的智能照明控制系统覆盖电路图、IO表、源程序和单机组态四个环节。系统的核心目标不是把一个灯做亮而是把照明从“人工按开关”变成“光照度、人体存在、手动优先三个条件自动决策”同时保留急停保护和故障报警。不管是电气自动化专业的学生、刚接触PLC的工程师还是要给车间、仓库、实验室做照明改造的维护人员这套方案都可以直接参考。S7-200系列虽然已经停产多年但存量设备、教学平台和备件市场都还非常常见其编程思路和梯形图习惯换到S7-200 SMART或者其他国产小型PLC上迁移成本也很低。我会把每一步的关键考虑都讲清楚包括为什么这么接线、为什么这么编地址、为什么定时器要用这个时基尽量让看完的人能照着画出图、写出程序、连上组态。1. 项目概述与方案设计1.1 需求拆解照明控制要管的不只是亮灭先别急着写IO表拿到需求先做拆解。这个项目的“智能”体现在哪里决定了后面所有的设计。实际使用场景中有几个很典型的问题。第一大房间的灯经常出现早班没人关、下班忘关的情况电费浪费是小事灯具长期点亮带来的寿命损耗才是大头。第二自然采光充足时靠人工判断是否开灯不同人的标准不一样结果就是灯乱开。第三走廊、卫生间这类区域开关不在手边人走灯亮一整夜既耗电又影响休息。把这些需求翻译成控制要求就是三件事支持手动和自动两种工作模式手动模式优先方便检修和特殊场景自动模式下只有“光照度不足”且“检测到人体活动”两个条件同时满足时才开灯人离开后延时若干秒自动关灯避免频繁启停也给后续的人留一点余量。在此基础上再加上急停、故障指示和远程监控画面就是一个完整的小型智能照明系统。这个需求水平对应一个中型房间或者小型车间很合适点数不算多但控制逻辑五脏俱全。1.2 选型逻辑为什么选S7-200系列PLC这类项目选PLC我一般从三个维度考量点数是否够用、输出类型是否匹配负载、编程软件是否方便调试。S7-200系列在这个场景下很合适。S7-200的CPU224是一个很经典的选择本体自带14个数字量输入和10个数字量输出对于本项目的输入信号6个、输出信号5个的需求IO点数绰绰有余还预留了充裕的备用点。S7-200的AC/DC/继电器型号传感器电源由本体DC 24V输出提供输出侧是继电器干接点可以直接切换接触器线圈不用再单独配置中间继电器转接层。CPU224最多可以扩展7个模块就算以后增加模拟量光照传感器、增加区域数也不需要换主机。说到和S7-200 SMART的对比不少新工程师会有疑惑。S7-200的原版编程软件是STEP 7-Micro/WINSMART系列用的是Micro/WIN SMART。指令体系上TON、CTU、子程序这些基本一致但SMART在通信组态上更顺手支持网口。如果是从零开始的全新项目直接选SMART会更方便如果是教学、备件维护或者老系统改造继续用S7-200完全没问题。本文的程序用原版Micro/WIN编写一套逻辑换到SMART上基本不用大改。1.3 整体控制流程与系统架构整个系统分成三层看会清晰很多。信号层包括启动按钮、停止按钮、急停按钮、模式选择开关、光照传感器和人体红外传感器。控制层是S7-200 CPU224负责读取输入、执行逻辑、输出结果。执行层是照明接触器、运行指示灯、故障指示灯和蜂鸣器。控制流程大致是这样模式开关选择手动时按下启动按钮照明输出置位并自保持按下停止按钮或急停后断开输出。切到自动模式时系统先判断光照度光照不足且检测到人则输出照明人离开后启动延时定时时间到则关闭照明。无论什么模式急停按钮都优先切断输出而且急停还要做硬接线回路不依赖程序。这个架构看着简单但需要注意两个容易忽略的点。第一手动和自动之间要有互锁逻辑避免两个模式的输出同时生效。第二照明输出的保护不能只靠程序急停按钮必须串联在接触器线圈回路里这样就算PLC程序跑飞也能直接切断负载电源。2. 电路图与IO表设计2.1 IO表完整规划输入信号与输出回路的地址分配IO表是整个项目的地基。我见过不少初学者上来就把程序写得很漂亮结果IO表没规划好地址乱串最后调试两天都找不到问题。正确做法是开工之前先把地址表定死。输入信号规划如下地址符号名设备触点形式功能说明I0.0SB1启动按钮常开手动模式启动照明I0.1SB2停止按钮常闭手动模式停止照明I0.2SL1光照传感器常开光照度不足时信号为1I0.3PIR1人体红外传感器常开检测到人体活动时信号为1I0.4SA1模式选择开关常开闭合为自动模式断开为手动模式I0.5SB3急停按钮常闭按下时输入断开触发急停输出信号规划如下地址符号名设备功能说明Q0.0KM1主照明接触器控制照明主回路通断Q0.1KM2应急照明接触器备用回路预留Q0.2HL1运行指示灯照明输出时点亮Q0.3HL2故障指示灯故障时闪烁Q0.4HA1蜂鸣器故障时报警这里有两个细节值得展开讲。停止按钮和急停按钮都用常闭触点目的是一致的如果信号线断路PLC读到的就是断开状态程序会默认执行停止或急停而不是让系统继续运行。如果用了常开触点做急停万一线路断掉而PLC毫不知情急停功能就成了摆设这是安全问题不是习惯问题。I0.2和I0.3用常开传感器输出是考虑了安全侧原则。正常情况下的开灯信号是光电传感器的导通信号光照不足这个条件本身是故障安全的因为如果传感器失效系统倾向于不开灯而不是灯光常亮。这一点要根据现场工艺判断不是所有场合都适用但照明场景下合理。2.2 主回路与控制回路接线细节IO表定了接线就顺理成章。S7-200 CPU224的AC/DC/继电器型号需要两组电源PLC本体电源AC 220V传感器电源DC 24V由PLC本体输出输出回路控制接触器线圈。电源进线回路断路器QF1引AC 220V进PLC的L、N端子同时从同一相线引出接触器线圈的控制电源。传感器供电从PLC的L和M端引出给光照传感器和人体红外传感器供电。这里要注意传感器总电流不能超过PLC本体DC 24V输出的容量CPU224的输出电流上限是300mA几个光电类传感器完全没有问题但如果后续要挂大量传感器就得额外配DC 24V开关电源。输入回路接线时S7-200的输入公共端是1M和2M。使用NPN型传感器时公共端接L信号线接输入端子传感器导通时把输入点拉低使用PNP型传感器时公共端接M传感器导通时向输入点送高电平。接法取决于传感器类型和PLC公共端的接法不能凭经验瞎配。我之前就遇到过现场把NPN传感器接到PNP接法的公共端上输入指示灯一直不亮查了半天最后发现是公共端接反了。动手前一定先确认自己手上的传感器输出类型。输出回路是照明控制的核心。Q0.0作为继电器输出点是一个干接点可以控制AC 220V的接触器线圈。具体接法是输出公共端1L接AC 220V的火线Q0.0端子接到接触器KM1线圈的A1端线圈的A2端接零线。当PLC让Q0.0导通时1L和Q0.0内部导通接触器得电吸合主触点闭合照明灯具通电。这里有一个经验必须提一下如果接触器线圈功率较大或者接触器数量较多尽量不要让PLC的继电器输出直接驱动多个接触器线圈。S7-200继电器输出触点容量通常能做到2A左右驱动一个普通接触器线圈问题不大但一旦同时吸合多个线圈启动电流叠加就可能烧触点。稳妥做法是先驱动中间继电器再由中间继电器触点驱动接触器线圈。成本不高后期维护成本低很多。2.3 电气保护、急停回路与抗干扰处理电路图里最容易出问题的不是功能的实现而是保护和抗干扰。急停回路的处理我坚持做硬接线。急停按钮SB3的常闭触点直接串联在接触器线圈的控制回路里不管PLC在什么状态、程序有没有执行到只要急停被人按下接触器线圈立即失电灯具马上熄灭。同时SB3的另一对触点接到PLC的I0.5输入让程序能检测到急停状态触发蜂鸣器报警。很多初学者只做了程序里的急停觉得程序里AN I0.5就够了忽略了硬件回路的独立保护。PLC死机、输出模块烧毁、程序跑飞这些情况一旦出现程序里的急停就完全无效硬件急停才能兜底。接触器线圈这类感性负载在断开瞬间会产生反向电动势如果不处理轻则干扰PLC输入信号重则击穿输出触点。正确做法是在接触器线圈两端并联RC吸收回路阻容吸收能显著降低浪涌电压。中间继电器线圈两端也可以并联续流二极管但要注意方向极性接反会短路。抗干扰方面强弱电要分开走线。传感器信号线和接触器动力线不能走同一个线槽至少保持一定间距。屏蔽线的屏蔽层单端接地不要在PLC侧和传感器侧同时接地否则会形成地环路。PLC的接地端子要和系统接地点可靠连接但不要和接触器、电机的接地混在一起不然大电流冲击会把地电位拉偏。3. 源程序设计与核心逻辑实现3.1 程序规划M区、V区与程序结构写程序之前先规划存储区这个习惯能让后期维护省掉一大半力气。S7-200的存储区分为I区、Q区、M区、V区等M区可以理解为PLC内部的中间继电器不对外接线只参与逻辑运算。本项目中对M区做如下规划地址符号名用途M0.0AutoMode自动模式标志位M0.1ManualRun手动运行标志位M0.2AutoLight自动照明输出标志位M0.3Fault故障状态标志位程序结构上分成四段模式选择逻辑、手动启停逻辑、自动照明逻辑、输出与报警逻辑。每段之间通过M区中间变量衔接不直接操作Q0.0之外的输出点这样逻辑脉络清楚排查也方便。这里要特别强调符号表的使用。Micro/WIN支持符号寻址可以在符号表里把I0.0定义成“启动按钮”把Q0.0定义成“主照明接触器”。编程时直接写符号名编译后自动映射到绝对地址。这个习惯对调试阶段帮助巨大状态表监控时看到的是“人体红外传感器”而不是I0.3脑子里不用再转换一遍地址。3.2 手动优先与自动联动的STL实现S7-200的编程语言有梯形图LAD和语句表STL习惯梯形图的人看着直观但语句表更适合文字表达逻辑。下面给出关键程序段的STL写法懂梯形图的人对照着也能还原出来。模式选择逻辑自动模式由模式开关I0.4决定急停时自动退出NETWORK 1 LD I0.4 AN I0.5 M0.0I0.4闭合时M0.0为1表示自动模式有效急停I0.5断开时自动模式同时失效。手动模式由I0.4断开自然决定不需要单独标志位。手动启停逻辑启动按钮I0.0按下后M0.1自保持直到停止按钮、自动模式或急停生效NETWORK 2 LD I0.0 O M0.1 AN I0.1 AN M0.0 AN I0.5 M0.1这个网络里最关键的是AN M0.0也就是自动模式生效时手动运行标志被强制切断。这样手动和自动之间形成互锁避免两个模式同时给输出送信号。很多人会忘记这层互锁结果自动模式下灯不灭手动也关不了查半天才发现是输出条件互相冲突。自动照明逻辑是自动模式下检测到“光照不足”且“检测到人”输出延时关断这个逻辑稍微复杂一点NETWORK 3 LD M0.0 A I0.2 AN I0.3 TON T37, 300 NETWORK 4 LD M0.0 A I0.2 A I0.3 O M0.2 AN T37 AN I0.5 M0.2先看NETWORK 3T37的使能条件是自动模式、光照不足、并且没有人。也就是说有人在的时候T37不工作。人一旦离开I0.3从1变0T37开始计时预设值300代表300个100毫秒也就是30秒。如果30秒内有人再次进入I0.3变为1T37的使能条件断开定时器自动复位重新计时照明保持输出。NETWORK 4是自动照明的输出。A I0.2和A I0.3同时满足时直接输出M0.2如果人还没走M0.2通过自身的O分支自保持AN T37负责在30秒延时结束后切断输出AN I0.5负责急停切断。整体运行效果是自动模式下光照不足且有人时灯亮人走30秒后灯灭期间若有人再进入则延时重新计算。这里有一个隐藏细节值得展开T37是100毫秒时基的定时器预设值300等于30秒。S7-200的定时器分为1毫秒、10毫秒、100毫秒三种时基具体用哪个定时器号决定了时基T37属于100毫秒适合0.1秒到几十秒的场合。这里有个坑一定要避开如果预设值写的是30那实际延时就只有3秒因为30乘以100毫秒等于3秒。很多新工程师会把预设值直接当成秒数写结果延时时间和预想差了十倍。3.3 定时器组态与人离开延时逻辑定时器的选择还影响程序刷新的表现。S7-200的定时器刷新机制1毫秒和10毫秒的定时器比较特殊通常在程序扫描中更新并不完全同步而100毫秒的定时器在每个扫描周期的开始统一更新一次行为最稳定适合普通的延场合。因此照明延时这类控制优先使用T37、T38这些100毫秒时基定时器。还要注意定时器的使能条件。很多人在自动模式里写TON的时候把I0.3取反作为一个条件这没问题但是如果直接把定时器放在NETWORK里且不做复位处理就会出现“人离开后定时器计时但是人一回来定时器马上复位”的意外。本项目的逻辑利用TON的特性使能条件断开时定时器自动复位所以人重新进入后T37自动清零这正好满足“重新计时人离开的30秒”的需求。不用额外写R复位指令程序更简洁。如果你希望逻辑更直观也可以把NETWORK 3改写成先检测I0.3的下降沿再启动T37这样只有人离开的那一瞬才开始计时后续不会因为光照条件变化反复触发。但这样需要额外占用M区地址保存下降沿状态逻辑更复杂对30秒延时来说收益不高所以我没有采用。3.4 编译下载与在线调试程序写完不等于结束。先在Micro/WIN里新建项目选择CPU型号为CPU224然后在符号表里定义IO符号再到梯形图编辑器里输入上面的网络。编译通过后用PC/PPI编程电缆连接PLC的Port0口设置通信参数下载程序把运行状态开关拨到RUN。第一次下载完不要急着合闸跑正式负载应该用状态表监控功能验证逻辑。在Micro/WIN的状态表里添加I0.0、I0.1、I0.2、I0.3、I0.4、I0.5、M0.0、M0.1、M0.2、Q0.0这些地址然后手动按动传感器或者短接对应端子看信号是否能正确翻转。这个环节要舍得花时间。我调试时习惯先强制M0.1为1观察Q0.0是否输出排除输出通道问题后再检查输入传感器。另外千万注意不要用强制功能长时间让Q0.0导通驱动接触器强制只是测试手段不是运行方式否则容易出现安全事故。4. 单机组态与监控画面设计4.1 通信组态PLC与HMI的变量映射“单机组态”这个词在实际项目里就是指用一台触摸屏或者PC组态软件和这一台S7-200 PLC组成独立监控单元。S7-200的通信口是RS-485使用PPI协议连接触摸屏时要在组态软件里新建一个连接选择S7-200 PPI驱动。通信参数必须和PLC一致。S7-200的Port0口默认站地址是2HMI侧站地址设为1波特率统一常用的有9.6kbps和19.2kbps这里选19.2kbps比较稳妥。如果PC组态需要用USB-PPI编程电缆或者CP卡通信线A、B端子不能接反否则直接超时。变量映射是组态和PLC程序的桥梁。在组态软件的变量表里建立如下对应关系组态变量对应PLC地址数据类型用途手动运行M0.1位显示手动运行状态自动照明输出M0.2位显示自动照明状态照明输出Q0.0位显示主照明接触器状态急停状态I0.5位显示急停是否被按下故障状态M0.3位显示是否处于故障报警状态运行模式I0.4位显示自动模式或手动模式组态里读I区没有任何问题但我不建议在组态画面里直接操作Q0.0进行远程开灯。直接在HMI写输出点是危险习惯万一画面误触、通信断线期间输出状态错误现场灯具就可能误动作。更安全的做法是如果要做远程启停在PLC程序里预留一个M位甚至V位作为“HMI远程启停”信号程序内部做条件判断后再驱动Q0.0。4.2 监控画面设计主画面、控制面板、报警与趋势组态画面的设计目标是让操作人员一眼看清当前照明系统处在什么状态。主画面可以放一个简单的平面示意图用矩形块模拟灯具位置矩形块的填充颜色绑定Q0.0灯亮时显示黄色灯灭时显示灰色。这个视觉效果比单调的状态文字直观得多。控制面板页面放模式当前值显示、手动启停按钮和状态指示灯。手动按钮绑定M0.1按下时M0.1置位PLC程序里的NETWORK 2自然响应。但要注意如果当前是自动模式M0.0为1NETWORK 2里的AN M0.0会切断手动运行也就是说HMI上的手动按钮在自动模式下按了也不会生效这是程序层面的互锁画面上最好也做一个联动提示当模式切换到自动时手动按钮置灰。报警页面绑定M0.3急停发生时报警行状态变为报警记录报警时间。如果项目还接了模拟量光照传感器数据趋势页面可以显示光照度的实时趋势曲线PLC的模拟量输入AIW0经过工程量转换后在组态里做线性标定显示成0到1000Lux的光照度数值。没有模拟量输入的话趋势页面也可以省略直接用数字量状态即可。4.3 通过组态实现远程操作的安全前提组态不只是画面好看安全前提要想清楚。远程操作照明系统和现场按按钮有本质区别操作人员人不在设备旁边看不到灯具实际状态因此必须做到三件事。第一画面中的操作按钮和真实PLC程序之间要有互锁逻辑自动模式下不能远程手动开灯手动模式下急停时也不能远程强制启动。第二画面要实时刷新不能依赖操作者主动刷新画面扫描周期设置到合理范围状态刷新时间不宜超过1秒。第三远程操作要有状态回读画面按钮按下后不能只显示按钮被按下的状态要显示PLC实际输出点的状态两者不一致时说明操作没有生效必须告警。我在这个项目里故意让组态画面成为“监”和“控”的结合体但控制功能全部走PLC程序内的M位组态只负责把人的意图翻译成PLC的输入条件。这样既保留了远程监控的便利又不破坏PLC作为安全控制核心的位置。5. 常见故障与排查技巧实录5.1 故障速查表现场调试和运行阶段故障几乎不可避免。把常见问题整理成速查表比翻说明书高效得多。故障现象可能原因处理方式PLC不在RUN状态CPU处于STOP、程序未下载或下载失败拨到RUN检查Micro/WIN是否下载成功输入信号灯不亮传感器电源没电、公共端接法不对、传感器损坏用万用表量L和M电压核对NPN/PNP接法PLC输出灯亮但接触器不吸合接触器线圈电源缺失、输出公共端1L没接火线、触点烧毁量线圈电压检查1L端子和Q0.0触点自动模式下灯不灭T37预设值写错、人一直没离开传感器区域、I0.3一直导通检查I0.3状态核对定时器预设值和时基手动模式切自动模式后灯突然熄灭又亮互锁逻辑缺失、M区标志位冲突检查NETWORK 2中AN M0.0是否存在触摸屏通信超时站号不一致、波特率不同、RS-485线A/B接反统一PPI参数核对通信线序PLC断电后程序或数据丢失电池没电、V区和M区保持范围没有设置更换电池在系统块设置保持范围写入EEPROM接触器吸合瞬间PLC重启感性负载浪涌过大、电源质量差、没加RC吸收接触器线圈并联RC吸收检查PLC供电回路这些问题的共同点是大多数故障都出在“假设错了”而不是“设备坏了”。比如通信超时第一念头不应该是怀疑触摸屏坏了而是检查参数是不是因为某次修改被重置了。5.2 排查思路先电源后信号先手动后自动排查故障的思路比具体操作更重要。我调试PLC项目遵从一个固定顺序先电源后信号先手动后自动先硬件后软件。先电源后信号指的是任何信号异常时不要急着查信号线先用万用表量电源。传感器没供电后续一切排查都白做。很多“接触器不吸合”的案例最后都是1L端子上的火线松了或者N线断在端子排里。先手动后自动是指把PLC切到手动模式用启动和停止按钮验证基础输出。手动模式能正常工作说明输出回路、接触器、电源都是好的问题在自动逻辑的传感器或者定时器部分。反过来如果手动模式灯都没反应直接去查自动逻辑就是浪费时间。先硬件后软件是指当PLC输出指示灯已经亮了但负载不动作时问题往往不在程序而在外部回路。程序逻辑错了通常表现为输出指示灯根本不亮输出灯亮了而负载不动大概率是触点容量、接线、公共端的问题。这个判断标准能让排查范围缩小一半。5.3 写程序的几条防坑总结写程序阶段有一些低级的错误属于不用踩坑直接规避的类型。双线圈问题是最常见的。同一个Q0.0如果在两个网络里分别用“ Q0.0”赋值最终输出状态由最后一个扫描周期执行的网络决定前一个网络的逻辑完全被覆盖。排查这种问题耗时极长因为程序表面看着都对实际输出却和逻辑不符。我写程序的原则是每个线圈只在一个网络里赋值其他网络只读取它的触点。停止按钮和急停按钮采用常闭触点前面已经提过这里再强调一次。常闭触点的安全优势在于断线时系统自动进入停止状态符合故障安全原则。接线时要给每个接线端子套线号管PLC侧和端子排侧都要有线号。没有编号的线在调试阶段还能勉强分清运行三个月后检修神仙都认不出哪根线是I0.2的信号线。线号本身成本极低省下的查线时间却非常可观。最后程序下载到PLC之后一定要写入EEPROM。S7-200的程序运行在RAM中断电后需要靠电池保持电池没电或者更换电池时程序就可能丢。在Micro/WIN里执行“编程工具-比较-保存”或者直接选择“下载到EEPROM”确保程序固化这个操作很多人会漏是非曲线往往最致命。6. 后续扩展与个人实操心得6.1 从单机照明扩展到楼宇级照明的可行路径这套系统做完以后后续扩展的空间很大。最直接的扩展方向是增加模拟量光照传感器把开关量的“光照不足”换成连续的光照度数值在PLC程序里用比较指令设定阈值反馈效果会平滑很多。AIW0读取模拟量后在组态里做成趋势曲线还能统计某区域一天之内的照度变化。如果要做多区域控制可以用CPU226增加IO点数或者增加数字量扩展模块EM223然后按区域把IO地址和M区标志位分组画面里按区域做选项卡。此时程序不要再用简单的梯形图堆砌建议用子程序封装每个区域的控制逻辑参数用V区传递。远程监控层面S7-200支持Modbus RTU协议可以通过库函数把它配置成Modbus从站上位机或者物联网网关通过RS-485读取照明状态寄存器。这样一来不需要触摸屏也能实现远程数据采集给后续做能源管理平台、照明能耗统计留了接口。6.2 个人经验和习惯能让你少走弯路的细节最后分享几个我实际做项目时保留的习惯它们不一定写在教科书里但真的能救命。第一调试期间在PLC输出公共端1L上串联一个单独的旋钮开关。正常调试时旋钮开关闭合PLC可以正常控制接触器需要检修输出回路时断开这个旋钮开关即使PLC误输出接触器也不会动作。这个简单的物理隔离开关保障了调试安全成本不到十块钱。第二PLC的输入信号验证不要只靠肉眼观察输入指示灯。输入指示灯亮只能说明传感器的信号到了PLC端子并不代表地址已经正确映射。用状态表监控I点地址确认实际地址和符号表对应才能排除接线错位的可能。第三写注释的时候假设读者是三个月后的自己。那时候你很可能已经不记得T37预设值为什么是300也记不清M0.2是自动照明还是故障标志。符号名、注释、网络标题都要写完整这一段花的时间会在后期调试时百倍返还。第四整套系统交付前做一次完整断电重启测试。切断总电源间隔十秒后重新上电观察PLC是否正常运行、模式和输出状态是否恢复到合理值、触摸屏能否自动重连。这一步能暴露电池电量、保持范围设置、通信初始化等很多隐藏问题是验收前最后一道质量关。照明控制系统做起来不难但要做得可靠需要把每个细节都当成安全隐患来对待。上面的方案里没有特别高深的技术全部都是基础指令和常规接线但正是这些基础工作决定了系统能不能长期稳定运行。希望这份拆解能帮你在类似的小型PLC项目里少走一点弯路。
阅读完成 · 觉得有帮助?