队列(FIFO)指令——基于汇川AM系列中型PLC的ST语言编程

360影视 动漫周边 2025-06-24 18:54 2

摘要:之前在西门子博途平台下我用SCL语言实现过队列指令(西门子SCL编程实例——队列的实现算法 | 北岛夜话),汇川AM系列(Codesys平台)PLC在其扩展指令中集成了队列指令,直接使用就好。今天这篇文章就来介绍下该指令的用法。

之前在西门子博途平台下我用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的队列指令就先介绍到这里。

来源:北岛李工

相关推荐