1. 需求拆解与方案选型:先搞清楚传送带到底要什么
我最早拿到这个题目的时候,第一反应是:物料传送带装置听着简单,不就是电机转起来把东西送过去嘛。但真正开始做才发现,一个能称为"装置"而不是"一台电机"的系统,里面包含的东西比你想象的多得多。物料传送带在工厂里的应用场景五花八门——包装线、装配线、分拣线、成品输送线——但无论放在哪个场景下,它的控制需求基本可以归纳为几类:电机的启停与转向控制、物料到位/越位的传感器检测、连续输送过程中的计数与统计、异常情况下的报警与急停、手动和自动两种运行模式的切换,以及最重要的——让操作人员能远程看到系统状态、按下按钮就能控制设备。把这些需求一条条列清楚,后面做硬件选型和写程序就有了抓手,不会做一步看一步。
再说说为什么选S7-200加组态王这套组合。很多人觉得西门子现在主推S7-1200/1500,S7-200是不是过时了?这话分怎么看。S7-200在国内的存量市场非常大,很多运行中的产线设备用的还是它,学会它就是学会跟存量设备打交道;另一方面,S7-200的指令系统简洁,梯形图逻辑清晰,特别适合入门理解PLC的程序扫描机制。至于组态王,它是国内应用最广的组态软件之一,和S7-200通过PPI协议通信非常成熟,资料多、案例多,遇到问题基本上都能搜到解决方案。对做毕业设计或者刚入行的工程师来说,这套组合是"学费最低"的选择。
这套方案的定位很清楚:PLC做底层逻辑控制,组态王做上位机监控和操作界面。PLC负责传感器信号采集、电机启停逻辑、计时计数;组态王负责把设备状态用画面呈现出来,把操作指令下发下去。简单说,PLC是"干活的手",组态王是"看全局的眼睛和发布指令的嘴"。搞清楚这个分工,你就知道每一步配置该怎么做了。
2. 硬件选型与接线:决定调试成败的前半场
2.1 关键器件清单与选型理由
这套装置的硬件选型并不复杂,核心器件就是PLC本体、传送带电机、传感器、通信线缆和电源。我用的PLC是S7-200 CPU226,选它的原因是这型号自带两个通信口,一个口连编程软件、一个口连组态王,调试时不用反复插拔线缆,省了很多事。如果预算有限,CPU224也够用,但要提前规划通信口的分配。
电机这块,传送带通常用的是三相异步电机配合接触器控制,功率不大,一般0.75kW到2.2kW就足够,配套接触器选额定电流大于电机电流1.5倍左右的型号。这里有个容易被忽略的问题:PLC不能直接驱动接触器线圈,必须通过中间继电器转接,因为PLC的数字量输出口带载能力有限,一般只有0.5A左右,而接触器线圈的吸合电流可能达到1A以上。中间继电器选DC24V线圈的,和PLC输出回路共用一个开关电源,这样既保护PLC触点,又方便接线。
传感器方面,我用了三个。传送带起始端放一个电感式接近开关,用来检测金属物料是否上带;传送带末端放一个光电开关,检测物料是否到达下料位置;中间位置放一个对射式光电传感器,用来统计通过的物料数量。选传感器时务必确认输出类型是NPN还是PNP,国内设备用NPN居多,但很多新采购的传感器默认是PNP的,买回来才发现不匹配那就尴尬了。
2.2 I/O点表设计与接线要点
接线之前一定要先画I/O分配表,这是老生常谈,但每次都能看到有人拿着图纸直接接线,最后程序写完了发现输入点不够用。我的分配思路是输入点全部安排成传感器信号和按钮信号,输出点安排成接触器和指示灯,留出20%的备用点。下面是我这个项目的实际分配表:
| 地址 | 功能说明 | 信号类型 |
|---|---|---|
| I0.0 | 启动按钮(常开) | 数字量输入 |
| I0.1 | 停止按钮(常闭) | 数字量输入 |
| I0.2 | 急停按钮(常闭) | 数字量输入 |
| I0.3 | 传送带起始端物料检测(接近开关) | 数字量输入 |
| I0.4 | 中间物料计数(对射光电) | 数字量输入 |
| I0.5 | 末端物料到位检测(光电开关) | 数字量输入 |
| Q0.0 | 传送带电机接触器 | 数字量输出 |
| Q0.1 | 运行指示灯 | 数字量输出 |
| Q0.2 | 故障报警灯 | 数字量输出 |
这里有几个接线上的细节想多提一句。第一,停止按钮和急停按钮要接常闭触点,这样一旦线路断了,PLC收到的是"停止"信号而不是"运行"信号,是安全性设计的基本原则。第二,所有传感器信号的公共端要跟PLC输入端的公共端对应好,S7-200的输入公共端是1L、2L端子,NPN传感器接法是把传感器负端接公共端,正端接输入点,接反了信号永远没反应。第三,接触器的线圈两端要并联一个阻容吸收器或者压敏电阻,防止接触器断开时产生的反向电动势干扰PLC,这个问题很多人不重视,等出现了程序偶尔乱跳就只能干瞪眼。
2.3 传感器选型的坑:NPN与PNP的区分
我专门把传感器类型拎出来讲,是因为我在这个项目上就吃过亏。最开始采购传感器时没有仔细确认输出类型,到货后发现是PNP输出,跟S7-200的源型输入不匹配,信号怎么都读不进来。S7-200 CPU226的输入端是漏型接法,也就是电流从输入点流入公共端,所以兼容的是NPN型传感器。如果你买的是PNP传感器,也不是不能用,但必须加转换继电器或者改电路,麻烦得很。
判断传感器类型有个简单的办法:看输出回路的接法。NPN输出,负载一端接正极,传感器导通时电流从负载流向传感器再流向公共端;PNP输出则是电流从传感器流向负载再回到负极。实在拿不准就翻手册,别靠猜。另外,对射式光电传感器的发射端和接收端要分开接线,接收端的输出信号线接到PLC输入点,调试前先对光——用万用表量一下输出状态是否随着遮挡物变化而变化,这一步能省掉后面"PLC没收到信号"的排查时间。
3. S7-200侧的程序设计:梯形图逻辑的搭建思路
3.1 启保停电路的三种写法与推荐
S7-200的程序设计是整个项目的核心。我习惯先把控制逻辑在脑子里过一遍,画出流程图,再落实到梯形图。传送带的基本逻辑其实就一句话:按下启动按钮且没有停止信号、没有故障信号、没有物料堵料信号时,电机运转;末端物料到位后延时停止,等待取走;取走后重新启动。
启动和停止控制,教科书上教的启保停电路是标准答案:
// 启动: I0.0常开,停止: I0.1常闭,输出: Q0.0 LD I0.0 O Q0.0 AN I0.1 AN I0.2 = Q0.0这个逻辑的精髓在于并联的Q0.0触点形成自锁,即使松开启动按钮,输出也能保持接通,直到停止按钮断开为止。另一种写法是用置位复位指令:
LD I0.0 S Q0.0, 1 LD I0.1 R Q0.0, 1两种写法都能实现,但我更推荐第一种启保停电路的写法,因为它的逻辑是"纯组合+自锁",程序扫描时状态更直观,也更容易排查问题。S/R指令在复杂程序中容易因为置位和复位的先后顺序产生不可预知的输出状态,新手不太容易把控。
3.2 传感器联锁与计数逻辑
有了基础的启保停,接下来加入传感器联锁。实际生产中传送带最怕的就是物料堵住末端还在继续送料,后面的物料越堆越多,轻则卡死设备,重则损坏电机。所以我在程序里加了末端到位延时判断:I0.5检测到物料到位后,启动定时器T37,定时5秒;如果5秒内物料没有被取走(I0.5仍然有信号),说明堵料了,立即停传送带电机,同时置位故障标志位M0.0,组态王上就会显示堵料报警。
这一段梯形图逻辑大概是这样的:
// 末端到位延时判断,T37定时5秒 LD I0.5 TON T37, 50 // 定时器到且末端仍有物料,置位故障标志 LD T37 AN I0.5 // 注意:用常闭,表示5秒后物料还在 S M0.0, 1 // 故障时切断电机输出 LD M0.0 AN Q0.0 = M0.1 // 通过中间位切断,避免直接改启保停电路这里我用了M0.1作为切断中间位,而不是直接改启保停电路的逻辑,是为了可读性和可维护性。你把故障信号集中用一个标志位管理,后面想加"急停复位"或者"故障手动消除"功能,只改一处就够了,不会牵一发动全身。
计数逻辑更简单,利用I0.4的上升沿,配合计数器指令C0,计数上限设为1000,满了之后让传送带自动暂停,提醒操作人员处理一批物料。S7-200的计数器指令需要两条指令配合:计数器使能端和复位端。使能端用I0.4的上升沿,复位端用I0.1停止信号或者手动复位按钮。
3.3 定时器与计数器使用中的细节
S7-200的定时器分三种:TON(通电延时)、TOF(断电延时)、TONR(保持型通电延时),我在传送带项目里主要用到TON和TONR。TON用来做堵料延时,TONR用来累计运行时间——用TONR的好处是断电后运行时间的累计值还能保持,方便以后做设备利用率统计。
定时器的时间基准和分辨率也值得注意。T37是100ms分辨率的定时器,定时50就是5秒;T96是1ms分辨率的定时器,定时500就是0.5秒。搞混时间基准和设定值的换算,程序跑出来的时间跟你预期差十倍,这种低级错误我见过不止一次。
计数器方面,C0的计数范围是0到9999。如果现场需要的计数上限超过这个范围,就得手动扩展,比如设置两个计数器级联,C0计满10000,产生一个上升沿给C1计数,最终总量用C1的值乘以10000再加C0的当前值。不过传送带计数一般用不了这么大,了解原理就行。
4. 组态王画面组态与通信配置:让系统"看得见、摸得着"
4.1 组态王工程搭建与IO设备定义
组态王这套软件的使用流程我总结为四步:建工程、连设备、定义变量、组画面。这也是所有组态软件的通用套路,学会了组态王,以后再学WinCC、InTouch这些,思路都是通的。
新建工程之后,首先在工程浏览器左侧的"设备"节点下定义IO设备。这一步的关键是正确选择通信方式。S7-200通过PPI协议和组态王通信,硬件连接是PLC的通信口通过一根PPI编程电缆(USB转PPI或者RS232转PPI)接到电脑的串口上。如果你的电脑没有原生串口,要确认你买的编程电缆支持USB转串口,并且在设备管理器里能看到一个虚拟COM口,记住这个COM口编号,后面配置时要用。
配置IO设备时的参数如下:
| 参数项 | 设置值 | 说明 |
|---|---|---|
| 通信方式 | 串口(COM) | 选择实际占用的COM口 |
| 波特率 | 9600 | 必须与PLC通信口参数一致 |
| 数据位 | 8 | PPI协议默认 |
| 停止位 | 1 | PPI协议默认 |
| 校验 | 偶校验 | 与S7-200默认一致 |
| 设备地址 | 2 | 与PLC通信口站号一致 |
这里最容易出问题的就是波特率和站号不匹配。S7-200在编程软件里设置的站号默认为2,波特率默认9600。如果你在组态王里填的站号是2,但PLC实际改成了3,那就连不上。这个参数在STEP 7-Micro/WIN的通信设置里可以查看修改,建议统一固定下来别乱动。
4.2 变量定义与画面动画连接
变量是组态王和PLC之间的桥梁,这个桥梁搭不好,画面做得再漂亮都是摆设。组态王里有两种变量,一种是内存变量,存在上位机内存里,跟PLC无关,适合做界面上的临时计算;一种是IO变量,连接PLC的存储区,读写实时数据。
我需要定义的IO变量有这几个:
| 变量名 | 连接设备 | 寄存器类型 | 寄存器地址 | 数据类型 |
|---|---|---|---|---|
| StartBtn | PLC | V区 | V0.0 | Bit |
| StopBtn | PLC | V区 | V0.1 | Bit |
| MotorRun | PLC | V区 | V1.0 | Bit |
| FaultAlarm | PLC | V区 | V1.1 | Bit |
| CountTotal | PLC | V区 | VW10 | Int |
| RunTime | PLC | V区 | VW12 | Int |
这里有个关键设计思路:组态王不要直接读写PLC的I区和Q区,应该读写V区。这是因为I区和Q区是物理输入输出映像区,直接读I0.0没问题,但不建议上位机直接写Q区,一旦通信出问题或者上位机误操作,可能直接驱动外部设备,非常危险。正确的做法是:PLC先把输入信号传送到V区,再用V区变量跟组态王通信。上面我定义的StartBtn对应V0.0,就是在PLC程序中用传送指令把I0.0的状态复制到V0.0。输出控制同理,组态王写V1.0,PLC程序中用V1.0的值驱动Q0.0。
画面组态时,我建了三块区域:运行状态区、控制操作区、数据统计区。运行状态区放传送带示意图,用两个矩形表示传送带,电机运转时传送带填充颜色变化;控制操作区放"启动"和"停止"两个按钮,按下按钮时把V0.0写强制True再复位;数据统计区放物料计数数字显示、运行时间显示以及故障报警灯。组态王的动画连接很简单,选中图元右键选择动画连接,在弹窗里选择对应的变量和动作类型,指示灯就选"颜色变化",按钮就选"按下动作"和"弹起动作",数字显示选"模拟值输出"。组态的时候注意变量的数据类型要跟图元支持的类型匹配,否则运行时数据框显示全是"???"。
4.3 PPI通信与组态王连PLC的常见坑
这个部分我想重点说说PPI通信的一些细节。PPI是西门子S7-200专用的串行通信协议,组态王通过串口与PLC建立PPI连接后,PLC侧不需要写任何通信程序,通信数据区是自动映射的。但正因为协议封装得比较"黑盒",出了问题不好定位,所以排查思路很重要。
我调试时遇到过最典型的现象是:组态王设备管理器里显示"通信成功",但画面上的数据死活不动。后来查了半天发现,是PLC程序里用了M区做中间变量,而组态王配置设备时把"寄存器类型"选成了M区,地址又填错了偏移量。西门子的M区地址从M0.0开始,组态王里的M区地址与PLC实际地址之间有个换算关系,如果你填的地址是10,代表的可能是M1.0而不是M10.0。这种偏移换算问题在V区同样存在,VW10和V10的换算方式不一样。我的建议是画一个变量对照表贴在电脑旁边,每定义一个变量就登记一下组态王地址和PLC地址的对应关系,别过度依赖记忆。
还有一个坑是组态王和编程软件同时连PLC会互相抢通信口。CPU226有两个口还好,一个口接编程线、一个口接组态王没问题;但如果只有一个通信口,就得先把编程软件的连接断开,再让组态王连接,否则两个软件同时抢串口,通信会反复中断。实际项目调试时,我一般先用编程软件把程序下载好,然后彻底关闭编程软件的通信占用,再启动组态王的通信测试。
5. 联调阶段的故障排查实录:那些文档里不会写的事
5.1 通信连不上的完整排查链条
联调阶段是最折磨人也最能长经验的部分。我第一次做这个项目的时候,组态王怎么都连接不上PLC,设备管理器里显示通信失败。当时我的排查思路是这样的,分享出来给大家参考。
第一步,确认硬件链路。用万用表量一下编程电缆的RS232端是否有电压变化,PLC通信口的指示灯是否闪烁,把电缆从PLC上拔下来量通信口的针脚电压,S7-200通信口正常工作时针脚3和8之间应该有电压。这能快速排除线缆断线的问题。
第二步,确认COM口占用。打开Windows设备管理器,看虚拟COM口号是多少,确认没有被其他设备占用。常见的问题是你插了USB转串口线之后系统分配的COM口是COM9或者更高,而组态王默认只扫描COM1到COM4,这种情况下就要在设备管理器里手动把COM口改成COM3或者COM4,改完重启组态王。
第三步,核对通信参数。波特率9600、8位数据、1位停止位、偶校验、PLC站号2,这些参数有一项不对就建立不了连接。这里特别提醒,S7-200的PPI通信口号参数可以在系统块里修改,下载到PLC后生效。有时候你改了PLC站号但是忘记下载系统块,实际运行的还是旧参数,这种隐藏问题最讨厌。
第四步,检查组态王的设备定义。重点看"设备地址"里的值是否跟PLC站号一致,有的组态版本在设备地址里要填"2",有的要填"2.0",格式差异也会导致通信不成功。
我那次最终的故障原因说出来你可能不信——是编程电缆本身坏了。USB转PPI电缆里的转换芯片虚焊,偶尔能识别COM口但数据传不出去。换了一根电缆马上就好。所以排查通信问题,一定先怀疑线缆,不要先怀疑软件配置。
5.2 画面有数据但控制无响应的根因分析
通信建立起来之后,又遇到一个新问题:组态王能读到电机运行状态了,但是按下画面上的停止按钮,电机毫无反应。这个问题的排查路径跟通信连不上又不一样。
我先用编程软件监控V区变量,发现组态王按下停止按钮时,V0.1这个变量确实变化了,说明上位机到PLC的数据通路是通的。但电机就是不停,说明PLC程序里的逻辑没把V0.1的值真正用到控制回路上。查了一段程序才发现,我把"停止"信号设计成了常闭逻辑,PLC程序里用的是BITSM(I0.1),上位机写的V0.1根本没有接进启保停电路。
这就是典型的"程序逻辑和上位机变量脱节"问题。解决办法很简单:在PLC程序里加入一段中间转换逻辑,把组态王操作信号链进启保停电路。比如组态王写V0.1=1表示请求停止,PLC程序里检测V0.1的上升沿,然后R复位Q0.0,同时再置位一个握手标志告诉组态王"已经停止"。这样既保证了上位机操作的有效性,又保留了现场物理按钮的最高控制优先权。
这类问题给我的教训是:设计变量表之前,先在纸上把"谁控制谁"的数据流图画清楚——物理按钮只进PLC、组态王只操作V区、PLC程序内部做仲裁——各层接口清清楚楚,联调时就少很多"两边都对不上"的糊涂账。
5.3 电机偶尔自己停机的干扰问题
最后一个大坑是干扰问题。系统运行了大概半小时后,电机突然自己停了一下,然后又自己启动,过程不到一秒钟。组态王上没有显示任何故障报警,但PLC的停止按钮信号我监控到闪了一下。
一开始怀疑是物理按钮接触不良,换了新的还是一样。后来用万用表量I0.1端子上的电压,发现干扰信号确实存在:在接触器吸合和释放的瞬间,I0.1端子上的电压会有几十毫秒的跌落。这是因为接触器线圈的浪涌电流通过公共电源线反馈到了PLC的输入端。
解决办法有两个方向:一是在接触器线圈两端并联阻容吸收器(RC吸收电路),吸收浪涌;二是让PLC的输入公共端和接触器线圈的控制回路分开供电,PLC用独立的24V开关电源,接触器控制回路用另一路电源。我最终两个措施都做了,这个问题就再没出现过。做工业控制系统,抗干扰不是可选项而是必选项,尤其是带电机、继电器这类感性负载的项目,电源隔离的钱不能省。
排查这个问题的过程中我还发现,有些干扰是接地造成的。PLC的24V开关电源的负极(0V)应该跟机柜的接地排可靠连接,但很多现场为了省钱直接不接地或者虚接,导致电源对地有几十伏的共模电压,信号线上感应的干扰就特别大。这个细节在后面做冷库监控、大棚灌溉这类长线布线项目时同样重要,距离越远,接地问题放大得越明显。
6. 项目收尾心得与可扩展方向
6.1 我做这个项目沉淀下来的几条经验
整个项目从方案设计到调试完成,前后大概用了一周时间。回头总结,有几条经验特别想分享给正在做或者准备做类似项目的朋友。
第一,方案设计阶段花的时间永远值得。我最初直接上手接线、写程序,结果后面因为I/O点分配不合理、传感器类型不匹配,返工了两次。第二次做的时候,我先花了大半天时间把需求、I/O点表、变量表、画面布局全部写在纸上,后面几乎是一路顺畅。
第二,组态王和PLC的变量对应关系要建立台账。这个项目变量不多还好,如果是几十个变量的系统,没有台账,调试时全靠翻程序找地址,效率极低还容易错。现在有些新工具能做AI代码生成、自动变量映射,但基础的对账意识不能丢。
第三,调试时要有"最小系统"的概念。先把PLC单独跑起来,用编程软件强制变量测试逻辑;再把组态王和PLC连通,测试变量读写;最后才把电机、传感器接进去做实台测试。一步一验证,出问题你就能立刻定位是PLC逻辑的问题、通信的问题还是外部接线的问题,而不是全部混在一起瞎猜。
第四,所有涉及安全的功能必须是PLC侧独立完成的,不依赖组态王。急停、堵料停机这类逻辑必须写在PLC程序里,哪怕组态王掉线、电脑死机,设备依然安全。这一点是底线,不要因为组态王好用就什么都往上放。
6.2 这套系统还能怎么扩展
做完基础的传送带控制,后续可以扩展的方向其实挺多的。如果要把传送带电机改成变频调速,可以用S7-200的模拟量输出模块(EM235)配合ABB、汇川等变频器,通过0-10V或4-20mA信号控制频率,组态王里做一个可调的滑块来设置运行速度,完成物料输送节奏的柔性调节。这比单纯启停控制实用很多,也是工厂里最常见的技术需求。
如果要让传送带兼顾定位功能,可以考虑用步进电机替换普通三相电机,并研究一下S7-200 Smart的步进电机控制指令库,走脉冲加方向的控制方式。这类项目在自动化包装线上很常见,可以顺带把"送料长度精确控制"的需求做进去。不过要注意,S7-200标准型的脉冲输出性能有限,如果定位精度要求高,或者运动的逻辑比较复杂,就得考虑换带运动控制功能的PLC了。
另外,组态王作为以太网升级的方向也值得注意。如果现场有多台PLC、变频器、传感器需要统一监控,可以引入支持Modbus TCP或者OPC UA协议的网关设备,把底层设备的数据统一采上来。现在很多工厂做数字化改造就是这个路子:底层设备走Modbus/OPC UA协议,上层用组态软件或平台做数字孪生和集中监控,相当于把这个传送带装置从"单机自动化"提升到"车间级数字化"的层面。
对我个人来说,这个项目最大的意义不是"做了个能转的传送带",而是完整走了一遍"需求分析-硬件选型-程序编写-上位机组态-联调排查"的自动化项目全流程。这个过程里踩过的坑、总结出的排查方法,比任何课本上的例题都有价值。后面再遇到类似的系统设计,你心里就有了一张清晰的作战地图:从哪个口进线、哪些参数容易错、哪类故障优先查哪一块,门儿清。