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

📄 taskdata1.c

📁 电力行业必备。有错的地方
💻 C
📖 第 1 页 / 共 4 页
字号:
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)	
					{
						pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_minute[i] = 0;
					}	
					else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)	
					{
						pre_hour[i] = 0;
						pre_minute[i] = RAM1_TaskDataFat[i].TimeSample[1];
					}	
									
					flag_f[i] = 1;
				}
		
				//采样
				if((pre_year[i]==cur_year)&&(pre_month[i]==cur_month)&&
					(pre_day[i]==cur_day)&&(pre_hour[i]==cur_hour)&&(pre_minute[i]==cur_minute))
				{
						temp = hex_bcd(pre_year[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart] = temp>>8;
						TaskData[RAM1_TaskDataFat[i].AddStart+1] = temp;
						temp = hex_bcd(pre_month[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+2] = temp;
						temp = hex_bcd(pre_day[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+3] = temp;
						temp = hex_bcd(pre_hour[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+4] = temp;
						temp = hex_bcd(pre_minute[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+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++;
							}
				
						}
						//计算下一次采集数据点的时标;
						//8888888888888888888要修改8888要修改8888要修改8888要修改8888要修改8888要修改8888要修改8888要修改
						//pre_day[i] += RAM1_TaskDataFat[i].IntervalSample[1]; 
						if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)	
				{
						pre_day[i] = pre_day[i]+RAM1_TaskDataFat[i].IntervalSample[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) 
										{
											pre_day[i] -= 30;
											pre_month[i]++;
										}
									}
									else 
									{
									    if(pre_day[i] == 29) 	//不闰年
									    {
											pre_day[i] -= 29;
											pre_month[i]++;
										}
									}
								}
								break;
							default:break;
						}//switch(pre_month[i])
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)	
					{
						pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_minute[i] = 0;
					}	
					else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)	
					{
						pre_hour[i] = 0;
						pre_minute[i] = RAM1_TaskDataFat[i].TimeSample[1];
					}	
				}
				
				
			}
			else if(RAM1_TaskDataFat[i].IntervalSample[0]==MON)
			{
				if(!flag_f[i])
			{
				
					if((cur_month+RAM1_TaskDataFat[i].TimeSample[1])<RAM1_TaskDataFat[i].IntervalSample[1])
					{
						pre_year[i] = cur_year-1;
						pre_month[i]= cur_month+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
					}
					else 
					{
						pre_year[i] = cur_year;
						pre_month[i]= cur_month-RAM1_TaskDataFat[i].IntervalSample[1];
					}
					
					if(RAM1_TaskDataFat[i].TimeSample[0]==MON)	
					{
						pre_day[i] = 0;
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)	
					{
						pre_day[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)	
					{
						pre_day[i] = 0;
						pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_minute[i] = 0;
					}	
					else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)	
					{
						pre_day[i] = 0;
						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_month[i]+RAM1_TaskDataFat[i].TimeSample[1])<RAM1_TaskDataFat[i].IntervalSample[1])
						{	
							pre_year[i]--;
							pre_month[i]= pre_month[i]+RAM1_TaskDataFat[i].TimeSample[1]-RAM1_TaskDataFat[i].IntervalSample[1];
						}
						else 
						{
							pre_year[i] = cur_year;
							pre_month[i]= pre_month[i]-RAM1_TaskDataFat[i].IntervalSample[1];
						}
					
						if(RAM1_TaskDataFat[i].TimeSample[0]==MON)	
						{
							pre_day[i] = 1;
							pre_hour[i] = 0;
							pre_minute[i] = 0;
						}
						else if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)	
						{
							pre_day[i] = RAM1_TaskDataFat[i].TimeSample[1];
							pre_hour[i] = 0;
							pre_minute[i] = 0;
						}
						else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)	
						{
							pre_day[i] = 1;
							pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1];
							pre_minute[i] = 0;
						}	
						else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)	
						{
							pre_day[i] = 1;
							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]==MON)	
					{
						pre_month[i] = cur_month+RAM1_TaskDataFat[i].TimeSample[1]-1;
						if(pre_month[i]>12)	pre_month[i] = 1;
						pre_year[i]++;
						pre_day[i] = 1;
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)	
					{
						pre_month[i] = cur_month;
						pre_day[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)	
					{
						pre_month[i] = cur_month;
						pre_day[i] = 1;
						pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_minute[i] = 0;
					}	
					else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)	
					{
						pre_month[i] = cur_month;
						pre_day[i] = 1;
						pre_hour[i] = 0;
						pre_minute[i] = RAM1_TaskDataFat[i].TimeSample[1];
					}	
									
					flag_f[i] = 1;
				}
		
				//采样
				if((pre_year[i]==cur_year)&&(pre_month[i]==cur_month)&&
					(pre_day[i]==cur_day)&&(pre_hour[i]==cur_hour)&&(pre_minute[i]==cur_minute))
				{
						temp = hex_bcd(pre_year[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart] = temp>>8;
						TaskData[RAM1_TaskDataFat[i].AddStart+1] = temp;
						temp = hex_bcd(pre_month[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+2] = temp;
						temp = hex_bcd(pre_day[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+3] = temp;
						temp = hex_bcd(pre_hour[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+4] = temp;
						temp = hex_bcd(pre_minute[i]);
						TaskData[RAM1_TaskDataFat[i].AddStart+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++;
							}
				
						}
						//计算下一次采集数据点的时标;
						//pre_day[i] += RAM1_TaskDataFat[i].IntervalSample[1]; 
						pre_year[i] = pre_year[i];
									
					if(RAM1_TaskDataFat[i].TimeSample[0]==MON)	
					{
						
						pre_month[i] = pre_month[i]+RAM1_TaskDataFat[i].IntervalSample[1]-1;
						if(pre_month[i]>12)	pre_month[i] = 1;
							pre_year[i]++;
						pre_day[i] = 1;
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==DAY)	
					{
						pre_month[i] = pre_month[i]+RAM1_TaskDataFat[i].IntervalSample[1]-1;
						if(pre_month[i]>12)	pre_month[i] = 1;
							pre_year[i]++;
						pre_day[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_hour[i] = 0;
						pre_minute[i] = 0;
					}
					else if(RAM1_TaskDataFat[i].TimeSample[0]==HOU)	
					{
						pre_month[i] = pre_month[i]+RAM1_TaskDataFat[i].IntervalSample[1]-1;
						if(pre_month[i]>12)	pre_month[i] = 1;
							pre_year[i]++;
						pre_day[i] = 1;
						pre_hour[i] = RAM1_TaskDataFat[i].TimeSample[1];
						pre_minute[i] = 0;
					}	
					else if(RAM1_TaskDataFat[i].TimeSample[0]==MINU)	
					{
						pre_month[i] = pre_month[i]+RAM1_TaskDataFat[i].IntervalSample[1]-1;
						if(pre_month[i]>12)	pre_month[i] = 1;
							pre_year[i]++;
						pre_day[i] = 1;
						pre_hour[i] = 0;
						pre_minute[i] = RAM1_TaskDataFat[i].TimeSample[1];
					}	
				}				
			}
		}
	}
}



/*********************************************************************************************************
** 函数名称: task_send_data
** 功能描述: 任务数据的组帧和上送;
** 输   入: 无
** 输   出: 无
********************************************************************************************************/
void task_send_data(void)
{
	//INT8U buf[1024];
	//INT8U send_flag[32];//在每个上送间隔时间内,上送标志:0,未上送,    1,已上送;
	INT16U cur_year,cur_month,cur_day,cur_week,cur_hour,cur_minute,cur_second,temp;
	//INT16U n;
	INT32U add_start;
	INT8U i;
	static INT8U send_flag[32];//在每个上送间隔时间内,上送标志:0,未上送,    1,已上送;

	INT16U num_flash,num_ram;  //上送数据在FLASH和RAM中的点数;
	
	
	
	//调试用
	for(i=0;i<64;i++)
		Send_Q[i].state = 0;
			
	
	
	for(i=0;i<32;i++)
	{
		if(RAM1_TaskDataFat[i].State)
		{
			
			//在每个上送时间点清除上送标志
			DateTimeRead(&cur_year,&cur_month,&cur_day,&cur_week,&cur_hour,&cur_minute,&cur_second);
						

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -