回复:if语句遇到的问题

已锁定

老学童

  • 帖子

    765
  • 精华

    32
  • 被关注

    64

论坛等级:奇侠

注册时间:2011-06-22

钻石 钻石 如何晋级?

发布于 2023-03-30 15:51:39

5楼

展开查看
以下是引用zhangli0在2023-03-30 09:46:00的发言 >4楼

回答的太多了,代码我忘了。你复制过来看看。

谢谢回复

==============================================================

你的要求不就是fifo的功能吗?按照先到先入队列的规则,把托盘信息保存到队列中,那么队列的第一个位置就是先进入炉子的托盘的信息。

(*托盘1*)

"R_TRIG_DB_1"(CLK:="tray_in_1");


IF "R_TRIG_DB_1".Q THEN//把托盘1的数据写道队列中的第一个不为0的位置

    FOR #ii := 0 TO 3 DO

        IF "burn_FIFO_db".trays_inf[#ii].tray_datas1 <> 0 THEN

            "burn_FIFO_db".trays_inf[#ii].tray_datas1 := "tray_in_1_data"; // Statement section IF

            EXIT;

        END_IF;

        // Statement section FOR

        ;

    END_FOR;

    // Statement section IF

    ;

END_IF;

(*托盘2*)

"R_TRIG_DB_2"(CLK:="tray_in_2");


IF "R_TRIG_DB_2".Q THEN//把托盘1的数据写道队列中的第一个不为0的位置

    FOR #ii := 0 TO 3 DO

        IF "burn_FIFO_db".trays_inf[#ii].tray_datas1 <> 0 THEN

            "burn_FIFO_db".trays_inf[#ii].tray_datas1 := "tray_in_2_data";

            // Statement section IF

            EXIT;

        END_IF;

        // Statement section FOR

        ;

    END_FOR;

    // Statement section IF

    ;

END_IF;

(*托盘3*)

"R_TRIG_DB_3"(CLK:="tray_in_3");


IF "R_TRIG_DB_3".Q THEN//把托盘1的数据写道队列中的第一个不为0的位置

    FOR #ii := 0 TO 3 DO

        IF "burn_FIFO_db".trays_inf[#ii].tray_datas1 <> 0 THEN

            "burn_FIFO_db".trays_inf[#ii].tray_datas1 := "tray_in_3_data";

            // Statement section IF

            EXIT;

        END_IF;

        // Statement section FOR

        ;

    END_FOR;

    // Statement section IF

    ;

END_IF;

(*

先入炉的肯定先出炉,所以有出炉信号,则队列中的数据前移一个地址,最后补0

*)

"R_TRIG_DB_4"(CLK:="tray_out");


IF "R_TRIG_DB_4".Q THEN

    FOR #ii := 0 TO 2 DO

        "burn_FIFO_db".trays_inf[#ii].tray_datas1 := "burn_FIFO_db".trays_inf[#ii + 1].tray_datas1// Statement section FOR

        ;

    END_FOR;

    "burn_FIFO_db".trays_inf[3].tray_datas1 := 0; // Statement section IF

    ;

END_IF;

不知道这个代码你是否能够读得懂?第一次有了触发信号,则寻找队列中第一个位置为0(没有保存数据的位置),把当前数据保存到当前位置。有了出炉信号,则队列中的数据前移,末尾补0

数据结构和db定义见下图

==============================================================


人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10590条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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