三菱PLC手自动步进电机控制案例

一 任务描述

1、案例(项目)描述

如下,有一台触摸屏,连接了一台3U的PLC,PLC下面带了一台步进电机,现在需要写一段控制的程序对步进电机进行控制。( 步进电机步距角1.8,螺距2mm,细分设置为4;X5是负极限 ,X4是原点,X3是正极限)。

2、要求:

1)手动模式下,可自动正反转。

2)按下回原点按钮,能够自动回原点,回完原点才可进行自动。

3)自动模式下,同时原点回归完毕 ,按下启动按钮,电机按照设定的位置走(位置1——位置2——位置3——位置4——位置5——位置1)不断循环。

4)按下急停按钮按钮,步进电机立即停止运行。需重新执行一次原点回归指令。

5)按下暂停按钮时,设备停止,重新按下启动时设备继续动作。

二 元件选型I/O排布 

1、电气元件选型:

2、I/O分配:

三 电机接线

四 程序编写

1、手动控制:

M8343和M8344分别是Y0轴的正负极限特殊继电器,直接和外部信号一一对应,这样电机碰到对应的极限就会停,在手动M2断开时,M2常闭触点导通,触摸屏的正反转按钮M3和M4控制了可变速脉冲输出指令控制电机正反转,频率暂时固定为3000HZ。

2、原点回归:

PLC开机时,用M8002设置爬行速度和回归速度,把回归速度设置为3000HZ,爬行速度设置为500HZ;

当plc开机时,或者触摸屏按下回原点按钮M5时,触发M0去驱动原点回归指令,执行原点回归,执行完毕就复位M0,同时置位M1,M1置位原点回归完成标志位,它导通了说明原点回归完成,后面才可以控制自动控制的动作。

3、数据计算:

已知步进电机步距离角1.8°,细分4,也就是一个脉冲走的角度是1.8/4=0.45°,360°除以0.45度,等于800,也就是发送800个脉冲转动一圈,已知螺杆的螺距是2mm,电机转动一圈走2mm,需要800个脉冲,可以得出脉冲当量=2mm/800 =0.0025mm

计算时,用距离除以脉冲当量就是实际脉冲数,把5个位置的距离从D200、D202、D204、D206、D208转化到D0、D2、D4、D6、D8。

D8340是Y0周的位置信息,把脉冲信息通过DFLT指令转换成浮点数,然后乘以脉冲当量,就得出实际距离,放在D210里面,在触摸屏进行显示。

4、自动控制启停:

在手动状态,并且回原点完成,D100 =0时,就进入第1步动作,导通M7启动标志位,顺序运行的程序在后面写。

按下停止按钮复位D100,复位原点回归完成,复位启动标志。

5、顺序控制:

动作需要逆序写,第一步写在最后,动作完成M8029会导通,使用INC让D100加1,后面每一步都一样;运行到第5步,用M8029导通M10线圈,M10的常开写在这一行程序上面,用MOV指令让D100回到第1步,这样写是为了隔开一个扫描周期,让第5步的动作和第一步的定位指令不在同一个扫描周期里面运行。

触摸屏做M7的按钮时,要选择复位按钮,按下停止,就只能断开M7,下次按下启动时,就重新导通M7,重新运行。

