我做的计算当班和当日平均值的脚本,思路是:
1.在整点归档时计算过程量的累加值;
2.在7点和18点完成当班的平均值计算;
3.7点完成当班平均值时,把当班的平均值保存到上班平均值中;
4.18点完成班的均值计算以后,计算当日均值: (当班+上班)/2;
问题来了,我发现7点得时候没有结转本班的均值,反而是18点得结转了。这样就造成当日平均值=上个白班+上个夜班)/2, 而不是我要的(上个夜班+当班白班)/2。我反复看了程序,无奈找不出问题所在。请指点。
注:各班的班均值归档都可以正常完成。
#include "apdefap.h"
int gscAction( void )
{
if (GetTagBit("tmp_bit_21")) //HOUR归档完成
{
if (GetTagBit("tmp_bit_18")) //过程值的归档,7点和18点
{
if (!GetTagBit("tmp_bit_29"))
{
if (!GetTagWord("minute") && (GetTagWord("hour")==18) ) //18点计算本本班平均
{ //计算班均值
SetTagFloat("kiln_head_T_av_now",(GetTagFloat("kilnhead_t_tmp")/11));//
//此处若干行计算平均值的语句
}
if (GetTagWord("minute")==0 & (GetTagWord("hour")==7) ) //07点计算本本班平均
{
SetTagFloat("kiln_head_T_av_now",(GetTagFloat("kilnhead_t_tmp")/13));
//此处若干行计算平均值的语句
SetTagFloat("kiln_head_T_av_last",(GetTagFloat("kiln_head_T_av_now")));
//此处若干行结转的语句
}
SetTagFloat("kilnhead_t_tmp",0); //Return-Type: BOOL
//此处若干行累计值清零的语句;
SetTagSDWord("av_shift_id",-1);
SetTagSDWord("av_shift_job",6);
SetTagBit("tmp_bit_29",1); //shift归档中.......... //班均值归档操作
}
if (GetTagSDWord("av_shift_job") !=6)
{
if (GetTagBit("tmp_bit_34")) //18:00标志
{
if (!GetTagBit("tmp_bit_30"))
{
//日均值计算
SetTagFloat("kilnhead_tav_day",(GetTagFloat("kiln_head_T_av_last")+GetTagFloat("kiln_head_T_av_now"))/2);
//此处若干行计算日均值的语句;
SetTagSDWord("av_day_id",-1); //触发归档
SetTagSDWord("av_day_job",6); //日均值归档操作
SetTagBit("tmp_bit_30",1);
}
if (GetTagSDWord("av_day_job") !=6) //日均值完成归档
{
SetTagBit("tmp_bit_34",0);
SetTagBit("tmp_bit_30",0);
}
}
SetTagBit("tmp_bit_21",0);
SetTagBit("tmp_bit_29",0);
SetTagBit("tmp_bit_18",0);
printf("av_archive is OK!");
printf("\n");
}
}
//对应过程值平均值归档
}