程序简要:可记录设备的运行时间,并可以设置维护时间,维护时间到后发出一个报警信号并可以复位。
程序需要放在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