📄 9311db.c
字号:
{
wtt = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[0], COSDATA, TRUE);
tmp = *wtt;
*wtt = (tmp + 1) % COSLIMIT;
wtt += tmp * size + 1;
*(wtt + 0) = (INT8U)(rc & 0xFF);
*(wtt + 1) = (INT8U)((rc>>8) & 0xFF);
*(wtt + 2) = value;
//检查
if (!(flag & 0x01))
{
flag |= 0x01;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Info.Real.LogDevID[0];
dbmsg.Num++;
}
tmp = DBCfgs[pInfo->DevID].Info.Real.LogDevID[0];
if (DBCfgs[tmp].Flag & FDBLOGUSEFALG)
{
if ((DBCfgs[tmp].Flag & FDBSELFUSE) && (!(flag & 0x02)))
{
flag |= 0x02;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[0];
dbmsg.Num++;
}
if ((DBCfgs[tmp].Flag & FDBSELF2USE) && (!(flag & 0x04)))
{
flag |= 0x04;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[1];
dbmsg.Num++;
}
}
}
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBLOG2USE)
{
rc = DBCfgs[pInfo->DevID].Info.Real.pBI[rc].Index[1];
if (rc != DEFINDEXNO)
{
wpp = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[1], YXDATA, TRUE);
wpp[rc] = value;
if (val != value)
{
wtt = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[1], COSDATA, TRUE);
tmp = *wtt;
*wtt = (tmp + 1) % COSLIMIT;
wtt += tmp * size + 1;
*(wtt + 0) = (INT8U)(rc & 0xFF);
*(wtt + 1) = (INT8U)((rc>>8) & 0xFF);
*(wtt + 2) = value;
//检查
if (!(flag & 0x10))
{
flag |= 0x10;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Info.Real.LogDevID[1];
dbmsg.Num++;
}
tmp = DBCfgs[pInfo->DevID].Info.Real.LogDevID[1];
if (DBCfgs[tmp].Flag & FDBLOGUSEFALG)
{
if ((DBCfgs[tmp].Flag & FDBSELFUSE) && (!(flag & 0x20)))
{
flag |= 0x20;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[0];
dbmsg.Num++;
}
if ((DBCfgs[tmp].Flag & FDBSELF2USE) && (!(flag & 0x40)))
{
flag |= 0x40;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[1];
dbmsg.Num++;
}
}
}
}
}
}//for
if (flag)
DBMsgSend(&dbmsg, FCOS);
OSFlagPost (SysPorts[0].Event, FCOS, OS_FLAG_SET, &flag);
if (flag != OS_NO_ERR)
{
ErrorInfo(OSPrioCur, "数据库发送失败576");
}
}
/*------------------------------------------------------------------*/
/*函数名称:DBWriteYX() */
/*函数功能:数据库遥信写操作 */
/*输入说明:pData:数据指针 */
/* pInfo:数据信息 */
/*------------------------------------------------------------------*/
void DBWriteYX(INT8U *pData, struct DBInfo *pInfo)
{
volatile INT8U *wp, *wtmp, *wpp, *wtt;
INT8U val, value, flag;
INT16U i, num, tmp, rc;
struct DBMSGCheck dbmsg;
flag = 0;
memset (&dbmsg, 0, sizeof (struct DBMSGCheck));
wp = (volatile INT8U*)GetDBAddr(pInfo->DevID, YXDATA, TRUE);
num = pInfo->Start + pInfo->Num;
if (num > DBCfgs[pInfo->DevID].YXNum)
num = DBCfgs[pInfo->DevID].YXNum;
for (i=pInfo->Start; i<num; i++)
{
val = *(wp + i);
value = pData[i - pInfo->Start];
if (DBCfgs[pInfo->DevID].Info.Real.pBI[i].Control & FCFGBIREVERSE)
value = value ^ 0x80;
*(wp + i) = value;
if (val != value) //写入COS
{
wtmp = (volatile INT8U*)GetDBAddr(pInfo->DevID, COSDATA, TRUE);
tmp = *wtmp;
*wtmp = (tmp + 1) % COSLIMIT;
wtmp += tmp * 3 + 1;
*(wtmp + 0) = (INT8U)(i & 0xFF);
*(wtmp + 1) = (INT8U)((i>>8) & 0xFF);
*(wtmp + 2) = value;
}
if (!(DBCfgs[pInfo->DevID].Flag & FDBLOGUSEFALG))
continue;
//检查
if (DBCfgs[pInfo->DevID].Flag & FDBSELFUSE)
{
if (!(flag & 0x08))
{
flag |= 0x08;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Log2DevID[0];
dbmsg.Num++;
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBSELF2USE)
{
if (!(flag & 0x80))
{
flag |= 0x80;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Log2DevID[1];
dbmsg.Num++;
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBLOGUSE)
{
rc = DBCfgs[pInfo->DevID].Info.Real.pBI[i].Index[0];
if (rc != DEFINDEXNO)
{
wpp = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[0], YXDATA, TRUE);
wpp[rc] = value;
if (val != value)
{
wtt = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[0], COSDATA, TRUE);
tmp = *wtt;
*wtt = (tmp + 1) % COSLIMIT;
wtt += tmp * 3 + 1;
*(wtt + 0) = (INT8U)(rc & 0xFF);
*(wtt + 1) = (INT8U)((rc>>8) & 0xFF);
*(wtt + 2) = value;
//检查
if (!(flag & 0x01))
{
flag |= 0x01;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Info.Real.LogDevID[0];
dbmsg.Num++;
}
tmp = DBCfgs[pInfo->DevID].Info.Real.LogDevID[0];
if (DBCfgs[tmp].Flag & FDBLOGUSEFALG)
{
if ((DBCfgs[tmp].Flag & FDBSELFUSE) && (!(flag & 0x02)))
{
flag |= 0x02;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[0];
dbmsg.Num++;
}
if ((DBCfgs[tmp].Flag & FDBSELF2USE) && (!(flag & 0x04)))
{
flag |= 0x04;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[1];
dbmsg.Num++;
}
}
}
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBLOG2USE)
{
rc = DBCfgs[pInfo->DevID].Info.Real.pBI[i].Index[1];
if (rc != DEFINDEXNO)
{
wpp = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[1], YXDATA, TRUE);
wpp[rc] = value;
if (val != value)
{
wtt = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[1], COSDATA, TRUE);
tmp = *wtt;
*wtt = (tmp + 1) % COSLIMIT;
wtt += tmp * 3 + 1;
*(wtt + 0) = (INT8U)(rc & 0xFF);
*(wtt + 1) = (INT8U)((rc>>8) & 0xFF);
*(wtt + 2) = value;
//检查
if (!(flag & 0x10))
{
flag |= 0x10;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Info.Real.LogDevID[1];
dbmsg.Num++;
}
tmp = DBCfgs[pInfo->DevID].Info.Real.LogDevID[1];
if (DBCfgs[tmp].Flag & FDBLOGUSEFALG)
{
if ((DBCfgs[tmp].Flag & FDBSELFUSE) && (!(flag & 0x20)))
{
flag |= 0x20;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[0];
dbmsg.Num++;
}
if ((DBCfgs[tmp].Flag & FDBSELF2USE) && (!(flag & 0x40)))
{
flag |= 0x40;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[1];
dbmsg.Num++;
}
}
}
}
}
}//for
if (flag)
DBMsgSend(&dbmsg, FCOS);
OSFlagPost (SysPorts[0].Event, FCOS, OS_FLAG_SET, &flag);
if (flag != OS_NO_ERR)
{
ErrorInfo(OSPrioCur, "数据库发送失败744");
}
}
/*------------------------------------------------------------------*/
/*函数名称:DBWriteSOE() */
/*函数功能:数据库SOE写操作 */
/*输入说明:pData:数据指针 */
/* pInfo:数据信息 */
/*------------------------------------------------------------------*/
void DBWriteSOE(INT8U *pData, struct DBInfo *pInfo)
{
volatile INT8U *wp, *wtmp;
INT8U value, flag;
INT16U i, j, size, num, tmp;
struct SOE_t *soe;
struct DBMSGCheck dbmsg;
flag = 0;
memset (&dbmsg, 0, sizeof (struct DBMSGCheck));
wtmp = (volatile INT8U*)GetDBAddr(pInfo->DevID, SOEDATA, TRUE);
tmp = *wtmp;
size = sizeof(struct SOE_t);
for (i=0; i<pInfo->Num; i++)
{
wp = wtmp + tmp * size + 1;
for (j=0; j<size; j++)
{
if (j == 2)
{
num = *(pData + i*size) + (*(pData + i*size + 1)<<8);
if (DBCfgs[pInfo->DevID].Info.Real.pBI[num].Control & FCFGBIREVERSE)
{
value = *(pData + i*size + j);
value = value ^ 0x80;
*(wp + j) = value;
continue;
}
}
*(wp + j) = *(pData + i*size + j);
}
tmp = (tmp + 1) % SOELIMIT;
}
*wtmp = tmp;
if (!(DBCfgs[pInfo->DevID].Flag & FDBLOGUSEFALG))
return;
//检查
if (DBCfgs[pInfo->DevID].Flag & FDBSELFUSE)
{
if (!(flag & 0x08))
{
flag |= 0x08;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Log2DevID[0];
dbmsg.Num++;
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBSELF2USE)
{
if (!(flag & 0x80))
{
flag |= 0x80;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Log2DevID[1];
dbmsg.Num++;
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBLOGUSE)
{
wtmp = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[0], SOEDATA, TRUE);
num = *wtmp;
for (i=0; i<pInfo->Num; i++)
{
soe = (struct SOE_t*)((struct SOE_t*)pData + i);
tmp = DBCfgs[pInfo->DevID].Info.Real.pBI[soe->No].Index[0];
if (tmp != DEFINDEXNO)
{
wp = wtmp + num * size + 1;
*(wp + 0) = (INT8U)(tmp & 0xFF);
*(wp + 1) = (INT8U)((tmp>>8) & 0xFF);
value = *((INT8U*)soe + 2);
if (DBCfgs[pInfo->DevID].Info.Real.pBI[soe->No].Control & FCFGBIREVERSE)
value = value ^ 0x80;
*(wp + 2) = value;
for (j=3; j<size; j++)
*(wp + j) = *((INT8U*)soe + j);
num = (num + 1) % SOELIMIT;
*wtmp = num;
}
}
//检查
if (!(flag & 0x01))
{
flag |= 0x01;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Info.Real.LogDevID[0];
dbmsg.Num++;
}
tmp = DBCfgs[pInfo->DevID].Info.Real.LogDevID[0];
if (DBCfgs[tmp].Flag & FDBLOGUSEFALG)
{
if ((DBCfgs[tmp].Flag & FDBSELFUSE) && (!(flag & 0x02)))
{
flag |= 0x02;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[0];
dbmsg.Num++;
}
if ((DBCfgs[tmp].Flag & FDBSELF2USE) && (!(flag & 0x04)))
{
flag |= 0x04;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[1];
dbmsg.Num++;
}
}
}
if (DBCfgs[pInfo->DevID].Flag & FDBLOG2USE)
{
wtmp = (volatile INT8U*)GetDBAddr(DBCfgs[pInfo->DevID].Info.Real.LogDevID[1], SOEDATA, TRUE);
num = *wtmp;
for (i=0; i<pInfo->Num; i++)
{
soe = (struct SOE_t*)((struct SOE_t*)pData + i);
tmp = DBCfgs[pInfo->DevID].Info.Real.pBI[soe->No].Index[1];
if (tmp != DEFINDEXNO)
{
wp = wtmp + num * size + 1;
*(wp + 0) = (INT8U)(tmp & 0xFF);
*(wp + 1) = (INT8U)((tmp>>8) & 0xFF);
value = *((INT8U*)soe + 2);
if (DBCfgs[pInfo->DevID].Info.Real.pBI[soe->No].Control & FCFGBIREVERSE)
value = value ^ 0x80;
*(wp + 2) = value;
for (j=3; j<size; j++)
*(wp + j) = *((INT8U*)soe + j);
num = (num + 1) % SOELIMIT;
*wtmp = num;
}
}
//检查
if (!(flag & 0x10))
{
flag |= 0x10;
dbmsg.DevID[dbmsg.Num] = DBCfgs[pInfo->DevID].Info.Real.LogDevID[1];
dbmsg.Num++;
}
tmp = DBCfgs[pInfo->DevID].Info.Real.LogDevID[1];
if (DBCfgs[tmp].Flag & FDBLOGUSEFALG)
{
if ((DBCfgs[tmp].Flag & FDBSELFUSE) && (!(flag & 0x20)))
{
flag |= 0x20;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[0];
dbmsg.Num++;
}
if ((DBCfgs[tmp].Flag & FDBSELF2USE) && (!(flag & 0x40)))
{
flag |= 0x40;
dbmsg.DevID[dbmsg.Num] = DBCfgs[tmp].Log2DevID[1];
dbmsg.Num++;
}
}
}
if (flag)
DBMsgSend(&dbmsg, FSOE);
}
/*------------------------------------------------------------------*/
/*函数名称:DBWriteLB() */
/*函数功能:数据库录波写操作 */
/*输入说明:pData:数据指针 */
/* pInfo:数据信息 */
/*------------------------------------------------------------------*/
void DBWriteLB(INT8U *pData, struct DBInfo *pInfo)
{
volatile INT8U *wp, *wtmp;
INT8U cur, size, limit;
INT16U i, j, len1, len2;
struct LBInfo_t info;
size = sizeof (struct LBInfo_t);
if (NVRAMSIZE == 0x20000)
{
limit = LBLIMIT;
if (pInfo->SuperID >= FDNum)
{
wtmp = LBMANAGADDR;
}
else
{
wtmp = LBMANAGADDR + pInfo->SuperID * (limit + 1);
}
}
else
{
limit = 0;
wtmp = LBMANAGADDR;
}
cur = *wtmp;
if (limit)
cur = (cur + limit - pInfo->DevID) % limit;
else
cur = 0;
if (pInfo->Start == 0) //申请新的存储区
{
i = *(wtmp + cur + 1);
if (i)
{
if (limit)
cur = (cur + 1) % limit;
else
cur = 0;
}
memset ((INT8U*)&info, 0, size);
}
else if (pInfo->Start == 0xFFFF)
{
wp = LBINFOADDR + ((pInfo->SuperID*limit) + cur) * LBINFOSIZE;
for (i=0; i<size; i++)
{
*((INT8U*)&info + i) = *(wp + i);
}
}
else
{
info.FDIndex = pInfo->SuperID;
info.Length = (pInfo->Start & 0xFF) * ADBIT + (pInfo->Start >>8);
}
if (pInfo->Type == LBINFO)
{
wp = LBINFOADDR + ((pInfo->SuperID*limit) + cur) * LBINFOSIZE;
for (i=0; i<size; i++)
{
*(wp + i) = *(pData + i);
}
*(wtmp + cur + 1) = *pData; //同时更换
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -