buban104.cpp

main
unknown 2 years ago
parent cd4a79ed87
commit 40d5a9ddb1

@ -79,7 +79,7 @@
//转发各种类型的数据的最大数量 //转发各种类型的数据的最大数量
#define MAX_AINUM 120 #define MAX_AINUM 120
#define MAX_FLOATAINUM 48 #define MAX_FLOATAINUM 9
#define MAX_DINUM 127 #define MAX_DINUM 127
#define MAX_PINUM 35 #define MAX_PINUM 35
@ -237,7 +237,7 @@ void Buban101ProvMakeYkYtCommand(int commid, u_char *buf, int len);
/////////////////////////通用函数支持接口结束/////////////////////////// /////////////////////////通用函数支持接口结束///////////////////////////
///////////////////////////以下为指令生成函数/////////////////////////// ///////////////////////////以下为指令生成函数///////////////////////////
//Éú³É Buban101 ÃüÁîë //生成 Buban101 命令?
void MakeBuban101Command(u_32 commid, u_char cmdidx); void MakeBuban101Command(u_32 commid, u_char cmdidx);
//生成遥控遥调指令 //生成遥控遥调指令
void MakeBuBan101YkYtCommand(u_32 commid, u_char *buf, int len); void MakeBuBan101YkYtCommand(u_32 commid, u_char *buf, int len);

@ -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);

Loading…
Cancel
Save