回复:西门子队列问题

已锁定

仅此微风

西门子1847工业学习平台

  • 帖子

    18
  • 精华

    0
  • 被关注

    0

论坛等级:游侠

注册时间:2023-05-08

黄金 黄金 如何晋级?

发布于 2025-03-11 09:46:48

7楼

写个大概的,做一个料仓UDT,里面放入加料需求作为触发信号,料仓待处理作为排队中信号,每个料仓用char起一个名字,比如序号1-9,将代号放到个数组里面,再将数组转化为字符串或者再用个for循环,每完成一个将序号前移,并且复位待处理信号,这样复位过的料仓就能重新加入队列,不喜勿喷哦~

FOR #i := 0 TO 8 DO

    #RET1 := MOVE_BLK_VARIANT(SRC := #料仓, COUNT := 1, SRC_INDEX := #i, DEST_INDEX := 0, DEST => #"料仓 UDT");

    IF #"料仓 UDT".料仓加料需求 AND #"料仓 UDT".料仓待处理 = FALSE THEN

        #"料仓 UDT".料仓待处理 := TRUE;

        #料仓代号数组[#待处理料仓数] := #"料仓 UDT".料仓代号;

        #待处理料仓数 += 1;

    END_IF;

    

    IF #"料仓 UDT".料仓代号 = #料仓代号数组[0] THEN

        #"料仓 UDT".料仓处理中信号 := TRUE;

    ELSE

        #"料仓 UDT".料仓处理中信号 := FALSE;

    END_IF;


    IF #"料仓 UDT".料仓加料完成 THEN

        IF #"料仓 UDT".料仓处理中信号 THEN

            Chars_TO_Strg(Chars := #料仓代号数组,

                          pChars := 1,

                          Cnt := 8,

                          Strg => #字符串排列);

            

            Strg_TO_Chars(Strg := #字符串排列,

                          pChars := 0,

                          Cnt => #字符数量,

                          Chars := #料仓代号数组);

            

            #"料仓 UDT".料仓加料完成 := FALSE;

            #"料仓 UDT".料仓加料需求 := FALSE;

            #"料仓 UDT".料仓待处理 := FALSE;

            #待处理料仓数 -= 1;

        ELSE

            #"料仓 UDT".料仓加料完成 := FALSE;

        END_IF;


    END_IF;

    #RET2 := MOVE_BLK_VARIANT(SRC := #"料仓 UDT", COUNT := 1, SRC_INDEX := 0, DEST_INDEX := #i, DEST => #料仓);

END_FOR;


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15100条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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