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



深山修行

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

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

1分不嫌少!



一颗小小草

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

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

阿军仔

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

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

fengge11

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

方法太多不必局限

tanwei138

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

英文看不懂

那谁

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 11回
  • 年度积分:4
  • 历史总积分:24
  • 注册: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

  • [版主]
  • 精华:179帖
  • 求助:45帖
  • 帖子:4028帖 | 19898回
  • 年度积分:474
  • 历史总积分:108435
  • 注册:2006年8月04日
发表于:2021-01-16 08:34:48
6楼

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

对于求助者要求:

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

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



大葱哥哥

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

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

对酒当歌

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

厉害了,没用过


相关主题

官方公众号

智造工程师