📄 taskdata1.c
字号:
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 + -