1. 项目背景与需求梳理
1.1 为什么需要一个“会自己跑”的装卸料小车
港口码头的散货装卸作业里,有一种很常见的场景:皮带机把物料送到某个中转料斗,料斗下方的小车需要沿着轨道往复运动,把料斗里的物料均匀地卸到指定的堆场区域。以前很多码头靠人工操作按钮,工人盯着料位、听着指挥,来回启动小车,不仅劳动强度大,而且容易漏卸、堆料不均,效率也上不去。这个项目的目标就很直接:用一套成熟的PLC控制系统,让小车自动完成“前进卸料—到达限位—反向卸料—回到原点”的循环,同时用组态王在上位机画面上实时监控小车位置、料斗状态和故障信息。
选S7-200这个型号,乍一看有点“老”,但放在这类中小型设备控制里非常稳。S7-200虽然不如Smart或S7-1200那么新潮,但它的指令集简单、响应快、PID和高速计数功能都在线,关键是对组态王的支持非常成熟,很多老工程师都摸过,后续维护不会抓瞎。组态王做上位机画面,也是国内工控圈用了十几年的组合,数据交互稳定,做报表、报警都方便。
1.2 控制需求与技术指标
这个项目的需求并不复杂,但有几个硬指标必须满足:
- 小车能在两条轨道上往复运行,运行速度分高速和低速两档,接近目标位置时自动切低速,避免撞击限位。
- 手动模式下,操作员可以在机旁操作箱或者触摸屏上用按钮控制前进、后退、停止。
- 自动模式下,小车根据料斗料位信号和卸料位置检测信号,按照预设逻辑自动往返。
- 必须设置硬件限位开关和软件双重保护,超限立即停车并报警。
- 上位机通过组态王实时显示小车位置、运行方向、设备状态、累计卸料次数,并能远程下发启动、停止指令。
这套系统的核心价值不是高深的技术,而是把“顺序控制+联锁保护+人机交互”做扎实,让现场人员愿意用、敢用。
2. 硬件选型与系统架构
2.1 PLC选择:S7-200为何还是经典
S7-200有很多型号,这里选用CPU 226 DC/DC/DC或CPU 226 AC/DC/继电器,主要看现场电源和负载类型。CPU 226自带40点I/O,有24路数字输入、16路数字输出,对于小车控制这种规模的项目基本够用。如果I/O不够,可以挂一个EM223扩展模块,16入16出,也不算贵。
选择直流输出型还是继电器输出型,需要考虑输出负载的性质。小车行走接触器、报警电铃这些是交流负载,如果用继电器输出,直接驱动接触器线圈没问题,但触点寿命有限;如果用直流输出,可以接中间继电器再驱动接触器,响应更快,触点也更耐用。这个项目里我用了晶体管输出型,通过中间继电器切换,兼得速度和隔离。
S7-200的编程软件是STEP 7-Micro/WIN,现在很多地方还在用,界面虽然老,但梯形图编辑、在线监控、状态表调试都很顺手。用USB-PPI电缆连接PLC,注意波特率要和程序设定一致,默认9.6kbps。
2.2 组态王与上位机监控的配合
组态王版本很多,我用的是KingView 6.55,对S7-200的通讯支持是通过PPI协议实现的。组态王里新建一个“S7-200(PPI)”驱动,设置COM口参数或者以太网参数。如果PLC用的是CPU 226加CP243-1以太网模块,组态王可以直接走TCP/IP;如果是普通USB-PPI电缆,那只能走串口。现场通常用PPI串口方式,稳定够用。
组态王的运行界面通常部署在一台工控机上,Win7或Win10系统都能跑。工控机通过串口线或USB转串口线连接PLC的Port0口。注意USB转串口一定要用质量好的芯片,比如FTDI或原装CH340,否则通讯会掉线、乱码。
2.3 I/O点表与外部元件接线考虑
做这种项目,第一步永远是列I/O点表,而不是急着写程序。这个项目的I/O分配大致如下:
| 地址 | 类型 | 功能说明 |
|---|---|---|
| I0.0 | 数字输入 | 小车前进限位(远端) |
| I0.1 | 数字输入 | 小车后退限位(近端/原点) |
| I0.2 | 数字输入 | 轨道中部减速接近开关 |
| I0.3 | 数字输入 | 料斗料位高信号 |
| I0.4 | 数字输入 | 料斗料位低信号 |
| I0.5 | 数字输入 | 手动自动切换开关 |
| I0.6 | 数字输入 | 前进按钮 |
| I0.7 | 数字输入 | 后退按钮 |
| I1.0 | 数字输入 | 急停按钮 |
| I1.1 | 数字输入 | 变频器故障信号 |
| Q0.0 | 数字输出 | 前进接触器 |
| Q0.1 | 数字输出 | 后退接触器 |
| Q0.2 | 数字输出 | 高速运行继电器 |
| Q0.3 | 数字输出 | 低速运行继电器 |
| Q0.4 | 数字输出 | 报警指示 |
| Q0.5 | 数字输出 | 电铃(卸料提示) |
小车行走电机一般用三相异步电机,配变频器调速。变频器的启停由PLC的继电器输出控制,速度给定可以是开关量多段速,也可以模拟量给定。这里用了两个数字量点去选高速/低速,简单可靠。变频器的模拟量输出端子可以反馈当前频率,如果不需要精确显示,也可以不接。
接线的时候,限位开关要选带机械触点的行程开关,或者用接近开关配合感应片。轨道靠近码头边缘,盐雾重,所有I/O线都要穿管,端子排要选防腐蚀型,PLC柜体建议用不锈钢或者喷塑钢板,防潮密封条要到位。经验教训是:限位开关的接线一定要用屏蔽电缆,屏蔽层单端接地,否则变频器启动瞬间容易误触发。
3. 控制程序设计与实现
3.1 装卸料小车的工作流程
这个项目的工艺流程可以拆成几个状态:
- 初始状态小车停在原点位置(后退限位压住),料斗低位信号有效。
- 皮带机向料斗供料,料斗料位达到高电平后,系统判断物料已足够,发出“卸料启动”指令。
- 小车低速启动并前进出料,离开原点后切换高速运行。
- 当小车接近轨道中部减速接近开关时,切换到低速继续前进。
- 到达前方卸料限位后,小车停车,停留一段时间让物料尽量卸净。
- 停留结束,小车低速后退,离开远端限位后切换高速后退。
- 接近原点时切低速,直到压住后退限位,停在原点。
- 如果料斗料位仍然高于低位,则再次重复流程;否则等待下一个供料周期。
这套流程用顺序控制梯形图写最清晰,不推荐一窝蜂地写SET/RST,那样维护起来会疯。
3.2 程序逻辑拆解:手动/自动/联锁
程序分成三个块:手动块、自动块、公共联锁块。
手动块里,前进、后退按钮直接通过互锁触点控制Q0.0/Q0.1。手动优先级要低于急停和限位,也就是说即使手动模式,碰到限位开关也必须停止。这个逻辑不能省,否则现场容易撞车。
自动块的核心是状态寄存器,我习惯用M存储位作为状态标识,比如M0.1表示“料斗已满待卸料”,M0.2表示“小车前进中”,M0.3表示“小车在远端停留”,M0.4表示“小车后退中”。用这些标志位的组合来触发输出。
举个梯形图片段,前进控制的核心逻辑:
- M0.1接通,且Q0.0未动作,且I0.0(前进限位)未压住,且I1.0(急停)未动作,则将M0.2置位。
- M0.2接通后,Q0.0得电,同时Q0.2(高速)得电;当I0.2减速接近开关动作时,Q0.2复位,Q0.3(低速)得电。
- 当I0.0到达远端限位时,M0.2复位,Q0.0复位,Q0.3复位,定时器T37开始计时5秒,M0.3置位。
后退逻辑对称,不展开。关键一点:所有输出都必须串接急停点I1.0的常闭触点,以及变频器故障I1.1的常闭触点。实际接线里急停是硬件直断接触器回路,但程序里也要做软急停,双保险。
3.3 关键经验:定时器、限位与顺序控制
定时器在这个项目里非常重要。远端停留时间T37,我设成5秒,这个参数要根据料斗卸净速度和物料流动性调整。如果是粘性物料,5秒不够,可以改成8秒甚至10秒;如果物料流动性好,3秒就够。记住:参数要到现场试,别拍脑袋。
还有一个典型坑:限位开关的动作位置和小车实际停止位置有偏差。因为机械惯性,小车撞到限位后接触器断开,但车还会往前滑一段。解决方法是提前减速,用中部接近开关触发低速,让小车以低速“爬”到限位,这样停车位置重复精度能控制在2厘米以内。如果限位没压住或者压过头,会造成程序状态错乱,所以要预留机械硬挡块。
顺序控制方面,我强烈建议用“步进梯形图”思路,把每一步写成一个网络,用前一步的完成条件触发下一步。这样调试时,打开软件一眼就能看到小车卡在哪一步,现场排查速度翻倍。S7-200的SCR指令也可以,但很多老工程师不习惯,还是用M位+自锁互锁方式更直观。
4. 组态王监控画面开发
4.1 建立设备与变量
组态王里新建工程,先在“设备通信”里添加设备。选“PLC”—“西门子”—“S7-200(PPI)”,然后设置COM口参数。注意S7-200的PPI协议是主从式,组态王做主站,PLC做从站,地址填写“1.0”之类的PLC站号,和Micro/WIN里设置的站号保持一致。
变量定义是重点,分类两批:
- I/O变量:直接映射PLC的I/O点或者M区,比如“小车前进中”对应Q0.0,“前进限位”对应I0.0,“故障报警”对应M1.0。
- 内存变量:用于画面内部计算的中间变量,比如卸料次数累加、运行时间统计。
变量类型要选对,开关量选“离散”,模拟量选“整数”或“实数”。如果要从PLC读取当前速度,需要建立VW区变量,注意S7-200的V区是字单位,组态王里要和PLC程序的地址完全对应,偏移一个字节数据就读错了。
4.2 画面设计与动画连接
画面不必花哨,但信息要一屏看懂。我做了四个区域:
- 主画面:用两条轨道图形表示小车位置,用一个可移动的图形(长方形代表小车)绑定一个小车位置变量。如果PLC里没有实时位置值,可以用几个离散量的组合做粗略动画:前进限位、后退限位、中部接近开关,三个状态组合出来四五个位置点,足够直观。
- 控制区域:放“手动/自动”切换按钮、“启动”、“停止”、“复位”按钮,按钮的动画连接设置为弹起和按下时分别置位/复位对应的M位。
- 状态指示区:用变色图形显示料斗高/低位、故障报警、变频器运行状态。推荐把状态文字做成“显示/隐藏”动画,条件为真时显示绿色文字,条件为假时隐藏,比单纯变色直观。
- 数据统计区:显示卸料总次数、今日运行时间、当前流程步号。次数累加可以在PLC里做,也可以在组态王脚本里做,但PLC数据断电不丢更可靠,所以我在PLC里用VW0做累加,组态王直接读。
组态王的动画连接如果绑定错误,最常见的表现是画面状态不变化。这时候用组态王的“I/O变量监视”功能,查看变量实时值有没有变。如果变量值在PLC侧变了但画面不变,通常是变量没连上,或者画面对象的“动画链接”选错了属性,比如把“填充”和“颜色变化”弄混了。
4.3 报警与数据记录
组态王的报警系统很好用,但很多人没设置好。在“报警定义”里,把急停、故障、料位高、料位低都作为报警点,设置优先级和报警文本。报警窗口显示报警时间、变量描述和当前状态,操作员确认后可以消除。数据记录用组态王的历史数据库,采样周期设置1秒或5秒,后期拉趋势图分析小车循环时间、故障率很有价值。
这里有个教训:历史记录文件不要放在系统盘,时间长了系统盘会满,工控机直接卡死。在“历史数据管理”里把存储路径指到D盘或者另一个独立盘符,并且开启自动覆盖。
5. 系统联调与常见问题排查
5.1 通讯调试中的典型坑
组态王和S7-200通讯不上,是最常见的联调问题,我自己踩过不少坑。
第一种:PPI电缆没插对。S7-200有两个Port口,Port0和Port1。组态王默认连Port0,如果你程序里设置的通讯口是Port1,那肯定连不上。解决方法是把通讯口设置改成Port0,或者组态王的设备地址写PLC对应的通讯口号。
第二种:波特率不一致。Micro/WIN里通讯参数如果改成了187.5kbps,但组态王里还默认9.6kbps,就通讯失败。统一设置为一个速率,我习惯全部用9.6kbps,稳定且兼容性强。
第三种:USB转串口线问题。很多笔记本没有串口,用USB转串口容易丢包。注意在设备管理器里把COM号固定到COM1或COM2,不要用COM10以上的端口,组态王有时识别不到高端口。同时把“延迟时间”改小,“轮询间隔”改到1000ms,通讯成功率会高很多。
5.2 程序逻辑问题排查
调试自动模式时,小车经常“卡住不动”,先别怀疑硬件,用Micro/WIN在线状态表监控M区和Q区,看流程步号走到哪一步。常见问题:
- 小车到了远端限位,但程序没切下一步:检查限位输入点I0.0有没有在PLC里变亮。如果变亮但程序不动,看看梯形图里限位用的是常开还是常闭。如果现场用的是常闭触点(安全回路习惯),程序里又用了常开,逻辑就反了。这是新手最常见错误。
- 高速切低速不动作:检查减速接近开关位置是否装反,感应片是否够长。或者PLC输入滤波时间太长,建议把高频输入点滤波时间设短。
- 反向运行时,到了原点还在跑:原点限位开关可能被机械挡块压住后没有复位,或者后退高速段绕过原点限位直接跑了,要检查后退方向的互锁逻辑。
5.3 现场安全与抗干扰措施
变频器和PLC同柜安装时,必须注意屏蔽和接地。变频器的主回路电缆一定不要和PLC的信号线走同一根线槽,间距至少20厘米。电机电缆选屏蔽电缆,屏蔽层两端接地。PLC的DC24V负极要单独接地,不要和变频器地线共用一个接地点,否则地环流会把PLC打复位。
这个项目里出现过一次“幽灵故障”:小车运行到一半,程序突然复位,报警灯闪。查了几天,后来发现是变频器制动电阻产生的电磁干扰通过PLC的24V电源耦合进去,导致CPU内部状态丢失。最终解决办法是给PLC电源加装隔离变压器,并把变频器脉冲输出端的吸收电容加大,故障消失。
现场安全逻辑还要考虑浪涌和急停。急停按钮要选双断型,一个接点进PLC,一个接点串在接触器控制回路里。这样即使PLC程序乱了,操作员拍下急停也能直接切断接触器电源。自动模式下,如果料斗料位持续高信号超过十分钟,程序要自动报警并暂停卸料,防止设备长时间运行导致过载。
6. 项目复盘与扩展
6.1 这套系统的可复用价值
做完这套装卸料小车控制系统,最大的感受是:硬技术含量不高,但工程化细节多。S7-200+组态王的组合非常适合这类中小型设备,成本低、上手快、维护方便。所有逻辑都可以模块化复用,换一个场景,比如车间里的配料小车、码垛输送线上的往返小车,只要改限位位置、电机参数和联锁条件,就能照搬。
组态王的画面设计同样有复用价值。我自己维护了一套标准画面模板,包括设备状态区、控制按钮区、报警区和数据区,新项目直接复制工程文件再改变量,能省一半时间。模板里的变量命名规范很重要,推荐“设备_功能_类型“的格式,比如Car_Fwd_Out、Sensor_Far_Lim,一眼能看懂。
6.2 扩展方向
如果现在重新做这个项目,我会考虑两个升级点。一个是把S7-200换掉,用S7-200 Smart或者S7-1200,以太网通讯更方便,程序还能在线修改,不用每次拿USB线跑到现场下载。另一个是加一个触摸屏(比如昆仑通态或威纶通)作为本地操作站,组态王只做远程监控,这样现场调试和日常操作都更灵活。
程序方面,可以把小车的位置检测改成编码器或者激光测距,精度更高,还能在组态王国上画出小车的实时位置曲线,而不是靠几个开关量点模拟。如果物料种类多,还可以加一个配方功能,根据不同物料的流动性自动调整卸料时间和速度参数。
这个项目后续的扩展空间很大,但无论怎么升级,核心都不变:把流程想清楚、把联锁做好、把现场问题想全。这套思路放在任何PLC项目里都成立。