ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

S7-200 PLC与组态王邮件分拣控制系统设计:从梯形图到PPI通讯全解析

S7-200 PLC与组态王邮件分拣控制系统设计:从梯形图到PPI通讯全解析 上个月刚交付了一套基于S7-200 PLC和组态王的邮件分拣控制系统客户点名要求带注释的梯形图程序、接线图原理图图纸以及IO分配表。这类项目在毕业设计、技能竞赛和中小型自动化改造里出现频率极高看起来就是个典型的开关量控制可实际做下来发现从选型、IO规划到上位机组态每个环节都有能让你反复返工的细节。这篇文章不写虚的直接把这套系统的设计思路、IO分配、核心梯形图逻辑、组态王通讯配置和现场调试踩坑一次性讲透希望能给正在做类似项目的朋友省点时间。1. 这类项目为什么绕不开S7-200 组态王1.1 控制对象拆解一条分拣线在PLC眼里是什么先别急着打开编程软件。邮件分拣系统从工艺上看好像挺复杂有皮带线、有推料气缸、有光电检测、还有分类计数。但把控制需求摊开在PLC视角下无非就这几件事一条传送带电机的启停控制两个位置的光电传感器信号采集进料口、分拣工位两个气缸推杆的推出和缩回控制把邮件推入不同格口一个分拣完成的计数逻辑支持查询和复位运行状态、报警状态的指示输出。在这个项目里邮件类别信号我没有引入条码识别这种高成本的方案而是用一个旋钮开关做AB类选择模拟条码识别器给出的分类结果。这种简化处理在实训和毕设场景里非常常见毕竟控制系统的核心是逻辑不是识别算法。后面如果你想接真的扫码枪只需要把识别结果转换成PLC的一个开关量信号程序结构完全不用动。1.2 选型逻辑S7-200的定位和取舍我知道肯定有人问S7-200都停产多少年了为什么不直接用S7-200 SMART或者S7-1200我的理由很简单这个项目的要求是稳定、资料全、易复现而不是追求新平台。S7-200在教学和存量工业现场保有量非常大二手模块、编程电缆、图纸资料都极其丰富。而分拣系统的控制核心是几十个开关量扫描周期毫秒级足够S7-200的运算能力完全能胜任。CPU我选了CPU224也就是14输入、10输出的规格。为什么不是更小的CPU221或者CPU222因为输入信号规划下来大概要8个点输出要6个点考虑到备用点预留CPU221的6入4出不够用CPU222的8入6出也太紧张。CPU224多出的点数正好给后续扩展留出余量。这一步就是我想强调的第一个经验IO点数永远是选型的第一个约束条件先列IO表再选CPU而不是反过来。1.3 组态王的角色不是锦上添花是刚需有些朋友觉得PLC加个文本显示器就能显示计数何必再搞一套组态王但客户要的是实时画面、手动调试界面、报警记录还要能看到传送带和气缸的动作状态。文本显示器做不到这种直观程度组态王在这里的定位就是轻量级SCADA。选择组态王6.60而不是WINCC一方面是因为组态王对S7-200的PPI协议支持非常成熟另一方面的原因是组态王在国内中小项目的接受度确实高文档和教程遍地都是遇到问题好排查。2. IO分配表与接线思路动手焊线前先画清楚2.1 输入信号的规划按钮、传感器、反馈全都要留名字IO分配是整个项目的地基。我在做这张表的时候每一个地址都对应一个明确的物理信号符号名一律用中文或者有意义的英文缩写绝不用输入1输出1这种命名。最终输入分配如下地址符号名对应信号类型说明I0.0启动按钮绿色按钮常开主令I0.1停止按钮红色按钮常闭主令I0.2急停按钮旋转急停常闭安全I0.3手动/自动切换两位旋钮模式I0.4进料检测光电开关PNP传感器I0.5分拣到位光电开关PNP传感器I0.6计数复位黄色按钮常开操作I0.7邮件类别选择旋钮开关ON代表B类信号这里有两个细节必须说。第一停止按钮和急停按钮我都选常闭触点接入。为什么常闭触点串在回路里如果外部线路断了或者按钮坏了PLC采到的是断开状态程序会判定为停止系统不会在断线的情况下继续运行这是符合安全失效原则的。如果图省事选常开触点断线时程序会以为按钮没按下设备反而能启动这是重大隐患。第二S7-200的数字量输入端是漏型接法也就是电流从模块输入端流出外部信号源必须提供高电平。所以光电开关一定要选PNP三线制输出高电平有效NPN型的信号接进来S7-200根本采不到。这个坑我见人踩过无数次都是在现场换传感器才发现的。2.2 输出信号的规划电机、气缸、指示灯别挤在一个点上输出侧同样做了完整规划地址符号名负载说明Q0.0传送带电机接触器KM线圈经中间继电器过渡Q0.1分拣气缸1电磁阀YV124V DC推A类邮件Q0.2分拣气缸2电磁阀YV224V DC推B类邮件Q0.3报警灯红色指示灯HL1计数满或急停Q0.4运行指示灯绿色指示灯HL2系统运行Q0.5蜂鸣器带消音开关报警提示输出选型要和CPU型号匹配。如果用的是CPU224 AC/DC/继电器型输出点是继电器触点带电磁阀和指示灯没问题但直接带电机接触器线圈还是有点悬。我的做法是Q0.0先驱动一个中间继电器KA再让KA触点去控制接触器KM线圈相当于用两级隔离把PLC输出触点保护的死死的。感性负载断电瞬间会产生反向电动势继电器触点很容易拉弧烧蚀中间继电器几十块钱一个烧坏了换起来也方便。2.3 从IO表到端子排接线图怎么画才不容易错接线图和原理图是交付物里客户最看重的东西。我画图的时候是这么组织的主回路三相电源进线经过断路器QF、接触器KM主触点接到三相电机M。传送带电机选的是370W三相异步电机配一个9A的接触器足够。控制回路220V控制电源给PLC供电、给接触器线圈供电PLC输出Q0.0经过中间继电器KAKA触点再控制KM线圈吸合。直流回路开关电源将220V AC转成24V DC给PLC输入端传感器、输出端电磁阀供电。PLC接线图传感器信号进I0.x按钮信号进I0.x输出端子Q0.x对应各负载1M、2M公共端接24V负极L接24V正极。画图的时候别只顾着把线连对还要把端子号标清楚。我在每个端子上都标了线号比如1号端子接24V7号端子接光电传感器黑色信号线这样现场接线工不用拿着原理图到处找线减少沟通成本。这也是为什么客户愿意为一份规范的图纸买单——图纸的价值就是让复杂的东西可追溯。3. 梯形图程序带注释的分块实现思路3.1 启停与模式切换最不起眼的网络最容易埋雷程序第一段是系统的运行状态M0.0。这里我用了一个典型的启保停电路STL语句如下LD I0.0 // 启动按钮外部常开按下为ON O M0.0 // 运行状态自锁 AN I0.1 // 停止按钮程序里用常闭触点指令 AN I0.2 // 急停同样用常闭触点指令 M0.0 // 输出到运行状态中间继电器注意看I0.1和I0.2在STL里用的是AN指令读取的是常闭触点。因为外部接线是常闭正常情况下输入信号一直是ONAN会把这个高电平取反变成断开当按钮按下时常闭触点断开输入信号变OFFAN反而导通从而切断M0.0。这就实现了按下停止即断开的效果。很多初学者在这里犯迷糊拿着常开按钮的程序往常闭接线上套结果怎么调都不对。手动/自动切换的逻辑我用I0.3来控制。自动模式下M0.0作为主控条件手动模式下则由组态王下发的中间位M10.1、M10.2直接控制气缸和传送带这样能跳过自动逻辑直接动作单机调试非常方便。3.2 传送带与检测信号怎么处理光电抖动传送带控制我单独写了一个网络LD M0.0 // 系统运行 AN M0.1 // 分拣忙状态 AN Q0.1 // 气缸1伸出时不允许走 AN Q0.2 // 气缸2伸出时不允许走 Q0.0 // 传送带电机这里M0.1是分拣忙标志一旦邮件到达分拣位M0.1被置位传送带立即停止让气缸在静止状态下推料避免邮件被推歪。分拣完成、气缸缩回后M0.1复位传送带继续运行。这套逻辑比直接用到位传感器停止传送带多一个好处到位传感器复位后传送带不会立刻启动必须等气缸完全缩回防止邮件还没推完传送带就跑起来。光电传感器信号要特别处理。现场的光电开关在邮件边缘经过时会产生多次快速通断如果直接拿这个信号去计数一次过件可能多计好几件。我的处理方式是在程序里用上升沿EU指令捕捉信号变化同时利用S7-200的系统块设置数字量输入滤波时间把10ms以下的毛刺滤掉。如果对可靠性要求更高还可以在程序里加50ms延时确认检测到上升沿后延时50ms再读一次信号两次都有效才认定邮件到位。3.3 分拣气缸的动作序列用置位复位还是用顺序控制这是整个梯形图程序的核心。分拣逻辑我用置位复位指令来实现而不是写一大串自锁电路原因就一条置位复位更符合动作型控制的思维模型程序可读性好后面改逻辑也容易。核心流程是这样的分拣位光电I0.5检测到邮件产生上升沿判断类别旋钮I0.7OFF为A类ON为B类A类则置位Q0.1B类则置位Q0.2同时置位M0.1分拣忙传送带停止启动定时器T37设定1秒模拟气缸推出时间定时器T37到复位Q0.1或Q0.2同时启动缩回定时器T39设定1秒缩回到位复位M0.1分拣忙解除。部分关键STL语句如下LD I0.5 // 到位传感器 EU // 上升沿 AN M0.1 // 不在分拣中 AN I0.7 // 类别为A S Q0.1, 1 // 置位气缸1 S M0.1, 1 // 置位分拣忙 LD I0.5 EU AN M0.1 LD I0.7 // 类别为B ALD S Q0.2, 1 // 置位气缸2 S M0.1, 1 LD Q0.1 // 气缸1伸出到位 O Q0.2 // 或者气缸2伸出到位 TON T37, 10 // 1秒保持时间 LD T37 R Q0.1, 1 // 复位气缸1 R Q0.2, 1 // 复位气缸2 TON T39, 10 // 1秒缩回时间 LD T39 R M0.1, 1 // 复位分拣忙这套逻辑的最大优点是状态机清晰不会出现两个气缸同时动作的情况。真实项目里两个气缸同时推出会把邮件夹住甚至卡死在分拣位这种逻辑冲突必须在程序层面就杜绝掉。M0.1作为互锁条件用得很关键它保证任何时刻只有一个分拣动作在执行。如果气缸上装了磁性开关可以用磁性开关的到位信号代替定时器那样可靠性更高。但我这个项目没装磁性开关定时器方案完全够用。定时器的时间设定要覆盖气缸的实际动作时间现场调试时我把推出时间从0.5秒调到1秒才找到气缸动作既不抖、又不会撞得太猛的最佳值。3.4 计数、报警与手动调试辅助逻辑计数用的是加计数器。我定义了两个计数器C1计A类邮件C2计B类邮件。计数触发信号取自T39的上升沿也就是每完成一次分拣动作才加1而不是在检测到邮件时加1。这样可以保证计数的是成功分拣的邮件不是流经传感器的邮件数据口径更真实。计数结果要送给组态王显示。我直接通过传送指令把C1的当前值传送到VW100把C2的当前值传送到VW102。很多新手会直接在组态王里读C1的地址这么做不是不行但组态王和S7-200之间PPI通讯变量越多刷新越不稳定。把所有上位机要读的数据统一映射到V区通讯点少变量表也干净。报警逻辑我做了两件事。第一当C1或C2计数值达到预设值比如50件用比较指令触发Q0.3报警灯和Q0.5蜂鸣器提醒操作员清空格口。第二急停I0.2断开时除了停止运行同样触发报警。报警状态在组态王画面上用指示灯显示方便操作员快速定位。4. 组态王画面与PPI通讯让PLC的位和字变成可见的界面4.1 通讯配置PPI协议的坑在哪里组态王6.60连接S7-200常用的是PPI协议通过PC/PPI电缆或者USB-PPI编程线连接。我的通讯配置过程是这样的在组态王工程浏览器的设备里新建COM口设备驱动选择PLC -》西门子 -》S7-200系列 -》PPI设置PLC站号S7-200默认站号为2设置波特率9600必须和STEP 7 Micro/WIN软件里设置的通讯参数一致USB-PPI线在设备管理器里通常映射成一个虚拟串口比如COM3组态王里选这个端口不能选错。这里有个大坑PPI是单主站协议STEP 7 Micro/WIN下载程序时和组态王不能同时占用通讯口。我调试时经常碰到的情况是先开着Micro/WIN监控然后启动组态王结果组态王死活连不上PLC。解决办法很简单先把Micro/WIN完全退出再启动组态王。如果还连不上把USB线拔了重新插重置一下串口。4.2 变量定义和画面动画的对应关系组态王里变量分内存变量和IO变量。IO变量才是真正和PLC通讯的变量。我按前面说的原则全部通过V区通讯变量表如下组态王变量名寄存器地址数据类型用途RunStatusM0.0BIT位系统运行状态BusyM0.1BIT分拣忙Manual_AM10.1BIT手动气缸1Manual_BM10.2BIT手动气缸2CountAVW100INTA类计数CountBVW102INTB类计数AlarmM0.2BIT报警状态注意组态王访问S7-200的M区时地址写M0.0访问V区时写VW100表示字地址V0.0表示位地址。这里容易搞混我建议你建变量的时候先看一下组态王手册里寄存器类型说明别想当然。画面组态我用组态王图库里的通用元件。传送带用一个矩形条加填充颜色动画颜色变化条件连接RunStatus变量气缸用两个矩形做水平移动动画移动距离对应气缸伸出和缩回状态计数用值输出连接CountA和CountB显示为整数。动画连接受限的点在于组态王的表达式语法要特别注意变量类型匹配位变量只能用于颜色变化整数变量才能用于值显示。4.3 上位机调试时的常用技巧组态王画面做完之后别急着上电联调。我习惯先在工程浏览器里用画面-运行预览画面此时电脑没连PLC所有IO变量是灰色或者没有刷新属正常现象。真正联调时我一般会开一个变量监视窗同时看几个关键变量的实时值确认M0.0、M0.1、C1这些变量都按预期变化。还有一个技巧手动模式下组态王上的按钮控制M10.1和M10.2这两个位在PLC程序里要并联到Q0.1和Q0.2的输出逻辑中而不是直接访问Q点。因为在自动模式下程序要竞争Q点控制权如果上位机也直接写Q点两边会打架。所有上位机下发的手动指令都统一走M区PLC程序再根据I0.3的模式状态决定用哪一路控制输出这是标准的做法。5. 现场调试比编程更花时间的环节5.1 分步调试空载、联动、联机的顺序程序写完、图纸交付真正的考验才开始。我调试这套系统的顺序是PLC裸机空跑不接传感器、不接负载先在Micro/WIN里用软件强制功能测每一个输入输出点确认通道地址没有错接传感器单测逐个接上光电开关观察输入指示灯是否正常用遮挡物模拟邮件经过确认信号触发稳定接气缸和电机先在手动模式下分别点动气缸和传送带确认动作方向和机构运动正常自动联动试运行切换到自动模式放几封信件跑流程重点看分拣气缸的时序是否正确组态王联机启动组态王通讯观察画面状态和实际设备是否同步。千万不要一上来就全系统上电。有一次我图省事传感器和气缸一起接好再下载程序结果有一个传感器的信号线破皮搭铁24V短路烧了PLC的输入点返工三天才修好。分步调试看起来慢其实是最快的方式。5.2 我踩过的几个典型问题调试过程中遇到的问题五花八门挑几个有代表性的说说第一个是光电信号抖动。进料光电和分拣光电在现场都会出现信号毛刺尤其是电机启动瞬间电磁干扰特别大。我用了系统块里的输入滤波把I0.4和I0.5的滤波时间从默认0.2ms改成10ms毛刺基本消失。如果改完还有问题就得考虑给24V电源加滤波电容了。第二个是气缸推邮件位置不对。邮件到分拣位时传感器检测到的位置比气缸实际能推到的位置偏了大概2厘米。解决办法是把分拣位光电的安装位置往气缸方向挪了一点同时在程序里给到位传感器加了延时确认确保邮件完全停在合适位置再触发分拣。第三个是传送带停不准。邮件质量轻、惯性大到了分拣位传感器位置时传送带虽然停了但邮件还会往前滑一点。我在程序里把传送带停止条件改成分拣忙M0.1置位优先同时M0.1的置位逻辑提前到到位传感器上升沿等于传感器才亮传送带马上就断邮件滑到分拣气缸前面时刚好被推到格口。第四个是组态王和Micro/WIN抢通讯口。这个前面已经说了PPI协议下两者不能共存必须错开。5.3 稳定的代价一些值得养成的习惯交付的时候客户要带解释的梯形图程序这让我意识到注释的重要性。S7-200的每个网络我都写了说明解释这个网络干什么、为什么这么写、改动时注意什么。后来程序交接、维护、二次开发都靠这份注释省了无数口舌。还有一个经验是IO表和图纸要保持同步。我在调试过程中曾经调整过两个地址但图纸没及时改后面客户照着旧图纸去接线接错了一个点。从那以后我养成了规矩改程序地址必须同步修订IO表和接线图三者版本一致才能交付。备用IO点的习惯也值得养。CPU224的输入点我留了3个没用输出点留了4个没用。别小看这些备用点后面给系统加安全光栅、加格口满检测都用得上不需要换CPU。最后再分享一点实际感受做完这套系统我最大的体会是PLC项目真正的技术含量不在编程本身而在对整个系统的理解和编排。IO分配先想明白选型留足余量接线图规范清晰梯形图不用花哨的指令组态王变量统一管理这些基本功做到位系统自然稳定。如果你正在做类似的毕设或者小规模项目建议把这套文档沉淀下来后续改成三通道、五通道分拣也无非是复制逻辑、增加IO和控制点架构思路是完全通用的。
返回列表