摘要:选中设备树节点“PLC逻辑”→“应用(Application)”,单击右键,在弹出的菜单中选择“添加对象”→“全局变量列表”,添加全局变量列表“GVL0”,在其中声明变量如下图所示:
上一篇文章介绍了队列指令,其特点是:数据先进先出。今天这篇文章来介绍下栈,其特点是:数据后进先出。
启动InoProShop,新建工程,采用AM522-0808TN控制器,名为为“demo”。
选中设备树节点“PLC逻辑”→“应用(Application)”,单击右键,在弹出的菜单中选择“添加对象”→“全局变量列表”,添加全局变量列表“GVL0”,在其中声明变量如下图所示:
其中:
arrStack:实数数组,用于存放栈数据;startPush:布尔型,入栈;pushRisingEdge:布尔型,入栈上升沿;pushRisingEdgeHF:布尔型,入栈上升沿辅助变量;startPop:布尔型,出栈;popRisingEdge:布尔型,出栈上升沿;popRisingEdgeHF:布尔型,出栈上升沿辅助变量;valueOut:实数,出栈的数据;右键单击“应用(Application)”,在弹出的菜单中选择“添加对象”→“程序组织单元”。在弹出的对话框中选择“功能块”,语言选择“结构化文本”,命名为“stack_test”,在其变量声明区声明变量如下图所示:
其中:
tmpValue:实数,为临时生成的随机数;statStackNum:无符号整数,为静态变量,表示栈中的数据量;在代码编辑器编写代码如下图所示:
其中:
为了防止数据被循环写入,使用了沿信号。包括入栈的上升沿和出栈的上升沿;StackPush指令用于将数据写入到栈中,In是要写入的数据,InOut是入栈数据的首地址。例程中arrStack[0]表示从数组的索引0开始写入数据。Size是数据的长度(以字节为单位),Num是栈中的数据数量(可读可写);StackLIFO指令将数据从栈中取出。“LIFO”是英文“Last In First Out”的缩写,表示后进的数据先取出。InOut是出栈数据的首地址,Size是数据长度(以字节为单位),Num是栈中的数据数量(可读可写);入栈数据的首地址与出栈数据的首地址最好相同。比如例程中都是arrStack[0]。我测试过,如果出栈数据的首地址写作arrStack[1],则第一次出栈的数据为0,第二次才能出栈顶的数据。arrStack[0]中的数据将丢失;指令列表中还提供了一个类似队列的出栈指令StackFIFO。“FIFO”是英文“Fisrt In First Out”的缩写,表示先进的数据先出。我们一般理解栈这种数据结构的特点是“数据后进先出”,所以一般使用StackLIFO指令;编写完成后在主程序中调用该函数,测试其功能,可正常实现数据的存入及取出,如下图所示:
好了,关于汇川AM系列控制器的栈指令就先介绍到这里。
来源:北岛李工