回复:300 的自编写S_ODT定时器FC块,比程序自带定时器好用多了,特此共享!

已锁定

askab

  • 帖子

    405
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 2020-04-10 20:36:01

47楼



FUNCTION FC1 : VOID


TITLE = 'Block Title'

//

// Block Comment...

//

VERSION: '1.0'

AUTHOR: BAIKAI

NAME: T_ODT

FAMILY: baikai

know_how_protect

VAR_INPUT

//ODT   

Input_Condition:BOOL:=false;

FP_1Sec:BOOL;

reset:BOOL;

Timer_Setpoint:INT:=0;

END_VAR

VAR_IN_OUT    

   Impls_1Sec_Aux:BOOL;

END_VAR

VAR_OUTPUT

Impls_1Sec:BOOL;    

Output_Delay:BOOL:=false;

Timer_Actual:INT:=0;

END_VAR



//通电延时,不带保持

Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT reset THEN

    IF (NOT Input_Condition) THEN 

    Timer_Actual:= 0; 

    Output_Delay:= 0; 

    ELSE 

    IF (Impls_1Sec  AND NOT Output_Delay)  THEN 

        Timer_Actual:= Timer_Actual +1; 

    END_IF;

     Output_Delay:= Timer_Actual >= Timer_Setpoint;

END_IF;

ELSE

    Impls_1Sec:=false;

    Timer_Actual:= 0; 

    Output_Delay:= false;

END_IF;          

END_FUNCTION




FUNCTION FC2 : VOID

TITLE = 'Block Title'

//

// Block Comment...

//

VERSION: '1.0'

AUTHOR: BAIKAI

NAME: T_ODTS

FAMILY: baikai

know_how_protect

VAR_INPUT

Input_Condition:BOOL:=false;

FP_1Sec:BOOL;

reset:BOOL;

Timer_Setpoint:INT:=0;

END_VAR

//ODTS

VAR_IN_OUT

   Impls_1Sec_Aux:BOOL;    

END_VAR

VAR_OUTPUT

Impls_1Sec:BOOL;

Output_Aux:BOOL;    

Output_Delay:BOOL:=false;

Timer_Actual:INT:=0;

END_VAR

//通电延时,保持

Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT reset THEN

    IF Input_Condition THEN

         Output_Aux:=1; 

    END_IF; 

    IF (NOT Output_Aux) THEN 

            Timer_Actual:=0; 

            Output_Delay:=false;

        ELSE

             IF (Impls_1Sec AND NOT Output_Delay) THEN

                 Timer_Actual:= Timer_Actual +1; 

             END_IF;  

                Output_Delay:= Timer_Actual >= Timer_Setpoint;

      END_IF; 

    ELSE

    Impls_1Sec:=false;

    Output_Aux:=false;

    Timer_Actual:= 0; 

    Output_Delay:= false;

END_IF;        

END_FUNCTION




FUNCTION FC3 : VOID

TITLE = 'Block Title'

//

// Block Comment...

//

VERSION: '1.0'

AUTHOR: BAIKAI

NAME: T_OFFDT

FAMILY: baikai

know_how_protect

VAR_INPUT

Input_Condition:BOOL:=false;

FP_1Sec:BOOL;

reset:BOOL;

Timer_Setpoint:INT:=0;

END_VAR

//OFFDT

VAR_IN_OUT

   Impls_1Sec_Aux:BOOL;    

END_VAR

VAR_OUTPUT

Impls_1Sec:BOOL;

Output_Aux:BOOL;    

Output_Delay:BOOL:=false;

Timer_Actual:INT:=0;

END_VAR

//断电延时

Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT reset THEN

    IF Input_Condition THEN

         Timer_Actual:= 0; 

         Output_Aux:= 0; 

          

        ELSE 

            IF (Impls_1Sec AND NOT Output_Aux) THEN 

                Timer_Actual:= Timer_Actual +1; 

            END_IF;

             Output_Aux:=Timer_Actual >= Timer_Setpoint; 

            END_IF; 

            IF Output_Aux THEN

                 Output_Delay:=0; 

            ELSE

                 Output_Delay:=1; //立即输出   

                END_IF;

    ELSE

    Impls_1Sec:=false;

    Output_Aux:=false;

    Timer_Actual:= 0; 

    Output_Delay:= false;

END_IF;        

END_FUNCTION


FUNCTION FC4 : VOID

TITLE = 'Block Title'

//

// Block Comment...

//

VERSION: '1.0'

AUTHOR: BAIKAI

NAME: T_PEXT

FAMILY: baikai

know_how_protect

VAR_INPUT

Input_Condition:BOOL:=false;

FP_1Sec:BOOL;

reset:BOOL;

Timer_Setpoint:INT:=0;

END_VAR

//PEXT

VAR_IN_OUT

   Impls_1Sec_Aux:BOOL;    

END_VAR

VAR_OUTPUT

Impls_1Sec:BOOL;

Output_Aux:BOOL;    

Output_Delay:BOOL:=false;

Timer_Arrived:BOOL;

Timer_Actual:INT:=0;

END_VAR

//脉冲接通,保持型

Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT reset THEN

     IF Input_Condition THEN 

        Output_Aux:=true;

    END_IF; 

    IF (NOT Output_Aux) THEN  

        Timer_Actual:= 0; 

        Timer_Arrived := false; 

    ELSE 

        IF (NOT Timer_Arrived AND Impls_1Sec ) THEN 

            Timer_Actual:= Timer_Actual +1; 

        END_IF; 

        Timer_Arrived := Timer_Actual >= Timer_Setpoint; 

    END_IF; 

    IF Timer_Arrived THEN

         Output_Aux:=false; 

        END_IF; 

        Output_Delay:= Output_Aux; 

    ELSE

    Impls_1Sec:=false;

    Output_Aux:=false;

    Timer_Actual:= 0; 

    Output_Delay:= false;

END_IF;        

END_FUNCTION



FUNCTION FC5 : VOID

TITLE = 'Block Title'

//

// Block Comment...

//

VERSION: '1.0'

AUTHOR: BAIKAI

NAME: T_PLUSE

FAMILY: baikai

know_how_protect

VAR_INPUT

Input_Condition:BOOL:=false;

FP_1Sec:BOOL;

reset:BOOL;

Timer_Setpoint:INT:=0;

END_VAR

//PLUSE

VAR_IN_OUT

   Impls_1Sec_Aux:BOOL;    

END_VAR

VAR_OUTPUT

Impls_1Sec:BOOL;

Output_Aux:BOOL;    

Output_Delay:BOOL:=false;

Timer_Arrived:BOOL;

Timer_Actual:INT:=0;

END_VAR

//脉冲接通,不保持

Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT reset THEN

     IF Input_Condition THEN 

        Output_Aux:=true;

    ELSE

        Output_Aux:=false;

    END_IF; 

    IF (NOT Output_Aux) THEN  

        Timer_Actual:= 0; 

        Timer_Arrived := false; 

    ELSE 

        IF (NOT Timer_Arrived AND Impls_1Sec ) THEN 

            Timer_Actual:= Timer_Actual +1; 

        END_IF; 

        Timer_Arrived := Timer_Actual >= Timer_Setpoint; 

    END_IF; 

    IF Timer_Arrived THEN

         Output_Aux:=false; 

        END_IF; 

        Output_Delay:= Output_Aux; 

    ELSE

    Impls_1Sec:=false;

    Output_Aux:=false;

    Timer_Actual:= 0; 

    Output_Delay:= false;

END_IF;        

END_FUNCTION


大家同行,you ok ? me !
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54765条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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