作者 | 主题 |
---|---|
柳叶飘飘 侠圣 经验值:2484 发帖数:95 精华帖:7 |
楼主 2016-12-27 21:48:44
主题:设备运行时间累计(默认约三年)可修改时间更长 程序简要:可记录设备的运行时间,并可以设置维护时间,维护时间到后发出一个报警信号并可以复位。 程序需要放在OB1中运行,且CPU时钟存储设置为2 //***************************** //运行时间累计 //程序中的M2.5为设定的系统秒信号,需要在硬件组态中配置。 //EBC_LW 20160617 //***************************** FUNCTION_BLOCK FB4 TITLE = 'RUN_TIME' // // 运行时间累计 // VERSION: '1.0' AUTHOR: EBC_LW NAME: RUNTIME FAMILY: EBC KNOW_HOW_PROTECT // Statement Section VAR_INPUT RUN:BOOL;//运行状态 //SECOND:BOOL;//秒脉冲 MAINTAIN_TIME_SET:INT;//维护时间设定(小时) REST_MAIN:BOOL;//维护标志位复位 REST:BOOL;//时间复位
END_VAR VAR_IN_OUT SET_FLAG:INT; //设定值的上一次的输入值 NEXT_HOUR:INT;//下一次需要维护的时间 // I/O Parameters END_VAR VAR_OUTPUT //RUN_Day:INT; RUN_Hour:INT;//运行的小时数 RUN_Minite:INT;//运行的分钟数 RUN_Sencond:INT;//运行的秒数 MAINTAIN:BOOL;//维护标志位 END_VAR VAR_TEMP PN:BOOL; GE_PN:BOOL; END_VAR VAR OLD_VAL:BOOL;//边沿检测的上一次的值 //FLAG:BOOL; // Temporary Variables OLD_GE_VAL:BOOL;//边沿检测上一次的值 //TEMP2:INT; // Static Variables GE_VAL:BOOL; END_VAR //上升沿 PN:=M2.5&(NOT OLD_VAL); OLD_VAL:=M2.5; //下降沿 //NN:=OLD_VAL&(NOT M2.5); //OLD_VAL:=M2.5; //运行时间累计 IF RUN THEN IF PN THEN //系统时钟地址1S上升沿触发 // SECOND:=0; RUN_Sencond:=RUN_Sencond+1; IF RUN_Sencond>=60 THEN RUN_Sencond:=0; RUN_Minite:=RUN_Minite+1; IF RUN_Minite>=60 THEN RUN_Minite:=0; RUN_Hour:=RUN_Hour+1; END_IF; END_IF; END_IF; END_IF; //复位时间 IF REST OR RUN_Hour>=32767 THEN REST:=0; RUN_Sencond:=0; RUN_Minite:=0; RUN_Hour:=0; NEXT_HOUR:=MAINTAIN_TIME_SET; END_IF; //判断输入的设定值是否为上次设定的值不是上一次的值则重新赋值 IF SET_FLAG <>MAINTAIN_TIME_SET THEN SET_FLAG:=MAINTAIN_TIME_SET; NEXT_HOUR:=SET_FLAG+RUN_Hour; END_IF; //新的维护时间是否到达,到达后产生一个标志位 IF RUN_Hour>= NEXT_HOUR THEN GE_VAL:=1; ELSE GE_VAL:=0; //MAINTAIN:=TRUE;
END_IF; //当维护时间标志位到达上升沿检测 GE_PN:=GE_VAL & (NOT OLD_GE_VAL); OLD_GE_VAL:=GE_VAL; IF GE_PN THEN MAINTAIN:=1; NEXT_HOUR:=SET_FLAG+RUN_Hour; END_IF; //维护标志位复位 IF REST_MAIN THEN //REST_MAIN:=0; MAINTAIN:=0; END_IF;
END_FUNCTION_BLOCK //原创程序请多交流 QQ 275578306
努力赚钱 养家糊口
|