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

📄 main.c

📁 电力行业必备。有错的地方
💻 C
📖 第 1 页 / 共 2 页
字号:
** 功能描述: 规约任务存储空间重新分配。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void  TaskTaskMemSet(void *pdata)
{
	
	pdata = pdata;
	fat_sram1();
	while(1)
	{	
		if(Task_Set_Flag)		//有任务参数发生变化并且2分钟定时时间到
		{
			start_2m = 1;
			count_2m = 0;
			Task_Set_Flag = 0;
			//启动2分钟定时,如果不启动定时,则永远没有定时信号产生;
		}
		if(count_2m==120)	//在2分钟内没有有效任务的配置发生变化
		{
			fat_sram1();
			count_2m=0;
			start_2m=0;
		}
		OSTimeDly(20);
	}
}
/*********************************************************************************************************
** 函数名称: TaskAlarmTask
** 功能描述: 异常处理任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskAlarmTask (void *pdata)
{
	pdata = pdata;
	while(1)
	{
		OSTimeDly(100);
	}

}

/*********************************************************************************************************
** 函数名称: TaskProgmDown
** 功能描述: 程序下载处理任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskProgmDown (void *pdata)
{
	pdata = pdata;
	while(1)
	{
		OSTimeDly(100);
	}
}


/*********************************************************************************************************
** 函数名称: TaskPassDay
** 功能描述: 过日处理任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskPassDay (void *pdata)
{
	INT8U err;
	INT32U i;
	pdata = pdata;
	while(1)
	{
		OSSemPend(Timer0Sem1,0,&err);
		pass_process();
		paramback();										// add by liu 2007-10-16 参数备份
		//每日0点0分时对上日SRAM1中的任务数据清零
		for(i=0;i<128*1024;i++)	TaskData[i] = 0;
	}
}


/*********************************************************************************************************
** 函数名称: TaskPowerDown
** 功能描述: 掉电处理任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskPowerDown (void *pdata)
{
	pdata = pdata;
	while(1)
	{
		OSTimeDly(100);
	}
}

/*********************************************************************************************************
** 函数名称: TaskLcd
** 功能描述: 显示处理任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskLcd	(void *pdata)
{
	pdata = pdata;
	
	Init_Lcd();
	ClrLcd();
	BackLedOn;
	ShowAllLcd();
	
	while(1)
	{
		display();
		OSTimeDly(1000);
	}
}

/*********************************************************************************************************
** 函数名称: TaskParamChk
** 功能描述: 参数校验任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskParamChk (void *pdata)
{
	pdata = pdata;
	while(1)
	{
		OSTimeDly(100);
	}
}

/*********************************************************************************************************
** 函数名称: TaskGprsManage
** 功能描述: GPRS管理任务任务。
**           
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void	TaskGprsManage (void *pdata)
{
	uint8 len;
	uint8 count;
	uint8 i;
	uint8 di[2];
	
	uint8 buf[256];
	
	pdata = pdata;
	
	uc_logint = 150;
	di[0] = 0x89;
	di[1] = 0x02;
	if (ReadParam(0, di, buf) != 0)
	{
		uc_heartp =	BCD2HEX(buf[5]);
	}
	else
	{
		uc_heartp =	5;
	}
	uc_loginp = 3;
	
	GprsInitFlag = 1;									// 
	GprsManagPar.gprsok = 0;
	GprsManagPar.smsok  = 0;
	GprsManagPar.heartsp= 0;
	GprsManagPar.logsp  = 0;
	GprsManagPar.heartt = 0;
	GprsManagPar.logt   = 0;
	GprsManagPar.login  = 0;
	GprsManagPar.on = 0;								// 如果GPRS掉电或复位,先拆除连接
	GPRSReset();										// 复位
	while (ReadGprsBuf()==0)							// 等待返回
	{
		OSTimeDly(400);
	}
	GprsManagPar.on = 0;								// 如果GPRS掉电或复位,先拆除连接
	buf[0] = 0x14;												
	buf[1] = 0xE3;
	buf[2] = 0x01;
	len = 3;
	WriteGprsCmd(buf, len);								// 发送登出命令
	OSTimeDly(200);							
	while (ReadGprsBuf()==0)							// 等待返回
	{
		OSTimeDly(400);
	}
	count = 0;
	while (count==0)									// 此处用来检测GSM是否登录完成
	{
		buf[0] = 0x20;
		buf[1] = 0xE3;
		ReadGprsCmd(buf);
		OSTimeDly(200);
		//while ((len=ReadGprsBuf())==0);
		len = ReadGprsBuf();
		if (len!=0)
		{
			for (i=0;i<len;i++)
			{
				if (GprsCommBuf[i]==0x68)
				{
					if ((GprsCommBuf[i+7]==0x68)&&(GprsCommBuf[i+15]==0x16)&&
						(GprsCommBuf[i+10]==0x20)&&(GprsCommBuf[i+11]==0xE3))
					{
						CommFlush(COMM2);	
						signal = GprsCommBuf[i+12];
						count = 1;
						break;
					}	
				}
				else
				{
					count = 0;
					continue;
				}
			}									
		}
		OSTimeDly(200);
	}
	
	GprsParInit();									// 参数初始化
	/*		
	buf[0] = 0x1B;									// 读初始化参数
	buf[1] = 0xE3;
	ReadGprsCmd(buf);	
	OSTimeDly(400);
	len = ReadGprsBuf();
	OSTimeDly(200);
	*/
	if (GprsManagPar.on==1)								// 如果上次是非正常退出
	{
		GprsInitFlag = 0;
		WriteCpuIoStatus(IO_SEL_MODE_DATA);
		SendLogOut();									// 发送登出报文
	}
	GprsManagPar.on = 0;
	while(1)
	{
		GprsInitFlag = 0;
		WriteCpuIoStatus(IO_SEL_MODE_DATA);
		//if (GPRSIsOnline()==FALSE)
		//{
		//	if (GPRSIsOnline()==FALSE)
		//		GprsManagPar.on = 0;
		//}
		if (GprsManagPar.flag == 1)								// 如果GPRS参数变化,重新初始化
		{
			//if (GprsManagPar.on == 1)
			//{
			//	GprsInitFlag = 0;
			//	WriteCpuIoStatus(IO_SEL_MODE_DATA);
			//	SendLogOut();									// 发送登出报文
			//}
			GprsInitFlag = 1;
			if (GprsManagPar.login==1)							// 如果已经登录
			{
				buf[0] = 0x14;									// 拆除连接											
				buf[1] = 0xE3;
				buf[2] = 0x01;
				len = 3;
				WriteGprsCmd(buf, len);							// 发送登出命令
				OSTimeDly(200);							
				while (ReadGprsBuf()==0)						// 等待返回
				{
					OSTimeDly(200);
				}
			}
			
			GprsParInit();										// 重新初始化
						
			GprsManagPar.flag = 0;	
			GprsManagPar.login= 0;								// 登出
			GprsManagPar.on = 0;
			GprsManagPar.heartt = 0;
			GprsInitFlag = 0;
			
			if (GprsManagPar.logt<uc_logint)					// 未超过登录次数,进行一次登录
			{
				GprsInitFlag = 1;
				buf[0] = 0x14;												
				buf[1] = 0xE3;
				buf[2] = 0x00;
				len = 3;
				WriteGprsCmd(buf, len);						// 发送登录命令
				while (ReadGprsBuf()==0)
				{
					OSTimeDly(100);
				}
				OSTimeDly(400);
				GprsInitFlag = 0;
				//while (GPRSIsOnline()==FALSE);
				//if (GPRSIsOnline()==TRUE)
				{
					WriteCpuIoStatus(IO_SEL_MODE_DATA);
					SendLogIn();							// 发送登录报文
					GprsManagPar.on = 1;					// GPRS在线	
					GprsManagPar.login = 1;	
				}
										
				GprsManagPar.logt ++;
				GprsManagPar.logsp = 0; 
				GprsManagPar.heartsp = 0;															
			}
		}
		
		if ((GprsManagPar.gprsok==1)&&
			(GprsManagPar.on==0))								// 如果GPRS初始化成功但不在线
		{
			if (GprsManagPar.logt == 0)							// 登录次数为0
			{
				GprsInitFlag = 1;
				buf[0] = 0x14;												
				buf[1] = 0xE3;
				buf[2] = 0x00;
				len = 3;
				WriteGprsCmd(buf, len);							// 发送登录命令
				while (ReadGprsBuf()==0)
				{
					OSTimeDly(100);
				}
				OSTimeDly(400);
				GprsInitFlag = 0;
				//while (GPRSIsOnline()==FALSE);
				//if (GPRSIsOnline()==TRUE)
				{
					GprsManagPar.on = 1;						// GPRS在线	
					WriteCpuIoStatus(IO_SEL_MODE_DATA);
					SendLogIn();								// 发送登录报文
					GprsManagPar.login = 1;						// 登录
				}
				
				GprsManagPar.logt ++;
				GprsManagPar.logsp = 0; 	
				GprsManagPar.heartsp = 0;	
										
			}
			else if (GprsManagPar.logt<uc_logint)				// 登录次数小于最大登录次数
			{	
				if (GprsManagPar.logsp >= uc_loginp*60)			// 达到登陆间隔
				{
					GprsInitFlag = 1;
					buf[0] = 0x14;								// 拆除连接											
					buf[1] = 0xE3;
					buf[2] = 0x01;
					len = 3;
					WriteGprsCmd(buf, len);						// 发送登出命令
					OSTimeDly(200);								
					while (ReadGprsBuf()==0)					// 等待返回
					{
						OSTimeDly(200);
					}
				
					buf[0] = 0x14;												
					buf[1] = 0xE3;
					buf[2] = 0x00;
					len = 3;
					WriteGprsCmd(buf, len);						// 发送登录命令
					while (ReadGprsBuf()==0)
					{
						OSTimeDly(100);
					}
					OSTimeDly(400);
					GprsInitFlag = 0;
					//while (GPRSIsOnline()==FALSE);
					//if (GPRSIsOnline()==TRUE)
					{
						WriteCpuIoStatus(IO_SEL_MODE_DATA);
						SendLogIn();							// 发送登录报文
						GprsManagPar.on = 1;					// GPRS在线	
						GprsManagPar.login = 1;	
					}
					
					GprsManagPar.logt ++;
					GprsManagPar.logsp = 0; 
					GprsManagPar.heartsp = 0;															
				}
			}
			else
			{
				;//GprsManagPar.login = 0;
			}									
		}
			
		if ((GprsManagPar.on==1)&&(uc_heartp!=0))				// 如果心跳周期为0,则不采用心跳	
		{
			if (GprsManagPar.heartt<3)							// 如果心跳未应答次数小于3
			{
				if (GprsManagPar.heartsp>=uc_heartp*60)    		// 如果心跳周期到,发送心跳报文
				
				{
					GprsInitFlag = 0;
					WriteCpuIoStatus(IO_SEL_MODE_DATA);			// 发送心跳报文
					SendHeart();
					GprsManagPar.heartt ++;						// 此参数在规约解析任务中收到心跳应答报文清0
					GprsManagPar.heartsp = 0;
				}	
			}
			else
			{
				GprsInitFlag = 0;
				WriteCpuIoStatus(IO_SEL_MODE_DATA);
				SendLogOut();									// 发送登出报文
				
				GprsInitFlag = 1;
				buf[0] = 0x14;									// 拆除连接											
				buf[1] = 0xE3;
				buf[2] = 0x01;
				len = 3;
				WriteGprsCmd(buf, len);							// 发送登出命令
				OSTimeDly(200);								
				while (ReadGprsBuf()==0);						// 等待返回
				{
					OSTimeDly(100);
				}
				GprsInitFlag = 0;
				GprsManagPar.on = 0;
				GprsManagPar.login = 0;
				GprsManagPar.heartt = 0;
				GprsManagPar.logsp = 0; 
				
				if (GprsManagPar.logt<uc_logint)				// 未超过登录次数
				{
					GprsInitFlag = 1;
					buf[0] = 0x14;												
					buf[1] = 0xE3;
					buf[2] = 0x00;
					len = 3;
					WriteGprsCmd(buf, len);						// 发送登录命令
					while (ReadGprsBuf()==0)
					{
						OSTimeDly(100);
					}
					OSTimeDly(400);
					GprsInitFlag = 0;
					//while (GPRSIsOnline()==FALSE);
					//if (GPRSIsOnline()==TRUE)
					{
						WriteCpuIoStatus(IO_SEL_MODE_DATA);		
						SendLogIn();							// 发送登录报文
						GprsManagPar.on = 1;					// GPRS在线	
						GprsManagPar.login = 1;	
					}
					GprsManagPar.logt ++;
					GprsManagPar.logsp = 0; 
					GprsManagPar.heartsp = 0;															
				}
			}
		}
		OSTimeDly(200);											// 1s
	}
}

