技术论坛

分享西门子堆栈的问题

作者 主题
游民

经验值: 63
发帖数: 3
精华帖: 0
主题:【分享】分享西门子堆栈的问题
推荐帖


只看楼主 楼主 2021-02-21 14:55:34

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


最佳答案

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

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

   


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1681863&b_id=50&s_id=0&num=13

至圣

经验值: 127351
发帖数: 22001
精华帖: 824
回复:分享西门子堆栈的问题
推荐帖


只看楼主 1楼 2021-02-21 16:05:07

这是自己写的先进先出FiFo(不是堆栈后进先出哦)。很直观的呀。

TOP是被“顶出”的,数组元素 0的数据。

如果是8个数据,按序数据是放在元素 0-7中的。

不这么写,还能怎么写?

实际上,堆栈不用这么写的。

堆栈直接用指针,放入指针+1,取出指针-1,直到取光 指针=0;


学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 16421
发帖数: 2400
精华帖: 0
回复:分享西门子堆栈的问题


只看楼主 2楼 2021-02-21 17:09:45

谢谢楼上的分享


开心每一天,懂得包容、感恩!
以下网友喜欢您的帖子:

  
至圣

经验值: 127351
发帖数: 22001
精华帖: 824
回复:分享西门子堆栈的问题
推荐帖


只看楼主 3楼 2021-02-21 20:25:27

堆栈也好,FIFO也好,实际上是不要用楼主图片那种写法的!

那种写法是直观性的、给初学者作表述用的。

真实,高效的写法只是操作指针(Index),没有移动数据一说,也没有清除旧数据一说。

自己写一个吧。

写一个FB,既可以用于先进先出,也可以用于后进先出。同时,还有指针指向数据中的MAX,MIN。全部用指针操作。

练练手!



学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
至圣

经验值: 18410
发帖数: 2409
精华帖: 1
回复:分享西门子堆栈的问题


只看楼主 4楼 2021-02-24 12:17:26

感谢分享方法


 
以下网友喜欢您的帖子:

  
至圣

经验值: 18914
发帖数: 2108
精华帖: 0
回复:分享西门子堆栈的问题


只看楼主 5楼 2021-02-24 13:50:34
以下是引用yming在2021-02-21 20:25:27的发言 >3楼

堆栈也好,FIFO也好,实际上是不要用楼主图片那种写法的!

那种写法是直观性的、给初学者作表述用的。

真实,高效的写法只是操作指针(Index),没有移动数据一说,也没有清除旧数据一说。

自己写一个吧。

写一个FB,既可以用于先进先出,也可以用于后进先出。同时,还有指针指向数据中的MAX,MIN。全部用指针操作。

练练手!


高手说的不错


 
以下网友喜欢您的帖子:

  
至圣

经验值: 127351
发帖数: 22001
精华帖: 824
回复:分享西门子堆栈的问题


只看楼主 7楼 2021-02-27 15:16:45
以下是引用手机用户20190429403175在2021-02-21 14:55:34的发言 >楼主

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


最佳答案

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

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

   

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

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

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

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

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

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

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

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

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

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

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




学而时习之,不亦说乎?温故而知新,不亦乐乎?
以下网友喜欢您的帖子:

  
奇侠

经验值: 5689
发帖数: 767
精华帖: 1
回复:分享西门子堆栈的问题


只看楼主 8楼 2021-02-28 20:38:00


学习了,长知识了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 10582
发帖数: 1796
精华帖: 0
回复:分享西门子堆栈的问题


只看楼主 9楼 2021-02-28 20:41:25

谢谢分享,长知识了。


 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7133
发帖数: 1022
精华帖: 2
回复:分享西门子堆栈的问题


只看楼主 10楼 2021-03-01 09:05:35

用指针方便快捷,7楼Y版的方法挺好的


心有多远路就有多远
以下网友喜欢您的帖子:

  
侠客

经验值: 702
发帖数: 73
精华帖: 2
回复:分享西门子堆栈的问题


只看楼主 11楼 2021-03-09 08:19:49


,涨知识了,正准备好好学习SCL,有些功能比梯形图方便


一切源于梦想
以下网友喜欢您的帖子:

  
游民

经验值: 110
发帖数: 21
精华帖: 0
回复:分享西门子堆栈的问题


只看楼主 12楼 2021-04-05 14:28:37

这都不会,你还学个屁啊


 
以下网友喜欢您的帖子:

  
至圣

经验值: 15532
发帖数: 1735
精华帖: 0
回复:分享西门子堆栈的问题


只看楼主 14楼 2021-04-06 08:34:49

 谢谢分享,给力!







海纳百川,厚德务实!
以下网友喜欢您的帖子:

  
至圣

经验值: 19284
发帖数: 3867
精华帖: 1
回复:分享西门子堆栈的问题


只看楼主 15楼 2021-04-06 10:08:54

用数组不是更好用吗?


弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
分享西门子堆栈的问题
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。