供暖公司输煤线连锁保护部分程序分享!

已锁定

v_wind

  • 帖子

    287
  • 精华

    3
  • 被关注

    36

论坛等级:侠圣

注册时间:2013-03-08

普通 普通 如何晋级?

供暖公司输煤线连锁保护部分程序分享!

658

1

2017-11-30 15:11:11

供暖公司输煤线连锁保护部分程序分享!


FUNCTION_BLOCK "连锁保护FB"

{ S7_Optimized_Access := 'TRUE' }

VERSION : 0.1

   VAR_IN_OUT 

      VDF_array : Array[*] of "VDF_data";

   END_VAR


   VAR 

      ArrayBuf_LEN { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : DInt;

      IEC_Timer_0_Instance {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;

      i { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Int := 1;   // 循环扫描

   END_VAR


   VAR_TEMP 

      j : Int;

      k : Int;   // 记录当前设备后面不参与连锁的设备数量

      i1 : Int;

   END_VAR



BEGIN

Region 连锁控制逻辑

   (*

  ---为输煤线设计连锁保护停机程序,从煤库到锅炉前皮带,有多个设备如筛煤机、碎煤机、

  斗提、皮带、取煤机等!

  --- 要求在限制条件下从锅炉前皮带开始依次启动,运行后才可以启动下一个设备,非限制条件

  时,可自由起停!

  ---连锁停机时从取煤机开始,依次延时停机!

  ---当连锁保护不为1时不参与连锁(个别设备不允许频繁起停)!

  *)

   #ArrayBuf_LEN := UPPER_BOUND(ARR := #VDF_array, DIM := 1);

   (*

   循环检测

   *)

   If #i > #ArrayBuf_LEN Then

       #i := 1;

   End_If;

   

   If #i <= #ArrayBuf_LEN Then

       #j := #i;

       #k := 1;

       (*

       检测不参与连锁的设备(当前设备后面的),屏蔽不发停机命令!

       *)

       While #j - 1 > 0 And #VDF_array[#j - 1]."连锁保护" = 0 Do

           #j := #j - 1;

           #k := #k + 1;

       End_While;

       

        (* 

        停机延时设置 

        *)

       If #VDF_array[#i].连锁保护 And #VDF_array[#i].状态位反馈 = 1 And #VDF_array[#i - #k].状态位反馈 = 0 And #VDF_array[#i - #k].连锁保护 = 1 Then

           

           #IEC_Timer_0_Instance(IN := 1,

                                 PT := t#3s);

       End_If;

       

       (*

       判别后停机

       *)

       If #VDF_array[#i].连锁保护 And #IEC_Timer_0_Instance.Q And #VDF_array[#i].状态位反馈 = 1 Then

           

           #IEC_Timer_0_Instance(IN := 0,

                                 PT := t#3s);

           #VDF_array[#i].起停控制 := 0;

           

           If #i < #ArrayBuf_LEN Then

               #i := #i + 1;

           Else

               #i := 1;

           End_If;

           

       End_If;

       

       (*

       连锁未保护,不执行停机!

       *)

       If #VDF_array[#i].连锁保护 = 0 Then

           If #i < #ArrayBuf_LEN Then

               #i := #i + 1;

           Else

               #i := 1;

           End_If;

           

       End_If;

       

       (*

       连锁保护,设备停机状态,不执行停机!

       *)

       If #VDF_array[#i].连锁保护 And #VDF_array[#i].状态位反馈 = 0 Then

           If #i < #ArrayBuf_LEN Then

               #i := #i + 1;

           Else

               #i := 1;

           End_If;

       End_If;

       

   End_If;

End_Region

Region 数据记录及平均值

   (*

   ---记录设备数据如电流,分别3分钟平均值(360点500ms记录),60分钟平均值(360点10s记录)历史故障等

   *)

   

End_Region

Region 启动条件

   (*

  ---启动条件为先启动前面设备,当启动后延时稳定后,才可以启动后面设备!

  ---如:"连锁保护"."THIS"[10].状态位反馈变为1时,"连锁保护"."THIS"[9].起停控制  按下才有效,依次类推.

   *)

   

End_Region

Region 模拟电机启动

   

   // 模拟测试时仿反馈状态信号

   (*

   状态位反馈(停止)=0;

   状态位反馈(运行)=1;

   状态位反馈(启动中...)=2;

   状态位反馈(停止中...)=3;

   *)

   For #i1 := 0 To #ArrayBuf_LEN  Do

   

       If #VDF_array[#i1].起停控制 Then

          

           #VDF_array[#i1].状态位反馈 := 1;

       Else

           #VDF_array[#i1].状态位反馈 :=0;

       End_If;

   

   End_For;

   

   

End_Region

   

 

    

   

   

  

END_FUNCTION_BLOCK


供暖公司输煤线连锁保护部分程序分享! 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10587条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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