什么是位移位?
将一组位数据向左或向右移动
常用于顺序控制、流水线控制
可以实现数据队列、先进先出等
位与位的对应关系:
M0-M15:16个位组成一个字
位组合元件:KnX、KnY、KnM、KnS
例如:K4M0表示M0-M15(16位)
SFTL指令(位左移):
指令格式:[SFTL D n1 n2] D:起始位元件 n1:位移位数(总位数) n2:每次移动位数 功能:将D开始的n1个位左移n2位 高位移出,低位补入的数据由指令前的条件决定
SFTR指令(位右移):
指令格式:[SFTR D n1 n2] 功能:将D开始的n1个位右移n2位 低位移出,高位补入的数据由指令前的条件决定
示例1:流水灯控制(单灯移动)
M8000(运行标志) |---||--------[SFTL M0 K8 K1]--- 输入条件 |---||--------(此处控制最低位补入的数据) M0 Y0 |---||---( )--- M1 Y1 |---||---( )--- M2 Y2 |---||---( )--- M3 Y3 |---||---( )--- M4 Y4 |---||---( )--- M5 Y5 |---||---( )--- M6 Y6 |---||---( )--- M7 Y7 |---||---( )---
初始化和控制:
网络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:物料分拣控制
假设:8个工位,X0-X7检测物料 要求:检测到物料时,对应位置的机械手动作 网络1:物料检测移位 M8000 [SFTR M100 K8 K1]--- X0(物料检测) [MOV K1 M107]---(检测到物料,放到最高位) 网络2:机械手控制 M100 Y0(1号机械手) |---||---( )--- M101 Y1(2号机械手) |---||---( )--- ...(其他工位类似) M107 Y7(8号机械手) |---||---( )---
示例3:先进先出队列
要求:8个存储位置,新数据从右侧进入,旧数据从左侧移出 网络1:数据输入 X0(新数据) [SFTR M0 K8 K1]--- X0 [MOV D0 M7]---(新数据放到最低位) 网络2:数据输出 M0(最旧数据) [MOV M0 D10]---(读取最旧数据)
示例4:可逆流水灯
网络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]---
字移位特点:
以字(16位)为单位移动
适合批量数据处理
常用于数据缓冲、数据队列
WSFL指令(字左移):
指令格式:[WSFL D n1 n2] D:起始字元件 n1:移位的字数 n2:每次移动字数 功能:将D开始的n1个字左移n2字
WSFR指令(字右移):
指令格式:[WSFR D n1 n2] 功能:将D开始的n1个字右移n2字
示例5:数据采集缓冲区
要求:采集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:配方存储管理
要求:存储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)
循环移位特点:
数据首尾相连形成环
移出的数据从另一端进入
适合循环显示、循环控制
ROL指令(循环左移):
指令格式:[ROL D n] D:目标元件(16位或32位) n:移动位数 功能:将D的数据循环左移n位
ROR指令(循环右移):
指令格式:[ROR D n] 功能:将D的数据循环右移n位
示例7:循环显示控制
网络1:循环左移显示 M8013(1秒脉冲) [ROL K4M0 K1]--- 网络2:输出控制 M0-M15对应Y0-Y15的输出 (可以通过MOV指令传送到输出) 网络3:初始状态设置 M8002(初始脉冲) [MOV H0001 K4M0]---(初始只有M0=1)
示例8:多状态循环控制
要求: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 |---|/|--- (其他互锁类似)
示例9:自动化装配线
要求: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]--- ...(其他完成信号)
示例10:实时数据队列
要求:实时采集数据,存储最近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
|---||---( )---
设计要求:
8个指示灯Y0-Y7
三种模式:
模式1:单灯从左向右移动
模式2:单灯从右向左移动
模式3:双灯对称移动
移动速度可调(D0存储时间,单位0.1秒)
X0模式选择,X1启动/停止,X2速度增加,X3速度减少
设计要求:
10个工位的流水线
X0-X9检测物料类型(0为良品,1为不良品)
检测信号移位存储到M0-M9
不良品到达第5工位时(M4=1),Y10推出
良品到达第8工位时(M7=1),Y11打包
统计良品数(C0)和不良品数(C1)
设计要求:
建立100个数据缓冲队列
X0触发数据写入,将D0写入缓冲区
X1触发数据读取,从缓冲区读取到D1
显示缓冲区当前数据数量
缓冲区满时停止写入(Y0报警)
缓冲区空时停止读取(Y1报警)
可以清除缓冲区(X2)
解答:
n1:移位的总位数或字数
对于位元件:n1 ≤ 位数
对于字元件:n1 ≤ 可用字数
n2:每次移动的位数或字数
n2 ≤ n1
通常n2=1,表示逐个移动
注意事项:
确保D+n1-1不超出元件范围
n2过大可能导致数据丢失
移动后,空出的位置需要手动补数据
解决方案:
使用条件控制移位指令执行
使用中间标志位
保存当前状态,暂停时保持
示例:
M10(运行允许) M8013(时钟) |---||---||---[SFTL M0 K8 K1]---
解决方法:
使用定时器控制移位频率
使用低速时钟脉冲(M8011-M8014)
使用计数器分频
示例:定时器控制速度
T0 K10(时间可调) |---||----------[TON]--- T0 [SFTL M0 K8 K1]---
SFTL M0 K8 K1指令的功能是什么?
A) 将M0-M7右移1位
B) 将M0-M7左移1位
C) 将M0循环左移1位
D) 将M0-M15左移1位
WSFL指令的单位是什么?
A) 位
B) 字节
C) 字
D) 双字
ROL指令的特点是什么?
A) 高位丢失,低位补0
B) 低位丢失,高位补0
C) 循环移动,数据不丢失
D) 数据反向
移位指令执行后,空出的位置自动补0。( )
WSFL指令可以用于批量数据处理。( )
循环移位指令适合流水灯控制。( )
设计一个停车场车位显示系统:
要求:
停车场有16个车位
入口传感器X0,出口传感器X1
车位状态用M0-M15表示(1有车,0空位)
车辆进入时(X0),寻找第一个空位(M=0),将其置1
车辆离开时(X1),从最后开始查找有车位(M=1),将其清0
显示当前空位数(D0)
车位满时,入口红灯Y0亮
车位空时,出口绿灯Y1亮
选择题答案:
B 2. C 3. C
判断题答案:
错(需要手动补数据) 2. 对 3. 对
编程题参考程序:
网络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]
设计以下控制系统:
8位二进制加法器(使用移位实现)
自动门控制(检测到人,灯依次亮起)
电梯楼层显示(上升时灯向上移动,下降时向下移动)
设计一个订单处理系统:
最多存储50个订单(每个订单4个数据)
新订单从队尾加入
处理订单从队首取出
显示队列长度和等待时间
紧急订单可以插队
设计一个自动化仓储系统:
10层货架,每层8个货位
使用移位指令管理货位状态
自动分配空货位给新货物
按先进先出原则取货
统计各层使用情况
货位异常报警
分析以下程序可能的问题:
网络1: M8013 [SFTL M0 K8 K1]--- 网络2: X0 [MOV K1 M0]--- 网络3: M0 Y0 |---||---( )--- M1 Y1 |---||---( )--- ...(到M7)
位移位指令的原理和应用
字移位指令的使用方法
循环移位指令的特点
实际工程中的移位控制
能够使用移位指令实现流水控制
能够设计数据队列管理系统
能够实现循环显示和控制
能够解决实际生产线的控制问题
移位范围设置错误
忘记补入数据
移位速度控制不当
循环移位方向错误
第八课:结构化编程入门
标签编程基础
功能块(FB)编程
函数(FC)编程
程序结构化设计
多做移位控制实验
从简单流水灯到复杂生产线
注意移位速度和同步控制
重视数据队列管理实践
请认真完成本课的所有实践任务,准备好后可以开始第八课的学习。
祝您学习顺利!