启动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语言的编程,感兴趣的话可以扫描下面的二维码查看:
发表评论