首页 > 基础教程 > 三菱FX5U PLC系统教程 > 文章内容

三菱FX5U PLC系统教程 第七课:移位与循环指令

时间: 2025-12-30 19:34浏览量:9次


第一部分:位移位指令基础

1.1 位移位概念

什么是位移位?

  • 将一组位数据向左或向右移动

  • 常用于顺序控制、流水线控制

  • 可以实现数据队列、先进先出等

位与位的对应关系:

  • M0-M15:16个位组成一个字

  • 位组合元件:KnX、KnY、KnM、KnS

  • 例如:K4M0表示M0-M15(16位)

1.2 基本位移位指令

SFTL指令(位左移):

text
指令格式:[SFTL D n1 n2]
D:起始位元件
n1:位移位数(总位数)
n2:每次移动位数

功能:将D开始的n1个位左移n2位
高位移出,低位补入的数据由指令前的条件决定

SFTR指令(位右移):

text
指令格式:[SFTR D n1 n2]
功能:将D开始的n1个位右移n2位
低位移出,高位补入的数据由指令前的条件决定

第二部分:位左移指令应用

2.1 基本左移应用

示例1:流水灯控制(单灯移动)

text
   M8000(运行标志)
|---||--------[SFTL M0 K8 K1]---
   输入条件
|---||--------(此处控制最低位补入的数据)

   M0    Y0
|---||---( )---
   M1    Y1
|---||---( )---
   M2    Y2
|---||---( )---
   M3    Y3
|---||---( )---
   M4    Y4
|---||---( )---
   M5    Y5
|---||---( )---
   M6    Y6
|---||---( )---
   M7    Y7
|---||---( )---

初始化和控制:

text
网络1:初始化
   X0(启动)    [MOV K1 M0]---(M0=1,其他为0)
                  [MOV K0 M1]---
                  ...(或使用FMOV指令)

网络2:定时左移
   M8013(1秒脉冲)   [SFTL M0 K8 K1]---

网络3:补入数据控制
   M8013    [MOV K1 M0]---(每次左移后,最低位补1)

2.2 多位移位应用

示例2:物料分拣控制

text
假设:8个工位,X0-X7检测物料
要求:检测到物料时,对应位置的机械手动作

网络1:物料检测移位
   M8000          [SFTR M100 K8 K1]---
   X0(物料检测)   [MOV K1 M107]---(检测到物料,放到最高位)

网络2:机械手控制
   M100   Y0(1号机械手)
|---||---( )---
   M101   Y1(2号机械手)
|---||---( )---
   ...(其他工位类似)
   M107   Y7(8号机械手)
|---||---( )---

第三部分:位右移指令应用

3.1 基本右移应用

示例3:先进先出队列

text
要求:8个存储位置,新数据从右侧进入,旧数据从左侧移出

网络1:数据输入
   X0(新数据)   [SFTR M0 K8 K1]---
   X0            [MOV D0 M7]---(新数据放到最低位)

网络2:数据输出
   M0(最旧数据)   [MOV M0 D10]---(读取最旧数据)

3.2 双向移位控制

示例4:可逆流水灯

text
网络1:左移控制
   X0(左移按钮)   [SFTL M0 K8 K1]---
   X0              [MOV K1 M0]---

网络2:右移控制
   X1(右移按钮)   [SFTR M0 K8 K1]---
   X1              [MOV K1 M7]---

网络3:方向选择
   X2(方向选择)   M10
|---||---( )---
   M10(左移模式)   [SET M11]---
                    [RST M12]---
   X3(右移模式)   [SET M12]---
                    [RST M11]---

网络4:定时移位
   M8013    M11(左移时)[SFTL M0 K8 K1]---
                         [MOV K1 M0]---
   M8013    M12(右移时)[SFTR M0 K8 K1]---
                         [MOV K1 M7]---

第四部分:字移位指令

4.1 字移位概念

字移位特点:

  • 以字(16位)为单位移动

  • 适合批量数据处理

  • 常用于数据缓冲、数据队列

WSFL指令(字左移):

text
指令格式:[WSFL D n1 n2]
D:起始字元件
n1:移位的字数
n2:每次移动字数

功能:将D开始的n1个字左移n2字

WSFR指令(字右移):

text
指令格式:[WSFR D n1 n2]
功能:将D开始的n1个字右移n2字

4.2 字移位应用实例

示例5:数据采集缓冲区

text
要求:采集100个数据,形成先进先出缓冲区

网络1:数据采集移位
   X0(采集完成)   [WSFL D100 K100 K1]---
   X0              [MOV D0 D199]---(新数据放到最后)

网络2:数据处理
   M8000          [CMP D100 K1000 M0]---
   M0(超限)      Y0
|---||---( )---

网络3:数据读取
   X1(读取数据)   [MOV D100 D200]---(读取最早的数据)

示例6:配方存储管理

text
要求:存储10个配方,每个配方5个参数

网络1:配方选择移位
   X0(下一个配方)   [WSFL D0 K50 K5]---(每个配方5个参数)

