目录
一、使用数组存储,通过更改存入和取出的索引实现
使用LAD语言&SCL语言组合实现
1、新建函数块(FB块)
2 、基础变量声明
3、开始写程序
4、完整程序
END
一、使用数组存储,通过更改存入和取出的索引实现
使用LAD语言&SCL语言组合实现
相对于SCL,使用LAD语言的使用更加的普遍,但是LAD又有它的局限性,因此这里使用LAD和SCL相结合的方式实现这个需求,可以让熟悉LAD语言的工程师更好的理解实现思路。
1、新建函数块(FB块)
名称:循环存储(FIFO)
语言:LAD
创建函数块
2 、基础变量声明
在“循环存储(FIFO)”中声明所需要的基础变量,程序中使用的变量在编写过程中根据需要进行声明即可。
声明基础变量
3、开始写程序
1、写入数据
1.1 声明变量“写入使能_上升沿存储”
1.2 使用 “CMP<>” 指令先看 “#写入数据” 是否不为空(我们把16#00视为空),满足条件后在 “#写入使能” 的上升沿使用 “MOVE” 指令将 “#写入数据” 的值移动到 “#存储数组[#写入索引]”。数据写入完成后,使用“ADD”加法指令,将 “#写入索引” +1,为下一次写入做准备。
写入程序标题
2、使用“CMP>”指令,当“#写入索引” 大于“#存储数组”的最大索引时将“#写入索引”重置为“0”,下一次写入数据时将从“#存储数组”的第一个元素开始写入;我们前面声明的数据组最高索引为99,所以这里“CMP>”的 “操作数2 ” 是“99”;
复位写入索引
3、读取数据
3.1 声明变量“#读取使能_上升沿存储”
标题声明变量“#读取使能_上升沿存储”
3.2 在 “#读取使能” 的上升沿,使用 “CMP<>” 指令先看 “#存储数组[#读取索引]”的值是否不为空,满足条件后使用“MOVE”指令,将“#存储数组[#读取索引]”的值移动到“#读取数据”,数据读取完成后,使用“ADD”加法指令,将 “#读取索引” +1,为下一次读取做准备。
读取数据
4、使用“CMP>”指令,当“#读取索引” 大于“#存储数组”的最大索引时将“#读取索引”重置为“0”,下一次写入数据时将从“#存储数组”的第一个元素开始写入;我们前面声明的数据组最高索引为99,所以这里“CMP>”的 “操作数2 ” 是“99”;
复位读取索引
5、 复位索引和清空数组
5.1 声明变量:
复位和清空_上升沿存储
复位和清空_FOR起始值
复位存储数组的索引值
声明变量
5.2 插入SCL程序段,在复位数组的过程中使用 “FOR” 效率更高,因此这里我们使用SCL语言;
插入SCL程序段
5.3 使用 “P_TRIG” 指令获取 #复位和清空 信号的上升沿,“P_TRIG”放到程序段中,调用函数选择多重实例
P_TRIG 调用函数“多重实例”
5.4 使用“IF”指令,当 “#复位和清空_上升沿存储” 为“1”时,将“ #写入索引、 #读取索引、#复位存储数组的索引值” 的值赋为“0”,然后通过遍历的方式将“#存储数组”所有元素赋值为“16#00”.
复位和清空程序
4、完整程序
1、变量表
变量表
2、程序
END