S7-200 PLC与组态王联动的切片机控制系统完整解析

S7-200 PLC与组态王联动的切片机控制系统完整解析 做切片机控制这块老实说最头疼的不是PLC程序本身而是“PLC算一头、上位机算另一头中间全靠调试时来回跑”。S7-200配合组态王的组合在中小型设备里非常常见尤其是切片机这种既要逻辑控制、又要看得见产量和故障记录的设备。今天把我实际搭这套系统的完整过程整理出来从IO规划、接线原理图到梯形图逐段写法再到组态王画面和报表配置全部讲清楚。这套系统的目标很明确PLC负责现场逻辑——送料、定位、切割、计数、报警组态王负责上位监控——启动停止操作、产量显示、历史数据报表。控制对象是典型的切片机也就是物料连续送进按设定长度或信号触发切刀动作一次完成一片切割循环往复。适合正在做毕业设计、设备改造或者刚接触S7-200和组态王这套组合的工程师参考。1. 系统整体设计思路与方案选型1.1 为什么选S7-200 PLC而不是其它方案先解释一下选型问题。很多人会问现在S7-200都算老产品了为什么还要用它这里有个很现实的情况存量设备里S7-200的保有量非常大很多中小型设备厂、食品机械厂、包装机械厂的老设备全是S7-200而且用户用顺手了不轻易换。另外S7-200的指令集简单梯形图直观CPU226这种集成IO点多的型号做切片机这种20来个点的项目完全够用。切片机的控制需求是典型的小型顺序控制系统。它不需要PID不需要高速计数到几十K赫兹的脉冲输入也不需要太复杂的位置控制一个普通CPU224或者CPU226就能搞定。关键在于选型时留足IO余量尤其是输入点别卡得太死。我当时用的CPU226 AC/DC/继电器自带24输入、16输出实际用下来输入还剩不少余量后面加功能不用换PLC。这里要提醒一句如果你要控制伺服电机或者步进电机S7-200得配高速脉冲输出那就得选晶体管输出的CPU而不是继电器输出。继电器输出响应慢高速脉冲根本发不出来。切片机如果是普通三相异步电机加气缸推送继电器输出没问题但如果刀架是步进电机驱动的CPU选型就得换成DC/DC/DC的晶体管型号。1.2 组态王在上位监控里到底干什么组态王在系统里的角色是上位机人机界面跑在工控机或者普通PC上通过串口或者以太网和PLC通信。切片机现场操作工不需要去看梯形图他们要看的是一块屏幕当前产量多少、设备正在运行还是停机、哪里报警、今天的生产记录是多少。这些信息用组态王画面做出来比用文本显示器好用得多。组态王的核心工作无非三块第一和PLC建立通信把PLC里的位变量、寄存器变量映射到组态王的数据词典里第二做画面把按钮、指示灯、产量框、报警列表这些元素摆好第三做历史数据和报表把产量、运行时间、故障记录存下来方便车间统计。我用组态王6.55这个版本比较稳定网上资源也多。通信方式有两种选择一是通过PC/PPI电缆走串口简单可靠但距离短、速度一般二是加CP243-1以太网模块走TCP/IP速度快适合以后扩展。这次项目距离不远就用了PC/PPI电缆调试时省事不需要额外配模块。1.3 系统整体架构与信号流程整套系统的信号流程可以这样理解操作工在组态王画面点“启动”上位机把启动命令写进PLC的M寄存器里。PLC收到这个命令后按梯形图的逻辑开始运行送料电机启动物料往前送物料碰到定位光电传感器时PLC停止送料同时输出夹紧电磁阀把物料夹住接着切刀动作。切刀切完回到原位PLC检测到原位信号后计数加1松开夹紧送料再次启动开始下一个循环。这样一个循环下来一片产品就切好了。如果切到设定数量PLC把“完成任务”标志位置位设备自动停机同时向上位机发一个信号组态王画面弹提示。整个过程中任何急停、报警信号都会立即切断输出保证设备和人身安全。这里最关键的工艺参数是切割动作的时序配合。送料电机停下来之后物料还会因为惯性往前走一小段如果立刻夹紧切的长度就不准。所以实际程序里送料停止到夹紧动作之间要加上一个延时让物料停稳同时还要考虑定位光电传感器的安装位置和切刀之间的距离补偿。2. 电气设计与IO配置规划2.1 切片机工艺信号的完整拆解做电气设计之前必须先把现场有哪些设备、哪些传感器、哪些按钮理清楚。这一步看着简单其实是整个项目里最容易出问题的地方遗漏任何一个信号后面都要重新改接线最浪费时间。以最常见的切片机为例我列举一下需要控制的设备和需要采集的信号。输入信号包括启动按钮常开、停止按钮常开、急停按钮常闭、送料电机过热保护常闭、物料到位检测光电传感器常开、夹紧到位检测常开、切刀上限位常开、切刀下限位常开、模式选择开关手动/自动常开、手动送料按钮、手动切刀按钮。输出信号包括送料电机接触器、夹紧电磁阀、切刀电磁阀或者切刀电机接触器、三色灯红灯、绿灯、黄灯或者报警蜂鸣器、计数完成指示灯。以上这些是基础版本。如果切片机还要计长度那输入里要加编码器。编码器接高速计数器输入端S7-200的CPU226有6个高速计数器用HSC0或者HSC1配合中断做长度测量精度比光电开关高很多。这个后面我会详细讲。2.2 IO点数统计与地址分配表IO点统计要按“输入有多少、输出有多少、模拟量有没有”来算。我上节列的那个清单输入一共10个输出一共6个再加一个备用数量不多。如果不接模拟量S7-200 CPU224就能满足但为了给后续扩展留空间我用的CPU226。地址分配的原则是固定功能的信号放在固定区段写程序时不要混乱。比如I0.0到I0.7排按钮和模式开关I1.0到I1.7排传感器和限位输出Q0.0到Q0.7排动作执行元件。下面是实际项目的地址分配表地址信号名称类型说明I0.0启动按钮常开上升沿有效I0.1停止按钮常开上升沿有效I0.2急停按钮常闭断开即停I0.3模式选择开关常开ON为自动OFF为手动I0.4手动送料按钮常开手动时点动I0.5手动切刀按钮常开手动时点动I0.6物料到位光电常开检测到物料时导通I0.7夹紧到位检测常开夹紧气缸到位导通I1.0切刀上限位常开切刀回位导通I1.1切刀下限位常开切刀下切到位导通I1.2送料电机过热保护常闭断开表示热继电器动作Q0.0送料电机继电器输出控制接触器线圈Q0.1夹紧电磁阀继电器输出24V电磁阀Q0.2切刀电磁阀继电器输出24V电磁阀Q0.3运行指示灯绿色继电器输出面板指示Q0.4报警指示灯红色继电器输出面板指示Q0.5蜂鸣器继电器输出故障时报警这个表在建组态王数据词典的时候也要用两边变量一一对应字段保持一致后面做画面时省去很多对照的麻烦。2.3 PLC接线设计与原理图绘制要点接线这块有几个关键点必须注意。第一是PLC供电CPU226 AC/DC/继电器型号电源端子是L1和N接220V交流注意火线零线不要接反。输出公共端1L、2L这些要根据负载类型正确分配如果有两种电压等级的负载不能共用一个公共端。切刀电磁阀和送料接触器如果都是220V交流可以共用一个公共端但如果有24V直流电磁阀就要单独一组避免串电。第二是输入端的接法。S7-200的输入端有两种接法源型输入和漏型输入。这里容易搞混。所谓源型输入是电流从模块流出公共端M接24V负极传感器输出高电平有效漏型输入则反过来公共端M接24V正极。国内常用的三线制NPN传感器输出低电平有效就要接成源型输入也就是M端接电源负极传感器信号线接输入端传感器正极接24V正极。接线前先查手册确认否则传感器信号进不来。第三是输出端接感性负载的处理。接触器线圈、电磁阀线圈都是感性负载断开瞬间会产生很高的反向电动势直接接在PLC继电器输出触点上会大大缩短触点寿命严重时甚至会击穿。交流感性负载要在负载两端并联RC阻容吸收阻容选择一般是100Ω电阻串联0.1μF电容耐压等级要够直流感性负载则反并联一个续流二极管二极管耐压要大于负载电源电压的两倍以上。原理图绘制我一般分三张图画主回路、PLC控制回路、传感器与执行元件接线图。主回路画接触器、热继电器、电机PLC控制回路画PLC电源、输入端子接线、输出端子接线传感器与执行元件接线图把传感器怎么接、电磁阀怎么接、指示灯怎么接都标清楚。图纸上每个端子号、线号都要标注完整调试时拿万用表对着图查线效率会高很多。2.4 安全保护回路的硬接线设计关于安全保护我必须说一句急停、安全门开关这类信号不要只做进PLC程序里软处理最好在硬接线上直接串联到接触器控制回路里双保险。实际操作中我们把急停按钮的常闭触点、热继电器的常闭触点串联在送料电机接触器线圈的电源回路里。这样即使PLC程序出了故障或者PLC突然死机急停按钮按下去接触器直接断电电机立即停下来。这个硬接线保护是PLC逻辑保护之外的第二道防线在设备安全上绝对不能省。同时急停信号也接入PLC的输入点程序里作为急停状态捕捉一旦触发急停整个程序跳转到急停处理段把所有输出复位蜂鸣器报警。报警状态要保持住操作工必须手动复位才能重新启动防止设备在危险状态下突然重新运行。3. 梯形图程序详解3.1 程序整体结构和设计思路S7-200的编程软件是STEP 7-Micro/WIN程序结构分主程序、子程序、中断程序三部分。对于切片机这种中等复杂度的项目我的习惯是把程序按功能分割成几个子程序主程序里做整体逻辑调度初始化子程序处理上电初值手动控制子程序处理手动模式下的点动操作自动运行子程序处理自动模式下的顺序控制报警子程序处理故障信号。这样分块的好处是调试时方便哪块出问题就单独看哪块不用在几百行程序里翻来翻去。S7-200的子程序调用用CALL指令子程序局部变量可以在局部变量表里定义地址是L区调用时传参。对新手来说建议先在纸上把功能流程图画出来明确每一步的转移条件再写梯形图否则边界条件很容易漏。切片机自动运行的核心是顺序控制。S7-200本身没有SFC顺序功能图指令但我们用状态寄存器的方式来模拟。比如用M0.0到M0.7作为八个状态位每个时刻只有一个状态位为1状态位之间的转移靠转换条件来驱动。这套方法在处理多步骤顺序控制时非常好用逻辑清晰不容易出乱子。3.2 启动、停止与自锁回路启动和停止是最基础的逻辑但细节不少。下面是网络1的写法网络1启动信号 LD SM0.1 R M0.0, 8 // 上电清零全部状态位 R M1.0, 8 // 清零标志位区 网络2自动模式启动条件 LD I0.3 // 自动模式 A I0.6 // 物料到位 A M0.0 // 空闲状态 S M0.1, 1 // 进入送料状态这里我习惯用置位复位指令实现状态转移而不是用自锁和互锁。原因很简单置位复位指令在状态机里更直观不用担心线圈重复输出导致程序扫描冲突。启动条件里要串入状态位避免在任何状态下都能启动这样逻辑更严谨。停止处理是这样的停止按钮不是直接关掉设备而是把当前状态清掉让设备回到空闲状态。急停就不一样急停是立即切断输出不管当前处于什么状态全部复位这叫“故障优先”。工业设备上停止和急停的区别一定要分清楚。3.3 送料与切割动作的时序控制自动循环的流程是这样设计的我结合状态位M0.0到M0.7来说明M0.0是空闲状态设备待机。M0.1是送料状态送料电机启动物料前进。M0.2是停料等待状态光电传感器检测到物料到位后送料电机停止但这时候不能立刻夹紧要延时200ms等物料完全停稳。M0.3是夹紧状态输出夹紧电磁阀等夹紧到位信号。M0.4是切割状态切刀电磁阀输出切刀下切。M0.5是切刀回位状态等切刀上限位信号回来。M0.6是松开状态夹紧电磁阀断电物料松开。M0.7是计数和循环复位状态计数器加1延时500ms后回到M0.0。送料状态程序网络5送料状态输出 LD M0.1 O M0.2 // M0.2时保持送料电机停止但要保持输出状态处理 AN M0.3 Q0.0 // 送料电机实际上送料电机的控制要更细致。物料到位信号来时送料电机要立即停但不要用光电信号直接断电机而是用光电信号触发状态转移从M0.1转到M0.2M0.2断开电机输出这样逻辑统一。同时M0.2要启动一个延时定时器T37延时结束后才转到夹紧状态。这里有个实际教训光电传感器的响应速度很快但物料本身有惯性如果不加延时直接夹紧刀口位置会偏移切出来的长度忽长忽短。加200ms延时还不够的话要根据物料速度实测调整。如果物料速度快定位传感器离刀口的距离要留够否则物料到位后刹车不住超过刀口位置就不准了。切割动作是单次执行的所以切刀电磁阀输出要加脉冲式处理不能让切刀一直通电。我的做法是用M0.4状态位置位后启动一个0.3秒的定时器定时结束就转到M0.5切刀电磁阀断电靠弹簧或者气缸自身回位。这个0.3秒要保证切刀真正完成切割动作如果切不断材料要加大输出时间但也不能太长否则气缸一直顶住损伤设备。3.4 计数逻辑与产量到达自动停机计数在切片机里是核心功能。用计数器指令CTU来做加工数量累计比较指令来判断产量是否达到设定值。网络说明网络10切割完成计数 LD M0.7 // 每一轮循环完成 A SM0.5 // 可选沿信号处理 LD C1 // 计数器C1 CTU C1, 1000 // 目标产量1000片这里要特别注意C1的计数输入要有上升沿也就是说M0.7从0变到1的瞬间计数一次。S7-200的计数器指令本身不支持直接在输入端前面加“上升沿”修饰符的话可以用EU指令。但更好的做法是用M0.7这个状态位本身因为状态转移本身算一个脉冲只要M0.7持续的时间不是太长一个扫描周期内完成状态转移和计数不会有重复计数问题。如果M0.7保持时间长计数输入一直导通计数器就会一直加这时候必须用EU指令捕捉上升沿。产量到达的处理网络12产量到达 LDW C1, VD4 // 当前产量等于设定值 S M1.0, 1 // 产量完成标志 R M0.1, 8 // 所有状态位复位为了能在线修改目标产量我把目标产量存放在V区用组态王写入。这里用VD4存目标产量VW0存当前产量还是VD4存当前产量看数据类型选择。计数器的当前值是16位整数直接用VW区存放组态王里定义成USHORT类型变量两边匹配好就行。比较用双字比较指令LDW时要注意操作数的位数一致。3.5 报警处理与手动应急操作报警程序要覆盖这几类故障急停触发、送料电机过热、切刀卡死切刀电磁阀动作后一定时间内切刀没有到达下限位、夹紧不到位夹紧电磁阀输出后一定时间没有到位信号。以切刀卡死为例网络15切刀卡死检测 LD M0.4 // 正在切割状态 AN I1.1 // 没有收到下限位 TON T39, 50 // 5秒延时T39是100ms定时器 LD T39 S M2.1, 1 // 切刀故障标志位 R M0.4, 1 // 退出切割状态报警标志位触发后主程序里统一处理报警指示红灯亮、蜂鸣器响、所有动作输出复位、状态位清零把故障代码放到VW10里组态王读取后弹报警窗口。手动模式一般用于设备调试和换刀对刀。手动模式下送料电机和切刀各自独立点动控制不经过状态机。例如手动送料就是I0.4直接驱动Q0.0手动切刀就是I0.5直接驱动Q0.2。手动模式下同样要保留限位保护比如手动切刀时如果切刀不在上位不允许启动切刀动作。4. 组态王监控界面与数据管理4.1 组态王与S7-200的通信设置组态王和设备通信之前要做的第一件事就是在设备驱动里选对型号。组态王6.55自带S7-200的驱动用PPI协议通信通信媒介是COM口也就是PC/PPI电缆连接PLC的编程口。配置步骤是这样打开组态王在工程浏览器的“设备”节点下添加一个“PLC”选“西门子”-“S7-200系列”-“PPI”然后给设备取一个名字比如“PLC1”通信参数设置里COM口号选实际连接的串口波特率设为9600数据位8位停止位1位无校验。S7-200的通信波特率出厂默认是9.6kbps和组态王保持一致。如果之前改过PLC的通信参数就要和实际值一致否则连不上。这里有个非常容易踩的坑PC/PPI电缆要设置在“PPI”模式不能用“FREE”模式否则组态王发出去的报文PLC不响应。另外如果电脑上有多个串口USB转串口线在设备管理器里的COM号可能每次都变调试时打开设备管理器确认一下COM号再填到组态王里。4.2 数据词典变量定义与地址映射数据词典是组态王的核心它负责管理上位机和PLC之间交换数据的所有变量。每一台PLC在组态王里都有对应的寄存器地址比如输入映像区是I输出是Q位存储区是MV区是V。变量类型要对应好Q0.0这类的输出位在组态王里定义成“I/O离散”变量数据类型选“Bit”地址填“Q0.0”M0.0这种状态位同样定义成“I/O离散”地址“M0.0”VW0这种整数变量定义成“I/O整数”地址“VW0”VD100这种双字实数定义成“I/O实数”地址“VD100”注意S7-200的V区地址在组态王里基本就是直接写VW0、VD4这种。如果要对PLC的定时器T37的当前值进行实时监控组态王里也可以读但不如直接在STEP 7-Micro/WIN里看方便我一般不在组态王里监控定时器。变量定义时采集频率不要设得太高500毫秒或者1秒就够用了太快反而增加通信负担。特别是开关量变化本来就不频繁1秒采集一次完全没有问题。对于产量显示这种需要实时感的数据用500毫秒刷新已经非常平滑。4.3 监控画面的功能分区设计切片机监控画面我按车间操作工的习惯来布局分为四个区域最上面是设备运行状态区有启动、停止、急停三个按钮还有运行/停止指示中间是工艺监控区用图形方式显示送料电机、夹紧气缸、切刀的位置状态模拟现场设备的动作动画下面是产量数据显示区当前产量、目标产量、完成率右侧是报警信息区列出当前存在的故障和报警历史。按钮和PLC的交互方式要讲清楚。组态王里的按钮有两种基本用法一种是“按下时置位、释放时复位”适合点动控制另一种是“切换状态”适合启动停止这种保持型操作。我的建议是启动按钮用“按下时置位M20.0”停止按钮用“按下时置位M20.1”然后在PLC程序里处理这两个M信号的优先级这样比直接在组态王里置位复位输出点更安全。中间工艺监控区可以做动画连接。比如送料电机运行时用一个图标显示“运行”并和Q0.0变量关联Q0.0为1时显示绿色为0时显示灰色。切刀位置可以通过I1.0和I1.1两个限位信号来判断上限位有信号显示“切刀上位”下限位有信号显示“切刀下位”。这样操作工站在屏幕前就能知道设备目前执行到哪一步了。4.4 历史数据报表与趋势曲线配置做历史数据报表的目的主要是车间要统计产量、设备利用率、故障次数。组态王里做历史数据要分三步走第一步是在数据词典里勾选变量的“允许历史记录”第二步是在历史数据库中建记录条件第三步是在画面上用报表或者趋势曲线把这些数据显示出来。历史记录变量方面当前产量VW0、目标产量VW4、运行状态M区几个关键变量都应勾选。记录方式可以选“按变化记录”或“按固定周期记录”产量这种变化不快的按变化记录就行减少数据量运行状态这种开关量按变化记录。故障信息建议用字符串变量保存每次故障发生时PLC把故障代码写到VW30组态王检测到故障代码变化后把故障描述和当前时间写入数据报表。报表窗口配置组态王提供“报警信息报表”和“数据浏览报表”两种控件。拿数据浏览报表举例双击控件进入属性配置在“数据源”里选中刚才配好的历史记录变量然后设置查询时间段运行后就能自动生成报表。我通常在画面里放一个“今日产量查询”按钮操作工点一下报表自动刷新出当天每小时的产量汇总。趋势曲线是给车间主任看的一个PC上拉一个实时趋势窗口观察设备运行节奏。组态王的趋势控件有两种运行趋势和实时趋势。实时趋势是动态更新的适合观察当前数据波动运行趋势可以查询历史某一段的数据。我这里建议用实时趋势曲线会比较平滑。5. 联调过程与常见问题排查5.1 组态王连接不上PLC的排查思路联调阶段最常遇到的问题就是组态王和设备通信失败。通信不上画面全部显示无效数据产量不动按钮没反应。排查顺序非常重要别乱来按下面这个步骤走第一步检查硬件链路。打开设备管理器确认串口设备存在且COM口正确。我用USB转串口线时遇到过一个问题驱动装完之后设备管理器里显示COM4但组态王里填的是COM3那肯定连不上。把PLC编程口那边拔下来重新插紧检查PC/PPI电缆的五个针脚有没有接触不良。第二步检查通信参数。组态王里设备通信参数和PLC实际参数必须一致。PC/PPI电缆的波特率拨码开关可能有问题注意PC/PPI电缆上是有一个拨码开关的有些型号有有些没有要确认它拨的位置。第三步测试PLC是否正常工作。用STEP 7-Micro/WIN软件在线连接PLC如果能在线说明PLC通信口没问题问题出在组态王侧如果STEP 7-Micro/WIN都连不上那就是物理链路、波特率或者PLC被占了通信口。PLC的编程口同一时间只能被一个主站占用如果STEP 7-Micro/WIN正开着在线监控组态王就连不上了这个很容易忽略。5.2 组态王运行提示“创建协议组件失败”这个报错不少人遇到过打开组态王工程时运行系统弹出“创建协议组件失败”的提示。出现这个问题的原因通常是组态王的协议驱动组件没有正确注册。常见场景是用360或者其它安全软件清理系统时把组态王DLL组件给“优化”掉了或者组态王装在非默认路径后又移动过目录注册表里的组件路径失效了。解决方法是重装组态王驱动组件或者干脆卸载后重新安装组态王装的时候暂时退出杀毒软件。装完之后在系统服务里确认一下和组态王相关的服务是否启动。另外组态王对.NET Framework有依赖如果系统里.NET环境出问题组件注册也会失败重装.NET后再试。5.3 产量计数不准的排查方法计数不准有两种典型情况一种是多计一种是少计。多计通常是光电传感器信号存在抖动或者物料在传感器前面来回晃动瞬间反复触发计数器一个扫描周期里加了好几次。解决方法是PLC里加输入滤波器。S7-200系统块里可以对每个输入设滤波时间从0.2ms到12.8ms可调对光电传感器信号设6.4ms或者12.8ms比较合适。少计则要检查程序逻辑。如果用的是状态位触发计数要确认状态位M0.7是否被正确置位而且置位的时间足够长至少超过一个扫描周期。如果M0.7在同一个扫描周期内被置位又被复位计数器指令还没执行到自然就漏计数了。这种问题在梯形图上很难一眼看出来我的排查方法是在STEP 7-Micro/WIN里用状态图表监控M0.7的状态变化看它是不是稳定地保持几个扫描周期。5.4 运行中输出点没动作的硬件排查如果梯形图逻辑上看输出已经通了但现场设备就是不动这属于“软通硬不通”。拿万用表先量PLC输出点Q0.0和公共端1L之间的电压如果有220V电压说明PLC输出正常问题在外部线路比如接触器线圈没接好、接线松了或者接触器本身坏了。如果Q0.0和公共端之间没有电压再量PLC输入侧有没有收到反馈信号。很多时候是传感器坏了或者没对准输入信号根本没进PLC。用强制功能在STEP 7-Micro/WIN里强制Q0.0为ON看设备动不动如果强制能动说明硬件通道没问题问题在程序逻辑如果强制都不动那就是接线或者器件故障直接用万用表从PLC输出端子到设备线圈一路查过去。还有一个容易忽略的地方S7-200继电器输出型的公共端是分组独立的1L对应Q0.0到Q0.32L对应Q0.4到Q0.7。如果负载接在Q0.4上但公共端只给1L供了电2L没接电源那Q0.4怎么都不会有输出。这类问题看着低级但在现场调试时还挺常见接线之前把公共端分组看清楚能省很多排查时间。我自己的体会是这套系统的难点从来不在某个单独的指令或配置上而在PLC程序和上位机画面之间的“思维切换”上。PLC工程师习惯用继电器逻辑思考上位机工程师习惯用数据流思考做切片机这种项目必须同时掌握两边的思路才能真正把设备调顺。调试过程中多记录信号时序、多留测试数据后面遇到同类设备改造直接拿之前的工程做底子效率能翻一倍。