如果你手上只有一台S7-200 PLC,没有传送带、没有光电传感器、没有气缸,却想跑通一套完整的“大小球分拣系统”,该怎么做?我这些年做过不少方案验证,得出的结论很直接:用组态王把整条分拣线画到屏幕上,把PLC的输入输出“虚拟化”,不用接一根控制线,就能把工艺逻辑、梯形图、上位机监控全部练一遍。这篇文章就聊聊这套方法——从分拣工艺拆解、PLC程序设计,到组态王画面组态和模拟运行联调,一步步给你捋清楚。
这套玩法特别适合两类人:一类是刚接触S7-200和组态王的新手,想找个完整项目练手又不想先砸钱买传感器;另一类是像我一样的老油子,接到一个分拣方案时,想先在上位机里验证一下动作时序和控制逻辑,再决定要不要出硬件接线图。无论你是哪种,按照下面这套流程走一遍,收获绝对不小。
1. 这套模拟系统的运行逻辑:不接线不等于不练真功夫
很多人一听“不接线模拟”,第一反应是“那不就是看个画面动吗,有什么技术含量”。其实恰恰相反,模拟运行最关键的不是画面,而是PLC里跑的是真实程序,上位机操作的是真实通信链路。我们只是把现场的传感器信号、执行器反馈,换成了组态王画面上的按钮和开关,PLC的程序一个字都没简化。
系统组成是这样的:
| 组成部分 | 真实方案 | 模拟方案 |
|---|---|---|
| PLC控制器 | S7-200 CPU | S7-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写为1
- PLC扫描到这个软继电器为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/WIN
S7-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.1,PLC内部用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为1,M20.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加计数,比如C10:
Network 5 分拣计数 LD M1.0 // 推杆完成返回信号 CTU C10, 100 // 计数到100保持计数器的值可以给组态王读取,在画面上显示“当前分拣数量”。如果你希望分拣到指定数量后自动停机,就把计数值和一个设定值比较,比如比较指令CMP:
LDW>= 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变量:
| 变量名 | 关联地址 | 类型 | 方向 |
|---|---|---|---|
| StartBtn | M10.0 | I/O离散 | 读写 |
| StopBtn | M10.1 | I/O离散 | 读写 |
| HopperSensor | M10.2 | I/O离散 | 读写 |
| BigBallDetect | M10.3 | I/O离散 | 读写 |
| SmallBallDetect | M10.4 | I/O离散 | 读写 |
| ConveyorMotor | Q0.0 | I/O离散 | 只读 |
| BigPushValve | Q0.1 | I/O离散 | 只读 |
| SmallPushValve | Q0.2 | I/O离散 | 只读 |
| BallCount | C10 | I/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包一下复位条件,能避免大多数这类问题。
第三个坑:组态王动画闪烁或者不动
传送带动画不动,先别急着怀疑PLC,90%是变量关联错了。检查画面元素的“动画连接”对话框,确认连接变量是Q0.0对应的ConveyorMotor,不是某个内存变量。还有一个常见问题:颜色变化和水平移动同时设置时,两个动画会互相干扰,导致图形乱跳。我的经验是,一个图形元素上动画连接的种类尽量少,传送带就用水平移动,指示灯就用颜色变化,不要混用。
第四个坑:双口PLC还是不够用
CPU 224 XP的双口方案,一头连组态王,一头连编程线,理论上很美好。但实际调试中,编程软件一打开在线监控,就会占用CPU的通信资源,偶尔会导致组态王设备超时不刷新。这时候把STEP 7-Micro/WIN的在线监控关掉就行,不用太紧张。
6.5 老司机的方案验证心法
这套模拟系统跑顺之后,用途非常广。我自己做方案验证时,会在组态王画面里加几个监控文本,把PLC里的关键中间变量显示出来,比如分拣计数C10、当前运行状态M20.0、大球标志M0.0。改完PLC程序的定时参数后,不用重新接线,直接在画面里看动作时序对不对,几分钟就能确认一套新方案是否可行。
另外,我强烈建议在联调阶段做一份“信号时序表”,把每个动作的触发条件、持续时间、复位条件列出来,画面验证的同时对照表格检查。很多隐蔽的逻辑冲突,比如推杆伸出和传送带停止同时发生、计数器和复位信号竞争,都得靠时序表才能发现。
最后再分享一个实操小技巧
做这种模拟联调时,组态王画面的操作节奏很影响验证结果。我通常会把组态王运行系统里的“采集频率”调到50毫秒,画面按钮和动画的刷新会流畅很多。具体位置在运行系统“系统配置”里的“采集频率”设置,按需调整即可。另外,给这个工程建个复盘文档,把调试过程中改过哪些定时器参数、遇到过哪些通信问题记下来——这套分拣系统最大的价值,就是你亲手在这套模拟环境里建立起来的调试感知,这些绝不是看几篇教程能替代的。