编写PLC程序,实现对设备运行时间及运行次数的统计,时间包括上次运行时间和总的运行时间。并编辑相应触摸屏(或其他)画面加以显示。
要求能自动或人工复位各统计数据。PLC及显示终端品牌不限。
工控PLC擂台每周一期,本期下周末结贴。奖项设置:一等奖1名:50MP,二等奖5名:10MP,三等奖10名:30积分。
MP介绍:gongkongMP即工控币,是中国工控网的用户积分与回馈系统的一个网络虚拟计价单位,类似于大家熟悉的QB,1个MP=1元人民币。
MP有什么用?兑换服务:以1个MP=1元来置换中国工控网的相关服务。 兑换现金:非积分获得的MP可兑换等值现金(满100MP后、用户可通过用户管理后台申请兑换)。
在西门子Step7 V5下用SCl编写的长时间计时程序(时间可达3.7年,精确到秒,若觉得时间还不够长,可以再增加一个整数进制,每满32767小时,增加1,即32767*32767小时,可以记录1200个世纪,计数功能的实现也很简单,该代码可以在任何支持ST编程的PLC上运行)
(*run time count
Input parameters:
Start=1,start time;start=0,stop in current time position
Reset=1,current time is reseted for zero
Output parameter :
Reach:if setpoint= actual time,then stop time ,and output time reach signal.*)
FUNCTION_BLOCK Pf_RunTime
VERSION:‘1.0‘
AUTHOR:Parker
NAME: RunTime
FAMILY: PF
VAR_INPUT // Input Parameters
Start:Bool:=0; //start time
Reset:Bool:=0; //Reset time actual value(1-impulse sufficient)
END_VAR
VAR_OUTPUT // Output Parameters
Reach:Bool:=0; //time reach setpoint
END_VAR
VAR_IN_OUT // input/Output Parameters
END_VAR
VAR // Static Variables
TS:STRUCT //Data structure of Timer Setpoints
Hour:Int:=32767; //hour setpoint
Minu:Int:=0; //minute setpoint
Secd:Int:=0; //second setpoint
END_STRUCT;
TA:STRUCT //Data structure of Timer Actual Values
Hour:Int:=0; //actual hour
Minu:Int:=0; //actual minute
Secd:Int:=0; //actual second
END_STRUCT;
END_VAR
VAR_TEMP // Temporary Variables
END_VAR
IF TS.Secd>59 THEN
TS.Secd:=59;
END_IF;
IF TS.Minu>59 THEN
TS.Minu:=59;
END_IF;
IF "IP_1Sec" & Start THEN
IF TA.Hour<TS.Hour THEN
IF TA.Secd<59 THEN
TA.Secd:=TA.Secd+1;
ELSE
IF TA.Minu<59 THEN
TA.Minu:=TA.Minu+1;
ELSE
TA.Hour:= TA.Hour+1;
TA.Minu:=0;
END_IF;
TA.Secd:=0;
END_IF;
ELSIF TA.Hour=TS.Hour THEN
IF TA.Minu<TS.Minu THEN
IF TA.Secd<59 THEN
TA.Secd:=TA.Secd+1;
ELSE
TA.Minu:=TA.Minu+1;
TA.Secd:=0;
END_IF;
ELSE
IF TA.Secd<TS.Secd THEN
TA.Secd:=TA.Secd+1;
END_IF;
END_IF;
END_IF;
END_IF;
IF Reset THEN
TA.Secd:=0;
TA.Minu:=0;
TA.Hour:=0;
END_IF;
Reach:=(TA.Hour>TS.Hour)
OR ((TA.Hour=TS.Hour)&(TA.Minu>TS.Minu))
OR ((TA.Hour=TS.Hour)&(TA.Minu=TS.Minu)&(TA.Secd>=TS.Secd));
END_FUNCTION_BLOCK