回复:西门子队列问题

已锁定

仅此微风

西门子1847工业学习平台

  • 帖子

    18
  • 精华

    0
  • 被关注

    0

论坛等级:游侠

注册时间:2023-05-08

黄金 黄金 如何晋级?

发布于 2025-03-24 16:51:01

15楼

展开查看
以下是引用偶阵雨在2025-03-24 09:16:21的发言 >14楼

确实是你说的那样,数组清零的值不会前移,所以我写了个出栈后数组移位程序,判断出栈队列数大于1时,且第一个队列数是0的时候,队列数组前移,但是发现个问题,后面的都还好,只要队列数等于2的时候,就有点问题,可能是我程序写的不对


多测试了几次其实不会自动前移也无所谓, 当数组满了,会自动填充到前面出栈为0的

空数组里面






以下是引用仅此微风在2025-03-11 16:32:13的发言 >13楼:你先建一个数组给buf...

引用13楼详细内容:

你先建一个数组给buffer,然后将你要存放的值给item,再给enqueue一个上升沿信号,就会加入到buffer数组里,如果 你要出列,item的值就代表输出的值。我好像记得这个不咋好用,如果出列,buffer数组里面的值不会自动前移,只会首个元素变为0,也可能我没摸透~

以下是引用偶阵雨在2025-03-11 16:06:21的发言 >12楼:这个FIFO功能块...

引用12楼详细内容:


这个FIFO功能块有人用过吗,左边下面三个变量到底怎么用啊,试了几种都报错,说与数据类型不符合

其实与其强行用这个不咋好用的FIFO,不如自己写一个自己专属的FIFO,逻辑非常简单,我后面自己写了一个玩玩,公司电脑有水印,就不截图了,建议你自己写一个FIFO然后建一个料仓的UDT,把问题分解一下,就非常简单了。

Input

Data in Bool

Data out Bool

Output

First out data Int

InOut

Variant Variant

Static

P_Data in R_TRIG

P_Data out R_TRIG

Serial SInt

i SInt

Table Array[0..99] of Int

Temp

RET1 Int

RET2 Int



#"P_Data in"(CLK:=#"Data in");

IF #"P_Data in".Q THEN

   VariantGet(SRC:=#Variant,

              DST=>#Table[#Serial]);

    #Serial += 1;

END_IF;


#"P_Data out"(CLK:=#"Data out");

IF #"P_Data out".Q AND #Serial>0 THEN

    #"First out data" := #Table[0];

    FOR #i := 0 TO #Serial DO

        #Table[#i] := #Table[#i + 1];

    END_FOR;

    #Serial -= 1;

END_IF;


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15100条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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