恭喜,你发布的帖子
发布于 2021-02-27 15:16:45
7楼
想实现西门子的堆栈功能,即收到某一位信号上升沿时,将某一具体值放入堆栈中,同时将堆栈中最顶层的数据拿出来存入另一个存储器,实现先进后出的循环排队输出功能,求各位大神帮忙!!
最佳答案
这个用SCL语言实现起来比较简单。主要是把思路理清楚。
题目要求是有请求时,存一个取一个。
思路:
根据当前队列缓存区元素数目,将具体指放入队列尾部,当前数目加1,然后将头部元素取出,剩余元素依次向前移动一个,当前数目减1,完成操作。具体可见附图
在论坛上看见有人提问,有个大神这样回答他的提问,但是我看了一下,我不能理解,看不明白,scl语言我是看的懂得,但是这个我看不懂别人这样写的意图,求大神一起交流和分享下
我只能简单告诉你一下思路:
FIFO通常可以用于工序间的工件资料数据存储,
毫无疑问,栈的容量是有限的(数组大小)。但栈中数量不定。
入栈需要一个指针(数组的角标)
出栈需要一个指针(数组的角标)
指针的类型是固定的(INT);而数组元素数据类型根据应用需要。
入栈出栈不一定是同时的,所以要有操作标志。入栈就是操作入栈指针;出栈就是操作出栈指针。
因为指针就是一种数据类型,当然就是写个入栈出栈指针操作的FC。
被操作的数据块中数组的数据类型可以是多种,以适应不同的工艺要求(各种工件标签)
同时DB要保存这两个指针。当两个指针相同时,就是空栈。满栈判断法自己算吧。
很明显,(如果你熟悉Variant )数据块的传递最好是用Variant,以适应不同的数据类型。
请填写推广理由:
分享
只看
楼主