自己写的一点基础功能块(二) 点击:968 | 回复:11



tyfeixian

    
  • 精华:4帖
  • 求助:2帖
  • 帖子:17帖 | 50回
  • 年度积分:132
  • 历史总积分:1101
  • 注册:2006年8月02日
发表于:2020-02-14 20:06:00
楼主

4、

电机控制,不带频率输出


FUNCTION_BLOCK "Moto_NoSpeed"

{ S7_Optimized_Access := 'FALSE' }

VERSION : 0.1

   VAR_INPUT 

      _inFB : Bool;   // 电机反馈运行状态输入

      _inAlarm : Bool;   // 电机反馈报警状态输入

      _Interlock : Bool;   // 联锁保护

      _A_Start : Bool;   // 自动,运行命令

   END_VAR


   VAR_OUTPUT 

      _MotoRun : Bool;

      _Err : Bool;

   END_VAR


   VAR_IN_OUT 

      _M_Start : Bool;   // 手动,运行命令

   END_VAR


   VAR 

      "_A/M_Sel" : Bool;   // 自动,手动命令选择

      _LocJC : Bool;   // interLock保护解除

      _outRunTemp { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Bool;   // 临时变量‘’

      _Timer01 : Time := T#3S;

      _ErrCode : Word;

      IEC_Timer_01 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME;

      F_TRIG_Alarm {InstructionName := 'F_TRIG'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : F_TRIG;

      _ErrTemp { ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : Word;

   END_VAR



BEGIN

IF ((NOT #_Interlock) OR #_LocJC) AND (NOT #_inAlarm) THEN      //当联锁没有触发时或联锁解除,且没有外部报警。

    IF #"_A/M_Sel" THEN        //当自动运行触发后,运行自动程序,同时锁定手动控制

        IF #_A_Start THEN

            #_outRunTemp := 1;

            #_M_Start := 1;

        ELSE

            #_outRunTemp := 0;

            #_M_Start := 0;

        END_IF;

        

    ELSE                                //当自动运行没有触发,运行手动控制

        IF #_M_Start THEN

            #_outRunTemp := 1;

        ELSE

            #_outRunTemp := 0;

        END_IF;

    END_IF;

ELSE

    #_M_Start := 0;

    //#"_A/M_Sel" := 0;

    #_outRunTemp := 0;

END_IF;

#_MotoRun := #_outRunTemp;              //电机控制点输出

#F_TRIG_Alarm(CLK := #_inAlarm);

#IEC_Timer_01(IN := #_outRunTemp AND #_inFB = 0,

              PT := #_Timer01);

//下面程序全部为错误状态判断,同时输出错误代码及错误状态

IF #IEC_Timer_01.Q THEN     //当运行后,设定时间到达后没有反馈信号,输出错误信号

    #_ErrCode := #_ErrCode OR 16#1;

ELSE

    #_ErrCode := #_ErrCode AND 16#fe;

END_IF;

IF #_inAlarm THEN           //当反馈报警信号输入后,显示错误信号

    #_ErrCode := #_ErrCode OR 16#2;

END_IF;

IF #F_TRIG_Alarm.Q THEN

    #_ErrCode := #_ErrCode AND 16#fd;

END_IF;

IF #_ErrCode <> 0 THEN

    #_Err := 1;

ELSE

    #_Err := 0;

END_IF;

END_FUNCTION_BLOCK



5、阀门控制


FUNCTION_BLOCK "Valve01"

{ S7_Optimized_Access := 'FALSE' }

VERSION : 0.1

   VAR_INPUT 

      _inFO : Bool;

      _inFC : Bool;

      _Loc : Bool;   // 保护锁定功能。

      _sigFB : Bool;   // 只有一个FO反馈输入端时,使能次端口。消除没有FC反馈的错误。

      _A_Start : Bool;   // 自动,启动

   END_VAR


   VAR_OUTPUT 

      _outOP : Bool;

      _Err : Bool;   // 错误触发信号。

   END_VAR


   VAR_IN_OUT 

      "_A/M_Sw" : Bool;   // 手动/自动切换

      _M_Start : Bool;   // 手动,启动

   END_VAR


   VAR 

      _Timer01 : Time := T#3S;   // 错误延时时间设定

      IEC_Timer_01 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME;   // 错误判断定时器1 有输出无FO信号输入错误

      IEC_Timer_02 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME;   // 错误判断定时器2 无输出无FC信号输入错误或但FO输入时无输出有FO信号输入错误

      IEC_Timer_03 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME;   // 错误判断定时器3 FC信号FO信号同时有错误

      IEC_Timer_04 {InstructionName := 'TON_TIME'; LibVersion := '1.0'; ExternalAccessible := 'False'; ExternalVisible := 'False'; ExternalWritable := 'False'} : TON_TIME;   // 错误判断定时器4 FC信号FO信号同时无错误

      _ErrCode : Word;   // 错误代码,1bit定时器1错误,2bit定时器2错误,3bit定时器3错误,4bit定时器4错误。

      _outTemp { ExternalVisible := 'False'} : Bool;   // 动作与_outOP相同,作为内部调用使用。

      _LocJC : Bool;   // Loc保护动作解除

      _NotLoc : Bool;

   END_VAR



BEGIN

IF (NOT #_Loc) OR #_LocJC THEN

    IF #"_A/M_Sw" = 1 THEN

        IF #_A_Start = 1 THEN

            #_outOP := 1;

            #_M_Start := 1;

        ELSE

            #_outOP := 0;

            #_M_Start := 0;

        END_IF;

        #_M_Start := 0;

    ELSE

        IF #_M_Start = 1 THEN

            #_outOP := 1;

        ELSE

            #_outOP := 0;

        END_IF;

    END_IF;

ELSE

    #_M_Start := 0;

    //#"_A/M_Sw" := 0;

    #_outOP := 0;

END_IF;

#IEC_Timer_01(IN := (#_outTemp = TRUE) AND (#_inFO = 0),

              PT := #_Timer01);

#IEC_Timer_02(IN := (#_outTemp = FALSE AND #_inFC = 0 AND NOT #_sigFB) OR (#_outTemp = FALSE AND #_inFO = 1 AND #_sigFB),

              PT := #_Timer01);

#IEC_Timer_03(IN := (#_inFC = 1 AND #_inFO = 1 AND NOT #_sigFB),

              PT := #_Timer01);

#IEC_Timer_04(IN := (#_inFC = 0 AND #_inFO = 0 AND NOT #_sigFB),

              PT := #_Timer01);

IF #IEC_Timer_01.Q = 1 THEN

    #_ErrCode := #_ErrCode OR 16#1;

ELSE

    #_ErrCode := #_ErrCode AND 16#fe;

END_IF;

IF #IEC_Timer_02.Q = 1 THEN

    #_ErrCode := #_ErrCode OR 16#2;

ELSE

    #_ErrCode := #_ErrCode AND 16#fd;

END_IF;

IF #IEC_Timer_03.Q = 1 THEN

    #_ErrCode := #_ErrCode OR 16#4;

ELSE

    #_ErrCode := #_ErrCode AND 16#fb;

END_IF;

IF #IEC_Timer_04.Q = 1 THEN

    #_ErrCode := #_ErrCode OR 16#8;

ELSE

    #_ErrCode := #_ErrCode AND 16#f7;

END_IF;

IF #_ErrCode <> 0 THEN              //错误触发

    #_Err := 1;

    //#_M_Start := 0;

ELSE

    #_Err := 0;

END_IF;

END_FUNCTION_BLOCK







l726039

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 371回
  • 年度积分:82
  • 历史总积分:568
  • 注册:2008年12月12日
发表于:2020-02-14 20:39:25
1楼

收藏了。谢谢

sjz861203

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 44回
  • 年度积分:0
  • 历史总积分:74
  • 注册:2009年12月09日
发表于:2020-02-15 11:47:50
2楼

谢谢楼主  分享   学习学习

HOJINLING

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 190回
  • 年度积分:866
  • 历史总积分:872
  • 注册:2010年11月02日
发表于:2020-02-15 13:17:32
3楼


引用 l726039 的回复内容: 收藏了。谢谢

-------------------------


Smile-lyc

  • [版主]
  • 精华:179帖
  • 求助:45帖
  • 帖子:4049帖 | 20124回
  • 年度积分:1168
  • 历史总积分:109729
  • 注册:2006年8月04日
发表于:2020-02-16 12:22:38
4楼


引用 sjz861203 的回复内容: 谢谢楼主  分享   学习学习

-------------------------


August_Du

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 20回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2020年1月18日
发表于:2020-02-19 14:37:39
5楼

哦也,看看吧!貌似是不错的学习资料呦

星星显耀

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 173回
  • 年度积分:484
  • 历史总积分:508
  • 注册:2019年12月19日
发表于:2020-02-19 15:09:26
6楼

谢谢楼主  分享   学习学习

z26351910

  • 精华:0帖
  • 求助:22帖
  • 帖子:40帖 | 1891回
  • 年度积分:1
  • 历史总积分:762
  • 注册:2008年11月27日
发表于:2020-02-21 14:36:56
7楼

谢谢楼主  分享   学习学习

wangxiangfei11

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 78回
  • 年度积分:10
  • 历史总积分:86
  • 注册:2011年9月15日
发表于:2020-02-21 16:45:52
8楼

简单的逻辑,都是IF else 拼成的。用途梯形图几下子就搞定了。SCL写数据处理尤为好。写逻辑还真不行。

lizhendongg

  • 精华:0帖
  • 求助:1帖
  • 帖子:5帖 | 388回
  • 年度积分:564
  • 历史总积分:579
  • 注册:2016年9月12日
发表于:2021-02-21 23:05:49
9楼

支持支持,谢谢分享

浮生

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 10回
  • 年度积分:10
  • 历史总积分:20
  • 注册:2020年11月10日
发表于:2021-02-23 16:16:46
10楼

谢老师分享,学习学习!!!

gk2017

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 89回
  • 年度积分:0
  • 历史总积分:52
  • 注册:2018年3月19日
发表于:2021-03-01 16:21:22
11楼

谢谢楼主共享,楼主辛苦


相关主题

官方公众号

智造工程师