1200PLC先入先出的堆栈指令 点击:4688 | 回复:12



深山修行

    
  • 精华:0帖
  • 求助:1帖
  • 帖子:6帖 | 44回
  • 年度积分:86
  • 历史总积分:2152
  • 注册:2015年4月12日
发表于:2020-12-08 14:59:16
楼主
求助帖50分-已结帖

哪位大神能提供1200PLC的LGF库里面的FIFO指令详细的使用方法?官方的说明文档全英文的看不懂

1分不嫌少!


楼主最近还看过



一颗小小草

  • 精华:8帖
  • 求助:22帖
  • 帖子:154帖 | 4869回
  • 年度积分:2425
  • 历史总积分:40670
  • 注册:2005年6月28日
发表于:2020-12-09 09:32:20
1楼

你可以参考200软件帮助里面的FIFO指令说明来理解。

阿军仔

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 445回
  • 年度积分:10
  • 历史总积分:1413
  • 注册:2014年6月10日
发表于:2020-12-14 22:43:42
2楼

自己写一个数组对队列,然后下标用地址来实现队列的先进先出功能

fengge11

  • 精华:1帖
  • 求助:0帖
  • 帖子:11帖 | 278回
  • 年度积分:0
  • 历史总积分:184
  • 注册:2013年12月25日
发表于:2020-12-15 09:34:30
3楼

方法太多不必局限

tanwei138

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 69回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2011年7月15日
发表于:2020-12-16 15:24:24
4楼

英文看不懂

那谁

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 35回
  • 年度积分:0
  • 历史总积分:54
  • 注册:2016年6月30日
发表于:2021-01-10 22:02:22
5楼

可以参考我发的贴子,里面有先入先出功能块的scl文件,导入就可以使用,也可以按照下面代码编写

FUNCTION_BLOCK "先入先出FB"

{ S7_Optimized_Access := 'TRUE' }

VERSION : 0.1

   VAR_INPUT 

      Write : Bool;

      ReserBuffer : Bool;

      NewVaule : Real;

   END_VAR


   VAR_IN_OUT 

      Buffer : Array[*] of Real;

   END_VAR


   VAR 

      StartInitialized : Bool;

      StartElementReset : DInt;

      StartLowerLimit : DInt;

      StartUpperLimit : DInt;

      StartNumElements : UDInt;

      StartEdgeWrite : Bool;

   END_VAR


   VAR_TEMP 

      TempEetVal : Int;

   END_VAR



BEGIN

//设计一个块,开辟一个数组缓冲区,将新数据存入缓冲区,旧数据在缓冲区内自动前移。缓冲区可以复位

//

//初始化

IF (NOT #StartInitialized)  THEN

    #StartLowerLimit := LOWER_BOUND(ARR := #Buffer, DIM := 1); //缓冲区数组下标

    #StartUpperLimit := UPPER_BOUND(ARR := #Buffer, DIM := 1); //缓冲区数字上标

    #StartNumElements := DINT_TO_UDINT(#StartUpperLimit - #StartLowerLimit + 1); //缓冲区数组元素数量

    #StartInitialized := TRUE;

END_IF;

//写上升沿触发推入新数据元素

IF (#Write) AND (NOT #StartEdgeWrite) AND (NOT #ReserBuffer) THEN

    //除最后一个元素外,将所有元素向上移动

    #TempEetVal := MOVE_BLK_VARIANT(SRC := #Buffer,

                                    COUNT := #StartNumElements - 1,

                                    SRC_INDEX := 0,

                                    DEST_INDEX := 1,

                                    DEST => #Buffer);

    //将新值存储到第一个元素

    #Buffer[#StartLowerLimit] := #NewVaule;

    

    

    // //除最后一个元素外,将所有元素向上移动

    // #TempEetVal := MOVE_BLK_VARIANT(SRC:=#Buffer,

    //                                 COUNT:=#StartNumElements-1 ,

    //                                 SRC_INDEX:=1,

    //                                 DEST_INDEX:=0,

    //                                 DEST=>#Buffer)

    // //将新值存储到第一个元素

    // #Buffer[#StartLowerLimit] := #NewVaule;

    ;

END_IF;

//复位缓冲区

IF (#ReserBuffer) THEN

    // 复位缓冲区数据为“0”

    FOR #StartElementReset := #StartLowerLimit TO #StartUpperLimit DO

        #Buffer[#StartElementReset] := 0;

    END_FOR;

    

    ;

END_IF;

//写上升沿

#StartEdgeWrite := #Write;


END_FUNCTION_BLOCK


Smile-lyc

  • [管理员]
  • 精华:127帖
  • 求助:50帖
  • 帖子:3482帖 | 22331回
  • 年度积分:1963
  • 历史总积分:145694
  • 注册:2006年8月04日
发表于:2021-01-16 08:34:48
6楼

感谢求助者和答疑者对求助答疑板块的厚爱,赠人玫瑰,手留余香。

对于求助者要求:

1、请在一个月内自行结贴,把悬赏积分(如果设置积分悬赏求助)发放给答疑者;

2、如果在求助答疑过程中,自己已经有效解决问题,建议大家把解决问题方法在自己求助帖分享,有效分享可以获得50积分奖励。



大葱哥哥

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:82
  • 注册:2020年8月17日
发表于:2021-01-22 11:29:16
7楼

用读取域和写入域就可以,创建一个数组,实现先请求先响应

对酒当歌

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 255回
  • 年度积分:3
  • 历史总积分:160
  • 注册:2020年4月07日
发表于:2021-02-25 10:26:39
8楼

厉害了,没用过

风中追风zz

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 64回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2018年1月04日
发表于:2021-03-03 19:03:17
9楼

谢谢分享你的资源亲切

禾苗子

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 582回
  • 年度积分:0
  • 历史总积分:49
  • 注册:2018年7月24日
发表于:2021-09-28 19:23:18
10楼

END_FUNCTION_BLOCK 

lwslxh

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 108回
  • 年度积分:0
  • 历史总积分:54
  • 注册:2009年7月25日
发表于:2021-11-25 08:19:29
11楼

参考200软件帮助

shfeifei

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 4回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2011年2月28日
发表于:2024-09-26 22:40:31
12楼

IF (#Write) AND (NOT #StartEdgeWrite) AND (NOT #ReserBuffer) 

这个条件一直是False,为什么还能执行后面的块移动语句,两个IF语句在结束end if前面有个 ; 是不是多余的啊

回复本条

    

热门招聘
相关主题

官方公众号

智造工程师