北岛夜话
原创工业智能控制领域(PLC、单片机/嵌入式、机器人、通信、机器视觉)的技术及经验分享。
文章555 浏览9174327

队列(FIFO)指令——基于汇川AM系列控制器的结构化文本语言编程

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

cover.png启动InoProShop,单击工具栏“文件”→“新建工程,选择设备“AM522-0808TN”,创建示例(demo)工程。

选中设备树节点“PLC逻辑”→“应用(Application)”,单击右键,在弹出的菜单中选择“添加对象”→“全局变量列表”,添加全局变量列表“GVL0”,在其中声明变量如下图所示:

1.png

为了知识介绍的全面性,重新添加一个全局变量列表,命名为“GVL_M”,在其中创建变量使用PLC的位存储区(M区),如下图所示:

2.png

同样右键单击“应用(Application)”,在弹出的菜单中选择“添加对象”→“程序组织单元”。在弹出的对话框中选择“功能块”,语言选择“结构化文本”,命名为“FIFO_test”,如下图所示:


3.png

单击“打开”将其添加到项目中。

单击右侧工具箱“扩展指令”→“队列”,将“FIFO”拖放到程序“FIFO_test”中,如下图所示:

4.png

该指令有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的变量声明区声明变量如下图所示:

5.png

其中:

  • tmpValuePush和tmpValuePop分别是入队和出队的临时数据,数据类型为实数(real),其字节长度为4;

  • ptPush和ptPop是指向入队和出队数据的指针,其类型为“POINTER TO REAL”;

  • 声明常量“FOUR_BYTES”的值为4(表示4个字节);

在代码编辑区编写代码如下图所示:

6.png

这里使用了上一篇文章介绍的随机数函数,初始化使用了第一个扫描周期变量(First_Scan),ADR指令获取数据的指针(地址)。

在主程序块中调用测试函数,如下图所示:

7.png

下载程序到控制器,模拟入队、出队动作,可正常完成,如下图所示:

8.png

好了,关于汇川AM系列PLC的队列指令就先介绍到这里。

我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:

取消

感谢您的支持,欢迎常来看看!

扫码支持
一点动力,多少随意

打开支付宝扫一扫,即可进行扫码打赏哦

发表评论