/*********************************************************************************************************
** 函数名称: SystemInit()
** 功能描述: 系统初始化
**
** 输 入: 
**
** 输 出: 
**         
** 全局变量: 
** 调用模块:
**
** 作 者: 
** 日 期: 2007-09-20
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SystemInit(void)
{
	uint32	i;
	uint8	*p,*pp;
	//static uint8 dd1,dd2;
	//uint8	id[2];
	//uint32	offset;
	//uint8	attr;
	//uint8	bnum;
	
	// 默认参数初始化
	SendFseq = 0x01;
	CommOverTimes = 0;											// 串口超时
	CommOverFlag  = 0;
	
	//id[0] = 0x00;
	//id[1] = 0x03;
	//ParamIndex(8, id, &offset, &attr, &bnum);
	//pp = &ParamInSram.Term_Par.X8010[0] + offset;
	//p = &ParamInSram.Term_Par.X8900[0];						// 测试用
	//p= &ParamInSram.Mp_Par[8].X0003[0];
	//dd1 = *p;
	//dd2 = *pp;
	p = &ParamIn.Term_Par.X8010[0];								// 将掉电RAM中参数恢复到内存
	pp= &ParamInSram.Term_Par.X8010[0];
	for (i=0;i<sizeof(ParamInSram);i++)
	{
		*p = *pp;
		p  ++;
		pp ++;
	}
	
	p = &ParamInSram.Term_Par.X8016[0];							// 初始化终端地址
	for (i=0;i<2;i++)
	{
		TermAddr[1-i] = *p;
		p ++;
	}
	for (i=0;i<2;i++)
	{
		TermAddr[3-i] = *p;
		p ++;
	}
	
	p = &ParamInSram.Term_Par.X8021[0]; 						// 初始化低级权限密码
	for (i=0;i<3;i++)
	{
		UserCode[2-i] = *p;
		p ++;
	}
	
	p = &ParamInSram.Term_Par.X8022[0]; 						// 初始化高级权限密码
	for (i=0;i<3;i++)
	{
		AdminCode[2-i] = *p;
		p ++;
	}
	
	OSTimeSet(0);												// 将系统时钟初始化为0
}

⌨️ 快捷键说明

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