ARTICLE DETAIL

资讯详情

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

组态王+S7-200 PLC虚拟仿真:不接线也能跑通大小球分拣系统

组态王+S7-200 PLC虚拟仿真:不接线也能跑通大小球分拣系统 如果你手上只有一台S7-200 PLC没有传送带、没有光电传感器、没有气缸却想跑通一套完整的“大小球分拣系统”该怎么做我这些年做过不少方案验证得出的结论很直接用组态王把整条分拣线画到屏幕上把PLC的输入输出“虚拟化”不用接一根控制线就能把工艺逻辑、梯形图、上位机监控全部练一遍。这篇文章就聊聊这套方法——从分拣工艺拆解、PLC程序设计到组态王画面组态和模拟运行联调一步步给你捋清楚。这套玩法特别适合两类人一类是刚接触S7-200和组态王的新手想找个完整项目练手又不想先砸钱买传感器另一类是像我一样的老油子接到一个分拣方案时想先在上位机里验证一下动作时序和控制逻辑再决定要不要出硬件接线图。无论你是哪种按照下面这套流程走一遍收获绝对不小。1. 这套模拟系统的运行逻辑不接线不等于不练真功夫很多人一听“不接线模拟”第一反应是“那不就是看个画面动吗有什么技术含量”。其实恰恰相反模拟运行最关键的不是画面而是PLC里跑的是真实程序上位机操作的是真实通信链路。我们只是把现场的传感器信号、执行器反馈换成了组态王画面上的按钮和开关PLC的程序一个字都没简化。系统组成是这样的组成部分真实方案模拟方案PLC控制器S7-200 CPUS7-200 CPU实物或仿真器输入信号光电传感器、行程开关组态王画面按钮写入PLC的M区软继电器输出执行传送带电机、气缸电磁阀只看PLC的Q区状态画面同步显示动画监控界面组态王上位机组态王上位机画面这里有个关键点组态王能不能直接写PLC的物理输入点I0.x大多数情况下不行。S7-200的I区是只读的即使通过PPI通信上位机也只能读不能改写。所以模拟输入信号的时候正确的做法是在PLC程序里预留出一组M区软继电器比如M10.0对应启动按钮、M10.2对应料斗有球检测、M10.3对应大球检测。组态王的画面按钮去写这些M点PLC的程序逻辑里用M点替代物理输入点参与控制。这样一来硬件传感器没接但程序里的“输入信号”一个都不少。输出侧就简单多了。Q0.0、Q0.1这些是物理输出点不接负载也不影响PLC内部的输出映像区状态。组态王直接读取Q区状态画面上让传送带动、推杆动看着就跟真的现场一样。整个模拟运行的链路是组态王画面按钮按下通过通信把M10.0写为1PLC扫描到这个软继电器为1运行自动程序PLC根据内部逻辑把Q0.0、Q0.1等置位或复位组态王读取Q区状态驱动画面动画这套链路跟真实系统的差别仅仅是“输入信号从哪里来”和“输出动作去哪里”PLC的控制逻辑部分完全一致。所以我说不接线练的恰恰是最难的控制逻辑和上位机组态能力。2. 软硬件准备S7-200选型、编程软件与组态王安装的避坑清单开始动手之前先把环境准备好。S7-200家族现在虽然已经被S7-200 SMART等替换但市面上存量巨大学校、工控柜、二手市场到处都能找到用它学习成本很低。2.1 S7-200型号选择我推荐用CPU 224 XP或者CPU 226。原因很简单自带两个通信口一个连编程软件一个连组态王调试时不用来回换线程序存储空间够用分拣系统这种规模的梯形图绰绰有余CPU 224 XP还带两个模拟量输入以后想扩展称重、测距类传感器很方便如果手头只有CPU 221这种小点数的也不是不行但通信口只有一个就要做好频繁拔插编程线的心理准备。做模拟联调最怕的就是线换来换去所以尽量用双口的型号。2.2 编程软件STEP 7-Micro/WINS7-200的编程软件是 STEP 7-Micro/WIN经典版本是 V4.0 SP9。这个软件支持梯形图LAD、语句表STL和功能块图FBD咱们后面写的程序主要以梯形图为主符合大多数人的阅读习惯。安装的时候有几点注意软件比较老建议在Windows XP到Windows 10 32位环境下使用如果电脑是64位系统实际也能运行但别用太新的Windows 11可能存在兼容性问题安装路径不要带中文否则Micro/WIN的某些功能会报错编程电缆一般用USB-PPI线驱动装好后在电脑里会识别成一个COM口这个COM口号要记下来后面组态王配置设备时要用2.3 组态王版本与图库组态王目前常用的版本是6.60 SP4很多项目都在用稳定性不错。学习用的授权直接去组态王官方申请试用版就行正常安装、正常激活别去碰那些乱七八糟的破解版本不仅容易中病毒还会让你在项目里埋下隐患。安装组态王时我踩过几个坑这里多说两句安装前最好关闭杀毒软件它经常把组态王的加密狗驱动误报成风险程序安装目录也建议保持英文比如D:\KingView不要用中文路径装完之后一定要手动检查一遍设备驱动有没有装全尤其是西门子S7-200系列PPI驱动。打开组态王开发系统在“设备”里新建时能看到驱动列表如果找不到S7-200说明驱动丢失需要重新安装组态王自带的图库里面已经有传送带、电机、阀门、气缸这些图形对象。分拣系统画面里的传送带和气缸可以直接从图库里拖出来节省不少画图时间。不过图库里的对象默认尺寸比较大放上去之后记得调整缩放比例。3. 分拣工艺与控制要求先把动作时序捋清楚程序才不会乱写PLC程序之前我习惯先花半小时把工艺动作拆清楚。程序写得再漂亮动作时序不对现场一样废。大小球分拣系统的工艺其实很经典逻辑不复杂但细节多。3.1 工艺流程描述假设一套标准的皮带分拣线主线是一条连续运行的传送带入口处有一个料斗球从料斗落下后经过检测工位根据尺寸大小由两个推杆分别推入不同的收集箱。我设计的动作序列是这样系统启动传送带开始低速运行料斗挡板打开一个球滚落到检测工位检测工位的光电传感器检测到球到位挡板关闭防止第二个球跟着滚出来大小检测装置判断球的尺寸输出“大球”或“小球”信号传送带运送球前进根据判断结果控制程序计算出球到达对应推杆位置的时间球到达大球推杆位置时大球推杆伸出把球推入大球收集箱球到达小球推杆位置时小球推杆伸出把球推入小球收集箱推杆伸出到位后计时然后缩回复位分拣计数加一挡板再次打开进入下一个循环3.2 输入输出信号分配在模拟方案里物理输入点我们全部换成M区软继电器。先定义一张完整的IO表后面写程序和组态王变量都能直接用信号类型地址含义软输入M10.0启动按钮软输入M10.1停止按钮软输入M10.2料斗有球到位检测软输入M10.3大球检测信号软输入M10.4小球检测信号软输入M10.5推杆缩回到位反馈输出Q0.0传送带电机输出Q0.1大球推杆电磁阀输出Q0.2小球推杆电磁阀输出Q0.3运行指示灯有朋友可能会问光电传感器才能真正判断球到位用M10.2模拟的话球“走”到哪了全靠画面上的按钮手动置位是不是有点假确实纯手动模拟时你点一下按钮才触发一次信号节奏是人工控制的。但PLC内部的顺序控制、定时逻辑、互锁逻辑一点都不会少。等你跑会了这套逻辑以后接真实的传感器程序架构完全可以平移过去。3.3 大小球判断方式大小球的判断有很多种方案常见的有用对射式光电开关大球会遮断光线小球不会用称重传感器通过重量区分用超声波传感器测直径模拟方案里最省事的就是用两个开关量的软输入M10.3代表“检测到大球”M10.4代表“检测到小球”。两个信号互斥程序里要做互锁处理防止同时为1这种非法状态。4. PLC梯形图设计软输入代替硬传感器程序照跑不误硬件环境准备好、工艺想清楚了接下来是核心部分写PLC程序。这部分我会把关键的梯形图逻辑拆开讲不搞那种直接甩几百行代码的做法因为那样你抄下来也学不会改个工艺就抓瞎。4.1 程序整体结构我建议把程序分成三块初始化逻辑复位所有标志位和计数器自动运行逻辑顺序控制的核心部分输出映射逻辑将内部标志位映射到Q输出PLC的扫描周期是循环执行的梯形图从上往下跑跑完又从第一行开始。顺序控制最怕的就是“这个周期置了位下个周期又被复位”所以要用“置位优先”的思路用置位指令SET去保持状态用复位指令RST去清除状态。4.2 启停控制与运行标志先看启动和停止。组态王画面的启动按钮写M10.0停止按钮写M10.1PLC内部用M20.0作为“系统运行”的中间标志Network 1 启动保持回路 LD M10.0 O M20.0 AN M10.1 M20.0这段逻辑很基础但非常重要当M10.0瞬间为1时M20.0变为1同时通过自保持回路O M20.0维持住。一旦M10.1为1M20.0立刻断开。这就是典型的启保停电路现场按钮控制电机时也是这么写的。4.3 大小球识别与锁存球到达检测工位时M10.3或者M10.4为1系统要把这个结果“记住”不能等检测信号消失就丢掉。我习惯用一组标志位M0.0大球和M0.1小球做锁存Network 2 大小球识别锁存 LD M10.3 S M0.0 LD M10.4 S M0.1 LD M10.2 // 新球到位时复位上一次的结果 R M0.0, 1注意这里的顺序先判断新信号再在新球到位时清除旧状态。实际调试时要特别注意M10.2的“上升沿”处理因为球到位信号保持期间如果每个扫描周期都去复位M0.0那检测结果永远锁不住。正确做法是在M10.2的上升沿触发时复位或者用边沿检测指令EU。4.4 定时器决定推杆动作时机传送带把球送到推杆位置需要一定时间。这个时间在真实项目里靠传感器位置和传送带速度计算比如传送带速度是0.2米/秒检测点到推杆距离是0.5米那理论耗时2.5秒。S7-200的定时器T37精度是0.1秒设25代表2.5秒。大球推杆和小球推杆可能在不同的位置所以两个定时器分开Network 3 大球推杆启动延时 LD M0.0 AN M1.0 TON T37, 25 Network 4 大球推杆输出 LD T37 S Q0.1, 1推杆伸出之后不能一直顶着要有一个伸出时间比如1秒后自动缩回。这又要用到定时器T38并在缩回完成后复位相关标志位。完整逻辑会比这个长但核心就是“定时器触发动作动作完成后复位”。4.5 计数器与循环控制每分拣一个球计数器加一。S7-200用CTU加计数比如C10Network 5 分拣计数 LD M1.0 // 推杆完成返回信号 CTU C10, 100 // 计数到100保持计数器的值可以给组态王读取在画面上显示“当前分拣数量”。如果你希望分拣到指定数量后自动停机就把计数值和一个设定值比较比如比较指令CMPLDW C10, VW100 // VW100里存设定值 M20.1设定值VW100可以在组态王画面上输入这就是老司机做方案验证时调整工艺参数的地方。5. 组态王画面组态把分拣线完整搬到屏幕上的步骤PLC程序写完下载到PLC里跑通接下来是组态王的部分。画面组态的核心是把PLC里的每一个软输入和输出对应到画面的按钮、指示灯、动画元素上。我按步骤来拆。5.1 建立工程与配置设备打开组态王开发系统新建工程名字我习惯叫“BallSort_Demo”。然后进入“设备”配置选择驱动设备驱动选“西门子S7-200系列PPI”通信方式选串口对应编程电缆驱动出来的COM口号波特率要和PLC侧的设置一致S7-200默认PPI波特率是9600这里有个容易忽略的点PLC侧的通信端口参数如果被改过组态王这边必须一致否则连不上。在STEP 7-Micro/WIN里通过“通信”菜单可以查看和修改PLC端口设置。我调试时遇到过几次“组态王设备离线”的问题最后都是波特率不一致导致的。5.2 定义I/O变量画面上的每一个按钮、指示灯都要先定义成变量。组态王的变量分两类I/O变量用于和PLC通信内存变量只是画面内部使用。我们核心要建这几个I/O变量变量名关联地址类型方向StartBtnM10.0I/O离散读写StopBtnM10.1I/O离散读写HopperSensorM10.2I/O离散读写BigBallDetectM10.3I/O离散读写SmallBallDetectM10.4I/O离散读写ConveyorMotorQ0.0I/O离散只读BigPushValveQ0.1I/O离散只读SmallPushValveQ0.2I/O离散只读BallCountC10I/O整型只读组态王里I/O离散变量对应一个位I/O整型对应S7-200的计数器值。C10在组态王里读取时有时候会被读成双字这个需要结合驱动说明确认。我的经验是计数器值建议先把C10 MOV到VW区再用I/O整型指向VW区读起来最稳不会出现数据错位。5.3 绘制画面与动画连接图画得好不好直接影响调试效率。我一般这样画用图库里的传送带图形放在画面上半部分矩形拉伸成横向长条料斗用三角形图形放置在传送带左侧入口两个推杆用矩形组合画在传送带中段和尾段位置收集箱用两个带边框的矩形分别标注“大球箱”“小球箱”用椭圆图形代表大小球球的大小用缩放体现动画连接是画面“活”起来的关键。以传送带为例选中传送带图形在“动画连接”里添加水平移动连接变量ConveyorMotor当变量值为1时传送带图形周期性左右移动模拟转动效果值为0时静止移动距离建议设30到50像素移动速度根据PLC扫描周期调整太快太慢看着都难受推杆的动画连接类似连接BigPushValve变量当变量为1时推杆图形沿水平方向向右移动一段距离。这里要注意组态王的“水平移动”是在画面里同时定义“移动距离”和“变量值范围”我一开始没设变量值范围推杆动不动就飘出画面后来才发现要把值范围设成0到1。5.4 按钮和指示灯画面上的按钮作用是把M10.x置1。在组态王里可以用“按钮组”或者图库的开关图形设置“按下时”动作StartBtn 1;停止按钮则设置成StopBtn 1;这里有个交互细节启动按钮按下后M10.0会保持为1程序里自保回路已经启动M10.0即使变0也不影响运行所以可以在按钮动作里写成“按下时置1弹起时置0”。对应组态王的按钮有“按下时”和“释放时”两个动作选项分别写赋值脚本即可。指示灯更简单一个小圆形图形填充颜色用动画连接运行时显示绿色停止时显示灰色颜色动画连接的类型选择“颜色变化”变量选ConveyorMotor值0对应灰色值1对应绿色。6. 联调与方案验证从单步模拟到连续运行的完整过程画面组态完了最刺激的联调环节来了。这里我把实际操作流程和踩过的坑一起讲你可以照着走一遍。6.1 联调前的检查清单盲目上电运行出了问题都不知道是PLC的问题还是组态王的问题。我每次联调前都过一遍这个清单PLC处于RUN状态程序下载无报错编程线连接正常设备管理器中能识别COM口组态王设备配置里的COM口和波特率与PLC一致组态王运行系统的设备连接状态显示正常在线画面变量全部正确连接无红色报警变量6.2 第一次单步模拟先把组态王画面打开到这个页面启动、停止、料斗有球、大球检测、小球检测、推杆反馈这些按钮都摆好。开始模拟一次大球分拣的完整流程点击“启动”按钮画面中传送带动画开始运行PLC的Q0.0变为1指示灯变绿点击“料斗有球”按钮画面中一个球图形从料斗滚出移动到检测工位点击“大球检测”按钮画面提示“检测到大球”PLC内部M0.0被置位等待2.5秒定时器T37到达画面中Q0.1变为1大球推杆动画伸出点击“推杆复位”按钮推杆缩回计数加1画面上的计数显示“1”点击“停止”按钮传送带停止运行指示灯变灰这一套走下来如果每一步画面状态都跟PLC的输出Q区对应上恭喜你的模拟分拣系统已经能跑了。6.3 连续运行模式单步模拟验证逻辑没问题后可以进入连续运行模式。这个模式的目的是验证循环控制也就是PLC在无人干预的情况下能不能按顺序反复执行分拣动作。连续运行时组态王画面上的“料斗有球”就不能靠手点了否则你得像个机器人一样在那儿狂点按钮。我常用的办法是在PLC程序里加一个“自动循环模拟”逻辑当球被推走后用定时器延时1秒自动置位一个M10.6“模拟料斗供球”信号程序里把M10.6当作物料到位信号。这样PLC自身就能循环供球组态王全程只做监控验证效果更接近真实系统。这个思路也是老司机做方案验证的核心能自动化的环节都让它自动化才暴露得出来时序上的冲突。6.4 联调中真实遇到过的坑最后集中说一下这套模拟系统从搭建到跑通我亲身踩过或者看朋友踩过的几个高频问题。第一个坑组态王写不了I区这是新手最容易卡死的问题。在画面上做了个按钮赋值目标直接指向I0.0结果怎么点PLC里都没有反应。因为S7-200的I区是只读的上位机通过PPI通信无法写入。解决办法就是前面强调的物理输入全部用M区软继电器替代。这个设计不是偷懒而是模拟运行的必然选择。第二个坑定时器被重复复位导致动作不执行分拣循环里T37用来做大球推杆的延时。如果程序里每一轮循环都去复位T37球还没走到推杆位置定时器就被清零了推杆永远不动作。解决思路是把“开始定时”和“复位定时”的条件分开只在检测到新球时才复位之后保持定时。用上升沿指令EU包一下复位条件能避免大多数这类问题。第三个坑组态王动画闪烁或者不动传送带动画不动先别急着怀疑PLC90%是变量关联错了。检查画面元素的“动画连接”对话框确认连接变量是Q0.0对应的ConveyorMotor不是某个内存变量。还有一个常见问题颜色变化和水平移动同时设置时两个动画会互相干扰导致图形乱跳。我的经验是一个图形元素上动画连接的种类尽量少传送带就用水平移动指示灯就用颜色变化不要混用。第四个坑双口PLC还是不够用CPU 224 XP的双口方案一头连组态王一头连编程线理论上很美好。但实际调试中编程软件一打开在线监控就会占用CPU的通信资源偶尔会导致组态王设备超时不刷新。这时候把STEP 7-Micro/WIN的在线监控关掉就行不用太紧张。6.5 老司机的方案验证心法这套模拟系统跑顺之后用途非常广。我自己做方案验证时会在组态王画面里加几个监控文本把PLC里的关键中间变量显示出来比如分拣计数C10、当前运行状态M20.0、大球标志M0.0。改完PLC程序的定时参数后不用重新接线直接在画面里看动作时序对不对几分钟就能确认一套新方案是否可行。另外我强烈建议在联调阶段做一份“信号时序表”把每个动作的触发条件、持续时间、复位条件列出来画面验证的同时对照表格检查。很多隐蔽的逻辑冲突比如推杆伸出和传送带停止同时发生、计数器和复位信号竞争都得靠时序表才能发现。最后再分享一个实操小技巧做这种模拟联调时组态王画面的操作节奏很影响验证结果。我通常会把组态王运行系统里的“采集频率”调到50毫秒画面按钮和动画的刷新会流畅很多。具体位置在运行系统“系统配置”里的“采集频率”设置按需调整即可。另外给这个工程建个复盘文档把调试过程中改过哪些定时器参数、遇到过哪些通信问题记下来——这套分拣系统最大的价值就是你亲手在这套模拟环境里建立起来的调试感知这些绝不是看几篇教程能替代的。
返回列表