尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

西门子1200自动洗车控制:博途仿真与状态机设计全解析

发布时间:2026/9/13 3:02:46

资讯中心
01
ARTICLE

西门子1200自动洗车控制:博途仿真与状态机设计全解析

西门子1200自动洗车控制:博途仿真与状态机设计全解析
提到西门子1200自动洗车博途仿真免不了从我自己碰到的一个项目聊起。去年接了个洗车机控制的需求三工位自动洗车要完成预冲洗、泡沫、刷洗、冲洗、风干、等待六个步骤操作员只需按启动按钮全过程自动跑完。我第一反应就是用S7-1200来做而且先用博途仿真把整个逻辑跑通再去碰现场设备。这套系统做完后我把程序整理成了一个模板后来不少学员和同行都来问洗车流程的状态机是怎么设计的、I/O点怎么分配、HMI画面怎么布局、仿真调试时遇到过哪些坑。这些问题零零散散今天干脆完整拆一遍从控制需求到程序架构从画面组态到仿真排错全部写清楚。这篇文章适合三类人看刚接触博途想找个完整案例练手的新手准备做洗车机、输送线这类步进工艺设备的电气工程师以及想把手动单机改成自动联机但不知道怎么下手的朋友。配套的PLC例程和HMI工程文件讲解时会提一下文件结构方便你照着实操。1. 为什么自动洗车项目适合用西门子1200来做1.1 洗车机控制的核心需求先说说洗车机到底要控什么。抛开品牌和外观差异常规隧道式或往复式洗车机核心动作基本都是这套逻辑车辆到位检测、喷淋预冲洗、喷洒泡沫、刷洗、高压冲洗、风干、完成提示。整个过程就是一个典型的顺序控制流程。顺序控制有几个特点步骤多但路径清晰每个步骤之间有明确的切换条件有的步骤还带超时保护、急停复位、故障报警。这种场景正是PLC最擅长的地方。你用继电器搭当然也能实现但一旦需要调整步骤顺序、修改某个工位的时间参数就会非常痛苦——改硬接线、改凸轮、换继电器工程量不比重新做一个少。而用PLC加触摸屏之后调整流程只需要改程序里的状态跳转条件或HMI上的时间参数设备不用动一根线。这也是为什么现在市面上的自动洗车机基本都走PLC方案。1.2 S7-1200在同类方案中的定位在西门子产品序列里S7-1200属于小型PLC但它的能力用在洗车机这种场合绰绰有余。以1214C DC/DC/DC为例集成14路数字量输入、10路数字量输出自带2路模拟量输入还支持扩展信号板。如果只算数字量一个1214C最多可以带32个点左右的本地I/O。常见的洗车机配置大概是二十多个输入点、十几个输出点紧凑一点的1214C不加扩展模块也够用。博途仿真这一块也要多说一句。TIA Portal V16以上版本的仿真功能已经比较成熟S7-1200的PLC程序可以在不连接实体硬件的情况下在电脑上完整跑起来。对学习者和前期开发来说这意味着你可以先不买PLC不接线不装传感器就能把程序逻辑、HMI画面、运行联调全部验证一遍。等仿真没问题了再上真机省下的时间和试错成本非常可观。用1200还有一个很实际的原因程序文件小打开编译快不挑电脑配置。我用博途V17打开一个完整的洗车机项目包含PLC程序和HMI画面编译下载基本都在十几秒内完成。对比之前用1500做项目动辄几百兆的项目文件1200的小巧确实更适合拿来调试和频繁修改。2. 控制需求拆解先把洗车流程变成I/O表和状态2.1 洗车工艺的六个核心阶段自动洗车的工艺看着不复杂但真要落到程序里必须把每个阶段拆细。我通常把它拆成六个主状态空闲等待车辆进入检测传感器无信号输出全部关闭预冲洗车辆到位后启动预冲水泵持续8秒泡沫喷洒预冲洗结束后启动泡沫泵和刷子电机持续15秒刷洗刷子来回摆动同时喷淋保持湿润持续20秒高压冲洗关闭泡沫泵启动高压水泵持续10秒风干关闭水泵启动风机持续15秒每个主状态下还有分支比如刷洗阶段刷子电机是正转、反转还是左右移动这些要单独控制。另外急停信号在任何状态下都必须立即生效——这不是状态机里的一个状态而是独立于状态机之外的一个“最高优先级中断”这一点后面细说。2.2 I/O点表程序不返工的起点我见过太多人拿到项目就直接写梯形图写到一半才发现输入点不够、输出点重复占用、模拟量通道不够用然后回头改越改越乱。正确的做法是先列I/O点表把所有传感器、按钮、执行器对应到PLC地址上确定无误后再动程序。以一套紧凑型往复式洗车机为例I/O点表大概长这样信号类型地址功能说明备注数字量输入I0.0车辆到位传感器常开数字量输入I0.1启动按钮常开数字量输入I0.2停止按钮常闭数字量输入I0.3急停按钮常闭数字量输入I0.4刷子上限位常开数字量输入I0.5刷子下限位常开数字量输出Q0.0预冲水泵接触器输出点数字量输出Q0.1泡沫泵接触器输出点数字量输出Q0.2高压水泵变频器启动输出点数字量输出Q0.3刷子电机正转输出点数字量输出Q0.4刷子电机反转输出点数字量输出Q0.5风机接触器输出点数字量输出Q0.6运行指示灯输出点数字量输出Q0.7蜂鸣器报警输出列这个表的目的是什么两个。第一确认PLC的I/O配置是否够用如果不够趁早决定是换1215C还是加扩展模块第二为后面的程序变量表和数据块打好基础避免程序中直接散落地址后续根本没法维护。2.3 传感器与执行器的选型思路先给出基于常见实践的通用建议车辆到位传感器用对射式光电开关或者地感线圈前者安装方便、性价比高刷子限位用接近开关选电感式或电容式取决于刷臂的材质金属支架选电感式塑料件选电容式。水泵这块如果没有特殊要求选普通三相异步电机加接触器控制就能满足大部分需求。但如果你做的是高压冲洗系统压力波动大、启停频繁我建议高压水泵走变频器用S7-1200的模拟量输出或通信方式控制频率。这在程序里会多一个环节后面第6节会专门说怎么处理。3. PLC程序架构设计状态机是洗车控制的骨架3.1 状态机流转模型与转换条件写顺序控制程序最怕的就是用一堆置位复位指令从头套到尾。置位复位当然能实现但程序一长你根本分不清某个输出当前在什么状态下是通的排查问题尤其痛苦。我推荐用状态机思路每个步骤对应一个状态位状态之间通过转移条件切换某一时刻只有一个状态位为1。举个例子状态位的表达方式可以是M区布尔量也可以是一个整型变量存状态编号。以整型变量为例定义一个DB块里的变量CarWashState类型为Int0空闲1预冲洗2泡沫喷洒3刷洗4高压冲洗5风干状态切换用CASE指令来实现这在S7-1200的SCL或者梯形图里都很好处理。CASE结构的好处是逻辑清晰、边界分明每次进入一个分支只需要处理这个状态的输出和下个状态的转移条件。以预冲洗为例CASE #CarWashState OF 1: // 预冲洗 #PreWashPump : TRUE; IF #PreWashTimer.Q THEN #CarWashState : 2; END_IF; END_CASE;这段伪逻辑的意思是在预冲洗状态下预冲水泵输出得电同时监视一个定时器定时器到点后状态切到泡沫喷洒。每个状态都类似只是输出组合和转移条件不同。整套程序下来梯形图量比传统的置位复位方式少了将近一半而且调试时直接在监控表里看CarWashState的值就知道设备停在哪个环节定位问题快得多。3.2 OB/FC/FB/DB的分工博途项目里最大的坑之一就是把所有代码都堆在OB1里面。OB1确实是从头扫描到尾但一旦程序量上来OB1就是一座屎山。洗车机控制程序我建议按这个结构组织OB1主循环只做FC调用OB100初始化把状态位、定时器、HMI变量恢复默认值FC_WashControl主状态机负责六步骤的流转FC_ManualControl手动控制逻辑给调试和维护用FC_Alarm报警处理急停、超时、电机过载检测DB_WashData存放所有工艺参数和状态位DB_HMI存放HMI读写变量和画面一一对应这样分完每个功能块单一职责谁出问题查谁。而且参数集中存储在DB_WashData里后续要是想把预冲洗时间从8秒改成6秒直接在HMI参数画面改就行不用碰程序。3.3 关键程序片段注意事项这里必须提几个写洗车程序时容易忽略的点。第一状态与输出不是一一对应的简单的函数。比如泡沫喷洒阶段刷子电机其实已经启动慢转为的是让泡沫涂布均匀。如果你只在主状态机的CASE分支里做了这个逻辑那就没问题。怕的是你在TIA里输出扫描时由于置位/复位顺序不同导致两个状态交界处的输出抖动。解决办法很简单每个状态切换前强制复位上一个状态的所有输出再进入新状态。第二禁止两个状态同时有效。在状态机里我用一个数值变量判断当前状态天然互斥。但如果你用M区布尔量表示状态一定要加互锁进入状态B前先复位状态A再用状态A的常闭触点去串联状态B的启动。第三超时保护必不可少。每一道工序都要配一个超时定时器例如刷洗阶段超过30秒还没完成就要报警停机。原因是现场传感器可能失效、电机可能卡住、水泵可能空转没有超时保护设备会一直卡在某个状态操作员又一时没注意损失的可能是整台车。这种保护逻辑在FC_Alarm里做调用TON定时器设定时间取DB_WashData里对应参数方便调试时缩短。3.4 安全连锁必须想清楚这是我在实际项目中反复踩坑后总结的安全连锁必须独立于状态机而且要优先于状态机执行。急停就是最典型的例子。急停信号接到PLC后在OB1里第一个被扫描如果急停按下不管当前状态机走到哪一步所有输出全部复位设备立即停止。这不是在状态机里加一个分支而是要在OB1开头加一段独立的逻辑// 急停信号串联在主输出使能上 #EStop_Input // 常闭触点PLC输入I0.3 #WashOutputsEnable // 主输出使能标志 ( ) // 输出使能脉冲急停常闭复位为0然后所有实际输出点Q0.0到Q0.7都用WashOutputsEnable的常开触点串联在最终输出线圈前。这样急停一按哪怕状态机因为某种原因还在跑输出通道全部切断。等急停复位后要求操作员重新按启动按钮才会恢复——这属于安全PLC编程里“安全复位”的常见实践。另外还有一个容易忽略的安全点洗车机属于潮湿环境电气柜必须做好防水防尘现场传感器按IP67选型。急停按钮要装在操作员随手能够到的位置建议双急停入口一个出口一个。4. HMI画面组态从主画面到报警页面的五张画面4.1 主操作画面让操作员一眼看懂流程HMI界面设计有一个原则我一直挂在嘴边操作员不需要懂程序他只需要知道“现在到哪一步了、下一步要做什么”。所以主操作画面我建议做成流程图风格而不是简单的按钮堆砌。画面顶部是状态指示区六个步骤用六个指示灯排列哪个步骤在运行对应指示灯就亮颜色用绿色完成的步骤用灰色锁存显示故障状态用红色闪烁。这比只显示一行文字直观太多。画面中间是设备简图用简单的矩形、圆形表示刷子、泵、风机的位置每个设备旁边放一个输出状态指示灯。这样操作员看到刷子图标旁边灯亮了就知道刷子电机确实在转不用靠耳朵听。画面底部是操作区放启动、停止、急停复位三个按钮。启动按钮在自动状态下才有效停止按钮任何时候都有效。急停复位按钮要弹窗确认防止误触。4.2 参数设置页面洗车时间、泡沫量这样调参数设置页面主要给工艺调试人员用。这一页按“预冲洗时间、泡沫时间、刷洗时间、高压时间、风干时间”分组每组配一个数值显示框和输入框变量直接连到DB_WashData里的对应参数。这里分享一个之前踩过的坑HMI直接连DB变量时如果DB块没有设置“优化访问”变量地址是偏移地址在HMI里连接没问题但如果开了优化访问HMI连接时要注意变量名对应不要用绝对地址。在TIA Portal里新建HMI变量时直接从PLC变量的下拉菜单里选能避免手写地址写错的问题。另外时间参数建议设置上限和下限比如预冲洗时间限制在3到30秒之间。如果你不在HMI里做限制操作员误填了一个0设备会瞬间跳过这个步骤客户还以为是程序坏了。限制逻辑可以在PLC侧做也可以HMI侧做我推荐PLC侧做因为HMI重置或离线后PLC侧限制依然有效。4.3 报警与运行记录售后少接电话的关键报警画面别做成简单的红色大叉加一行文字。我比较推荐的布局是上半区报警列表每条显示报警时间、报警内容、当前状态下半区是操作提示区告诉操作员“当前故障应该怎么处理”。比如“高压水泵过载”这条报警操作提示写“请检查高压水枪是否堵塞或电机是否卡死复位后重新启动”。操作员照着做能解决八成以上的常见故障电话打到你这边的次数会直线下降。报警的PLC侧实现也不复杂。在FC_Alarm里对每个报警条件生成一个BOOL标志位上升沿时给HMI的报警变量置位HMI画面配置离散量报警表关联对应文本。HMI侧别忘了勾选“确认”按钮报警发生后操作员按确认会停止蜂鸣器但报警列表保持显示直到故障排除后自动清除。这个“确认消音但保持显示直到故障排除”的做法是工业HMI报警处理的标准兜底策略既不让操作员继续受刺耳蜂鸣干扰又避免故障被草率忽略掉。5. 博途仿真调试全流程从下载到排错的实测记录5.1 仿真环境的准备与硬件配置博途仿真功能叫做S7-PLCSIM从V14开始对S7-1200的支持就很完整了。使用前先检查一下你的博途版本V15及以下的老版本仿真器和主程序集成度较低需要单独启动V16以上版本可以直接在项目树里右键PLC站点选择“仿真”启动PLCSIM体验顺畅很多。如果手头没有指定版本建议用V17或V18稳定性和功能都更好。启动仿真前要确认三件事。第一PLC设备组态中的以太网地址要设置好仿真器运行时虚拟一个网口HMI要能连上这个地址做协同仿真。第二程序编译不能有错误警告可以接受但错误必须清零。第三OB100里的初始化逻辑要看一眼仿真启动时OB100只执行一次如果你的初始化逻辑里有延时或等待仿真开始时会感觉有点卡顿这是正常的。5.2 程序下载、变量监控与强制操作在PLCSIM里下载程序和往真机下载操作几乎一样。点击下载后博途会把编译好的PLC程序传送到虚拟PLC里然后切换到在线监视。在线监视有个技巧用监控表或者程序状态来查看DB_WashData.CarWashState的变化。我在调试时习惯把状态机相关的关键变量拖到监控表里包括当前状态、启动按钮、停止按钮、定时器剩余时间一屏看完所有关键量。仿真里还有一个很有用的功能就是强制变量。比如你想测试急停逻辑不用真的去按按钮直接在监控表里把I0.3强制成0就能模拟急停信号。这比接真机还方便真机你还得去按物理按钮。强制变量的使用有个注意事项仿真结束前记得把所有强制值释放掉不然下次打开仿真强制值还带着你查问题时会懵半天。我吃过这个亏——某次仿真调试到一个奇怪现象所有输出都不动了查了一个小时才发现是之前强制了一个常闭触点。5.3 仿真调试时容易踩的坑坑一HMI和PLC仿真联调不上。这个最常见的原因是仿真器实例冲突。如果你同时开了一个以上的PLCSIM实例或者上一次仿真没关干净新的仿真例程可能起不来。解决办法关掉所有PLCSIM进程重新启动仿真。PLCSIM的运行实例可以在Windows任务管理器里看到关掉后再试。坑二PLC程序里用了实际硬件地址访问仿真时没有相应地址。例如直接访问模拟量输入IW64如果仿真模型里没有给这个地址赋初值程序会读到一个跳变的随机值。仿真前最好在监控表里想好哪些输入保持一个固定状态、哪些输入需要手动触发通过变量强制把初始环境搭好。坑三HMI仿真中点击启动按钮没反应。这种现象大多数不是因为按钮没连变量而是PLC状态机没有进入自动就绪条件。检查三个点WashOutputsEnable是否被复位、急停变量是否因为常闭逻辑而处于有效状态、车辆到位传感器是否置位。这三个条件不满足启动按钮按下去了也不会触发状态切换。HMI侧容易处理你会在按钮上看到置位瞬间又消失了——虚按其实就是PLC侧条件不满足。6. 从仿真改成真机哪些地方必须动6.1 地址映射从仿真IO迁移到真实IO仿真时用的是PLCSIM虚拟IO真机上要映射到物理输入输出模块直接在设备组态里配好实际IO卡件地址即可。例如你仿真用的I0.0对应真机也是I0.0那基本不涉及地址映射问题。但如果你仿真时把车辆到位信号放到了I0.0真机布线时因为靠近方便传感器接的是I0.3那就得改程序或者物理改线。我的建议是前期I/O点表确定后严格按点表布线尽量让仿真地址和真机地址一致。这样程序从仿真搬到真机时基本不用改地址只要检查接线就好。6.2 时间参数和流程节奏的重新校准仿真时经常会把预冲洗时间从8秒改成5秒来加速测试这会带来一个问题你在仿真里验证的“合格流程”其实不完全是真实工艺。所以从仿真转到真机后第一件事就是按照工艺手册把所有时间参数恢复成设计值然后空载测试一遍确认各执行元件动作正确再接入水、电、气做带载测试。带载测试时留意水泵启动瞬间的电流冲击和压力波动。有些现场会因为泵启动过快导致水管爆裂这不是程序逻辑问题而是启动时序问题。解决办法是在程序里加软启动延时比如预冲水泵启动后先延时0.5秒再打开喷淋电磁阀让管道先充满水再喷射。6.3 与变频器和传感器的通信集成如果高压泵走变频器那么PLC侧的通信设置不能等真机阶段才做。仿真阶段虽然对真实通信帮助有限但至少要把程序框架搭好。S7-1200和变频器通信常用的方式是Modbus RTU或PROFINET。PROFINET方式更简单些在博途的设备和网络视图里直接添加变频器的GSD文件连成IO设备PLC程序里直接通过IO地址读写变频器的控制字和状态字。Modbus RTU方式需要调用MB_COMM_LOAD和MB_MASTER功能块设置波特率、数据位、停止位、奇偶校验地址要和变频器侧参数对应好。特别提醒1200的Modbus通信有数量限制一个通信端口最多只能带若干个从站具体数量根据型号和固件版本略有差异组态前查一下手册别等接了七八台设备才发现从站数超了。传感器这块真机调试时最容易被忽视的就是“常开常闭选型”和程序逻辑一致性。比如车辆到位传感器你用了常闭型程序里就要用常闭触点判断如果现场装了个常开的程序里没改结果就是车辆还没到位系统就认为有车进来整个状态机乱跑。这个问题在仿真阶段很难暴露因为仿真时你是手动置位变量不涉及实际物理信号。最后说两句梳理完这个项目的心得把一套自动洗车控制系统从需求拆解做到仿真验证再推到真机整个过程最有价值的环节其实是“把每个状态和转移条件想清楚”这一步。很多入门的朋友总急着打开博途拖梯形图最后程序越写越长问题却越查越难。用状态机重构之后这套洗车程序的主逻辑只有寥寥几个CASE分支任何一步卡住看变量就知道原因。我实际测试下来仿真做得越细真机调试的时间就越短。那次现场调试包括通信参数核对、传感器方向调整、工艺时间校正前后只用了一天半就完成了整机联调。放在以前直接写真机的做法至少得三天起。如果后续想让这套系统更完善两个方向可以继续深入一是在HMI里加入数据记录功能统计每天洗车数量、设备累计运行时间方便运维做保养计划二是把PLC接入上位机或云平台通过Modbus TCP把状态数据上传远程就能看到设备当前跑到哪一步、有没有报警。这些都是再往上一层的小改造基础还是那个稳定的状态机程序——先把这一步走扎实后面怎么扩展都不慌。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。