网络2:当前配方显示
   M8000          [MOV D0 D100]---(参数1)
                  [MOV D1 D101]---(参数2)
                  [MOV D2 D102]---(参数3)
                  [MOV D3 D103]---(参数4)
                  [MOV D4 D104]---(参数5)

第五部分:循环移位指令

5.1 循环移位概念

循环移位特点:

  • 数据首尾相连形成环

  • 移出的数据从另一端进入

  • 适合循环显示、循环控制

ROL指令(循环左移):

text
指令格式:[ROL D n]
D:目标元件(16位或32位)
n:移动位数

功能:将D的数据循环左移n位

ROR指令(循环右移):

text
指令格式:[ROR D n]
功能:将D的数据循环右移n位

5.2 循环移位应用

示例7:循环显示控制

text
网络1:循环左移显示
   M8013(1秒脉冲)   [ROL K4M0 K1]---

网络2:输出控制
   M0-M15对应Y0-Y15的输出
   (可以通过MOV指令传送到输出)

网络3:初始状态设置
   M8002(初始脉冲)   [MOV H0001 K4M0]---(初始只有M0=1)

示例8:多状态循环控制

text
要求:4种工作模式循环切换

网络1:模式循环切换
   X0(切换按钮)   [ROL K4M0 K4]---(每次移动4位)

网络2:模式状态分配
   M0    (模式1)Y0
|---||---(S)---
   M4    (模式2)Y1
|---||---(S)---
   M8    (模式3)Y2
|---||---(S)---
   M12   (模式4)Y3
|---||---(S)---

网络3:互锁控制
   Y0    Y1
|---|/|---
   Y0    Y2
|---|/|---
   Y0    Y3
|---|/|---
   (其他互锁类似)

第六部分:移位指令综合应用

6.1 生产线控制系统

示例9:自动化装配线

text
要求:10个工位,每个工位完成不同操作
产品从前到后流动,每个工位处理时间不同

网络1:产品流动控制(使用位左移)
   M8000          T0 K10(工位处理时间)
|---||----------[TON]---
   T0            [SFTL M0 K10 K1]---
   T0            [MOV K1 M0]---(新产品进入)

网络2:各工位控制
   M0    (1号工位)[SET Y0]---(上料)
|---||---
   M1    (2号工位)[SET Y1]---(装配1)
|---||---
   M2    (3号工位)[SET Y2]---(装配2)
|---||---
   ...(其他工位类似)

网络3:工位完成处理
   X0(1号完成)   [RST Y0]---
   X1(2号完成)   [RST Y1]---
   ...(其他完成信号)

6.2 数据队列管理系统

示例10:实时数据队列

text
要求:实时采集数据,存储最近50个数据
可以随时读取任意位置的数据

网络1:数据采集队列
   M8014(30秒脉冲)   [WSFL D100 K50 K1]---
   M8014              [MOV D0 D149]---(新数据)

网络2:数据读取控制
   X0(读取请求)   [MOV D100 Z0]---(Z0为变址寄存器)
                  [ADD Z0 D10 Z0]---(D10为读取位置)
                  [MOV DZ0 D200]---(读取到D200)

网络3:队列状态显示
   M8000          [SUB D150 D100 D300]---(队列长度)
                  [CMP D300 K50 M0]---
   M2(队列空)    Y10
|---||---( )---
   M0(队列满)    Y11
|---||---( )---

第七部分:实践任务

任务1:流水灯控制系统

设计要求:

  1. 8个指示灯Y0-Y7

  2. 三种模式:

    • 模式1:单灯从左向右移动

    • 模式2:单灯从右向左移动

    • 模式3:双灯对称移动

  3. 移动速度可调(D0存储时间,单位0.1秒)

  4. X0模式选择,X1启动/停止,X2速度增加,X3速度减少

任务2:物料分拣系统

设计要求:

  1. 10个工位的流水线

  2. X0-X9检测物料类型(0为良品,1为不良品)

  3. 检测信号移位存储到M0-M9

  4. 不良品到达第5工位时(M4=1),Y10推出

  5. 良品到达第8工位时(M7=1),Y11打包

  6. 统计良品数(C0)和不良品数(C1)

任务3:数据缓冲区管理

设计要求:

  1. 建立100个数据缓冲队列

  2. X0触发数据写入,将D0写入缓冲区

  3. X1触发数据读取,从缓冲区读取到D1

  4. 显示缓冲区当前数据数量

  5. 缓冲区满时停止写入(Y0报警)

  6. 缓冲区空时停止读取(Y1报警)

  7. 可以清除缓冲区(X2)

第八部分:常见问题解答

问题1:移位指令的n1和n2参数如何设置?

解答:

  • n1:移位的总位数或字数

    • 对于位元件:n1 ≤ 位数

    • 对于字元件:n1 ≤ 可用字数

  • n2:每次移动的位数或字数

    • n2 ≤ n1

    • 通常n2=1,表示逐个移动

注意事项:

  1. 确保D+n1-1不超出元件范围

  2. n2过大可能导致数据丢失

  3. 移动后,空出的位置需要手动补数据

问题2:如何实现移位暂停?

解决方案:

  1. 使用条件控制移位指令执行

  2. 使用中间标志位

  3. 保存当前状态,暂停时保持

