buban104.cpp

main
unknown 2 years ago
parent cd4a79ed87
commit 40d5a9ddb1

@ -79,7 +79,7 @@
//转发各种类型的数据的最大数量
#define MAX_AINUM 120
#define MAX_FLOATAINUM 48
#define MAX_FLOATAINUM 9
#define MAX_DINUM 127
#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 MakeBuBan101YkYtCommand(u_32 commid, u_char *buf, int len);

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

Loading…
Cancel
Save