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

资讯详情

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

车库自动门控制:组态王6.55仿真与西门子S7-200 PLC梯形图设计详解

车库自动门控制:组态王6.55仿真与西门子S7-200 PLC梯形图设计详解 去年帮人弄了一套毕业设计题目就是这个“车库自动门控制组态王6.55仿真加西门子200PLC梯形图程序还要带I/O表和设计要求”。这种打包需求在课设、毕设、以及刚转行做自动化的人手里见得特别多。光看标题好像是一个完整项目但真正入手时会发现坑很多I/O表和梯形图对不上、组态王变量地址没接对、仿真器根本连不上组态王……各种状况都能把本来挺简单的一个控制逻辑拖成一个星期都调不完的烂摊子。这篇文章我就按我自己接这类项目的习惯来拆一遍从I/O表设计、梯形图逻辑到组态王画面和仿真联调把每一步为什么这么做、应该注意什么讲清楚。如果你手上正好拿到类似的活无论是要做课设答辩还是想搞出一套能放在作品集里的完整案例这篇都值得看下去。1. 项目全貌与方案选型思路1.1 先搞清楚这类需求到底要交付什么每次看到有人发这种标题我的第一反应不是找程序而是先确认他要的到底是一份“能跑的完整项目”还是一份“逻辑自洽、能讲清楚原理的仿真系统”。拿到“车库自动门控制组态王6.55仿真西门子200PLC梯形图程序改带I/O表和设计要求”这种描述其实已经把交付物的轮廓画出来了一套西门子S7-200 PLC的梯形图程序通常是修改或优化已有程序一份I/O分配表告诉别人每个输入输出接的是什么传感器、按钮和执行器一个组态王6.55的上位机监控画面能显示门的开到位、关到位、运行状态并可以通过画面上的按钮操作系统一份“设计要求”或者类似设计说明的文档用于解释系统功能指标。这样拆开之后就清楚多了。编程本身的工作量其实不大真正花时间的是让PLC程序、组态王变量、I/O表三者之间完全对得上。很多做课设的人交上去的程序单独仿真没问题组态王画面单独演示也问题不大但两者一联动就漏洞百出根子就在一开始没有用一个统一的I/O规划来约束整个工程。1.2 为什么要用组态王6.55配西门子S7-200很多初学者会问现在自动化项目不都用博图或者200 SMART了吗为什么还在用组态王6.55和S7-200这个问题可以从两个层面回答。第一个原因是教学和课程设计的延续性。很多高校的PLC实验室里面S7-200是主力设备配套的STEP 7-Micro/WIN编程软件非常轻量梯形图指令也足够基础几十个网络就能讲清楚一个完整控制系统。组态王6.55同样是国内工控组态软件里教程资源最多、案例最丰富的一版网上有大量配套的驱动文档和视频操作学生遇到问题基本都能查到解决方案。第二个原因是这类旧版本组合在仿真演示上非常成熟。S7-200并不依赖博图那种重型的仿真环境梯形图写好之后在Micro/WIN里编译再通过仿真器或真实PLC跑起来组态王作为上位机通过PPI或OPC方式读取数据。整个技术链路比较短一个普通笔记本就能承担。如果你非要用博图和1500系列反而会给只做仿真演示的人增加很多没必要的环境配置成本。1.3 系统整体框架传感器、控制器、上位机各管什么事车库自动门听起来不复杂但作为一个控制系统它至少包含三层现场设备层、控制层、监控层。现场设备层有开门限位开关、关门限位开关、防夹红外光幕传感器、手动开门/关门按钮、急停开关、以及控制卷帘门电机正反转的接触器。控制层就是S7-200 PLC它负责采集这些数字量输入在内部按梯形图逻辑运算然后输出高电平信号驱动接触器线圈。监控层则是组态王6.55它通过通信口和PLC交换数据在人机界面上显示门的状态。这套系统在仿真时的意义在于你不需要真的接一个红外光幕和接触器只要在组态王画面上做出对应的指示灯和操作按钮再用仿真器或者PLC模拟量输入来模拟现场信号就能把整个控制逻辑验证一遍。因此做仿真项目时最大的障碍不是硬件而是把PLC里的地址和组态王里的变量一一对应起来这件事我会在第4章详细拆解。2. I/O表设计整套项目的地基2.1 I/O表到底要包含哪些内容很多人在拿到这类题目后第一件事就是打开Micro/WIN开始画梯形图。这是一个非常容易踩坑的习惯。我个人的习惯是先把I/O表在纸上或Excel里列出来而且要做到和最终程序里的绝对地址一一对应。因为梯形图程序里可以有无数个中间变量但I/O地址必须是物理上真实存在的资源错一个地址就等于把传感器接到了不存在的端子上。一个完整的I/O表至少需要包含如下内容项目名称、PLC型号、模块位置、通道地址、信号名称、信号类型、电气规格和功能说明。拿本项目来举例常用的数字量输入可以列出这样一张表地址信号名称类型功能说明I0.0急停按钮常闭输入按下时系统急停切断所有运行输出I0.1开门按钮常开输入手动/自动模式下均可发开门命令I0.2关门按钮常开输入手动/自动模式下均可发关门命令I0.3停止按钮常开输入运行过程中暂停门动作I0.4开门到位开关常开输入门完全打开后触发禁止继续开门I0.5关门到位开关常开输入门完全关闭后触发禁止继续关门I0.6红外防夹传感器常开输入关门过程中检测到障碍物立即停门并反向开门I0.7手动/自动选择开关常开输入决定系统是否响应自动联动逻辑I1.0车轮感应器可选常开输入自动模式时用于有车接近自动开门数字量输出则相对简单但要注意电机正反转控制的特殊性地址信号名称类型功能说明Q0.0开门接触器线圈输出置位时门执行开启动作Q0.1关门接触器线圈输出置位时门执行关闭动作Q0.2运行指示灯线圈输出门在动作过程中点亮Q0.3故障报警灯线圈输出急停、过载或防夹触发时点亮Q0.4蜂鸣器线圈输出配合故障报警提示现场人员2.2 I/O地址分配的原则与个性化经验地址分配看起来就是填表但没有经验的人经常犯两个错误一是把常闭输入和常开输入的默认状态搞混二是把输入输出点数预估少了导致后期扩展根本无地址可用。先讲常开常闭的问题。急停按钮在常规接线时必须用常闭触点也就是说PLC正常工作时I0.0这个输入一直为1一旦按钮被拍下输入就变成0。编程时如果你用常开逻辑去判断急停信号那就正好反了。很多仿真项目里没有真实的物理接线完全靠组态王里的变量去模拟这时候往往大家图省事就把急停做成“按下为1”这虽然在纯仿真演示里能看但在逻辑层面和真实工程是背离的。如果真的想把项目做专业建议从一开始就按“常闭逻辑”来建变量组态王里的急停按钮默认是1按下时变成0梯形图里用常开触点去检测急停信号的下降沿或者直接在程序里把急停处理成断开回路。再说I/O点数的预估。以车库门为例现场输入至少包含急停、开门按钮、关门按钮、停止按钮、开到位、关到位、红外防夹、手自动切换这就是8个数字量输入了如果加车轮感应器就直接到9个。输出方面开门接触器、关门接触器、运行指示、故障报警就已经占了4点。对S7-200来说CPU224自带14输入10输出足够应付如果你用更小型的CPU221那可能输入输出就不够用必须加扩展模块。做I/O表之前一定要选好PLC型号否则后期改地址比重新写程序还痛苦。关于地址的间隔预留我还有一个长期保持的习惯把同类信号连续排列但不把地址用完。比如输入端从I0.0到I1.0之间可能还有空余故意保留I1.1到I1.4不用是为了以后信号增加时不需要挪动已有接线。这就像在书架上留一格空位没必要塞得满满当当。3. 西门子200PLC梯形图的核心逻辑拆解3.1 程序结构的规划主程序负责中枢子程序各司其职S7-200的程序分为主程序、子程序和中断程序。做车库门这种项目最忌讳的是把所有逻辑堆在主程序里因为随着功能增加网络数量太多之后排查非常痛苦。我更推荐把程序拆成几个子程序手动控制子程序、自动控制子程序、报警处理子程序、输出刷新子程序。主程序里只要做循环调用比如每次扫描都调用手动控制、自动控制、防夹保护、报警处理和输出执行。子程序之间通过共享的中间继电器和标志位来通信比如有一个内部位M0.0表示“允许开门”M0.1表示“允许关门”M0.2表示“锁定输出”。输出刷新子程序负责把各个子程序的计算结果汇总最终到Q0.0和Q0.1这样即使未来改了控制逻辑也不容易漏掉输出。3.2 电机正反转控制起保停与互锁车库门最核心的梯形图逻辑就是电机正反转控制。S7-200的输出Q0.0控制开门接触器、Q0.1控制关门接触器。这两个输出绝对不能同时为1否则电源相间短路轻则跳闸重则烧接触器。所以必须在程序内部做软件互锁在开门输出回路里串一个关门接触器的常闭触点在关门输出回路里串一个开门接触器的常闭触点。用梯形图语言的语义来描述一个典型的开门动作网络应该是网络标题开门控制左边母线开始先并联两个条件手动开门按钮M0.3的常开点、自动开门条件M0.4的常开点再串联开门到位限位I0.4的常闭点再串关门输出Q0.1的常闭点再串急停正常的标志位M0.5的常开点最后并联开门输出Q0.0自身的常开点作为自保持输出到Q0.0。这样就可以把停车状态下的“点动开启”和运行状态下“保持开启”都覆盖到。关门控制的网络结构完全对称只是把开门到位换成关门到位、把互锁目标换成Q0.0。注意这里的开到位和关到位限位开关必须用常闭触点串进对应的输出回路里逻辑含义是已经到位了就不能继续往这个方向动。很多人仿真时把限位当成普通输入只做显示没用到互锁里结果门都顶到极限了电机还在转这在真实项目里会出大事故。3.3 防夹逻辑光幕触发后要记忆不能只靠瞬时信号红外防夹传感器在I/O表里是I0.6它在关门过程中如果检测到人或车就必须让门立即停止并向开门方向反转一小段距离。这里需要注意一个问题红外光幕的信号常常是一个短暂的脉冲比如人或车快速经过时光幕被遮挡的时间只有几百毫秒。如果梯形图里只是简单地把I0.6串联在关门回路里那么光幕信号结束之后门会立刻重新开始关根本起不到保护作用。正确的做法是加入一个自锁记忆标志位。我在程序里用了M1.0网络写法是I0.6常开点并联M1.0自保点然后串联M1.1复位标志输出到M1.0。M1.1是“防夹复位”条件可以由手动停止按钮触发也可以在防夹动作完成开门两秒后自动复位。用这样一个中间位就能把瞬间的防夹信号“锁存”成为持续指令直到系统确认安全后才解除。防夹触发以后的处理逻辑建议是先断开Q0.1关门输出然后有条件地启动Q0.0开门输出但开门持续时间不应该太长一般给1.5到2秒就够了让门向上离开障碍物即可。很多参考程序在防夹后直接置位开门信号并保持结果就是门反复开开关关调试时看着就头疼。3.4 急停、手动自动切换与超时保护急停在梯形图里应该作为最高优先级的输入。我常用一个统一的安全输出允许位M0.2来代表“输出使能”。它的梯形图逻辑很简单急停输入I0.0常闭接法的常开触点串一个过载保护标志的常闭点输出到M0.2。所有输出执行网络在最终到达物理输出之前都要串入M0.2作为条件。这样只要急停按下不管中间逻辑状态怎么变Q0.0和Q0.1全部为0系统安全停机。手动/自动切换功能通常不需要改变程序结构只需要在开门条件和关门条件里做选择。手动模式下只有按钮输入能触发动作自动模式才考虑车轮感应器、信号联动等条件。在实际项目里我习惯用M0.6表示“自动模式允许”在I0.7为1时置位为0时复位。各动作网络的条件串并联时要保证手动操作在自动模式关闭时依然生效。超时保护是仿真里容易忽略但真实项目很重要的功能。可以定义一个定时器T37当门开始运行后计时正常运行到限位一般不超过30秒如果计时到30秒还没有触发到位开关说明门被卡住或者限位坏了应该断开输出并报警。定时器的使能条件可以用“开门运行中或关门运行中”来表示当Q0.0或Q0.1为1时开始计时任意一个运行结束就复位。仿真时你可以故意把限位开关的变量置0观察30秒后报警灯是否点亮以此验证逻辑的有效性。3.5 拿到别人的梯形图怎么改这块专门回应标题里的“程序改”需求。如果读者不是从零开始而是要做“改程序”那最怕的其实不是看不懂别人的网络而是别人程序里的地址和你的I/O表根本不在一个体系。所以我建议拿到程序后按四步来第一步先打开符号表。S7-200的Micro/WIN程序里符号表相当于图纸上的元件代号正常情况下每个I/O点都应该有注释。如果没有符号表就要通过交叉引用列表找出程序里出现的所有I/O地址统计实际用了几路输入几路输出。第二步找到输出线圈网络。把所有输出线圈当作线索反向追踪它们的置位条件和复位条件。车库门项目常见的输出不过就是开门、关门、报警找到Q0.0和Q0.1在程序里出现了几次就能定位电机控制逻辑主体。第三步和你的I/O表逐条比对。把程序里的地址列表抄到Excel里对照自己的I/O表看哪些地址可以沿用哪些必须替换。不要试图很精细地直接删接线关系而是把新I/O表里的符号名赋给原有地址尽量保留原程序的网络结构只改符号这样改动量最小。第四步就是仿真验证。对改动后的程序做完整的开、关、停止、防夹、急停测试不要只演示“门能打开”这个最顺的画面。程序改不好出问题的点基本都是“停止逻辑被人为旁路了”或者“防夹信号没做自锁”。仿真时逐一验证到位比答辩时被人问住要强得多。4. 组态王6.55工程创建与变量连接4.1 通信配置先让组态王和PLC建立起对话组态王6.55本身不产PLC逻辑需要和S7-200建立通信才能在画面上实时显示状态。通信链路的选择取决于你手头是什么环境如果你有真实S7-200 PLC和PC/PPI电缆那直接用组态王自带的S7-200 PPI驱动串口参数设置与Micro/WIN一致即可。如果是在纯软件环境里仿真就需要额外注意后面我会在仿真联调章节专门展开。在组态王里新建工程后的第一个关键操作是添加设备。路径是“工程管理器—设备—新建”在设备配置向导里选择PLC下的西门子S7-200系列PPI驱动然后设置通信的串口号、波特率、数据位、停止位、校验方式。要注意S7-200的PPI默认波特率通常是9.6kbps地址默认是2。很多初学者将波特率改成其他值后发现死活连不上就是因为PLC侧和组态王侧的串口参数不一致。通信参数搞不定时最稳妥的做法是两边全部恢复默认值不要追求高速率仿真演示9.6k的速率完全够用。4.2 变量定义与地址映射最容易出错的一步组态王里变量分为内存变量和I/O变量。I/O变量才是真正和PLC寄存器地址绑定的数据通道。为车库门项目定义变量时有几个细节非常关键。变量类型建议这样定义每个输入输出信号都直接对应一个离散型I/O变量。比如“开门到位”对应S7-200里的I0.4在组态王变量属性里寄存器类型要选择I寄存器地址就填4连接设备选择你在4.1中建立的S7-200设备。要注意S7-200的PPI驱动在组态王中I区地址通常从偏移量0开始也就是说I0.0填寄存器地址0I0.4就填4。如果填成“04”或者把I和Q类型填反数据就全乱了。输出变量同样需要定义但有一个常见误区是组态王画面中放一个开关量按钮去写Q0.0这种方式在实际工程里是允许的但在仿真演示时风险大——万一画面操作不当把Q0.0置1的同时PLC梯形图又试图复位它画面和程序就会打架。我的习惯是组态王画面里的操作按钮并不直接绑定输出线圈Q而是绑定到内部的软继电器例如M10.0作为“画面方式开门按钮”M10.1作为“画面方式关门按钮”。PLC梯形图里把这些M软继电器当作和物理按钮并联的指令输入来处理。这种方法最大的好处是不论你从组态王操作还是从仿真器强置物理输入最终的输出判断逻辑只有一套不会出现两边互相改写一个物理输出点的冲突。列一份本项目常用的变量表如下组态王变量名连接设备寄存器类型寄存器地址对应PLC地址说明急停状态PLC设备I0I0.0显示急停是否按下开门按钮PLC设备M10M10.0组态王画面开门按钮关门按钮PLC设备M11M10.1组态王画面关门按钮开门到位PLC设备I4I0.4显示开到位状态关门到位PLC设备I5I0.5显示关到位状态开门接触器PLC设备Q0Q0.0显示开门输出故障状态PLC设备Q3Q0.3显示报警状态定义变量时还要注意数据类型。S7-200的M区在组态王离散变量里对应的是位地址而如果你要用定时器、计数器当前值做画面显示就需要定义成整型变量寄存器类型相应填VW、MW或者定时器。本项目里简单起见尽量用开关量组合来简化画面不把定时器当前值往组态王里传这样既少报错也减少调试量。4.3 画面制作状态指示和操作按钮的合理布局组态王的画面是整个系统的脸面但画面设计又最容易走极端要么画得过分花哨要么画一个干巴巴的门和两个按钮就觉得完事了。我建议把画面划分为五个区域最上方是标题和系统运行状态总览左边是门体侧视图和到位指示灯中间是操作按钮区右边是故障报警显示底部实时显示当前门的动作模式。操作按钮的编辑有一个关键属性要设置正确。组态王的按钮在“动画连接—按钮”里可以选择按下和弹起动作车库门控制最好把“按下时”设为变量置1“弹起时”设为变量置0这样按钮就相当于一个不自锁的点动按钮。如果你把按钮直接设置成“切换”模式也就是单击一次置1再单击一次置0那么门的启停会变得非常难控制因为每次启动命令都需要人工再去切换一次复位不符合实际接触器控制逻辑。门的动态显示可以做一个简单而有说服力的动画用组态王的“水平移动”或“垂直移动”连接到一个模拟量变量而PLC程序把运行方向输出映射到VW区的一个数值变量。比如开门过程中VW100逐步增加关门过程中逐步减少组态王把VW100的值映射成门体的垂直偏移量。这种做法虽然需要额外几行梯形图但在答辩演示时效果会好很多你能让画面里的门真的慢慢打开和关闭而不是只有两个指示灯亮一下而已。4.4 报警与故障提示组态王的报警功能在逻辑正确的前提下很好用。建议将故障报警条件指向一个单独的整数变量或M标志位例如M20.0表示防夹报警M20.1表示急停报警M20.2表示开门超时M20.3表示关门超时。组态王中把这些变量加入报警组后可以做成报警窗口显示具体文本。做报警画面时要注意组态王默认的报警文本格式比较啰嗦需要在报警属性里把报警文本改成“防夹报警”“关门超时”等简短中文描述并且把优先级设置好让故障类报警优先于普通提示类信息。仿真演示时故意触发一次超时报警等报警窗口弹出来这个过程本身就是整个项目的加分项。5. 联合仿真联调让组态王画面和PLC程序真正跑在一起5.1 仿真联调前必须弄清楚的通信链路很多人在这一步卡死觉得组态王和S7-200仿真器怎么都连不上。这里有必要把话说透常见的S7-200仿真器并不同于博图那种内置PLCSIM能直接被上位机组态软件无缝连接。市面流传的S7-200第三方仿真器可以模拟执行梯形图逻辑但对外通信能力很弱不一定有稳定可靠的PPI对外接口。如果你是在学校机房或者自己电脑上做纯软件仿真真正稳妥的联调方案至少有三种第一种是全物理方式用真实S7-200 PLC加PC/PPI编程电缆把组态王和设备用串口相连。这种方式最稳定效果也最好前提是你手头有硬件。第二种是OPC中转方式在电脑上安装S7-200 PC Access这个OPC服务器软件把PLC梯形图逻辑通过仿真器或真实PLC挂上然后利用PC Access建立OPC服务器再在组态王里面添加OPC设备。组态王可以通过OPC标准接口读写S7-200的数据区。这个方案的优点是可以让组态王访问仿真器内部的数据区缺点是链路多如果仿真器不支持外部OPC访问这条路也走不通。第三种是纯并联演示方式PLC程序在S7-200仿真器里独立运行利用仿真器监视梯形图状态来确认逻辑正确组态王画面用于模拟整个控制过程不追求与PLC实时数据交换。答辩演示时分两个窗口一边演示梯形图里的状态变化一边演示组态王里的画面动画逻辑上自洽就行。给做课设的人一句实在话如果条件允许优先采用真实PLC加PC Access或者组态王PPI直连因为答辩时所有数据都是真实流动的你说什么都硬气。如果你只有软件环境别浪费时间耗费精力去追求两个软件完全实时同步能把PLC侧和组态王侧各自的仿真演示串成一个完整故事已经能拿到不错的分数了。5.2 联调顺序从离散信号开始验证一旦通信打通我建议不要急着把门整个开一遍而是先按照下面顺序逐步验证第一步先在组态王数据词典把每个I/O变量的“初始值”状态检查一遍然后在PLC程序监视状态下强置对应地址看组态王变量是否跟着变化。比如把I0.4强制为1组态王里“开门到位”指示灯应该马上变红或变绿。第二步在组态王画面点击“开门按钮”观察PLC梯形图中M10.0是否变为1关门输出Q0.1是否被禁止开门输出Q0.0是否被置位。如果不变化优先检查PLC里M10.0有没有被重复赋值或者组态王的设备连接是否真的在通信状态。第三步在PLC程序中强制I0.4开门到位为1观察开门输出是不是被切断画面中“门体到位”动画是否停止。之后逐步模拟关门、防夹、急停、超时这几类异常。我自己调试这类系统时有个习惯在电脑显示器旁边贴一张纸上面写着所有关键地址的对应关系。每测一个点位就在纸上打一个勾。虽然看起来原始但排查出问题来的速度比对着电子表格来回切换快得多。5.3 典型故障现象与排查方法把我在类似项目里见过的高频故障整理成一张排查速查表方便你实际调试时对照现象可能原因排查思路组态王设备管理器显示“通信失败”串口号错误、波特率不一致、PLC地址不对确认PLC在Micro/WIN里的通信地址与组态王设备地址一致恢复成9.6k默认试一次组态王能连上PLC但变量值全为0寄存器类型错、地址偏移量填错把I0.0对应地址填0开始验证检查是否把I通道误填成Q或M画面按钮点了没反应按钮动作属性选错、没有连接到I/O变量查看变量是否在“采集”状态按下按钮时变量值是否翻转梯形图强制输入后组态王没有变化通信链路断开或变量属于内存变量先看设备通信质量再用PLC侧监视软元件确认强制是否成功防夹触发后一亮一灭反复抖动防夹信号没有自锁记忆增加M1.0自锁网络防夹动作后保持直到安全复位开门和关门同时输出1程序中缺少软件互锁在Q0.0回路串Q0.1常闭在Q0.1回路串Q0.0常闭并检查是否有重复输出线圈5.4 演示时的操作编排与答辩准备最后多聊几句关于“演示”本身的事。这类项目在课程设计答辩或者作品集展示时时间是有限的所以演示流程一定要提前编排成一个连续的故事。我的建议顺序是先展示I/O表和设计要求说明系统一共有几个输入几个输出然后打开PLC梯形图说明主程序和子程序的划分再切到组态王画面演示手动开门手动关门运行中按停止关门过程中触发防夹反向开门最后演示急停保护。全程不要超过十分钟但每个环节都要能解释清楚“为什么要这样控制”尤其是互锁和防夹逻辑背后的安全考虑。答辩老师最喜欢的往往不是你画了多漂亮的界面而是你能说清楚Q0.0如果和Q0.1同时为1会带来什么后果以及你是如何用梯形图的软件互锁去规避这种风险的。我个人在改这类程序时最后还会额外做一次“删掉一个关键互锁”的对比测试看看系统在缺失保护时是否会产生危险状态。这个测试虽然不上台讲但能让我在回答老师问题时心里非常有底。仿真项目的意义不就是把这种错误留在虚拟环境里看清后果而不是等真到了现场才出事故对吧。
返回列表