拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

基于S7-200 PLC与组态王的自动洗车控制系统设计详解

基于S7-200 PLC与组态王的自动洗车控制系统设计详解 干工控这行的朋友应该都有感触洗车机这种设备看着简单真正做起来牵扯的东西一点不少。水泵启停、顶刷横刷的往复、泡沫和风干时序再加上各种光电传感器和安全互锁一套全自动流程跑下来逻辑说复杂不复杂但要在可靠性和成本之间找个平衡点就得看方案怎么选了。这个项目我用的是S7-200 PLC做下位机控制配上组态王做上位机监控把梯形图程序、IO分配、接线原理图到组态画面整套捋了一遍今天就把这套自动洗车控制系统的设计过程完整拆出来包括IO地址怎么排、梯形图哪些程序段是关键、组态王通讯配置最容易踩的坑一次性说清楚。这套方案适合谁参考正在做小型自动化设备控制、想用PLC替换传统继电器控制的学生或刚入行的工程师以及手里有小规模清洗、输送类设备需要改造的现场维护人员基本都能从里面找到可以直接用的东西。S7-200虽然已经是老型号但市面上存量极大二手备件便宜资料也好找用来做这类低成本设备控制反而很合适。组态王在国内工控组态软件里普及度一直很高和S7-200配合属于经典组合网上问得最多的“创建协议组件失败”这类问题我也会结合通讯原理讲清楚根源在哪。1. 项目定位与方案选型1.1 自动洗车流程到底在控制什么洗车机的自动控制归根结底是对“动作顺序”和“执行机构”的管理。拿最常见的隧道式洗车机来说车辆驶入定位后系统要依次完成预冲洗、刷洗、泡沫、清水冲洗、风干这几个工位动作每个工位都有对应的水泵、电机、电磁阀或者风机需要驱动。这里面真正的难点不是单个设备的启停而是三个层面的协调第一是时序约束比如顶刷下降到位之前横刷不能开始横移否则机械结构会碰撞泡沫阀打开之前泡沫泵必须已经建立压力不然喷出来就是稀水。第二是安全保护比如车辆没有到位、光电传感器没检测到车整个流程就不能往下走高压水泵更不能在传感器失效的情况下盲目启动。第三是状态反馈每个执行机构动作是否到位、有没有过载都得回到PLC里参与逻辑判断。S7-200系列在这个场景下的定位很清晰它的CPU自带数字量输入输出点数吃紧的时候挂一块EM223就能扩整机成本压得住梯形图编程的思维方式又和电气原理图一脉相承对现场电工出身的人特别友好。组态王在这套系统里负责的是“看得见”的部分运行状态、故障报警、手动操作按钮全部集中到触摸屏或者电脑界面上让操作工不用打开电柜看指示灯就能知道设备什么状态。1.2 为什么不用继电器控制也不用触摸屏先说说大家最容易纠结的两个选项对比。继电器电路做洗车机控制逻辑上不是不能实现问题是改动一次流程就要重新布线节点一多中间继电器、时间继电器堆满一整个电柜排查故障的时候能让人崩溃。而且时间继电器本身精度有限水的压力波动、气缸动作速度变化都会让实际时序跑偏。触摸屏加PLC的组合当然更现代但触摸屏本质上只是替代按钮和指示灯真正的逻辑还是要靠PLC。组态王相比触摸屏有个很实际的优势它有历史曲线和数据记录功能。洗车机的水泵电流曲线、单日洗车数量、故障频率这些数据在触摸屏上能做到的存储量很小组态王跑在电脑上数据库可以一直攒着后期做设备维护分析很有用。说白了选S7-200加组态王不是因为它新而是因为这个组合在满足功能的前提下成本可控、资料成熟、维护省心。这也是我一直跟人强调的观点方案选型永远要贴着自己的实际场景来不要为了“先进”而选型。2. 系统架构与IO分配2.1 先从工艺流程倒推IO需求做IO分配之前第一件事不是拿起表去列地址而是先把工艺流程图吃透。我是习惯在纸上把洗车流程拆成一个个“状态”然后逐个状态问自己三个问题这个状态需要哪些输入信号来触发需要驱动哪些输出设备有没有需要联动的中间状态这套自动洗车系统我按功能模块划分成六个部分车辆检测、刷洗机构、冲洗系统、泡沫系统、风干系统、安全保护。每个模块的IO需求如下展开车辆检测模块用两个光电传感器一个装在入口处用于检测车辆是否进入洗车区域一个装在工位末端用于检测车辆是否到位这两个信号是启动自动流程的前提条件。输出方面有一个红绿信号灯绿色表示可进入红色表示正在清洗用于引导司机。刷洗机构包含顶刷电机、横刷电机、刷体升降气缸电磁阀和横移气缸电磁阀。顶刷电机和横刷电机都带热继电器保护热继电器常闭触点要串入PLC输入作为过载报警信号。冲洗系统有预洗水泵、清水水泵两个泵输出就是接触器线圈。泡沫系统有一个泡沫泵和一个泡沫电磁阀输出同样对应接触器和电磁阀线圈。安全保护这一块容易被新手忽略但它恰恰是整套系统最重要的部分。我单独设置了一个急停输入回路急停按钮的常闭触点采用串接方式接入PLC输入端现场另外拉一个安全光幕的信号进PLC光幕被遮挡时自动流程立即暂停。这两个信号不需要参与任何业务逻辑直接在程序最前面做总封锁处理。把所有IO需求汇总之后S7-200 CPU自带的点数如果够用就不需要扩展模块不够用的情况再考虑挂EM223。我这套系统点位数刚好卡在CPU自带范围内所以电柜内也少了一个扩展模块的安装位置布局清爽很多。2.2 IO分配表与地址规划IO分配的规划原则很简单输入地址按功能模块分区输出地址对应逐个执行机构留足备用点。下面是这套系统的完整分配表地址信号名称功能说明接入设备I0.0入口光电检测车辆进入光电传感器I0.1到位光电车辆定位到位光电传感器I0.2急停按钮紧急停止急停常闭触点I0.3安全光幕安全保护光幕继电器触点I0.4顶刷过载顶刷电机保护热继电器常闭I0.5横刷过载横刷电机保护热继电器常闭I0.6水泵过载水泵保护汇总热继电器常闭I0.7手动/自动模式切换选择开关I1.0顶刷上限位刷体上升到位限位开关I1.1顶刷下限位刷体下降到位限位开关I1.2横刷左限位横移左到位限位开关I1.3横刷右限位横移右到位限位开关Q0.0入口信号灯绿允许进入指示信号灯Q0.1入口信号灯红请勿进入指示信号灯Q0.2顶刷电机接触器顶刷启停接触器Q0.3横刷电机接触器横刷启停接触器Q0.4刷体升降电磁阀顶刷升降电磁阀Q0.5横移电磁阀横刷横移电磁阀Q0.6预洗水泵接触器预冲洗泵启停接触器Q0.7清水泵接触器清水冲洗泵启停接触器Q1.0泡沫泵接触器泡沫泵启停接触器Q1.1泡沫电磁阀泡沫喷洒电磁阀Q1.2风干风机接触器风干风机启停接触器有几个分配细节值得说一下输入地址没有完全按照物理位置连续排列而是按功能模块聚集分配这样写梯形图的时候逻辑块能对应上地址段不会满程序跳来跳去找变量。输出地址的排序严格按照工艺流程先后顺序顶刷、横刷在前水泵、泡沫、风机在后方便接线电工按图纸顺序查线。备用点保留了I1.4到I1.7、Q1.3到Q1.7后续想增加一个水蜡功能或者加一个往复冲洗功能不需要动已有分配直接占用备用地址就行。2.3 接线图与电气原理图的关键点接线图和原理图是电柜装配和现场查线的依据很多人拿到IO分配表直接就开始画图其实中间还隔着一层“信号类型核对”。PLC输入端子的接法S7-200是漏型输入居多传感器的NPN常开输出对应接法要提前核清楚不然后期改线非常痛苦。输入侧的接线有个实用技巧所有传感器和按钮的公共端统一接24V电源正极信号线进PLC输入端子形成漏型接法。热继电器常闭触点串接在这条信号回路里过载动作时回路断开PLC收到信号。急停按钮也是同一个思路常闭触点串联在回路里急停按下时输入信号消失。输出侧的关键在于接触器和电磁阀的线圈电压。我统一选用220V AC线圈的接触器和电磁阀PLC输出端子带的是24V DC所以中间需要加继电器过渡PLC输出先驱动中间继电器再用中间继电器触点去控制220V线圈。原理图里这种“PLC输出—中间继电器—接触器线圈”的链路要画得明明白白每个中间继电器线圈两端要并联续流二极管或RC吸收回路因为接触器线圈断电时的反向电动势会反过来冲击PLC输出点这是输出点烧毁的高发原因。电源分配这一块也要讲清楚总进线断路器下面分三路一路给PLC的24V开关电源一路给传感器的24V供电一路给接触器线圈和信号灯提供220V电源。24V的两个支路原则上独立避免传感器信号和PLC内部IO供电互相干扰。电柜内PE排和零线排严格分开所有电机外壳、电柜门都要可靠接地这是设备安全的基础也是验收时必查项目。3. 梯形图程序设计与逻辑实现3.1 程序整体框架先封锁再分块梯形图程序最怕的是写成“一锅粥”所有逻辑堆在一起排查一个动作问题的时候连看都不想看。S7-200的编程软件Micro/WIN里我习惯把程序按照功能拆分成几个独立程序段总封锁段、模式选择段、自动流程段、手动控制段、输出映射段、报警处理段。这个分层思路和写代码是一样的底层逻辑先立规矩上层逻辑再跑业务。所谓“总封锁段”指的是急停、安全光幕、过载这几个信号集中在这里处理任何一个条件触发立刻切断自动流程的“运行允许”中间变量让整个状态机回到初始状态。这里有个判断值得注意急停是切断运行中所有输出还是只切断自动流程、保留手动操作我在实际项目中选择了“急停切断全部输出”因为洗车机现场操作工可能就是普通司机不一定懂设备急停的目的就是让机器彻底停下来不能有任何例外。模式选择段处理的是一个拨动开关手动模式下手动控制段接管输出自动模式下自动流程段接管。两个模式之间要有互锁逻辑绝对不能出现手动和自动同时输出同一个设备的情况。这个互锁在梯形图里实现很便宜几行常闭触点的事但如果不做现场调试时误碰到模式开关就可能出现两个泵同时启动的险情。3.2 自动流程状态机启动、步进、复位自动流程是整个梯形图的核心。洗车动作可以抽象成一条按顺序执行的步骤链车辆入场检测、停车到位、顶刷下降、顶刷旋转加横刷往复、刷洗完成、泡沫喷洒、清水冲洗、风干、机构复位。S7-200的梯形图做顺序控制最直观的方式是用置位复位指令搭“状态位”。每个步骤分配一个中间位继电器M当前步骤置位上一步骤复位PLC扫描周期不断刷新流程自然往下走。启动条件这里有个容易疏漏的点车辆检测的启动和流程启动的油门关系。入口光电检测到车辆只是确认有车进来了不能直接触发自动流程一定要等到“到位光电”给出信号才认为车辆停在了正确位置这时候才能触发流程启动。我调试的时候曾经图省事用入口光电直接启动流程结果车子还没完全进到位顶刷就压下来了那边司机还在往前挪车差点出事故。每个步骤转下一步的“转换条件”要同时满足两个条件一个是本步骤的动作已经完成比如顶刷下降这个动作要靠限位开关确认刷体确实压到车顶位置了另一个是下一步的执行条件允许比如横刷往复要确认顶刷确实在下降到位状态横刷才开始横移。这两个条件缺一个都不行。流程走到最后一步风干完成后所有机构复位到初始状态然后触发计时器把整条状态链复位同时状态完成信号会送给组态王上位机界面上的“本次洗车完成”指示灯点亮。洗车计数也在这一步加一。3.3 关键的定时器和计数逻辑梯形图里面时间控制占了相当大的篇幅。刷洗时间、泡沫反应时间、冲洗时间、风干时间这些参数在设备试运行阶段都要反复调整用户的要求也经常变。我在这套程序里把所有时间参数统一放到一个“时间参数设置段”用定时器变量集中管理调试的时候直接在程序里改不用到处翻定时器。两根很有代表性的时间控制逻辑顶刷与横刷的配合是“定时限位”双保险的思路。顶刷下降靠下限位确认到位然后顶刷电机启动旋转清洗持续一个设定的刷洗时间这个时间结束之后顶刷上升横刷的往复则是靠左右限位开关切换方向每次到达限位后计时一个小延时再反向横移这样避免换向瞬间的机械冲击还能让刷毛在车辆两端多停留一会儿把容易藏污的保险杠区域刷干净。泡沫喷洒环节用的是“泵先启、阀后开”的时序泡沫泵启动后延时2秒再打开泡沫电磁阀这段时间让管路里建立压力。很多人喜欢泵和阀同时动作结果喷出来一段稀泡沫水柱就是因为管路里压力没上来。反过来关闭顺序是“先关阀、后停泵”避免关阀瞬间管路憋压。计数逻辑也不复杂但很实用。每完成一次洗车流程加数器加一计满预设值比如100次输出一个“保养提醒”信号提示更换刷毛或润滑轴承这个信号同时送组态王显示。这个功能虽然成本为零但现场维护人员反馈很好尤其对刷毛磨损这种渐进性损耗靠人眼根本看不准。3.4 手自动切换与安全互锁手动模式主要用于设备检修和试车。手动控制段把每个输出做成“点动”控制对应的启动按钮按下输出接通松开输出断开。检修顶刷电机的时候操作工用手动模式点动试转这样既能验证电机方向也不会误触发整个流程。手动和自动的互锁除了刚才说的模式互锁之外还要注意“手动操作时流程入口封锁”。换句话说手动模式下不管传感器怎么触发自动流程段都不允许启动。我用的是模式位的常闭触点串在自动流程启动条件的最前面这属于“布防线”的思维宁可多写一行也不能留任何并行通道。安全互锁还有一个细节顶刷下降到位之前横刷电机绝对不能旋转。因为横刷还没抬起来的情况下顶刷压下去两个刷体直接绞在一起结构上就是一场灾难。梯形图里横刷电机的输出条件串上“顶刷上升到位”的常开触点顶刷不在高位横刷电机根本驱动不了。这套互锁逻辑看起来简单真出事的时候救的可是整套设备。4. 组态王上位机配置与通讯4.1 组态画面要展示什么组态王在洗车系统里的角色是“监控中心”它把PLC里散落的位变量和寄存器变量集中到一块画面上让操作工一目了然。我对这个画面的要求是主画面能实时显示当前流程进行到哪一步哪个泵、哪个刷在转哪个电磁阀在动作报警画面能记录历史故障和时间数据画面能看当天洗了多少台车。主画面我用组态王图库里的管线、电机、阀门图形搭建了洗车机的立面示意图把车辆位置用一个矩形块表示随着流程步骤移动。对应每个执行机构放一个指示灯绿色闪烁表示运行中红色表示故障或急停灰色表示待机。这个画面做出来效果很好现场操作工反馈说不用看电柜就知道哪里出了问题。变量绑定这一步很关键。组态王变量的数据类型必须和PLC里的数据格式严格对应。S7-200的位数据对应组态王的开关量整数寄存器对应组态王的整数。如果类型对不上通讯倒是能通但画面上显示的就是乱码或者错误数据了。我在做的时候整理了一张变量映射表PLC地址和组态王变量名一一对应配置时照着填不会出错。4.2 S7-200与组态王通讯的常见方式S7-200走组态王接口方式主要两种一种是通过PC Access做OPC服务器组态王作为OPC客户端读取数据这种方式比较老牌胜在稳定而且PC Access对S7-200的支持很完整另一种是直接用组态王自带的S7-200驱动走PPI协议或者Modbus协议。实际项目中我两种都试过各有特点。PPI方式比较简单直接组态王的设备驱动里选择西门子S7-200PPI然后填写PLC的站地址和通讯参数。S7-200的PPI默认站地址是2波特率9600这些参数要跟PLC系统块里的设置保持一致。组态王和设备之间用RS232或者USB-PPI电缆连接老一些的电脑用COM口直连新电脑没有串口就用USB转串口线但要注意USB转出来的COM口号在设备管理器里核对清楚组态王设备配置里填错COM口是通讯失败的重灾区。还有一种是Modbus RTU方式这需要S7-200的通讯口工作在Modbus模式。通过S7-200的库指令MBUS_CTRL和MBUS_SLAVE可以把通讯口配置成Modbus从站这样组态王以Modbus协议访问PLC的保持寄存器和线圈。这种方式的好处是跨平台兼容性极好不只是组态王任何支持Modbus协议的上位系统都能直接对接。打一个生活化的比方PPI通讯像两个说同一种方言的人直接聊天简单直接但只能跟会这种方言的人聊Modbus像两个人都说普通话通用性强谁都听得懂。所以如果这个系统以后可能升级上位机软件或者同一套设备还要给另一个品牌的组态软件用我建议直接上Modbus方案。4.3 组态王设备配置步骤与变量绑定组态王配置设备的过程我按下面的步骤操作基本不会出错先新建工程进入工程浏览器在“设备”节点下添加设备驱动选择合适型号。如果是Modbus方式直接选莫迪康Modbus RTU设备如果是PC Access方式选OPC服务器然后指定电脑上的PC Access服务为数据源。然后是设置设备地址。Modbus从站地址必须和PLC程序里MBUS_SLAVE指令配置的地址一致默认是1这个地址可以改。波特率、数据位、停止位、校验方式四项上位机和PLC必须完全一致差一个bit通讯就建立不起来。再后是定义变量。组态王的变量类型对应关系是关键点。开关型变量对应PLC的位地址比如启动信号、到位信号、报警信号数值型变量对应PLC的V区寄存器或者AIW模拟量通道。变量定义完成后还要在画面里把图元的动画连接指到对应变量上。最后测试通讯。组态王有“设备调试”功能可以直接查看通讯状态和变量数值。正常通讯时状态栏会显示数据在滚动更新如果显示通讯失败或者设备无响应优先检查COM口号、波特率和站地址这三个是最常出错的地方。4.4 组态王“创建协议组件失败”的排查方法组态王使用过程中被问得最多的报错就是“创建协议组件失败”。这个提示出现的时候很多人以为是PLC通讯断了其实它跟PLC关系不大问题出在组态王软件自身与系统环境的配合上。我做项目第一次遇到这个报错排查了半天最后发现是组态王运行需要的一项系统服务被关闭了。组态王依赖系统里的“Remote Procedure Call”服务和OLE组件机制某些精简版系统或者优化软件会把相关服务禁用导致组态王的通讯组件无法创建。排查思路按下面的顺序来先确认组态王安装目录下有KingView.exe和KVCommu等关键文件缺文件就重装安装包然后在Windows服务里确认RPC服务和DCOM服务是启动状态这些服务被禁用是“创建协议组件失败”最常见的系统级原因再检查组态王工程是否损坏用组态王自带的“工程修复”工具跑一遍有时工程文件异常也会导致组件加载失败最后考虑软件冲突比如同时装了多个组态软件或者杀毒软件拦截了组态王的进程尝试暂时关闭防护软件再运行。针对这个报错还有一条很实用的小技巧组态王软件尽量安装到默认路径不要装到中文路径或者带空格的目录下否则动态链接库加载时容易出幺蛾子。我在客户电脑上遇到过好几次这种非典型故障重装到默认路径就好了。从通讯协议层面看“协议组件”和“通讯设备”是两个层面的东西一个出问题会导致组态王软件本身都无法启动通讯任务另一个只是设备联网失败。这个区别在实际排故中很重要先分清是哪一层出了问题能省下大量无效操作。5. 实操问题与经验总结5.1 现场调试中遇到的典型问题整个系统从小到大到现场运行中间踩过的坑不少挑几个有代表性的问题说一说。第一个是模拟量水压反馈的干扰问题。现场一开始水压传感器信号直接用普通电缆拉到PLC模拟量模块结果变频器一启动水压值在组态王画面上跳得厉害。排查下来是变频器高频谐波串进了信号线。解决方案是换屏蔽双绞线屏蔽层单端接地信号线尽量远离变频器输出线和动力线走线穿金属管。改完之后水压曲线稳定多了。这个问题在含变频器的设备里很典型供电和信号分离是布线铁律。第二个是电磁阀动作时PLC输出点被干扰复位。现场发现某个电磁阀通电瞬间PLC的某个输入信号偶尔会闪一下导致流程误判。原因是电磁阀线圈和传感器线束走在了同一个线槽里阀动作时产生的瞬态干扰耦合到了传感器信号线信号同步被拉低了。解决办法是分开布线然后把传感器信号线的信号负端在PLC侧做接地处理干扰消失。第三个是组态王历史数据掉线的问题。设备运行一段时间后组态王的实时数据显示正常但历史曲线偶尔会出现一段空白。后来查出是电脑系统休眠策略搞的鬼电脑闲置一段时间后自动断网唤醒组态王的通讯线程挂掉了。解决方式是关闭系统休眠和硬盘睡眠电源计划设为“高性能”同时给组态王运行进程设置为“永不睡眠”。5.2 避坑清单与通用建议结合这次洗车项目的经验整理了几条对所有PLC上位机项目都适用的避坑建议IO分配一定要留备用点。我见过好几个项目因为当初把IO点卡得太死后期加一个功能就得换PLC或者加扩展模块成本翻倍工期也耽误了。留20%备用点是行业里不算夸张的比例。接线图里要体现电源分区。24V电源和220V电源的走线颜色、线径、走线槽都要区分控制回路和动力回路不能混在一起否则后期查线和排查干扰都很痛苦。梯形图要有清晰的程序段划分。程序写完之后每一个程序段的注释一定要写清楚“这段是干什么的”设备运行半年之后回来看程序没有注释的梯形图基本没人愿意碰。上位机软件和PLC的通讯状态要专门做一个显示位。我在组态王画面上放了一个“通讯心跳”指示灯用PLC里的一个定时翻转的位变量驱动上位机每秒钟刷新一次这个变量的值。通讯正常时指示灯每秒闪一下通讯断开立刻变灰。现场操作工一看就知道通讯是否正常不用等到操作失效才反应过来。时间参数调整要有记录。洗车时间、泡沫量这些参数每次现场调整后一定要在维护记录里更新不然下次别人接手调试时完全不知道当前参数是什么依据调出来的。我在程序注释里留了一个参数变更记录段每改一次就追加一行这种习惯在设备维护的时候特别值钱。5.3 这个系统还能怎么扩展整套系统跑稳定之后后续扩展空间其实是很大的。最常见的方向是增加水蜡喷洒功能IO分配表里预留的备用点可以直接派上用场梯形图里在泡沫环节之后插入一段水蜡流程组态王画面也只需要加一个阀门图形和指示灯改动量不大。如果想把洗车数据汇总到手机端查看组态王支持把实时数据写入数据库和网页发布再配合云服务器做数据透传就能实现远程查看洗车数量和设备状态。对运营多个洗车点的老板来说这个扩展的实用价值很高。还遇到过客户提出无人值守的需求那就需要再加车牌识别摄像头和道闸联动PLC侧增加与摄像头控制器的通讯流程上增加车辆身份校验环节。这些功能本质上还是在原系统基础上叠加模块底层这套S7-200加组态王的架构一点不用推翻。做一个设备控制项目真正的价值不在于把某个功能跑通而是把方案选型、IO规划、程序架构、上位机交互这些环节整体想清楚让设备在恶劣的现场环境下长期稳定运行。这套自动洗车控制系统的整套图纸和程序都基于同一套思路方案拿来可以直接改参数用遇到新项目也能套用同样的框架重新规划。希望这次分享能把S7-200加组态王这条技术路线的关键点都说明白对正在做类似设备控制项目的朋友有实际参考价值。
返回列表