西门子S7-1200实现先进先出(FIFO)循环存储

目录

一、使用数组存储,通过更改存入和取出的索引实现     

使用LAD语言&SCL语言组合实现

1、新建函数块(FB块)

2 、基础变量声明

3、开始写程序

4、完整程序 

 END


一、使用数组存储,通过更改存入和取出的索引实现     

使用LAD语言&SCL语言组合实现

        相对于SCL,使用LAD语言的使用更加的普遍,但是LAD又有它的局限性,因此这里使用LAD和SCL相结合的方式实现这个需求,可以让熟悉LAD语言的工程师更好的理解实现思路。

1、新建函数块(FB块)

                       名称:循环存储(FIFO)

                       语言:LAD                       ​​  ​​      

26efafdf08314b16ad5547c3b4ff64de.png

创建函数块

2 、基础变量声明

        在“循环存储(FIFO)”中声明所需要的基础变量,程序中使用的变量在编写过程中根据需要进行声明即可。

2f89e6f22f99431d9a0e934496780cfc.png

声明基础变量

3、开始写程序

1、写入数据

 1.1 声明变量“写入使能_上升沿存储”8d4c910d1c3b47eba1b68f1967c30322.png

1.2 使用 “CMP<>” 指令先看 “#写入数据” 是否不为空(我们把16#00视为空),满足条件后在 “#写入使能” 的上升沿使用 “MOVE” 指令将 “#写入数据” 的值移动到 “#存储数组[#写入索引]”。数据写入完成后,使用“ADD”加法指令,将 “#写入索引” +1,为下一次写入做准备。

d63d45c13ff6417f93dd3499cd7aaa79.png

写入程序标题

  

2、使用“CMP>”指令,当“#写入索引” 大于“#存储数组”的最大索引时将“#写入索引”重置为“0”,下一次写入数据时将从“#存储数组”的第一个元素开始写入;我们前面声明的数据组最高索引为99,所以这里“CMP>”的 “操作数2 ” 是“99”;

48daedeb28a74d0abe75efb3dbf8d800.png

复位写入索引

3、读取数据

3.1 声明变量“#读取使能_上升沿存储” 

87ba4f98633448449bf9797912c0378d.png

标题声明变量“#读取使能_上升沿存储” 

3.2 在 “#读取使能” 的上升沿,使用 “CMP<>” 指令先看 “#存储数组[#读取索引]”的值是否不为空,满足条件后使用“MOVE”指令,将“#存储数组[#读取索引]”的值移动到“#读取数据”,数据读取完成后,使用“ADD”加法指令,将 “#读取索引” +1,为下一次读取做准备。

c2a0d060e36e472d8dd31ddcfc728efa.png

读取数据

4、使用“CMP>”指令,当“#读取索引” 大于“#存储数组”的最大索引时将“#读取索引”重置为“0”,下一次写入数据时将从“#存储数组”的第一个元素开始写入;我们前面声明的数据组最高索引为99,所以这里“CMP>”的 “操作数2 ” 是“99”;

dad6275f0623498cae6d4c1fe400b894.png

复位读取索引

5、 复位索引和清空数组

5.1 声明变量:

                  复位和清空_上升沿存储
                  复位和清空_FOR起始值
                  复位存储数组的索引值

7bcbb7dda2bd4e0fa2fa96b3b8c6b9ea.png

声明变量

 5.2 插入SCL程序段,在复位数组的过程中使用 “FOR” 效率更高,因此这里我们使用SCL语言;

3364b52b5f5f4e6396b5bb84b96152ae.png

插入SCL程序段

 5.3 使用 “P_TRIG” 指令获取 #复位和清空 信号的上升沿,“P_TRIG”放到程序段中,调用函数选择多重实例

7cb88b1c45fe4d58aa61ffb1ffda3fed.png

P_TRIG 调用函数“多重实例”

5.4 使用“IF”指令,当 “#复位和清空_上升沿存储” 为“1”时,将“ #写入索引、 #读取索引、#复位存储数组的索引值” 的值赋为“0”,然后通过遍历的方式将“#存储数组”所有元素赋值为“16#00”. 

db018bd62210404dbe9c5cf232b65921.png

复位和清空程序

4、完整程序 

1、变量表

caf488cbc6ba4f858dd0038cafe4f9e3.png

变量表

 2、程序

06f74270979a4032ade5ab7d7883b365.png 7fbc4a33d54c4f05bac04efc3e0c759b.png

 END

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值