彩灯的PLC控制
从数据传送到移位控制,系统掌握彩灯的PLC编程全流程
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
彩灯的PLC控制
从数据传送到移位控制,系统掌握彩灯的PLC编程全流程
PLC数据存储区
上页我们用Y0~Y7直接点亮彩灯,但花样程序不会原地踏步——它要记住'现在跑到第几种了'。这个'记数'的地方,就是PLC的数据存储区。
位元件=只能放1封信的小格;字元件D=能装整个包裹的大格,内含16个小夹层
数据寻址方式
上页认识了 I、Q、M 这些"储物柜"。CPU 怎么精确定位某一格?这就要谈寻址方式。
直接报门牌号 vs 先问指针,指针再报门牌号
MOV指令格式与功能
我们已经知道怎么用地址找到 PLC 里的数据,但光找到还不够——彩灯花样要靠寄存器里的初值不断变化,这就需要把数据"搬"过去。MOV 就是干这件事的最基本指令。
传送带只往一个方向走,到目标工位就放下,原工位零件原封不动
MOV指令编程实例
用MOV给数据寄存器D赋不同数值,二进制位模式直接决定哪些彩灯亮起。
MOV 把一个数值(K 表示十进制、H 表示十六进制)写入数据寄存器 D;数值的二进制位模式直接决定 8 盏彩灯的亮灭。
MOV指令执行时序
沿扫描周期看MOV在哪个阶段被读到、源/目标何时被访问、输出何时落点
块传送指令BMOV
上一页MOV一次只能搬一个数据。彩灯的16盏灯若用花样表驱动,写16条MOV既冗长又难维护——块传送BMOV让你一条指令搬一整块连续数据。
MOV是把1本书从A架搬到B架;BMOV是把A架起连续n本整排搬到B架,位置一一对应
块设置指令FMOV
BMOV 是把一整排数据「搬」过去;如果只想把同一个值灌进一排连续单元,就轮到 FMOV 了。彩灯场景里,常常需要一次性把'全灭'或'全亮'写入一组灯寄存器。
一支笔=源 S,一排灯笼=D 起的 n 个单元,每盏都被涂上相同颜色
MOV/BMOV/FMOV对比
MOV搬一个,BMOV搬一堆不同的数,FMOV用一个数铺满一片——三件事最容易混。
- 把N个连续数据原样复制到目标区
- 源与目标按顺序逐字对应
- 典型:搬运整段彩灯状态字
- 等价于连续N条MOV指令
- 把同一个值写入N个连续目标字
- 源仅1个字,目标区被批量覆盖
- 典型:批量清零、批量置位
- 等价于对同一源连续N条MOV
移位寄存器指令SFT
彩灯想依次流水般闪过,MOV每次只能搬一个数据到固定位置。要让'1'沿位串自动后移,就需要SFT——每收到一个脉冲就把'1'推进一步,像传送带一样。
每节拍传送带前进一格=数据后移一格;末端包裹掉落=最高位溢出;新包裹放入起点=新值进入D[0]
SFT移位过程示意
每个移位脉冲触发一次逐位移动:新位从一端进入,旧位从另一端溢出。
可逆移位寄存器SFTR
SFT像一列只向一个方向传递的彩灯;灯走到终点后要原路返回,就得切换方向。SFTR按位右移,再与SFTL配合,即可组成往复流水灯。
右入口补入时,队列整体右移、左端溢出;反向入口配对SFTL,队列便反向移动。
SFTR双向移位时序
纵向读SFTR双向时序:触发→移位→状态→换向,四环节分列展示。
字移位指令WSFT
前面讲的 SFT 是把一个个位往前推。如果想让一整组数据(比如 D0~D5 里的温度值)整体挪一格,就需要用字移位指令 WSFT。
每个箱子是完整一件货物,整箱推进一格,新箱子补入,末位箱子掉出
算术左右移指令
WSFT 让字整块搬家,搬的是字与字之间的次序。这页降到字内部——ASL 和 ASR 两个算术移位指令,专做有符号数的位平移,核心问题是:右移时符号位该怎么补?
队尾士兵离队进CF;队首将军位置不能空就复制自己填进新空位,所以将军一直在,正负性不变
逻辑移位 vs 算术移位
逻辑移位和算术移位都叫移位,但对无符号和有符号数的处理截然不同。选错模式,符号位会被悄悄破坏。
- 左右移位空位一律补 0
- 适用无符号数(BIN / HEX)
- 右移等价于无符号数除以 2ⁿ
- 左移等价于乘以 2ⁿ,高位溢出丢弃
- 左移补 0;右移补符号位(最高位)
- 适用有符号数(补码表示)
- 右移保持正负号,等价于带符号除以 2ⁿ
- 左移同逻辑,但溢出可能改变正负
循环左右移指令ROL/ROR
上页算术移位把溢出的位丢掉,但ROL/ROR不一样——被挤出的位不消失,而是绕回首端。一圈转完,所有位都还在。
亮的LED就是1,每移一次就转一格,转一圈又回到原位
数字左右移指令SLD/SRD
算术/逻辑移位都是按 1 bit 挪数据,但 BCD 数里一个十进制位就是 4 bit。SLD/SRD 就是按 4 bit 整体搬动的指令,特别适合数码管扫描显示。
里程表每位是独立齿轮但联动翻转——SLD/SRD 把 4 bit 视为一个十进制位一起搬
四种移位指令对比
SFT处理位,WSFT/SLD/ROL处理字;单位选错彩灯就乱码。
- 操作单个位 X/Y/M/S
- 移出位进溢出位M8021
- 简单流水灯、≤16步序列
- 需配SFTR才能反向移位
- 操作整个16位字 D
- 字整体丢/循环/位级丢
- 多组彩灯并行、数据队列
- 子指令分工见下方裁决
彩灯控制系统设计流程
从控制要求到稳定运行的彩灯系统,要依次走完四步,前一步的输出就是后一步的输入。
彩灯控制系统程序
一段完整程序:用MOV装花样表,BMOV批量复制,再配合SFT/ROL做移位动画
MOV装花样表、BMOV批量复制,再配合SFT做位流水、ROL做字旋转,三者组合实现多花样彩灯切换
彩灯花样时序图
时序图从上往下读:四列分别是主控与三种花样模式,主控按时间节点发出切换信号,模式内部呈现不同灯序变化。
核心知识点自测
对16位数据执行右移1位操作时,逻辑右移指令与算术右移指令的核心区别在于什么?
课后思考
先自己想,再看参考答案,带着问题走出课堂。
参考答案PLC采用循环扫描,SFT每次执行只移一次,扫描周期内结果固定,因此移位速度受扫描周期限制。
参考答案WSFT更方便。WSFT以字为单位移动,16盏=1个字可一次移完;SFTR按位操作需配置16位,步骤更繁琐。
参考答案高速场合MOV受扫描执行方式限制可能成为瓶颈。需用中断、立即刷新指令或高速I/O模块绕过周期限制。