回复:博途编写300PLC的程序,发现没有累计定时器指令,想实现累计计时怎么实现?

已锁定

askab

  • 帖子

    405
  • 精华

    5
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-07-24

黄金 黄金 如何晋级?

发布于 2021-05-17 22:57:02

3楼

FUNCTION_BLOCK FB10

know_how_protect

(*我想实现设备运行24小时后进行反洗,从而实现累计到24小时后反洗。

思路 最简单一个 ,当启动条件满足,则首先正转启动,当启动时间累积超过24 小时的瞬间,则反转启动,正转停止,当启动时间超过48 结束一个周期*)

CONST

unit:=60;      //换算率

END_CONST

VAR

Impls_1Sec_Aux:BOOL;  Impls_1Sec:BOOL;  pos1,pos2,pos3:BOOL;  pos4,pos5:bool;

END_VAR

VAR_INPUT

Input_Condition:BOOL:=false;        FP_1Sec:BOOL;     reset:BOOL;    

END_VAR

VAR_OUTPUT

act_second:INT:=0;  act_min:INT:=0;   act_hour:INT:=0;forward,reversal:bool; clear:bool;

END_VAR

Impls_1Sec:= FP_1Sec AND (NOT Impls_1Sec_Aux); 

Impls_1Sec_Aux:= FP_1Sec;

IF NOT (reset OR  clear) THEN

    IF  Input_Condition AND Impls_1Sec AND NOT pos1  THEN

    act_second:= act_second + 1;     pos1:=true;   ELSE    pos1:=false;     END_IF;  

    IF (act_second >= unit) AND NOT pos2  THEN

        act_min:= act_min + 1;  act_second:=0;   pos2:=true;   ELSE  pos2:=false; END_IF;    

    IF (act_min >= unit) AND NOT pos3  THEN

        act_hour:=act_hour + 1;  act_min:=0;  pos3:=true;   ELSE pos3:=false; END_IF;

ELSE  act_second:=0;  act_min:=0;  act_hour:=0;  END_IF; 

 IF  (act_hour < 24) AND NOT pos5 AND NOT forwad  THEN

        forwad:= true;   reversal:= FALSE;   pos5:=true;   ELSE  pos5:=false;   END_IF;

  IF forwad AND (act_hour >=24)  AND NOT pos4 THEN

        reversal:= TRUE;     forwad:= false;   pos4:=true;  ELSE   pos4:=false;   END_IF;

    IF NOT Input_Condition THEN

        reversal:= FALSE;  pos4:=false;   forwad:= false;  pos5:=false;  END_IF;   

IF  act_hour >=48 THEN   clear:=true;   ELSE  clear:=false;  END_IF;

END_FUNCTION_BLOCK


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

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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