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

📄 9311cfg.c

📁 详细介绍了arm7-at91r40008,的开发全过程
💻 C
📖 第 1 页 / 共 4 页
字号:
}

/*------------------------------------------------------------------*/
/*函数名称:SetDzfd()												*/
/*函数功能:设置故障检测文件并写入FALSH,重新启动					*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
#ifndef BOOT_PROG
BOOL SetDzfd(INT8U FDIndex, struct pdz_t* pData)
{
	BOOL	flag = FALSE;
	INT16U	size, rc, crc;	
	INT8U	dd[3072];	//106//1590
	struct FileInfo info;	

	struct FILEHEADER_t *filehead;
	struct pdz_t *pdz;
	
	struct pconfig_t *pconfig;
	struct ppt_t *ppt;
	struct pfeeder_t *pfeeder;
	

	memset(dd, 0, 3072);
	strcpy (info.Name, "dz");
	strcat (info.Name, (char*)MyCfg.Fd[FDIndex].DZname);
	strcat (info.Name, ".dat");
	rc = ReadParaFile(info.Name, dd, MAXFILELEN, TRUE);
	if (rc == FOPERROR)
		return (FALSE);
	
	filehead = (struct FILEHEADER_t *)dd;
	pdz = (struct pdz_t *)(filehead + 1);
	
	//修改
	pdz->FACfg = pData->FACfg;
	pdz->OverILimit = pData->OverILimit;
	pdz->OverIConfTimeLimit = pData->OverIConfTimeLimit;
	pdz->ShortILimit = pData->ShortILimit;
	pdz->ShortIConfTimeLimit = pData->ShortIConfTimeLimit;
	
	size = filehead->Size - 2;
	crc = WHCRC(dd, size);
	dd[size] = crc & 0xFF;
	dd[size+1] = (crc>>8) & 0xFF;
	size += 2;
	
	info.Length = size;
	rc = FWrite(dd, 0x8000, size, &info);
	if (rc != size)
		return (FALSE);
		
	memset(dd, 0, 3072);
	rc = ReadParaFile("myconfig.dat", dd, MAXFILELEN, TRUE);
	if (rc == FOPERROR)
		return (FALSE);

	filehead = (struct FILEHEADER_t *)dd;
	pconfig = (struct pconfig_t *)(filehead + 1);
	ppt = (struct ppt_t *)(pconfig + 1);
	pfeeder = (struct pfeeder_t *)(ppt + pconfig->ptnum);

	
	if (pfeeder[FDIndex].control & FAULTD_ENABLE)
		flag = TRUE;
		
	if (pData->FACfg & (FAC_SHORTD | FAC_OVERD))
	{	
		if (!flag)
			pfeeder[FDIndex].control |= FAULTD_ENABLE;
			
		//目前禁止远程启动故障检测
		flag = TRUE;
	}
	else
	{
		if (flag)
		{
			pfeeder[FDIndex].control &= (~FAULTD_ENABLE);
			flag = FALSE;
		}
	}
	
	if (!flag)	//是否需要修改myconfig
	{
		size = filehead->Size - 2;
		crc = WHCRC(dd, size);
		dd[size] = crc & 0xFF;
		dd[size+1] = (crc>>8) & 0xFF;
		size += 2;
		
		strcpy (info.Name, "myconfig.dat");
		info.Length = size;
		rc = FWrite(dd, 0x8000, size, &info);
		if (rc != size)
			return (FALSE);
	}
	
	SysSchedul();
	timer_init();
	at91_irq_open ( WDI_ID, INTWATCHDOG, AIC_SRCTYPE_INT_EDGE_TRIGGERED, Tmr_TickISR );	
	
	ErrorInfo(OSPrioCur, "重新设置保护定值成功...");
	ResetDelay = 10;		//5S后重新启动
	return (TRUE);

}
#endif

/*------------------------------------------------------------------*/
/*函数名称:SetProtect()											*/
/*函数功能:设置保护定值调用SetDzfd()								*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
#ifndef BOOT_PROG
BOOL SetProtect(struct Protect_t* pData)
{
	BOOL	rc;
	INT16U	size;
	struct pdz_t	dz;
	
	if (pData->FDIndex >= FDNum)
		return (FALSE);	

	size = sizeof(struct pdz_t);	
	memset ((INT8U*)&dz, 0, size);
	memcpy((INT8U*)&dz, &MyCfg.Fd[pData->FDIndex].FACfg, size - sizeof(unsigned short));
	
	if (pData->FShort == PROTENBLE)
	{
		dz.FACfg |= FAC_SHORTD;
		dz.ShortILimit = pData->VShort;
		dz.ShortIConfTimeLimit = pData->TShort;
	}
	else if (pData->FShort == PROTFORBID)
	{
		dz.FACfg &= (~FAC_SHORTD);
	}
	else
		return (FALSE);	
	
	if (pData->FOver == PROTENBLE)
	{
		dz.FACfg |= FAC_OVERD;
		dz.OverILimit = pData->VOver;
		dz.OverIConfTimeLimit = pData->TOver;
	}
	else if (pData->FOver == PROTFORBID)
	{
		dz.FACfg &= (~FAC_OVERD);
	}
	else
		return (FALSE);	
	
	
	if (pData->BHTZ == 0xCC)
	{
		dz.FACfg |= FAC_OVER_TRIP;
	}
	else if (pData->BHTZ == 0x33)
	{
		dz.FACfg &= (~FAC_OVER_TRIP);
	}
	
	if (pData->CHZ == 0xCC)
	{
		dz.FACfg |= FAC_RECLOSE;
	}
	else if (pData->CHZ == 0x33)
	{
		dz.FACfg &= (~FAC_RECLOSE);
	}

	rc = SetDzfd(pData->FDIndex, &dz);

	return (rc);	
}
#endif

/*------------------------------------------------------------------*/
/*函数名称:GetProtect()											*/
/*函数功能:读取保护定值											*/
/*输入说明:FDIndex:馈线号,从0开始									*/
/*输出说明:成功返回保护定值,TURE									*/
/*------------------------------------------------------------------*/
#ifndef BOOT_PROG
BOOL GetProtect(struct Protect_t* pData, INT16U FDIndex)
{
	
	if (FDIndex >= FDNum)
		return (FALSE);
		
	pData->FDIndex = FDIndex;
	if (MyCfg.Fd[FDIndex].FACfg & FAC_SHORTD)
	{
		pData->FShort = PROTENBLE;
	}
	else
	{
		pData->FShort = PROTFORBID;
	}
	pData->VShort = MyCfg.Fd[FDIndex].ShortILimit;
	pData->TShort = MyCfg.Fd[FDIndex].ShortIConfTimeLimit;
	
	if (MyCfg.Fd[FDIndex].FACfg & FAC_OVERD)
	{	
		pData->FOver = PROTENBLE;
	}
	else
	{
		pData->FOver = PROTFORBID;
	}
	pData->VOver = MyCfg.Fd[FDIndex].OverILimit;
	pData->TOver = MyCfg.Fd[FDIndex].OverIConfTimeLimit;
	
	if (MyCfg.Fd[FDIndex].FACfg & FAC_OVER_TRIP)
	{
		pData->BHTZ = 0xCC;
	}
	else
	{
		pData->BHTZ = 0x33;
	}
	
	if (MyCfg.Fd[FDIndex].FACfg & FAC_RECLOSE)
	{
		pData->CHZ = 0xCC;
	}
	else
	{
		pData->CHZ = 0x33;
	}
	
	return (TRUE);
}
#endif

