📄 taskdata.c
字号:
j_f[i]++;
}//while(pre_day[i]!=cur_day)
////由历史数据空间中有效数据的时标向后推到当日零点之前的最后一个有效数据点时标;
////从而计算出当日的第一点数据的时标;
temp = pre_minute[i]+RAM1_TaskDataFat[i].IntervalSample[1];
pre_minute[i] = temp%60;
pre_hour[i] += temp/60;
if(pre_hour[i]>24)
{
pre_hour[i] = 0;
pre_day[i] += 1;
switch(pre_month[i])
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
{
if(pre_day[i]==32)
{
pre_day[i]=1;
pre_month[i]++;
}
}
break;
case 12:{
if(pre_day[i]==32)
{
pre_day[i]=1;
pre_month[i]=1;
pre_year[i]++;
}
}
break;
case 4:
case 6:
case 9:
case 11:
{
if(pre_day[i]==31)
{
pre_day[i]=1;
pre_month[i]++;
}
}
break;
case 2:{
if(((pre_year[i]%4==0)&&(pre_year[i]%100!=0))||(pre_year[i]%400==0)) //闰年
{
if(pre_day[i] == 30)
{
pre_day[i]=1;
pre_month[i]++;
}
}
else
{
if(pre_day[i] == 29) //不闰年
{
pre_day[i]=1;
pre_month[i]++;
}
}
}
break;
default:break;
}//switch(pre_month[i])
}
}//if(!j_f[i]) else
flag_f[i] = 1;
}//if(!flag_f[i])
//对SRAM1空间进行处理
if(!flag_r[i])
{
//如果某点数据空间的时标为0,表示该点未存放数据;
while((TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)])&&
(TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+1])&&
(TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+2])&&
(TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+3]))
{
j_r[i]++;
if(j_r[i]>RAM1_TaskDataFat[i].DayNum) break;
//如果日期不是当前日,则清空当日的数据存储空间;
if(cur_day != TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+3])
{
for(m=0;m<128*1024;m++)
TaskData[m] = 0;
j_r[i] = 0;
break;
}
}
flag_r[i] = 1;
}
//j[i]的值表示第一个为有效数据的累计数据点数;
if(cur_day == pre_day[i])
{
//由于某种原因一些数据点没有采集到,填充0xff;
while(((cur_hour*60+cur_minute)-(pre_hour[i]*60+pre_minute[i]))>(RAM1_TaskDataFat[i].IntervalSample[1]))
{
temp = hex_bcd(pre_year[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)] = temp>>8;
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+1] = temp;
temp = hex_bcd(pre_month[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+2] = temp;
temp = hex_bcd(pre_day[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+3] = temp;
temp = hex_bcd(pre_hour[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+4] = temp;
temp = hex_bcd(pre_minute[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+5] = temp;
for(m=6;m<(RAM1_TaskDataFat[i].ByteNum_p);m++)
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+m] = 0xff;
temp = pre_minute[i]+RAM1_TaskDataFat[i].IntervalSample[1];
pre_minute[i] = temp%60;
pre_hour[i] = pre_hour[i]+temp/60;
j_r[i]++;
}
//在采样周期内,而且该点没有采样
if(((cur_hour*60+cur_minute)-(pre_hour[i]*60+pre_minute[i]))<(RAM1_TaskDataFat[i].IntervalSample[1]))
//某点的时标为0,表示此点数据没有采样;
if(!TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)])
{
//采集当时的实时数据;
temp = hex_bcd(pre_year[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)] = temp>>8;
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+1] = temp;
temp = hex_bcd(pre_month[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+2] = temp;
temp = hex_bcd(pre_day[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+3] = temp;
temp = hex_bcd(pre_hour[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+4] = temp;
temp = hex_bcd(pre_minute[i]);
TaskData[RAM1_TaskDataFat[i].AddStart+j_r[i]*(RAM1_TaskDataFat[i].ByteNum_p)+5] = temp;
lenth = 0;
for(m=0;m<(RAM1_TaskDataFat[i].DINum);m++)
{
for(n=0;n<(RAM1_TaskDataFat[i].LenDI[m]);n++)
{
//补全以前的没有采集的数据并填充0xFF;
//TaskData[(RAM1_TaskDataFat[i].AddStart)+lenth+6] = 0xff;
TaskData[(RAM1_TaskDataFat[i].AddStart)+lenth+(RAM1_TaskDataFat[i].ByteNum_p)*j_r[i]+6] =
*((volatile unsigned char *)((RAM1_TaskDataFat[i].OutAdd[m])+n));
lenth++;
}
}
//计算下一次采集数据点的时标;
temp = pre_minute[i]+RAM1_TaskDataFat[i].IntervalSample[1];
pre_minute[i] = temp%60;
pre_hour[i] = pre_hour[i]+temp/60;
j_r[i]++;
}
}
else //如果日期不等,则要补全FLASH1中的数据和RAM1中的数据
{
}
}//if((RAM1_TaskDataFat[i].IntervalSample[0]==HOU)|(RAM1_TaskDataFat[i].IntervalSample[0]==HOU))
else if(RAM1_TaskDataFat[i].IntervalSample[0]==DAY) //采样间隔单位为 日
{
//在复位和重新分配存储空间时,对FLASH1空间进行处理;
if(!flag_f[i])
{
//获得历史数据区的最后一个点的时标
if((cur_day+RAM1_TaskDataFat[i].TimeSample[1])<RAM1_TaskDataFat[i].IntervalSample[1])
{
pre_month[i] = cur_month-1;
switch(cur_month)
{
case 1:{
pre_day[i] = 31+cur_day+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
// day = pre_day[i];
pre_year[i] = cur_year-1;
// year = pre_year[i];
}
break;
case 2:
case 4:
case 6:
case 8:
case 9:
case 11:pre_day[i] = 31+cur_day+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
break;
case 3:{
if(((cur_year%4==0)&&(cur_year%100!=0))||(cur_year%400==0)) //闰年
pre_day[i] = 29+cur_day+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
else pre_day[i] = 28+cur_day+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1]; //不闰年
}
break;
case 5:
case 7:
case 10:
case 12:pre_day[i] = 30+cur_day+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
break;
default:break;
}
}
else
{
pre_year[i] = cur_year;
pre_month[i]= cur_month;
pre_day[i] = cur_day+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];;
}
if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)
{
pre_hour[i] = 0;
pre_minute[i] = 0;
}
else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)
{
pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1]/60;
pre_minute[i] = 0;
}
else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)
{
pre_hour[i] = 0;
pre_minute[i] = RAM1_TaskDataFat[i].TimeSample[1];
}
//写入零点前第一点数据的时标;
temp = hex_bcd(pre_year[i]);
buf[0] = temp>>8;
buf[1] = temp;
temp = hex_bcd(pre_month[i]);
buf[2] = temp;
temp = hex_bcd(pre_day[i]);
buf[3] = temp;
temp = hex_bcd(pre_hour[i]);
buf[4] = temp;
temp = hex_bcd(pre_minute[i]);
buf[5] = temp;
ATMELWrite((RAM1_TaskDataFat[i].AddStartFlash+
((RAM1_TaskDataFat[i].NumTotal)-1)*(RAM1_TaskDataFat[i].ByteNum_p)),
6,
buf);//长度要为偶数;
//零点之前除第一点外的所有点
for(m=0;m<(RAM1_TaskDataFat[i].NumTotal-1);m++)
{
if((pre_day[i]+RAM1_TaskDataFat[i].TimeSample[1])<RAM1_TaskDataFat[i].IntervalSample[1])
{
switch(pre_month[i])
{
case 1:{
pre_day[i] = 31+pre_day[i]+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
pre_year[i] = pre_year[i]-1;
}
break;
case 2:
case 4:
case 6:
case 8:
case 9:
case 11:pre_day[i] = 31+pre_day[i]+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
break;
case 3:{
if(((cur_year%4==0)&&(cur_year%100!=0))||(cur_year%400==0)) //闰年
pre_day[i] = 29+pre_day[i]+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
else pre_day[i] = 28+pre_day[i]+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1]; //不闰年
}
break;
case 5:
case 7:
case 10:
case 12:pre_day[i] = 30+pre_day[i]+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
break;
default:break;
}
pre_month[i] -= 1;
}
else
{
pre_day[i] -= RAM1_TaskDataFat[i].IntervalSample[1];
if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)
{
pre_hour[i] = 0;
pre_minute[i] = 0;
}
else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)
{
pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1]/60;
pre_minute[i] = 0;
}
else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)
{
pre_hour[i] = 0;
pre_minute[i] = RAM1_TaskDataFat[i].TimeSample[1];
}
}
//写入零点之前除第一点外的所有点数据的时标;
temp = hex_bcd(pre_year[i]);
buf[0] = temp>>8;
buf[1] = temp;
temp = hex_bcd(pre_month[i]);
buf[2] = temp;
temp = hex_bcd(pre_day[i]);
buf[3] = temp;
temp = hex_bcd(pre_hour[i]);
buf[4] = temp;
temp = hex_bcd(pre_minute[i]);
buf[5] = temp;
ATMELWrite((RAM1_TaskDataFat[i].AddStartFlash+
(RAM1_TaskDataFat[i].NumTotal-m-2)*(RAM1_TaskDataFat[i].ByteNum_p)),
6,
buf);//长度要为偶数;
}
pre_year[i] = cur_year;
if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)
{
pre_day[i] = cur_day+RAM1_TaskDataFat[i].TimeSample[1];
switch(pre_month[i])
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:{
if(pre_day[i]>=32)
{
pre_day[i] -= 32;
pre_month[i]++;
}
}
break;
case 12:{
if(pre_day[i]==32)
{
pre_day[i] -= 32;
pre_month[i]=1;
pre_year[i]++;
}
}
break;
case 4:
case 6:
case 9:
case 11:
{
if(pre_day[i]==31)
{
pre_day[i] -= 31;
pre_month[i]++;
}
}
break;
case 2:{
if(((pre_year[i]%4==0)&&(pre_year[i]%100!=0))||(pre_year[i]%400==0)) //闰年
{
if(pre_day[i] == 30)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -