⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 taskdata.c

📁 电力行业必备。有错的地方
💻 C
📖 第 1 页 / 共 5 页
字号:
						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 + -