示例:

text
   M10(运行允许)   M8013(时钟)
|---||---||---[SFTL M0 K8 K1]---

问题3:移位速度太快怎么控制?

解决方法:

  1. 使用定时器控制移位频率

  2. 使用低速时钟脉冲(M8011-M8014)

  3. 使用计数器分频

示例:定时器控制速度

text
   T0 K10(时间可调)
|---||----------[TON]---
   T0            [SFTL M0 K8 K1]---

第九部分:学习检测

选择题(每题10分)

  1. SFTL M0 K8 K1指令的功能是什么?
    A) 将M0-M7右移1位
    B) 将M0-M7左移1位
    C) 将M0循环左移1位
    D) 将M0-M15左移1位

  2. WSFL指令的单位是什么?
    A) 位
    B) 字节
    C) 字
    D) 双字

  3. ROL指令的特点是什么?
    A) 高位丢失,低位补0
    B) 低位丢失,高位补0
    C) 循环移动,数据不丢失
    D) 数据反向

判断题(每题10分)

  1. 移位指令执行后,空出的位置自动补0。( )

  2. WSFL指令可以用于批量数据处理。( )

  3. 循环移位指令适合流水灯控制。( )

编程题(40分)

设计一个停车场车位显示系统:

要求:

  1. 停车场有16个车位

  2. 入口传感器X0,出口传感器X1

  3. 车位状态用M0-M15表示(1有车,0空位)

  4. 车辆进入时(X0),寻找第一个空位(M=0),将其置1

  5. 车辆离开时(X1),从最后开始查找有车位(M=1),将其清0

  6. 显示当前空位数(D0)

  7. 车位满时,入口红灯Y0亮

  8. 车位空时,出口绿灯Y1亮

答案部分

选择题答案:

  1. B 2. C 3. C

判断题答案:

  1. 错(需要手动补数据) 2. 对 3. 对

编程题参考程序:

text
网络1:车辆进入处理
   X0(进入)上升沿   [SFTR M0 K16 K1]---(右移1位)
                    [MOV K0 M0]---(最低位补0,表示新空位?)
   (实际应为查找空位程序,这里简化)

网络2:车辆离开处理
   X1(离开)上升沿   [SFTL M0 K16 K1]---(左移1位)
                    [MOV K0 M15]---(最高位补0)

网络3:空位数计算
   M8000          [MOV K0 D0]---(清零计数器)
   M0=0时         [INC D0]---
   M1=0时         [INC D0]---
   ...(16个位依次判断)

网络4:车位状态显示
   D0=0时(车满)   Y0
|---||---( )---
   D0=16时(车空)   Y1
|---||---( )---

网络5:简化版查找空位
   X0(进入)       [FOR K16]---(循环16次)
   [IF M0=0]       [SET M0]---(找到空位)
                    [BREAK]---(跳出循环)
   [NEXT]

第十部分:课后作业

作业1:移位指令练习

设计以下控制系统:

  1. 8位二进制加法器(使用移位实现)

  2. 自动门控制(检测到人,灯依次亮起)

  3. 电梯楼层显示(上升时灯向上移动,下降时向下移动)

作业2:队列管理练习

设计一个订单处理系统:

  1. 最多存储50个订单(每个订单4个数据)

  2. 新订单从队尾加入

  3. 处理订单从队首取出

  4. 显示队列长度和等待时间

  5. 紧急订单可以插队

作业3:综合应用设计

设计一个自动化仓储系统:

  1. 10层货架,每层8个货位

  2. 使用移位指令管理货位状态

  3. 自动分配空货位给新货物

  4. 按先进先出原则取货

  5. 统计各层使用情况

  6. 货位异常报警

作业4:故障分析

分析以下程序可能的问题:

text
网络1:
   M8013          [SFTL M0 K8 K1]---

网络2:
   X0            [MOV K1 M0]---

网络3:
   M0    Y0
|---||---( )---
   M1    Y1
|---||---( )---
   ...(到M7)

学习总结

本课重点回顾:

  1. 位移位指令的原理和应用

  2. 字移位指令的使用方法

  3. 循环移位指令的特点

  4. 实际工程中的移位控制

关键技能掌握:

  1. 能够使用移位指令实现流水控制

  2. 能够设计数据队列管理系统

  3. 能够实现循环显示和控制

  4. 能够解决实际生产线的控制问题

常见错误避免:

  1. 移位范围设置错误

  2. 忘记补入数据

  3. 移位速度控制不当

  4. 循环移位方向错误

下节课预告

第八课:结构化编程入门

  • 标签编程基础

  • 功能块(FB)编程

  • 函数(FC)编程

  • 程序结构化设计

学习建议

  1. 多做移位控制实验

  2. 从简单流水灯到复杂生产线

  3. 注意移位速度和同步控制

  4. 重视数据队列管理实践

请认真完成本课的所有实践任务,准备好后可以开始第八课的学习。

祝您学习顺利!

下载资料前请先绑定手机号码
对不起,请登录后再发表评论!

触屏端
扫一扫手机也能发信息
明扬工控商城-工控网-工控自动化真品,一站式专业服务!