<think>好的,我现在需要帮助用户设计一个PLC顺序控制逻辑,具体要求是:每次按下X0启动一台电机,按下X1停止最后一台电机,紧急停止X2停所有电机,输出点Y0-Y3控制四台电机。用户还希望看到梯形图示例。 首先,我需要明确用户的需求。用户提到顺序控制,也就是每次启动按X0,电机依次启动,比如第一次按Y0启动,第二次Y1,依此类推。停止按钮X1则是逆序停止,每次停止最后启动的那台电机。紧急停止X2要立刻停止所有电机。输出点Y0到Y3对应四台电机。 接下来,我需要考虑如何用PLC的梯形图来实现这个逻辑。通常,顺序控制可以使用移位寄存器或者计数器来实现。因为需要记录当前启动到第几台电机,所以计数器可能比较合适。每次按下X0,计数器加1,对应的输出点置位。停止时,计数器减1,对应的输出点复位。不过,这里要注意,停止的是最后启动的那台,也就是当前计数值对应的电机,所以可能需要保持当前计数值,并在停止时根据该值来复位相应的输出。 另外,紧急停止X2需要立即停止所有电机,所以当X2为ON时,所有输出Y0-Y3应该被复位。同时,可能还需要复位计数器,以确保下次启动时从头开始。 用户提供的参考引用中,引用[1]提到使用D寄存器进行通讯缓冲区管理,以及使用M8002进行初始化。这可能涉及到数据存储和通讯协议的处理,但当前的问题主要是顺序控制,可能不需要复杂的通讯设置。不过,用户可能需要使用辅助继电器(M)来保持状态,比如用计数器C来记录当前启动的电机数量。 可能的步骤: 1. 使用计数器C0来记录已启动的电机数量。每次X0按下(上升沿),C0加1,直到达到4(因为有Y0-Y3四台电机)。 2. 当C0的当前值为1时,启动Y0;值为2时启动Y1,以此类推。这可以通过比较指令来实现,比如当C0>=1时Y0保持ON,C0>=2时Y1保持ON,直到C0减少时相应复位。 3. 当X1按下时,C0减1,同时根据C0的新值,关闭对应的Y输出。例如,如果C0从3减到2,则Y2需要关闭。 4. 紧急停止X2按下时,复位C0,并关闭所有Y输出。 不过,这里可能需要注意,直接使用计数器可能无法准确跟踪哪台电机是最后启动的,尤其是在多次启动和停止交替操作时。因此,可能需要使用移位寄存器的方式,或者使用辅助寄存器来记录当前激活的电机。 另一种方法是使用移位指令,比如每次启动时将一个位移位到左边,停止时移出。例如,使用一个寄存器D0,初始为0。每次按下X0,将D0左移一位并加1,这样D0的二进制位会依次为0001, 0011, 0111, 1111,对应Y0-Y3的启动。停止时,右移一位,这样最后一位会被移出。但这种方法可能需要处理二进制位的每一位,可能比较复杂。 或者,可以使用一个指针变量,比如D10,存储当前激活的电机数量。启动时D10加1,停止时减1,紧急停止时D10归零。然后通过比较D10的值来触发相应的Y输出。例如,当D10>=1时Y0保持ON,D10>=2时Y1保持ON,等等。这种方法可能更直观,但需要注意D10的范围在0到4之间。 此外,需要处理按钮的上升沿,避免长按导致多次触发。参考引用[1]中提到X0的上升沿触发M50吸合,因此用户可能已经了解需要使用边沿触发指令,如PLS(上升沿检测)或PLF(下降沿检测)。 综合以上思考,可能的梯形图结构如下: 1. 初始化部分:使用M8002初始化相关寄存器和计数器。 2. X0上升沿触发,增加计数器C0(范围1-4)。 3. X1上升沿触发,减少计数器C0(范围0-3)。 4. 紧急停止X2直接复位计数器C0,并复位所有Y输出。 5. 根据C0的当前值,控制Y0-Y3的输出。例如,C0>=1时Y0=ON,C0>=2时Y1=ON,依此类推。 但这里有个问题,当C0减少时,比如从3减到2,需要关闭Y2,但Y0和Y1保持ON。这时候需要使用比较指令,每个Y的输出条件是其对应的序号小于等于C0的当前值。例如,Y0的触发条件是C0>=1,Y1是C0>=2,Y2是C0>=3,Y3是C0>=4。这样,当C0减少时,相应的Y输出会自动关闭,因为比较结果变为假。 这样,每次按下X0,C0加1,Y0-Y3依次开启;按下X1,C0减1,最后一个Y关闭;紧急停止X2复位C0到0,关闭所有Y。 需要注意的是,计数器C0的加减需要限制在0到4之间,避免超出范围。比如,当C0当前值为4时,再按X0不增加;当C0为0时,按X1不减少。 接下来,编写梯形图的大致结构: - 网络1:M8002初始化,MOV K0 C0(将计数器C0复位为0) - 网络2:X0上升沿触发,比较C0当前值是否小于4,若满足,INC C0(计数器加1) - 网络3:X1上升沿触发,比较C0当前值是否大于0,若满足,DEC C0(计数器减1) - 网络4:X2常闭触点控制,当X2为ON时,MOV K0 C0,同时复位Y0-Y3 - 网络5:比较C0>=1,驱动Y0 - 网络6:比较C0>=2,驱动Y1 - 网络7:比较C0>=3,驱动Y2 - 网络8:比较C0>=4,驱动Y3 不过,在PLC中,通常使用比较指令来驱动输出。例如,当C0的当前值大于等于1时,Y0置位;当C0小于1时,Y0复位。但这样可能需要每个Y输出有两个网络,一个置位,一个复位。或者使用MOV指令将C0的值与比较结果输出到Y。 或者,可以使用解码指令,例如当C0为1时,Y0=ON;C0=2时Y1=ON,但这样可能无法保持之前的状态,因为每次C0增加时,后面的Y需要保持ON。因此,可能需要使用保持型的输出,比如SET和RST指令。 例如,当C0从n-1增加到n时,SET Y(n-1);当C0从n减少到n-1时,RST Y(n-1)。这可能比较复杂,需要跟踪C0的变化。 或者,使用MOV指令将C0的值转换为二进制位输出到Y。例如,C0的值作为位数,当C0=1时,K1Y0=1(Y0=ON),C0=2时K1Y0=3(Y0和Y1=ON),依此类推。但这样需要将C0的值转换为对应的位模式。例如,当C0=1时,输出1(二进制0001),C0=2时输出3(0011),C0=3时输出7(0111),C0=4时输出15(1111)。这可以通过将2^C0 -1计算得到,但可能需要在PLC中使用指数运算,这可能比较复杂。 不过,三菱PLC中有解码指令DECO,可以将数值转换为对应的位状态。例如,当源数据是C0的值,解码到Y0开始的位,则当C0=1时,Y0=ON;C0=2时Y1=ON,但这样每个C0值对应一个Y,而不是累积。因此可能不适用。 或许更简单的方法是,每个Y的输出由C0的值是否大于等于其序号来决定。例如: Y0 = (C0 >= 1) Y1 = (C0 >= 2) Y2 = (C0 >= 3) Y3 = (C0 >= 4) 这样,当C0=3时,Y0、Y1、Y2都处于ON状态,Y3为OFF。当按下X1,C0减到2,Y2自动关闭,Y0和Y1保持ON。这正是用户需要的效果。 因此,梯形图中每个Y的输出可以由比较指令驱动。例如,使用比较指令LD>= C0 K1,然后OUT Y0。同样,Y1由C0>=K2驱动,依此类推。 但需要注意,在PLC中,比较指令需要正确的语法。例如,在三菱FX系列中,可以使用CMP指令或者直接比较触点。 例如,对于Y0: 当C0的当前值大于等于1时,Y0接通。这可以通过以下方式实现: LD M8000 // 常ON触点 AND >= C0 K1 OUT Y0 同样,Y1的条件是C0 >=2,依此类推。 这样,每次C0变化时,Y的输出会自动更新。不需要使用SET/RST,因为当条件不满足时,输出会自动关闭。 关于计数器C0的加减,需要确保在按下X0或X1时只进行一次加减。因此,需要使用上升沿触发,并且自锁或者使用脉冲指令。 例如,处理X0的按下: 当X0从OFF到ON时,产生一个脉冲,触发INC指令。但需要确保C0不超过4。可以在INC指令前加入比较,当C0 <4时才执行INC。 同样,处理X1的按下:当X1上升沿时,如果C0 >0,则执行DEC C0。 紧急停止X2,当X2为ON时,将C0复位为0,并且立即关闭所有Y输出。这可以通过MOV K0 C0,以及复位Y0-Y3。或者,当C0=0时,所有Y自动关闭,所以可能只需要复位C0即可,但需要确认比较指令是否在同一个扫描周期生效。为了立即响应,可能需要在X2为ON时直接复位Y0-Y3,同时复位C0。 综合以上分析,梯形图的结构大致如下: 网络1:初始化 M8002 MOV K0 C0 网络2:处理X0启动 X0上升沿(PLS M0) 比较C0 < K4 AND M0 AND < C0 K4 INC C0 网络3:处理X1停止 X1上升沿(PLS M1) 比较C0 > K0 AND M1 AND > C0 K0 DEC C0 网络4:处理紧急停止X2 X2 MOV K0 C0 RST Y0 RST Y1 RST Y2 RST Y3 网络5:控制Y0输出 LD >= C0 K1 OUT Y0 网络6:控制Y1输出 LD >= C0 K2 OUT Y1 网络7:控制Y2输出 LD >= C0 K3 OUT Y2 网络8:控制Y3输出 LD >= C0 K4 OUT Y3 不过,这里可能有问题,因为当X2按下时,虽然C0被设为0,但Y的输出可能不会立即关闭,因为比较指令是在同一扫描周期执行的。因此,可能需要同时复位Y0-Y3,或者在X2为ON时强制关闭Y输出。 例如,网络4可以写成: X2 ---| |-----------------------(MOV K0 C0) | +-----------(RST Y0) +-----------(RST Y1) +-----------(RST Y2) +-----------(RST Y3)) 这样,当X2为ON时,立即复位所有Y,并且C0设为0,确保后续扫描周期中比较指令也不会触发Y输出。 另外,关于计数器C0的使用,需要注意FX系列PLC中的计数器是16位的,C0是普通计数器,可能需要设置为非保持型,否则在断电后可能保持数值。用户的需求中可能不需要保持,所以使用普通计数器即可。 现在,验证逻辑是否正确: 当按下X0,C0加1,最多到4。对应的Y0-Y3会根据C0的值依次打开。例如,C0=1时Y0=ON;C0=2时Y0和Y1=ON;C0=3时Y0-Y2=ON;C0=4时全部Y0-Y3=ON。 按下X1时,C0减1,例如从4到3,此时Y3的条件是C0>=4,不再满足,所以Y3关闭,而Y0-Y2仍保持ON。 紧急停止X2按下时,C0=0,同时所有Y被复位,所有电机停止。 这符合用户的需求。 现在,编写具体的梯形图代码。注意FX系列的指令可能略有不同,比如使用PLSR或PLS指令处理上升沿,但基本结构应该类似。 可能的梯形图步骤: 1. 初始化: |--[M8002]--[MOV K0 C0]-------------------| 2. X0处理: |--[X0]--[PLS M0]-------------------------| |--[M0]--[CMP K4 C0]--[<]--[INC C0]-------| 这里可能需要使用比较指令,当C0当前值小于4时,才执行INC。或者可以使用C0的当前值与4比较,如果小于则允许加1。 3. X1处理: |--[X1]--[PLS M1]-------------------------| |--[M1]--[CMP C0 K0]--[>]--[DEC C0]-------| 4. 紧急停止处理: |--[X2]--[MOV K0 C0]----------------------| |--[X2]--[RST Y0]-------------------------| |--[X2]--[RST Y1]-------------------------| |--[X2]--[RST Y2]-------------------------| |--[X2]--[RST Y3]-------------------------| 5. Y输出控制: |--[>= C0 K1]--[Y0]-----------------------| |--[>= C0 K2]--[Y1]-----------------------| |--[>= C0 K3]--[Y2]-----------------------| |--[>= C0 K4]--[Y3]-----------------------| 需要注意的是,在三菱FX PLC中,比较指令需要正确使用触点比较。例如,使用LD>=指令: 网络5: LD C0 OUT T0 K1(这可能不正确,应使用比较触点) 正确的做法是使用比较触点,例如: |--[>= C0 K1]--[Y0]-----------------------| 同样适用于其他Y输出。 总结,梯形图的实现需要处理边沿触发、计数器加减、紧急停止时的复位,以及根据计数器值控制输出。这应该能满足用户的需求。</think>根据控制需求,我们采用计数器结合比较指令实现顺序控制逻辑。以下是PLC梯形图设计思路及示例: ### 一、控制逻辑分析 1. **启动逻辑**:每次X0上升沿触发时,计数器$C0$加1(范围1-4),对应启动Y0-Y3中的一台新电机 $$C0_{new} = \min(C0_{old} + 1, 4)$$ 2. **停止逻辑**:每次X1上升沿触发时,计数器$C0$减1(范围0-3),对应停止最后启动的电机 $$C0_{new} = \max(C0_{old} - 1, 0)$$ 3. **急停逻辑**:X2接通时立即复位所有输出,计数器清零 ### 二、梯形图程序示例 ```ladder |--[M8002]--[MOV K0 C0]-------------------| // 初始化计数器 |--[X0]--[PLS M0]-------------------------| // X0上升沿检测 |--[M0]--[<= C0 K3]--[INC C0]-------------| // 限制最大计数值4 |--[X1]--[PLS M1]-------------------------| // X1上升沿检测 |--[M1]--[>= C0 K1]--[DEC C0]-------------| // 限制最小计数值0 |--[X2]-----[MOV K0 C0]-------------------| // 急停处理 |--[X2]-----[RST Y0]----------------------| // 急停时复位输出 |--[X2]-----[RST Y1]----------------------| |--[X2]-----[RST Y2]----------------------| |--[X2]-----[RST Y3]----------------------| |--[>= C0 K1]-----[Y0]--------------------| // 输出控制 |--[>= C0 K2]-----[Y1]--------------------| |--[>= C0 K3]-----[Y2]--------------------| |--[>= C0 K4]-----[Y3]--------------------| ``` ### 三、运行说明 1. **启动操作**:首次按下X0时$C0=1$,Y0接通;第二次按下X0$C0=2$,Y0/Y1同时接通,依此类推 2. **停止操作**:当$C0=3$时按下X1,$C0=2$,Y2自动断开 3. **急停响应**:X2接通后0.5ms内所有输出立即断开[^1] ### 四、性能优化建议 1. 添加互锁逻辑防止重复触发 2. 使用$D200$作为计数器断电保持寄存器[^2] 3. 增加运行状态指示灯(Y4-Y7)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值