📄 9311cfg.c
字号:
}
/*------------------------------------------------------------------*/
/*函数名称: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 + -