☰
组态王+S7-200 PLC虚拟仿真:不接线也能跑通大小球分拣系统
2026/10/1 12:58:49 网站建设 项目流程

如果你手上只有一台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区状态,画面上让传送带动、推杆动,看着就跟真的现场一样。

整个模拟运行的链路是:

  1. 组态王画面按钮按下,通过通信把M10.0写为1
  2. PLC扫描到这个软继电器为1,运行自动程序
  3. PLC根据内部逻辑,把Q0.0、Q0.1等置位或复位
  4. 组态王读取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 工艺流程描述

假设一套标准的皮带分拣线,主线是一条连续运行的传送带,入口处有一个料斗,球从料斗落下后经过检测工位,根据尺寸大小由两个推杆分别推入不同的收集箱。

我设计的动作序列是这样:

  1. 系统启动,传送带开始低速运行,料斗挡板打开,一个球滚落到检测工位
  2. 检测工位的光电传感器检测到球到位,挡板关闭,防止第二个球跟着滚出来
  3. 大小检测装置判断球的尺寸,输出“大球”或“小球”信号
  4. 传送带运送球前进,根据判断结果,控制程序计算出球到达对应推杆位置的时间
  5. 球到达大球推杆位置时,大球推杆伸出,把球推入大球收集箱
  6. 球到达小球推杆位置时,小球推杆伸出,把球推入小球收集箱
  7. 推杆伸出到位后计时,然后缩回复位
  8. 分拣计数加一,挡板再次打开,进入下一个循环

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变量:

变量名关联地址类型方向
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 第一次单步模拟

先把组态王画面打开到这个页面:启动、停止、料斗有球、大球检测、小球检测、推杆反馈这些按钮都摆好。开始模拟一次大球分拣的完整流程:

  1. 点击“启动”按钮,画面中传送带动画开始运行,PLC的Q0.0变为1,指示灯变绿
  2. 点击“料斗有球”按钮,画面中一个球图形从料斗滚出,移动到检测工位
  3. 点击“大球检测”按钮,画面提示“检测到大球”,PLC内部M0.0被置位
  4. 等待2.5秒(定时器T37到达),画面中Q0.1变为1,大球推杆动画伸出
  5. 点击“推杆复位”按钮,推杆缩回,计数加1,画面上的计数显示“1”
  6. 点击“停止”按钮,传送带停止,运行指示灯变灰

这一套走下来,如果每一步画面状态都跟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毫秒,画面按钮和动画的刷新会流畅很多。具体位置在运行系统“系统配置”里的“采集频率”设置,按需调整即可。另外,给这个工程建个复盘文档,把调试过程中改过哪些定时器参数、遇到过哪些通信问题记下来——这套分拣系统最大的价值,就是你亲手在这套模拟环境里建立起来的调试感知,这些绝不是看几篇教程能替代的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询