/*------------------------------------------------------------------*/
/*函数名称:SetDefMyConfig()										*/
/*函数功能:设置默认参数											*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
void SetDefMyConfig(void)
{
	INT16U	i;
	
	MyCfg.Addr = 0x0001;
	MyCfg.Yxcyc = 10;
	if (TGSH)
	{	
		MyCfg.AINum = 26;
		MyCfg.BINum = 16;
		MyCfg.BONum = 6;
		MyCfg.FDNum = 2;
	}
	else
	{
		MyCfg.AINum = 13;
		MyCfg.BINum = 8;
		MyCfg.BONum = 3;
		MyCfg.FDNum = 1;		
		
	}
	
	if ((PORTCFG & 0x07) == 0x00)
	{
		MyCfg.lan1 = 0x01;
		MyCfg.lan1_ip = 0xC0A8907D;	//192.168.144.125
		MyCfg.lan1_subnet_mask = 0xFFFFFFFF;
	}
	if ((PORTCFG & 0x70) == 0x00)
	{
		MyCfg.lan2 = 0x01;
		MyCfg.lan2_ip = 0xC0A8907D;
		MyCfg.lan2_subnet_mask = 0xFFFFFFFF;
	}
 
	MyCfg.Ai = malloc (MyCfg.AINum * sizeof(struct AICfg_t));
	MyCfg.Bi = malloc (MyCfg.BINum * sizeof(struct BICfg_t));
	MyCfg.Bo = malloc (MyCfg.BONum * sizeof(struct BOCfg_t));
	MyCfg.Fd = malloc (MyCfg.FDNum * sizeof(struct FDCfg_t));
	if (!(MyCfg.Ai && MyCfg.Bi && MyCfg.Bo && MyCfg.Fd))
	{
		ErrorInfo(ROOTID, "创建参数设置失败");
		return;
	}
	else
	{
		memset (MyCfg.Ai, 0, MyCfg.AINum * sizeof(struct AICfg_t));
		memset (MyCfg.Bi, 0, MyCfg.BINum * sizeof(struct BICfg_t));
		memset (MyCfg.Bo, 0, MyCfg.BONum * sizeof(struct BOCfg_t));
		memset (MyCfg.Fd, 0, MyCfg.FDNum * sizeof(struct FDCfg_t));
	}	
	if (MyCfg.AINum)
	{
		for (i=0; i<MyCfg.AINum; i++)
		{
			MyCfg.Ai[i].Xs1 = 1000;
			MyCfg.Ai[i].Xs2 = 1000;
			MyCfg.Ai[i].ToZero = 10;
			MyCfg.Ai[i].Flag = 0;
			MyCfg.Ai[i].UpperLimitYxNo = 0;
			MyCfg.Ai[i].UnderLimitYxNo = 0;
			MyCfg.Ai[i].UpperLimit = 0;
			MyCfg.Ai[i].UnderLimit = 0;
		}
	}
	else
		MyCfg.Ai = NULL;
	
	if (MyCfg.BINum)
	{
		for (i=0; i<MyCfg.BINum; i++)
		{
			MyCfg.Bi[i].Mode = 0x0D;
			MyCfg.Bi[i].DTime = 10;
		}
	}
	else
		MyCfg.Bi = NULL;
		
	if (MyCfg.BONum)
	{
		for (i=0; i<MyCfg.BONum; i++)
		{
			MyCfg.Bo[i].ArmTime = 3000;
			MyCfg.Bo[i].OnTime = 180;
		}
	}
	else
		MyCfg.Bo = NULL;
	
	if (MyCfg.FDNum)
	{
		for (i=0; i<MyCfg.FDNum; i++)
		{
			MyCfg.Fd[i].Control = 0;
			MyCfg.Fd[i].Yxzt = 0 + 8*i;
			MyCfg.Fd[i].Yxzt2 = 0 + 8*i;
			MyCfg.Fd[i].Yxcn = 1 + 8*i;
			MyCfg.Fd[i].FaultBI = 0 + 8*i;
			MyCfg.Fd[i].YkH = 1 + 3*i;
			MyCfg.Fd[i].YkF = 1 + 3*i;
		}
	}
	else
		MyCfg.Fd = NULL;	

}

/*------------------------------------------------------------------*/
/*函数名称:SetDefBase()											*/
/*函数功能:创建默认数据库											*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
void SetDefBase(void)
{
	INT8U	err;
	INT16U	j;
	
	if (!SysCfg.DBAllNum)
	{
		SysCfg.DBAllNum = 1;
		SysCfg.PortNum = 1;

		SysPorts = (struct SysPort*)malloc(SysCfg.PortNum * sizeof (struct SysPort));
		DBCfgs = (struct DBConfig*)malloc(sizeof (struct DBConfig));
		DBInfos = (struct DBInitInfo*)malloc(sizeof (struct DBInitInfo));
		if (!(SysPorts && DBCfgs && DBInfos))
		{
			ErrorInfo(ROOTID, "创建数据库失败901");
			return;		//chongqi?
		}
		else
		{
			memset (SysPorts, 0, SysCfg.PortNum * sizeof (struct SysPort));
			memset (DBCfgs, 0, sizeof (struct DBConfig));
			memset (DBInfos, 0, sizeof (struct DBInitInfo));
		}

		SysPorts[0].PortID = SELFPORT;
	
		for (j=0; j<SysCfg.PortNum; j++)
		{
			SysPorts[j].DevNum = 1;
			SysPorts[j].DBCfgs = &DBCfgs[0];
			SysPorts[j].CommQ =	OSQCreate(&MsgQ[j*10], 10);
			SysPorts[j].Event = OSFlagCreate(0x00, &err);
			if (err != OS_NO_ERR)
				ErrorInfo(OSPrioCur, "数据库发送失败260");
		}
	}
	
	DBInfos[0].DevID = ROOTID;
	DBInfos[0].PortID = SELFPORT;
	DBInfos[0].Name = 0x9311;
	strcpy (DBInfos[0].ParaName, "9311");

	
	DBCfgs[0].Address = 0x01;
	DBCfgs[0].MAddress = 0x01;
	DBCfgs[0].YCNum = 28;
	DBCfgs[0].YXNum = 49;
	DBCfgs[0].YKNum = 12;
	DBCfgs[0].DDNum = 0;
	DBCfgs[0].OtherInfoLen = 32;
	DBCfgs[0].OtherInfoNum = 0;
	DBCfgs[0].SoftBINum = 0;
	DBCfgs[0].DHardBINum = 0;
	DBCfgs[0].EVSBINum = 0;
	DBCfgs[0].SControl = 0;

	if (DBCfgs[0].YCNum)
	{
		DBCfgs[0].Info.Real.pAI = malloc (DBCfgs[0].YCNum * sizeof(struct RealAI_t));
		if (DBCfgs[0].Info.Real.pAI)
		{
			for (j=0; j<DBCfgs[0].YCNum; j++)
			{
				DBCfgs[0].Info.Real.pAI[j].a = 1000;
				DBCfgs[0].Info.Real.pAI[j].b = 1000;
				DBCfgs[0].Info.Real.pAI[j].Control = 0;
				DBCfgs[0].Info.Real.pAI[j].Index[0] = DEFINDEXNO;
				DBCfgs[0].Info.Real.pAI[j].Index[1] = DEFINDEXNO;
			}
		}
	}
	else
		DBCfgs[0].Info.Real.pAI = NULL;
	
	if (DBCfgs[0].YXNum)
	{
		DBCfgs[0].Info.Real.pBI = malloc (DBCfgs[0].YXNum * sizeof(struct RealBI_t));
		if (DBCfgs[0].Info.Real.pBI)
		{
			for (j=0; j<DBCfgs[0].YXNum; j++)
			{
				DBCfgs[0].Info.Real.pBI[j].Control = 0;
				DBCfgs[0].Info.Real.pBI[j].Index[0] = DEFINDEXNO;
				DBCfgs[0].Info.Real.pBI[j].Index[1] = DEFINDEXNO;
			}
		}
	}
	else
		DBCfgs[0].Info.Real.pBI = NULL;
		
	if (DBCfgs[0].YKNum)
	{
		DBCfgs[0].Info.Real.pBO = malloc (DBCfgs[0].YKNum * sizeof(struct RealBO_t));
		if (DBCfgs[0].Info.Real.pBO)
		{
			for (j=0; j<DBCfgs[0].YKNum; j++)
			{
				DBCfgs[0].Info.Real.pBO[j].ID = j/2+1;
				DBCfgs[0].Info.Real.pBO[j].Status = 0x01<<(j%2);
				DBCfgs[0].Info.Real.pBO[j].Index[0] = DEFINDEXNO;
				DBCfgs[0].Info.Real.pBO[j].Index[1] = DEFINDEXNO;
				DBCfgs[0].Info.Real.pBO[j].Flag = 0;
				DBCfgs[0].Info.Real.pBO[j].DevID = DEFINDEXNO;
			}
		}
	}
	else
		DBCfgs[0].Info.Real.pBO = NULL;

	if (DBCfgs[0].DDNum)
	{
		DBCfgs[0].Info.Real.pDD = malloc (DBCfgs[0].DDNum * sizeof(struct RealDD_t));
		if (DBCfgs[0].Info.Real.pDD)
		{
			for (j=0; j<DBCfgs[0].DDNum; j++)
			{
				DBCfgs[0].Info.Real.pDD[j].Control = 0;
				DBCfgs[0].Info.Real.pDD[j].a = 1000;
				DBCfgs[0].Info.Real.pDD[j].b = 1000;
				DBCfgs[0].Info.Real.pDD[j].OrgValue = 0;
				DBCfgs[0].Info.Real.pDD[j].Index[0] = DEFINDEXNO;
				DBCfgs[0].Info.Real.pDD[j].Index[1] = DEFINDEXNO;
			}
		}
	}
	else
		DBCfgs[0].Info.Real.pDD = NULL;

}


/*------------------------------------------------------------------*/
/*函数名称:GetDevIDOfName()										*/
/*函数功能:通过设备名获取设备号									*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
INT16U GetDevIDOfName(INT32U Name)
{
	INT16U	i;
	
	for (i=0; i<SysCfg.DBAllNum; i++)
	{
		if (DBInfos[i].Name == Name)
			return (DBInfos[i].DevID);
	}
	
	return (0);
}

/*------------------------------------------------------------------*/
/*函数名称:GetNameofDevID()										*/
/*函数功能:通过设备号获取设备名									*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
INT32U GetNameofDevID(INT16U DevID)
{
	INT16U	i;
	
	for (i=0; i<SysCfg.DBAllNum; i++)
	{
		if (DBInfos[i].DevID == DevID)
			return (DBInfos[i].Name);
	}
	
	return (0);
}

⌨️ 快捷键说明

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