队列(FIFO)指令——基于汇川AM系列中型PLC的ST语言编程
发布时间:2025-06-24 18:54 浏览量:2
之前在西门子博途平台下我用SCL语言实现过队列指令(西门子SCL编程实例——队列的实现算法 | 北岛夜话),汇川AM系列(Codesys平台)PLC在其扩展指令中集成了队列指令,直接使用就好。今天这篇文章就来介绍下该指令的用法。
启动InoProShop,单击工具栏“文件”→“新建工程”,选择设备“AM522-0808TN”,创建示例(demo)工程。
选中设备树节点“PLC逻辑”→“应用(Application)”,单击右键,在弹出的菜单中选择“添加对象”→“全局变量列表”,添加全局变量列表“GVL0”,在其中声明变量如下图所示:
为了知识介绍的全面性,重新添加一个全局变量列表,命名为“GVL_M”,在其中创建变量使用PLC的位存储区(M区),如下图所示:
同样右键单击“应用(Application)”,在弹出的菜单中选择“添加对象”→“程序组织单元”。在弹出的对话框中选择“功能块”,语言选择“结构化文本”,命名为“FIFO_test”,如下图所示:
单击“打开”将其添加到项目中。
该指令有9个输入参数和5个输出参数,其中:
①输入参数:
xInit:布尔型,初始化队列,开辟内存空间;uiSizeFifo:无符号整数(UINT)。指定队列占用的内存大小,以字节为单位。建议不大于1024;xPush:布尔型,上升沿触发入队动作;uiSizePush:无符号整数(UINT),指定入队数据的大小,以字节为单位;pbyDataPush:指向入队数据的指针(POINTER TO);xPop:布尔型,上升沿触发出队动作;uiSizePop:无符号整数(UINT),指定出队数据的大小,以字节为单位;pbyDataPop:指向出队数据的指针(POINTER TO);xClear:布尔型,上升沿触发清空队列动作;②输出参数:
xInitDone:布尔值,若初始化完成,该值为真并保持一个扫描周期;xPushDone:布尔值,若入队完成,该值为真并保持一个扫描周期;xPopDone:布尔值,若出队完成,该值为真并保持一个扫描周期;xClearDone:布尔值,若清空完成,该值为真并保持一个扫描周期;xEmpty:布尔值,若为真则意味着队列已空;在函数FIFO_test的变量声明区声明变量如下图所示:
其中:
这里使用了上一篇文章介绍的随机数函数,初始化使用了第一个扫描周期变量(First_Scan),ADR指令获取数据的指针(地址)。
在主程序块中调用测试函数,如下图所示:
下载程序到控制器,模拟入队、出队动作,可正常完成,如下图所示:
好了,关于汇川AM系列PLC的队列指令就先介绍到这里。