回复:延时报警 处理

askluck

  • 帖子

    65
  • 精华

    0
  • 被关注

    3

论坛等级:游士

注册时间:2013-07-31

普通 普通 如何晋级?

发布于 2015-04-01 16:08:28

2楼

可以自己定制定时器,或者采用在硬件组态中clock memory 中设定时钟。例如设定MB0 M0.5为1秒闪烁,
这样通过对闪烁上升沿的加计数,则相当于定时器的功能,我一般较少采用西门子提供的定时器,因为采用了大量定时器,容易出现误动作以及处理周期变长。
以下是我用SCL做的定时器程序,可以参考
FUNCTION FC1 : void
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
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
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;
Output_Delay:=1; //立即输出
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;
END_IF;
ELSE
Impls_1Sec:=false;
Output_Aux:=false;
Timer_Actual:= 0;
Output_Delay:= false;
END_IF;
END_FUNCTION

FUNCTION FC4 : void
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
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
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54776条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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