回复:分享西门子堆栈的问题

已锁定

yming

西门子1847工业学习平台

  • 帖子

    23259
  • 精华

    882
  • 被关注

    1260

论坛等级:至圣

注册时间:2004-03-06

钻石 钻石 如何晋级?

发布于 2021-02-27 15:16:45

7楼

展开查看
以下是引用手机用户20190429403175在2021-02-21 14:55:34的发言 >楼主

想实现西门子的堆栈功能,即收到某一位信号上升沿时,将某一具体值放入堆栈中,同时将堆栈中最顶层的数据拿出来存入另一个存储器,实现先进后出的循环排队输出功能,求各位大神帮忙!!


最佳答案

这个用SCL语言实现起来比较简单。主要是把思路理清楚。
题目要求是有请求时,存一个取一个。
思路:
根据当前队列缓存区元素数目,将具体指放入队列尾部,当前数目加1,然后将头部元素取出,剩余元素依次向前移动一个,当前数目减1,完成操作。具体可见附图

在论坛上看见有人提问,有个大神这样回答他的提问,但是我看了一下,我不能理解,看不明白,scl语言我是看的懂得,但是这个我看不懂别人这样写的意图,求大神一起交流和分享下

   

我只能简单告诉你一下思路:

FIFO通常可以用于工序间的工件资料数据存储,

毫无疑问,栈的容量是有限的(数组大小)。但栈中数量不定。

入栈需要一个指针(数组的角标)

出栈需要一个指针(数组的角标)

指针的类型是固定的(INT);而数组元素数据类型根据应用需要。

入栈出栈不一定是同时的,所以要有操作标志。入栈就是操作入栈指针;出栈就是操作出栈指针。

因为指针就是一种数据类型,当然就是写个入栈出栈指针操作的FC。

被操作的数据块中数组的数据类型可以是多种,以适应不同的工艺要求(各种工件标签)

同时DB要保存这两个指针。当两个指针相同时,就是空栈。满栈判断法自己算吧。

很明显,(如果你熟悉Variant )数据块的传递最好是用Variant,以适应不同的数据类型。



学而时习之,不亦说乎?温故而知新,不亦乐乎?
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15376条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。