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