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

📄 9311cfg.c

📁 详细介绍了arm7-at91r40008,的开发全过程
💻 C
📖 第 1 页 / 共 4 页
字号:
		case IEC101_2002SEC:
			num = sizeof (struct PSec101_2002Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;
		
		case IEC101_2002PRI:
			num = sizeof (struct PPri101Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;
			
		case IEC104DRAFTSEC:
			num = sizeof (struct PSec104Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;
		
		case IEC104DRAFTPRI:
			num = sizeof (struct PPri104Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;
		
		case IEC104SEC:
			num = sizeof (struct PSec104Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;
		
		case IEC104PRI:
			num = sizeof (struct PPri104Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;	
			
		case DLT645PRI:
			num = sizeof (struct PPri645Pad);
			PortInfo[i-1].pPad = malloc (num);
			break;		
			
		default:
			PortInfo[i-1].pPad = NULL;
	}
	
	if (PortInfo[i-1].pPad != NULL)
		memcpy (PortInfo[i-1].pPad, (INT8U*)(filehead + 1), num);

}


/*------------------------------------------------------------------*/
/*函数名称:GetDzfd()												*/
/*函数功能:读取故障检测配置文件									*/
/*输入说明:FDNumber--馈线号;pTmpBuf--内存区						*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
void GetDzfd(INT8U FDNumber, INT8U* pTmpBuf)
{
	char filename[SYSINFOLEN];
	INT16U	size, rc;
	struct FILEHEADER_t *filehead;
	struct pdz_t *pdz;
	
	filehead = (struct FILEHEADER_t *)pTmpBuf;
	pdz = (struct pdz_t *)(filehead + 1);
	
	strcpy (filename, "dz");
	strcat (filename, (char*)MyCfg.Fd[FDNumber].DZname);
	strcat (filename, ".dat");
	
	rc = ReadParaFile(filename, pTmpBuf, MAXFILELEN, TRUE);
	if (rc == FOPERROR)
	{
		MyCfg.Fd[FDNumber].Control &= (~FAULTD_ENABLE);
    	sprintf(filename, "读取FD %d 故障检测参数失败", FDNumber+1);
		ErrorInfo(ROOTID, filename);
	}
	else
	{
		MyCfg.Fd[FDNumber].FDID = FDNumber;
		size = sizeof(struct pdz_t) - sizeof(unsigned short);
		memcpy(&MyCfg.Fd[FDNumber].FACfg, (char*)pdz, size);
	}
}

/*------------------------------------------------------------------*/
/*函数名称:GetRealBase()											*/
/*函数功能:读取实际库配置文件										*/
/*输入说明:pTmpBuf--内存区											*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
BOOL GetRealBase(INT8U i, INT8U* pTmpBuf)
{
	BOOL	flag;
	INT16U	j, rc;
	char filename[SYSINFOLEN];
	struct FILEHEADER_t *filehead;
	struct PRealBaseConf_t *prealbaseconf;
	struct PDirectAI_t *prealhai;
	struct PRealAI_t *prealai;
	struct PDIAttri_t *prealdi;
	struct PRealBI_t *prealbi;
	struct PRealCounter_t *prealcounter;
	struct PRealBO_t *prealbo;
	struct PRealAO_t *prealao;
	struct PRealTQ_t *prealtq;
	struct PRealSPI_t *prealspi;
	struct PRealBCD_t *prealbcd;
	struct POtherInfo_t *potherinfo;
	
	if (!strncmp(DBInfos[i].ParaName, "logI", 4))
		return (TRUE);
		
	strcpy (filename, DBInfos[i].ParaName);
	strcat (filename, ".dar");
	rc = ReadParaFile(filename, pTmpBuf, MAXFILELEN, TRUE);
	if (rc == FOPERROR)
    	return (FALSE);
	else
	{
		filehead = (struct FILEHEADER_t *)pTmpBuf;
		prealbaseconf = (struct PRealBaseConf_t *)(filehead + 1);
		prealhai = (struct PDirectAI_t *)(prealbaseconf + 1);
		prealai = (struct PRealAI_t *)(prealhai + prealbaseconf->DirAINum);
		prealdi = (struct PDIAttri_t *)(prealai + prealbaseconf->AINum);
		prealbi = (struct PRealBI_t *)(prealdi + prealbaseconf->DINum);
		prealcounter = (struct PRealCounter_t *)(prealbi + prealbaseconf->HardBINum + prealbaseconf->SoftBINum);
		prealbo = (struct PRealBO_t *)(prealcounter + prealbaseconf->CounterNum);
		prealao = (struct PRealAO_t *)(prealbo + prealbaseconf->BONum);
		prealtq = (struct PRealTQ_t *)(prealao + prealbaseconf->AONum);
		prealspi = (struct PRealSPI_t *)(prealtq + prealbaseconf->TQNum);
		prealbcd = (struct PRealBCD_t *)(prealspi + prealbaseconf->SPINum);
		potherinfo = (struct POtherInfo_t *)(prealbcd + prealbaseconf->BCDNum);
	}
	
	DBCfgs[i].Address = prealbaseconf->Address;
	DBCfgs[i].MAddress = prealbaseconf->MAddress;
	DBCfgs[i].YCNum = prealbaseconf->AINum;
	DBCfgs[i].YXNum = prealbaseconf->HardBINum;
	DBCfgs[i].YKNum = prealbaseconf->BONum;
	DBCfgs[i].DDNum = prealbaseconf->CounterNum;
	DBCfgs[i].OtherInfoLen = prealbaseconf->OtherInfoLen;
	DBCfgs[i].OtherInfoNum = prealbaseconf->OtherInfoNum;
	DBCfgs[i].SoftBINum = prealbaseconf->SoftBINum;
	DBCfgs[i].DHardBINum = prealbaseconf->HardBINum;
	DBCfgs[i].EVSBINum = prealbaseconf->EVSBINum;
	DBCfgs[i].SControl = prealbaseconf->SControl;

	if (DBCfgs[i].YCNum)
	{
		DBCfgs[i].Info.Real.pAI = malloc (DBCfgs[i].YCNum * sizeof(struct RealAI_t));
		if (DBCfgs[i].Info.Real.pAI)
		{
			for (j=0; j<DBCfgs[i].YCNum; j++)
			{
				DBCfgs[i].Info.Real.pAI[j].a = prealai[j].a;
				DBCfgs[i].Info.Real.pAI[j].b = prealai[j].b;
				DBCfgs[i].Info.Real.pAI[j].Control = prealai[j].Control;
				DBCfgs[i].Info.Real.pAI[j].Index[0] = DEFINDEXNO;
				DBCfgs[i].Info.Real.pAI[j].Index[1] = DEFINDEXNO;
			}
			
			if (DBCfgs[i].SControl & 0x0004)
				DBCfgs[i].Flag |= FDBAICALCULATE;
			flag = TRUE;
			for (j=0; j<DBCfgs[i].YCNum; j++)
			{
				if ((DBCfgs[i].Info.Real.pAI[j].Control & FCFGYCSEND) != FCFGYCSEND)
				{
					flag = FALSE;
					break;
				}
			}
			if (flag)
				DBCfgs[i].Flag |= FDBAISEND;
		}
	}
	else
		DBCfgs[i].Info.Real.pAI = NULL;
	
	if (DBCfgs[i].YXNum)
	{
		DBCfgs[i].Info.Real.pBI = malloc (DBCfgs[i].YXNum * sizeof(struct RealBI_t));
		if (DBCfgs[i].Info.Real.pBI)
		{
			for (j=0; j<DBCfgs[i].YXNum; j++)
			{
				DBCfgs[i].Info.Real.pBI[j].Control = prealbi[j].Control;
				DBCfgs[i].Info.Real.pBI[j].Index[0] = DEFINDEXNO;
				DBCfgs[i].Info.Real.pBI[j].Index[1] = DEFINDEXNO;
			}
		}
		
		for (j=0; j<DBCfgs[i].YXNum; j++)
		{
			if ((DBCfgs[i].Info.Real.pBI[j].Control & FCFGBICOS) == FCFGBICOS)
			{
				DBCfgs[i].Flag |= FDBBICOS;
				break;
			}
		}
		for (j=0; j<DBCfgs[i].YXNum; j++)
		{
			if ((DBCfgs[i].Info.Real.pBI[j].Control & FCFGBISOE) == FCFGBISOE)
			{
				DBCfgs[i].Flag |= FDBBISOE;
				break;
			}
		}
		for (j=0; j<DBCfgs[i].YXNum; j++)
		{
			if ((DBCfgs[i].Info.Real.pBI[j].Control & FCFGBIREVERSE) == FCFGBIREVERSE)
			{
				DBCfgs[i].Flag |= FDBBIREVERSE;
				break;
			}			
		}
		flag = TRUE;
		for (j=0; j<DBCfgs[i].YXNum; j++)
		{
			if ((DBCfgs[i].Info.Real.pBI[j].Control & FCFGBISEND) != FCFGBISEND)
			{
				flag = FALSE;
				break;
			}
		}
		if (flag)
			DBCfgs[i].Flag |= FDBBISEND;			
	}
	else
		DBCfgs[i].Info.Real.pBI = NULL;
		
	if (DBCfgs[i].YKNum)
	{
		DBCfgs[i].Info.Real.pBO = malloc (DBCfgs[i].YKNum * sizeof(struct RealBO_t));
		if (DBCfgs[i].Info.Real.pBO)
		{
			for (j=0; j<DBCfgs[i].YKNum; j++)
			{
				DBCfgs[i].Info.Real.pBO[j].ID = prealbo[j].ID;
				DBCfgs[i].Info.Real.pBO[j].Status = prealbo[j].SubID;
				DBCfgs[i].Info.Real.pBO[j].Index[0] = DEFINDEXNO;
				DBCfgs[i].Info.Real.pBO[j].Index[1] = DEFINDEXNO;
				DBCfgs[i].Info.Real.pBO[j].Flag = 0;
				DBCfgs[i].Info.Real.pBO[j].DevID = DEFINDEXNO;
			}
		}
	}
	else
		DBCfgs[i].Info.Real.pBO = NULL;

	if (DBCfgs[i].DDNum)
	{
		DBCfgs[i].Info.Real.pDD = malloc (DBCfgs[i].DDNum * sizeof(struct RealDD_t));
		if (DBCfgs[i].Info.Real.pDD)
		{
			for (j=0; j<DBCfgs[i].DDNum; j++)
			{
				DBCfgs[i].Info.Real.pDD[j].Control = prealcounter[j].Control;
				DBCfgs[i].Info.Real.pDD[j].a = prealcounter[j].a;
				DBCfgs[i].Info.Real.pDD[j].b = prealcounter[j].b;
				DBCfgs[i].Info.Real.pDD[j].OrgValue = prealcounter[j].OrgValue;
				DBCfgs[i].Info.Real.pDD[j].Index[0] = DEFINDEXNO;
				DBCfgs[i].Info.Real.pDD[j].Index[1] = DEFINDEXNO;
			}
			
			if (DBCfgs[i].SControl & 0x0008)
				DBCfgs[i].Flag |= FDBDDCALCULATE;
			flag = TRUE;
			for (j=0; j<DBCfgs[i].DDNum; j++)
				if ((DBCfgs[i].Info.Real.pDD[j].Control & 0x0004) != 0x0004)
				{
					flag = FALSE;
					break;
				}
			if (flag)
				DBCfgs[i].Flag |= FDBDDSEND;	
		}
	}
	else
		DBCfgs[i].Info.Real.pDD = NULL;
	
	return (TRUE);
}

/*------------------------------------------------------------------*/
/*函数名称:GetLogicBase()											*/
/*函数功能:读取逻辑库配置文件										*/
/*输入说明:pTmpBuf--内存区											*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
BOOL GetLogicBase(INT8U i, INT8U* pTmpBuf)
{
	INT16U	j, k, rc, dd;
	INT32U	name;
	char filename[32];
	struct FILEHEADER_t *filehead;
	struct PLogicBaseConf_t *plogicbaseconf;
	struct PLogicAI_t *plogicai;
	struct PLogicBI_t *plogicbi;
	struct PLogicCounter_t *plogiccounter;
	struct PLogicBO_t *plogicbo;

	if (strncmp(DBInfos[i].ParaName, "logI", 4))
		return (TRUE);
		
	strcpy(filename, DBInfos[i].ParaName);
	strcat (filename,".dal");
	rc = ReadParaFile(filename, pTmpBuf, MAXFILELEN, TRUE);
	if (rc == FOPERROR)
    	return (FALSE);
	else
	{
		filehead = (struct FILEHEADER_t *)pTmpBuf;
		if (filehead->Vstamp == 0x200)
		{
			GetSecondLogicBase(i, pTmpBuf);
			return (TRUE);
		}
		plogicbaseconf = (struct PLogicBaseConf_t *)(filehead + 1);
		plogicai = (struct PLogicAI_t *)(plogicbaseconf + 1);
		plogicbi = (struct PLogicBI_t *)(plogicai + plogicbaseconf->AICellNum);
		plogiccounter = (struct PLogicCounter_t *)(plogicbi + plogicbaseconf->BICellNum);
		plogicbo = (struct PLogicBO_t *)(plogiccounter + plogicbaseconf->CounterCellNum);
	}
	
	DBCfgs[i].Address = plogicbaseconf->Address;
	DBCfgs[i].MAddress = plogicbaseconf->MAddress;
	DBCfgs[i].YCNum = plogicbaseconf->AICellNum;
	DBCfgs[i].YXNum = plogicbaseconf->BICellNum;
	DBCfgs[i].YKNum = plogicbaseconf->BONum;
	DBCfgs[i].DDNum = plogicbaseconf->CounterCellNum;
	DBCfgs[i].OtherInfoLen = plogicbaseconf->OtherInfoLen;
	DBCfgs[i].OtherInfoNum = plogicbaseconf->OIBufNum;
	DBCfgs[i].DHardBINum = plogicbaseconf->DBINum;
	DBCfgs[i].EVSBINum = plogicbaseconf->EVSBINum;
	DBCfgs[i].SControl = plogicbaseconf->Control;	
	
	name = DBInfos[i].Name;
	
	if (DBCfgs[i].YCNum)
		for (j=0; j<DBCfgs[i].YCNum; j++)
		{
			for (k=0; k<SysCfg.DBAllNum; k++)
			{
				if (DBInfos[k].Name == plogicai[j].RealName)
				{
					rc = k;
					break;
				}
			}
			dd = GetRealDBIndex(rc, DBCfgs[i].DevID);
			if (dd == 0xFFFF)
				return (FALSE);
			k = plogicai[j].Offset;
			DBCfgs[rc].Info.Real.pAI[k].Index[dd] = j;
		}
	
	if (DBCfgs[i].YXNum)
		for (j=0; j<DBCfgs[i].YXNum; j++)
		{
			for (k=0; k<SysCfg.DBAllNum; k++)
			{
				if (DBInfos[k].Name == plogicbi[j].RealName)
				{
					rc = k;
					break;
				}
			}
			dd = GetRealDBIndex(rc, DBCfgs[i].DevID);
			if (dd == 0xFFFF)
				return (FALSE);
			k = plogicbi[j].Offset;
			DBCfgs[rc].Info.Real.pBI[k].Index[dd] = j;
		}
	
	if (DBCfgs[i].YKNum)
		for (j=0; j<DBCfgs[i].YKNum; j++)
		{
			for (k=0; k<SysCfg.DBAllNum; k++)
			{
				if (DBInfos[k].Name == plogicbo[j].RealName)
				{
					rc = k;
					break;
				}
			}
			dd = GetRealDBIndex(rc, DBCfgs[i].DevID);
			if (dd == 0xFFFF)
				return (FALSE);
			k = plogicbo[j].Offset;
			DBCfgs[rc].Info.Real.pBO[k].Index[dd] = plogicbo[j].ID;
		}

	if (DBCfgs[i].DDNum)
		for (j=0; j<DBCfgs[i].DDNum; j++)
		{
			for (k=0; k<SysCfg.DBAllNum; k++)
			{
				if (DBInfos[k].Name == plogiccounter[j].RealName)
				{
					rc = k;
					break;
				}
			}
			dd = GetRealDBIndex(rc, DBCfgs[i].DevID);
			if (dd == 0xFFFF)
				return (FALSE);
			k = plogiccounter[j].Offset;
			DBCfgs[rc].Info.Real.pDD[k].Index[dd] = j;
		}
	
	DBCfgs[i].Flag |= FDBLOGIC;
	DBCfgs[i].Info.Logic.DevNum = 1;
	DBCfgs[i].Info.Logic.pOld = malloc (sizeof(struct RealTimeInfo));	
	DBCfgs[i].Info.Logic.pOld->DevID = DBCfgs[i].DevID;		//指向自己
	DBCfgs[i].Info.Logic.pOld->SOEOld = 0;
	DBCfgs[i].Info.Logic.pOld->COSOld = 0;
	
	return (TRUE);
}

/*------------------------------------------------------------------*/
/*函数名称:GetSecondLogicBase()									*/
/*函数功能:读取逻辑库配置文件										*/
/*输入说明:pTmpBuf--内存区											*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
void GetSecondLogicBase(INT8U i, INT8U* pTmpBuf)
{
	INT16U	j, k, rc, num;
	INT32U	*name;
	struct FILEHEADER_t *filehead;
	struct PLogicBaseConf_t *plogicbaseconf;
	
	filehead = (struct FILEHEADER_t *)pTmpBuf;
	plogicbaseconf = (struct PLogicBaseConf_t *)(filehead + 1);
	name = (INT32U*)(plogicbaseconf + 1);
	
	DBCfgs[i].Address = plogicbaseconf->Address;
	DBCfgs[i].MAddress = plogicbaseconf->MAddress;
	DBCfgs[i].YCNum = plogicbaseconf->AICellNum;
	DBCfgs[i].YXNum = plogicbaseconf->BICellNum;
	DBCfgs[i].YKNum = plogicbaseconf->BONum;
	DBCfgs[i].DDNum = plogicbaseconf->CounterCellNum;
	DBCfgs[i].OtherInfoLen = plogicbaseconf->OtherInfoLen;
	DBCfgs[i].OtherInfoNum = plogicbaseconf->OIBufNum;
	DBCfgs[i].DHardBINum = plogicbaseconf->DBINum;
	DBCfgs[i].EVSBINum = plogicbaseconf->EVSBINum;
	DBCfgs[i].SControl = plogicbaseconf->Control;
	
	num = (INT16U)plogicbaseconf->DevNum;
	DBCfgs[i].Flag |= FDBLOGIC2;
	DBCfgs[i].Info.Logic.DevNum = num;
	DBCfgs[i].Info.Logic.pOld = malloc (num * sizeof(struct RealTimeInfo));	

	for (j=0; j<num; j++)
	{
		for (k=0; k<SysCfg.DBAllNum; k++)
		{
			if (DBInfos[k].Name == name[j])
			{
				rc = k;
				break;
			}
		}
		
		if (!(DBCfgs[rc].Flag & FDBSELFUSE))
		{
			DBCfgs[rc].Flag |= FDBSELFUSE;
			DBCfgs[rc].Log2DevID[0] = DBCfgs[i].DevID;
		}
		else if (!(DBCfgs[rc].Flag & FDBSELF2USE))
		{
			DBCfgs[rc].Flag |= FDBSELF2USE;
			DBCfgs[rc].Log2DevID[1] = DBCfgs[i].DevID;
		}
		//else error	//dingding
		
		DBCfgs[i].Info.Logic.pOld[j].DevID = DBInfos[rc].DevID;
		DBCfgs[i].Info.Logic.pOld[j].SOEOld = 0;
		DBCfgs[i].Info.Logic.pOld[j].COSOld = 0;
	}

}

/*------------------------------------------------------------------*/
/*函数名称:InitPort()												*/
/*函数功能:端口初始化												*/
/*输入说明:														*/
/*输出说明:														*/
/*------------------------------------------------------------------*/
void InitPort(struct PortAttri_t* Port)
{
	BOOL	rc, flag = FALSE;
	INT8U	config, number;
	INT32U	mode, baud;
	INT32U	dd[12] = {110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200};
	struct NetInfo	info;
	char	err[60];
		
	if (Port->PortID == PORT1)
	{
		if (SysCfg.PortAttr & 0x01)
			return ;
		number = 0;
		
		config = PORTCFG & 0x07;
		if ((!((config == 0x02) || (config == 0x04))) || MyCfg.lan1)
		{
			ErrorInfo(ROOTID, "串口1配置错误!使用默认端口配置...");
			return ;
		}
		SysCfg.PortAttr |= 0x01;
		
		if ((at91_pio_read (&PIO_DESC) & SW2_WH1) != SW2_WH1)
		{
			Usart0_init (US_CHRL_8 | US_PAR_NO | US_NBSTOP_1, DEFBAUD);
			PortInfo[0].Port = 1;
			PortInfo[0].Attr = MAINTSEC;
			PortInfo[0].RTSONDelay = 5;
			ErrorInfo(ROOTID, "串口1运行于:57600 bps");
			return ;
		}
	}
	else if (Port->PortID == PORT2)
	{
		if (SysCfg.PortAttr & 0x02)
			return ;
		number = 1;
		
		config = PORTCFG & 0x70;
		if ((!((config == 0x20) || (config == 0x40))) || MyCfg.lan2)

⌨️ 快捷键说明

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