签到有奖
消息提醒
运维工程师专区
官方商城
扫码分享好友 任选多种周边
想实现西门子的堆栈功能,即收到某一位信号上升沿时,将某一具体值放入堆栈中,同时将堆栈中最顶层的数据拿出来存入另一个存储器,实现先进后出的循环排队输出功能,求各位大神帮忙!!
最佳答案
这个用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
这是自己写的先进先出FiFo(不是堆栈后进先出哦)。很直观的呀。
TOP是被“顶出”的,数组元素 0的数据。
如果是8个数据,按序数据是放在元素 0-7中的。
不这么写,还能怎么写?
实际上,堆栈不用这么写的。
堆栈直接用指针,放入指针+1,取出指针-1,直到取光 指针=0;
谢谢楼上的分享
堆栈也好,FIFO也好,实际上是不要用楼主图片那种写法的!
那种写法是直观性的、给初学者作表述用的。
真实,高效的写法只是操作指针(Index),没有移动数据一说,也没有清除旧数据一说。
自己写一个吧。
写一个FB,既可以用于先进先出,也可以用于后进先出。同时,还有指针指向数据中的MAX,MIN。全部用指针操作。
练练手!
感谢分享方法
高手说的不错
我只能简单告诉你一下思路:
FIFO通常可以用于工序间的工件资料数据存储,
毫无疑问,栈的容量是有限的(数组大小)。但栈中数量不定。
入栈需要一个指针(数组的角标)
出栈需要一个指针(数组的角标)
指针的类型是固定的(INT);而数组元素数据类型根据应用需要。
入栈出栈不一定是同时的,所以要有操作标志。入栈就是操作入栈指针;出栈就是操作出栈指针。
因为指针就是一种数据类型,当然就是写个入栈出栈指针操作的FC。
被操作的数据块中数组的数据类型可以是多种,以适应不同的工艺要求(各种工件标签)
同时DB要保存这两个指针。当两个指针相同时,就是空栈。满栈判断法自己算吧。
很明显,(如果你熟悉Variant )数据块的传递最好是用Variant,以适应不同的数据类型。
学习了,长知识了。
谢谢分享,长知识了。
用指针方便快捷,7楼Y版的方法挺好的
,涨知识了,正准备好好学习SCL,有些功能比梯形图方便
这都不会,你还学个屁啊
谢谢分享,给力!
用数组不是更好用吗?
分享
扫码分享好友 任选多种好礼
收藏
有帮助
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!
密码至少8位,包含大、小写字母,数字和符号至少三种。
允许邮箱和手机接收来自支持中心网站的信息
我已同意《支持中心网站注册协议和隐私政策》
微信登录扫码一键登录
验证码登录
密码登录
二维码失效点击重试
打开微信扫一扫,快速登录/注册
未注册手机验证后自动登录,注册即代表同意《支持中心网站注册协议和隐私政策》
三日内免验证登录
短信登录
登录