|
|
@ -1215,7 +1215,7 @@ void Buban104FindNextProvCmd(int commid)
|
|
|
|
//======================================================
|
|
|
|
//======================================================
|
|
|
|
if(pPortParam->lTimeOutSendTest)
|
|
|
|
if(pPortParam->lTimeOutSendTest)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
MakeBuban104Command(commid, FORMAT_U_TEST_ACT);
|
|
|
|
;//MakeBuban104Command(commid, FORMAT_U_TEST_ACT);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
pPortParam->lTimeOutCnt = 0;
|
|
|
|
pPortParam->lTimeOutCnt = 0;
|
|
|
@ -1247,7 +1247,7 @@ void Buban104FindNextProvCmd(int commid)
|
|
|
|
if(pPortParam->Initdata)
|
|
|
|
if(pPortParam->Initdata)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// 一类数据( 遥信变位 )
|
|
|
|
// 一类数据( 遥信变位 )
|
|
|
|
ProvBuban104SendClass1(commid);
|
|
|
|
//ProvBuban104SendClass1(commid);
|
|
|
|
if(CheckPollCmdBufEmpty(commid) <= 0)
|
|
|
|
if(CheckPollCmdBufEmpty(commid) <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pPortParam->m_lNoDataCnt = 0;
|
|
|
|
pPortParam->m_lNoDataCnt = 0;
|
|
|
@ -1255,7 +1255,7 @@ void Buban104FindNextProvCmd(int commid)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 转发soe数据
|
|
|
|
// 转发soe数据
|
|
|
|
ProvBuban104SendSoe(commid);
|
|
|
|
//ProvBuban104SendSoe(commid);
|
|
|
|
if(CheckPollCmdBufEmpty(commid) <= 0)
|
|
|
|
if(CheckPollCmdBufEmpty(commid) <= 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pPortParam->m_lNoDataCnt = 0;
|
|
|
|
pPortParam->m_lNoDataCnt = 0;
|
|
|
@ -1267,14 +1267,14 @@ void Buban104FindNextProvCmd(int commid)
|
|
|
|
// wen 2006.03.23 支持浮点数遥测的传送
|
|
|
|
// wen 2006.03.23 支持浮点数遥测的传送
|
|
|
|
//ProvBuban104SendClass2(commid);
|
|
|
|
//ProvBuban104SendClass2(commid);
|
|
|
|
//====================================================================
|
|
|
|
//====================================================================
|
|
|
|
if(pPortParam->m_bProvAiType == 13)
|
|
|
|
/*if(pPortParam->m_bProvAiType == 13)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ProvBuban104SendClass2withFloat(commid);
|
|
|
|
ProvBuban104SendClass2withFloat(commid);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ProvBuban104SendClass2(commid);
|
|
|
|
ProvBuban104SendClass2(commid);
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
|
|
|
|
|
|
|
if(CheckPollCmdBufEmpty(commid) <= 0)
|
|
|
|
if(CheckPollCmdBufEmpty(commid) <= 0)
|
|
|
@ -1298,7 +1298,7 @@ void Buban104FindNextProvCmd(int commid)
|
|
|
|
if(pPortParam->m_lNoDataCnt >= pPortParam->lTimeOutConst)
|
|
|
|
if(pPortParam->m_lNoDataCnt >= pPortParam->lTimeOutConst)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pPortParam->m_lNoDataCnt = 0;
|
|
|
|
pPortParam->m_lNoDataCnt = 0;
|
|
|
|
MakeBuban104Command(commid, FORMAT_U_TEST_ACT);
|
|
|
|
//MakeBuban104Command(commid, FORMAT_U_TEST_ACT);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
@ -3068,7 +3068,7 @@ void ProvBuban104FormatI(int commid, RTUMSG *rtumsg)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
case 103: // 时间同步确认帧
|
|
|
|
case 103: // 时间同步确认帧
|
|
|
|
ProvBuban104ProcessTime(commid, rtumsg);
|
|
|
|
//ProvBuban104ProcessTime(commid, rtumsg);
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -3189,7 +3189,7 @@ void ProvBuban104SendAllData(int commid, RTUMSG * rtumsg)
|
|
|
|
iCmdType = FAST_POLL_CMD;
|
|
|
|
iCmdType = FAST_POLL_CMD;
|
|
|
|
|
|
|
|
|
|
|
|
//总召唤应答
|
|
|
|
//总召唤应答
|
|
|
|
commandbuf[0] = 0x68;
|
|
|
|
/*commandbuf[0] = 0x68;
|
|
|
|
iLen = 2;
|
|
|
|
iLen = 2;
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
@ -3204,27 +3204,44 @@ void ProvBuban104SendAllData(int commid, RTUMSG * rtumsg)
|
|
|
|
commandbuf[iLen++] = 0; // 信息序号INF
|
|
|
|
commandbuf[iLen++] = 0; // 信息序号INF
|
|
|
|
commandbuf[iLen++] = 0; // 扫描序号SCN
|
|
|
|
commandbuf[iLen++] = 0; // 扫描序号SCN
|
|
|
|
commandbuf[1] = (BYTE)(iLen - 2);
|
|
|
|
commandbuf[1] = (BYTE)(iLen - 2);
|
|
|
|
PutPollCmdToBuf(commid, iCmdType, 0, (char *)commandbuf, iLen);
|
|
|
|
PutPollCmdToBuf(commid, iCmdType, 0, (char *)commandbuf, iLen);*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
// wen 2006.03.23 支持浮点数遥测的传送
|
|
|
|
// wen 2006.03.23 支持浮点数遥测的传送
|
|
|
|
//ProvBuban104SendAI(commid, rtumsg, 0);
|
|
|
|
//ProvBuban104SendAI(commid, rtumsg, 0);
|
|
|
|
//====================================================================
|
|
|
|
//====================================================================
|
|
|
|
if(pPortParam->m_bProvAiType == 13)
|
|
|
|
//if(pPortParam->m_bProvAiType == 13)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ProvBuban104SendAIwithFloat(commid, rtumsg, 0);
|
|
|
|
ProvBuban104SendAIwithFloat(commid, rtumsg, 0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
/*else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ProvBuban104SendAI(commid, rtumsg, 0);
|
|
|
|
ProvBuban104SendAI(commid, rtumsg, 0);
|
|
|
|
}
|
|
|
|
}*/
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
|
|
|
|
|
|
|
ProvBuban104SendDI(commid, rtumsg, 0);
|
|
|
|
//ProvBuban104SendDI(commid, rtumsg, 0);
|
|
|
|
|
|
|
|
memset(&commandbuf, 0, sizeof(commandbuf));
|
|
|
|
//总召唤结束
|
|
|
|
//总召唤结束
|
|
|
|
ProvMakeBuban104Command(commid, ASK_ALLDATA_END);
|
|
|
|
commandbuf[0] = 0x68;
|
|
|
|
|
|
|
|
iLen = 2;
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0;
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 8; // 应答总召结束
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0x81; // 限定词VSQ
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 9; // 传送原因
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0; // 应用服务单元公共地址
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0; // 应用服务单元公共地址
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0xFF; // 功能类型FUN
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0; // 信息序号INF
|
|
|
|
|
|
|
|
commandbuf[iLen++] = 0; // 扫描序号SCN
|
|
|
|
|
|
|
|
commandbuf[1] = (BYTE)(iLen - 2);
|
|
|
|
|
|
|
|
PutPollCmdToBuf(commid, iCmdType, 0, (char *)commandbuf, iLen);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//ProvMakeBuban104Command(commid, ASK_ALLDATA_END);
|
|
|
|
pPortParam->m_psBaoHu->DiChange = FALSE;
|
|
|
|
pPortParam->m_psBaoHu->DiChange = FALSE;
|
|
|
|
pPortParam->Initdata = TRUE;
|
|
|
|
pPortParam->Initdata = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -4574,10 +4591,11 @@ typedef struct
|
|
|
|
} DAY_TIME;
|
|
|
|
} DAY_TIME;
|
|
|
|
返回值1:成功取值 -1:取值失败
|
|
|
|
返回值1:成功取值 -1:取值失败
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
int GetAIPntMsg(int j, int *igno, int* iItemNo, DAY_TIME* sCurTime, float* pfValue)
|
|
|
|
int GetAIPntMsg(int j, int *igno, int* iItemNo, DAY_TIME* sCurTime, float* pfValue, int *iaddr)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
*igno = 1;
|
|
|
|
*igno = 1;
|
|
|
|
*iItemNo = 1;
|
|
|
|
*iItemNo = 1;
|
|
|
|
|
|
|
|
*iaddr = 1;
|
|
|
|
sCurTime->Hour = 12;
|
|
|
|
sCurTime->Hour = 12;
|
|
|
|
sCurTime->Min = 30;
|
|
|
|
sCurTime->Min = 30;
|
|
|
|
sCurTime->Month = 11;
|
|
|
|
sCurTime->Month = 11;
|
|
|
@ -4592,8 +4610,8 @@ int GetAIPntMsg(int j, int *igno, int* iItemNo, DAY_TIME* sCurTime, float* pfVal
|
|
|
|
void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo)
|
|
|
|
void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
char commandbuf[MAX_POLLCMD_BUF_LEN];
|
|
|
|
char commandbuf[MAX_POLLCMD_BUF_LEN];
|
|
|
|
DWORD dwStartAddr;
|
|
|
|
//DWORD dwStartAddr;
|
|
|
|
int iLenth, iSendCount=1;
|
|
|
|
int iLenth, iSendCount=1, iaddr0=1, iaddr1=1;
|
|
|
|
int i, j, iAllDataCount, iSendNum,flag;
|
|
|
|
int i, j, iAllDataCount, iSendNum,flag;
|
|
|
|
int iNo, iCmdType, igno,iItemNo;
|
|
|
|
int iNo, iCmdType, igno,iItemNo;
|
|
|
|
float *pfValue;
|
|
|
|
float *pfValue;
|
|
|
@ -4608,13 +4626,13 @@ void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo)
|
|
|
|
|
|
|
|
|
|
|
|
if( iGroupNo == 0 )//总召唤
|
|
|
|
if( iGroupNo == 0 )//总召唤
|
|
|
|
{
|
|
|
|
{
|
|
|
|
dwStartAddr = MAX_GROUP_AINUM*iGroupNo + pPortParam->iAiBaseAddr;
|
|
|
|
//dwStartAddr = MAX_GROUP_AINUM*iGroupNo + pPortParam->iAiBaseAddr;
|
|
|
|
|
|
|
|
|
|
|
|
iAllDataCount = pPortParam->m_psBaoHu->AiNum;
|
|
|
|
iAllDataCount = pPortParam->m_psBaoHu->AiNum;
|
|
|
|
iCmdType = FAST_POLL_CMD;
|
|
|
|
iCmdType = FAST_POLL_CMD;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
aiprovptr = (PROV_AI_PNT *)pPortParam->m_psBaoHu->AiPtr;
|
|
|
|
//aiprovptr = (PROV_AI_PNT *)pPortParam->m_psBaoHu->AiPtr;
|
|
|
|
for( i = 0; i < iAllDataCount; i++ )
|
|
|
|
for( i = 0; i < iAllDataCount; i++ )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
memset(commandbuf, 0, sizeof(commandbuf));
|
|
|
|
memset(commandbuf, 0, sizeof(commandbuf));
|
|
|
@ -4633,23 +4651,35 @@ void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo)
|
|
|
|
commandbuf[13] = 0; // 返回信息标识码RII
|
|
|
|
commandbuf[13] = 0; // 返回信息标识码RII
|
|
|
|
|
|
|
|
|
|
|
|
//遥测值
|
|
|
|
//遥测值
|
|
|
|
if(iAllDataCount > MAX_FLOATAINUM)
|
|
|
|
if(iAllDataCount-i > MAX_FLOATAINUM)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
iSendNum = MAX_FLOATAINUM;
|
|
|
|
iSendNum = MAX_FLOATAINUM;
|
|
|
|
commandbuf[14] = (iSendNum & 0x80); // 通用分类数据集数目NGD
|
|
|
|
commandbuf[14] = (iSendNum & 0x80); // 通用分类数据集数目NGD
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
iSendNum = iAllDataCount;
|
|
|
|
iSendNum = iAllDataCount-i;
|
|
|
|
commandbuf[14] = iSendNum; // 通用分类数据集数目NGD
|
|
|
|
commandbuf[14] = iSendNum; // 通用分类数据集数目NGD
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
iNo = i;
|
|
|
|
iNo = i;
|
|
|
|
iLenth = 15;
|
|
|
|
iLenth = 15;
|
|
|
|
for( j = iNo; j < iNo+iSendNum; j++ )
|
|
|
|
for( j = 0; j < iSendNum; j++ )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pfValue = (float *)&commandbuf[iLenth+14];
|
|
|
|
pfValue = (float *)&commandbuf[iLenth+14];
|
|
|
|
flag = GetAIPntMsg(j, &igno, &iItemNo, &sCurTime, pfValue);
|
|
|
|
flag = GetAIPntMsg(j+iNo, &igno, &iItemNo, &sCurTime, pfValue, &iaddr1);
|
|
|
|
|
|
|
|
if (0 == flag)
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
if (iaddr1 == iaddr0)
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
iaddr0 = iaddr1;
|
|
|
|
|
|
|
|
if (15 == iLenth)
|
|
|
|
|
|
|
|
;
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
commandbuf[iLenth] = igno;
|
|
|
|
commandbuf[iLenth] = igno;
|
|
|
|
commandbuf[iLenth++] = iItemNo;
|
|
|
|
commandbuf[iLenth++] = iItemNo;
|
|
|
|
commandbuf[iLenth++] = 1; // 描述类别KOD(实际值)
|
|
|
|
commandbuf[iLenth++] = 1; // 描述类别KOD(实际值)
|
|
|
@ -4669,11 +4699,23 @@ void ProvBuban104SendAIwithFloat(int commid, RTUMSG *rtumsg, int iGroupNo)
|
|
|
|
//iLenth += sizeof(float);
|
|
|
|
//iLenth += sizeof(float);
|
|
|
|
//commandbuf[iLenth++] = 0;
|
|
|
|
//commandbuf[iLenth++] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (15 == iLenth)
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
commandbuf[9] = (u_char)iaddr0; //
|
|
|
|
|
|
|
|
commandbuf[10] = (u_char)(iaddr0 >> 8); // 应用服务数据单元公共地址
|
|
|
|
|
|
|
|
i += j;
|
|
|
|
|
|
|
|
|
|
|
|
if (flag = -1)
|
|
|
|
if (flag = -1)
|
|
|
|
|
|
|
|
{
|
|
|
|
i = iAllDataCount;
|
|
|
|
i = iAllDataCount;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(i >= iAllDataCount)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
commandbuf[14] = j; // 通用分类数据集数目NGD
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
i += iSendNum;
|
|
|
|
commandbuf[14] = (j & 0x80); // 通用分类数据集数目NGD
|
|
|
|
|
|
|
|
|
|
|
|
commandbuf[1] = (char)(iLenth-2);
|
|
|
|
commandbuf[1] = (char)(iLenth-2);
|
|
|
|
|
|
|
|
|
|
|
|
PutPollCmdToBuf(commid, iCmdType, 0, (char *)commandbuf, iLenth);
|
|
|
|
PutPollCmdToBuf(commid, iCmdType, 0, (char *)commandbuf, iLenth);
|
|
|
|