醋醋百科网

Good Luck To You!

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

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

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

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

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

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

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

单击右侧工具箱“扩展指令”→“队列”,将“FIFO”拖放到程序“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的变量声明区声明变量如下图所示:

其中:

  • tmpValuePush和tmpValuePop分别是入队和出队的临时数据,数据类型为实数(real),其字节长度为4;
  • ptPush和ptPop是指向入队和出队数据的指针,其类型为“POINTER TO REAL”;
  • 声明常量“FOUR_BYTES”的值为4(表示4个字节);

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

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

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

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

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

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

<script type="text/javascript" src="//mp.toutiao.com/mp/agw/mass_profit/pc_product_promotions_js?item_id=7519466233796756022"></script>
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言