回复:物料分类程序

v_wind

  • 帖子

    287
  • 精华

    3
  • 被关注

    36

论坛等级:侠圣

注册时间:2013-03-08

普通 普通 如何晋级?

发布于 2018-05-31 10:13:16

5楼

FUNCTION_BLOCK "FB_FIFO"

{ S7_Optimized_Access := 'TRUE' }

VERSION : 0.1

   VAR_INPUT 

      I_In : Bool;

      I_Out : Bool;

      I_Reset : Bool;

      I_Reset_Value : Int;

      I_NewValue : Int;

      I_FullValue : Int := 10;

   END_VAR


   VAR_OUTPUT 

      O_FirstIndex : Int;

      O_BufferCounter : Int;

      O_Buffer_Full : Bool;

      O_Buffer_Empty : Bool;

   END_VAR


   VAR 

      BufferCounter : Int;

      Buffer : Array[1..10] of Int;

      ItemIn_Old : Bool;

      ItemOut_Old : Bool;

      ResetCmd_Old : Bool;

      BufferAdd : Bool;

      BufferOut : Bool;

      BufferFull : Bool;

      BufferEmpty : Bool;

   END_VAR


   VAR_TEMP 

      t_AR2 : DWord;

      t_LoopCounter : Int;

      t_Bool : Bool;

      t_RET_VAl : Int;

      c_iMax : Int;

   END_VAR



BEGIN

   // Initial

   #BufferFull := FALSE;

   #BufferEmpty := FALSE;

   #c_iMax := 10;

   IF #I_FullValue > #c_iMax THEN

       // Statement section IF

       #I_FullValue := #c_iMax;

   END_IF;

   IF #I_FullValue < 1 THEN

       // Statement section IF

       #I_FullValue := 1;

   END_IF;

   /// Buffer In

   #BufferAdd := #I_In AND (NOT #ItemIn_Old) AND (NOT #I_Reset);

   IF #BufferAdd AND NOT #BufferFull THEN

       // Statement section IF

       #BufferCounter := #BufferCounter + 1;

       #Buffer[#BufferCounter] := #I_NewValue;

   END_IF;

   IF #BufferCounter >= #c_iMax THEN

       // Statement section IF

       #BufferFull := TRUE;

   END_IF;

   // Buffer Out

   #BufferOut := #I_Out AND NOT #ItemOut_Old AND NOT #I_Reset;

   IF #BufferOut THEN

       // Statement section IF

       #BufferCounter := #BufferCounter - 1;

       FOR #t_LoopCounter := 1 TO #BufferCounter DO

           // Statement section FOR

           #Buffer[#t_LoopCounter] := #Buffer[#t_LoopCounter + 1];

       END_FOR;

       #Buffer[#BufferCounter + 1] := 0;

   END_IF;

   

   // Buffer Reser

   IF #I_Reset AND NOT #ResetCmd_Old THEN

       // Statement section IF

       FOR #t_LoopCounter := 1 TO #c_iMax DO

           // Statement section FOR

           #Buffer[#t_LoopCounter] := 0;

       END_FOR;

       #BufferCounter := 0;

   END_IF;

   //Buffer Empty

   IF #BufferCounter < 1 THEN

       // Statement section IF

       #BufferEmpty := TRUE;

   END_IF;

   //Output

   // First Index

   #O_FirstIndex := #Buffer[1];

   #O_BufferCounter := #BufferCounter;

   #O_Buffer_Empty := #BufferEmpty;

   #O_Buffer_Full := #BufferFull;

   // Old Value Store

   #ItemIn_Old := #I_In;

   #ItemOut_Old := #I_Out;

   #ResetCmd_Old := #I_Reset;

   

END_FUNCTION_BLOCK

这个程序是在网上找的,我用着很舒服,剽窃谁的请谅解呀!出处找不到了!

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15100条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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