You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

13336 lines
351 KiB
C++

2 years ago
//***************************************************************
//* buban103.cpp *
//* aaawen 2004.10.19 *
//***************************************************************
//_DEBUG_MSG_,_OS_WINDOWS_DEBUG_
/*#ifdef OS_LINUX
#include "baohulib/commport.h"
#include "baohulib/serialport.h"
#else*/
#include "commport.h"
#include "udpcomm.h"
#include "display.h"
//#endif
#include <math.h>
#include <time.h>
#include "buban103.h"
#include "scadaprotect.h"
//typedef int i_32;
//typedef unsigned long u_32;
extern SIO_PARAM_DEF SioParam[];
extern FUNCTION_CALL *FunCallPtr;
extern void *pvconf_handle;
extern void *pvportconf_handle;
extern void *pvdataconf_handle;
extern char pvDataFileName[256];
extern char IniFilePath[256];
/*!
\brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
const int MAX_LINK_NUM=30;
/*!
\brief ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
const int MAX_DEV_NUM_EACH_LINK=12;
/*
enum Param_Type
{
PARAM_NO=0,
PARAM_LINK,
PARAM_DEV,
PARAM_YC,
PARAM_YX,
PARAM_YM,
PARAM_YK,
PARAM_SYNCTIME,
PARAM_ASDU10
};
*/
const char *gpStrBuban103Cmd[BUBAN103_TIMER_CMD_NUM] =
{
"ʱ<EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"<EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ",
"ͨ<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ",
"ͨ<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ"
};
/*!
<EFBFBD><EFBFBD>֯<EFBFBD>:<EFBFBD><EFBFBD>·(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)+װ<EFBFBD><EFBFBD>
*/
const char *gpStrBuban103ConfigInfo[] =
{
"*******<2A><><EFBFBD><EFBFBD>103<30><33>Լ<EFBFBD><D4BC>ʼ*******",
" ",
" ; <20><>ѯָ<D1AF><D6B8><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD>ھ<EFBFBD><DABE><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>",
" ʱ<><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0",
" <20>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> = 0",
" <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ = 0",
" ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ = 0",
" ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ѯ = 0",
" ",
" <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>=1",
" ; ȱʡֵ=1,ֻ֧<D6BB><D6A7>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·,<2C><><EFBFBD><EFBFBD>Ϊʵ<CEAA>ʵ<EFBFBD><CAB5><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>",
" ",
" <20><>·1ģ<31><C4A3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> = 103template.csv",
" ... ...",
" <20><>·nģ<6E><C4A3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> = 103template.csv",
" ; <20><><EFBFBD>У<EFBFBD>n=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>е<EFBFBD>(<28><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>)<29><>Ӧ<EFBFBD><D3A6>ֵ",
" ",
" <20><><EFBFBD><EFBFBD>ң<EFBFBD>ű<EFBFBD>λ=0",
" ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD><EFBFBD>",
" ",
"*******<2A><><EFBFBD><EFBFBD>103<30><33>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>*******",
"", // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־(<28>м䲻<D0BC>ܺ<EFBFBD><DCBA>иÿ<D0B8><C3BF>ַ<EFBFBD><D6B7><EFBFBD>)
};
//********************************************************************
//* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ú<EFBFBD><C3BA><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//********************************************************************
void Buban103ReadConfig(int commid)
{
int i, j, iDevId;
char szSection[128], entry[256], szbuf[128];
char szPortConfig[256], szDir[256], szTemplate[256];
pBUBAN103PORTPARAM pPortParam;
#ifdef OS_LINUX
strcpy(szPortConfig, "portconfig.ini");
#else
//GetCurrentDirectory(sizeof(szDir), szDir);
sprintf(szPortConfig, "%s/portconfig.ini", IniFilePath);
#endif
SioParam[commid].ExtInfo = HEAP_MALLOC(sizeof(BUBAN103PORTPARAM));
Buban103DispMalloc(commid, sizeof(BUBAN103PORTPARAM));
if(!SioParam[commid].ExtInfo)
{
sprintf(szbuf, "WARN(%04d): commid_%02d ExtInfo=malloc(%d) failed.\n",
_getpid(), commid, sizeof(BUBAN103PORTPARAM));
DebugPrint(szbuf);
return;
}
memset(SioParam[commid].ExtInfo, 0, sizeof(BUBAN103PORTPARAM));
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
// ֻ<><D6BB><EFBFBD><EFBFBD>SioParam[commid].m_psBaoHu<48>ǿ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
pPortParam->m_psBaoHu = SioParam[commid].m_psBaoHu;
sprintf(szSection, "Port%d", commid+1);
if(GetPrivateProString(szSection, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ң<EFBFBD>ű<EFBFBD>λ", "0", szbuf, 120, szPortConfig) > 0)
{
if(atoi(szbuf) == 0)
{
pPortParam->m_bSendChangeDi = FALSE;
}
else
{
pPortParam->m_bSendChangeDi = TRUE;
}
}
// wen 2004.07.26 <20><><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD>װ<EFBFBD>õ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(GetPrivateProString(szSection, "<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "1", szbuf, 120, szPortConfig) > 0)
{
pPortParam->m_iLinkNum = atoi(szbuf);
}
if(pPortParam->m_iLinkNum <= 1)
{
pPortParam->m_iLinkNum = 1;
}
if(pPortParam->m_iLinkNum > MAX_LINK_NUM)
{
pPortParam->m_iLinkNum = MAX_LINK_NUM;
}
pPortParam->m_psLink
= (BUBAN103LINKDEF *)HEAP_MALLOC(sizeof(BUBAN103LINKDEF)*pPortParam->m_iLinkNum);
Buban103DispMalloc(commid, sizeof(BUBAN103LINKDEF)*pPortParam->m_iLinkNum);
memset((void *)pPortParam->m_psLink, 0, sizeof(BUBAN103LINKDEF)*pPortParam->m_iLinkNum);
// <20>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ
//for(i=0; i<pPortParam->m_iLinkNum; i++)
i=0;
{
// <20><>ѯָ<D1AF><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(j=0; j<BUBAN103_TIMER_CMD_NUM; j++)
{
GetPrivateProString(szSection, (char *)gpStrBuban103Cmd[j], "0", szbuf, 120, szPortConfig);
pPortParam->m_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerConst
= (int)(atof(szbuf)*1000/TIMER_CNT);
if(pPortParam->m_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerConst > 5)
{
pPortParam->m_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerCnt
= pPortParam->m_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerConst - 5;
}
}
//GetPrivateProString(szSection, "<22><>ʱʱ<CAB1><CAB1>", "20", szbuf, 120, szPortConfig);
//pPortParam->m_psLink[i].m_u32TimeOutConst = (int)(atof(szbuf)*1000/TIMER_CNT);
pPortParam->m_psLink[i].m_u32TimeOutConst = pPortParam->m_psBaoHu->RetryTime;
}
for(i=1; i<pPortParam->m_iLinkNum; i++)
{
for(j=0; j<BUBAN103_TIMER_CMD_NUM; j++)
{
pPortParam->m_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerConst
= pPortParam->m_psLink[0].m_sArrayCmdTime[j].m_iCmdTimerConst;
pPortParam->m_psLink[i].m_sArrayCmdTime[j].m_iCmdTimerCnt
= pPortParam->m_psLink[0].m_sArrayCmdTime[j].m_iCmdTimerCnt;
}
pPortParam->m_psLink[i].m_u32TimeOutConst = pPortParam->m_psLink[0].m_u32TimeOutConst;
}
for(i=0; i<pPortParam->m_iLinkNum; i++)
{
sprintf(entry, "<EFBFBD><EFBFBD>·%dģ<64><C4A3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>", i+1);
GetPrivateProString(szSection, entry, "103template.csv", pPortParam->m_psLink[i].m_chArrayTempletFileName,
sizeof(pPortParam->m_psLink[i].m_chArrayTempletFileName)-1, szPortConfig);
#ifdef OS_LINUX
sprintf(szTemplate, "inf/%s", pPortParam->m_psLink[i].m_chArrayTempletFileName);
#else
sprintf(szTemplate, "%s/inf/%s", IniFilePath, pPortParam->m_psLink[i].m_chArrayTempletFileName);
#endif
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ
//InitBuban103InfoFromTempletFile(commid, szTemplate, &pPortParam->m_psLink[i]);
//InitBuban103InfoFromDat(commid, &pPortParam->m_psLink[i]);
if(PROTOCOL_SLAVE == pPortParam->m_psBaoHu->PortType)
{
// wen 2005.06.22 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>,<2C><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
//InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], FALSE);
if(FALSE == InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], FALSE))
{
pPortParam->m_iLinkNum = i;
break;
}
}
else
{
// wen 2005.06.22 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>,<2C><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
//InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], TRUE);
//InitBuban103InfoFromDat(commid, &pPortParam->m_psLink[i]);
if(FALSE == InitBuban103InfoFromTempletFileEx(commid, szTemplate, &pPortParam->m_psLink[i], TRUE))
{
pPortParam->m_iLinkNum = i;
break;
}
else
{
InitBuban103InfoFromDat(commid, &pPortParam->m_psLink[i]);
}
}
}
// wen 2005.05.17 <20><><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
ReCalcDevPntStart(commid, pPortParam);
InitBuban103CmdBuf(commid, pPortParam);
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10<31><30>
for(i=0; i<pPortParam->m_iLinkNum; i++)
{
if(pPortParam->m_psLink[i].m_psProvDev == NULL)
{
break;
}
for(j=0; j<pPortParam->m_psLink[i].m_iDevNum; j++)
{
iDevId = (commid<<16) + (i<<8) + j;
SingleListInitEx(&pPortParam->m_psLink[i].m_psProvDev[j].m_sBaoHuData, 10, iDevId);
}
}
//Buban103DispConfig(commid, pPortParam);
}
//********************************************************************
//* <20><>ȡ<EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//* u_char buf : <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> *
//* int len : <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> *
//********************************************************************
void Buban103RecvData(int commid, u_char *buf, int len)// <20><>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
{
int i;
pBUBAN103PORTPARAM pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
if(!IsExtInfoPtr(commid))
return;
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
for(i=0; i<len; i++)
{
switch(pPortParam->m_psBaoHu->m_iRevStatus)
{
case 0:// 0x10 / 0x68
pPortParam->m_iRecvLen = 0;
if(buf[i] == 0x10)
{
pPortParam->m_psBaoHu->m_iRevStatus = 4;
pPortParam->m_psBaoHu->m_iNeedRevLength = 4;
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
}
else if(buf[i] == 0x68)
{
pPortParam->m_psBaoHu->m_iRevStatus++;
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SioParam[commid].ErrMsgNum++;
}
break;
case 1:
case 2:
pPortParam->m_psBaoHu->m_iRevStatus++;
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
break;
case 3:// <20><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>
if(buf[i] == 0x68)
{
if(pPortParam->m_achRecvBuf[1] != pPortParam->m_achRecvBuf[2])
{
pPortParam->m_psBaoHu->m_iRevStatus=1;
SioParam[commid].ErrMsgNum += pPortParam->m_iRecvLen;
Buban103ProcessData(commid, pPortParam, FALSE);
pPortParam->m_iRecvLen = 0;
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
}
else
{
pPortParam->m_psBaoHu->m_iRevStatus++;
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
pPortParam->m_psBaoHu->m_iNeedRevLength = (BYTE)(pPortParam->m_achRecvBuf[1])+2;
}
}
else
{
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
pPortParam->m_psBaoHu->m_iRevStatus=5;
}
break;
case 4:// <20><>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pPortParam->m_psBaoHu->m_iNeedRevLength--;
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
if(pPortParam->m_psBaoHu->m_iNeedRevLength > 0)
break;
if(buf[i] != 0x16)
{
pPortParam->m_psBaoHu->m_iRevStatus=5;
break;
}
if(Buban103Check(pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen) == TRUE)
{
Buban103ProcessData(commid, pPortParam, TRUE);
pPortParam->m_psBaoHu->m_iRevStatus = 0;
pPortParam->m_psBaoHu->RevCmdFlag = 1;
}
else
{
SioParam[commid].ErrMsgNum += pPortParam->m_iRecvLen;
SioParam[commid].LostSyncCnt++;
pPortParam->m_psBaoHu->m_iRevStatus = 5;
}
#ifndef OS_LINUX
if((GetCurPort() == commid) && IsRealDataDisp())
{
WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA,
(BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen);
}
#endif
break;
case 5:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
default:
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
if(buf[i] == 0x16)
{
#ifndef OS_LINUX
// wen 2004.11.22 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
if((GetCurPort() == commid) && IsRealDataDisp())
{
WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA,
(BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen);
}
#endif
Buban103ProcessData(commid, pPortParam, FALSE);
SioParam[commid].ErrMsgNum += pPortParam->m_iRecvLen;
pPortParam->m_psBaoHu->m_iRevStatus = 0;
pPortParam->m_iRecvLen = 0;
}
else
{
if(pPortParam->m_iRecvLen > 200)
{
#ifndef OS_LINUX
// wen 2004.11.22 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
if((GetCurPort() == commid) && IsRealDataDisp())
{
WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA,
(BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen);
}
#endif
Buban103ProcessData(commid, pPortParam, FALSE);
SioParam[commid].ErrMsgNum += pPortParam->m_iRecvLen;
pPortParam->m_iRecvLen = 0;
}
}
break;
}
}
#ifdef _DEBUG_MSG_
sprintf(szbuf, "wen: commid = %d, send=%d, recv=%d, error=%d, lost=%d\n", commid,
SioParam[commid].SendCharNum, SioParam[commid].RecvCharNum,
SioParam[commid].ErrMsgNum, SioParam[commid].LostSyncCnt);
DebugPrint(szbuf);
#endif
}
//********************************************************************
//* <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//********************************************************************
void Buban103Timer(int commid)
{
BUBAN103PORTPARAM *pPortParam;
BUBAN103LINKDEF *pLinkParam;
if(IsExtInfoPtr(commid) == FALSE)
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
// wen 2005.06.22 <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>Ϊ0ֱ<30><D6B1><EFBFBD>˳<EFBFBD>
if(pPortParam->m_iLinkNum <= 0)
{
return;
}
// <20><><EFBFBD><EFBFBD>Ϊת<CEAA><D7AA><EFBFBD>˿ڣ<CBBF><DAA3>򲻽<EFBFBD><F2B2BBBD><EFBFBD><EFBFBD><EFBFBD>ѯָ<D1AF><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>
if(PROTOCOL_SLAVE != pPortParam->m_psBaoHu->PortType)
{
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
if(IsDevLinkOk(pLinkParam, pPortParam->m_iLinkIdx) == TRUE)
{
if(pLinkParam->m_uchLinkAddr != 0xFF)
{
if(IsLinkTimeOut(pLinkParam, 0) == TRUE)
{
InitBuban103CmdBuf(commid, pPortParam);
}
}
else
{
if(IsLinkTimeOut(pLinkParam, pPortParam->m_iLinkIdx) == TRUE)
{
InitBuban103DevCmdBuf(pLinkParam, pLinkParam->m_iDevIdx);
}
}
}
//Buban103FindNextCmd(commid);
if(TRUE == Buban103FindNextCmdEx(commid))
{
Buban103CalcNextDev(commid, FALSE);
}
}
Buban103SendCmdFormPollCmdBuf(commid);
}
//********************************************************************
//* ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//* u_char buf : <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> *
//* int len : <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD> *
//********************************************************************
void Buban103YkYtProcess(int commid, u_char *buf, int len) // ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
int iDirect,portno, ykytpnt;
u_char asdu, dco;
CASDU20 bCAsdu20;
YKYT_PARAM YkYtParam;
DEVDEF *pDevParam;
DEVADDRPARAM sAddrParam;
BUBAN103PORTPARAM *pPortParam;
char szbuf[128];
// buf[0] --- <20>˿ں<CBBF>(=commid)
// buf[1]
// buf[2]
// buf[3]
// buf[4] --- <20>ص<EFBFBD><D8B5><EFBFBD>
// buf[5]
// buf[6]
// buf[7]
// buf[8] --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2A3>:1=ѡ<><D1A1>,2=ִ<><D6B4>,3=ȡ<><C8A1>,7=ֱ<><D6B1>;
// ң<><D2A3>:4=ѡ<><D1A1>,5=ִ<><D6B4>,6=ȡ<><C8A1>,8=<3D><>ͣ)
// buf[9] --- <20><><EFBFBD><EFBFBD>״̬(1=<3D>ֵ<EFBFBD><D6B5>ϣ<EFBFBD>2=<3D>ϵ<EFBFBD><CFB5><EFBFBD>)
// (<28><><EFBFBD><EFBFBD>λΪ1ʱ<31><CAB1>Ϊ<EFBFBD><CEAA>У<EFBFBD><D0A3><EFBFBD><EFBFBD>, 1=<3D>غ<EFBFBD>, 2=<3D>ط<EFBFBD>, 3=ʧ<><CAA7>)
// <20><>ת<EFBFBD><D7AA>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>У<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA><EFBFBD>Ŀص<C4BF><D8B5>ţ<EFBFBD>ʵ<EFBFBD>ʵĶ˿ں<CBBF>Ӧ<EFBFBD><D3A6><EFBFBD>Ǹ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ķ˿<C4B6>
// <20><>ת<EFBFBD><D7AA><EFBFBD>㲢û<E3B2A2><C3BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ص㣬<D8B5><E3A3AC><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>һ<EFBFBD>¡<EFBFBD>
if(IsExtInfoPtr(commid) == FALSE)
{
return;
}
iDirect = buf[9] & 0x80;
portno = buf[0]+buf[1]*256+buf[2]*65536+buf[3]*16777216;
ykytpnt = buf[4]+buf[5]*256+buf[6]*65536+buf[7]*16777216;
//ykytpnt--;
// <20><>У<EFBFBD><D0A3>Ϣ(<28><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>)
if(iDirect)
{
if((buf[8] == STEP_YKYT_SELECT) || (buf[8] == STEP_YKYT_SELECT+3))
{
YkYtParam.m_iYkYtPnt = ykytpnt;
YkYtParam.m_iYkYtStep = buf[8];
YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP;
YkYtParam.m_iYkYtOperate = buf[9];
SendYkYtCommand2(commid, &YkYtParam);
sprintf(szbuf, "WARN(%04d): ת<><D7AA>ң<EFBFBD><D2A3>Ԥ<EFBFBD>У<EEB7B4>ɹ<EFBFBD>.\n", _getpid());
DebugPrint(szbuf);
return;
}
Buban103ProvMakeYkYtCommand(commid, buf, len);
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
// <20><>Уʧ<D0A3><CAA7>
// <20><><EFBFBD><EFBFBD>: <20>˿<EFBFBD><CBBF><EFBFBD>·״̬Ϊ<CCAC>ٻ<EFBFBD><D9BB><EFBFBD>δ<EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD>ʵĿص<C4BF>
if(FALSE == FindProtectDevFromYkYtPnt(pPortParam, &sAddrParam, ykytpnt))
{
YkYtParam.m_iYkYtPnt = ykytpnt;
YkYtParam.m_iYkYtStep = buf[8];
YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP;
YkYtParam.m_iYkYtOperate = 3;
SendYkYtCommand2(commid, &YkYtParam);
return;
}
else if(FALSE == IsDevLinkOk(&pPortParam->m_psLink[sAddrParam.m_iLinkIdx], sAddrParam.m_iDevIdx))
{
YkYtParam.m_iYkYtPnt = ykytpnt;
YkYtParam.m_iYkYtStep = buf[8];
YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP;
YkYtParam.m_iYkYtOperate = 3;
SendYkYtCommand2(commid, &YkYtParam);
return;
}
pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx];
asdu = pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Asdu;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(buf[8])
{
case STEP_YKYT_SELECT:
case STEP_YKYT_SELECT+3://ѡ<><D1A1>
if((C_DC_NA_3 != asdu) && (C_RC_NA_3 != asdu))
{// ֱ<>ط<EFBFBD>ʽ
YkYtParam.m_iYkYtPnt = ykytpnt;
YkYtParam.m_iYkYtStep = buf[8];
YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP;
YkYtParam.m_iYkYtOperate = buf[9];
SendYkYtCommand2(commid, &YkYtParam);
}
else
{
ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
bCAsdu20.nTYP = asdu; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
bCAsdu20.nVSQ = 0x01; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
bCAsdu20.nCOT = 0x0c; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
if(buf[9] == 2)
{
bCAsdu20.nDCO = 0x81; //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>ط<EFBFBD>)
}
else
{
bCAsdu20.nDCO = 0x82; //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>غ<EFBFBD>)
}
bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>
if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255)
{
MakeBuban103LinkCommand(commid, pDevParam->m_sDevParam.m_u8DevAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
else
{
MakeBuban103LinkCommand(commid, \
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
YkYtParam.m_iYkYtPnt = ykytpnt;
YkYtParam.m_iYkYtStep = buf[8];
YkYtParam.m_iYkYtUpDown = YKYT_SEND_UP;
YkYtParam.m_iYkYtOperate = buf[9];
SendYkYtCommand2(commid, &YkYtParam);
}
break;
case STEP_YKYT_EXEC:
case STEP_YKYT_EXEC+3://ִ<><D6B4>
//pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx];
ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
// ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>asdu20,<2C><><EFBFBD><EFBFBD>asdu64/65<36><35> yizhonghu 20060803
//bCAsdu20.nTYP = 20; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
bCAsdu20.nTYP = asdu; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
bCAsdu20.nVSQ = 0x81; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
if(asdu == 20)
{
bCAsdu20.nCOT = 0x14; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
bCAsdu20.nVSQ = 0x81; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
}
else
{
bCAsdu20.nCOT = 0x0c; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
bCAsdu20.nVSQ = 0x01; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
}
bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
dco = 0;
if(buf[9] == 2)
{
bCAsdu20.nDCO = (1 | dco); //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>ط<EFBFBD>)
}
else
{
bCAsdu20.nDCO = (2 | dco); //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>غ<EFBFBD>)
}
bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>
if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255)
{
MakeBuban103LinkCommand(commid, pDevParam->m_sDevParam.m_u8DevAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
else
{
MakeBuban103LinkCommand(commid, \
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
break;
case STEP_YKYT_CANCEL:
case STEP_YKYT_CANCEL+3://ȡ<><C8A1>
//pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx];
ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
bCAsdu20.nTYP = asdu; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
bCAsdu20.nVSQ = 0x01; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
bCAsdu20.nCOT = 0x0c; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
dco = 0xc0;
if(buf[9] == 2)
{
bCAsdu20.nDCO = (1 | dco); //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>ط<EFBFBD>)
}
else
{
bCAsdu20.nDCO = (2 | dco); //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>غ<EFBFBD>)
}
bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>
if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255)
{
MakeBuban103LinkCommand(commid, pDevParam->m_sDevParam.m_u8DevAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
else
{
MakeBuban103LinkCommand(commid, \
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
break;
case STEP_YKYT_DIRECT:// ֱ<><D6B1>
break;
case STEP_YKYT_STOP:// <20><>ͣ
//pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx];
ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
bCAsdu20.nTYP = asdu; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
bCAsdu20.nVSQ = 0x01; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
bCAsdu20.nCOT = 0x0c; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
dco = 0x00;
bCAsdu20.nDCO = (3 | dco); //ң<><D2A3><EFBFBD><EFBFBD>ͣ
bCAsdu20.nRII = (BYTE)sAddrParam.m_iLinkIdx;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>
if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255)
{
MakeBuban103LinkCommand(commid, pDevParam->m_sDevParam.m_u8DevAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
else
{
MakeBuban103LinkCommand(commid, \
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), INSERT_POLL_CMD);
}
break;
default:
break;
}
}
//********************************************************************
//* ϵͳ<CFB5>·<EFBFBD><C2B7><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//********************************************************************
void Buban103SendSystemTime(int commid) // ϵͳ<CFB5><CDB3>ʱ
{
int i, j;
CMDPARAM sCmdParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
char szbuf[128];
if(IsExtInfoPtr(commid) == FALSE)
{
return;
}
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
if(2 != pPortParam->m_psBaoHu->CheckTime)
{
return;
}
sprintf(szbuf, "port=%d,CheckTime=%d",commid+1, pPortParam->m_psBaoHu->CheckTime);
DebugPrint(szbuf);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>װ<EFBFBD>÷<EFBFBD><C3B7>Ͷ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
for(i=0; i<pPortParam->m_iLinkNum; i++)
{
pLinkParam = &pPortParam->m_psLink[i];
for(j=0; j<pLinkParam->m_iDevNum; j++)
{
pDevParam = &pLinkParam->m_psDev[j];
sCmdParam.m_sDevAddr.m_uchLinkAddr = pLinkParam->m_uchLinkAddr;
sCmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
sCmdParam.m_uchFun = (u_char)pDevParam->m_sDevParam.m_sSyncTimeInfo.m_u8Fun;
sCmdParam.m_uchInf = (u_char)pDevParam->m_sDevParam.m_sSyncTimeInfo.m_u8Inf;
sCmdParam.m_uchRII = pDevParam->m_u8RII;
MakeTimeSyn_CAsdu6(commid, &sCmdParam);
}
}
}
//********************************************************************
//* ϵͳ<CFB5>˳<EFBFBD>ʱ<EFBFBD><CAB1>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//********************************************************************
void Buban103Exit(int commid)
{
int i, j, k;
DBORIENTATION *pDB;
GROUPDEF *pGroup;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(SioParam[commid].ExtInfo == NULL)
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
if(pPortParam->m_psLink == NULL)
{
return;
}
for(i=0; i<pPortParam->m_iLinkNum; i++)
{
pLinkParam = (BUBAN103LINKDEF *)(&pPortParam->m_psLink[i]);
if(pLinkParam->m_psDev != NULL)
{
for(j=0; j<pLinkParam->m_iDevNum; j++)
{
// ai
for(k=0; k<DEV_AI_MAXNUM; k++)
{
pDB = &pLinkParam->m_psDev[j].m_sDevParam.m_sAiDBOrientation[k];
if(pDB->m_psDataInfo != NULL)
{
HEAP_FREE(pDB->m_psDataInfo);
pDB->m_psDataInfo = NULL;
}
}
// di
pDB = &pLinkParam->m_psDev[j].m_sDevParam.m_sDiDBOrientation;
if(pDB->m_psDataInfo != NULL)
{
HEAP_FREE(pDB->m_psDataInfo);
pDB->m_psDataInfo = NULL;
}
// pi
pDB = &pLinkParam->m_psDev[j].m_sDevParam.m_sPiDBOrientation;
if(pDB->m_psDataInfo != NULL)
{
HEAP_FREE(pDB->m_psDataInfo);
pDB->m_psDataInfo = NULL;
}
// yk
pDB = &pLinkParam->m_psDev[j].m_sDevParam.m_sYkDBOrientation;
if(pDB->m_psDataInfo != NULL)
{
HEAP_FREE(pDB->m_psDataInfo);
pDB->m_psDataInfo = NULL;
}
// group
for(k=0; k<pLinkParam->m_psDev[j].m_sDevParam.m_iCfgGroupNum; k++)
{
pGroup = &pLinkParam->m_psDev[j].m_sDevParam.m_saGroupDef[k];
if(pGroup->m_psDataInfo != NULL)
{
HEAP_FREE(pGroup->m_psDataInfo);
pGroup->m_psDataInfo = NULL;
}
if(pGroup->m_psEventInfo != NULL)
{
HEAP_FREE(pGroup->m_psEventInfo);
pGroup->m_psEventInfo = NULL;
}
if(pGroup->m_pu8DataLen != NULL)
{
HEAP_FREE(pGroup->m_pu8DataLen);
pGroup->m_pu8DataLen = NULL;
}
if(pGroup->m_pu8DataType != NULL)
{
HEAP_FREE(pGroup->m_pu8DataType);
pGroup->m_pu8DataType = NULL;
}
if(pGroup->m_pu8GIN != NULL)
{
HEAP_FREE(pGroup->m_pu8GIN);
pGroup->m_pu8GIN = NULL;
}
}
if(pLinkParam->m_psDev[j].m_sDisturbanceParam.m_pshValue != NULL)
{
HEAP_FREE(pLinkParam->m_psDev[j].m_sDisturbanceParam.m_pshValue);
pLinkParam->m_psDev[j].m_sDisturbanceParam.m_pshValue = NULL;
}
}
HEAP_FREE(pLinkParam->m_psDev);
pLinkParam->m_psDev = NULL;
}
if(pLinkParam->m_psProvDev != NULL)
{
for(j=0; j<pLinkParam->m_iDevNum; j++)
{
if(pLinkParam->m_psProvDev[j].m_sYxInfo.m_psDataInfo != NULL)
{
HEAP_FREE(pLinkParam->m_psProvDev[j].m_sYxInfo.m_psDataInfo);
pLinkParam->m_psProvDev[j].m_sYxInfo.m_psDataInfo = NULL;
}
if(pLinkParam->m_psProvDev[j].m_sYcInfo.m_psDataInfo != NULL)
{
HEAP_FREE(pLinkParam->m_psProvDev[j].m_sYcInfo.m_psDataInfo);
pLinkParam->m_psProvDev[j].m_sYcInfo.m_psDataInfo = NULL;
}
if(pLinkParam->m_psProvDev[j].m_sYmInfo.m_psDataInfo != NULL)
{
HEAP_FREE(pLinkParam->m_psProvDev[j].m_sYmInfo.m_psDataInfo);
pLinkParam->m_psProvDev[j].m_sYmInfo.m_psDataInfo = NULL;
}
SingleListDelAllData(&pLinkParam->m_psProvDev[j].m_sBaoHuData);
}
HEAP_FREE(pLinkParam->m_psProvDev);
pLinkParam->m_psProvDev = NULL;
}
HEAP_FREE(pLinkParam->m_pbLinkOk);
pLinkParam->m_pbLinkOk = NULL;
HEAP_FREE(pLinkParam->m_pu32LinkOkCnt);
pLinkParam->m_pu32LinkOkCnt = NULL;
HEAP_FREE(pLinkParam->m_pu8CtlByte);
pLinkParam->m_pu8CtlByte = NULL;
}
HEAP_FREE(pPortParam->m_psLink);
pPortParam->m_psLink = NULL;
}
// <20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>˿<EFBFBD><CBBF>·<EFBFBD><C2B7><EFBFBD>ʵ<EFBFBD><CAB5>װ<EFBFBD>õı<C3B5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Buban103BaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData)
{
int iProvAddr;
PROVDEVDEF *pProvDevParam;
DEVADDRPARAM sAddrParam;
BUBAN103PORTPARAM *pPortParam;
char szbuf[128];
if((MSGTYPE_BAOHU_SCADACMD == rtumsg->MsgType)
|| (MSGTYPE_BAOHU_SCADADATA == rtumsg->MsgType))
{
sprintf(szbuf, "commid%d <20>յ<EFBFBD><D5B5><EFBFBD>ֵָ<D6B5><D6B8>", commid);
DebugPrint(szbuf);
Buban103ScadaProtocolExchange(commid, rtumsg);
return;
}
if(FALSE == GetPortParamPtr(commid, &pPortParam))
{
return;
}
switch(rtumsg->MsgData[0])
{
case 0x68:// <20><>֡
iProvAddr = rtumsg->MsgData[9];
break;
case 0x10:// <20><>֡
default:
iProvAddr = -1;
break;
}
if(iProvAddr < 0)
{
return;
}
if(FALSE == FindProtectDevFromProvAddr(pPortParam, &sAddrParam, iProvAddr))
{
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if(MSGTYPE_BAOHU_103DATA == rtumsg->MsgType)
if(bUpData == TRUE)
{
// ??? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D3A6>ֻ<EFBFBD><D6BB>asdu10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
pProvDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psProvDev[sAddrParam.m_iDevIdx];
SingleListAddData(&pProvDevParam->m_sBaoHuData, rtumsg->MsgData, rtumsg->MsgLen);
return;
}
// Ҫ<><D2AA><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>жϣ<D0B6><CFA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD>Ĵ洢<C4B4><E6B4A2><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>Դ
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuCommid = rtumsg->PortIdx;
memcpy((void *)&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sRealAddrParam,
(void *)&sAddrParam, sizeof(DEVADDRPARAM));
GetLocalTimeEx(&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sBaoHuCmdStartTime);
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuMsgType = MSGTYPE_BAOHU_103CMD;
// <20>޸<EFBFBD>Ҫ<EFBFBD>·<EFBFBD><C2B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ĵ<EFBFBD>ַ
if(sAddrParam.m_uchLinkAddr != 0xFF)
{
rtumsg->MsgData[5] = sAddrParam.m_uchLinkAddr;
}
else
{
rtumsg->MsgData[5] = sAddrParam.m_uchCommAddr;
}
rtumsg->MsgData[9] = sAddrParam.m_uchCommAddr;
PutPollCmdToBuf(commid, INSERT_POLL_CMD, 0, (char *)rtumsg->MsgData, rtumsg->MsgLen);
}
int Buban103GetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB)
{
DEVDEF *pDevParam;
DEVADDRPARAM sAddrParam;
BUBAN103PORTPARAM *pPortParam;
if(FALSE == GetPortParamPtr(commid, &pPortParam))
{
return 0;
}
if(FALSE == FindProtectDevFromProvAddr(pPortParam, &sAddrParam, iProvAddr))
{
return 0;
}
pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx];
*ppBaoHuDB = pDevParam->m_sDevParam.m_saGroupDef;
return pDevParam->m_sDevParam.m_iCfgGroupNum;
}
/////////////////////////ͨ<>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ӿڽ<D3BF><DABD><EFBFBD>///////////////////////////////
void Buban103ProvMakeYkYtCommand(int commid, u_char *buf, int len)
{
// buf[0] --- <20>˿ں<CBBF>(=commid)
// buf[1]
// buf[2]
// buf[3]
// buf[4] --- <20>ص<EFBFBD><D8B5><EFBFBD>
// buf[5]
// buf[6]
// buf[7]
// buf[8] --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2A3>:1=ѡ<><D1A1>,2=ִ<><D6B4>,3=ȡ<><C8A1>,7=ֱ<><D6B1>;
// ң<><D2A3>:4=ѡ<><D1A1>,5=ִ<><D6B4>,6=ȡ<><C8A1>,8=<3D><>ͣ)
// buf[9] --- <20><><EFBFBD><EFBFBD>״̬(1=<3D>ֵ<EFBFBD><D6B5>ϣ<EFBFBD>2=<3D>ϵ<EFBFBD><CFB5><EFBFBD>, 0=ʧ<><CAA7>)
// (<28><><EFBFBD><EFBFBD>λΪ1ʱ<31><CAB1>Ϊ<EFBFBD><CEAA>У<EFBFBD><D0A3><EFBFBD><EFBFBD>)
// <20><>ת<EFBFBD><D7AA>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>У<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA><EFBFBD>Ŀص<C4BF><D8B5>ţ<EFBFBD>ʵ<EFBFBD>ʵĶ˿ں<CBBF>Ӧ<EFBFBD><D3A6><EFBFBD>Ǹ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ķ˿<C4B6>
// <20><>ת<EFBFBD><D7AA><EFBFBD>㲢û<E3B2A2><C3BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ص㣬<D8B5><E3A3AC><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>һ<EFBFBD>¡<EFBFBD>
int ykytpnt;
u_char asdu;
CASDU20 bCAsdu20;
DEVDEF *pDevParam;
DEVADDRPARAM sAddrParam;
BUBAN103PORTPARAM *pPortParam;
if((buf[8] != STEP_YKYT_EXEC)\
&& (buf[8] != STEP_YKYT_EXEC+3)
&& (buf[8] != STEP_YKYT_DIRECT))
{
return;
}
if(IsExtInfoPtr(commid) == FALSE)
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
ykytpnt = buf[4]+buf[5]*256+buf[6]*65536+buf[7]*16777216;
if(FALSE == FindProtectDevFromYkYtPnt(pPortParam, &sAddrParam, ykytpnt))
{
return;
}
pDevParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_psDev[sAddrParam.m_iDevIdx];
ykytpnt -= pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
asdu = pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Asdu;
// ң<>ص<EFBFBD><D8B5><EFBFBD><EFBFBD>ͱ<EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>20<32><30><EFBFBD><EFBFBD>64/65 yizhonghu 20060803
//bCAsdu20.nTYP = 20; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
bCAsdu20.nTYP = asdu; //<2F><><EFBFBD>ͱ<EFBFBD>ʶ
if(asdu != 20)
{
bCAsdu20.nVSQ = 0x01; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
bCAsdu20.nCOT = 0x0c; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
}
else
{
bCAsdu20.nVSQ = 0x81; //<2F>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
bCAsdu20.nCOT = 0x14; //<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
}
bCAsdu20.nADDR = pDevParam->m_sDevParam.m_u8DevAddr; //Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
bCAsdu20.nFUN = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Fun;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bCAsdu20.nINF = (u_char)pDevParam->m_sDevParam.m_sYkDBOrientation.m_psDataInfo[ykytpnt].m_u8Inf;//<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
if(buf[9] == 2)
{
bCAsdu20.nDCO = 1; //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>ط<EFBFBD>)
}
else
{
bCAsdu20.nDCO = 2; //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7>(<28>غ<EFBFBD>)
}
bCAsdu20.nRII = pDevParam->m_u8RII;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>
if(pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr == 255)
{
MakeBuban103LinkCommand(commid, pDevParam->m_sDevParam.m_u8DevAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), FAST_POLL_CMD);
}
else
{
MakeBuban103LinkCommand(commid, \
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_uchLinkAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu20, sizeof(CASDU20), FAST_POLL_CMD);
}
}
//********************************************************************
//* <20><>ʼ<EFBFBD><CABC>װ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DEVPARAMDEF *psDevParam : װ<>ò<EFBFBD><C3B2><EFBFBD>ָ<EFBFBD><D6B8> *
//********************************************************************
void SetProtectDevStatus(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bStatus)
{
DI_DEF pntmsg;
DEVDEF *psDevDef;
if(psLinkParam->m_psDev == NULL)
{
return;
}
if(bStatus == TRUE)
{
pntmsg.Status = 1;
}
else
{
pntmsg.Status = 0;
}
psDevDef = &psLinkParam->m_psDev[iDevNo];
if(psLinkParam->m_iInputStationOfDevStatus > 0)
{
SetPntMsg(psLinkParam->m_iInputStationOfDevStatus-1,
psLinkParam->m_iInputStartPntOfDevStatus+iDevNo,
(void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
}
}
//===========================<3D><><EFBFBD><EFBFBD>Ϊװ<CEAA>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=====================
//********************************************************************
//* <20><>ʼ<EFBFBD><CABC>װ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DEVPARAMDEF *psDevParam : װ<>ò<EFBFBD><C3B2><EFBFBD>ָ<EFBFBD><D6B8> *
//********************************************************************
void InitDevParam(DEVPARAMDEF *psDevParam)
{
psDevParam->m_u8SCN = 0;
psDevParam->m_sSyncTimeInfo.m_u8Fun = 255;
psDevParam->m_u8CPUNo = 1;
psDevParam->m_u8FixNo = 1;
}
//********************************************************************
//* <20><>ȡģ<C8A1><C4A3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
//* char *ptrTemplate : ģ<><C4A3><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> *
//* BUBAN103LINKDEF *psLink : Ҫ<><D2AA><EFBFBD>ö˿ڵIJ<DAB5><C4B2><EFBFBD>ָ<EFBFBD><D6B8> *
//********************************************************************
BOOL InitBuban103InfoFromTempletFile(int commid,
char *ptrTemplate,
BUBAN103LINKDEF *psLink)
{
int i;
char *ptr;
char szBuf[512];
BOOL bVal;
HDSFILE hFile;
enum Param_Type ParamType;
hFile = DSOpenFileEx(ptrTemplate);
if(hFile == NULL)
{
// test
sprintf(szBuf, "open<%s> is failed.", ptrTemplate);
DebugPrint(szBuf);
return FALSE;
}
// test
sprintf(szBuf, "open<%s> is succeed.", ptrTemplate);
DebugPrint(szBuf);
ParamType = PARAM_NO;
while(TRUE)
{
ptr = DSfgets(szBuf, sizeof(szBuf), hFile);
if(!ptr)
{
break;
}
// test
//DebugPrint(szBuf);
if(strstr(ptr, "<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
ParamType = PARAM_LINK;
}
else if(strstr(ptr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
ParamType = PARAM_DEV;
}
else if(PARAM_NO == ParamType)
{
continue;
}
switch(ParamType)
{
case PARAM_LINK:
bVal = GetLinkParamFromTemplateFile(commid, hFile, psLink);
if(TRUE == bVal)
{
if(psLink->m_iDevNum > 0)
{
psLink->m_psDev = (DEVDEF *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(DEVDEF));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(DEVDEF));
if(psLink->m_psDev == NULL)
{
psLink->m_iDevNum = 0;
}
memset((void *)psLink->m_psDev, 0, psLink->m_iDevNum*sizeof(DEVDEF));
if(psLink->m_uchLinkAddr == 0xFF)
{
psLink->m_pbLinkOk = (BOOL *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(BOOL));
memset((void *)psLink->m_pbLinkOk, 0, psLink->m_iDevNum*sizeof(BOOL));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(BOOL));
psLink->m_pu32LinkOkCnt = (u_32 *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(u_32));
memset((void *)psLink->m_pu32LinkOkCnt, 0, psLink->m_iDevNum*sizeof(u_32));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(u_32));
psLink->m_pu8CtlByte = (BYTE *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(u_char));
memset(psLink->m_pu8CtlByte, 0, psLink->m_iDevNum*sizeof(u_char));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(u_char));
}
else
{
psLink->m_pbLinkOk = (BOOL *)HEAP_MALLOC(sizeof(BOOL));
psLink->m_pbLinkOk[0] = FALSE;
Buban103DispMalloc(commid, sizeof(BOOL));
psLink->m_pu32LinkOkCnt = (u_32 *)HEAP_MALLOC(sizeof(u_32));
psLink->m_pu32LinkOkCnt[0] = 0;
Buban103DispMalloc(commid, sizeof(u_32));
psLink->m_pu8CtlByte = (BYTE *)HEAP_MALLOC(sizeof(u_char));
psLink->m_pu8CtlByte[0] = 0;
Buban103DispMalloc(commid, sizeof(u_char));
}
for(i=0; i<psLink->m_iDevNum; i++)
{
InitDevParam(&psLink->m_psDev[i].m_sDevParam);
}
}
}
break;
case PARAM_DEV:
bVal = GetDevParamFromTemplateFile(commid, hFile, psLink);
break;
default:
break;
}
}
DSCloseFile(hFile);
return TRUE;
}
BOOL InitBuban103InfoFromTempletFileEx(int commid,
char *ptrTemplate,
BUBAN103LINKDEF *psLink,
BOOL bMaster)
{
char *ptr;
char szBuf[512];
BOOL bVal;
HDSFILE hFile;
enum Param_Type ParamType;
if(bMaster == TRUE)
{
return InitBuban103InfoFromTempletFile(commid, ptrTemplate, psLink);
}
hFile = DSOpenFile(ptrTemplate);
if(hFile == NULL)
{
// test
sprintf(szBuf, "open<%s> is failed.", ptrTemplate);
DebugPrint(szBuf);
return FALSE;
}
// test
sprintf(szBuf, "open<%s> is succeed.", ptrTemplate);
DebugPrint(szBuf);
ParamType = PARAM_NO;
while(TRUE)
{
ptr = DSfgets(szBuf, sizeof(szBuf), hFile);
if(!ptr)
{
break;
}
// test
//DebugPrint(szBuf);
if(strstr(ptr, "<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
ParamType = PARAM_LINK;
}
else if(strstr(ptr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
ParamType = PARAM_DEV;
}
else if(PARAM_NO == ParamType)
{
continue;
}
switch(ParamType)
{
case PARAM_LINK:
bVal = GetLinkParamFromTemplateFile(commid, hFile, psLink);
if(TRUE == bVal)
{
if(psLink->m_iDevNum > 0)
{
psLink->m_psProvDev = (PROVDEVDEF *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(PROVDEVDEF));
if(psLink->m_psProvDev == NULL)
{
psLink->m_iDevNum = 0;
}
memset((void *)psLink->m_psProvDev, 0, psLink->m_iDevNum*sizeof(PROVDEVDEF));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(PROVDEVDEF));
if(psLink->m_uchLinkAddr == 0xFF)
{
psLink->m_pbLinkOk = (BOOL *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(BOOL));
memset((void *)psLink->m_pbLinkOk, 0, psLink->m_iDevNum*sizeof(BOOL));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(BOOL));
psLink->m_pu32LinkOkCnt = (u_32 *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(u_32));
memset((void *)psLink->m_pu32LinkOkCnt, 0, psLink->m_iDevNum*sizeof(u_32));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(u_32));
psLink->m_pu8CtlByte = (BYTE *)HEAP_MALLOC(psLink->m_iDevNum*sizeof(u_char));
memset(psLink->m_pu8CtlByte, 0, psLink->m_iDevNum*sizeof(u_char));
Buban103DispMalloc(commid, psLink->m_iDevNum*sizeof(u_char));
}
else
{
psLink->m_pbLinkOk = (BOOL *)HEAP_MALLOC(sizeof(BOOL));
psLink->m_pbLinkOk[0] = FALSE;
Buban103DispMalloc(commid, sizeof(BOOL));
psLink->m_pu32LinkOkCnt = (u_32 *)HEAP_MALLOC(sizeof(u_32));
psLink->m_pu32LinkOkCnt[0] = 0;
Buban103DispMalloc(commid, sizeof(u_32));
psLink->m_pu8CtlByte = (BYTE *)HEAP_MALLOC(sizeof(u_char));
psLink->m_pu8CtlByte[0] = 0;
Buban103DispMalloc(commid, sizeof(u_char));
}
}
}
break;
case PARAM_DEV:
bVal = GetProvDevParamFromTemplateFile(commid, hFile, psLink);
break;
default:
break;
}
}
DSCloseFile(hFile);
return TRUE;
}
BOOL GetParamItem(char *pSour, char **ppDest)
{
if(pSour == NULL)
{
return FALSE;
}
*ppDest = strstr(pSour, ",");
if(*ppDest == NULL)
{
return FALSE;
}
return TRUE;
}
BOOL GetParamItemEx(char *pSour, char **ppDest, const char *pSplit)
{
if(pSour == NULL)
{
return FALSE;
}
*ppDest = strstr(pSour, pSplit);
if(*ppDest == NULL)
{
return FALSE;
}
return TRUE;
}
BOOL GetLinkParamFromTemplateFile(int commid, HDSFILE hFile,\
BUBAN103LINKDEF *psLink)
{
char *ptr, *ptrSour, *ptrDest;
char szBuf[512];
int i, ilen;
BOOL bRetVal;
ptr = DSfgets(szBuf, sizeof(szBuf), hFile);
if(ptr == NULL)
{
return FALSE;
}
ptrSour = szBuf;
if(strstr(ptrSour, "LINK") == NULL)
{
return FALSE;
}
// test
//DebugPrint(szBuf);
bRetVal = TRUE;
for(i=0; i<13; i++)
{
if(GetParamItem(ptrSour, &ptrDest) == FALSE)
{
bRetVal = FALSE;
break;
}
*ptrDest = 0;
ilen = strlen(ptrSour);
switch(i)
{
case 0:// <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
if(ilen > 0)
{
if(ilen >= sizeof(psLink->m_szLinkName))
{
ilen = sizeof(psLink->m_szLinkName)-1;
}
memcpy(psLink->m_szLinkName, ptrSour, ilen);
psLink->m_szLinkName[ilen] = 0;
}
break;
case 1:// <20><>·<EFBFBD><C2B7>ʶ
break;
case 2:// <20><>·<EFBFBD><C2B7>ַ
if(ilen > 0)
{
psLink->m_uchLinkAddr = (BYTE)atoi(ptrSour);
}
else
{
psLink->m_uchLinkAddr = 255;
}
break;
case 3:// װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(ilen > 0)
{
psLink->m_iDevNum = (BYTE)atoi(ptrSour);
}
break;
case 4:// <20><><EFBFBD><EFBFBD>
break;
case 5:// <20><><EFBFBD><EFBFBD>
break;
case 6:// <20><>ַƫ<D6B7><C6AB>
if(ilen > 0)
{
psLink->m_iProvAddrOffset = atoi(ptrSour);
}
break;
case 7:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case 8:// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>վ<EFBFBD><D5BE>
if(ilen > 0)
{
psLink->m_iInputStationOfDevStatus = atoi(ptrSour);
}
break;
case 9:// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
if(ilen > 0)
{
psLink->m_iInputStartPntOfDevStatus = atoi(ptrSour);
}
break;
case 10:// <20>Ƿ<EFBFBD><C7B7>ж<EFBFBD>ASDU<44><55>
if(ilen > 0)
{
psLink->m_iJudgeAsduNo = atoi(ptrSour);
}
break;
case 11:// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
if(ilen > 0)
{
psLink->m_iDisTransDataProcess = atoi(ptrSour);
}
break;
case 12:// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
if(ilen > 0)
{
psLink->m_iMaskNoMatchString = atoi(ptrSour);
}
break;
case 13:// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ɴ<C9B4><EFA3AC>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><E2B4A6>)
if(ilen > 0)
{
psLink->m_iQueryNum_CLASS1_Const = atoi(ptrSour);
}
else
{
psLink->m_iQueryNum_CLASS1_Const = 1;
}
break;
}
ptrSour = ptrDest+1;
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
if(bRetVal == TRUE)
{
// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
if(strlen(ptrSour) > 0)
{
psLink->m_iQueryNum_CLASS1_Const = atoi(ptrSour);
}
else
{
psLink->m_iQueryNum_CLASS1_Const = 1;
}
}
return bRetVal;
}
BOOL GetDevParamFromTemplateFile(int commid, HDSFILE hFile,\
BUBAN103LINKDEF *psLink)
{
char *ptr, *ptrSour, *ptrDest;
char szBuf[512];
int i, j, ilen, iNum;
int iAiNum, iAiStart, iDiStart;
int iPiStart, iYkStart, iPntNo;
BOOL bRetVal;
enum Param_Type ParamType;
iAiStart = 0;
iDiStart = 0;
iPiStart = 0;
iYkStart = 0;
iAiNum = 0;
ParamType = PARAM_NO;
bRetVal = TRUE;
for(i=0; i<psLink->m_iDevNum;)
{
ptr = DSfgets(szBuf, sizeof(szBuf), hFile);
if(ptr == NULL)
{
break;
}
// test
//DebugPrint(szBuf);
if(strstr(ptr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
i++;
iAiNum = 0;
ParamType = PARAM_NO;
continue;
}
if(strstr(ptr, "<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
break;
}
ptrSour = ptr;
for(j=0; j<8; j++)
{
if(GetParamItem(ptrSour, &ptrDest) == FALSE)
{
bRetVal = FALSE;
break;
}
*ptrDest = 0;
ilen = strlen(ptrSour);
switch(j)
{
case 0:// <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(ParamType != PARAM_NO)
{
break;
}
if(ilen > 0)
{
if(ilen >= sizeof(psLink->m_psDev[i].m_sDevParam.m_szDevName))
{
ilen = sizeof(psLink->m_psDev[i].m_sDevParam.m_szDevName)-1;
}
memcpy(psLink->m_psDev[i].m_sDevParam.m_szDevName, ptrSour, ilen);
psLink->m_psDev[i].m_sDevParam.m_szDevName[ilen] = 0;
}
break;
case 1:// <20><EFBFBD>ͺ<EFBFBD>
if(ParamType != PARAM_NO)
{
break;
}
if(ilen > 0)
{
if(ilen >= sizeof(psLink->m_psDev[i].m_sDevParam.m_szType))
{
ilen = sizeof(psLink->m_psDev[i].m_sDevParam.m_szType)-1;
}
memcpy(psLink->m_psDev[i].m_sDevParam.m_szType, ptrSour, ilen);
psLink->m_psDev[i].m_sDevParam.m_szType[ilen] = 0;
}
else
{
strcpy(psLink->m_psDev[i].m_sDevParam.m_szType, "dat103");
}
break;
case 2:// <20><EFBFBD><E8B1B8>ַ
if(ParamType != PARAM_NO)
{
break;
}
if(ilen > 0)
{
psLink->m_psDev[i].m_sDevParam.m_u8DevAddr = (BYTE)atoi(ptrSour);
}
break;
case 3:// ת<><D7AA><EFBFBD><EFBFBD>ַ
if(PARAM_NO != ParamType)
{
break;
}
if(ilen > 0)
{
psLink->m_psDev[i].m_sDevParam.m_iProvAddr = atoi(ptrSour);
}
break;
case 4:// <20><><EFBFBD><EFBFBD>
break;
case 5:// <20><><EFBFBD><EFBFBD>
break;
case 6:// <20><><EFBFBD><EFBFBD>
if(ilen > 0)
{
iNum = atoi(ptrSour);
}
break;
case 7:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(iNum <= 0)
{
break;
}
if(ilen > 0)
{
if(strcmp(ptrSour, "YC") == 0)
{
ParamType = PARAM_YC;
psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_iStnNo = commid+1;
psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_iStartPntNo = iAiStart;
psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_iPntNum = iNum;
if(NULL != psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_psDataInfo)
{
HEAP_FREE(psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_psDataInfo);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_psDataInfo
// = (DBINFO *)HEAP_MALLOC(sizeof(DBINFO)*iNum);
//memset((void *)psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_psDataInfo,
// 0, sizeof(DBINFO)*iNum);
//========================================================================================
psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_psDataInfo
= (DBINFO *)HEAP_MALLOC(sizeof(DBINFO));
memset((void *)psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum].m_psDataInfo,
0, sizeof(DBINFO));
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Buban103DispMalloc(commid, sizeof(DBINFO)*iNum);
iAiStart += iNum;
iAiNum++;
iPntNo = 0;
}
else if(strcmp(ptrSour, "YX") == 0)
{
ParamType = PARAM_YX;
psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_iStnNo = commid+1;
psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_iStartPntNo = iDiStart;
psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_iPntNum = iNum;
if(NULL != psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_psDataInfo)
{
HEAP_FREE(psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_psDataInfo);
}
psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_psDataInfo
= (DBINFO *)HEAP_MALLOC(sizeof(DBINFO)*iNum);
memset((void *)psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation.m_psDataInfo,
0, sizeof(DBINFO)*iNum);
Buban103DispMalloc(commid, sizeof(DBINFO)*iNum);
iDiStart += iNum;
iPntNo = 0;
}
else if(strcmp(ptrSour, "YM") == 0)
{
ParamType = PARAM_YM;
psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_iStnNo = commid+1;
psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_iStartPntNo = iPiStart;
psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_iPntNum = iNum;
if(NULL != psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_psDataInfo)
{
HEAP_FREE(psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_psDataInfo);
}
psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_psDataInfo
= (DBINFO *)HEAP_MALLOC(sizeof(DBINFO)*iNum);
memset((void *)psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation.m_psDataInfo,
0, sizeof(DBINFO)*iNum);
Buban103DispMalloc(commid, sizeof(DBINFO)*iNum);
iPiStart += iNum;
iPntNo = 0;
}
else if(strcmp(ptrSour, "YK") == 0)
{
ParamType = PARAM_YK;
psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_iStnNo = commid+1;
psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_iStartPntNo = iYkStart;
psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_iPntNum = iNum;
if(NULL != psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_psDataInfo)
{
HEAP_FREE(psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_psDataInfo);
}
psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_psDataInfo
= (DBINFO *)HEAP_MALLOC(sizeof(DBINFO)*iNum);
memset((void *)psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation.m_psDataInfo,
0, sizeof(DBINFO)*iNum);
Buban103DispMalloc(commid, sizeof(DBINFO)*iNum);
iYkStart += iNum;
iPntNo = 0;
}
else if(strcmp(ptrSour, "SYNCTIME") == 0)
{
ParamType = PARAM_SYNCTIME;
iPntNo = 0;
}
else if(strcmp(ptrSour, "ASDU10") == 0)
{
ParamType = PARAM_ASDU10;
psLink->m_psDev[i].m_sDevParam.m_iCfgGroupNum = iNum;
iPntNo = 0;
}
}
break;
default:
break;
}
ptrSour = ptrDest+1;
}
switch(ParamType)
{
case PARAM_YC:
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//if(TRUE == GetInfoData(ptrSour, iPntNo,
// (DBORIENTATION *)(&psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation)))
//{
// iPntNo++;
//}
//===============================================================================================
if(iAiNum > 0)
{
GetInfoData(ptrSour, 0, (DBORIENTATION *)(&psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[iAiNum-1]));
}
else
{
GetInfoData(ptrSour, 0, (DBORIENTATION *)(&psLink->m_psDev[i].m_sDevParam.m_sAiDBOrientation[0]));
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
break;
case PARAM_YX:
if(TRUE == GetInfoData(ptrSour, iPntNo,
&psLink->m_psDev[i].m_sDevParam.m_sDiDBOrientation))
{
iPntNo++;
}
break;
case PARAM_YM:
if(TRUE == GetInfoData(ptrSour, iPntNo,
&psLink->m_psDev[i].m_sDevParam.m_sPiDBOrientation))
{
iPntNo++;
}
break;
case PARAM_YK:
if(TRUE == GetInfoData(ptrSour, iPntNo,
&psLink->m_psDev[i].m_sDevParam.m_sYkDBOrientation))
{
iPntNo++;
}
break;
case PARAM_SYNCTIME:
GetSyncTimeInfoData(ptrSour, &psLink->m_psDev[i].m_sDevParam.m_sSyncTimeInfo);
break;
case PARAM_ASDU10:
if(TRUE == GetGroupInfoData(ptrSour, iPntNo, &psLink->m_psDev[i].m_sDevParam))
{
iPntNo++;
}
break;
default:
break;
}
}
return bRetVal;
}
BOOL GetProvDevParamFromTemplateFile(int commid,HDSFILE hFile,\
BUBAN103LINKDEF *psLink)
{
char *ptr, *ptrSour, *ptrDest;
char szBuf[512];
int i, j, ilen, iNum;
int iAiNum, iAiStart, iDiStart;
int iPiStart, iYkStart, iPntNo;
BOOL bRetVal;
enum Param_Type ParamType;
iAiStart = 0;
iDiStart = 0;
iPiStart = 0;
iYkStart = 0;
iAiNum = 0;
ParamType = PARAM_NO;
bRetVal = TRUE;
for(i=0; i<psLink->m_iDevNum;)
{
ptr = DSfgets(szBuf, sizeof(szBuf), hFile);
if(ptr == NULL)
{
break;
}
// test
//DebugPrint(szBuf);
if(strstr(ptr, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
i++;
iAiNum = 0;
ParamType = PARAM_NO;
continue;
}
if(strstr(ptr, "<EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>") != NULL)
{
break;
}
ptrSour = ptr;
for(j=0; j<8; j++)
{
if(GetParamItem(ptrSour, &ptrDest) == FALSE)
{
bRetVal = FALSE;
break;
}
*ptrDest = 0;
ilen = strlen(ptrSour);
switch(j)
{
case 0:// <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
break;
case 1:// <20><EFBFBD>ͺ<EFBFBD>
break;
case 2:// <20><EFBFBD><E8B1B8>ַ
break;
case 3:// ת<><D7AA><EFBFBD><EFBFBD>ַ
if(PARAM_NO != ParamType)
{
break;
}
if(ilen > 0)
{
psLink->m_psProvDev[i].m_iProvAddr = atoi(ptrSour);
}
break;
case 4:// <20>˿ں<CBBF>&״̬վ<CCAC><D5BE>&״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(PARAM_NO != ParamType)
{
break;
}
if(ilen > 0)
{
psLink->m_psProvDev[i].m_iRealCommid = atoi(ptrSour);
if(GetParamItemEx(ptrSour, &ptrDest, "&") == FALSE)
{
psLink->m_psProvDev[i].m_iStatusStn = 0;
psLink->m_psProvDev[i].m_iStatusPnt = 0;
break;
}
ptrSour = ptrDest+1;
if(strlen(ptrSour) > 0)
{
psLink->m_psProvDev[i].m_iStatusStn = atoi(ptrSour);
if(GetParamItemEx(ptrSour, &ptrDest, "&") == FALSE)
{
psLink->m_psProvDev[i].m_iStatusStn = 0;
psLink->m_psProvDev[i].m_iStatusPnt = 0;
break;
}
ptrSour = ptrDest+1;
if(strlen(ptrSour) > 0)
{
psLink->m_psProvDev[i].m_iStatusPnt = atoi(ptrSour);
}
}
}
break;
case 5:// <20><><EFBFBD><EFBFBD>
break;
case 6:// <20><><EFBFBD><EFBFBD>
if(ilen > 0)
{
iNum = atoi(ptrSour);
}
break;
case 7:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(iNum <= 0)
{
break;
}
if(ilen > 0)
{
if(strcmp(ptrSour, "YC") == 0)
{
ParamType = PARAM_YC;
psLink->m_psProvDev[i].m_sYcInfo.m_iPntNum = iNum;
psLink->m_psProvDev[i].m_sYcInfo.m_iStartPntNo = 0;
psLink->m_psProvDev[i].m_sYcInfo.m_iStnNo = 0;
psLink->m_psProvDev[i].m_sYcInfo.m_psDataInfo = NULL;
iPntNo = 0;
}
else if(strcmp(ptrSour, "YX") == 0)
{
ParamType = PARAM_YX;
psLink->m_psProvDev[i].m_sYxInfo.m_iPntNum = iNum;
psLink->m_psProvDev[i].m_sYxInfo.m_iStartPntNo = 0;
psLink->m_psProvDev[i].m_sYxInfo.m_iStnNo = 0;
if(NULL != psLink->m_psProvDev[i].m_sYxInfo.m_psDataInfo)
{
HEAP_FREE(psLink->m_psProvDev[i].m_sYxInfo.m_psDataInfo);
}
psLink->m_psProvDev[i].m_sYxInfo.m_psDataInfo
= (DBINFO *)HEAP_MALLOC(sizeof(DBINFO)*iNum);
memset((void *)psLink->m_psProvDev[i].m_sYxInfo.m_psDataInfo,
0, sizeof(DBINFO)*iNum);
Buban103DispMalloc(commid, sizeof(DBINFO)*iNum);
iPntNo = 0;
}
else if(strcmp(ptrSour, "YM") == 0)
{
ParamType = PARAM_YM;
psLink->m_psProvDev[i].m_sYmInfo.m_iPntNum = iNum;
psLink->m_psProvDev[i].m_sYmInfo.m_iStartPntNo = 0;
psLink->m_psProvDev[i].m_sYmInfo.m_iStnNo = 0;
psLink->m_psProvDev[i].m_sYmInfo.m_psDataInfo = NULL;
iPntNo = 0;
}
else if(strcmp(ptrSour, "YK") == 0)
{
ParamType = PARAM_YK;
iPntNo = 0;
}
else if(strcmp(ptrSour, "SYNCTIME") == 0)
{
ParamType = PARAM_SYNCTIME;
iPntNo = 0;
}
else if(strcmp(ptrSour, "ASDU10") == 0)
{
ParamType = PARAM_ASDU10;
psLink->m_psProvDev[i].m_iAsdu10Num = iNum;
iPntNo = 0;
}
}
break;
default:
break;
}
ptrSour = ptrDest+1;
}
switch(ParamType)
{
case PARAM_YC:
break;
case PARAM_YX:
if(TRUE == GetInfoData(ptrSour, iPntNo,
&psLink->m_psProvDev[i].m_sYxInfo))
{
iPntNo++;
}
break;
case PARAM_YM:
break;
case PARAM_YK:
break;
case PARAM_SYNCTIME:
break;
case PARAM_ASDU10:
break;
default:
break;
}
}
return bRetVal;
}
BOOL GetInfoData(char *pInfo, int iPntNo, DBORIENTATION *psDB)
{
int i;
char *ptr1, *ptr2;
BOOL bRetVal;
if(pInfo == NULL)
{
return FALSE;
}
if(iPntNo >= psDB->m_iPntNum)
{
return FALSE;
}
if(psDB->m_psDataInfo == NULL)
{
return FALSE;
}
bRetVal = TRUE;
ptr1 = pInfo;
for(i=0; i<6; i++)
{
if(GetParamItem(ptr1, &ptr2) == FALSE)
{
//bRetVal = FALSE;
break;
}
*ptr2 = 0;
switch(i)
{
case 0:// <20><><EFBFBD><EFBFBD>
break;
case 1:// ASDU
if(strlen(ptr1) > 0)
{
psDB->m_psDataInfo[iPntNo].m_u8Asdu = atoi(ptr1);
}
break;
case 2:// FUN
if(strlen(ptr1) > 0)
{
psDB->m_psDataInfo[iPntNo].m_u8Fun = atoi(ptr1);
}
break;
case 3:// INF
if(strlen(ptr1) > 0)
{
psDB->m_psDataInfo[iPntNo].m_u8Inf = atoi(ptr1);
}
break;
case 4:// PROV_FUN
if(strlen(ptr1) > 0)
{
psDB->m_psDataInfo[iPntNo].m_u8ProvFun = atoi(ptr1);
}
else
{
psDB->m_psDataInfo[iPntNo].m_u8ProvFun\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Fun;
}
break;
case 5:// PROV_INF
if(strlen(ptr1) > 0)
{
psDB->m_psDataInfo[iPntNo].m_u8ProvInf = atoi(ptr1);
}
else
{
psDB->m_psDataInfo[iPntNo].m_u8ProvInf\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Inf;
}
break;
case 6://<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>
if(strlen(ptr1) > 0)
{
psDB->m_psDataInfo[iPntNo].m_u8LoopData = atoi(ptr1);
}
else
{
psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0;
}
break;
default:
bRetVal = FALSE;
break;
}
ptr1 = ptr2+1;
}
// INF
if(strlen(ptr1) > 0)
{
switch(i)
{
case 3:// INF
psDB->m_psDataInfo[iPntNo].m_u8Inf = atoi(ptr1);
psDB->m_psDataInfo[iPntNo].m_u8ProvFun\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Fun;
psDB->m_psDataInfo[iPntNo].m_u8ProvInf\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Inf;
psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0;
break;
case 4:// PROV_FUN
psDB->m_psDataInfo[iPntNo].m_u8ProvFun = atoi(ptr1);
psDB->m_psDataInfo[iPntNo].m_u8ProvInf\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Inf;
psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0;
break;
case 5:// PROV_INF
psDB->m_psDataInfo[iPntNo].m_u8ProvInf = atoi(ptr1);
psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0;
break;
case 6://<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>
psDB->m_psDataInfo[iPntNo].m_u8LoopData = atoi(ptr1);
break;
default:
if(i < 6)
{
bRetVal = FALSE;
}
break;
}
}
else
{
switch(i)
{
case 4:// PROV_FUN
psDB->m_psDataInfo[iPntNo].m_u8ProvFun\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Fun;
case 5:// PROV_INF
psDB->m_psDataInfo[iPntNo].m_u8ProvInf\
= (u_char)psDB->m_psDataInfo[iPntNo].m_u8Inf;
case 6://<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>
psDB->m_psDataInfo[iPntNo].m_u8LoopData = 0;
break;
default:
if(i < 6)
{
bRetVal = FALSE;
}
break;
}
}
return bRetVal;
}
BOOL GetSyncTimeInfoData(char *pInfo, DBINFO *psSyncInfo)
{
int i;
char *ptr1, *ptr2;
BOOL bRetVal;
if(pInfo == NULL)
{
return FALSE;
}
if(psSyncInfo == NULL)
{
return FALSE;
}
bRetVal = TRUE;
ptr1 = pInfo;
for(i=0; i<3; i++)
{
if(GetParamItem(ptr1, &ptr2) == FALSE)
{
bRetVal = FALSE;
break;
}
*ptr2 = 0;
switch(i)
{
case 0:// <20><><EFBFBD><EFBFBD>
break;
case 1:// ASDU
if(strlen(ptr1) > 0)
{
psSyncInfo->m_u8Asdu = atoi(ptr1);
}
break;
case 2:// FUN
if(strlen(ptr1) > 0)
{
psSyncInfo->m_u8Fun = atoi(ptr1);
}
break;
default:
bRetVal = FALSE;
break;
}
ptr1 = ptr2+1;
}
// INF
if(strlen(ptr1) > 0)
{
psSyncInfo->m_u8Inf = atoi(ptr1);
}
return bRetVal;
}
BOOL GetGroupInfoData(char *pInfo, int iPntNo, DEVPARAMDEF *psDevParam)
{
int i;
char *ptr1, *ptr2;
BOOL bRetVal;
if(pInfo == NULL)
{
return FALSE;
}
if(iPntNo >= psDevParam->m_iCfgGroupNum)
{
return FALSE;
}
bRetVal = TRUE;
ptr1 = pInfo;
for(i=0; i<3; i++)
{
if(GetParamItem(ptr1, &ptr2) == FALSE)
{
bRetVal = FALSE;
break;
}
*ptr2 = 0;
switch(i)
{
case 0:// GROUPNO
if(strlen(ptr1) > 0)
{
psDevParam->m_saGroupDef[iPntNo].m_iGroupNo = atoi(ptr1);
}
break;
case 1:// DATATYPE
if(strlen(ptr1) > 0)
{
psDevParam->m_saGroupDef[iPntNo].m_iDataType = atoi(ptr1);
}
break;
case 2:// STN
if(strlen(ptr1) > 0)
{
psDevParam->m_saGroupDef[iPntNo].m_iStationNo = atoi(ptr1);
}
break;
default:
bRetVal = FALSE;
break;
}
ptr1 = ptr2+1;
}
// START_PNT
if(strlen(ptr1) > 0)
{
psDevParam->m_saGroupDef[iPntNo].m_iStartPntNo = atoi(ptr1);
}
return bRetVal;
}
BOOL InitBuban103InfoFromDat(int commid, BUBAN103LINKDEF *psLink)
{
int i, j, iMallocSize;
char szDatFile[256], szbuf[256];
//char szDbg[256];
char szSection[128];
GROUPDEF *psGroupParam;
for(i=0; i<psLink->m_iDevNum; i++)
{
#ifdef OS_LINUX
sprintf(szDatFile, "dat/%s.dat",
psLink->m_psDev[i].m_sDevParam.m_szType);
#else
sprintf(szDatFile, "%s\\dat\\%s.dat",
IniFilePath, psLink->m_psDev[i].m_sDevParam.m_szType);
#endif
for(j=0; j<psLink->m_psDev[i].m_sDevParam.m_iCfgGroupNum; j++)
{
psGroupParam = &psLink->m_psDev[i].m_sDevParam.m_saGroupDef[j];
//psGroupParam->m_pu8DataLen = NULL;
//psGroupParam->m_pu8DataType = NULL;
//psGroupParam->m_pu8GIN = NULL;
//psGroupParam->m_iPntNum = 0;
psGroupParam->m_u32CurPntNo = 1;
psGroupParam->m_bInit = FALSE;
// (ȱʡΪ5<CEAA><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>Ϊ<EFBFBD>м<EFBFBD><D0BC><EFBFBD><EFBFBD>ݰ<EFBFBD>)
psGroupParam->m_iStartItemNo = 5;
if(PROTECT_EVENT_PNT_TYPE == psGroupParam->m_iDataType)
{
psGroupParam->m_psEventInfo = (GROUPEVENTDEF *)HEAP_MALLOC(sizeof(GROUPEVENTDEF));
memset((void *)psGroupParam->m_psEventInfo, 0, sizeof(GROUPEVENTDEF));
Buban103DispMalloc(commid, sizeof(GROUPEVENTDEF));
//psGroupParam->m_psDataInfo = NULL;
}
else
{
//psGroupParam->m_psEventInfo = NULL;
//psGroupParam->m_psDataInfo = NULL;
sprintf(szSection, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d", psGroupParam->m_iGroupNo);
szbuf[0] = 0;
GetPrivateProString(szSection, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", "0", szbuf, sizeof(szbuf), szDatFile);
//sprintf(szDbg, "[%s]:[<5B><><EFBFBD><EFBFBD>] = %s\n", szSection, szbuf);
//DebugPrint(szDbg);
psGroupParam->m_iPntNum = atoi(szbuf);
if(psGroupParam->m_iPntNum > 0)
{
iMallocSize = psGroupParam->m_iPntNum * sizeof(GROUPDATADEF);
psGroupParam->m_psDataInfo = (GROUPDATADEF *)HEAP_MALLOC(iMallocSize);
memset((void *)psGroupParam->m_psDataInfo, 0, iMallocSize);
Buban103DispMalloc(commid, iMallocSize);
InitGroupParam(psGroupParam, szDatFile);
iMallocSize = psGroupParam->m_iPntNum * sizeof(BYTE);
psGroupParam->m_pu8GIN = (BYTE *)HEAP_MALLOC(iMallocSize);
Buban103DispMalloc(commid, iMallocSize);
if(PROTECT_FIX_PNT_TYPE == psGroupParam->m_iDataType)
{
psGroupParam->m_pu8DataLen = (BYTE *)HEAP_MALLOC(iMallocSize);
Buban103DispMalloc(commid, iMallocSize);
psGroupParam->m_pu8DataType = (BYTE *)HEAP_MALLOC(iMallocSize);
Buban103DispMalloc(commid, iMallocSize);
}
}
GetPrivateProString(szSection, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD>", "-1", szbuf, sizeof(szbuf), szDatFile);
//sprintf(szDbg, "[%s]:[<5B><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>] = %s\n", szSection, szbuf);
//DebugPrint(szDbg);
if(atoi(szbuf) > 0)
{
psGroupParam->m_iStartItemNo = atoi(szbuf);
}
}
}
}
return TRUE;
}
void InitGroupParam(GROUPDEF *psGroupParam, char *szDatFileName)
{
i_32 i, iNameLen, iFixDataType;
char szbuf[512], szSection[128], szItem[128];
char *ptrFirst, *ptrFind;
BOOL bValue;
bValue = FALSE;
sprintf(szSection, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d", psGroupParam->m_iGroupNo);
for(i=0; i<psGroupParam->m_iPntNum; i++)
{
ptrFirst = (char *)szbuf;
sprintf(szItem, "%d", i+1);
if(GetPrivateProString(szSection, szItem, "δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", szbuf, sizeof(szbuf), szDatFileName) < 0)
{
strcpy(szbuf, "δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
}
// <20><><EFBFBD><EFBFBD>
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
{
*ptrFind = 0;
iNameLen = strlen(ptrFirst);
}
else
{
iNameLen = strlen(ptrFirst);
if(iNameLen >= sizeof(psGroupParam->m_psDataInfo[i].m_szName))
{
iNameLen = sizeof(psGroupParam->m_psDataInfo[i].m_szName)-1;
}
memcpy(psGroupParam->m_psDataInfo[i].m_szName, ptrFirst, iNameLen);
psGroupParam->m_psDataInfo[i].m_szName[iNameLen] = 0;
continue;
}
if(iNameLen >= sizeof(psGroupParam->m_psDataInfo[i].m_szName))
{
iNameLen = sizeof(psGroupParam->m_psDataInfo[i].m_szName)-1;
}
memcpy(psGroupParam->m_psDataInfo[i].m_szName, ptrFirst, iNameLen);
psGroupParam->m_psDataInfo[i].m_szName[iNameLen] = 0;
if(PROTECT_DI_PNT_TYPE == psGroupParam->m_iDataType)
{
psGroupParam->m_psDataInfo[i].m_fValue = (float)bValue;
bValue = !bValue;
}
else
{
psGroupParam->m_psDataInfo[i].m_fValue = (float)(i+1);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
if(PROTECT_DI_PNT_TYPE == psGroupParam->m_iDataType)
continue;
if(PROTECT_AI_PNT_TYPE == psGroupParam->m_iDataType)
{
// <20><><EFBFBD><EFBFBD>
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
*ptrFind = 0;
else
continue;
// ռ<><D5BC>λ
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
*ptrFind = 0;
else
continue;
// ϵ<><CFB5>
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
*ptrFind = 0;
else
continue;
// <20><>λ
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
{
*ptrFind = 0;
iNameLen = strlen(ptrFirst);
}
else
{
iNameLen = strlen(ptrFirst);
}
if(iNameLen >= sizeof(psGroupParam->m_psDataInfo[i].m_szUnit))
{
iNameLen = sizeof(psGroupParam->m_psDataInfo[i].m_szUnit)-1;
}
memcpy(psGroupParam->m_psDataInfo[i].m_szUnit, ptrFirst, iNameLen);
psGroupParam->m_psDataInfo[i].m_szUnit[iNameLen] = 0;
continue;
}
if(PROTECT_FIX_PNT_TYPE == psGroupParam->m_iDataType)
{
// <20><><EFBFBD><EFBFBD>(AI=1, DI=2)
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
*ptrFind = 0;
else
continue;
iFixDataType = atoi(ptrFirst);
psGroupParam->m_psDataInfo[i].iFixDataType = (u_char)iFixDataType;
// <20><><EFBFBD><EFBFBD>
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
*ptrFind = 0;
else
continue;
// ռ<><D5BC>λ
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
*ptrFind = 0;
else
continue;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(iFixDataType == 2)
{
// <20><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
continue;
}
// <20><><EFBFBD><EFBFBD>Ϊģ<CEAA><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
// ϵ<><CFB5>(<28><EFBFBD><E4B5B1><EFBFBD><EFBFBD>)
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
psGroupParam->m_psDataInfo[i].m_fStepValue = (float)atof(ptrFirst);
if(ptrFind)
*ptrFind = 0;
else
continue;
// <20><>λ
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
if(ptrFind)
{
*ptrFind = 0;
iNameLen = strlen(ptrFirst);
}
else
{
iNameLen = strlen(ptrFirst);
}
if(iNameLen >= sizeof(psGroupParam->m_psDataInfo[i].m_szUnit))
{
iNameLen = sizeof(psGroupParam->m_psDataInfo[i].m_szUnit)-1;
}
memcpy(psGroupParam->m_psDataInfo[i].m_szUnit, ptrFirst, iNameLen);
psGroupParam->m_psDataInfo[i].m_szUnit[iNameLen] = 0;
if(NULL == ptrFind)
continue;
// <20><>Сֵ
ptrFirst = ptrFind + 1;
ptrFind = strstr(ptrFirst, ",");
psGroupParam->m_psDataInfo[i].m_fMinValue = (float)atof(ptrFirst);
if(ptrFind)
{
*ptrFind = 0;
}
else
{
continue;
}
// <20><><EFBFBD><EFBFBD>ֵ
ptrFirst = ptrFind + 1;
psGroupParam->m_psDataInfo[i].m_fMaxValue = (float)atof(ptrFirst);
}
}
}
void InitBuban103CmdBuf(int commid, BUBAN103PORTPARAM *psPortParam)
{
int i;
psPortParam->m_iLinkIdx = 0;
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
InitBuban103LinkCmdBuf(&psPortParam->m_psLink[i]);
}
}
void InitBuban103LinkCmdBuf(BUBAN103LINKDEF *psLinkParam)
{
int i;
psLinkParam->m_bRstLinkOk = FALSE;
psLinkParam->m_bGotoNext = FALSE;
psLinkParam->m_iQueryNum_CLASS1_Count = 0;
psLinkParam->m_iDevIdx = 0;
psLinkParam->m_iQueryedAddr_CLASS1 = 0;
psLinkParam->m_shCurCmdIdx = 0;
if(psLinkParam->m_uchLinkAddr != 0xFF)
{
psLinkParam->m_pu8CtlByte[0] = 0x00;
psLinkParam->m_pbLinkOk[0] = FALSE;
psLinkParam->m_pu32LinkOkCnt[0] = 0;
}
else
{
for(i=0; i<psLinkParam->m_iDevNum; i++)
{
psLinkParam->m_pu8CtlByte[i] = 0x00;
psLinkParam->m_pbLinkOk[i] = FALSE;
psLinkParam->m_pu32LinkOkCnt[i] = 0;
}
}
// <20><>ʼ<EFBFBD><CABC>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for(i=0; i<BUBAN103_TIMER_CMD_NUM; i++)
{
if(psLinkParam->m_sArrayCmdTime[i].m_iCmdTimerConst > 20)
{
psLinkParam->m_sArrayCmdTime[i].m_iCmdTimerCnt
= psLinkParam->m_sArrayCmdTime[i].m_iCmdTimerConst-20;
}
else
{
psLinkParam->m_sArrayCmdTime[i].m_iCmdTimerCnt
= psLinkParam->m_sArrayCmdTime[i].m_iCmdTimerConst;
}
}
for(i=0; i<psLinkParam->m_iDevNum; i++)
{
InitBuban103DevCmdBuf(psLinkParam, i);
}
}
void InitBuban103DevCmdBuf(BUBAN103LINKDEF *psLinkParam, int iDevNo)
{
DEVDEF *psDevDef;
PROVDEVDEF *psProvDevParam;
SetProtectDevStatus(psLinkParam, iDevNo, FALSE);
if(psLinkParam->m_psDev != NULL)
{
psDevDef = &psLinkParam->m_psDev[iDevNo];
}
else
{
psDevDef = NULL;
}
if(psLinkParam->m_psProvDev != NULL)
{
psProvDevParam = &psLinkParam->m_psProvDev[iDevNo];
}
else
{
psProvDevParam = NULL;
}
// <20><>·<EFBFBD><C2B7>ַΪ255<35><35><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>װ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD>·װ<C2B7><D7B0>
if(psLinkParam->m_uchLinkAddr == 0xFF)
{
psLinkParam->m_pbLinkOk[iDevNo] = FALSE;
psLinkParam->m_pu32LinkOkCnt[iDevNo] = 0;
psLinkParam->m_pu8CtlByte[iDevNo] = 0;
}
if(psDevDef != NULL)
{
psDevDef->m_bAllQueryOk = TRUE;
psDevDef->m_bInitdata = FALSE;
if(psLinkParam->m_u32TimeOutConst > 10)
{
psDevDef->m_u32CallCnt
= psLinkParam->m_u32TimeOutConst-5;
}
else
{
psDevDef->m_u32CallCnt = 0;
}
psDevDef->m_u8RII = 0;
psDevDef->m_sDevParam.m_iFaultNo = -1;
psDevDef->m_sDevParam.m_u32FuncCode = 0;
if(psDevDef->m_sDisturbanceParam.m_pshValue != NULL)
{
HEAP_FREE(psDevDef->m_sDisturbanceParam.m_pshValue);
}
memset((void *)&psDevDef->m_sDisturbanceParam, 0, sizeof(BUBAN103DISTURBANCEDEF));
}
if(psProvDevParam != NULL)
{
memset((void *)&psProvDevParam->m_sProvGroupParam, 0, sizeof(PROV_ALLITEMOFGROUPPARAM));
psProvDevParam->m_sProvGroupParam.m_bFinished = TRUE;
psProvDevParam->m_sProvSoe.m_shFront = 0;
psProvDevParam->m_sProvSoe.m_shRear = 0;
psProvDevParam->m_sProvSoe.m_shSoeNum = 0;
// ת<><D7AA>
psProvDevParam->m_bProvQuery = FALSE;
psProvDevParam->m_iProvAsdu5Cause = 0;
psProvDevParam->m_iProvQueryStepWithASDU = 0;
// wen 2005.06.22 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ10<31><30>
//SingleListInit(&psProvDevParam->m_sBaoHuData, 10);
}
}
void ReCalcDevPntStart(int commid, BUBAN103PORTPARAM *psPortParam)
{
int i, j, k;
int iAiStart, iDiStart;
int iPiStart, iYkStart;
BOOL bSlave;
DEVDEF *pDevParam=NULL;
PROVDEVDEF *pProvDevParam=NULL;
iAiStart = 0;
iDiStart = 0;
iPiStart = 0;
iYkStart = 0;
if(psPortParam->m_psLink[0].m_psDev != NULL)
{
bSlave = FALSE;
pProvDevParam = NULL;
}
if(psPortParam->m_psLink[0].m_psProvDev != NULL)
{
bSlave = TRUE;
pDevParam = NULL;
}
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
if(FALSE == bSlave)
{
pDevParam = &psPortParam->m_psLink[i].m_psDev[j];
}
else
{
pProvDevParam = &psPortParam->m_psLink[i].m_psProvDev[j];
}
if(pDevParam != NULL)
{
// ai
for(k=0; k<DEV_AI_MAXNUM; k++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[k].m_iPntNum <= 0)
{
break;
}
pDevParam->m_sDevParam.m_sAiDBOrientation[k].m_iStartPntNo = iAiStart;
iAiStart += pDevParam->m_sDevParam.m_sAiDBOrientation[k].m_iPntNum;
}
// di
if(pDevParam->m_sDevParam.m_sDiDBOrientation.m_iPntNum > 0)
{
pDevParam->m_sDevParam.m_sDiDBOrientation.m_iStartPntNo = iDiStart;
iDiStart += pDevParam->m_sDevParam.m_sDiDBOrientation.m_iPntNum;
}
// pi
if(pDevParam->m_sDevParam.m_sPiDBOrientation.m_iPntNum > 0)
{
pDevParam->m_sDevParam.m_sPiDBOrientation.m_iStartPntNo = iPiStart;
iPiStart += pDevParam->m_sDevParam.m_sPiDBOrientation.m_iPntNum;
}
if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum > 0)
{
pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo = iYkStart;
iYkStart += pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum;
}
}
if(pProvDevParam != NULL)
{
// ai
if(pProvDevParam->m_sYcInfo.m_iPntNum > 0)
{
pProvDevParam->m_sYcInfo.m_iStartPntNo = iAiStart;
iAiStart += pProvDevParam->m_sYcInfo.m_iPntNum;
}
// di
if(pProvDevParam->m_sYxInfo.m_iPntNum > 0)
{
pProvDevParam->m_sYxInfo.m_iStartPntNo = iDiStart;
iDiStart += pProvDevParam->m_sYxInfo.m_iPntNum;
}
// Pi
if(pProvDevParam->m_sYmInfo.m_iPntNum > 0)
{
pProvDevParam->m_sYmInfo.m_iStartPntNo = iPiStart;
iPiStart += pProvDevParam->m_sYmInfo.m_iPntNum;
}
}
}
}
}
//===========================װ<>ó<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=======================
//===========================<3D><><EFBFBD><EFBFBD>Ϊָ<CEAA><D6B8><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD>=======================
//**************************************************************************
//* <20><><EFBFBD><EFBFBD> Buban103Э<33><D0AD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_32 commid:RTU<54>˿ں<CBBF> *
//* BYTE bLinkAddr:<3A><>·<EFBFBD><C2B7>ַ *
//* u_char link_cmd_idx:<3A><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//* u_char *msg:Ӧ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>Ӧ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ù̶<C3B9> *
//* <20><><EFBFBD>ȵ<EFBFBD>֡<EFBFBD><D6A1>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD> *
//* u_32 len:Ӧ<>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ù̶<C3B9><CCB6><EFBFBD><EFBFBD>ȵ<EFBFBD>֡<EFBFBD><D6A1>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD>*
//* u_32 cmdtype: ָ<><EFBFBD><EEBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//**************************************************************************
void MakeBuban103LinkCommand(u_32 commid, BYTE bLinkAddr, u_char link_cmd_idx,
u_char* msg, u_32 len, u_32 cmdtype)
{
u_char tmp[MAX_POLL_CMD_BUF_LEN], nCs, nEnd;
CLPDU_FIX bClpdu_fix;
CLPDU_VARR bClpdu_varr;
memset(&bClpdu_fix, 0, sizeof(CLPDU_FIX));
memset(&bClpdu_varr, 0, sizeof(CLPDU_VARR));
memset(tmp, 0, sizeof(tmp));
switch(link_cmd_idx)
{
case C_RLK_NA_3: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬
bClpdu_fix.nSTART = 0x10;
bClpdu_fix.nCONTROL = C_RLK_NA_3 | 0x40;
bClpdu_fix.nADDR = bLinkAddr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
case C_RFB_NA_3: // <20><>λ֡<CEBB><D6A1><EFBFBD><EFBFBD>λ
bClpdu_fix.nSTART = 0x10;
bClpdu_fix.nCONTROL = C_RFB_NA_3 | 0x40;
bClpdu_fix.nADDR = bLinkAddr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
case C_RCU_NA_3: // <20><>λͨѶ<CDA8><D1B6>Ԫ
bClpdu_fix.nSTART = 0x10;
bClpdu_fix.nCONTROL = C_RCU_NA_3 | 0x40;
bClpdu_fix.nADDR = bLinkAddr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
case C_PL1_NA_3: // <20>ٻ<EFBFBD>1<EFBFBD><31><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bClpdu_fix.nSTART = 0x10;
bClpdu_fix.nCONTROL = C_PL1_NA_3 | 0x50;
bClpdu_fix.nADDR = bLinkAddr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, INSERT_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
case C_PL2_NA_3: // <20>ٻ<EFBFBD>2<EFBFBD><32><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
bClpdu_fix.nSTART = 0x10;
bClpdu_fix.nCONTROL = C_PL2_NA_3 | 0x50;
bClpdu_fix.nADDR = bLinkAddr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, NORMAL_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
case C_SD1_NA_3: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><><C8B7>֡<EFBFBD><D6A1>
bClpdu_varr.nSTART1 = 0x68;
bClpdu_varr.nSTART2 = 0x68;
if(len != 0)
{
bClpdu_varr.nLEN1 = (BYTE)(len + 2);
bClpdu_varr.nLEN2 = bClpdu_varr.nLEN1;
}
bClpdu_varr.nCONTROL = C_SD1_NA_3 | 0x50;
bClpdu_varr.nADDR = bLinkAddr;
memcpy(tmp,(char*)&bClpdu_varr,sizeof(bClpdu_varr));
memcpy(&tmp[6],msg,len);
nCs = CalBuban103Lpc(tmp, bClpdu_varr.nLEN1);
nEnd = 0x16;
tmp[len+6] = nCs;
tmp[len+7] = nEnd;
PutPollCmdToBuf(commid, cmdtype, 0, (char*)tmp, len+8);
break;
case C_SD2_NA_3: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>/<2F>޻ش<DEBB>֡<EFBFBD><D6A1>
bClpdu_varr.nSTART1 = 0x68;
bClpdu_varr.nSTART2 = 0x68;
if(len != 0)
{
bClpdu_varr.nLEN1 = (BYTE)(len + 2);
bClpdu_varr.nLEN2 = bClpdu_varr.nLEN1;
}
bClpdu_varr.nCONTROL = C_SD2_NA_3 | 0x40;
bClpdu_varr.nADDR = bLinkAddr;
memcpy(tmp,(char*)&bClpdu_varr,sizeof(bClpdu_varr));
memcpy(&tmp[6],msg,len);
nCs = CalBuban103Lpc(tmp, bClpdu_varr.nLEN1);
nEnd = 0x16;
tmp[len+6] = nCs;
tmp[len+7] = nEnd;
PutPollCmdToBuf(commid, cmdtype, 0, (char*)tmp, len+8);
break;
default:
break;
}
}
//*************************************************************
//* <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//* u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//*************************************************************
void MakeTimeSyn_CAsdu6(u_32 commid, CMDPARAM *psCmdParam)
{
CASDU6 bCAsdu6;
DAY_TIME sCurTime;
char szbuf[128];
memset(&bCAsdu6,0,sizeof(CASDU6));
bCAsdu6.nTYP = C_SYN_TA_3;
bCAsdu6.nVSQ = 0x81;
bCAsdu6.nCOT = 8;
bCAsdu6.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu6.nFUN = psCmdParam->m_uchFun;
bCAsdu6.nINF = psCmdParam->m_uchInf;
GetLocalTimeEx(&sCurTime);
sCurTime.mSec = sCurTime.Sec*1000 + sCurTime.mSec;
bCAsdu6.nTIME[0] = sCurTime.mSec % 256;
bCAsdu6.nTIME[1] = sCurTime.mSec / 256;
bCAsdu6.nTIME[2] = (u_char)sCurTime.Min;
bCAsdu6.nTIME[3] = (u_char)sCurTime.Hour;
//bCAsdu6.nTIME[4] = (u_char)ControlParam->CurTime.wDayOfWeek;
bCAsdu6.nTIME[4] = (u_char)(sCurTime.Day&0x1F);
bCAsdu6.nTIME[5] = (u_char)sCurTime.Month;
bCAsdu6.nTIME[6] = (u_char)(sCurTime.Year%100);
sprintf(szbuf, "<EFBFBD><EFBFBD>ʱʱ<EFBFBD><EFBFBD>Ϊ:%d<><64>%d<><64>%d<><64>%d<><64>%d<><64>%d<><64>%d<><64><EFBFBD><EFBFBD>",sCurTime.Year,sCurTime.Month,bCAsdu6.nTIME[4],sCurTime.Hour,sCurTime.Min,sCurTime.Sec,sCurTime.mSec-sCurTime.Sec*1000);
DebugPrint(szbuf);
if(psCmdParam->m_sDevAddr.m_uchLinkAddr == 255)
{
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, \
C_SD2_NA_3, (u_char*)&bCAsdu6, sizeof(CASDU6), FAST_POLL_CMD);
}
else
{
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, \
C_SD1_NA_3, (u_char*)&bCAsdu6, sizeof(CASDU6), NORMAL_POLL_CMD);
}
}
//*************************************************************
//* <20><><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//*************************************************************
void MakeAllQuery_CAsdu7(u_32 commid, CMDPARAM *psCmdParam)
{
BYTE u8SCN;
CASDU7 bCAsdu7;
BUBAN103PORTPARAM *pPortParam;
if(SioParam[commid].ExtInfo == NULL)
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
memset(&bCAsdu7,0,sizeof(CASDU7));
bCAsdu7.nTYP = C_TGI_NA_3;
bCAsdu7.nVSQ = 0x81;
bCAsdu7.nCOT = 9;
bCAsdu7.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu7.nFUN = 255;
bCAsdu7.nINF = 0;
//ɨ<><C9A8>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʵ
u8SCN = pPortParam->m_psLink[psCmdParam->m_sDevAddr.m_iLinkIdx].m_psDev[psCmdParam->m_sDevAddr.m_iDevIdx].m_sDevParam.m_u8SCN;
bCAsdu7.nSCN = u8SCN;
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr,\
C_SD1_NA_3 , (unsigned char*)&bCAsdu7, sizeof(CASDU7), NORMAL_POLL_CMD);
pPortParam->m_psLink[psCmdParam->m_sDevAddr.m_iLinkIdx].m_psDev[psCmdParam->m_sDevAddr.m_iDevIdx].m_bAllQueryOk = FALSE;
pPortParam->m_psLink[psCmdParam->m_sDevAddr.m_iLinkIdx].m_psDev[psCmdParam->m_sDevAddr.m_iDevIdx].m_sDevParam.m_u8SCN = (u8SCN+1) % 256;
}
//*******************************************************************
//* <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//* u_char inf:<3A><>Ϣ<EFBFBD><CFA2><EFBFBD>ţ<EFBFBD>ȡֵ<C8A1><D6B5>Χֻ<CEA7><D6BB><EFBFBD><EFBFBD>248-251,<2C><><EFBFBD>У<EFBFBD> *
//* 248<34><38>д<EFBFBD><D0B4>Ŀ *
//* 249<34><39><EFBFBD><EFBFBD>ȷ<EFBFBD>ϵ<EFBFBD>д<EFBFBD><D0B4>Ŀ *
//* 250<35><30><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>д<EFBFBD><D0B4>Ŀ *
//* 251<35><31>д<EFBFBD><D0B4>Ŀ<EFBFBD><C4BF>ֹ *
//* unsigned char* dataset:ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ϣ *
//* u_char ngd:ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬λ<CCAC><CEBB> *
//*******************************************************************
void MakeGenIdentData_CAsdu10(u_32 commid, CMDPARAM *psCmdParam,
u_char *dataset, u_char ngd)
{
CASDU10 bCAsdu10;
u_32 len,len1,i,start;
u_char tmp[MAX_POLL_CMD_BUF_LEN];
memset(&bCAsdu10,0,sizeof(CASDU10));
bCAsdu10.nTYP = C_GD_NA_3;
bCAsdu10.nVSQ = 0x81;
bCAsdu10.nCOT = 40;
bCAsdu10.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu10.nFUN = 254;
if((psCmdParam->m_uchInf >= 248)
&& (psCmdParam->m_uchInf <= 251))
{
bCAsdu10.nINF = psCmdParam->m_uchInf;
}
bCAsdu10.nRII = psCmdParam->m_uchRII;
bCAsdu10.nNGD = ngd;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC>ij<EFBFBD><C4B3><EFBFBD>
start = 0;
len = 0;
for(i=0; i<ngd; i++)
{
if(dataset[start+3] == 2) //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if((dataset[start+4] % 8) == 0)
{
len += dataset[start+4]/8;
}
else
{
len += dataset[start+4]/8+1;
}
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
len += 6 + dataset[start+4]*dataset[start+5];
}
start = len;
}
len1 = sizeof(bCAsdu10)-sizeof(unsigned char*);
memcpy((void*)tmp, (void*)&bCAsdu10, len1);
if((len > 0) && (dataset != NULL))
{
memcpy((void*)&tmp[len1], dataset, len);
}
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, \
C_SD1_NA_3 , (unsigned char*)tmp, len + len1, NORMAL_POLL_CMD);
}
//*******************************************************************
//* <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD>:u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ *
//* u_char inf:<3A><>Ϣ<EFBFBD><CFA2><EFBFBD>ţ<EFBFBD>ȡֵ<C8A1><D6B5>Χֻ<CEA7><D6BB><EFBFBD><EFBFBD>248-251,<2C><><EFBFBD>У<EFBFBD> *
//* 248<34><38>д<EFBFBD><D0B4>Ŀ *
//* 249<34><39><EFBFBD><EFBFBD>ȷ<EFBFBD>ϵ<EFBFBD>д<EFBFBD><D0B4>Ŀ *
//* 250<35><30><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD>д<EFBFBD><D0B4>Ŀ *
//* 251<35><31>д<EFBFBD><D0B4>Ŀ<EFBFBD><C4BF>ֹ *
//* unsigned char* dataset:ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ϣ *
//* u_char ngd:ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬λ<CCAC><CEBB> *
//* u_32 cmdtype : ָ<><EFBFBD><EEBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*******************************************************************
void MakeGenIdentData_CAsdu10Ex(u_32 commid, CMDPARAM *psCmdParam,
u_char *dataset, u_char ngd, u_32 cmdtype)
{
CASDU10 bCAsdu10;
u_32 len,len1,i,start;
u_char tmp[MAX_POLL_CMD_BUF_LEN];
memset(&bCAsdu10,0,sizeof(CASDU10));
bCAsdu10.nTYP = C_GD_NA_3;
bCAsdu10.nVSQ = 0x81;
bCAsdu10.nCOT = 40;
bCAsdu10.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu10.nFUN = 254;
if((psCmdParam->m_uchInf >= 248)
&& (psCmdParam->m_uchInf <= 251))
{
bCAsdu10.nINF = psCmdParam->m_uchInf;
}
bCAsdu10.nRII = psCmdParam->m_uchRII;
bCAsdu10.nNGD = ngd;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC>ij<EFBFBD><C4B3><EFBFBD>
start = 0;
len = 0;
for(i=0; i<ngd; i++)
{
if(dataset[start+3] == 2) //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if((dataset[start+4] % 8) == 0)
{
len += dataset[start+4]/8;
}
else
{
len += dataset[start+4]/8+1;
}
}
else //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
len += 6 + dataset[start+4]*dataset[start+5];
}
start = len;
}
len1 = sizeof(bCAsdu10)-sizeof(unsigned char*);
memcpy((void*)tmp, (void*)&bCAsdu10, len1);
if((len > 0) && (dataset != NULL))
{
memcpy((void*)&tmp[len1], dataset, len);
}
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, \
C_SD1_NA_3 , (unsigned char*)tmp, len + len1, cmdtype);
}
//*************************************************************
//* <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//* u_char inf:<3A><>Ϣ<EFBFBD><CFA2><EFBFBD>ţ<EFBFBD>ȡֵ<C8A1><D6B5>ΧΪ16--26 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//* 16=<3D>Զ<EFBFBD><D4B6>غ<EFBFBD>բͶ<D5A2><CDB6>/<2F>˳<EFBFBD><CBB3><EFBFBD>ON/OFF<46><46> *
//* 17=Զ<><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>/<2F>˳<EFBFBD><CBB3><EFBFBD>ON/OF<4F><46> *
//* 18=<3D><><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6>/<2F>˳<EFBFBD><CBB3><EFBFBD>ON/OF<4F><46> *
//* 19=LED<45><44>λ *
//* 23=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 *
//* 24=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2 *
//* 25=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3 *
//* 26=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4 *
//* <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ϊ<EFBFBD>Ƿ<EFBFBD> *
//* bool cmd:<3A><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>true=<3D>ϣ<EFBFBD>false=<3D><><EFBFBD><EFBFBD> *
//*************************************************************
void MakeGenCommand_CAsdu20(u_32 commid, CMDPARAM *psCmdParam, bool cmd)
{
CASDU20 bCAsdu20;
memset(&bCAsdu20,0,sizeof(CASDU20));
bCAsdu20.nTYP = C_GRC_NA_3;
bCAsdu20.nVSQ = 0x81;
bCAsdu20.nCOT = 20;
bCAsdu20.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu20.nFUN = 128;//<2F><>Ҫ<EFBFBD><D2AA>֤ȷ<D6A4><C8B7>
bCAsdu20.nINF = psCmdParam->m_uchInf;
bCAsdu20.nRII = psCmdParam->m_uchRII;
if(cmd)
{
bCAsdu20.nDCO = 0x02;
}
else
{
bCAsdu20.nDCO = 0x01;
}
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, \
C_SD1_NA_3 , (u_char *)&bCAsdu20, sizeof(CASDU20), NORMAL_POLL_CMD);
}
//******************************************************************
//* <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//* u_char inf:<3A><>Ϣ<EFBFBD><CFA2><EFBFBD>ţ<EFBFBD>ȡֵ<C8A1><D6B5>Χֻ<CEA7><D6BB><EFBFBD><EFBFBD>240-245,<2C><><EFBFBD>У<EFBFBD> *
//* 240<34><30><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD> *
//* 241<34><31><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//* 242<34><32>δ<EFBFBD><CEB4> *
//* 243<34><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ŀ¼ *
//* 244<34><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//* 245<34><35><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD> *
//* GEN_DATAGROUP* datagroup:ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ *
//* u_char nog:ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Ŀ *
//******************************************************************
void MakeGenIdentCommand_CAsdu21(u_32 commid, CMDPARAM *psCmdParam,
GEN_DATAGROUP* datagroup ,u_char nog)
{
CASDU21 bCAsdu21;
u_32 len;
u_char tmp[MAX_POLL_CMD_BUF_LEN];
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
memset(&bCAsdu21, 0, sizeof(CASDU21));
bCAsdu21.nTYP = C_GC_NA_3;
bCAsdu21.nVSQ = 0x81;
if(psCmdParam->m_uchInf == C_INF_QUERYGENERAL)
{
bCAsdu21.nCOT = C_CAUSE_QUERY;
}
else // ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
bCAsdu21.nCOT = C_CAUSE_READWITHVALIDDATA;
}
bCAsdu21.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu21.nFUN = FUNC_GENERALSORT;
if((psCmdParam->m_uchInf >= C_INF_READGROUPTITLE)
&& (psCmdParam->m_uchInf <= C_INF_QUERYGENERAL))
{
bCAsdu21.nINF = psCmdParam->m_uchInf;
}
else
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d<><64><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>INF=%d<><64><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7>!!!",
commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, psCmdParam->m_sDevAddr.m_uchCommAddr, psCmdParam->m_uchInf);
DebugPrint(szbuf);
#endif
return;
}
bCAsdu21.nRII = psCmdParam->m_uchRII;
bCAsdu21.nNOG = nog;
len = sizeof(CASDU21)-sizeof(GEN_DATAGROUP *);
memcpy((void *)tmp, (void *)&bCAsdu21, len);
if(nog ==0)
{
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr,\
C_SD1_NA_3, tmp, len, NORMAL_POLL_CMD);
}
else
{
memcpy((void*)&tmp[len], datagroup, sizeof(GEN_DATAGROUP)*nog);
len += sizeof(GEN_DATAGROUP)*nog;
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr,\
C_SD1_NA_3 , tmp, len, NORMAL_POLL_CMD);
}
}
//*************************************************************
//* <20><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//* u_char too:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ֵ<EFBFBD><D6B5>ΧΪ1--255<35><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* 1=<3D><><EFBFBD>ϵ<EFBFBD>ѡ<EFBFBD><D1A1>
//* 2=<3D><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
//* 3=<3D><>ֹ<EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
//* 4--7 = <20><><EFBFBD><EFBFBD>
//* 8=ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* 9=ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
//* 10--15 = <20><><EFBFBD><EFBFBD>
//* 16=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ
//* 17=<3D><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ
//* 18--23 = <20><><EFBFBD><EFBFBD>
//* 24=<3D><><EFBFBD>󱻼<EFBFBD>¼<EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
//* 25--31 =<3D><><EFBFBD><EFBFBD>
//* 32=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 33=<3D>ɿ<EFBFBD><C9BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 34=<3D>ɼ̵籣<CCB5><E7B1A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 35=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 36=<3D>ɿ<EFBFBD><C9BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 37=<3D>ɼ̵籣<CCB5><E7B1A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 38=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* 39=<3D>ɿ<EFBFBD><C9BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ֹ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 40=<3D>ɼ̵籣<CCB5><E7B1A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 41--63=<3D><><EFBFBD><EFBFBD>
//* 64=<3D>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
//* 65=<3D><><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>񶨣<EFBFBD>
//* 66=<3D>ɹ<EFBFBD><C9B9><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
//* 67=<3D><><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񶨣<EFBFBD>
//* 68=<3D>ɹ<EFBFBD><C9B9>ش<EFBFBD><D8B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
//* 69=<3D><><EFBFBD>ɹ<EFBFBD><C9B9>ش<EFBFBD><D8B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>񶨣<EFBFBD>
//* 70--255=<3D><><EFBFBD><EFBFBD>
//* u_char tov:<3A>Ŷ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* u_short fan:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* u_char acc:ʵ<><CAB5>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//*************************************************************
void MakeDisTrans_CAsdu24(u_32 commid, CMDPARAM *psCmdParam,
u_char too, u_char tov, u_short fan, u_char acc)
{
CASDU24 bCAsdu24;
memset(&bCAsdu24,0,sizeof(CASDU24));
bCAsdu24.nTYP = C_ODT_NA_3;
bCAsdu24.nVSQ = 0x81;
bCAsdu24.nCOT = 31;
bCAsdu24.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu24.nFUN = psCmdParam->m_uchFun;
bCAsdu24.nTOO = too;
bCAsdu24.nTOV = tov;
bCAsdu24.nFAN = fan;
bCAsdu24.nACC = acc;
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr, \
C_SD1_NA_3, (u_char *)&bCAsdu24, sizeof(CASDU24), INSERT_POLL_CMD);
}
//*************************************************************
//* <20><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//* u_char too:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ֵ<EFBFBD><D6B5>ΧΪ1--255<35><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* 1=<3D><><EFBFBD>ϵ<EFBFBD>ѡ<EFBFBD><D1A1>
//* 2=<3D><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
//* 3=<3D><>ֹ<EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
//* 4--7 = <20><><EFBFBD><EFBFBD>
//* 8=ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* 9=ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ
//* 10--15 = <20><><EFBFBD><EFBFBD>
//* 16=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ
//* 17=<3D><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ
//* 18--23 = <20><><EFBFBD><EFBFBD>
//* 24=<3D><><EFBFBD>󱻼<EFBFBD>¼<EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
//* 25--31 =<3D><><EFBFBD><EFBFBD>
//* 32=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 33=<3D>ɿ<EFBFBD><C9BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 34=<3D>ɼ̵籣<CCB5><E7B1A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 35=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 36=<3D>ɿ<EFBFBD><C9BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 37=<3D>ɼ̵籣<CCB5><E7B1A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 38=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* 39=<3D>ɿ<EFBFBD><C9BF><EFBFBD>ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>ֹ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 40=<3D>ɼ̵籣<CCB5><E7B1A3><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
//* 41--63=<3D><><EFBFBD><EFBFBD>
//* 64=<3D>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
//* 65=<3D><><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>񶨣<EFBFBD>
//* 66=<3D>ɹ<EFBFBD><C9B9><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
//* 67=<3D><><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񶨣<EFBFBD>
//* 68=<3D>ɹ<EFBFBD><C9B9>ش<EFBFBD><D8B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>϶<EFBFBD><CFB6><EFBFBD>
//* 69=<3D><><EFBFBD>ɹ<EFBFBD><C9B9>ش<EFBFBD><D8B4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>񶨣<EFBFBD>
//* 70--255=<3D><><EFBFBD><EFBFBD>
//* u_char tov:<3A>Ŷ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* u_short fan:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//* u_char acc:ʵ<><CAB5>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//*************************************************************
void MakeDisTrans_CAsdu25(u_32 commid, CMDPARAM *psCmdParam,
u_char too, u_char tov, u_short fan, u_char acc)
{
CASDU25 bCAsdu25;
memset(&bCAsdu25,0,sizeof(CASDU25));
bCAsdu25.nTYP = C_ADT_NA_3;
bCAsdu25.nVSQ = 0x81;
bCAsdu25.nCOT = 31;
bCAsdu25.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
bCAsdu25.nFUN = psCmdParam->m_uchFun;
bCAsdu25.nTOO = too;
bCAsdu25.nTOV = tov;
bCAsdu25.nFAN = fan;
bCAsdu25.nACC = acc;
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr,\
C_SD1_NA_3, (unsigned char*)&bCAsdu25, sizeof(CASDU25), INSERT_POLL_CMD);
}
//*************************************************************
//* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȵIJ<C8B5>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid:RTU<54>˿ں<CBBF> *
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>u_char addr:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
//*************************************************************
void MakeQCC_CAsdu88(u_32 commid, CMDPARAM *psCmdParam)
{
CASDU88 bCAsdu88;
memset(&bCAsdu88,0,sizeof(CASDU88));
bCAsdu88.nTYP = C_CI_NA_3;
bCAsdu88.nVSQ = 0x81;
bCAsdu88.nCOT = C_CAUSE_CYCLE;
bCAsdu88.nADDR = psCmdParam->m_sDevAddr.m_uchCommAddr;
// ??? wen 2003.11.03 bu(1)---bu(6)
bCAsdu88.nFUN = 1;// BU(1)
bCAsdu88.nINF = 0;
// ʹ<>ö<EFBFBD><C3B6><EFBFBD><E1B2BB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>yizhonghu 20060803
//bCAsdu88.nQCC = 5;
bCAsdu88.nQCC = 45;
bCAsdu88.nRII = psCmdParam->m_uchRII;
MakeBuban103LinkCommand(commid, psCmdParam->m_sDevAddr.m_uchLinkAddr,\
C_SD2_NA_3 , (unsigned char*)&bCAsdu88, sizeof(CASDU88), NORMAL_POLL_CMD);
}
void MakeBuban103_PL1_NA_3_Cmd(int commid, DEVADDRPARAM *psAddrParam)
{
BUBAN103PORTPARAM *pPortParam;
BUBAN103LINKDEF *pLinkParam;
if(IsExtInfoPtr(commid) == FALSE)
{
return;
}
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = (BUBAN103LINKDEF *)&pPortParam->m_psLink[psAddrParam->m_iLinkIdx];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸װ<E8B1B8><D7B0>
if(pLinkParam->m_iDevNum > 1)
{
if(pLinkParam->m_iQueryedAddr_CLASS1 != (psAddrParam->m_iDevIdx+1))
{
pLinkParam->m_iQueryedAddr_CLASS1 = psAddrParam->m_iDevIdx+1;
pLinkParam->m_iQueryNum_CLASS1_Count = 1;
MakeBuban103LinkCommand(commid, psAddrParam->m_uchLinkAddr,\
C_PL1_NA_3, NULL, 0, INSERT_POLL_CMD);
}
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>װ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
else if(pLinkParam->m_uchLinkAddr != 0xFF)
{
pLinkParam->m_iQueryNum_CLASS1_Count = 0;
MakeBuban103LinkCommand(commid,\
psAddrParam->m_uchLinkAddr,\
C_PL1_NA_3,NULL,0,INSERT_POLL_CMD);
}
else
{
if(pLinkParam->m_iQueryNum_CLASS1_Count < pLinkParam->m_iQueryNum_CLASS1_Const)
{
pLinkParam->m_iQueryNum_CLASS1_Count++;
MakeBuban103LinkCommand(commid, psAddrParam->m_uchLinkAddr,\
C_PL1_NA_3,NULL,0,INSERT_POLL_CMD);
}
else
{
pLinkParam->m_iQueryedAddr_CLASS1 = 0;
pLinkParam->m_iQueryNum_CLASS1_Count = 0;
}
}
}
else
{
MakeBuban103LinkCommand(commid, psAddrParam->m_uchLinkAddr,\
C_PL1_NA_3,NULL,0,INSERT_POLL_CMD);
}
}
BOOL IsDevLinkOk(BUBAN103LINKDEF *psLinkParam, int iDevNo)
{
if(psLinkParam->m_uchLinkAddr == 0xFF)
{
return psLinkParam->m_pbLinkOk[iDevNo];
}
else
{
return psLinkParam->m_pbLinkOk[0];
}
}
void SetDevLinkOk(BUBAN103LINKDEF *psLinkParam, int iDevNo, BOOL bFlagOk)
{
if(psLinkParam->m_uchLinkAddr == 0xFF)
{
psLinkParam->m_pbLinkOk[iDevNo] = bFlagOk;
psLinkParam->m_pu32LinkOkCnt[iDevNo] = 0;
}
else
{
psLinkParam->m_pbLinkOk[0] = bFlagOk;
psLinkParam->m_pu32LinkOkCnt[0] = 0;
}
}
void ClearLinkCnt(BUBAN103LINKDEF *psLinkParam, int iDevNo)
{
if(psLinkParam->m_uchLinkAddr == 0xFF)
{
psLinkParam->m_pu32LinkOkCnt[iDevNo] = 0;
}
else
{
psLinkParam->m_pu32LinkOkCnt[0] = 0;
}
}
BYTE GetLinkAddr(BUBAN103LINKDEF *psLinkParam, int iDevNo)
{
if(psLinkParam->m_uchLinkAddr == 0xFF)
{
return psLinkParam->m_psDev[iDevNo].m_sDevParam.m_u8DevAddr;
}
else
{
return psLinkParam->m_uchLinkAddr;
}
}
BYTE *GetLinkCtrl(BUBAN103LINKDEF *psLinkParam, int iDevNo)
{
if(psLinkParam->m_uchLinkAddr == 0xFF)
{
return &psLinkParam->m_pu8CtlByte[iDevNo];
}
else
{
return &psLinkParam->m_pu8CtlByte[0];
}
}
BOOL IsLinkTimeOut(BUBAN103LINKDEF *psLinkParam, int iDevNo)
{
int iNo;
iNo = iDevNo;
psLinkParam->m_pu32LinkOkCnt[iNo]++;
if(psLinkParam->m_pu32LinkOkCnt[iNo]\
>= psLinkParam->m_u32TimeOutConst)
{
return TRUE;
}
return FALSE;
}
//***************************************************************
//* ָ<><EFBFBD><EEB7A2> *
//*<2A><><EFBFBD><EFBFBD>:u_32 commid : RTU<54>˿ں<CBBF> *
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
//***************************************************************
void Buban103SendCmdFormPollCmdBuf(int commid)
{
BYTE fcb = 0x20;
BYTE *pu8CtrlByte, buf[256];
i_32 len;
DAY_TIME sDateTime;
DEVADDRPARAM DevAddrParam;
BUBAN103PORTPARAM *pPortParam;
if((commid < 0) || (commid >= GetMaxPort()))
{
return;
}
if(!ShmGetPortFlag(commid, FLAG_OPEN))
{
return;
}
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
if(pPortParam->m_psBaoHu->ForceWaitFlag
&& pPortParam->m_psBaoHu->ForceWaitCnt)
{
pPortParam->m_psBaoHu->ForceWaitCnt--;
if(pPortParam->m_psBaoHu->ForceWaitCnt == 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
ClearCmdFormPollCmdBuf(commid);
//ClearCmdAllFlag(commid);
}
}
if(pPortParam->m_psBaoHu->SendCmdFlag
&& (pPortParam->m_psBaoHu->RevCmdFlag == 0))
{
pPortParam->m_psBaoHu->RetryTimeCnt++;
if(pPortParam->m_psBaoHu->RetryTimeCnt
< pPortParam->m_psBaoHu->RetryTime)
{
return;
}
pPortParam->m_psBaoHu->RetryTimeCnt = 0;
pPortParam->m_psBaoHu->RetryCnt++;
if(pPortParam->m_psBaoHu->RetryCnt
> pPortParam->m_psBaoHu->Retry)
{
len = ReGetCmdFormPollCmdBuf(commid, buf, MAX_MSG_BUF_SIZE);
if(buf[2] == 0x10)
{
DevAddrParam.m_uchLinkAddr = buf[4];
if(FindProtectDev(pPortParam, &DevAddrParam, TRUE) == TRUE)
{
if(pPortParam->m_psLink[DevAddrParam.m_iLinkIdx].m_uchLinkAddr != 0xFF)
{
InitBuban103LinkCmdBuf(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx]);
}
else
{
DevAddrParam.m_uchCommAddr = buf[4];
InitBuban103DevCmdBuf(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx], DevAddrParam.m_iDevIdx);
}
}
}
else if(buf[2] == 0x68)
{
DevAddrParam.m_uchLinkAddr = buf[7];
DevAddrParam.m_uchCommAddr = buf[11];
if(FindProtectDev(pPortParam, &DevAddrParam, FALSE) == TRUE)
{
InitBuban103DevCmdBuf(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx], DevAddrParam.m_iDevIdx);
}
}
else
{
pPortParam->m_psBaoHu->RevCmdFlag = 1;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
ClearCmdFormPollCmdBuf(commid);
//ClearCmdAllFlag(commid);
}
else
{
pPortParam->m_psBaoHu->SendCmdFlag = 0;
pPortParam->m_psBaoHu->RevCmdFlag = 0;
pPortParam->m_psBaoHu->ReSendCmdFlag = 1;
}
}
if(pPortParam->m_psBaoHu->SendCmdFlag
&& pPortParam->m_psBaoHu->RevCmdFlag)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
ClearCmdFormPollCmdBuf(commid);
//ClearCmdAllFlag(commid);
}
if(pPortParam->m_psBaoHu->WaitTime)
{
pPortParam->m_psBaoHu->WaitTimeCnt++;
if(pPortParam->m_psBaoHu->WaitTimeCnt
< pPortParam->m_psBaoHu->WaitTime)
{
return;
}
}
pPortParam->m_psBaoHu->WaitTimeCnt = 0;
if(pPortParam->m_psBaoHu->ReSendCmdFlag)
{
len = ReGetCmdFormPollCmdBuf(commid, buf, MAX_MSG_BUF_SIZE);
}
else
{
len = GetCmdFormPollCmdBuf(commid, buf, MAX_MSG_BUF_SIZE);
}
if(len < 7)
{
return;
}
#ifndef OS_LINUX
if(isUdpSocketExist() == TRUE)
#endif
{
if(buf[2] == 0x10)
{
DevAddrParam.m_uchLinkAddr = buf[4];
if(FindProtectDev(pPortParam, &DevAddrParam, TRUE) == FALSE)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
ClearCmdFormPollCmdBuf(commid);
//ClearCmdAllFlag(commid);
return;
}
if(PROTOCOL_MASTER == pPortParam->m_psBaoHu->PortType)
{
if(pPortParam->m_psBaoHu->ReSendCmdFlag)
{
pu8CtrlByte = GetLinkCtrl(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx], DevAddrParam.m_iDevIdx);
*pu8CtrlByte = ~(*pu8CtrlByte);
}
pu8CtrlByte = GetLinkCtrl(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx], DevAddrParam.m_iDevIdx);
buf[3] |= (fcb & *pu8CtrlByte);
*pu8CtrlByte = ~(*pu8CtrlByte);
}
else
{
if(ProvHaveClassOne(commid, &DevAddrParam, pPortParam->m_bSendChangeDi) == TRUE)
{
buf[3] |= 0x20;
}
}
buf[5] = CalBuban103Lpc(&buf[3], 2);
}
else if(buf[2] == 0x68)
{
DevAddrParam.m_uchLinkAddr = buf[7];
DevAddrParam.m_uchCommAddr = buf[11];
if(0xFF != DevAddrParam.m_uchLinkAddr)
{
if(FindProtectDev(pPortParam, &DevAddrParam, FALSE) == FALSE)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
ClearCmdFormPollCmdBuf(commid);
//ClearCmdAllFlag(commid);
return;
}
if(PROTOCOL_MASTER == pPortParam->m_psBaoHu->PortType)
{
if(pPortParam->m_psBaoHu->ReSendCmdFlag)
{
pu8CtrlByte = GetLinkCtrl(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx], DevAddrParam.m_iDevIdx);
*pu8CtrlByte = ~(*pu8CtrlByte);
}
pu8CtrlByte = GetLinkCtrl(&pPortParam->m_psLink[DevAddrParam.m_iLinkIdx], DevAddrParam.m_iDevIdx);
buf[6] |= (fcb & *pu8CtrlByte);
//if(buf[7] != 0xFF)
//{
// *pu8CtrlByte = ~(*pu8CtrlByte);
//}
*pu8CtrlByte = ~(*pu8CtrlByte);
}
else
{
if(ProvHaveClassOne(commid, &DevAddrParam, pPortParam->m_bSendChangeDi) == TRUE)
{
buf[6] |= 0x20;
}
}
}
if((buf[8] == C_SYN_TA_3) && (buf[3] == 15))
{
GetLocalTimeEx(&sDateTime);
sDateTime.mSec = sDateTime.Sec*1000 + sDateTime.mSec;
buf[14] = sDateTime.mSec % 256;
buf[15] = sDateTime.mSec / 256;
buf[16] = (u_char)sDateTime.Min;
buf[17] = (u_char)sDateTime.Hour;
buf[18] = (u_char)(sDateTime.Day&0x1F);
buf[19] = (u_char)sDateTime.Month;
buf[20] = (u_char)(sDateTime.Year%100);
}
buf[buf[3]+6] = CalBuban103Lpc(&buf[6], buf[3]);
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
ClearCmdFormPollCmdBuf(commid);
//ClearCmdAllFlag(commid);
return;
}
SendDataToPort(commid, (char *)&buf[2], len-2);
pPortParam->m_psBaoHu->SendCmdFlag = 1;
pPortParam->m_psBaoHu->ReSendCmdFlag = 0;
pPortParam->m_psBaoHu->RevCmdFlag = 0;
}
#ifdef OS_LINUX
if(pPortParam->m_psBaoHu->LastGetCmdBuf == FAST_CMD_TYPE)
#else
if((pPortParam->m_psBaoHu->LastGetCmdBuf == FAST_CMD_TYPE)
|| !isUdpSocketExist())
#endif
{
pPortParam->m_psBaoHu->ForceWaitCnt = BYTE1(buf[0])+BYTE0(buf[1])+TIMER_CNT-1;
pPortParam->m_psBaoHu->ForceWaitCnt /= TIMER_CNT;
if(pPortParam->m_psBaoHu->ForceWaitCnt)
{
pPortParam->m_psBaoHu->ForceWaitFlag = 1;
}
else
{
ClearCmdFormPollCmdBuf(commid); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
//ClearCmdAllFlag(commid); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
}
}
}
/*!
\brief Ѱ<EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
\param u_32 portno : RTU<EFBFBD>˿ں<EFBFBD>
\param i_32 iBuIdx : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Buban103FindNextCmd(int commid)
{
int i, j, iCurCmdIdx;
BYTE *pu8CtrlByte;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if((commid < 0) || (commid >= GetMaxPort()))
{
return;
}
if(!ShmGetPortFlag(commid, FLAG_OPEN))
{
return;
}
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
//<2F><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ʱ<EEB6A8><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1
for(i=0; i<pPortParam->m_iLinkNum; i++)
{
pLinkParam = &pPortParam->m_psLink[i];
for(j=0; j<BUBAN103_TIMER_CMD_NUM; j++)
{
if(pLinkParam->m_sArrayCmdTime[j].m_iCmdTimerConst > 0)
{
pLinkParam->m_sArrayCmdTime[j].m_iCmdTimerCnt++;
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(CheckPollCmdBufEmpty(commid) <= 0)
{
return;
}
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
//ÿ<><C3BF><EFBFBD><EFBFBD>ַ<EFBFBD>·<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ѭ<EEA3AC><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pLinkParam->m_iDevIdx >= pLinkParam->m_iDevNum-1)
{
pLinkParam->m_iDevIdx = 0;
pPortParam->m_iLinkIdx = (pPortParam->m_iLinkIdx+1) % pPortParam->m_iLinkNum;
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
pLinkParam->m_iDevIdx = 0;
}
else
{
pLinkParam->m_iDevIdx++;
}
//<2F>ж<EFBFBD><D0B6><EFBFBD>·<EFBFBD><C2B7>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δʵ<CEB4>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF>·״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx];
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == FALSE)
{
// һ<><D2BB><EFBFBD><EFBFBD>·һ<C2B7><D2BB>ѭ<EFBFBD><D1AD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·<EFBFBD><C2B7>λ
if((pLinkParam->m_uchLinkAddr != 0xFF)
&& (pLinkParam->m_iDevIdx != 0))
{
pLinkParam->m_iDevIdx = pLinkParam->m_iDevNum - 1;
return;
}
pu8CtrlByte = GetLinkCtrl(pLinkParam, pLinkParam->m_iDevIdx);
*pu8CtrlByte = 0;
MakeBuban103LinkCommand(commid,
GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),
C_RCU_NA_3, NULL, 0, NORMAL_POLL_CMD);
return;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>δ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if(pDevParam->m_bInitdata == TRUE)
{
pDevParam->m_u32CallCnt++;
if(pDevParam->m_u32CallCnt < pLinkParam->m_u32TimeOutConst)
{
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE)
{
MakeBuban103LinkCommand(commid,\
GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),\
C_PL2_NA_3, NULL, 0, NORMAL_POLL_CMD);
return;
}
}
else
{
pDevParam->m_u32CallCnt = 0;
pDevParam->m_bInitdata = FALSE;
}
}
//<2F>ж<EFBFBD><D0B6>з񱣻<D0B7><F1B1A3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE)
{
// wen 2004.02.11 <20>޸ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>(<28><>ʱû<CAB1><C3BB><EFBFBD>·<EFBFBD>)
//seladdr = (u_char)(*(WORD*)&gBuban103_RtuMsg.MsgData[0]);
//if((gBuban103_RtuMsg.MsgLen > 0) && (gBuban103_RtuMsg.PortNumber == commid))
//{
// itmpBuIdx = FindMatchingBuIdx(commid, seladdr);
// if(itmpBuIdx >= 0)
// {
// MakeBuban103BaohuCommand();
// Buban103PortParam[commid][selidx][iBuIdx].CallCnt = 0;
// Buban103PortParam[commid][selidx][iBuIdx].RstLinkOk = true;
// memset((char*)&gBuban103_RtuMsg, 0, sizeof(gBuban103_RtuMsg));
// return;
// }
//}
}
iCurCmdIdx = pLinkParam->m_shCurCmdIdx;
if(pDevParam->m_bAllQueryOk == TRUE)
{
for(i=0; i<BUBAN103_TIMER_CMD_NUM; i++)
{
if(pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst > 0)
{
if(pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerCnt\
> pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst)
{
break;
}
}
iCurCmdIdx = (iCurCmdIdx+1) % BUBAN103_TIMER_CMD_NUM;
}
pLinkParam->m_shCurCmdIdx = iCurCmdIdx;
if(i >= BUBAN103_TIMER_CMD_NUM)
{
pPortParam->m_iLinkIdx = (pPortParam->m_iLinkIdx+1) % pPortParam->m_iLinkNum;
}
else
{
MakeBuban103PollingCmd(commid, pLinkParam, iCurCmdIdx);
pLinkParam->m_iDevIdx = (pLinkParam->m_iDevIdx+1) % pLinkParam->m_iDevNum;
if(pLinkParam->m_iDevIdx == 0)
{
pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerCnt = 0;
pLinkParam->m_shCurCmdIdx = (pLinkParam->m_shCurCmdIdx+1) % BUBAN103_TIMER_CMD_NUM;
pPortParam->m_iLinkIdx = (pPortParam->m_iLinkIdx+1) % pPortParam->m_iLinkNum;
}
}
}
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻ͣ<E4B2BB><CDA3><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE)
{
if(CheckPollCmdBufEmpty(commid) <= 0)
{
return;
}
MakeBuban103LinkCommand(commid,\
GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),\
C_PL2_NA_3, NULL, 0, NORMAL_POLL_CMD);
}
}
BOOL Buban103FindNextCmdEx(int commid)
{
int i, j, iCurCmdIdx;
BYTE *pu8CtrlByte;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
//char szbuf[128];
if((commid < 0) || (commid >= GetMaxPort()))
{
return FALSE;
}
if(!ShmGetPortFlag(commid, FLAG_OPEN))
{
return FALSE;
}
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
/*
char szbuf[256];
FILE *fp;
DAY_TIME sTime;
fp = NULL;
if(commid == 6)
{
getcwd(szbuf, sizeof(szbuf));
sprintf(szbuf, "%s/log/cmdtime.txt", szbuf);
fp = fopen(szbuf, "a");
GetLocalTimeEx(&sTime);
sprintf(szbuf, "wen: %02d:%02d:%02d.%03d, commid=%d calc pollcmd count.\n", sTime.Hour, sTime.Min, sTime.Sec, sTime.mSec, commid);
//DebugPrint(szbuf);
if(fp)
fwrite(szbuf, 1, strlen(szbuf), fp);
}
*/
//<2F><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ʱ<EEB6A8><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1
for(i=0; i<pPortParam->m_iLinkNum; i++)
{
pLinkParam = &pPortParam->m_psLink[i];
if(!IsDevLinkOk(pLinkParam, i))
{
continue;
}
for(j=0; j<BUBAN103_TIMER_CMD_NUM; j++)
{
if(pLinkParam->m_sArrayCmdTime[j].m_iCmdTimerConst > 0)
{
pLinkParam->m_sArrayCmdTime[j].m_iCmdTimerCnt++;
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(CheckPollCmdBufEmpty(commid) <= 0)
{
return FALSE;
}
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx];
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == FALSE)
{
// һ<><D2BB><EFBFBD><EFBFBD>·һ<C2B7><D2BB>ѭ<EFBFBD><D1AD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·<EFBFBD><C2B7>λ
if((pLinkParam->m_uchLinkAddr != 0xFF)\
&& (pLinkParam->m_iDevIdx != 0))
{
pLinkParam->m_iDevIdx = pLinkParam->m_iDevNum - 1;
return TRUE;
}
pu8CtrlByte = GetLinkCtrl(pLinkParam, pLinkParam->m_iDevIdx);
*pu8CtrlByte = 0;
MakeBuban103LinkCommand(commid,
GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),
C_RCU_NA_3, NULL, 0, NORMAL_POLL_CMD);
return TRUE;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD>δ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
if(pDevParam->m_bInitdata == TRUE)
{
pDevParam->m_u32CallCnt++;
if(pDevParam->m_u32CallCnt < pLinkParam->m_u32TimeOutConst)
{
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE)
{
MakeBuban103LinkCommand(commid,\
GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),\
C_PL2_NA_3, NULL, 0, NORMAL_POLL_CMD);
return TRUE;
}
}
else
{
pDevParam->m_u32CallCnt = 0;
pDevParam->m_bInitdata = FALSE;
}
}
//<2F>ж<EFBFBD><D0B6>з񱣻<D0B7><F1B1A3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE)
{
// wen 2004.02.11 <20>޸ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>(<28><>ʱû<CAB1><C3BB><EFBFBD>·<EFBFBD>)
//seladdr = (u_char)(*(WORD*)&gBuban103_RtuMsg.MsgData[0]);
//if((gBuban103_RtuMsg.MsgLen > 0) && (gBuban103_RtuMsg.PortNumber == commid))
//{
// itmpBuIdx = FindMatchingBuIdx(commid, seladdr);
// if(itmpBuIdx >= 0)
// {
// MakeBuban103BaohuCommand();
// Buban103PortParam[commid][selidx][iBuIdx].CallCnt = 0;
// Buban103PortParam[commid][selidx][iBuIdx].RstLinkOk = true;
// memset((char*)&gBuban103_RtuMsg, 0, sizeof(gBuban103_RtuMsg));
// return;
// }
//}
}
if(pLinkParam->m_shCurCmdIdx < BUBAN103_TIMER_CMD_NUM)
{
iCurCmdIdx = pLinkParam->m_shCurCmdIdx;
}
else
{
iCurCmdIdx = 0;
}
if(pDevParam->m_bAllQueryOk == TRUE)
{
for(i=0; i<BUBAN103_TIMER_CMD_NUM; i++)
{
if(iCurCmdIdx >= BUBAN103_TIMER_CMD_NUM)
{
break;
}
if(pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst > 0)
{
if(pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerCnt\
> pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst)
{
break;
}
}
iCurCmdIdx++;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>ѯָ<D1AF><EFBFBD><EEA3AC><EFBFBD>ӵ<EFBFBD>һ<EFBFBD><D2BB>װ<EFBFBD>ÿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
if(pLinkParam->m_shCurCmdIdx != iCurCmdIdx)
{
pLinkParam->m_iDevIdx = 0;
pLinkParam->m_shCurCmdIdx = iCurCmdIdx;
}
if(iCurCmdIdx < BUBAN103_TIMER_CMD_NUM)
{
//if(iCurCmdIdx == 0)
//{
// sprintf(szbuf, "%d<>˿<EFBFBD>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=%d,<2C><><EFBFBD><EFBFBD>=%d",commid+1,pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerConst,\
// pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerCnt);
// DebugPrint(szbuf);
// }
MakeBuban103PollingCmd(commid, pLinkParam, iCurCmdIdx);
if(pLinkParam->m_iDevIdx >= (pLinkParam->m_iDevNum-1))
{
pLinkParam->m_sArrayCmdTime[iCurCmdIdx].m_iCmdTimerCnt = 0;
}
return TRUE;
}
}
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>䲻ͣ<E4B2BB><CDA3><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if(IsDevLinkOk(pLinkParam, pLinkParam->m_iDevIdx) == TRUE)
//{
//if(CheckPollCmdBufEmpty(commid) <= 0)
//{
// return;
//}
// MakeBuban103LinkCommand(commid,\
// GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),\
// C_PL2_NA_3, NULL, 0, NORMAL_POLL_CMD);
// return TRUE;
//}
MakeBuban103LinkCommand(commid,\
GetLinkAddr(pLinkParam, pLinkParam->m_iDevIdx),\
C_PL2_NA_3, NULL, 0, NORMAL_POLL_CMD);
return TRUE;
}
void Buban103CalcNextDev(int commid, BOOL bFlag)
{
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
//printf("Buban103CalcNextDev: commid_%d\n", commid);
if(FALSE == GetPortParamPtr(commid, &pPortParam))
{
return;
}
if(!ShmGetPortFlag(commid, FLAG_OPEN))
{
return;
}
//printf("Buban103CalcNextDev: LinkIdx=%d, LinkNum=%d\n", pPortParam->m_iLinkIdx, pPortParam->m_iLinkNum);
//return;
if(pPortParam->m_iLinkIdx >= pPortParam->m_iLinkNum)
{
pPortParam->m_iLinkIdx = 0;
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
pLinkParam->m_iDevIdx = 0;
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>װ<EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
if(FALSE == bFlag)
{
if((pLinkParam->m_uchLinkAddr != 0xFF)\
&& (pLinkParam->m_iDevNum > 1))
{
pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx];
if(pDevParam->m_bAllQueryOk == FALSE)
{
pLinkParam->m_bGotoNext = TRUE;
return;
}
// else if(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><E4B2BB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ж<EFBFBD>)
}
}
// <20><>һ<EFBFBD><D2BB>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA>ļ<EFBFBD><C4BC><EFBFBD>
else
{
pDevParam = &pLinkParam->m_psDev[pLinkParam->m_iDevIdx];
if(pLinkParam->m_bGotoNext == FALSE)
{
return;
}
if(pDevParam->m_bAllQueryOk == TRUE)
{
return;
}
// else if(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><E4B2BB><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ж<EFBFBD>)
}
pLinkParam->m_bGotoNext = FALSE;
pLinkParam->m_iDevIdx++;
if(pLinkParam->m_iDevIdx >= pLinkParam->m_iDevNum)
{
pLinkParam->m_iDevIdx = 0;
pPortParam->m_iLinkIdx = (pPortParam->m_iLinkIdx+1) % pPortParam->m_iLinkNum;
pLinkParam = &pPortParam->m_psLink[pPortParam->m_iLinkIdx];
pLinkParam->m_iDevIdx = 0;
}
}
}
//***************************************************************************/
//* <20><>ʱ<EFBFBD><CAB1>ѯ<EFBFBD><D1AF>׼103ָ<33><D6B8><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>:u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//* i_32 CmdIdx : ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:BOOL retval : ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ɳɹ<C9B3><C9B9><EFBFBD>ʶ */
//***************************************************************************/
void MakeBuban103PollingCmd(int commid, BUBAN103LINKDEF *psLinkParam, i_32 CmdIdx)
{
i_32 i;
DEVDEF *pDevParam;
CMDPARAM CmdParam;
GEN_DATAGROUP sGenDataGroup;
//#ifdef _DEBUG_MSG_
char szbuf[256];
//#endif
pDevParam = &psLinkParam->m_psDev[psLinkParam->m_iDevIdx];
switch(CmdIdx)
{
case 0:// ʱ<><CAB1>ͬ<EFBFBD><CDAC>
// <20><EFBFBD><E3B2A5>ʱ<EFBFBD><CAB1>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB>
sprintf(szbuf, "port=%d,<2C><EFBFBD><E3B2A5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>",commid+1);
DebugPrint(szbuf);
psLinkParam->m_sArrayCmdTime[CmdIdx].m_iCmdTimerCnt = 0;
CmdParam.m_sDevAddr.m_uchLinkAddr = 0xFF;
CmdParam.m_sDevAddr.m_uchCommAddr = 0xFF;
CmdParam.m_uchFun = (u_char)pDevParam->m_sDevParam.m_sSyncTimeInfo.m_u8Fun;
CmdParam.m_uchInf = (u_char)pDevParam->m_sDevParam.m_sSyncTimeInfo.m_u8Inf;
CmdParam.m_uchRII = pDevParam->m_u8RII;
MakeTimeSyn_CAsdu6(commid, &CmdParam);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰָ<C7B0>ָ<EEA3AC><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·
psLinkParam->m_iDevIdx = psLinkParam->m_iDevNum - 1;
break;
case 1:// <20>ܲ<EFBFBD>ѯ
CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr;
CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE))
{
break;
}
MakeAllQuery_CAsdu7(commid, &CmdParam);
break;
case 2:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ
CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr;
CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE))
{
break;
}
CmdParam.m_uchRII = pDevParam->m_u8RII;
MakeQCC_CAsdu88(commid, &CmdParam);
break;
case 3:// ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ(ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr;
CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE))
{
break;
}
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(AI_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
break;
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯָ<D1AF><D6B8>!!!\n",
commid, CmdParam.m_sDevAddr.m_uchLinkAddr, CmdParam.m_sDevAddr.m_uchCommAddr);
//ǰ<>û<EFBFBD>վ<EFBFBD><D5BE>=1
DebugPrint(szbuf);
#endif
break;
}
CmdParam.m_uchInf = C_INF_READGROUPALLITEMS;
sGenDataGroup.m_u8Grp = (BYTE)pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
sGenDataGroup.m_u8Itm = 0;
sGenDataGroup.m_u8KOD = KOD_ACTUALVALUE;
CmdParam.m_uchRII = pDevParam->m_u8RII;
MakeGenIdentCommand_CAsdu21(commid, &CmdParam, &sGenDataGroup, 1);
break;
case 4:// ״̬<D7B4><CCAC><EFBFBD><EFBFBD>ѯ(ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
CmdParam.m_sDevAddr.m_uchLinkAddr = psLinkParam->m_uchLinkAddr;
CmdParam.m_sDevAddr.m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
if(FALSE == FindProtectDev((BUBAN103PORTPARAM *)SioParam[commid].ExtInfo, &CmdParam.m_sDevAddr, FALSE))
{
break;
}
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(DI_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
break;
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯָ<D1AF><D6B8>!!!\n",
commid, CmdParam.m_sDevAddr.m_uchLinkAddr, CmdParam.m_sDevAddr.m_uchCommAddr);
DebugPrint(szbuf);
#endif
break;
}
CmdParam.m_uchInf = C_INF_READGROUPALLITEMS;
sGenDataGroup.m_u8Grp = (BYTE)pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
sGenDataGroup.m_u8Itm = 0;
sGenDataGroup.m_u8KOD = KOD_ACTUALVALUE;
CmdParam.m_uchRII = pDevParam->m_u8RII;
MakeGenIdentCommand_CAsdu21(commid, &CmdParam, &sGenDataGroup, 1);
break;
default:
break;
}
}
//===========================ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================
//===========================<3D><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=======================
//***************************************************************
//* <20><><EFBFBD><EFBFBD> Buban103 <20>ۼӺͼ<D3BA><CDBC><EFBFBD><EFBFBD><EFBFBD> *
//* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BYTE* msg:׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1>Ϣ *
//* u_32 len:׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> *
//***************************************************************
BYTE CalBuban103Lpc(BYTE *msg, u_32 len)
{
u_32 i;
char retval;
retval = 0;
for(i=0; i<len; i++)
{
retval += msg[i];
}
return retval;
}
BOOL Buban103Check(char *pData, int iDataLen)
{
BOOL bRetval;
int iCheckLen;
bRetval = FALSE;
switch(pData[0])
{
case 0x10: // <20><>֡
if(pData[4] != 0x16)
{
break;
}
if(CalBuban103Lpc((BYTE *)&pData[1], 2) != (BYTE)pData[3])
{
break;
}
bRetval = TRUE;
break;
case 0x68: // <20><>֡
if(pData[0] != pData[3])
{
break;
}
if(pData[iDataLen-1] != 0x16)
{
break;
}
if(pData[1] != pData[2])
{
break;
}
iCheckLen = (BYTE)pData[1];
if(CalBuban103Lpc((BYTE *)&pData[4], iCheckLen) != (BYTE)pData[iDataLen-2])
{
break;
}
bRetval = TRUE;
break;
default:
break;
}
return bRetval;
}
void Buban103ProcessData(int commid, BUBAN103PORTPARAM *psPortParam, BOOL bProcess)
{
RTUMSG msg;
BUBAN103PORTPARAM *pPortParam;
/*
if(FALSE == GetPortParamPtr(commid, &pPortParam))
{
return;
}
*/
pPortParam = psPortParam;
if(TRUE == bProcess)
{
msg.PortIdx = commid;
//msg.MsgType = iCOMM_DATA;
msg.MsgLen = psPortParam->m_iRecvLen;
memcpy(msg.MsgData, psPortParam->m_achRecvBuf, msg.MsgLen);
msg.MsgData[msg.MsgLen] = CHECK_WHOLE;
msg.MsgData[msg.MsgLen+1] = 0;
// <20><>վ<EFBFBD><D5BE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
if(PROTOCOL_SLAVE == pPortParam->m_psBaoHu->PortType)
{
ProvRtuProtocolDataProcess(commid, &msg);
return;
}
// <20><>վ<EFBFBD><D5BE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
switch(msg.MsgData[0])
{
case 0x68:
Buban103longprocess(&msg);
break;
case 0x10:
Buban103shortprocess(&msg);
break;
default:
break;
}
}
// <20><><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD>ɺ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ַ
Buban103CalcNextDev(commid, TRUE);
}
BOOL FindProtectDev(BUBAN103PORTPARAM *psPortParam, \
DEVADDRPARAM *psAddrParam, \
BOOL bJudgeLinkOnly)
{
int i, j;
BYTE uchAddr;
BOOL bRetVal;
bRetVal = FALSE;
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
if(psPortParam->m_psLink[i].m_uchLinkAddr != 0xFF)
{
if(psPortParam->m_psLink[i].m_uchLinkAddr != psAddrParam->m_uchLinkAddr)
{
continue;
}
uchAddr = psAddrParam->m_uchCommAddr;
if(bJudgeLinkOnly == TRUE)
{
bRetVal = TRUE;
psAddrParam->m_iLinkIdx = i;
psAddrParam->m_iDevIdx = 0;
break;
}
}
else
{
// װ<>õ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>ַ
uchAddr = psAddrParam->m_uchLinkAddr;
if(psAddrParam->m_uchLinkAddr == 0xFF)
{
uchAddr = psAddrParam->m_uchCommAddr;
psAddrParam->m_uchLinkAddr = uchAddr;
}
}
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
if(psPortParam->m_psLink[i].m_psDev != NULL)
{
if(psPortParam->m_psLink[i].m_psDev[j].m_sDevParam.m_u8DevAddr == uchAddr)
{
break;
}
}
else if(psPortParam->m_psLink[i].m_psProvDev != NULL)
{
if(psPortParam->m_psLink[i].m_psProvDev[j].m_iProvAddr == (int)uchAddr)
{
break;
}
}
}
if(j < psPortParam->m_psLink[i].m_iDevNum)
{
psAddrParam->m_iLinkIdx = i;
psAddrParam->m_iDevIdx = j;
bRetVal = TRUE;
break;
}
}
return bRetVal;
}
BOOL FindProtectDevFromProvAddr(BUBAN103PORTPARAM *psPortParam, \
DEVADDRPARAM *psAddrParam, \
int iProvAddr)
{
int i, j;
BOOL bRetVal;
DEVDEF *pDevParam;
PROVDEVDEF *pProvDevParam;
bRetVal = FALSE;
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
if(psPortParam->m_psLink[i].m_psDev != NULL)
{
pDevParam = &psPortParam->m_psLink[i].m_psDev[j];
if(iProvAddr == pDevParam->m_sDevParam.m_iProvAddr)
{
psAddrParam->m_iDevIdx = j;
psAddrParam->m_iLinkIdx = i;
psAddrParam->m_uchLinkAddr = psPortParam->m_psLink[i].m_uchLinkAddr;
psAddrParam->m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
bRetVal = TRUE;
break;
}
}
else if(psPortParam->m_psLink[i].m_psProvDev != NULL)
{
pProvDevParam = &psPortParam->m_psLink[i].m_psProvDev[j];
if(iProvAddr == pProvDevParam->m_iProvAddr)
{
psAddrParam->m_iDevIdx = j;
psAddrParam->m_iLinkIdx = i;
psAddrParam->m_uchLinkAddr = 0;
psAddrParam->m_uchCommAddr = 0;
bRetVal = TRUE;
break;
}
}
else
{
return FALSE;
}
}
if(bRetVal == TRUE)
{
break;
}
}
return bRetVal;
}
BOOL FindProtectDevFromPntNo(BUBAN103PORTPARAM *psPortParam, \
DEVADDRPARAM *psAddrParam, \
DBINFO *psDBInfo,\
int iPntNo, int itype)
{
int i, j, inum, ipnt;
BOOL bRetVal, bProv;
DEVDEF *pDevParam=NULL;
PROVDEVDEF *pProvDevParam=NULL;
DBORIENTATION *pDataUnit=NULL;
bRetVal = FALSE;
if(psPortParam->m_psLink[0].m_psDev != NULL)
{
pProvDevParam = NULL;
bProv = FALSE;
}
else if(psPortParam->m_psLink[0].m_psProvDev != NULL)
{
pDevParam = NULL;
bProv = TRUE;
}
else
{
return FALSE;
}
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
if(bProv == FALSE)
{
pDevParam = &psPortParam->m_psLink[i].m_psDev[j];
switch(itype)
{
case AI_PNT_TYPE:
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[0];
break;
case DI_PNT_TYPE:
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
break;
case PI_PNT_TYPE:
pDataUnit = &pDevParam->m_sDevParam.m_sPiDBOrientation;
break;
default:
pDataUnit = NULL;
break;
}
}
else
{
pProvDevParam = &psPortParam->m_psLink[i].m_psProvDev[j];
switch(itype)
{
case DI_PNT_TYPE:
pDataUnit = &pProvDevParam->m_sYxInfo;
break;
case AI_PNT_TYPE:
case PI_PNT_TYPE:
default:
pDataUnit = NULL;
break;
}
}
if(pDataUnit == NULL)
{
continue;
}
if(AI_PNT_TYPE == itype)
{
for(inum=0; inum<DEV_AI_MAXNUM; inum++)
{
if(pDataUnit[inum].m_iPntNum <= 0)
{
break;
}
ipnt = iPntNo - pDataUnit[inum].m_iStartPntNo;
if((ipnt >= 0) && (ipnt < pDataUnit[inum].m_iPntNum))
{
pDataUnit = &pDataUnit[inum];
bRetVal = TRUE;
break;
}
}
}
else
{
if(pDataUnit->m_iPntNum <= 0)
{
break;
}
ipnt = iPntNo - pDataUnit->m_iStartPntNo;
if((ipnt >= 0) && (ipnt < pDataUnit->m_iPntNum))
{
bRetVal = TRUE;
}
}
if(TRUE == bRetVal)
{
break;
}
}
if(bRetVal == TRUE)
{
break;
}
}
if(TRUE == bRetVal)
{
psAddrParam->m_iDevIdx = j;
psAddrParam->m_iLinkIdx = i;
psAddrParam->m_uchLinkAddr = psPortParam->m_psLink[i].m_uchLinkAddr;
//if(pDevParam != NULL)
//{
// psAddrParam->m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
//}
//else if(pProvDevParam != NULL)
//{
// psAddrParam->m_uchCommAddr = (BYTE)pProvDevParam->m_iProvAddr;
//}
//else
//{
// bRetVal = FALSE;
//}
if(FALSE == bProv)
{
psAddrParam->m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
}
else
{
psAddrParam->m_uchCommAddr = (BYTE)pProvDevParam->m_iProvAddr;
}
if(psDBInfo != NULL)
{
memcpy((void *)psDBInfo, (void *)&pDataUnit->m_psDataInfo[ipnt], sizeof(DBINFO));
}
}
return bRetVal;
}
BOOL FindProtectDevFromYkYtPnt(BUBAN103PORTPARAM *psPortParam, \
DEVADDRPARAM *psAddrParam, \
int iYkYtPnt)
{
int i, j, iYkNo;
BOOL bRetVal;
DEVDEF *pDevParam;
bRetVal = FALSE;
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
pDevParam = &psPortParam->m_psLink[i].m_psDev[j];
if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0)
{
continue;
}
iYkNo = iYkYtPnt - pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
if(iYkNo < 0)
{
continue;
}
if(iYkNo < pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum)
{
psAddrParam->m_iDevIdx = j;
psAddrParam->m_iLinkIdx = i;
psAddrParam->m_uchLinkAddr = psPortParam->m_psLink[i].m_uchLinkAddr;
psAddrParam->m_uchCommAddr = pDevParam->m_sDevParam.m_u8DevAddr;
bRetVal = TRUE;
break;
}
}
if(bRetVal == TRUE)
{
break;
}
}
return bRetVal;
}
int FindYkPointFromDev(DBORIENTATION *psYkYtDBUnit, BYTE u8Fun, BYTE u8Inf)
{
int i, iYkNo;
if(psYkYtDBUnit->m_iPntNum <= 0)
{
return -1;
}
for(i=0; i<psYkYtDBUnit->m_iPntNum; i++)
{
if((psYkYtDBUnit->m_psDataInfo[i].m_u8Fun == u8Fun)\
&& (psYkYtDBUnit->m_psDataInfo[i].m_u8Inf == u8Inf))
{
break;
}
}
if(i >= psYkYtDBUnit->m_iPntNum)
{
return -1;
}
iYkNo = psYkYtDBUnit->m_iStartPntNo+i;
return iYkNo;
}
BOOL GetSpecialPtr(int commid, DEVADDRPARAM *psDevAddrParam,\
BUBAN103PORTPARAM **ppsPortParam,\
BUBAN103LINKDEF **ppsLinkParam, DEVDEF **ppsDevParam)
{
if(IsExtInfoPtr(commid) == FALSE)
{
return FALSE;
}
// wen 2005.06.22 <20>޸<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ж<EFBFBD>Ϊֱ<CEAA>Ӹ<EFBFBD>ֵ
/*
if((*ppsPortParam) != NULL)
{
*ppsPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
}
if((*ppsLinkParam) != NULL)
{
*ppsLinkParam = &((*ppsPortParam)->m_psLink[psDevAddrParam->m_iLinkIdx]);
}
if((*ppsDevParam) != NULL)
{
*ppsDevParam = &((*ppsLinkParam)->m_psDev[psDevAddrParam->m_iDevIdx]);
}
*/
if(ppsPortParam != NULL)
{
*ppsPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
}
if(ppsLinkParam != NULL)
{
*ppsLinkParam = &((*ppsPortParam)->m_psLink[psDevAddrParam->m_iLinkIdx]);
}
if(ppsDevParam != NULL)
{
*ppsDevParam = &((*ppsLinkParam)->m_psDev[psDevAddrParam->m_iDevIdx]);
}
return TRUE;
}
BOOL GetSpecialProvPtr(int commid, DEVADDRPARAM *psDevAddrParam,\
BUBAN103PORTPARAM **ppsPortParam,\
BUBAN103LINKDEF **ppsLinkParam, PROVDEVDEF **ppsProvDevParam)
{
if(IsExtInfoPtr(commid) == FALSE)
{
return FALSE;
}
// wen 2005.06.22 <20>޸<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ж<EFBFBD>Ϊֱ<CEAA>Ӹ<EFBFBD>ֵ
/*
if((*ppsPortParam) != NULL)
{
*ppsPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
}
if((*ppsLinkParam) != NULL)
{
*ppsLinkParam = &((*ppsPortParam)->m_psLink[psDevAddrParam->m_iLinkIdx]);
}
if((*ppsProvDevParam) != NULL)
{
*ppsProvDevParam = &((*ppsLinkParam)->m_psProvDev[psDevAddrParam->m_iDevIdx]);
}
*/
if(ppsPortParam != NULL)
{
*ppsPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
}
if(ppsLinkParam != NULL)
{
*ppsLinkParam = &((*ppsPortParam)->m_psLink[psDevAddrParam->m_iLinkIdx]);
}
if(ppsProvDevParam != NULL)
{
*ppsProvDevParam = &((*ppsLinkParam)->m_psProvDev[psDevAddrParam->m_iDevIdx]);
}
return TRUE;
}
BOOL GetPortParamPtr(int commid, BUBAN103PORTPARAM **ppsPortParam)
{
if(IsExtInfoPtr(commid) == FALSE)
{
return FALSE;
}
// wen 2005.06.22 <20>޸<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ж<EFBFBD>Ϊֱ<CEAA>Ӹ<EFBFBD>ֵ
/*
if((*ppsPortParam) != NULL)
{
*ppsPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
}
else
{
printf("*ppsPortParam is NULL.\n");
return FALSE;
}
*/
if(ppsPortParam != NULL)
{
*ppsPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
}
else
{
return FALSE;
}
return TRUE;
}
BOOL GetOneValueOfASDU10(BYTE *pu8SourData, VALUEDEF *psValue, BYTE u8DataType, BYTE u8DataLen)
{
BOOL bRetVal;
BYTE i, u8Len;
float fValue;
double dfValue;
psValue->m_unValue.m_dwValue = 0;
psValue->m_iDataType = DT_NO;
u8Len = u8DataLen;
bRetVal = TRUE;
switch(u8DataType)
{
case DATAID_OS8ASCII: // 8λASCII
psValue->m_iDataType = DT_STRING;
if(u8Len >= MAXSTRINGLEN)
{
u8Len = MAXSTRINGLEN-1;
}
for(i=0; i<u8Len; i++)
{
psValue->m_szValue[i] = pu8SourData[i];
}
psValue->m_szValue[i] = 0;
psValue->m_iDataNum = u8Len;
break;
case DATAID_BSTRING: // 8λ2<CEBB><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
psValue->m_iDataType = DT_CONTROL;
psValue->m_iDataNum = u8Len;
u8Len = (u8DataLen+7) / 8;
if(u8Len > sizeof(DWORD))
{
u8Len = sizeof(DWORD);
psValue->m_iDataNum = u8Len*8;
}
for(i=0; i<u8Len; i++)
{
psValue->m_unValue.m_dwValue += (pu8SourData[i] << (i*8));
}
break;
case DATAID_UI: // <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
psValue->m_iDataType = DT_UINT;
for(i=0; i<u8Len; i++)
{
psValue->m_unValue.m_uValue += (pu8SourData[i] << (i*8));
}
break;
case DATAID_INT: // <20><><EFBFBD><EFBFBD>
case DATAID_EXDATA_0X24:
psValue->m_iDataType = DT_INT;
for(i=0; i<u8Len; i++)
{
psValue->m_unValue.m_iValue += (pu8SourData[i] << (i*8));
}
break;
case DATAID_UFLOAT: // <20>޷<EFBFBD><DEB7>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>
psValue->m_iDataType = DT_FLOAT;
fValue = *(float *)(pu8SourData);
SequenceRtuToHost((char *)(&fValue), sizeof(float));
psValue->m_unValue.m_fValue = fabs(fValue);
break;
case DATAID_FLOAT: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
psValue->m_iDataType = DT_FLOAT;
fValue = *(float *)(pu8SourData);
SequenceRtuToHost((char *)(&fValue), sizeof(float));
psValue->m_unValue.m_fValue = fValue;
break;
case DATAID_754SHORT: // R32.23 IEEE <20><>׼754<35><34>ʵ<EFBFBD><CAB5>
psValue->m_iDataType = DT_FLOAT;
fValue = *(float *)(pu8SourData);
SequenceRtuToHost((char *)(&fValue), sizeof(float));
psValue->m_unValue.m_fValue = fValue;
break;
case DATAID_754REAL: // R64.53 IEEE <20><>׼754ʵ<34><CAB5>
psValue->m_iDataType = DT_FLOAT;
dfValue = *(double *)(pu8SourData);
SequenceRtuToHost((char *)(&dfValue), sizeof(dfValue));
psValue->m_unValue.m_fValue = dfValue;
break;
case DATAID_DOUBLE: // ˫<><CBAB><EFBFBD><EFBFBD>Ϣ
psValue->m_iDataType = DT_BINARY;
psValue->m_iDataNum = 2;
psValue->m_unValue.m_dwValue = pu8SourData[0] & 0x03;
break;
case DATAID_SINGLE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
psValue->m_iDataType = DT_BINARY;
psValue->m_iDataNum = 1;
psValue->m_unValue.m_dwValue = pu8SourData[0] & 0x01;
break;
case DATAID_13BITS: // <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ(13BITS)
psValue->m_iDataType = DT_UINT;
psValue->m_unValue.m_uValue = pu8SourData[0];
psValue->m_unValue.m_uValue = (pu8SourData[1] & 0x1f) * 256;
break;
case DATAID_WITHTIME: // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
case DATAID_WITHTIMESPACE:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
case DATAID_SORTIDNO: // ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
case DATAID_STRUCT: // <20><><EFBFBD>ݽṹ
default:
bRetVal = FALSE;
break;
}
return bRetVal;
}
int FindAiGroupIdx(DBORIENTATION *pAiDB, int iMaxNum, BYTE u8Asdu, BYTE u8Fun, BYTE u8Inf)
{
int idx;
for(idx = 0; idx < iMaxNum; idx++)
{
if(pAiDB[idx].m_psDataInfo == NULL)
{
continue;
}
if(u8Asdu == pAiDB[idx].m_psDataInfo[0].m_u8Asdu)
{
if((u8Fun == pAiDB[idx].m_psDataInfo[0].m_u8Fun)\
&& (u8Inf == pAiDB[idx].m_psDataInfo[0].m_u8Inf))
{
break;
}
}
}
return idx;
}
//***************************************************************
//* <09><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>̶<EFBFBD>֡<EFBFBD><D6A1>ʱ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//*<2A><><EFBFBD><EFBFBD> RTUMSG* rtumsg:<3A><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//***************************************************************
void Buban103shortprocess(RTUMSG *rtumsg)
{
BOOL bHaveClass1;
int commid;
DEVADDRPARAM sDevAddrParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
sDevAddrParam.m_uchLinkAddr = rtumsg->MsgData[2];
sDevAddrParam.m_uchCommAddr = 0;
if(FindProtectDev(pPortParam, &sDevAddrParam, TRUE) == FALSE)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD>ڶ˿<DAB6><CBBF><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>!!!",
commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
return;
}
else
{
//printf("find is right and exit.\n");
//return;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d linkidx=%d, iDevIdx=%d.",
commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr,
sDevAddrParam.m_iLinkIdx, sDevAddrParam.m_iDevIdx);
DebugPrint(szbuf);
#endif
//Buban103DispConfig(commid, pPortParam);
//return;
pLinkParam = &pPortParam->m_psLink[sDevAddrParam.m_iLinkIdx];
SetProtectDevStatus(pLinkParam, sDevAddrParam.m_iDevIdx, TRUE);
ClearLinkCnt(pLinkParam, sDevAddrParam.m_iDevIdx);
}
bHaveClass1 = FALSE;
if(rtumsg->MsgData[1] & 0x10)
{
pLinkParam->m_iQueryedAddr_CLASS1 = 0;
pLinkParam->m_iQueryNum_CLASS1_Count = 0;
}
else
{
if(rtumsg->MsgData[1] & 0x20)
{
bHaveClass1 = TRUE;
MakeBuban103_PL1_NA_3_Cmd(commid, &sDevAddrParam);
}
else
{
pLinkParam->m_iQueryedAddr_CLASS1 = 0;
pLinkParam->m_iQueryNum_CLASS1_Count = 0;
}
}
switch(rtumsg->MsgData[1] & 0x0f)
{
case M_CON_NA_3://ȷ<><C8B7>֡
SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, TRUE);
if(pLinkParam->m_bRstLinkOk == TRUE)
{
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = TRUE;
}
break;
case M_BY_NA_3://æ֡<C3A6><D6A1>ȷ<EFBFBD><C8B7>֡<EFBFBD><D6A1>
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = TRUE;
break;
case M_NV_NA_3://<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ش<EFBFBD>
if(FALSE == bHaveClass1)
{
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = TRUE;
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bAllQueryOk = TRUE;
}
break;
case M_LKR_NA_3_1://<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, TRUE);
break;
case M_LKR_NA_3_2://<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, FALSE);
break;
case M_LKR_NA_3_3://<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δʵ<CEB4><CAB5>
SetDevLinkOk(pLinkParam, sDevAddrParam.m_iDevIdx, FALSE);
break;
default:
#ifdef _DEBUG_MSG_
//OutputDebugString("<22><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n");
DebugPrint("<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n");
#endif
break;
}
}
//***************************************************************
//* <09><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ɱ<EFBFBD>֡<EFBFBD><D6A1>ʱ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//*<2A><><EFBFBD><EFBFBD> RTUMSG* rtumsg:<3A><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//***************************************************************
void Buban103longprocess(RTUMSG *rtumsg)
{
int commid;
DEVADDRPARAM sDevAddrParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
sDevAddrParam.m_uchLinkAddr = rtumsg->MsgData[5];
sDevAddrParam.m_uchCommAddr = rtumsg->MsgData[9];
if(FindProtectDev(pPortParam, &sDevAddrParam, FALSE) == FALSE)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD>ڶ˿<DAB6><CBBF><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>!!!",
commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
return;
}
else
{
pLinkParam = &pPortParam->m_psLink[sDevAddrParam.m_iLinkIdx];
SetProtectDevStatus(pLinkParam, sDevAddrParam.m_iDevIdx, TRUE);
ClearLinkCnt(pLinkParam, sDevAddrParam.m_iDevIdx);
}
if(rtumsg->MsgData[4] & 0x10)
{
pLinkParam->m_iQueryedAddr_CLASS1 = 0;
pLinkParam->m_iQueryNum_CLASS1_Count = 0;
}
else
{
if(rtumsg->MsgData[4] & 0x20)
{
MakeBuban103_PL1_NA_3_Cmd(commid, &sDevAddrParam);
}
else
{
if(pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bAllQueryOk == FALSE)
{
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bAllQueryOk = TRUE;
}
pLinkParam->m_iQueryedAddr_CLASS1 = 0;
pLinkParam->m_iQueryNum_CLASS1_Count = 0;
}
}
switch(rtumsg->MsgData[6])//<2F><><EFBFBD>ͱ<EFBFBD>ʶ<EFBFBD><CAB6>
{
case M_TM_TA_3: // 1<><31>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
Buban103TMprocess(rtumsg, &sDevAddrParam);
break;
case M_TMR_TA_3: // 2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EAB1A8>
Buban103TMRprocess(rtumsg, &sDevAddrParam);
break;
case M_MEI_NA_3: // 3<><33><EFBFBD><EFBFBD>ֵI<D6B5><49><EFBFBD><EFBFBD>
Buban103MEIprocess(rtumsg, &sDevAddrParam);
break;
case M_TME_TA_3: // 4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
Buban103TMEprocess(rtumsg, &sDevAddrParam);
break;
case M_IRC_NA_3: // 5<><35>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
Buban103IRCprocess(rtumsg, &sDevAddrParam);
break;
case M_SYN_TA_3: // 6ʱ<36><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103SynTime(rtumsg, &sDevAddrParam);
break;
case M_TGI_NA_3: // 8<>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
pLinkParam->m_bRstLinkOk = FALSE;
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = FALSE;
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bAllQueryOk = TRUE;
break;
case M_MEII_NA_3: // 9<><39><EFBFBD><EFBFBD>ֵII<49><49><EFBFBD><EFBFBD>
Buban103MEIINAprocess(rtumsg, &sDevAddrParam);
break;
case M_GD_NTA_3: // 10ͨ<30>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
//<2F><><EFBFBD><EFBFBD>NGD<47><44>COUNTλΪ<CEBB><EFBFBD><E3A3AC><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((rtumsg->MsgData[13] & 0x80) == 0)
{
pLinkParam->m_bRstLinkOk = FALSE;
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = FALSE;
}
Buban103GDprocess(rtumsg, &sDevAddrParam);
break;
case M_GI_NTA_3: // 11ͨ<31>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
Buban103GIprocess(rtumsg, &sDevAddrParam);
break;
// wen 2003.10.27 <20><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݵĴ<DDB5><C4B4><EFBFBD>
case M_LRD_TA_3: // 23<32><33><EFBFBD><EFBFBD>¼<EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103LRDprocess(rtumsg);
break;
case M_RTD_TA_3: // 26<32>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103RTDprocess(rtumsg);
break;
case M_RTC_NA_3: // 27<32><37><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103RTCprocess(rtumsg);
break;
case M_RTT_NA_3: // 28<32><38><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103RTTprocess(rtumsg);
break;
case M_TOT_TA_3: // 29<32><39><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><E4B1A8>
Buban103TOTprocess(rtumsg);
break;
case M_TOV_NA_3: // 30<33><30><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
Buban103TOVprocess(rtumsg);
break;
case M_EOT_TA_3: // 31<33><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103EOTprocess(rtumsg);
pLinkParam->m_bRstLinkOk = FALSE;
pLinkParam->m_psDev[sDevAddrParam.m_iDevIdx].m_bInitdata = FALSE;
break;
case M_MEIII_TA_3: // 32<33><32>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
Buban103MEIIITAprocess(rtumsg, &sDevAddrParam);
break;
case M_MEIV_TA_3: // 33<33><33>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
Buban103MEIVTAprocess(rtumsg, &sDevAddrParam);
break;
case M_MEV_TA_3: // 34<33><34>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
Buban103MEVTAprocess(rtumsg, &sDevAddrParam);
break;
case M_MEVI_TA_3: // 35<33><35>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
Buban103MEVITAprocess(rtumsg, &sDevAddrParam);
break;
case M_IT_NA_3: // 36<33><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
Buban103ITNAprocess(rtumsg, &sDevAddrParam);
break;
case M_IT_TA_3: // 37<33><37>ʱ<EFBFBD><CAB1><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
//Buban103MEITTAprocess(rtumsg, &sDevAddrParam);
break;
case M_ST_NA_3: // 38<33><38>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ
Buban103STNAprocess(rtumsg, &sDevAddrParam);
break;
case M_ST_TA_3: // 39<33><39>ʱ<EFBFBD><CAB1><EFBFBD>IJ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ
//Buban103STTAprocess(rtumsg, &sDevAddrParam);
break;
case M_SP_NA_3: // 40<34><30><EFBFBD><EFBFBD>״̬<D7B4><CCAC>Ϣ
Buban103SPNAprocess(rtumsg, &sDevAddrParam);
break;
case M_SP_TA_3: // 41<34><31>ʱ<EFBFBD><CAB1><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>״̬<D7B4><CCAC>Ϣ
Buban103SPTAprocess(rtumsg, &sDevAddrParam);
break;
case M_DP_NA_3: // 42˫<32><CBAB>״̬<D7B4><CCAC>Ϣ
Buban103DPNAprocess(rtumsg, &sDevAddrParam);
break;
case M_DP_TA_3: // 43<34><33>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>״̬<D7B4><CCAC>Ϣ
Buban103DPTAprocess(rtumsg, &sDevAddrParam);
break;
case M_SS_NA_3: // 44<34><34><EFBFBD><EFBFBD>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
Buban103SSNAprocess(rtumsg, &sDevAddrParam);
break;
case M_SS_TA_3: // 45<34><35>ʱ<EFBFBD><CAB1><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
Buban103SSTAprocess(rtumsg, &sDevAddrParam);
break;
case M_DS_NA_3: // 46˫<36><CBAB>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
Buban103DSNAprocess(rtumsg, &sDevAddrParam);
break;
case M_DS_TA_3: // 47<34><37>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
Buban103DSTAprocess(rtumsg, &sDevAddrParam);
break;
case M_WL_TA_3: // 48ˮλ
Buban103WLTAprocess(rtumsg, &sDevAddrParam);
break;
case M_MEVII_NA_3: // 50<35><30><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
Buban103MEVIINAprocess(rtumsg, &sDevAddrParam);
break;
case C_DC_NA_3: // 64<36><34><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103YkAck(rtumsg, &sDevAddrParam);
break;
case C_RC_NA_3: // 65<36><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103YtAck(rtumsg, &sDevAddrParam);
break;
case C_SE_NA_3: // 66<36><EFBFBD><E8B6A8><EFBFBD><EFBFBD>
break;
case C_CC_NA_3: // 67<36><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_EX_PI_3: // 205<30><35><EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD>˾<EFBFBD><CBBE>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103EXPIprocess(rtumsg, &sDevAddrParam);
break;
default:
#ifdef _DEBUG_MSG_
DebugPrint("<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.\n");
#endif
break;
}
}
void Buban103TMprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// DPI
//rtumsg->MsgData[12];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[17];
Buban103TMprocessOfSoe(rtumsg, psDevAddrParam);
// wen 2004.01.12 <20><><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Buban103TMprocessOfPEvent(rtumsg, psDevAddrParam);
}
void Buban103TMprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int i, dipnt, commid, iYkNo;
BYTE buf[16], st;
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_t iTime;
WORD wMillSeconds;
struct tm *ptrtm;
DI_DEF pntmsg;
SOE_DEF sSoeData;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// DPI
//rtumsg->MsgData[12];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[17];
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[psDevAddrParam->m_iDevIdx];
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU1<55><31>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
for(i=0; i<pDataUnit->m_iPntNum; i++)
{
// wen 2004.04.11 <20><><EFBFBD><EFBFBD>asdu<64><75><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pLinkParam->m_iJudgeAsduNo != 0)
{
if(M_TM_TA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu)
{
continue;
}
}
if((pDataUnit->m_psDataInfo[i].m_u8Fun == rtumsg->MsgData[10])\
&& (pDataUnit->m_psDataInfo[i].m_u8Inf == rtumsg->MsgData[11]))
{
break;
}
}
if(i >= pDataUnit->m_iPntNum)
{
//ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD>У
if(M_CAUSE_REMOTE != rtumsg->MsgData[8])
{
return;
}
iYkNo = FindYkPointFromDev(&pDevParam->m_sDevParam.m_sYkDBOrientation, rtumsg->MsgData[10], rtumsg->MsgData[11]);
if(iYkNo >= 0)
{
// buf[0] --- <20>˿ں<CBBF>(=commid)
// buf[1]
// buf[2]
// buf[3]
// buf[4] --- <20>ص<EFBFBD><D8B5><EFBFBD>
// buf[5]
// buf[6]
// buf[7]
// buf[8] --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2A3>:1=ѡ<><D1A1>,2=ִ<><D6B4>,3=ȡ<><C8A1>,7=ֱ<><D6B1>;
// ң<><D2A3>:4=ѡ<><D1A1>,5=ִ<><D6B4>,6=ȡ<><C8A1>,8=<3D><>ͣ)
// buf[9] --- <20><><EFBFBD><EFBFBD>״̬(1=<3D>ֵ<EFBFBD><D6B5>ϣ<EFBFBD>2=<3D>ϵ<EFBFBD><CFB5><EFBFBD>)
// (<28><><EFBFBD><EFBFBD>λΪ1ʱ<31><CAB1>Ϊ<EFBFBD><CEAA>У<EFBFBD><D0A3><EFBFBD><EFBFBD>, 1=<3D>غ<EFBFBD>, 2=<3D>ط<EFBFBD>, 3=ʧ<><CAA7>)
// <20><>ת<EFBFBD><D7AA>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>У<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA><EFBFBD>Ŀص<C4BF><D8B5>ţ<EFBFBD>ʵ<EFBFBD>ʵĶ˿ں<CBBF>Ӧ<EFBFBD><D3A6><EFBFBD>Ǹ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ķ˿<C4B6>
// <20><>ת<EFBFBD><D7AA><EFBFBD>㲢û<E3B2A2><C3BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ص㣬<D8B5><E3A3AC><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>һ<EFBFBD>¡<EFBFBD>
buf[0] = (BYTE)(commid & 0xFF);
buf[1] = (BYTE)((commid & 0xFF00) << 8);
buf[2] = (BYTE)((commid & 0xFF0000) << 16);
buf[3] = (BYTE)((commid & 0xFF000000) << 24);
buf[4] = (BYTE)(iYkNo & 0xFF);
buf[5] = (BYTE)((iYkNo & 0xFF00) << 8);
buf[6] = (BYTE)((iYkNo & 0xFF0000) << 16);
buf[7] = (BYTE)((iYkNo & 0xFF000000) << 24);
buf[8] = STEP_YKYT_EXEC;
buf[9] = rtumsg->MsgData[12] | 0x80;
if(ShmGetDispYkYtFlag())
{
#ifdef _DEBUG_MSG_
//sprintf(szbuf, "<22>˿<EFBFBD>%d <20><>·<EFBFBD><C2B7>ַ=%d װ<>õ<EFBFBD>ַ%d RII=0x%02x, ң<>ص<EFBFBD><D8B5><EFBFBD>=%d, op=0x%02x!!!\n",
// commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYkNo, rtumsg->MsgData[12]);
//DebugPrint(szbuf);
sprintf(szbuf, "TIP_(%04d): commid=%d linkaddr=%d devaddr=%d RII=0x%02x ykytpnt=%d, op=0x%02x.\n",
_getpid(), commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYkNo, rtumsg->MsgData[12]);
DebugPrint(szbuf);
#endif
}
Buban103YkYtProcess(commid, buf, 10);
}
return;
}
dipnt = pDataUnit->m_iStartPntNo + i;
st = rtumsg->MsgData[12] & 0x03;
if((st == 0) || (st == 3))
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d <20><>·<EFBFBD><C2B7>ַ=%d װ<>õ<EFBFBD>ַ%d RII=%d, <20><><EFBFBD><EFBFBD>=%d, status=%d!!!\n",
commid, rtumsg->MsgData[5], rtumsg->MsgData[9], dipnt, rtumsg->MsgData[12]);
DebugPrint(szbuf);
#endif
return;
}
st--;
pntmsg.Status = st;
// <20><><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>soe
//if(rtumsg->MsgData[8] == M_CAUSE_AUTOSEND)
if(rtumsg->MsgData[8] != M_CAUSE_QUERY)
{
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time(&iTime);
ptrtm = localtime(&iTime);
if(ptrtm->tm_hour < (rtumsg->MsgData[16] & 0x1f))
{
iTime -= 24 * 3600;
ptrtm = localtime(&iTime);
}
ptrtm->tm_hour = rtumsg->MsgData[16] & 0x1f;
ptrtm->tm_min = rtumsg->MsgData[15] & 0x3f;
wMillSeconds = rtumsg->MsgData[13] + rtumsg->MsgData[14]*256;
ptrtm->tm_sec = wMillSeconds / 1000;
wMillSeconds %= 1000;
sSoeData.bStatus = st;
sSoeData.iPntNo = dipnt;
sSoeData.u8Type = 1;// ASDU1
sSoeData.wFaultNo = 0;
sSoeData.u8ProvFun = pDataUnit->m_psDataInfo[i].m_u8ProvFun;
sSoeData.u8ProvInf = pDataUnit->m_psDataInfo[i].m_u8ProvInf;
sSoeData.wRelativeTime = 0;
sSoeData.SoeTime.Year = ptrtm->tm_year+1900;
sSoeData.SoeTime.Month = (BYTE)(ptrtm->tm_mon+1);
sSoeData.SoeTime.Day = (BYTE)(ptrtm->tm_mday);
sSoeData.SoeTime.Hour = (BYTE)(ptrtm->tm_hour);
sSoeData.SoeTime.Min = (BYTE)(ptrtm->tm_min);
sSoeData.SoeTime.Sec = (BYTE)(ptrtm->tm_sec);
sSoeData.SoeTime.mSec = wMillSeconds;
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&sSoeData, DI_PNT_TYPE, PNT_SOE_TIME_EX);
}
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
}
void Buban103TMRprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// DPI
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[15];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[17];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[21];
Buban103TMRprocessOfSoe(rtumsg, psDevAddrParam);
// wen 2004.01.12 <20><><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Buban103TMRprocessOfPEvent(rtumsg, psDevAddrParam);
}
void Buban103TMRprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int i, dipnt, commid;
BYTE st;
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_t iTime;
WORD wMillSeconds, wTime, wFault;
struct tm *ptrtm;
DI_DEF pntmsg;
SOE_DEF sSoeData;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// DPI
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[15];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[17];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[21];
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[psDevAddrParam->m_iDevIdx];
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU2<55><32>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
for(i=0; i<pDataUnit->m_iPntNum; i++)
{
// wen 2004.04.11 <20><><EFBFBD><EFBFBD>asdu<64><75><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pLinkParam->m_iJudgeAsduNo != 0)
{
if(M_TMR_TA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu)
{
continue;
}
}
if((pDataUnit->m_psDataInfo[i].m_u8Fun == rtumsg->MsgData[10])\
&& (pDataUnit->m_psDataInfo[i].m_u8Inf == rtumsg->MsgData[11]))
{
break;
}
}
if(i >= pDataUnit->m_iPntNum)
{
return;
}
dipnt = pDataUnit->m_iStartPntNo + i;
if(rtumsg->MsgData[8] == M_CAUSE_QUERY)
{
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹ص<DEB9>
}
else
{
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
}
st = rtumsg->MsgData[12] & 0x03;
if((st == 0) || (st == 3))
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d <20><>·<EFBFBD><C2B7>ַ=%d װ<>õ<EFBFBD>ַ%d <20><><EFBFBD><EFBFBD>=%d, status=%d!!!\n",
commid, rtumsg->MsgData[5], rtumsg->MsgData[9], dipnt, rtumsg->MsgData[12]);
DebugPrint(szbuf);
#endif
return;
}
wTime = rtumsg->MsgData[13] + rtumsg->MsgData[14]*256;
wFault= rtumsg->MsgData[15] + rtumsg->MsgData[16]*256;
st--;
pntmsg.Status = st;
// <20><><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>soe
//if(rtumsg->MsgData[8] == M_CAUSE_AUTOSEND)
if(rtumsg->MsgData[8] != M_CAUSE_QUERY)
{
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time(&iTime);
ptrtm = localtime(&iTime);
if(ptrtm->tm_hour < (rtumsg->MsgData[20] & 0x1f))
{
iTime -= 24 * 3600;
ptrtm = localtime(&iTime);
}
ptrtm->tm_hour = rtumsg->MsgData[20] & 0x1f;
ptrtm->tm_min = rtumsg->MsgData[19] & 0x3f;
wMillSeconds = rtumsg->MsgData[17] + rtumsg->MsgData[18]*256;
ptrtm->tm_sec = wMillSeconds / 1000;
wMillSeconds %= 1000;
sSoeData.bStatus = st;
sSoeData.iPntNo = dipnt;
sSoeData.u8Type = 2;// ASDU2
sSoeData.wFaultNo = wFault;
sSoeData.wRelativeTime = wTime;
sSoeData.u8ProvFun = pDataUnit->m_psDataInfo[i].m_u8ProvFun;
sSoeData.u8ProvInf = pDataUnit->m_psDataInfo[i].m_u8ProvInf;
sSoeData.SoeTime.Year = ptrtm->tm_year+1900;
sSoeData.SoeTime.Month = (BYTE)(ptrtm->tm_mon+1);
sSoeData.SoeTime.Day = (BYTE)(ptrtm->tm_mday);
sSoeData.SoeTime.Hour = (BYTE)(ptrtm->tm_hour);
sSoeData.SoeTime.Min = (BYTE)(ptrtm->tm_min);
sSoeData.SoeTime.Sec = (BYTE)(ptrtm->tm_sec);
sSoeData.SoeTime.mSec = wMillSeconds;
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&sSoeData, DI_PNT_TYPE, PNT_SOE_TIME_EX);
}
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
}
void Buban103MEIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int commid;
int i, aipnt, iNum, idx;
AI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[12];
// AB<41><42><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>
//rtumsg->MsgData[14];
// <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[16];
// <20>޹<EFBFBD><DEB9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[18];
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// wen 2004.02.04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ͳ<EFBFBD><CDB2>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_MEI_NA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEI_NA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU3(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU3(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
//if((rtumsg->MsgData[10] != pDataUnit->m_psDataInfo[0].m_u8Fun)\
// || (rtumsg->MsgData[11] != pDataUnit->m_psDataInfo[0].m_u8Inf))
//{
// return;
//}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
for(i=0; i<iNum; i++)
{
// <20><><EFBFBD><EFBFBD>3λΪƷ<CEAA><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = (short)((rtumsg->MsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256);
pntmsg.RawValue /= 8;
SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
}
}
void Buban103TMEprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int commid;
int idx;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// DPI
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[15];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[17];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[21];
return;
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// wen 2004.02.04 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>Ͳ<EFBFBD><CDB2>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD>
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_TME_TA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_TME_TA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU4(%d,%d) <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU4(%d,%d) <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
}
void Buban103IRCprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int commid;
CMDPARAM sCmdParam;
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>
if(rtumsg->MsgData[8] == M_CAUSE_POWERON)
{
commid = rtumsg->PortIdx;
memcpy((void *)&sCmdParam.m_sDevAddr, (void *)psDevAddrParam, sizeof(DEVADDRPARAM));
sCmdParam.m_uchFun = 255;
sCmdParam.m_uchInf = 0;
MakeAllQuery_CAsdu7(commid, &sCmdParam);
}
}
void Buban103MEIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
//rtumsg->MsgData[11];
// A<><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[12];
// B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[14];
// C<><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[16];
// A<><41><EFBFBD><EFBFBD>ѹ
//rtumsg->MsgData[18];
// B<><42><EFBFBD><EFBFBD>ѹ
//rtumsg->MsgData[20];
// C<><43><EFBFBD><EFBFBD>ѹ
//rtumsg->MsgData[22];
// <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[24];
// <20>޹<EFBFBD><DEB9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[26];
// Ƶ<><C6B5>
//rtumsg->MsgData[28];
int commid;
int i, aipnt, iNum, idx;
AI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_MEII_NA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEII_NA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU9(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU9(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
//if((rtumsg->MsgData[10] != pDataUnit->m_psDataInfo[0].m_u8Fun)\
// || (rtumsg->MsgData[11] != pDataUnit->m_psDataInfo[0].m_u8Inf))
//{
// return;
//}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
for(i=0; i<iNum; i++)
{
// Ʒ<><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if(rtumsg->MsgData[12+2*i] & 0x01);
// Ʒ<><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
//if(rtumsg->MsgData[12+2*i] & 0x02);
// <20><><EFBFBD><EFBFBD>3λΪƷ<CEAA><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = (short)((rtumsg->MsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256);
pntmsg.RawValue /= 8;
SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
}
}
void Buban103MEIIITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
// = 144 --- 147
//rtumsg->MsgData[11];
// L2<4C><32><EFBFBD><EFBFBD>
//rtumsg->MsgData[12];
// L1-L2<4C><32><EFBFBD><EFBFBD>
//rtumsg->MsgData[14];
// <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[16];
// <20>޹<EFBFBD><DEB9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[18];
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵ1(3 BYTES)
//rtumsg->MsgData[20];
// ... ...
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵN(3 BYTES)
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
int commid;
int i, aipnt, iNum, idx;
AI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_MEIII_TA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEIII_TA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU32(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU32(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
//if((rtumsg->MsgData[10] != pDataUnit->m_psDataInfo[0].m_u8Fun)\
// || (rtumsg->MsgData[11] != pDataUnit->m_psDataInfo[0].m_u8Inf))
//{
// return;
//}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
// wen 2003.11.01 <20><><EFBFBD><EFBFBD>4<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ϊг<CEAA><D0B3>ֵ<EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
iNum = 4;
for(i=0; i<iNum; i++)
{
// <20><><EFBFBD><EFBFBD>3λΪƷ<CEAA><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = (short)((rtumsg->MsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256);
pntmsg.RawValue /= 8;
SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
}
}
void Buban103MEIVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF) = 148
//rtumsg->MsgData[11];
// L1<4C><31><EFBFBD><EFBFBD>
//rtumsg->MsgData[12];
// L2<4C><32><EFBFBD><EFBFBD>
//rtumsg->MsgData[14];
// L3<4C><33><EFBFBD><EFBFBD>
//rtumsg->MsgData[16];
// Ul1<6C><31>ѹ
//rtumsg->MsgData[18];
// Ul2<6C><32>ѹ
//rtumsg->MsgData[20];
// Ul3<6C><33>ѹ
//rtumsg->MsgData[22];
// <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[24];
// <20>޹<EFBFBD><DEB9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[26];
// Ƶ<><C6B5>
//rtumsg->MsgData[28];
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵ1(3 BYTES)
//rtumsg->MsgData[30];
// ... ...
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵN(3 BYTES)
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
int commid;
int i, aipnt, iNum, idx;
AI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_MEIV_TA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEIV_TA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU33(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU33(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
//if((rtumsg->MsgData[10] != pDataUnit->m_psDataInfo[0].m_u8Fun)\
// || (rtumsg->MsgData[11] != pDataUnit->m_psDataInfo[0].m_u8Inf))
//{
// return;
//}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
// wen 2003.11.01 <20><><EFBFBD><EFBFBD>9<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ϊг<CEAA><D0B3>ֵ<EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
iNum = 9;
for(i=0; i<iNum; i++)
{
// <20><><EFBFBD><EFBFBD>3λΪƷ<CEAA><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = (short)((rtumsg->MsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256);
pntmsg.RawValue /= 8;
SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
}
}
// <20><><EFBFBD><EFBFBD>ֵV<D6B5><56><EFBFBD><EFBFBD>
void Buban103MEVTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)
// = 144 --- 147
//rtumsg->MsgData[11];
// <20><><EFBFBD><EFBFBD>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD>
// L2<4C><32><EFBFBD><EFBFBD>
//rtumsg->MsgData[12];
// L1-L2<4C><32><EFBFBD><EFBFBD>
//rtumsg->MsgData[16];
// <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[20];
// <20>޹<EFBFBD><DEB9><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[24];
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵ1(4 BYTES)
//rtumsg->MsgData[28];
// ... ...
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵN(4 BYTES)
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
int commid;
int aipnt, iNum, idx;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_MEV_TA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEV_TA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU34(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU34(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
//if((rtumsg->MsgData[10] != pDataUnit->m_psDataInfo[0].m_u8Fun)\
// || (rtumsg->MsgData[11] != pDataUnit->m_psDataInfo[0].m_u8Inf))
//{
// return;
//}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
}
// <20><><EFBFBD><EFBFBD>ֵVI<56><49><EFBFBD><EFBFBD>
void Buban103MEVITAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF) = 148
//rtumsg->MsgData[11];
// L1<4C><31><EFBFBD><EFBFBD>
//rtumsg->MsgData[12];
// L2<4C><32><EFBFBD><EFBFBD>
//rtumsg->MsgData[16];
// L3<4C><33><EFBFBD><EFBFBD>
//rtumsg->MsgData[20];
// Ul1<6C><31>ѹ
//rtumsg->MsgData[24];
// Ul2<6C><32>ѹ
//rtumsg->MsgData[28];
// Ul3<6C><33>ѹ
//rtumsg->MsgData[32];
// <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>
//rtumsg->MsgData[36];
// Ƶ<><C6B5>
//rtumsg->MsgData[38];
// Ƶ<>ʱ仯<CAB1><E4BBAF> df/dt
//rtumsg->MsgData[40];
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>1(3 BYTES)
//rtumsg->MsgData[42];
// ... ...
// <20><><EFBFBD><EFBFBD>г<EFBFBD><D0B3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>N(3 BYTES)
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
int commid;
int aipnt, iNum, idx;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*for(idx = 0; idx < DEV_AI_MAXNUM; idx++)
{
if(pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo == NULL)
{
continue;
}
if(M_MEVI_TA_3 == pDevParam->m_sDevParam.m_sAiDBOrientation[idx].m_psDataInfo[0].m_u8Asdu)
{
break;
}
}*/
//===================================================================================================
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEVI_TA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU35(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU35(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
//if((rtumsg->MsgData[10] != pDataUnit->m_psDataInfo[0].m_u8Fun)\
// || (rtumsg->MsgData[11] != pDataUnit->m_psDataInfo[0].m_u8Inf))
//{
// return;
//}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
}
// <20><><EFBFBD><EFBFBD>ֵVII<49><49><EFBFBD><EFBFBD>
void Buban103MEVIINAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(92 --- 148)
//rtumsg->MsgData[11];
// <20><><EFBFBD><EFBFBD>ֵ1
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD>ֵ2
//rtumsg->MsgData[14];
// ... ...
// <20><><EFBFBD><EFBFBD>ֵn
//rtumsg->MsgData[10+2*N];
int commid;
int i, aipnt, iNum, idx;
AI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20>ܹ<EFBFBD>7<EFBFBD><EFBFBD><E9B1BB>ֵ
idx = FindAiGroupIdx(pDevParam->m_sDevParam.m_sAiDBOrientation, DEV_AI_MAXNUM, M_MEVII_NA_3, rtumsg->MsgData[10], rtumsg->MsgData[11]);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
if(idx >= DEV_AI_MAXNUM)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU50(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
else
{
pDataUnit = &pDevParam->m_sDevParam.m_sAiDBOrientation[idx];
}
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU50(%d,%d) <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, rtumsg->MsgData[10], rtumsg->MsgData[11]);
DebugPrint(szbuf);
#endif
return;
}
iNum = rtumsg->MsgData[7] & 0x7f;
if(iNum > pDataUnit->m_iPntNum)
{
iNum = pDataUnit->m_iPntNum;
}
aipnt = pDataUnit->m_iStartPntNo;
// wen 2003.11.01 <20><><EFBFBD><EFBFBD>9<EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>Ϊг<CEAA><D0B3>ֵ<EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
// <20><><EFBFBD><EFBFBD>103û<33>д<EFBFBD>Ҫ<EFBFBD><D2AA> 20060803 yizhonghu
// iNum = 9;
for(i=0; i<iNum; i++)
{
// <20><><EFBFBD><EFBFBD>3λΪƷ<CEAA><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = (short)((rtumsg->MsgData[12+2*i]&0xf8) + rtumsg->MsgData[13+2*i] * 256);
pntmsg.RawValue /= 8;
SetPntMsg(pDataUnit->m_iStnNo-1, aipnt+i, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
}
}
void Buban103STNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=1
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(76 --- 79)
//rtumsg->MsgData[11];
// <20><>˲<EFBFBD><CBB2>״ָ̬ʾ<D6B8><CABE>ֵ(VTI)
//rtumsg->MsgData[12];
// Ʒ<><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(QDS)
//rtumsg->MsgData[13];
int commid;
int aipnt;
AI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
pDataUnit = &pDevParam->m_sDevParam.m_sStepDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU38 <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
aipnt = pDataUnit->m_iStartPntNo + rtumsg->MsgData[11] - 76;
if(rtumsg->MsgData[12] & 0x80)
{
// <20><EFBFBD><E8B1B8>˲<EFBFBD><CBB2>״̬
}
else
{
// <20>豸δ<E8B1B8><CEB4>˲<EFBFBD><CBB2>״̬
}
pntmsg.RawValue = rtumsg->MsgData[12]&0x7F;
SetPntMsg(pDataUnit->m_iStnNo-1, aipnt, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
//Ʒ<><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(QDS) rtumsg->MsgData[13];
}
void Buban103SPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int i, dipnt, commid;
BYTE st;
DI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[13];
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[psDevAddrParam->m_iDevIdx];
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU1<55><31>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
for(i=0; i<pDataUnit->m_iPntNum; i++)
{
// asdu<64><75><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pLinkParam->m_iJudgeAsduNo != 0)
{
if(M_SP_NA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu)
{
continue;
}
}
if((pDataUnit->m_psDataInfo[i].m_u8Fun == rtumsg->MsgData[10])\
&& (pDataUnit->m_psDataInfo[i].m_u8Inf == rtumsg->MsgData[11]))
{
break;
}
}
if(i >= pDataUnit->m_iPntNum)
{
return;
}
dipnt = pDataUnit->m_iStartPntNo + i;
st = rtumsg->MsgData[12] & 0x01;
pntmsg.Status = st;
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
}
void Buban103SPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
Buban103SPTAprocessOfSoe(rtumsg, psDevAddrParam);
}
void Buban103SPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int i, dipnt, commid;
BYTE st;
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time_t iTime;
WORD wMillSeconds;
struct tm *ptrtm;
DI_DEF pntmsg;
SOE_DEF sSoeData;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1
//rtumsg->MsgData[12];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[13];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2
//rtumsg->MsgData[17];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[18];
// ... ...
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn
//rtumsg->MsgData[12+5*(n-1)];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[12+5*(n-1)+1];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[12+5*n];
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[psDevAddrParam->m_iDevIdx];
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU1<55><31>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
for(i=0; i<pDataUnit->m_iPntNum; i++)
{
// asdu<64><75><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pLinkParam->m_iJudgeAsduNo != 0)
{
if(M_SP_TA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu)
{
continue;
}
}
if((pDataUnit->m_psDataInfo[i].m_u8Fun == rtumsg->MsgData[10])\
&& (pDataUnit->m_psDataInfo[i].m_u8Inf == rtumsg->MsgData[11]))
{
break;
}
}
if(i >= pDataUnit->m_iPntNum)
{
return;
}
dipnt = pDataUnit->m_iStartPntNo + i;
st = rtumsg->MsgData[12] & 0x01;
pntmsg.Status = st;
// <20><><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>soe
if(rtumsg->MsgData[8] != M_CAUSE_QUERY)
{
// <20>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
time(&iTime);
ptrtm = localtime(&iTime);
if(ptrtm->tm_hour < (rtumsg->MsgData[16] & 0x1f))
{
iTime -= 24 * 3600;
ptrtm = localtime(&iTime);
}
ptrtm->tm_hour = rtumsg->MsgData[16] & 0x1f;
ptrtm->tm_min = rtumsg->MsgData[15] & 0x3f;
wMillSeconds = rtumsg->MsgData[13] + rtumsg->MsgData[14]*256;
ptrtm->tm_sec = wMillSeconds / 1000;
wMillSeconds %= 1000;
sSoeData.bStatus = st;
sSoeData.iPntNo = dipnt;
sSoeData.u8Type = 1;// ASDU1
sSoeData.wFaultNo = 0;
sSoeData.u8ProvFun = pDataUnit->m_psDataInfo[i].m_u8ProvFun;
sSoeData.u8ProvInf = pDataUnit->m_psDataInfo[i].m_u8ProvInf;
sSoeData.wRelativeTime = 0;
sSoeData.SoeTime.Year = ptrtm->tm_year+1900;
sSoeData.SoeTime.Month = (BYTE)(ptrtm->tm_mon+1);
sSoeData.SoeTime.Day = (BYTE)(ptrtm->tm_mday);
sSoeData.SoeTime.Hour = (BYTE)(ptrtm->tm_hour);
sSoeData.SoeTime.Min = (BYTE)(ptrtm->tm_min);
sSoeData.SoeTime.Sec = (BYTE)(ptrtm->tm_sec);
sSoeData.SoeTime.mSec = wMillSeconds;
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&sSoeData, DI_PNT_TYPE, PNT_SOE_TIME_EX);
}
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
}
void Buban103DPNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ1
//rtumsg->MsgData[12];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ2
//rtumsg->MsgData[13];
// ... ...
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣn
//rtumsg->MsgData[12+n-1];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[12+n];
}
void Buban103DPTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1
//rtumsg->MsgData[12];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[13];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2
//rtumsg->MsgData[17];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[18];
// ... ...
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn
//rtumsg->MsgData[12+5*(n-1)];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[12+5*(n-1)+1];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[12+5*n];
Buban103DPTAprocessOfSoe(rtumsg, psDevAddrParam);
}
void Buban103DPTAprocessOfSoe(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1
//rtumsg->MsgData[12];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[13];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2
//rtumsg->MsgData[17];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[18];
// ... ...
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn
//rtumsg->MsgData[12+5*(n-1)];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn<CFA2>仯ʱ<E4BBAF><CAB1>(4 bytes)
//rtumsg->MsgData[12+5*(n-1)+1];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[12+5*n];
}
void Buban103SSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int i, j, dipnt, commid;
BYTE st, len;
WORD wStatusBit;
DI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[12];
// QDS
//rtumsg->MsgData[16];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[17];
// QDS
//rtumsg->MsgData[21];
// ... ...
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[12+5*(n-1)];
// QDS
//rtumsg->MsgData[12+5*(n-1)+4];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[12+5*n];
commid = rtumsg->PortIdx;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[psDevAddrParam->m_iDevIdx];
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU1<55><31>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
for(i=0; i<pDataUnit->m_iPntNum; i++)
{
// asdu<64><75><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
if(pLinkParam->m_iJudgeAsduNo != 0)
{
if(M_SS_NA_3 != pDataUnit->m_psDataInfo[i].m_u8Asdu)
{
continue;
}
}
if((pDataUnit->m_psDataInfo[i].m_u8Fun == rtumsg->MsgData[10])\
&& (pDataUnit->m_psDataInfo[i].m_u8Inf == rtumsg->MsgData[11]))
{
break;
}
}
if(i >= pDataUnit->m_iPntNum)
{
return;
}
dipnt = pDataUnit->m_iStartPntNo + i;
len = (int)rtumsg->MsgData[1];
st = rtumsg->MsgData[12] & 0x01;
pntmsg.Status = st;
SetPntMsg(pDataUnit->m_iStnNo-1, dipnt, (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
for ( i = 10; i < 4 + len; i += 5, dipnt += 16 )
{
wStatusBit = rtumsg->MsgData[i+3];
wStatusBit = (wStatusBit<<8) + rtumsg->MsgData[i+2];
for( j = 0; j < 16; j++ )
{
if( wStatusBit & (0x0001 << j) )
pntmsg.Status = 1;
else
pntmsg.Status = 0;
SetPntMsg(commid, dipnt+j, (void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
}
}
}
void Buban103SSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ) & 0x7f = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ1״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[12];
// QDS
//rtumsg->MsgData[16];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[17];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[21];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣ2״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[22];
// QDS
//rtumsg->MsgData[26];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[27];
// ... ...
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11+10*(n-1)];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>Ϣn״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[11+10*(n-1)+1];
// QDS
//rtumsg->MsgData[11+10*(n-1)+5];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[11+10*(n-1)+6];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[11+10*n];
}
void Buban103DSNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ1״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[12];
// QDS
//rtumsg->MsgData[16];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ2״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[17];
// QDS
//rtumsg->MsgData[21];
// ... ...
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣn״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[12+5*(n-1)];
// QDS
//rtumsg->MsgData[12+5*(n-1)+4];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[12+5*n];
}
void Buban103DSTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ) & 0x7f = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ1״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[12];
// QDS
//rtumsg->MsgData[16];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[17];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[21];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣ2״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[22];
// QDS
//rtumsg->MsgData[26];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[27];
// ... ...
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(149 --- 238)
//rtumsg->MsgData[11+10*(n-1)];
// <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD>Ϣn״̬<D7B4><CCAC>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD>=SCD(4 BYTE)
//rtumsg->MsgData[11+10*(n-1)+1];
// QDS
//rtumsg->MsgData[11+10*(n-1)+5];
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λλ<CEBB><CEBB><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
//rtumsg->MsgData[11+10*(n-1)+6];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//rtumsg->MsgData[11+10*n];
}
void Buban103WLTAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int commid;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU48 ˮλ<CBAE><CEBB>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
}
void Buban103ITNAprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP)
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ)=<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF)(6 --- 31)
//rtumsg->MsgData[11];
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CR1(5 BYTES)
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CR2
//rtumsg->MsgData[17];
// ... ...
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>CRn
//rtumsg->MsgData[12+5*(N-1)];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>(RII)
//rtumsg->MsgData[12+5*N];
int commid;
int i, pipnt, iNum;
PI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
pDataUnit = &pDevParam->m_sDevParam.m_sPiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU36 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
iNum = rtumsg->MsgData[7] & 0x7f;
pipnt = pDataUnit->m_iStartPntNo + rtumsg->MsgData[11] - 6;
for(i=0; i<iNum; i++)
{
// <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
if(rtumsg->MsgData[12+5*i+4] & 0x80)
{
continue;
}
// <20><><EFBFBD><EFBFBD>3λΪƷ<CEAA><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = rtumsg->MsgData[12+5*i] + (rtumsg->MsgData[13+5*i] << 8)
+ (rtumsg->MsgData[13+5*i] << 16) + (rtumsg->MsgData[13+5*i] << 24);
SetPntMsg(pDataUnit->m_iStnNo-1, pipnt+i, (void *)&pntmsg, PI_PNT_TYPE, PNT_RAWVALUE);
}
}
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еĶ<D0B5>ֵ<EFBFBD><D6B5>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><E5A1A2><EFBFBD><EFBFBD><EBBFAA><EFBFBD><EFBFBD>))
void Buban103GDprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP):10
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ):0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN): 254(0xfe)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF):
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 240
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 241
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ŀ¼ : 243
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 244
// <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF>ֹ : 245
//rtumsg->MsgData[11];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>(RII)
//rtumsg->MsgData[12];
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ŀ
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>(GIN):<3A><>Ŀ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[14];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(KOD)
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : KOD_NOSPECIFIED(0)
// ʵ<><CAB5>ֵ : KOD_ACTUALVALUE(1)
// ȱʡֵ : KOD_DEFAULTVALUE(2)
// <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) : KOD_RANGE(3)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP1(4)
// <20><><EFBFBD><EFBFBD>(n,m) : KOD_PRECISION(5)
// <20><><EFBFBD><EFBFBD> : KOD_FACTOR(6)
// <20>α<EFBFBD> : KOD_REFERENCE(7)
// <20>б<EFBFBD> : KOD_ENUMERATION(8)
// <20><><EFBFBD><EFBFBD> : KOD_DIMENSION(9)
// <20><><EFBFBD><EFBFBD> : KOD_DESCRIPTION(10)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP2(11)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ : KOD_PASSWORD(12)
// ֻ<><D6BB> : KOD_READONLY(13)
// ֻд : KOD_WRITEONLY(14)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP3(15)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP4(16)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP5(17)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP6(18)
// <20><>Ӧ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> : KOD_CORFUNCANDINF(19)
// <20><>Ӧ<EFBFBD><D3A6><EFBFBD>¼<EFBFBD> : KOD_COREVENT(20)
// <20>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD> : KOD_ENUMTEXTARRAY(21)
// <20>б<EFBFBD><D0B1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> : KOD_ENUMVALUEARRAY(22)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ : KOD_RELATEDENTRIES(23)
//rtumsg->MsgData[16];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[17];
//DATAID_NO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_OS8ASCII : 8λASCII
//DATAID_BSTRING : 8λ2<CEBB><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_UIX : <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_INT : <20><><EFBFBD><EFBFBD>
//DATAID_UFLOAT : <20>޷<EFBFBD><DEB7>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>
//DATAID_FLOAT : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_754SHORT : R32.23 IEEE <20><>׼754<35><34>ʵ<EFBFBD><CAB5>
//DATAID_754REAL : R64.53 IEEE <20><>׼754ʵ<34><CAB5>
//DATAID_DOUBLE : ˫<><CBAB><EFBFBD><EFBFBD>Ϣ
//DATAID_SINGLE : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//DATAID_13BITS : <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ(13BITS)
//DATAID_SORTIDNO : ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
//DATAID_WITHTIME : <20><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//DATAID_WITHTIMESPACE : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//DATAID_STRUCT : <20><><EFBFBD>ݽṹ
// <20><><EFBFBD>ݳߴ<DDB3>
//rtumsg->MsgData[18]
// <20><><EFBFBD><EFBFBD>
//rtumsg->MsgData[19]
// <20><><EFBFBD><EFBFBD>ֵ(<28><><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// 2 ... n <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int commid;
int i, iGroupNo, iCfgGroupIdx;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFB4A6>
if(rtumsg->MsgData[12] == RII_PROV_ID)
{
if(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid >= 0)
{
if(psDevAddrParam->m_uchCommAddr ==\
pLinkParam->m_sBaoHuCmdParam.m_sRealAddrParam.m_uchCommAddr)
{
// <20>жϳ<D0B6>ʱʱ<CAB1><CAB1>Ϊ5<CEAA><35><EFBFBD><EFBFBD>
if(JudgeTimeOut(&pLinkParam->m_sBaoHuCmdParam.m_sBaoHuCmdStartTime, 5*60) == FALSE)
{
if(MSGTYPE_BAOHU_103CMD == pLinkParam->m_sBaoHuCmdParam.m_iBaoHuMsgType)
{
// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD>˿<EFBFBD>
rtumsg->MsgData[9] = (BYTE)pDevParam->m_sDevParam.m_iProvAddr;
rtumsg->PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid;
rtumsg->MsgType = MSGTYPE_BAOHU_103DATA;
PutBaohuDataToPort(rtumsg);
}
else if(MSGTYPE_BAOHU_SCADACMD == pLinkParam->m_sBaoHuCmdParam.m_iBaoHuMsgType)
{
//rtumsg->MsgData[9] = (BYTE)pDevParam->m_sDevParam.m_iProvAddr;
//rtumsg->PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid;
rtumsg->MsgType = MSGTYPE_BAOHU_SCADADATA;
// <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽת<CABD><D7AA>
Buban103ScadaProtocolExchange(commid, rtumsg);
}
// û<>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((rtumsg->MsgData[13] & 0x80) == 0)
{
pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid = -1;
pLinkParam->m_sBaoHuCmdParam.m_iBaoHuMsgType = 0;
}
return;
}
else
{
pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid = -1;
}
}
}
}
//<2F><> <20><>
iGroupNo = rtumsg->MsgData[14];
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo == iGroupNo)
{
iCfgGroupIdx = i;
break;
}
}
if(i >= pDevParam->m_sDevParam.m_iCfgGroupNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10 ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʱ<EFBFBD><CAB1>Group=%d<><64><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, iGroupNo);
DebugPrint(szbuf);
#endif
return ;
}
switch(pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType)
{
// <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
case AI_PNT_TYPE:
Buban103GDprocessWithAI(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case DI_PNT_TYPE:
Buban103GDprocessWithDI(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case PI_PNT_TYPE:
Buban103GDprocessWithPI(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
case PROTECT_AI_PNT_TYPE:
Buban103GDprocessWithPAI(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case PROTECT_DI_PNT_TYPE:
Buban103GDprocessWithPDI(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
case PROTECT_FIX_PNT_TYPE:
Buban103GDprocessWithPFIX(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
case PROTECT_EVENT_PNT_TYPE:
Buban103GDprocessWithPEVENT(rtumsg, psDevAddrParam, iCfgGroupIdx);
break;
default:
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10<31><30><EFBFBD><EFBFBD>ʱ, Group=%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(=%d)<29><>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,
pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iGroupNo,
pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType);
DebugPrint(szbuf);
#endif
break;
}
}
void Buban103YkAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP):64
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ):0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
//M_CAUSE_REMOTE : // Զ<><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN): 1
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF): 48 --- 75
//rtumsg->MsgData[11];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(DCC)
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>(RII)
//rtumsg->MsgData[13];
int commid;
int iYkNo;
BYTE buf[16];
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU64 δ<><CEB4><EFBFBD><EFBFBD>ң<EFBFBD>ص<EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
iYkNo = rtumsg->MsgData[11] - 48 + pDevParam->m_sDevParam.m_iYkStartPnt;
if(iYkNo >= 0)
{
// buf[0] --- <20>˿ں<CBBF>(=commid)
// buf[1]
// buf[2]
// buf[3]
// buf[4] --- <20>ص<EFBFBD><D8B5><EFBFBD>
// buf[5]
// buf[6]
// buf[7]
// buf[8] --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2A3>:1=ѡ<><D1A1>,2=ִ<><D6B4>,3=ȡ<><C8A1>,7=ֱ<><D6B1>;
// ң<><D2A3>:4=ѡ<><D1A1>,5=ִ<><D6B4>,6=ȡ<><C8A1>,8=<3D><>ͣ)
// buf[9] --- <20><><EFBFBD><EFBFBD>״̬(1=<3D>ֵ<EFBFBD><D6B5>ϣ<EFBFBD>2=<3D>ϵ<EFBFBD><CFB5><EFBFBD>)
// (<28><><EFBFBD><EFBFBD>λΪ1ʱ<31><CAB1>Ϊ<EFBFBD><CEAA>У<EFBFBD><D0A3><EFBFBD><EFBFBD>, 1=<3D>غ<EFBFBD>, 2=<3D>ط<EFBFBD>, 3=ʧ<><CAA7>)
// <20><>ת<EFBFBD><D7AA>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>У<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA><EFBFBD>Ŀص<C4BF><D8B5>ţ<EFBFBD>ʵ<EFBFBD>ʵĶ˿ں<CBBF>Ӧ<EFBFBD><D3A6><EFBFBD>Ǹ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ķ˿<C4B6>
// <20><>ת<EFBFBD><D7AA><EFBFBD>㲢û<E3B2A2><C3BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ص㣬<D8B5><E3A3AC><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>һ<EFBFBD>¡<EFBFBD>
buf[0] = (BYTE)(commid & 0xFF);
buf[1] = (BYTE)((commid & 0xFF00) << 8);
buf[2] = (BYTE)((commid & 0xFF0000) << 16);
buf[3] = (BYTE)((commid & 0xFF000000) << 24);
buf[4] = (BYTE)(iYkNo & 0xFF);
buf[5] = (BYTE)((iYkNo & 0xFF00) << 8);
buf[6] = (BYTE)((iYkNo & 0xFF0000) << 16);
buf[7] = (BYTE)((iYkNo & 0xFF000000) << 24);
switch((rtumsg->MsgData[12] & 0xc0) >> 6)
{
case 0://
buf[8] = STEP_YKYT_EXEC;
break;
case 2:
buf[8] = STEP_YKYT_SELECT;
break;
case 3:
buf[8] = STEP_YKYT_CANCEL;
break;
default:
buf[8] = STEP_YKYT_NOEXEC;
break;
}
switch(rtumsg->MsgData[12] & 0x03)
{
case 0:
case 3:
buf[8] = STEP_YKYT_NOEXEC;
break;
default:
buf[9] = (rtumsg->MsgData[12] & 0x03) | 0x80;
break;
}
if(ShmGetDispYkYtFlag())
{
#ifdef _DEBUG_MSG_
//sprintf(szbuf, "<22>˿<EFBFBD>%d <20><>·<EFBFBD><C2B7>ַ=%d װ<>õ<EFBFBD>ַ%d RII=0x%02x, ң<>ص<EFBFBD><D8B5><EFBFBD>=%d, op=0x%02x!!!\n",
// commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYkNo, rtumsg->MsgData[12]);
//DebugPrint(szbuf);
sprintf(szbuf, "TIP_(%04d): commid=%d linkaddr=%d devaddr=%d RII=0x%02x ykpnt=%d, op=0x%02x.\n",
_getpid(), commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYkNo, rtumsg->MsgData[12]);
DebugPrint(szbuf);
#endif
}
Buban103YkYtProcess(commid, buf, 10);
}
}
void Buban103YtAck(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP):65
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ):0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
//M_CAUSE_REMOTE : // Զ<><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN): 1
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF): 48 --- 75
//rtumsg->MsgData[11];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(RCC)
//rtumsg->MsgData[12];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>(RII)
//rtumsg->MsgData[13];
int commid;
int iYtNo;
BYTE buf[16];
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10 δ<><CEB4><EFBFBD><EFBFBD>ң<EFBFBD>ص<EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
iYtNo = rtumsg->MsgData[11] - 48 + pDevParam->m_sDevParam.m_iYtStartPnt;
if(iYtNo >= 0)
{
// buf[0] --- <20>˿ں<CBBF>(=commid)
// buf[1]
// buf[2]
// buf[3]
// buf[4] --- <20>ص<EFBFBD><D8B5><EFBFBD>
// buf[5]
// buf[6]
// buf[7]
// buf[8] --- <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2A3>:1=ѡ<><D1A1>,2=ִ<><D6B4>,3=ȡ<><C8A1>,7=ֱ<><D6B1>;
// ң<><D2A3>:4=ѡ<><D1A1>,5=ִ<><D6B4>,6=ȡ<><C8A1>,8=<3D><>ͣ)
// buf[9] --- <20><><EFBFBD><EFBFBD>״̬(1=<3D>ֵ<EFBFBD><D6B5>ϣ<EFBFBD>2=<3D>ϵ<EFBFBD><CFB5><EFBFBD>)
// (<28><><EFBFBD><EFBFBD>λΪ1ʱ<31><CAB1>Ϊ<EFBFBD><CEAA>У<EFBFBD><D0A3><EFBFBD><EFBFBD>, 1=<3D>غ<EFBFBD>, 2=<3D>ط<EFBFBD>, 3=ʧ<><CAA7>)
// <20><>ת<EFBFBD><D7AA>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>У<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA><EFBFBD>Ŀص<C4BF><D8B5>ţ<EFBFBD>ʵ<EFBFBD>ʵĶ˿ں<CBBF>Ӧ<EFBFBD><D3A6><EFBFBD>Ǹ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>Ķ˿<C4B6>
// <20><>ת<EFBFBD><D7AA><EFBFBD>㲢û<E3B2A2><C3BB>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ص㣬<D8B5><E3A3AC><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>һ<EFBFBD>¡<EFBFBD>
buf[0] = (BYTE)(commid & 0xFF);
buf[1] = (BYTE)((commid & 0xFF00) << 8);
buf[2] = (BYTE)((commid & 0xFF0000) << 16);
buf[3] = (BYTE)((commid & 0xFF000000) << 24);
buf[4] = (BYTE)(iYtNo & 0xFF);
buf[5] = (BYTE)((iYtNo & 0xFF00) << 8);
buf[6] = (BYTE)((iYtNo & 0xFF0000) << 16);
buf[7] = (BYTE)((iYtNo & 0xFF000000) << 24);
switch((rtumsg->MsgData[12] & 0xc0) >> 6)
{
case 0://
buf[8] = STEP_YT_EXEC;
break;
case 2:
buf[8] = STEP_YT_SELECT;
break;
case 3:
buf[8] = STEP_YT_CANCEL;
break;
default:
buf[8] = STEP_YKYT_NOEXEC;
break;
}
switch(rtumsg->MsgData[12] & 0x03)
{
case 0:
case 3:
buf[8] = STEP_YKYT_NOEXEC;
break;
default:
buf[9] = (rtumsg->MsgData[12] & 0x03) | 0x80;
break;
}
if(ShmGetDispYkYtFlag())
{
#ifdef _DEBUG_MSG_
//sprintf(szbuf, "<22>˿<EFBFBD>%d <20><>·<EFBFBD><C2B7>ַ=%d װ<>õ<EFBFBD>ַ%d RII=0x%02x, ң<><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=%d, op=0x%02x!!!\n",
// commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYtNo, rtumsg->MsgData[12]);
//DebugPrint(szbuf);
sprintf(szbuf, "TIP_(%04d): commid=%d linkaddr=%d devaddr=%d RII=0x%02x ytpnt=%d, op=0x%02x.\n",
_getpid(), commid, rtumsg->MsgData[5], rtumsg->MsgData[9], rtumsg->MsgData[13], iYtNo, rtumsg->MsgData[12]);
DebugPrint(szbuf);
#endif
}
Buban103YkYtProcess(commid, buf, 10);
}
}
void Buban103GDprocessWithAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid;
BYTE u8KOD, u8INF, u8NGD, u8DataType;
BYTE u8DataNum, u8DataLen;
int aipnt, aistart, stn, iOffset;
AI_DEF pntmsg;
VALUEDEF sValue;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
iOffset = 14;
if(iOffset >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(AI)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
stn = pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iStationNo;
if(stn <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(AI)_Group=%d <20><>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",\
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,\
pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iGroupNo);
DebugPrint(szbuf);
#endif
}
u8INF = rtumsg->MsgData[11];
u8NGD = rtumsg->MsgData[13] & 0x3f;
aistart = pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iStartPntNo;
for(i=0; i<u8NGD; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(AI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(AI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>Ŀ<EFBFBD><C4BF>
aipnt = aistart + rtumsg->MsgData[iOffset+1];
iOffset += 2;
u8KOD = rtumsg->MsgData[iOffset++];
if(KOD_ACTUALVALUE != u8KOD)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(AI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>KOD=%d<><64><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ڣ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 3;
continue;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<u8DataNum; j++)
{
// wen 2004.02.01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿΪ<C4BF><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(((aipnt-aistart) == 0) && (j == 0))
{
if(DATAID_BSTRING != u8DataType)
iOffset += u8DataLen;
else
iOffset += (u8DataLen + 7) / 8;
continue;
}
if(TRUE == GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen))
{
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = (WORD)sValue.m_unValue.m_uValue;
SetPntMsg(stn-1, aipnt+j, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_INT:
pntmsg.RawValue = (WORD)sValue.m_unValue.m_iValue;
SetPntMsg(stn-1, aipnt+j, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_FLOAT:
pntmsg.RawValue = (WORD)sValue.m_unValue.m_fValue;
SetPntMsg(stn-1, aipnt+j, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_CONTROL:
pntmsg.RawValue = (WORD)sValue.m_unValue.m_dwValue;
SetPntMsg(stn-1, aipnt+j, &pntmsg, AI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case DT_STRING:
case DT_BINARY:
default:
break;
}
}
iOffset += u8DataLen;
}
}
}
void Buban103GDprocessWithDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid;
BYTE u8KOD, u8INF, u8NGD, u8DataType;
BYTE u8DataNum, u8DataLen;
int dipnt, distart, stn, iOffset;
DI_DEF pntmsg;
VALUEDEF sValue;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
iOffset = 14;
if(iOffset >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(DI)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
stn = pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iStationNo;
if(stn <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(DI)_Group=%d <20><>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",\
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,\
pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iGroupNo);
DebugPrint(szbuf);
#endif
}
u8INF = rtumsg->MsgData[11];
u8NGD = rtumsg->MsgData[13] & 0x3f;
distart = pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iStartPntNo;
for(i=0; i<u8NGD; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(DI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(DI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>Ŀ<EFBFBD><C4BF>
dipnt = distart + rtumsg->MsgData[iOffset+1];
iOffset += 2;
u8KOD = rtumsg->MsgData[iOffset++];
if(KOD_ACTUALVALUE != u8KOD)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(DI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>KOD=%d<><64><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ڣ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 3;
continue;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<u8DataNum; j++)
{
// wen 2004.02.01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿΪ<C4BF><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(((dipnt-distart) == 0) && (j == 0))
{
if(DATAID_BSTRING != u8DataType)
iOffset += u8DataLen;
else
iOffset += (u8DataLen + 7) / 8;
continue;
}
if(TRUE == GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen))
{
switch(sValue.m_iDataType)
{
case DT_BINARY:
if(sValue.m_iDataNum > 1)
{
if((sValue.m_unValue.m_dwValue > 0)\
&& (sValue.m_unValue.m_dwValue < 3))
{
pntmsg.Status = (BYTE)(sValue.m_unValue.m_dwValue - 1);
}
else
{
pntmsg.Status = 0;
}
}
else
{
pntmsg.Status = (BYTE)(sValue.m_unValue.m_dwValue);
}
SetPntMsg(stn-1, dipnt+j, &pntmsg, DI_PNT_TYPE, PNT_STATUS);
break;
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(sValue.m_unValue.m_uValue != 0)
{
pntmsg.Status = 1;
}
else
{
pntmsg.Status = 0;
}
SetPntMsg(stn-1, dipnt+j, &pntmsg, DI_PNT_TYPE, PNT_STATUS);
break;
case DT_INT:
if(sValue.m_unValue.m_iValue != 0)
{
pntmsg.Status = 1;
}
else
{
pntmsg.Status = 0;
}
SetPntMsg(stn-1, dipnt+j, &pntmsg, DI_PNT_TYPE, PNT_STATUS);
break;
case DT_FLOAT:
case DT_CONTROL:
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case DT_STRING:
default:
break;
}
}
iOffset += u8DataLen;
}
}
}
void Buban103GDprocessWithPI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid;
BYTE u8KOD, u8INF, u8NGD, u8DataType;
BYTE u8DataNum, u8DataLen;
int pipnt, pistart, stn, iOffset;
PI_DEF pntmsg;
VALUEDEF sValue;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
iOffset = 14;
if(iOffset >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(PI)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
stn = pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iStationNo;
if(stn <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(PI)_Group=%d <20><>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",\
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,\
pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iGroupNo);
DebugPrint(szbuf);
#endif
}
u8INF = rtumsg->MsgData[11];
u8NGD = rtumsg->MsgData[13] & 0x3f;
pistart = pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx].m_iStartPntNo;
for(i=0; i<u8NGD; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(PI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(PI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ź<EFBFBD><C5BA><EFBFBD>Ŀ<EFBFBD><C4BF>
pipnt = pistart + rtumsg->MsgData[iOffset+1];
iOffset += 2;
u8KOD = rtumsg->MsgData[iOffset++];
if(KOD_ACTUALVALUE != u8KOD)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(PI)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>KOD=%d<><64><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD>ڣ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 3;
continue;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<u8DataNum; j++)
{
// wen 2004.02.01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿΪ<C4BF><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(((pipnt-pistart) == 0) && (j == 0))
{
if(DATAID_BSTRING != u8DataType)
iOffset += u8DataLen;
else
iOffset += (u8DataLen + 7) / 8;
continue;
}
if(TRUE == GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen))
{
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
pntmsg.RawValue = sValue.m_unValue.m_uValue;
SetPntMsg(stn-1, pipnt+j, &pntmsg, PI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_INT:
pntmsg.RawValue = sValue.m_unValue.m_iValue;
SetPntMsg(stn-1, pipnt+j, &pntmsg, PI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_FLOAT:
pntmsg.RawValue = (u_long)sValue.m_unValue.m_fValue;
SetPntMsg(stn-1, pipnt+j, &pntmsg, PI_PNT_TYPE, PNT_RAWVALUE);
break;
case DT_CONTROL:
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case DT_BINARY:
case DT_STRING:
default:
break;
}
}
iOffset += u8DataLen;
}
}
}
void Buban103GDprocessWithPAI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid, iItemNum, iStrLen;
BYTE u8KOD, u8INF, u8DataType;
BYTE u8DataNum, u8DataLen, u8ItemNo;
int iOffset;
double fValue;
BOOL bFirst, bNumChanged;
VALUEDEF sValue;
GROUPDEF *pGroupParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
bNumChanged = FALSE;
bFirst = TRUE;
iOffset = 14;
pGroupParam = &pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx];
if((iOffset+3) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
u8INF = rtumsg->MsgData[11];
u8KOD = rtumsg->MsgData[16];
pGroupParam->m_u8NGD = rtumsg->MsgData[13];
if(pGroupParam->m_iPntNum <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD>ݿռ<DDBF>Ϊ<EFBFBD><CEAA>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
// ֻ<><D6BB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ
if(KOD_ACTUALVALUE != u8KOD)
{
return;
}
iItemNum = pGroupParam->m_u8NGD & 0x3F;
for(i=0; i<iItemNum; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><> <20><>
// <20><>Ŀ<EFBFBD><C4BF>
u8ItemNo = rtumsg->MsgData[iOffset+1];
iOffset += 2;
if(TRUE == bFirst)
{
if(u8ItemNo == 0)
{
pGroupParam->m_u32CurPntNo = 1;
}
else if(u8ItemNo <= pGroupParam->m_iStartItemNo)
{
pGroupParam->m_u32CurPntNo = 1;
}
if((M_INF_WRITEITEMWITHACK == u8INF)
&& (pGroupParam->m_bInit == FALSE))
{
for(j=0; j<pGroupParam->m_iPntNum; j++)
{
if(pGroupParam->m_pu8GIN[j] == u8ItemNo)
{
break;
}
}
if(j >= pGroupParam->m_iPntNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>GIN=%d!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
pGroupParam->m_u32CurPntNo = j+1;
}
bFirst = FALSE;
}
if(u8KOD != rtumsg->MsgData[iOffset])
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KOD=%d<><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>KOD=%d<><64><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 4;
continue;
}
else
{
iOffset++;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<(int)u8DataNum; j++)
{
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
break;
}
if(pGroupParam->m_bInit == FALSE)
{
//pGroupParam->m_pu8DataLen[pGroupParam->m_u32CurPntNo-1] = u8DataLen;
//pGroupParam->m_pu8DataType[pGroupParam->m_u32CurPntNo-1] = u8DataType;
pGroupParam->m_pu8GIN[pGroupParam->m_u32CurPntNo-1] = u8ItemNo+j;
}
if(GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen) == FALSE)
{
iOffset += u8DataLen;
continue;
}
iOffset += u8DataLen;
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fValue = sValue.m_unValue.m_uValue;
break;
case DT_INT:
fValue = sValue.m_unValue.m_iValue;
break;
case DT_FLOAT:
fValue = sValue.m_unValue.m_fValue;
break;
case DT_CONTROL:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_STRING:
fValue = -1;
break;
case DT_BINARY:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
default:
fValue = -1;
break;
}
if(pGroupParam->m_bInit == FALSE)
{
if((u8ItemNo == 0) && (j == 0))
{
if((fValue > 0) && (KOD_ACTUALVALUE == u8KOD))
{
if((int)fValue > pGroupParam->m_iPntNum)
{
//pGroupParam->m_iPntNum = (int)sValue.m_unValue.m_uValue;
bNumChanged = TRUE;
}
else
{
pGroupParam->m_iPntNum = (int)fValue;
}
}
}
}
if(TRUE == bNumChanged)
{
//freeallfixmemory
}
if(DT_STRING != sValue.m_iDataType)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_fValue = (float)fValue;
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(KOD_DESCRIPTION == u8KOD)
{
iStrLen = sizeof(pGroupParam->m_psDataInfo->m_szName)-1;
if(iStrLen > sValue.m_iDataNum)
{
iStrLen = sValue.m_iDataNum;
}
memcpy(pGroupParam->m_psDataInfo->m_szName, sValue.m_szValue, iStrLen);
pGroupParam->m_psDataInfo->m_szName[iStrLen] = 0;
}
else if(KOD_DIMENSION == u8KOD)
{
iStrLen = sizeof(pGroupParam->m_psDataInfo->m_szUnit)-1;
if(iStrLen > sValue.m_iDataNum)
{
iStrLen = sValue.m_iDataNum;
}
memcpy(pGroupParam->m_psDataInfo->m_szUnit, sValue.m_szValue, iStrLen);
pGroupParam->m_psDataInfo->m_szUnit[iStrLen] = 0;
}
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_u32DataID = u8DataType;
}
pGroupParam->m_u32CurPntNo++;
}
}
if(pGroupParam->m_iPntNum > 0)
{
if((int)pGroupParam->m_u32CurPntNo >= pGroupParam->m_iPntNum)
{
pGroupParam->m_bInit = TRUE;
pGroupParam->m_u32CurPntNo = 1;
}
}
}
void Buban103GDprocessWithPDI(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
Buban103GDprocessWithPAI(rtumsg, psDevAddrParam, iGroupIdx);
}
void Buban103GDprocessWithPFIX(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid, iItemNum, iStrLen;
BYTE u8KOD, u8INF, u8DataType;
BYTE u8DataNum, u8DataLen, u8ItemNo;
int iOffset;
double fValue;
BOOL bFirst, bNumChanged;
VALUEDEF sValue;
GROUPDEF *pGroupParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
bNumChanged = FALSE;
bFirst = TRUE;
iOffset = 14;
pGroupParam = &pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx];
if((iOffset+3) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
u8INF = rtumsg->MsgData[11];
u8KOD = rtumsg->MsgData[16];
pGroupParam->m_u8NGD = rtumsg->MsgData[13];
if(pGroupParam->m_iPntNum > 0)
{
if(pGroupParam->m_pu8DataLen == NULL)
{
pGroupParam->m_pu8DataLen = (BYTE *)HEAP_MALLOC(pGroupParam->m_iPntNum*sizeof(BYTE));
Buban103DispMalloc(commid, pGroupParam->m_iPntNum*sizeof(BYTE));
}
if(pGroupParam->m_pu8DataType == NULL)
{
pGroupParam->m_pu8DataType = (BYTE *)HEAP_MALLOC(pGroupParam->m_iPntNum*sizeof(BYTE));
Buban103DispMalloc(commid, pGroupParam->m_iPntNum*sizeof(BYTE));
}
if(pGroupParam->m_pu8GIN == NULL)
{
pGroupParam->m_pu8GIN = (BYTE *)HEAP_MALLOC(pGroupParam->m_iPntNum*sizeof(BYTE));
Buban103DispMalloc(commid, pGroupParam->m_iPntNum*sizeof(BYTE));
}
}
else
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD>ݿռ<DDBF>Ϊ<EFBFBD><CEAA>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
// ֻ<><D6BB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ
if(KOD_ACTUALVALUE != u8KOD)
{
return;
}
iItemNum = pGroupParam->m_u8NGD & 0x3F;
for(i=0; i<iItemNum; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><> <20><>
// <20><>Ŀ<EFBFBD><C4BF>
u8ItemNo = rtumsg->MsgData[iOffset+1];
iOffset += 2;
if(TRUE == bFirst)
{
if(u8ItemNo == 0)
{
pGroupParam->m_u32CurPntNo = 1;
}
else if(u8ItemNo <= pGroupParam->m_iStartItemNo)
{
pGroupParam->m_u32CurPntNo = 1;
}
if((M_INF_WRITEITEMWITHACK == u8INF)
&& (pGroupParam->m_bInit == FALSE))
{
for(j=0; j<pGroupParam->m_iPntNum; j++)
{
if(pGroupParam->m_pu8GIN[j] == u8ItemNo)
{
break;
}
}
if(j >= pGroupParam->m_iPntNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>GIN=%d!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
pGroupParam->m_u32CurPntNo = j+1;
}
bFirst = FALSE;
}
if(u8KOD != rtumsg->MsgData[iOffset])
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KOD=%d<><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>KOD=%d<><64><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 4;
continue;
}
else
{
iOffset++;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<(int)u8DataNum; j++)
{
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
break;
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_pu8DataLen[pGroupParam->m_u32CurPntNo-1] = u8DataLen;
pGroupParam->m_pu8DataType[pGroupParam->m_u32CurPntNo-1] = u8DataType;
pGroupParam->m_pu8GIN[pGroupParam->m_u32CurPntNo-1] = u8ItemNo+j;
}
if(GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen) == FALSE)
{
iOffset += u8DataLen;
continue;
}
iOffset += u8DataLen;
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fValue = sValue.m_unValue.m_uValue;
break;
case DT_INT:
fValue = sValue.m_unValue.m_iValue;
break;
case DT_FLOAT:
fValue = sValue.m_unValue.m_fValue;
break;
case DT_CONTROL:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_STRING:
fValue = -1;
break;
case DT_BINARY:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
default:
fValue = -1;
break;
}
if(pGroupParam->m_bInit == FALSE)
{
if((u8ItemNo == 0) && (j == 0))
{
if((fValue > 0) && (KOD_ACTUALVALUE == u8KOD))
{
if((int)fValue > pGroupParam->m_iPntNum)
{
//pGroupParam->m_iPntNum = (int)sValue.m_unValue.m_uValue;
bNumChanged = TRUE;
}
else
{
pGroupParam->m_iPntNum = (int)fValue;
}
}
}
}
if(TRUE == bNumChanged)
{
//freeallfixmemory
}
if(DT_STRING != sValue.m_iDataType)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_fValue = (float)fValue;
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(KOD_DESCRIPTION == u8KOD)
{
iStrLen = sizeof(pGroupParam->m_psDataInfo->m_szName)-1;
if(iStrLen > sValue.m_iDataNum)
{
iStrLen = sValue.m_iDataNum;
}
memcpy(pGroupParam->m_psDataInfo->m_szName, sValue.m_szValue, iStrLen);
pGroupParam->m_psDataInfo->m_szName[iStrLen] = 0;
}
else if(KOD_DIMENSION == u8KOD)
{
iStrLen = sizeof(pGroupParam->m_psDataInfo->m_szUnit)-1;
if(iStrLen > sValue.m_iDataNum)
{
iStrLen = sValue.m_iDataNum;
}
memcpy(pGroupParam->m_psDataInfo->m_szUnit, sValue.m_szValue, iStrLen);
pGroupParam->m_psDataInfo->m_szUnit[iStrLen] = 0;
}
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_u32DataID = u8DataType;
}
pGroupParam->m_u32CurPntNo++;
}
}
if(pGroupParam->m_iPntNum > 0)
{
if((int)pGroupParam->m_u32CurPntNo >= pGroupParam->m_iPntNum)
{
pGroupParam->m_bInit = TRUE;
pGroupParam->m_u32CurPntNo = 1;
}
}
// wen 2004.01.06 д<><D0B4>ֵȷ<D6B5><C8B7>
if((M_CAUSE_WRITEACK == rtumsg->MsgData[8])
|| (M_CAUSE_WRITECONFIRM == rtumsg->MsgData[8]))
{
//ptrProHead->uFuncCode = hWRITEFIXACK;
//RtuProtocolBaoHuCommand(&msg);
}
else if(M_CAUSE_WRITENAK == rtumsg->MsgData[8])
{
//ptrProHead->uFuncCode = hWRITEFIXNAK;
//RtuProtocolBaoHuCommand(&msg);
}
}
void Buban103GDprocessWithPEVENT(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, k, commid, iItemNum;
BYTE u8KOD, u8INF, u8DataType;
BYTE u8DataNum, u8DataLen, u8ItemNo;
int iOffset;
BOOL bFirst, bNumChanged;
time_t iTime;
WORD wMillSeconds, wTime, wFault;
struct tm *ptrtm;
SOE_DEF sSoeData;
DBORIENTATION *pDataUnit;
GROUPDEF *pGroupParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
bNumChanged = FALSE;
bFirst = TRUE;
iOffset = 14;
pGroupParam = &pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx];
pDataUnit = &pDevParam->m_sDevParam.m_sDiDBOrientation;
if((iOffset+3) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
u8INF = rtumsg->MsgData[11];
u8KOD = rtumsg->MsgData[16];
pGroupParam->m_u8NGD = rtumsg->MsgData[13];
// ֻ<><D6BB><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>ֵ
if(KOD_ACTUALVALUE != u8KOD)
{
return;
}
iItemNum = pGroupParam->m_u8NGD & 0x3F;
for(i=0; i<iItemNum; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><> <20><>
// <20><>Ŀ<EFBFBD><C4BF>
u8ItemNo = rtumsg->MsgData[iOffset+1];
iOffset += 2;
if(u8KOD != rtumsg->MsgData[iOffset])
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KOD=%d<><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>KOD=%d<><64><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 4;
continue;
}
else
{
iOffset++;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<(int)u8DataNum; j++)
{
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
break;
}
for(k=0; k<pDataUnit->m_iPntNum; k++)
{
if((pDataUnit->m_psDataInfo[k].m_u8Asdu == 10)\
&& (pDataUnit->m_psDataInfo[k].m_u8Inf == (u8ItemNo+j))\
&& (pDataUnit->m_psDataInfo[k].m_u8Fun == pGroupParam->m_iGroupNo))
{
break;
}
}
if(k >= pDataUnit->m_iPntNum)
{
iOffset += u8DataLen;
continue;
}
switch(u8DataType)
{
case DATAID_WITHTIME: // <20><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
switch(rtumsg->MsgData[iOffset] & 0x03)
{
case 1:
sSoeData.bStatus = 0;
break;
case 2:
sSoeData.bStatus = 1;
break;
case 3:
case 0:
default:
sSoeData.bStatus = 0;
break;
}
time(&iTime);
ptrtm = localtime(&iTime);
if(ptrtm->tm_hour < (rtumsg->MsgData[iOffset+4] & 0x1f))
{
iTime -= 24 * 3600;
ptrtm = localtime(&iTime);
}
ptrtm->tm_hour = rtumsg->MsgData[iOffset+4] & 0x1f;
ptrtm->tm_min = rtumsg->MsgData[iOffset+3] & 0x3f;
wMillSeconds = rtumsg->MsgData[iOffset+1] + rtumsg->MsgData[iOffset+2]*256;
ptrtm->tm_sec = wMillSeconds / 1000;
sSoeData.iPntNo = pDataUnit->m_iStartPntNo+k;
sSoeData.u8Type = 1;// ASDU1
sSoeData.wFaultNo = 0;
sSoeData.u8ProvFun = pDataUnit->m_psDataInfo[k].m_u8ProvFun;
sSoeData.u8ProvInf = pDataUnit->m_psDataInfo[k].m_u8ProvInf;
sSoeData.wRelativeTime = 0;
sSoeData.SoeTime.Year = ptrtm->tm_year+1900;
sSoeData.SoeTime.Month = (BYTE)(ptrtm->tm_mon+1);
sSoeData.SoeTime.Day = (BYTE)(ptrtm->tm_mday);
sSoeData.SoeTime.Hour = (BYTE)(ptrtm->tm_hour);
sSoeData.SoeTime.Min = (BYTE)(ptrtm->tm_min);
sSoeData.SoeTime.Sec = (BYTE)(ptrtm->tm_sec);
sSoeData.SoeTime.mSec = wMillSeconds;
SetPntMsg(pDataUnit->m_iStnNo-1, pDataUnit->m_iStartPntNo+k, (void *)&sSoeData, DI_PNT_TYPE, PNT_SOE_TIME_EX);
break;
case DATAID_WITHTIMESPACE:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
switch(rtumsg->MsgData[iOffset] & 0x03)
{
case 1:
sSoeData.bStatus = 0;
break;
case 2:
sSoeData.bStatus = 1;
break;
case 3:
case 0:
default:
sSoeData.bStatus = 0;
break;
}
wTime = rtumsg->MsgData[iOffset+1] + rtumsg->MsgData[iOffset+2]*256;
wFault= rtumsg->MsgData[iOffset+3] + rtumsg->MsgData[iOffset+4]*256;
time(&iTime);
ptrtm = localtime(&iTime);
if(ptrtm->tm_hour < (rtumsg->MsgData[iOffset+8] & 0x1f))
{
iTime -= 24 * 3600;
ptrtm = localtime(&iTime);
}
ptrtm->tm_hour = rtumsg->MsgData[iOffset+8] & 0x1f;
ptrtm->tm_min = rtumsg->MsgData[iOffset+7] & 0x3f;
wMillSeconds = rtumsg->MsgData[iOffset+5] + rtumsg->MsgData[iOffset+6]*256;
ptrtm->tm_sec = wMillSeconds / 1000;
sSoeData.iPntNo = pDataUnit->m_iStartPntNo+k;
sSoeData.u8Type = 2;// ASDU2
sSoeData.wFaultNo = wFault;
sSoeData.u8ProvFun = pDataUnit->m_psDataInfo[k].m_u8ProvFun;
sSoeData.u8ProvInf = pDataUnit->m_psDataInfo[k].m_u8ProvInf;
sSoeData.wRelativeTime = wTime;
sSoeData.SoeTime.Year = ptrtm->tm_year+1900;
sSoeData.SoeTime.Month = (BYTE)(ptrtm->tm_mon+1);
sSoeData.SoeTime.Day = (BYTE)(ptrtm->tm_mday);
sSoeData.SoeTime.Hour = (BYTE)(ptrtm->tm_hour);
sSoeData.SoeTime.Min = (BYTE)(ptrtm->tm_min);
sSoeData.SoeTime.Sec = (BYTE)(ptrtm->tm_sec);
sSoeData.SoeTime.mSec = wMillSeconds;
SetPntMsg(pDataUnit->m_iStnNo-1, pDataUnit->m_iStartPntNo+k, (void *)&sSoeData, DI_PNT_TYPE, PNT_SOE_TIME_EX);
break;
default:
break;
}
iOffset += u8DataLen;
}
}
}
void Buban103GIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP):11
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ):0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
//M_CAUSE_READWITHVALIDDATA : <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
//M_CAUSE_READWITHINVALIDDATA : <09><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN): 254(0xfe)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF):
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ŀ¼ : 243
//rtumsg->MsgData[11];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>(RII)
//rtumsg->MsgData[12];
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>(GIN):<3A><>Ŀ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ص<EFBFBD><D8B5><EFBFBD>Ŀ(NDE)
//rtumsg->MsgData[15];
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(KOD)
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : KOD_NOSPECIFIED(0)
// ʵ<><CAB5>ֵ : KOD_ACTUALVALUE(1)
// ȱʡֵ : KOD_DEFAULTVALUE(2)
// <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) : KOD_RANGE(3)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP1(4)
// <20><><EFBFBD><EFBFBD>(n,m) : KOD_PRECISION(5)
// <20><><EFBFBD><EFBFBD> : KOD_FACTOR(6)
// <20>α<EFBFBD> : KOD_REFERENCE(7)
// <20>б<EFBFBD> : KOD_ENUMERATION(8)
// <20><><EFBFBD><EFBFBD> : KOD_DIMENSION(9)
// <20><><EFBFBD><EFBFBD> : KOD_DESCRIPTION(10)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP2(11)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ : KOD_PASSWORD(12)
// ֻ<><D6BB> : KOD_READONLY(13)
// ֻд : KOD_WRITEONLY(14)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP3(15)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP4(16)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP5(17)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP6(18)
// <20><>Ӧ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> : KOD_CORFUNCANDINF(19)
// <20><>Ӧ<EFBFBD><D3A6><EFBFBD>¼<EFBFBD> : KOD_COREVENT(20)
// <20>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD> : KOD_ENUMTEXTARRAY(21)
// <20>б<EFBFBD><D0B1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> : KOD_ENUMVALUEARRAY(22)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ : KOD_RELATEDENTRIES(23)
//rtumsg->MsgData[16];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[17];
//DATAID_NO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_OS8ASCII : 8λASCII
//DATAID_BSTRING : <20>ַ<EFBFBD><D6B7><EFBFBD>
//DATAID_UIX : <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_INT : <20><><EFBFBD><EFBFBD>
//DATAID_UFLOAT : <20>޷<EFBFBD><DEB7>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>
//DATAID_FLOAT : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_754SHORT : R32.23 IEEE <20><>׼754<35><34>ʵ<EFBFBD><CAB5>
//DATAID_754REAL : R64.53 IEEE <20><>׼754ʵ<34><CAB5>
//DATAID_DOUBLE : ˫<><CBAB><EFBFBD><EFBFBD>Ϣ
//DATAID_SINGLE : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//DATAID_13BITS : <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ(13BITS)
//DATAID_SORTIDNO : ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
//DATAID_WITHTIME : <20><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//DATAID_WITHTIMESPACE : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//DATAID_STRUCT : <20><><EFBFBD>ݽṹ
// <20><><EFBFBD>ݳߴ<DDB3>
//rtumsg->MsgData[18]
// <20><><EFBFBD><EFBFBD>
//rtumsg->MsgData[19]
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>(GID)
// <20><><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 2 ... n <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
void Buban103SynTime(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
//char szDbg[128];
int commid;
DAY_TIME stime;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
//DebugPrint("sync time.");
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
//DebugPrint("sync time hello1.");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD>򲻽<EFBFBD><F2B2BBBD>ж<EFBFBD>ʱ
if(M_CAUSE_CHECKTIME != rtumsg->MsgData[8])
{
return;
}
//DebugPrint("sync time hello2.");
// <20>϶<EFBFBD>ʱ
if(1 != pPortParam->m_psBaoHu->CheckTime)
{
return;
}
stime.mSec = rtumsg->MsgData[12] + rtumsg->MsgData[13]*256;
stime.Sec = stime.mSec / 1000;
stime.mSec = stime.mSec % 1000;
stime.Min = rtumsg->MsgData[14] & 0x3F;
stime.Hour = rtumsg->MsgData[15] & 0x1F;
stime.Day = rtumsg->MsgData[16] & 0x1F;
stime.Month = rtumsg->MsgData[17] & 0x0F;
stime.Year = rtumsg->MsgData[18] & 0x7F + 2000;
//sprintf(szDbg, "time:%04d-%02d-%02d_%02d:%02d:%02d.%03d\n",
// stime.Year, stime.Month, stime.Day, stime.Hour,
// stime.Min, stime.Sec, stime.mSec);
//DebugPrint(szDbg);
SetLocalTimeEx(&stime);
}
void Buban103EXPIprocess(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int i, commid;
int pipnt;
PI_DEF pntmsg;
DBORIENTATION *pDataUnit;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
pDataUnit = &pDevParam->m_sDevParam.m_sPiDBOrientation;
if(pDataUnit->m_iStnNo < 1)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d SIEMENS<4E><53>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>!!!",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr);
DebugPrint(szbuf);
#endif
return;
}
for(i=0; i<pDataUnit->m_iPntNum; i++)
{
if((pDataUnit->m_psDataInfo[i].m_u8Fun == rtumsg->MsgData[10])\
&& (pDataUnit->m_psDataInfo[i].m_u8Inf == rtumsg->MsgData[11]))
{
break;
}
}
if(i >= pDataUnit->m_iPntNum)
{
return;
}
pipnt = pDataUnit->m_iStartPntNo + i;
pntmsg.RawValue = rtumsg->MsgData[12] + rtumsg->MsgData[13]*256\
+rtumsg->MsgData[14]*256*256 + (rtumsg->MsgData[15]&0x0f)*256*256*256;
// <20><><EFBFBD><EFBFBD>λ
if(rtumsg->MsgData[15] & 0x10)
{
pntmsg.RawValue |= 0xF0000000;
}
SetPntMsg(pDataUnit->m_iStnNo-1, pipnt, (void *)&pntmsg, PI_PNT_TYPE, PNT_RAWVALUE);
}
// <20>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>ʼ
// <20>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>
void Buban103LRDprocess(RTUMSG *rtumsg)
{}
// <20>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Buban103RTDprocess(RTUMSG *rtumsg)
{}
// <20><><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Buban103RTTprocess(RTUMSG *rtumsg)
{}
// <20><><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
void Buban103TOTprocess(RTUMSG *rtumsg)
{}
// <20><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Buban103RTCprocess(RTUMSG *rtumsg)
{}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>ֵ
void Buban103TOVprocess(RTUMSG *rtumsg)
{}
// <20><><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void Buban103EOTprocess(RTUMSG *rtumsg)
{}
// <20>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// дͨ<D0B4><CDA8><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5>ļ<EFBFBD><C4BC><EFBFBD>
BOOL Buban103WriteACCDatatoFile(RTUMSG *rtumsg)
{
return FALSE;
}
// <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ
void Buban103GetFileHead(char *ptrDataHead, size_t *piNOF, size_t *piNOC, size_t *piNOE, size_t *piINT)
{}
// <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD>¼ʱ<C2BC><CAB1>
//void Buban103GetTime(char *ptrDataHead, SYSTEMTIME *ptrtm)
//{}
// <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ͷ
void Buban103ProcessAiHead(char *ptrDataHead, DISTURBANCEAIDATA *pAiData)
{}
// ת<><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
void Buban103tmpFileChangetodatFile(char *sztmpFileName)
{}
// <20><><EFBFBD><EFBFBD>CFG<46>ļ<EFBFBD>
//void Buban103MakeCFGFile(int iStationNo, pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp, char *szInfFile, SYSTEMTIME *tm)
//{}
// <20><><EFBFBD><EFBFBD>DAT<41>ļ<EFBFBD>
void Buban103MakeDATFile(pDISTURBANCEDIDATA ptrDi, pDISTURBANCEAIDATA ptrAi, FILE *fp)
{}
//=========================<3D><><EFBFBD><EFBFBD>ΪBuban103ת<33><D7AA><EFBFBD><EFBFBD><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD>=======================//
//***************************************************************************/
//* <20><><EFBFBD><EFBFBD>SOE<4F><45><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_32 selidx : <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//* PROV_SOE *pSoeMsg : ת<><D7AA>SOE<4F><45><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:BOOL retval : <20><><EFBFBD><EFBFBD>SOE<4F><45><EFBFBD><EFBFBD>ʱ<EFBFBD>Ƿ񸲸<C7B7>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>) */
//***************************************************************************/
BOOL ProvInsertSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg)
{
BOOL bReturn;
short front, rear;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(FALSE == GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam))
{
return FALSE;
}
front = pProvDevParam->m_sProvSoe.m_shFront;
rear = pProvDevParam->m_sProvSoe.m_shRear;
if(pProvDevParam->m_sProvSoe.m_shSoeNum >= PROV_SOE_MAX)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
memcpy((void *)&pProvDevParam->m_sProvSoe.m_sSoeData[rear],
(void *)pSoeMsg, sizeof(SOE_DEF));
pProvDevParam->m_sProvSoe.m_shFront = (front + 1) % PROV_SOE_MAX;
pProvDevParam->m_sProvSoe.m_shRear = (rear + 1) % PROV_SOE_MAX;
bReturn = FALSE;
}
else
{
memcpy((void *)&pProvDevParam->m_sProvSoe.m_sSoeData[rear],
(void *)pSoeMsg, sizeof(SOE_DEF));
pProvDevParam->m_sProvSoe.m_shRear = (rear + 1) % PROV_SOE_MAX;
pProvDevParam->m_sProvSoe.m_shSoeNum++;
bReturn = TRUE;
}
return bReturn;
}
//***************************************************************************/
//* <20>ӻ<EFBFBD><D3BB><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>SOE<4F><45><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_32 selidx : <20>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//* PROV_SOE *pSoeMsg : SOE<4F><45><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> */
//*<2A><><EFBFBD><EFBFBD>ֵ:BOOL retval : <20><>ȡSOE<4F><45><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>ɹ<EFBFBD> */
//***************************************************************************/
BOOL ProvGetAndDelSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, SOE_DEF *pSoeMsg)
{
short front, rear;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(FALSE == GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam))
{
return FALSE;
}
front = pProvDevParam->m_sProvSoe.m_shFront;
rear = pProvDevParam->m_sProvSoe.m_shRear;
if(pProvDevParam->m_sProvSoe.m_shSoeNum <= 0)
{
pProvDevParam->m_sProvSoe.m_shSoeNum = 0;
pProvDevParam->m_sProvSoe.m_shFront = 0;
pProvDevParam->m_sProvSoe.m_shRear = 0;
return FALSE;
}
memcpy((void *)pSoeMsg, (void *)&pProvDevParam->m_sProvSoe.m_sSoeData[front], sizeof(SOE_DEF));
pProvDevParam->m_sProvSoe.m_shFront = (front + 1) % PROV_SOE_MAX;
pProvDevParam->m_sProvSoe.m_shSoeNum--;
return TRUE;
}
BOOL ProvGetNoXSoe(u_32 commid, DEVADDRPARAM *psDevAddrParam, int iNo, SOE_DEF *pSoeMsg)
{
short rear;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(FALSE == GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam))
{
return FALSE;
}
if(pProvDevParam->m_sProvSoe.m_shSoeNum <= 0)
{
pProvDevParam->m_sProvSoe.m_shSoeNum = 0;
pProvDevParam->m_sProvSoe.m_shFront = 0;
pProvDevParam->m_sProvSoe.m_shRear = 0;
return FALSE;
}
iNo = iNo % PROV_SOE_MAX;
rear = pProvDevParam->m_sProvSoe.m_shRear - iNo - 1;
if(rear < 0)
{
rear += PROV_SOE_MAX;
}
memcpy((void *)pSoeMsg, (void *)&pProvDevParam->m_sProvSoe.m_sSoeData[rear], sizeof(SOE_DEF));
return TRUE;
}
//***************************************************************************/
//* ת<><D7AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ں<EFBFBD><DABA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
BOOL ProvHaveClassOne(u_32 commid, DEVADDRPARAM *psDevAddrParam, BOOL bCheckDiChange)
{
int i;
BOOL bACD, bQueryAllDev;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
bACD = FALSE;
if(ProvHaveSoeData(commid) > 0)
{
bACD = TRUE;
}
else
{
if(pLinkParam->m_uchLinkAddr != 0xFF)
{
bQueryAllDev = TRUE;
}
else
{
bQueryAllDev = FALSE;
}
// <20>Ƿ<EFBFBD>ת<EFBFBD><D7AA>ң<EFBFBD>ű<EFBFBD>λ,һ<><EFBFBD><E3BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(TRUE == bCheckDiChange)
{
if(pPortParam->m_psBaoHu != NULL)
{
if(pPortParam->m_psBaoHu->DiChange == TRUE)
{
bACD = TRUE;
}
}
}
if(bACD == FALSE)
{
for(i=0; i<pLinkParam->m_iDevNum; i++)
{
if(bQueryAllDev == TRUE)
{
psDevAddrParam->m_iDevIdx = i;
}
else
{
if(i >= 1)
{
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>Ӧ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
//if(psDevAddrParam->m_iDevIdx >= pLinkParam->m_iDevNum)
//{
// break;
//}
}
pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if((pProvDevParam->m_bProvQuery == TRUE) || (pProvDevParam->m_sProvGroupParam.m_bFinished == FALSE))
if(pProvDevParam->m_bProvQuery == TRUE)
{
bACD = TRUE;
break;
}
if(SingleListHaveData(&pProvDevParam->m_sBaoHuData) > 0)
{
bACD = TRUE;
break;
}
}
}
}
return bACD;
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD>·ָ<C2B7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_char addr : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ */
//* u_char cmdidx : ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//* BOOL bACD : һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ڱ<EFBFBD>ʶ */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvMakeLinkCommand(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD)
{
CLPDU_FIX bClpdu_fix;
memset(&bClpdu_fix, 0, sizeof(CLPDU_FIX));
switch(cmdidx)
{
case M_CON_NA_3: // ȷ<><C8B7>֡
bClpdu_fix.nSTART = 0x10;
if(bACD)
bClpdu_fix.nCONTROL = cmdidx | 0x20;
else
bClpdu_fix.nCONTROL = cmdidx;
bClpdu_fix.nADDR = addr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
case M_BY_NA_3: // æ֡<C3A6><D6A1>ȷ<EFBFBD><C8B7>֡<EFBFBD><D6A1>
case M_NV_NA_3: // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ش<EFBFBD>
case M_LKR_NA_3_1: // <20><>·״̬<D7B4><CCAC>Ӧ֡--<2D><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case M_LKR_NA_3_2: // <20><>·״̬<D7B4><CCAC>Ӧ֡--<2D><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
case M_LKR_NA_3_3: // <20><>·״̬<D7B4><CCAC>Ӧ֡--<2D><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δʵ<CEB4><CAB5>
bClpdu_fix.nSTART = 0x10;
if(bACD)
bClpdu_fix.nCONTROL = cmdidx | 0x20;
else
bClpdu_fix.nCONTROL = cmdidx;
bClpdu_fix.nADDR = addr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)&bClpdu_fix, 5);
break;
default:
break;
}
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD>·ָ<C2B7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_char addr : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ */
//* u_char cmdidx : ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//* BOOL bACD : һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ڱ<EFBFBD>ʶ */
//* BOOL bClearRecvBuf : <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvMakeLinkCommandEx(u_32 commid, u_char addr, u_char cmdidx, BOOL bACD, BOOL bClearRecvBuf, u_32 cmdtype)
{
CLPDU_FIX bClpdu_fix;
memset(&bClpdu_fix, 0, sizeof(CLPDU_FIX));
switch(cmdidx)
{
case M_CON_NA_3: // ȷ<><C8B7>֡
case M_BY_NA_3: // æ֡<C3A6><D6A1>ȷ<EFBFBD><C8B7>֡<EFBFBD><D6A1>
case M_NV_NA_3: // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>ش<EFBFBD>
case M_LKR_NA_3_1: // <20><>·״̬<D7B4><CCAC>Ӧ֡--<2D><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case M_LKR_NA_3_2: // <20><>·״̬<D7B4><CCAC>Ӧ֡--<2D><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
case M_LKR_NA_3_3: // <20><>·״̬<D7B4><CCAC>Ӧ֡--<2D><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>δʵ<CEB4><CAB5>
bClpdu_fix.nSTART = 0x10;
if(bACD)
bClpdu_fix.nCONTROL = cmdidx | 0x20;
else
bClpdu_fix.nCONTROL = cmdidx;
bClpdu_fix.nADDR = addr;
bClpdu_fix.nCS = CalBuban103Lpc(&bClpdu_fix.nCONTROL, 2);
bClpdu_fix.nEnd = 0x16;
PutPollCmdToBuf(commid, cmdtype, 0, (char*)&bClpdu_fix, 5);
break;
default:
break;
}
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD>·ָ<C2B7><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_char addr : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ */
//* u_char cmdidx : ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//* BOOL bACD : һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4>ڱ<EFBFBD>ʶ */
//* BYTE bCause : <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> */
//* u_32 cmdtype : ָ<><EFBFBD><EEBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvMakeVarCommand(u_32 commid, u_char linkaddr, u_char addr, \
u_char cmdidx, BOOL bACD, BYTE bCause, u_32 cmdtype)
{
u_char tmp[MAX_POLL_CMD_BUF_LEN];
CLPDU_VARR *ptrClpdu_varr;
i_32 len;
memset(tmp, 0, sizeof(tmp));
ptrClpdu_varr = (CLPDU_VARR *)tmp;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
ptrClpdu_varr->nADDR = linkaddr;
if(bACD)
ptrClpdu_varr->nCONTROL = 0x28;
else
ptrClpdu_varr->nCONTROL = 0x08;
len = 0;
switch(cmdidx)
{
case M_TM_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
break;
case M_TMR_TA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ĵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
break;
case M_MEI_NA_3://<2F><><EFBFBD><EFBFBD>ֵI
break;
case M_TME_TA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>Ĵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ
break;
case M_IRC_NA_3://<2F><>ʶ
len = sizeof(CLPDU_VARR);
tmp[len++] = cmdidx;
tmp[len++] = 0x81;
tmp[len++] = bCause;
tmp[len++] = addr;
tmp[len++] = FUNC_GLOBAL;
tmp[len++] = bCause-1;
tmp[len++] = 2;
memcpy(tmp+len, "SZ-SCADA", 8);
len += 8;
tmp[len++] = 0x01;
len += 3;
break;
case M_SYN_TA_3://ʱ<><CAB1>ͬ<EFBFBD><CDAC>
break;
case M_TGI_NA_3://<2F>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>ֹ
len = sizeof(CLPDU_VARR);
tmp[len++] = cmdidx;
tmp[len++] = 0x81;
tmp[len++] = bCause;
tmp[len++] = addr;
tmp[len++] = FUNC_GLOBAL;
tmp[len++] = 0;
tmp[len++] = 0;
break;
case M_MEII_NA_3://<2F><><EFBFBD><EFBFBD>ֵII
break;
case M_GD_NTA_3://ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_GI_NTA_3://ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ
break;
case M_LRD_TA_3://<2F><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
break;
case M_RTD_TA_3://<2F>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_RTC_NA_3://<2F><><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_RTT_NA_3://<2F><><EFBFBD><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_TOT_TA_3://<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>־<EFBFBD><D6BE>״̬<D7B4><CCAC>λ
break;
case M_TOV_NA_3://<2F><><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD>ֵ
break;
case M_EOT_TA_3://<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
break;
case M_MEIII_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
break;
case M_MEIV_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
break;
case M_MEV_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
break;
case M_MEVI_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ<EFBFBD><D6B5>
break;
case M_MEVII_NA_3://<2F><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
break;
case M_IT_NA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
break;
case M_IT_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
break;
case M_ST_NA_3://<2F><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ
break;
case M_ST_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>IJ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>Ϣ
break;
case M_SP_NA_3://<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>Ϣ
break;
case M_SP_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>״̬<D7B4><CCAC>Ϣ
break;
case M_DP_NA_3://˫<><CBAB>״̬<D7B4><CCAC>Ϣ
break;
case M_DP_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>״̬<D7B4><CCAC>Ϣ
break;
case M_SS_NA_3://<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
break;
case M_SS_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
break;
case M_DS_NA_3://˫<><CBAB>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
break;
case M_DS_TA_3://<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>˫<EFBFBD><CBAB>״̬<D7B4><CCAC>״̬<D7B4><CCAC>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
break;
case M_WL_TA_3://ˮλ
break;
case M_DC_NA_3://<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_RC_NA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case M_SE_NA_3://<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>
break;
case M_CC_NA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
if(len > 0)
{
ptrClpdu_varr->nLEN1 = len - 4;
ptrClpdu_varr->nLEN2 = len - 4;
tmp[len++] = CalBuban103Lpc(tmp+4, ptrClpdu_varr->nLEN1);
tmp[len++] = 0x16;
PutPollCmdToBuf(commid, cmdtype, 0, (char*)tmp, len);
}
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 portidx : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvRtuProtocolDataProcess(int commid, RTUMSG *rtumsg)
{
if(rtumsg->MsgLen == 0)
return;
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>ֽڵĵڶ<C4B5><DAB6><EFBFBD><EFBFBD>ֽ<EFBFBD>)
if(rtumsg->MsgData[rtumsg->MsgLen+1] > 0)
return;
// wen <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>ʹ<EFBFBD><CAB9>ָ<EFBFBD><EFBFBD><EEBBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>ָ<EFBFBD><D6B8>
//if(CheckPollCmdBuf(commid)) return;
switch(rtumsg->MsgData[0])
{
case 0x10://shortframe process
Provshortprocess(commid, rtumsg);
break;
case 0x68:
Provlongprocess(commid, rtumsg);
break;
default:
break;
}
}
//***************************************************************************/
//* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvSendCmdToPort(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
u_32 destport;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(FALSE == GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam))
{
return;
}
if((C_GD_NA_3 != rtumsg->MsgData[6])\
&& (C_GRC_NA_3 != rtumsg->MsgData[6])\
&& (C_GC_NA_3 != rtumsg->MsgData[6]))
{
return;
}
// ??? <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>͵<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD>·<EFBFBD><C2B7>˿<EFBFBD>
if(pProvDevParam->m_iRealCommid > 0)
{
destport = pProvDevParam->m_iRealCommid-1;
}
else
{
return;
}
rtumsg->MsgData[12] = RII_PROV_ID;
rtumsg->MsgType = MSGTYPE_BAOHU_103CMD;
SendProtectCmdToDev(destport, rtumsg);
}
//***************************************************************************/
//* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void Provshortprocess(u_32 commid, RTUMSG *rtumsg)
{
BOOL bFind;
DEVADDRPARAM DevAddrParam;
BUBAN103LINKDEF *pLinkParam=NULL;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
if((rtumsg->MsgData[1] & 0xc0) == 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d(CtrlByte=%02x)<29><><EFBFBD>յ<EFBFBD><D5B5>Ķ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD>!!!\n",
commid, rtumsg->MsgData[2], rtumsg->MsgData[1]);
DebugPrint(szbuf);
#endif
return;
}
if(!IsExtInfoPtr(commid))
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
DevAddrParam.m_uchLinkAddr = rtumsg->MsgData[2];
if(FindProtectDev(pPortParam, &DevAddrParam, TRUE) == FALSE)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d <20><>ƥ<EFBFBD><C6A5>!!!\n",
commid, rtumsg->MsgData[2]);
DebugPrint(szbuf);
#endif
bFind = FALSE;
}
else
{
bFind = TRUE;
}
//printf("commid=%d, iLinkIdx=%d, iDevIdx=%d\n", commid, DevAddrParam.m_iLinkIdx, DevAddrParam.m_iDevIdx);
if(TRUE == bFind)
{
pLinkParam = &pPortParam->m_psLink[DevAddrParam.m_iLinkIdx];
}
/*
if((rtumsg->MsgData[1] & 0x0f) == C_RCU_NA_3)
{
//InitBuban103LinkCmdBuf(pLinkParam);
//SetDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx, TRUE);
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, TRUE);
//pLinkParam->m_psProvDev[DevAddrParam.m_iDevIdx].m_iProvAsdu5Cause = M_CAUSE_RESET_CU;
}
return;
*/
switch(rtumsg->MsgData[1] & 0x0f)
{
case C_RCU_NA_3://<2F><>λͨ<CEBB>ŵ<EFBFBD>Ԫ
if(TRUE == bFind)
{
InitBuban103LinkCmdBuf(pLinkParam);
SetDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx, TRUE);
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, TRUE);
pLinkParam->m_psProvDev[DevAddrParam.m_iDevIdx].m_iProvAsdu5Cause = M_CAUSE_RESET_CU;
}
else
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, FALSE);
}
break;
case C_RFB_NA_3://<2F><>λ֡<CEBB><D6A1><EFBFBD><EFBFBD>λ
if(TRUE == bFind)
{
pLinkParam->m_pu8CtlByte[DevAddrParam.m_iDevIdx] = 0;
pLinkParam->m_psProvDev[DevAddrParam.m_iDevIdx].m_iProvAsdu5Cause = M_CAUSE_RESET_FCB;
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, TRUE);
}
else
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_CON_NA_3, FALSE);
}
break;
case C_RLK_NA_3://<2F><>·״̬<D7B4><CCAC><EFBFBD><EFBFBD>
if(TRUE == bFind)
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_LKR_NA_3_1, FALSE);
}
else
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[2], M_LKR_NA_3_2, FALSE);
}
break;
case C_PL1_NA_3://<2F>ٻ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FALSE == bFind)
{
break;
}
if(TRUE == IsDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>װ<EFBFBD><D7B0>
//if(pLinkParam->m_uchLinkAddr != 0xFF)
//{
// DevAddrParam.m_iDevIdx = -1;
//}
ProvPL1process(commid, &DevAddrParam);
}
break;
case C_PL2_NA_3://<2F>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(FALSE == bFind)
{
break;
}
if(TRUE == IsDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx))
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>װ<EFBFBD><D7B0>
//if(pLinkParam->m_uchLinkAddr != 0xFF)
//{
// DevAddrParam.m_iDevIdx = -1;
//}
ProvPL2process(commid, &DevAddrParam);
}
break;
default:
break;
}
}
//***************************************************************************/
//* ת<><D7AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_char addr : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvPL1process(u_32 commid, DEVADDRPARAM *psDevAddrParam)
{
BOOL bACD;
WORD wValue;
DAY_TIME sCurTime;
SOE_DEF sSoeData;
DI_DEF pntmsg;
PROV_DI_PNT *diprovptr;
DBINFO sDbInfo;
i_32 i, len;
char szDebugbuf[256];
RTUMSG rtumsg, msg;
DBORIENTATION *pDBUnit;
CLPDU_VARR *ptrClpdu_varr;
DEVADDRPARAM sDevAddrParam;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
memset(szDebugbuf, 0, sizeof(szDebugbuf));
memset((void *)&rtumsg, 0, sizeof(rtumsg));
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx];
if(pProvDevParam->m_iProvAsdu5Cause > 0)
{
ProvMakeVarCommand(commid, pLinkParam->m_uchLinkAddr,\
(BYTE)pProvDevParam->m_iProvAddr, M_IRC_NA_3, FALSE,\
(BYTE)pProvDevParam->m_iProvAsdu5Cause, FAST_POLL_CMD);
pProvDevParam->m_iProvAsdu5Cause = 0;
return;
}
// <20><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>¼<EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·)
while(ProvHaveSoeData(commid) > 0)
{
ProvAndDelGetSoeData(commid, &sSoeData);
//if(ProvAndDelGetSoeData(commid, &sSoeData) > 0)
//{
// bACD = TRUE;
//}
//else
//{
// bACD = ProvHaveClassOne(commid, psDevAddrParam, FALSE);
//}
if(FALSE == FindProtectDevFromPntNo(pPortParam, &sDevAddrParam, &sDbInfo, sSoeData.iPntNo, DI_PNT_TYPE))
{
continue;
}
ptrClpdu_varr = (CLPDU_VARR *)rtumsg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
// <20><><EFBFBD>¸<EFBFBD>ֵ<EFBFBD><D6B5>·<EFBFBD><C2B7>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ַ
ptrClpdu_varr->nADDR = sDevAddrParam.m_uchLinkAddr;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*
if(pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx].m_bProvQuery)
{
ptrClpdu_varr->nCONTROL |= 0x20;
}
else
{
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(TRUE == bACD)
{
ptrClpdu_varr->nCONTROL |= 0x20;
}
else
{
ptrClpdu_varr->nCONTROL &= 0xDF;
}
}*/
// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//if(TRUE == bACD)
//{
// ptrClpdu_varr->nCONTROL |= 0x20;
//}
//else
//{
// ptrClpdu_varr->nCONTROL &= 0xDF;
//}
ptrClpdu_varr->nCONTROL &= 0xDF;
wValue = sSoeData.SoeTime.mSec + sSoeData.SoeTime.Sec * 1000;
if(sSoeData.u8Type == 1)
{
rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x01;
len = 14;
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = sSoeData.SoeTime.Min & 0x3F;
rtumsg.MsgData[sizeof(CLPDU_VARR)+10] = sSoeData.SoeTime.Hour & 0x1F;
// SIN
rtumsg.MsgData[sizeof(CLPDU_VARR)+11] = 0;
}
else
{
rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x02;
len = 18;
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(sSoeData.wRelativeTime);
rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(sSoeData.wRelativeTime);
rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = LOBYTE(sSoeData.wFaultNo);
rtumsg.MsgData[sizeof(CLPDU_VARR)+10] = HIBYTE(sSoeData.wFaultNo);
rtumsg.MsgData[sizeof(CLPDU_VARR)+11] = LOBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+12] = HIBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+13] = sSoeData.SoeTime.Min & 0x3F;
rtumsg.MsgData[sizeof(CLPDU_VARR)+14] = sSoeData.SoeTime.Hour & 0x1F;
// SIN
rtumsg.MsgData[sizeof(CLPDU_VARR)+15] = 0;
}
ptrClpdu_varr->nLEN1 = (BYTE)len;
ptrClpdu_varr->nLEN2 = (BYTE)len;
rtumsg.MsgData[sizeof(CLPDU_VARR)+1] = 0x81;
//COT
rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_AUTOSEND;
// <20><><EFBFBD>¸<EFBFBD>ֵ ASDU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
rtumsg.MsgData[sizeof(CLPDU_VARR)+3] = sDevAddrParam.m_uchCommAddr;
// FUN
//rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = sSoeData.u8ProvFun;
// INF
//rtumsg.MsgData[sizeof(CLPDU_VARR)+5] = sSoeData.u8ProvInf;
// FUN
rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = sDbInfo.m_u8ProvFun;
// INF
rtumsg.MsgData[sizeof(CLPDU_VARR)+5] = sDbInfo.m_u8ProvInf;
// DPI
rtumsg.MsgData[sizeof(CLPDU_VARR)+6] = sSoeData.bStatus+1;
len = ptrClpdu_varr->nLEN1 + 4;
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
//rtumsg.MsgData[len++] = CalBuban103Lpc(rtumsg.MsgData+4, ptrClpdu_varr->nLEN1);
rtumsg.MsgData[len++] = 0;
rtumsg.MsgData[len++] = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)rtumsg.MsgData, len);
return;
}
bACD = ProvHaveClassOne(commid, psDevAddrParam, pPortParam->m_bSendChangeDi);
if(bACD == TRUE)
{
// ??? <20><>Ҫ<EFBFBD>޸<EFBFBD>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD>Ϣ
//bACD = FALSE;
pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx];
if(SingleListHaveData(&pProvDevParam->m_sBaoHuData) > 0)
{
msg.MsgLen = SingleListGetAndDelData(&pProvDevParam->m_sBaoHuData, msg.MsgData, sizeof(msg.MsgData));
if(pLinkParam->m_uchLinkAddr != 0xFF)
{
msg.MsgData[5] = pLinkParam->m_uchLinkAddr;
}
else
{
msg.MsgData[5] = (BYTE)pProvDevParam->m_iProvAddr;
}
msg.MsgData[9] = (BYTE)pProvDevParam->m_iProvAddr;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)msg.MsgData, msg.MsgLen);
return;
}
// <20>Ƿ<EFBFBD>ת<EFBFBD><D7AA>ң<EFBFBD>ű<EFBFBD>λ,һ<><EFBFBD><E3BDAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pPortParam->m_bSendChangeDi == TRUE)
{
if(pPortParam->m_psBaoHu->DiChange == TRUE)
{
if(TRUE == ProvSendChangedDi(commid, psDevAddrParam))
{
return;
}
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(pProvDevParam->m_bProvQuery == TRUE)
{
pDBUnit = &pProvDevParam->m_sYxInfo;
for(i=pProvDevParam->m_iQueryPntNo; i<pDBUnit->m_iPntNum; i++)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>
if(pDBUnit->m_psDataInfo[i].m_u8LoopData)
{
break;
}
}
if(i >= pDBUnit->m_iPntNum)
{
pProvDevParam->m_bProvQuery = FALSE;
pProvDevParam->m_iProvQueryStepWithASDU = 0;
ProvMakeVarCommand(commid, pLinkParam->m_uchLinkAddr,\
(BYTE)pProvDevParam->m_iProvAddr, M_TGI_NA_3, FALSE,\
(BYTE)M_CAUSE_STOPQUERY, FAST_POLL_CMD);
pProvDevParam->m_iQueryPntNo = 0;
}
else
{
pProvDevParam->m_iQueryPntNo++;
diprovptr = (PROV_DI_PNT *)pPortParam->m_psBaoHu->DiPtr;
ptrClpdu_varr = (CLPDU_VARR *)rtumsg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
// <20><><EFBFBD>¸<EFBFBD>ֵ<EFBFBD><D6B5>·<EFBFBD><C2B7>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ַ
ptrClpdu_varr->nADDR = pLinkParam->m_uchLinkAddr;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptrClpdu_varr->nCONTROL |= 0x20;
rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x01;
len = 14;
rtumsg.MsgData[sizeof(CLPDU_VARR)+1] = 0x81;
//COT
//rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_AUTOSEND;
rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_QUERY;
// <20><><EFBFBD>¸<EFBFBD>ֵ ASDU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
rtumsg.MsgData[sizeof(CLPDU_VARR)+3] = (BYTE)pProvDevParam->m_iProvAddr;
// FUN
rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = pDBUnit->m_psDataInfo[i].m_u8ProvFun;
// INF
rtumsg.MsgData[sizeof(CLPDU_VARR)+5] = pDBUnit->m_psDataInfo[i].m_u8ProvInf;
GetPntMsg(diprovptr[pDBUnit->m_iStartPntNo+i].PortNo,\
diprovptr[pDBUnit->m_iStartPntNo+i].PntNo,\
(void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
// DPI
rtumsg.MsgData[sizeof(CLPDU_VARR)+6] = pntmsg.Status+1;
GetLocalTimeEx(&sCurTime);
wValue = sCurTime.Sec*1000+sCurTime.mSec;
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = sCurTime.Min & 0x3F;
rtumsg.MsgData[sizeof(CLPDU_VARR)+10] = sCurTime.Hour & 0x1F;
// SIN
rtumsg.MsgData[sizeof(CLPDU_VARR)+11] = 0;
ptrClpdu_varr->nLEN1 = (BYTE)len;
ptrClpdu_varr->nLEN2 = (BYTE)len;
len = ptrClpdu_varr->nLEN1 + 4;
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
//rtumsg.MsgData[len++] = CalBuban103Lpc(rtumsg.MsgData+4, ptrClpdu_varr->nLEN1);
rtumsg.MsgData[len++] = 0;
rtumsg.MsgData[len++] = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)rtumsg.MsgData, len);
}
return;
}
}
/*
if(pLinkParam->m_uchLinkAddr != 0xFF)
{
ProvMakeLinkCommand(commid, pLinkParam->m_uchLinkAddr, M_NV_NA_3, FALSE);
}
else
{
ProvMakeLinkCommand(commid, psDevAddrParam->m_uchLinkAddr, M_NV_NA_3, FALSE);
}
*/
//ProvMakeLinkCommand(commid, psDevAddrParam->m_uchLinkAddr, M_NV_NA_3, bACD);
ProvMakeLinkCommand(commid, psDevAddrParam->m_uchLinkAddr, M_NV_NA_3, FALSE);
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* u_char addr : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvPL2process(u_32 commid, DEVADDRPARAM *psDevAddrParam)
{
//BOOL bACD;
//PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
//pProvDevParam = &pLinkParam->m_psProvDev[pLinkParam->m_iDevIdx];
//psDevAddrParam->m_iDevIdx = pLinkParam->m_iDevIdx;
/*
// <20><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>¼<EFBFBD>
if(ProvHaveSoeData(commid) > 0)
{
bACD = TRUE;
}
else if(pProvDevParam->m_bProvQuery == TRUE)
{
bACD = TRUE;
}
else
{
bACD = FALSE;
}
*/
//bACD = ProvHaveClassOne(commid, psDevAddrParam, FALSE);
//ProvMakeLinkCommand(commid, pLinkParam->m_uchLinkAddr, M_NV_NA_3, bACD);
ProvMakeLinkCommand(commid, pLinkParam->m_uchLinkAddr, M_NV_NA_3, FALSE);
}
//***************************************************************************/
//* <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void Provlongprocess(u_32 commid, RTUMSG *rtumsg)
{
BOOL bFind;
DEVADDRPARAM DevAddrParam;
BUBAN103LINKDEF *pLinkParam=NULL;
BUBAN103PORTPARAM *pPortParam=NULL;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
if((rtumsg->MsgData[4] & 0xc0) == 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d(CtrlByte=%02x)<29><><EFBFBD>յ<EFBFBD><D5B5>Ķ<EFBFBD>֡<EFBFBD><D6A1><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><EFBFBD><EFBFBD>!!!\n",
commid, rtumsg->MsgData[5], rtumsg->MsgData[4]);
DebugPrint(szbuf);
#endif
return;
}
if(!IsExtInfoPtr(commid))
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
DevAddrParam.m_uchLinkAddr = rtumsg->MsgData[5];
DevAddrParam.m_uchCommAddr = rtumsg->MsgData[9];
if(0xFF != DevAddrParam.m_uchLinkAddr)
{
if(FindProtectDev(pPortParam, &DevAddrParam, FALSE) == FALSE)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><>ƥ<EFBFBD><C6A5>!!!\n",
commid, rtumsg->MsgData[5], rtumsg->MsgData[9]);
DebugPrint(szbuf);
#endif
bFind = FALSE;
}
else
{
bFind = TRUE;
}
if(TRUE == bFind)
{
pLinkParam = &pPortParam->m_psLink[DevAddrParam.m_iLinkIdx];
}
if(IsDevLinkOk(pLinkParam, DevAddrParam.m_iDevIdx) == FALSE)
{
return;
}
}
else
{
if(C_SYN_TA_3 != rtumsg->MsgData[6])
{
return;
}
}
// <20><>֡<EFBFBD><D6A1><EFBFBD>ݵĹ<DDB5><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(rtumsg->MsgData[6])
{
case C_SYN_TA_3: //ʱ<><CAB1>ͬ<EFBFBD><CDAC>
ProvSYNprocess(commid, rtumsg);
break;
case C_TGI_NA_3: //<2F>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD>
ProvTGIprocess(commid, rtumsg, &DevAddrParam);
break;
case C_GD_NA_3: //ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvGDprocess(commid, rtumsg, &DevAddrParam);
//ProvSendCmdToPort(commid, rtumsg, &DevAddrParam);
break;
case C_GRC_NA_3: //һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvGRCprocess(commid, rtumsg, &DevAddrParam);
break;
case C_GC_NA_3: //ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvGCprocess(commid, rtumsg, &DevAddrParam);
//ProvSendCmdToPort(commid, rtumsg, &DevAddrParam);
break;
case C_ODT_NA_3: //<2F>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvODTprocess(commid, rtumsg, &DevAddrParam);
break;
case C_ADT_NA_3: //<2F>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD>
ProvADTprocess(commid, rtumsg, &DevAddrParam);
break;
case C_DC_NA_3: //<2F><><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvDCprocess(commid, rtumsg, &DevAddrParam);
break;
case C_RC_NA_3: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvRCprocess(commid, rtumsg, &DevAddrParam);
break;
case C_SE_NA_3: //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>
ProvSEprocess(commid, rtumsg, &DevAddrParam);
break;
case C_CC_NA_3: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ProvCCprocess(commid, rtumsg, &DevAddrParam);
break;
case C_CI_NA_3: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD>
ProvCIprocess(commid, rtumsg, &DevAddrParam);
break;
default:
break;
}
switch(rtumsg->MsgData[4] & 0x0f)
{
case C_SD1_NA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><><C8B7>֡<EFBFBD><D6A1>
// <20><><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
/*
if(C_TGI_NA_3 == rtumsg->MsgData[6])
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, TRUE);
}
else if(C_SYN_TA_3 == rtumsg->MsgData[6])
{
if(rtumsg->MsgData[5] != 0xFF)
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, TRUE);
}
}
else
{
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, FALSE);
}
*/
//if(TRUE == ProvHaveClassOne(commid, &DevAddrParam, FALSE))
//{
// ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, TRUE);
//}
//else
//{
// ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, FALSE);
//}
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, FALSE);
break;
case C_SD2_NA_3://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>/<2F>޻ش<DEBB>֡<EFBFBD><D6A1>
break;
}
}
//***************************************************************************/
//* ת<><D7AA>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvSYNprocess(u_32 commid, RTUMSG *rtumsg)
{
i_32 len;
DAY_TIME sTime;
//char szDbg[128];
u_char tmp[MAX_POLL_CMD_BUF_LEN];
CLPDU_VARR bClpdu_varr;
BUBAN103PORTPARAM *pPortParam;
if(!IsExtInfoPtr(commid))
{
return;
}
pPortParam = (pBUBAN103PORTPARAM)SioParam[commid].ExtInfo;
sTime.mSec = rtumsg->MsgData[12] + (rtumsg->MsgData[13] << 8);
sTime.Sec = sTime.mSec / 1000;
sTime.mSec = sTime.mSec % 1000;
sTime.Min = rtumsg->MsgData[14] & 0x3F;
sTime.Hour = rtumsg->MsgData[15] & 0x1F;
sTime.Day = rtumsg->MsgData[16] & 0x1F;
sTime.Month= rtumsg->MsgData[17] & 0x0F;
sTime.Year = (rtumsg->MsgData[18] & 0x7F) + 2000;
//sprintf(szDbg, "time:%04d-%02d-%02d_%02d:%02d:%02d.%03d\n",
// sTime.Year, sTime.Month, sTime.Day, sTime.Hour,
// sTime.Min, sTime.Sec, sTime.mSec);
//DebugPrint(szDbg);
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ͬ<EFBFBD><CDAC>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ʱ
if((pPortParam->m_psBaoHu->CheckTime == 1)
&& (rtumsg->MsgData[8] == M_CAUSE_CHECKTIME))
{
SetLocalTimeEx(&sTime);
}
// <20><EFBFBD><E3B2A5>ַ
if(rtumsg->MsgData[5] == 0xff)
{
return;
}
memset(&bClpdu_varr, 0 , sizeof(CLPDU_VARR));
memset(tmp , 0 , sizeof(tmp));
bClpdu_varr.nSTART1 = 0x68;
bClpdu_varr.nSTART2 = 0x68;
bClpdu_varr.nLEN1 = 15;
bClpdu_varr.nLEN2 = 15;
bClpdu_varr.nCONTROL = M_DATA_NA_3;
bClpdu_varr.nADDR = rtumsg->MsgData[5];
len = sizeof(bClpdu_varr);
memcpy(tmp, (char*)&bClpdu_varr, len);
tmp[len++] = M_SYN_TA_3;
tmp[len++] = 0x81;
tmp[len++] = M_CAUSE_CHECKTIME;
tmp[len++] = rtumsg->MsgData[9];
tmp[len++] = FUNC_GLOBAL;
tmp[len++] = 0;
memcpy(tmp+len, rtumsg->MsgData+12, 7);
//if(!SetLocalTime(&t))
// tmp[len+2] |= 0x80;
len += 7;
//tmp[len++] = CalBuban103Lpc(tmp+4, bClpdu_varr.nLEN1);
tmp[len++] = 0;
tmp[len++] = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)tmp, len);
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvTGIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(GetPortParamPtr(commid, &pPortParam) == FALSE)
{
return;
}
pPortParam->m_iLinkIdx = psDevAddrParam->m_iLinkIdx;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
pLinkParam->m_iDevIdx = psDevAddrParam->m_iDevIdx;
pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx];
// <20>ܲ<EFBFBD>ѯ<EFBFBD><D1AF>ʼ
pProvDevParam->m_bProvQuery = TRUE;
pProvDevParam->m_iProvQueryStepWithASDU = M_MEVII_NA_3;
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ѯ
//ProvMakeLinkCommand(commid, rtumsg->MsgData[9], M_CON_NA_3, TRUE);
//ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_CON_NA_3, TRUE);
}
//***************************************************************************/
//* ת<><D7AA>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvGDprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
//PROVDEVDEF *pProvDevParam;
//BUBAN103LINKDEF *pLinkParam;
//BUBAN103PORTPARAM *pPortParam;
if(rtumsg->MsgData[12] != RII_PROV_ID)
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
return;
}
//if(FALSE == GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam))
//{
// return;
//}
}
//***************************************************************************/
//* ת<><D7AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvGRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
if(rtumsg->MsgData[12] != RII_PROV_ID)
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
return;
}
}
//***************************************************************************/
//* ת<><D7AA>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvGCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
int iGrpNum;
GROUPDEF *pBaoHuDB;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
/*wen 2005.06.01 ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D6B1>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ȥ
if(rtumsg->MsgData[12] != RII_PROV_ID)
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
return;
}
*/
if(FALSE == GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam))
{
return;
}
if(rtumsg->MsgData[12] != RII_PROV_ID)
{
pProvDevParam->m_sProvGroupParam.m_u8Group = rtumsg->MsgData[9];
pProvDevParam->m_sProvGroupParam.m_u8ItemAttr = rtumsg->MsgData[11];
pProvDevParam->m_sProvGroupParam.m_u8ItemNo = rtumsg->MsgData[10];
pProvDevParam->m_sProvGroupParam.m_u8RII = rtumsg->MsgData[12];
pBaoHuDB = NULL;
iGrpNum = GetBaohuDB(pProvDevParam->m_iRealCommid-1, pProvDevParam->m_iProvAddr, &pBaoHuDB);
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
if(rtumsg->MsgData[8] == C_CAUSE_READWITHVALIDDATA)
{
// INF
switch(rtumsg->MsgData[11])
{
case C_INF_READGROUPTITLE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((pBaoHuDB != NULL) && (iGrpNum > 0))
{
ProvMakeTitleOfGroups(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum);
}
else
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
}
break;
case C_INF_READGROUPALLITEMS: // <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((pBaoHuDB != NULL) && (iGrpNum > 0))
{
ProvMakeAttrOfAllItemInGroup(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum);
}
else
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
}
break;
case C_INF_READDIROFSINGLEITEM: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ŀ¼
if((pBaoHuDB != NULL) && (iGrpNum > 0))
{
ProvMakeDirOfItem(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum);
}
else
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
}
break;
case C_INF_READATTROFISNGLEITEM:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((pBaoHuDB != NULL) && (iGrpNum > 0))
{
ProvMakeAttrOfItem(commid, rtumsg, pProvDevParam, pBaoHuDB, iGrpNum);
}
else
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
}
break;
case C_INF_QUERYGENERAL: // <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_NV_NA_3, FALSE);
break;
default:
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
break;
}
}
else
{
ProvSendCmdToPort(commid, rtumsg, psDevAddrParam);
}
return;
}
// wen test <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӱ<EFBFBD><D3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(RII_PROV_ID == rtumsg->MsgData[12])
{
// test
RTUMSG msg;
BYTE buffix[] = {0x68, 0x46, 0x46, 0x68, 0x08, 0x01,
0x0A, 0x81, 0x2A, 0x01, 0xFE, 0xF1,
0xFF, 0x06, 0x50, 0x01, 0x01, 0x07,
0x04, 0x01, 0x00, 0x00, 0x00, 0x00,
0x50, 0x02, 0x01, 0x07, 0x04, 0x01,
0x00, 0x00, 0x00, 0x00, 0x50, 0x03,
0x01, 0x07, 0x04, 0x01, 0x22, 0xDB,
0x79, 0x3F, 0x50, 0x04, 0x01, 0x07,
0x04, 0x01, 0x3D, 0x6A, 0x53, 0x43,
0x50, 0x05, 0x01, 0x07, 0x04, 0x01,
0x00, 0x00, 0x00, 0x00, 0x50, 0x06,
0x01, 0x07, 0x04, 0x01, 0x00, 0x00,
0x00, 0x00, 0x08, 0x16 };
BYTE bufsoe[] = {0x68, 0x0E, 0x0E, 0x68, 0x28, 0x01,
0x01, 0x81, 0x01, 0x01, 0x64, 0x42,
0x01, 0x70, 0x94, 0x05, 0x0D, 0x00,
0x6A, 0x16};
msg.MsgLen = sizeof(buffix);
memcpy(msg.MsgData, buffix, msg.MsgLen);
msg.PortIdx = (BYTE)commid;
if(pLinkParam->m_uchLinkAddr != 0xFF)
{
msg.MsgData[5] = pLinkParam->m_uchLinkAddr;
}
else
{
msg.MsgData[5] = (BYTE)pProvDevParam->m_iProvAddr;
}
msg.MsgData[9] = (BYTE)pProvDevParam->m_iProvAddr;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
return;
}
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvODTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͽɴ<CFBF><C9B4><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvADTprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvDCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvRCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvSEprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvCCprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
}
//***************************************************************************/
//* ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD><EFBFBD><EEB4A6> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
void ProvCIprocess(u_32 commid, RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam)
{
i_32 iPiNum;
i_32 i;
u_char tmp[MAX_POLL_CMD_BUF_LEN];
CLPDU_VARR *ptrClpdu_varr;
i_32 len;
PI_DEF pntmsg;
PROV_PI_PNT *piprovptr;
PROVDEVDEF *pProvDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
if(GetSpecialProvPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pProvDevParam) == FALSE)
{
return;
}
memset(tmp, 0, sizeof(tmp));
ptrClpdu_varr = (CLPDU_VARR *)tmp;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
ptrClpdu_varr->nADDR = rtumsg->MsgData[5];
//if(ProvHaveClassOne(commid, psDevAddrParam, TRUE))
//{
// ptrClpdu_varr->nCONTROL = 0x28;
//}
//else
//{
// ptrClpdu_varr->nCONTROL = 0x08;
//}
ptrClpdu_varr->nCONTROL = 0x08;
len = sizeof(CLPDU_VARR);
tmp[len++] = M_IT_NA_3;
tmp[len++] = 0x00;
tmp[len++] = M_CAUSE_CYCLE;
tmp[len++] = rtumsg->MsgData[9];
tmp[len++] = 1;
iPiNum = pProvDevParam->m_sYmInfo.m_iPntNum;
if(iPiNum > INF_PI_NUM)
{
iPiNum = INF_PI_NUM;
}
piprovptr = (PROV_PI_PNT *)pPortParam->m_psBaoHu->PiPtr;
if((pProvDevParam->m_sYmInfo.m_iStartPntNo+iPiNum)\
> pPortParam->m_psBaoHu->PiNum)
{
if((pProvDevParam->m_bProvQuery == TRUE)\
|| (CheckPollCmdBufEmpty(commid) == 0))
{
//ProvMakeLinkCommand(commid, pLinkParam->m_uchLinkAddr, M_NV_NA_3, TRUE);
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_NV_NA_3, TRUE);
}
else
{
//ProvMakeLinkCommand(commid, pLinkParam->m_uchLinkAddr, M_NV_NA_3, FALSE);
ProvMakeLinkCommand(commid, rtumsg->MsgData[5], M_NV_NA_3, FALSE);
}
return;
}
tmp[len++] = INF_PI_START;
for(i=0; i<iPiNum; i++)
{
GetPntMsg(piprovptr[pProvDevParam->m_sYmInfo.m_iStartPntNo+i].PortNo,\
piprovptr[pProvDevParam->m_sYmInfo.m_iStartPntNo+i].PntNo,\
&pntmsg, PI_PNT_TYPE, PNT_RAWVALUE);
tmp[len++] = (BYTE)(pntmsg.RawValue & 0xFF);
tmp[len++] = (BYTE)((pntmsg.RawValue & 0xFF00) >> 8);
tmp[len++] = (BYTE)((pntmsg.RawValue & 0xFF0000) >> 16);
tmp[len++] = (BYTE)((pntmsg.RawValue & 0xFF000000) >> 24);
// IV/CA/CY/˳<><CBB3><EFBFBD><EFBFBD>
len++;
}
tmp[sizeof(CLPDU_VARR)+1] = (BYTE)(iPiNum);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RII
tmp[len++] = rtumsg->MsgData[13];
ptrClpdu_varr->nLEN1 = len - 4;
ptrClpdu_varr->nLEN2 = len - 4;
//tmp[len++] = CalBuban103Lpc(tmp+4, ptrClpdu_varr->nLEN1);
tmp[len++] = 0;
tmp[len++] = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)tmp, len);
}
//***************************************************************************/
//* ת<><D7AA>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
BOOL ProvMakeTitleOfGroups(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum)
{
i_32 i, len;
RTUMSG msg;
CLPDU_VARR *ptrClpdu_varr;
memset((void *)&msg, 0, sizeof(RTUMSG));
ptrClpdu_varr = (CLPDU_VARR *)msg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
ptrClpdu_varr->nADDR = rtumsg->MsgData[5];
len = sizeof(CLPDU_VARR);
msg.MsgData[len++] = M_GD_NTA_3;
msg.MsgData[len++] = 0x81;
msg.MsgData[len++] = M_CAUSE_READWITHVALIDDATA;
msg.MsgData[len++] = rtumsg->MsgData[9];
msg.MsgData[len++] = FUNC_GENERALSORT;
msg.MsgData[len++] = M_INF_READGROUPTITLE;
msg.MsgData[len++] = rtumsg->MsgData[12];//RII
msg.MsgData[len++] = (BYTE)iNum;
for(i=0; i<iNum; i++)
{
//msg.MsgData[len++] = i;// <20><><EFBFBD><EFBFBD>
msg.MsgData[len++] = (BYTE)pBaoHuDB[i].m_iGroupNo;// <20><><EFBFBD><EFBFBD>
msg.MsgData[len++] = 0;// <20><>Ŀ<EFBFBD><C4BF>
msg.MsgData[len++] = KOD_DESCRIPTION;//<2F><><EFBFBD><EFBFBD>
msg.MsgData[len++] = DATAID_OS8ASCII;//datatype
switch(pBaoHuDB[i].m_iDataType)
{
case AI_PNT_TYPE: // ģ<><C4A3><EFBFBD><EFBFBD>
msg.MsgData[len++] = strlen("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strlen("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
len += strlen("ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case DI_PNT_TYPE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[len++] = strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
len += strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case PI_PNT_TYPE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[len++] = strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
len += strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case PROTECT_AI_PNT_TYPE: // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
msg.MsgData[len++] = strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
len += strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case PROTECT_DI_PNT_TYPE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[len++] = strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
len += strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case PROTECT_FIX_PNT_TYPE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
msg.MsgData[len++] = strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ", strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ"));
len += strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ");
break;
case PROTECT_EVENT_PNT_TYPE:// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
msg.MsgData[len++] = strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>", strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>"));
len += strlen("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>");
break;
default:
msg.MsgData[len++] = strlen("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
msg.MsgData[len++] = 1;
memcpy((void *)&msg.MsgData[len], (void *)"δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", strlen("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
len += strlen("δ֪<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
}
ptrClpdu_varr->nLEN1 = len - 4;
ptrClpdu_varr->nLEN2 = len - 4;
//msg.MsgData[len++] = CalBuban103Lpc(msg.MsgData+4, ptrClpdu_varr->nLEN1);
msg.MsgData[len++] = 0;
msg.MsgData[len++] = 0x16;
msg.MsgLen = (WORD)len;
msg.PortIdx = (BYTE)commid;
return SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
//***************************************************************************/
//* ת<><D7AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//* BOOL bContinue : δ<><CEB4><EFBFBD>͵ı<CDB5><C4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//*<2A><> ע:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ת<EFBFBD><D7AA>һ֡ */
//***************************************************************************/
BOOL ProvMakeAttrOfAllItemInGroup(u_32 commid, RTUMSG *rtumsg,\
PROVDEVDEF *pProvDevParam,\
GROUPDEF *pBaoHuDB, int iNum)
{
BOOL bRetVal;
i_32 i, ifixlen;
RTUMSG msg;
u_char *ptrPntNum;
CLPDU_VARR *ptrClpdu_varr;
i_32 iGroupNo, iPntNum, iNameLen;
float *pfValue, fValue;
memset((void *)&msg, 0, sizeof(RTUMSG));
ptrClpdu_varr = (CLPDU_VARR *)msg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
ptrClpdu_varr->nADDR = rtumsg->MsgData[5];
ifixlen = sizeof(CLPDU_VARR);
// <20><><EFBFBD><EFBFBD>
for(iGroupNo=0; iGroupNo<iNum; iGroupNo++)
{
if(pBaoHuDB[iGroupNo].m_iGroupNo == (int)rtumsg->MsgData[14])
{
break;
}
}
if(iGroupNo >= iNum)
{
return FALSE;
}
msg.MsgData[ifixlen++] = M_GD_NTA_3;
msg.MsgData[ifixlen++] = 0x81;
msg.MsgData[ifixlen++] = M_CAUSE_READWITHVALIDDATA;
msg.MsgData[ifixlen++] = rtumsg->MsgData[9];
msg.MsgData[ifixlen++] = FUNC_GENERALSORT;
msg.MsgData[ifixlen++] = M_INF_READGROUPALLITEMS;
msg.MsgData[ifixlen++] = rtumsg->MsgData[12];//RII
iPntNum = pBaoHuDB[iGroupNo].m_iPntNum;
ptrPntNum = &msg.MsgData[ifixlen++];
msg.MsgLen = (WORD)ifixlen;
bRetVal = TRUE;
switch(rtumsg->MsgData[16])
{
case KOD_ACTUALVALUE: // ʵ<><CAB5>ֵ
for(i=0; i<iPntNum; i++)
{
// <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD> = 10
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// <20><> <20><>
msg.MsgData[msg.MsgLen++] = i+1; // <20><>Ŀ<EFBFBD><C4BF>
msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // ʵ<><CAB5>ֵ
msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[msg.MsgLen++] = sizeof(float);
msg.MsgData[msg.MsgLen++] = 1;
pfValue = (float*)(&msg.MsgData[msg.MsgLen]);
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[i].m_fValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
msg.MsgLen += sizeof(float);
*ptrPntNum++;
if(msg.MsgLen >= 240)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
msg.MsgLen = (WORD)ifixlen;
*ptrPntNum = 0;
}
}
if(msg.MsgLen > ifixlen)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
break;
case KOD_RANGE: // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
for(i=0; i<iPntNum; i++)
{
// <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD> = 17
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// <20><> <20><>
msg.MsgData[msg.MsgLen++] = i+1; // <20><>Ŀ<EFBFBD><C4BF>
msg.MsgData[msg.MsgLen++] = KOD_RANGE; // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[msg.MsgLen++] = sizeof(float);
msg.MsgData[msg.MsgLen++] = 3;
pfValue = (float*)(&msg.MsgData[msg.MsgLen]);
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[i].m_fMaxValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
pfValue++;
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[i].m_fMinValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
pfValue++;
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[i].m_fStepValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
msg.MsgLen += 3*sizeof(float);
*ptrPntNum++;
if(msg.MsgLen >= 240)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
msg.MsgLen = (WORD)ifixlen;
*ptrPntNum = 0;
}
}
if(msg.MsgLen > ifixlen)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
break;
case KOD_DIMENSION: // <20><> <20><>
for(i=0; i<iPntNum; i++)
{
// <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD> = 6 + <20><><EFBFBD>ٳ<EFBFBD><D9B3><EFBFBD>
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// <20><> <20><>
msg.MsgData[msg.MsgLen++] = i+1; // <20><>Ŀ<EFBFBD><C4BF>
msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // <20><> <20><>
msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII;
iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[i].m_szUnit);
msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen;
msg.MsgData[msg.MsgLen++] = 1;
memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[i].m_szUnit, iNameLen);
msg.MsgLen += (WORD)iNameLen;
*ptrPntNum++;
if(msg.MsgLen >= 240)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
msg.MsgLen = (WORD)ifixlen;
*ptrPntNum = 0;
}
}
if(msg.MsgLen > ifixlen)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
break;
case KOD_DESCRIPTION: // <20><> <20><>
for(i=0; i<iPntNum; i++)
{
// <20><EFBFBD><E1B9B9><EFBFBD><EFBFBD> = 6 + <20><><EFBFBD>ٳ<EFBFBD><D9B3><EFBFBD>
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];// <20><> <20><>
msg.MsgData[msg.MsgLen++] = i+1; // <20><>Ŀ<EFBFBD><C4BF>
msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // <20><> <20><>
msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII;
iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[i].m_szName);
msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen;
msg.MsgData[msg.MsgLen++] = 1;
memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[i].m_szName, iNameLen);
msg.MsgLen += (WORD)iNameLen;
*ptrPntNum++;
if(msg.MsgLen >= 220)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
msg.MsgLen = (WORD)ifixlen;
*ptrPntNum = 0;
}
}
if(msg.MsgLen > ifixlen)
{
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;// lpc
msg.MsgData[msg.MsgLen++] = 0x16;
SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
break;
default:
bRetVal = FALSE;
break;
}
return bRetVal;
}
//***************************************************************************/
//* ת<><D7AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ŀ¼ */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
BOOL ProvMakeDirOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum)
{
RTUMSG msg;
CLPDU_VARR *ptrClpdu_varr;
i_32 iNameLen, iGroupNo, iItemNo;
float *pfValue, fValue;
// <20><>Ŀ<EFBFBD><C4BF>
iItemNo = rtumsg->MsgData[15];
for(iGroupNo=0; iGroupNo<iNum; iGroupNo++)
{
if(pBaoHuDB[iGroupNo].m_iGroupNo == (int)rtumsg->MsgData[14])
{
break;
}
}
if(iGroupNo >= iNum)
{
return FALSE;
}
if(iItemNo <= 0)
{
return FALSE;
}
if(iItemNo >= pBaoHuDB[iGroupNo].m_iPntNum)
{
return FALSE;
}
memset((void *)&msg, 0, sizeof(RTUMSG));
ptrClpdu_varr = (CLPDU_VARR *)msg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
ptrClpdu_varr->nADDR = rtumsg->MsgData[5];
msg.MsgLen = sizeof(CLPDU_VARR);
msg.MsgData[msg.MsgLen++] = M_GD_NTA_3;
msg.MsgData[msg.MsgLen++] = 0x81;
msg.MsgData[msg.MsgLen++] = M_CAUSE_READWITHVALIDDATA;
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[9];
msg.MsgData[msg.MsgLen++] = FUNC_GENERALSORT;
msg.MsgData[msg.MsgLen++] = M_INF_READDIROFSINGLEITEM;
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[12];//RII
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[15];
msg.MsgData[msg.MsgLen++] = 4;
msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // ʵ<><CAB5>ֵ
msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[msg.MsgLen++] = sizeof(float);
msg.MsgData[msg.MsgLen++] = 1;
pfValue = (float*)(&msg.MsgData[msg.MsgLen]);
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
msg.MsgLen += sizeof(float);
msg.MsgData[msg.MsgLen++] = KOD_RANGE; // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[msg.MsgLen++] = sizeof(float);
msg.MsgData[msg.MsgLen++] = 3;
pfValue = (float*)(&msg.MsgData[msg.MsgLen]);
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fMaxValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
pfValue++;
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fMinValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
pfValue++;
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fStepValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
msg.MsgLen += 3*sizeof(float);
msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // <20><> <20><>
msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII;
iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit);
msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen;
msg.MsgData[msg.MsgLen++] = 1;
memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit, iNameLen);
msg.MsgLen += (WORD)iNameLen;
msg.MsgData[msg.MsgLen++] = KOD_DESCRIPTION; // <20><> <20><>
msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII;
iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szName);
msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen;
msg.MsgData[msg.MsgLen++] = 1;
memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szName, iNameLen);
msg.MsgLen += (WORD)iNameLen;
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;//lpc
msg.MsgData[msg.MsgLen++] = 0x16;
return SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
//***************************************************************************/
//* ת<><D7AA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>: u_32 commid : <20><>վ<EFBFBD>˿ں<CBBF> */
//* RTUMSG *rtumsg : <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ */
//* i_32 iBuIdx : <20><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>(<28><><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD> */
//*<2A><><EFBFBD><EFBFBD>ֵ:<3A><> */
//***************************************************************************/
BOOL ProvMakeAttrOfItem(u_32 commid, RTUMSG *rtumsg, PROVDEVDEF *pProvDevParam, GROUPDEF *pBaoHuDB, int iNum)
{
RTUMSG msg;
CLPDU_VARR *ptrClpdu_varr;
i_32 iNameLen, iGroupNo, iItemNo;
float *pfValue, fValue;
// <20><>Ŀ<EFBFBD><C4BF>
iItemNo = rtumsg->MsgData[15];
for(iGroupNo=0; iGroupNo<iNum; iGroupNo++)
{
if(pBaoHuDB[iGroupNo].m_iGroupNo == (int)rtumsg->MsgData[14])
{
break;
}
}
if(iGroupNo >= iNum)
{
return FALSE;
}
if(iItemNo <= 0)
{
return FALSE;
}
if(iItemNo >= pBaoHuDB[iGroupNo].m_iPntNum)
{
return FALSE;
}
memset((void *)&msg, 0, sizeof(RTUMSG));
ptrClpdu_varr = (CLPDU_VARR *)msg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
ptrClpdu_varr->nADDR = rtumsg->MsgData[5];
msg.MsgLen = sizeof(CLPDU_VARR);
msg.MsgData[msg.MsgLen++] = M_GD_NTA_3;
msg.MsgData[msg.MsgLen++] = 0x81;
msg.MsgData[msg.MsgLen++] = M_CAUSE_READWITHVALIDDATA;
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[9];
msg.MsgData[msg.MsgLen++] = FUNC_GENERALSORT;
msg.MsgData[msg.MsgLen++] = M_INF_READDIROFSINGLEITEM;
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[12];//RII
msg.MsgData[msg.MsgLen++] = 1;
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[14];
msg.MsgData[msg.MsgLen++] = rtumsg->MsgData[15];
switch(rtumsg->MsgData[16])
{
case KOD_ACTUALVALUE: // ʵ<><CAB5>ֵ
msg.MsgData[msg.MsgLen++] = KOD_ACTUALVALUE; // ʵ<><CAB5>ֵ
msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[msg.MsgLen++] = sizeof(float);
msg.MsgData[msg.MsgLen++] = 1;
pfValue = (float*)(&msg.MsgData[msg.MsgLen]);
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
msg.MsgLen += sizeof(float);
break;
case KOD_RANGE: // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
msg.MsgData[msg.MsgLen++] = KOD_RANGE; // <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
msg.MsgData[msg.MsgLen++] = DATAID_FLOAT; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
msg.MsgData[msg.MsgLen++] = sizeof(float);
msg.MsgData[msg.MsgLen++] = 3;
pfValue = (float*)(&msg.MsgData[msg.MsgLen]);
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fMaxValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
pfValue++;
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fMinValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
pfValue++;
fValue = pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo-1].m_fStepValue;
SequenceHostToRtu((char *)&fValue, sizeof(float));
*pfValue = fValue;
msg.MsgLen += 3*sizeof(float);
break;
case KOD_DIMENSION: // <20><> <20><>
msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // <20><> <20><>
msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII;
iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit);
msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen;
msg.MsgData[msg.MsgLen++] = 1;
memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szUnit, iNameLen);
msg.MsgLen += (WORD)iNameLen;
break;
case KOD_DESCRIPTION: // <20><> <20><>
msg.MsgData[msg.MsgLen++] = KOD_DIMENSION; // <20><> <20><>
msg.MsgData[msg.MsgLen++] = DATAID_OS8ASCII;
iNameLen = strlen(pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szName);
msg.MsgData[msg.MsgLen++] = (BYTE)iNameLen;
msg.MsgData[msg.MsgLen++] = 1;
memcpy(&msg.MsgData[msg.MsgLen], pBaoHuDB[iGroupNo].m_psDataInfo[iItemNo].m_szName, iNameLen);
msg.MsgLen += (WORD)iNameLen;
break;
}
ptrClpdu_varr->nLEN1 = msg.MsgLen - 4;
ptrClpdu_varr->nLEN2 = msg.MsgLen - 4;
msg.MsgLen++;//lpc
msg.MsgData[msg.MsgLen++] = 0x16;
return SingleListAddData(&pProvDevParam->m_sBaoHuData, msg.MsgData, msg.MsgLen);
}
BOOL ProvSendChangedDi(u_32 commid, DEVADDRPARAM *psDevAddrParam)
{
int i, j, iStart, len;
WORD wValue;
BOOL bQueryAllDev, bFind;
DAY_TIME sCurTime;
RTUMSG rtumsg;
DI_DEF pntmsg;
PROV_DI_PNT *diprovptr = NULL;
CLPDU_VARR *ptrClpdu_varr = NULL;
PROVDEVDEF *pProvDevParam = NULL;
BUBAN103LINKDEF *pLinkParam = NULL;
BUBAN103PORTPARAM *pPortParam = NULL;
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
pLinkParam = &pPortParam->m_psLink[psDevAddrParam->m_iLinkIdx];
diprovptr = (PROV_DI_PNT*)pPortParam->m_psBaoHu->DiPtr;
bFind = FALSE;
if(pLinkParam->m_uchLinkAddr != 0xFF)
{
bQueryAllDev = TRUE;
}
else
{
bQueryAllDev = FALSE;
}
for(i=0; i<pLinkParam->m_iDevNum; i++)
{
if(bQueryAllDev == TRUE)
{
psDevAddrParam->m_iDevIdx = i;
}
else
{
if(i >= 1)
{
break;
}
}
pProvDevParam = &pLinkParam->m_psProvDev[psDevAddrParam->m_iDevIdx];
iStart = pProvDevParam->m_sYxInfo.m_iStartPntNo;
for(j=0; j<pProvDevParam->m_sYxInfo.m_iPntNum; j++)
{
if(TRUE == diprovptr[iStart+j].ChangeFlag)
{
bFind = TRUE;
diprovptr[iStart+j].ChangeFlag = FALSE;
GetPntMsg(diprovptr[iStart+j].PortNo, diprovptr[iStart+j].PntNo,
(void *)&pntmsg, DI_PNT_TYPE, PNT_STATUS);
break;
}
}
if(TRUE == bFind)
{
break;
}
}
if(bFind == TRUE)
{
GetLocalTimeEx(&sCurTime);
ptrClpdu_varr = (CLPDU_VARR *)rtumsg.MsgData;
ptrClpdu_varr->nSTART1 = 0x68;
ptrClpdu_varr->nSTART2 = 0x68;
// <20><><EFBFBD>¸<EFBFBD>ֵ<EFBFBD><D6B5>·<EFBFBD><C2B7>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>ַ
ptrClpdu_varr->nADDR = psDevAddrParam->m_uchLinkAddr;
ptrClpdu_varr->nCONTROL &= 0xDF;
// wen 2005.06.10 ң<>ű<EFBFBD>λֻ<CEBB><D6BB>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>
//wValue = sCurTime.Sec*1000 + sCurTime.mSec;
wValue = sCurTime.Sec*1000;
rtumsg.MsgData[sizeof(CLPDU_VARR)] = 0x01;
// <20>ĸ<EFBFBD><C4B8><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
rtumsg.MsgData[sizeof(CLPDU_VARR)+7] = LOBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+8] = HIBYTE(wValue);
rtumsg.MsgData[sizeof(CLPDU_VARR)+9] = sCurTime.Min & 0x3F;
rtumsg.MsgData[sizeof(CLPDU_VARR)+10] = sCurTime.Hour & 0x1F;
// SIN
rtumsg.MsgData[sizeof(CLPDU_VARR)+11] = 0;
len = 14;
ptrClpdu_varr->nLEN1 = len;
ptrClpdu_varr->nLEN2 = len;
rtumsg.MsgData[sizeof(CLPDU_VARR)+1] = 0x81;
//COT
rtumsg.MsgData[sizeof(CLPDU_VARR)+2] = M_CAUSE_AUTOSEND;
// <20><><EFBFBD>¸<EFBFBD>ֵ ASDU <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
rtumsg.MsgData[sizeof(CLPDU_VARR)+3] = (BYTE)pProvDevParam->m_iProvAddr;
// FUN
rtumsg.MsgData[sizeof(CLPDU_VARR)+4] = pProvDevParam->m_sYxInfo.m_psDataInfo[j].m_u8ProvFun;
// INF
rtumsg.MsgData[sizeof(CLPDU_VARR)+5] = pProvDevParam->m_sYxInfo.m_psDataInfo[j].m_u8ProvInf;
// DPI
rtumsg.MsgData[sizeof(CLPDU_VARR)+6] = pntmsg.Status+1;
len = ptrClpdu_varr->nLEN1 + 4;
// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>
//rtumsg.MsgData[len++] = CalBuban103Lpc(rtumsg.MsgData+4, ptrClpdu_varr->nLEN1);
rtumsg.MsgData[len++] = 0;
rtumsg.MsgData[len++] = 0x16;
PutPollCmdToBuf(commid, FAST_POLL_CMD, 0, (char*)rtumsg.MsgData, len);
}
else
{
pPortParam->m_psBaoHu->DiChange = FALSE;
}
return bFind;
}
i_32 PackOneValueIntoPackage(BYTE *pbDestBuf, u_32 uMaxBufLen, BYTE bDataFormat,
u_32 uDataType, u_32 uDataLen, BYTE *pbSourData)
{
i_32 iCount, k;
float *ptrfValue, fValue;
double *ptrdbValue;
short *ptri16Value;
i_32 *ptriValue;
iCount = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(bDataFormat)
{
case 0:// ģ<><C4A3><EFBFBD><EFBFBD>
// pbSourData[0] // <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
fValue = *(float*)(pbSourData+1);
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
pbDestBuf[iCount++] = (BYTE)uDataLen;
pbDestBuf[iCount++] = 1;
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(103<30><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
//rtumsg->MsgData[uOffset++];
//ptrfValueSour = (float *)&rtumsg->MsgData[uOffset];
if(uDataType == DATAID_UI)// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(uDataLen == 1)
{
pbDestBuf[iCount] = (BYTE)((u_32)fabs(fValue));
}
else if(uDataLen == 2)
{
ptri16Value = (short *)&pbDestBuf[iCount];
*ptri16Value = (short)fabs(fValue);
SequenceHostToRtu((char *)ptri16Value, sizeof(short));
}
else if(uDataLen == 4)
{
ptriValue = (i_32 *)&pbDestBuf[iCount];
*ptriValue = (i_32)fabs(fValue);
SequenceHostToRtu((char *)ptriValue, sizeof(i_32));
}
}
// wen 2005.04.05 <20><><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//else if(uDataType == DATAID_INT)
else if((DATAID_INT == uDataType) || ( DATAID_EXDATA_0X24 == uDataType))
{
if(uDataLen == 1)
{
pbDestBuf[iCount] = (BYTE)((i_32)fabs(fValue));
}
else if(uDataLen == 2)
{
ptri16Value = (short *)&pbDestBuf[iCount];
*ptri16Value = (short)fabs(fValue);
SequenceHostToRtu((char *)ptri16Value, sizeof(short));
}
else if(uDataLen == 4)
{
ptriValue = (i_32 *)&pbDestBuf[iCount];
*ptriValue = (i_32)fabs(fValue);
SequenceHostToRtu((char *)ptriValue, sizeof(i_32));
}
}
else if(uDataType == DATAID_UFLOAT)// <20>޷<EFBFBD><DEB7>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>
{
ptrfValue = (float *)&pbDestBuf[iCount];
*ptrfValue = (float)fabs(fValue);
SequenceHostToRtu((char *)ptrfValue, sizeof(float));
}
else if(uDataType == DATAID_FLOAT)// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ptrfValue = (float *)&pbDestBuf[iCount];
*ptrfValue = fValue;
SequenceHostToRtu((char *)ptrfValue, sizeof(float));
}
else if(uDataType == DATAID_754SHORT)// R32.23 IEEE <20><>׼754<35><34>ʵ<EFBFBD><CAB5>
{
ptrfValue = (float *)&pbDestBuf[iCount];
*ptrfValue = fValue;
SequenceHostToRtu((char *)ptrfValue, sizeof(float));
}
else if(uDataType == DATAID_754REAL)// R64.53 IEEE <20><>׼754ʵ<34><CAB5>
{
ptrdbValue = (double *)&pbDestBuf[iCount];
*ptrdbValue = fValue;
SequenceHostToRtu((char *)ptrdbValue, sizeof(double));
}
else if(uDataType == DATAID_13BITS) // <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ(13BITS)
{
ptri16Value = (short *)&pbDestBuf[iCount];
*ptri16Value = ((short)(fValue)) & 0x1fff;
SequenceHostToRtu((char *)ptri16Value, sizeof(short));
}
// wen 2004.07.26 <20>޸ĸ<DEB8><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5><C4B4><EFBFBD>
else if(uDataType == DATAID_BSTRING) // 8λ2<CEBB><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uDataLen = (uDataLen + 7) / 8;
for(k=0; k<(int)uDataLen; k++);
{
pbDestBuf[iCount+k] = (BYTE)(((int)(fValue)) / 256);
fValue /= 256;
}
}
iCount += uDataLen;
break;
case 1:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// pbSourData[0] // <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>
fValue = *(float*)(pbSourData+1);
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
pbDestBuf[iCount++] = (BYTE)uDataLen;
pbDestBuf[iCount++] = 1;
if(uDataType == DATAID_UI)// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
if(uDataLen == 1)
{
pbDestBuf[iCount] = (BYTE)((u_32)fabs(fValue));
}
else if(uDataLen == 2)
{
ptri16Value = (short *)&pbDestBuf[iCount];
*ptri16Value = (short)fabs(fValue);
SequenceHostToRtu((char *)ptri16Value, sizeof(short));
}
else if(uDataLen == 4)
{
ptriValue = (i_32 *)&pbDestBuf[iCount];
*ptriValue = (i_32)fabs(fValue);
SequenceHostToRtu((char *)ptriValue, sizeof(i_32));
}
}
else if( uDataType == DATAID_INT)
{
if(uDataLen == 1)
{
pbDestBuf[iCount] = (BYTE)((i_32)fabs(fValue));
}
else if(uDataLen == 2)
{
ptri16Value = (short *)&pbDestBuf[iCount];
*ptri16Value = (short)fabs(fValue);
SequenceHostToRtu((char *)ptri16Value, sizeof(short));
}
else if(uDataLen == 4)
{
ptriValue = (i_32 *)&pbDestBuf[iCount];
*ptriValue = (i_32)fabs(fValue);
SequenceHostToRtu((char *)ptriValue, sizeof(i_32));
}
}
else if(uDataType == DATAID_UFLOAT)// <20>޷<EFBFBD><DEB7>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>
{
ptrfValue = (float *)&pbDestBuf[iCount];
*ptrfValue = (float)fabs(fValue);
SequenceHostToRtu((char *)ptrfValue, sizeof(float));
}
else if(uDataType == DATAID_FLOAT)// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
ptrfValue = (float *)&pbDestBuf[iCount];
*ptrfValue = fValue;
SequenceHostToRtu((char *)ptrfValue, sizeof(float));
}
else if(uDataType == DATAID_754SHORT)// R32.23 IEEE <20><>׼754<35><34>ʵ<EFBFBD><CAB5>
{
ptrfValue = (float *)&pbDestBuf[iCount];
*ptrfValue = fValue;
SequenceHostToRtu((char *)ptrfValue, sizeof(float));
}
else if(uDataType == DATAID_754REAL)// R64.53 IEEE <20><>׼754ʵ<34><CAB5>
{
ptrdbValue = (double *)&pbDestBuf[iCount];
*ptrdbValue = fValue;
SequenceHostToRtu((char *)ptrdbValue, sizeof(double));
}
else if(uDataType == DATAID_13BITS) // <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ(13BITS)
{
ptri16Value = (short *)&pbDestBuf[iCount];
*ptri16Value = ((short)(fValue)) &0x1fff;
SequenceHostToRtu((char *)ptri16Value, sizeof(short));
}
// wen 2004.07.26 <20>޸ĸ<DEB8><C4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5><C4B4><EFBFBD>
else if(uDataType == DATAID_BSTRING) // 8λ2<CEBB><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
uDataLen = (uDataLen + 7) / 8;
for(k=0; k<(int)uDataLen; k++);
{
pbDestBuf[iCount+k] = (BYTE)(((int)(fValue)) / 256);
fValue /= 256;
}
}
else if(uDataType == DATAID_DOUBLE)// ˫<><CBAB><EFBFBD><EFBFBD>Ϣ
{
pbDestBuf[iCount] = (BYTE)((u_32)(fabs(fValue)+1));
}
else if(uDataType == DATAID_SINGLE)// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
{
pbDestBuf[iCount] = (BYTE)((u_32)fabs(fValue));
}
iCount += uDataLen;
break;
case 3:// <20>ַ<EFBFBD><D6B7><EFBFBD>
pbDestBuf[iCount++] = pbSourData[0];
pbDestBuf[iCount++] = 1;
if(uDataType == DATAID_OS8ASCII)// 8λASCII
{
memcpy((void *)(pbDestBuf+iCount), (void *)(pbSourData+1), pbSourData[0]);
iCount += pbSourData[0];
}
break;
}
return iCount;
}
// <20><><EFBFBD><EFBFBD>103<30><33>˹<EFBFBD><CBB9><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>ĸ<EFBFBD>ʽת<CABD><D7AA>
void Buban103ScadaCmdchange(int commid, RTUMSG *rtumsg)
{
u_32 uInterAction, uOffset, uDataLen, uDataType;
u_char bFaultNo;
i_32 i, j, k, iGroupNo, iStartNo, iCPUNo, offset;
BOOL bIsValidCmd;
GEN_DATAGROUP sGenDataGroup;
PROTECTCONTENTHEAD *ptrProHead;
BYTE bSourData[4096];
i_32 iFixDataNGD;
CMDPARAM sCmdParam;
PROTECTMSG PrtMsg;
int iProvAddr, iYkNo;
DEVDEF *pDevParam;
DEVADDRPARAM sAddrParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
char szbuf[256];
memcpy((void *)&PrtMsg, rtumsg->MsgData, rtumsg->MsgLen);
ptrProHead = (PROTECTCONTENTHEAD *)PrtMsg.MsgData;
if(FALSE == GetPortParamPtr(commid, &pPortParam))
{
return;
}
iProvAddr = ptrProHead->uAddr;
sprintf(szbuf, "<EFBFBD><EFBFBD>ַ=%d ", ptrProHead->uAddr);
DebugPrint(szbuf);
if(FALSE == FindProtectDevFromProvAddr(pPortParam, &sAddrParam, iProvAddr))
{
sprintf(szbuf, "<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ");
DebugPrint(szbuf);
return;
}
// wen 2005.06.06 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ洢
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuCommid = rtumsg->PortIdx;
memcpy((void *)&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sRealAddrParam,
(void *)&sAddrParam, sizeof(DEVADDRPARAM));
GetLocalTimeEx(&pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_sBaoHuCmdStartTime);
pPortParam->m_psLink[sAddrParam.m_iLinkIdx].m_sBaoHuCmdParam.m_iBaoHuMsgType = MSGTYPE_BAOHU_SCADACMD;
bIsValidCmd = TRUE;
uOffset = sizeof(PROTECTCONTENTHEAD);
pLinkParam = &pPortParam->m_psLink[sAddrParam.m_iLinkIdx];
pDevParam = &pLinkParam->m_psDev[sAddrParam.m_iDevIdx];
// CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һһ<D2BB><D2BB>Ӧ
if((ptrProHead->cCPUNo != (char)0xFF) && (ptrProHead->cCPUNo != 0))
{
pDevParam->m_sDevParam.m_u8CPUNo = ptrProHead->cCPUNo;
}
if((ptrProHead->cFixNo != (char)0xFF) && (ptrProHead->cFixNo != 0))
{
pDevParam->m_sDevParam.m_u8FixNo = ptrProHead->cFixNo;
}
iCPUNo = 1;
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(ptrProHead->uAddr != 0xff)
{
pDevParam->m_sDevParam.m_u32FuncCode = ptrProHead->uFuncCode;
}
memcpy((void *)&sCmdParam.m_sDevAddr, (void *)&sAddrParam, sizeof(DEVADDRPARAM));
switch(ptrProHead->uFuncCode)
{
case hREADFIX:// <20><>ȡ<EFBFBD><C8A1>ֵ(ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
uInterAction = hREADINGDATA;
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(PROTECT_FIX_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
sprintf(szbuf, "<EFBFBD><EFBFBD>%d<><64>CPU<50><55>= %d!!!\n", i+1,
pDevParam->m_sDevParam.m_u8CPUNo);
DebugPrint(szbuf);
if(pDevParam->m_sDevParam.m_u8CPUNo == iCPUNo)
{
break;
}
else
{
iCPUNo++;
}
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
bIsValidCmd = FALSE;
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d<><64><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
break;
}
pDevParam->m_sDevParam.m_saGroupDef[i].m_u32CurPntNo = 1;
sCmdParam.m_uchInf = C_INF_READGROUPALLITEMS;
sGenDataGroup.m_u8Grp = (BYTE)pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
sGenDataGroup.m_u8Itm = 0;
sGenDataGroup.m_u8KOD = PrtMsg.MsgData[uOffset];
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentCommand_CAsdu21(commid, &sCmdParam, &sGenDataGroup, 1);
break;
case hREADFIXNO:// <20><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
uInterAction = hREADINGDATA;
bIsValidCmd = FALSE;
break;
case hREADPAI:// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
uInterAction = hREADINGDATA;
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(PROTECT_AI_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
break;
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
bIsValidCmd = FALSE;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d<><64><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
break;
}
pDevParam->m_sDevParam.m_saGroupDef[i].m_u32CurPntNo = 1;
sCmdParam.m_uchInf = C_INF_READGROUPALLITEMS;
sGenDataGroup.m_u8Grp = (BYTE)pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
sGenDataGroup.m_u8Itm = 0;
sGenDataGroup.m_u8KOD = PrtMsg.MsgData[uOffset];
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentCommand_CAsdu21(commid, &sCmdParam, &sGenDataGroup, 1);
break;
case hREADPDI:// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uInterAction = hREADINGDATA;
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(PROTECT_DI_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
break;
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
bIsValidCmd = FALSE;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d<><64><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
break;
}
pDevParam->m_sDevParam.m_saGroupDef[i].m_u32CurPntNo = 1;
sCmdParam.m_uchInf = C_INF_READGROUPALLITEMS;
sGenDataGroup.m_u8Grp = (BYTE)pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
sGenDataGroup.m_u8Itm = 0;
sGenDataGroup.m_u8KOD = PrtMsg.MsgData[uOffset];
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentCommand_CAsdu21(commid, &sCmdParam, &sGenDataGroup, 1);
break;
case hREADPWAVE:// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case hQUERYFAULT:// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
bFaultNo = rtumsg->MsgData[sizeof(PROTECTCONTENTHEAD)];
uInterAction = hREADINGDATA;
bIsValidCmd = FALSE;
break;
case hQUERYSELFCHECK:// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>Լ챨<D4BC><ECB1A8>
bFaultNo = rtumsg->MsgData[sizeof(PROTECTCONTENTHEAD)];
uInterAction = hREADINGDATA;
bIsValidCmd = FALSE;
break;
case hWRITEALLFIX:// <20>޸ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ
uInterAction = hREADINGDATA;
//uOffset += 12;
pDevParam->m_u32CallCnt = pLinkParam->m_u32TimeOutConst;
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(PROTECT_FIX_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
if(pDevParam->m_sDevParam.m_u8CPUNo == iCPUNo)
{
break;
}
else
{
iCPUNo++;
}
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
bIsValidCmd = FALSE;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d<><64><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
break;
}
iGroupNo = pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
iStartNo = *((int *)&PrtMsg.MsgData[uOffset]);
sprintf(szbuf, "<EFBFBD>޸Ķ<EFBFBD>ֵ<EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>ʼ <20><><EFBFBD><EFBFBD>=%d, <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>=%d, uoffset=%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:\n",iGroupNo, iStartNo, uOffset);
DebugPrint(szbuf);
for(k=0; k<rtumsg->MsgLen; k+=6)
{
sprintf(szbuf, "%2X %2X %2X %2X %2X %2X",rtumsg->MsgData[k],rtumsg->MsgData[k+1],rtumsg->MsgData[k+2],rtumsg->MsgData[k+3],rtumsg->MsgData[k+4],rtumsg->MsgData[k+5]);
DebugPrint(szbuf);
}
// wen 2004.02.02 <20><>ǰ<EFBFBD><C7B0><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
pDevParam->m_sDevParam.m_saGroupDef[i].m_u32CurPntNo = 1;
if(pDevParam->m_sDevParam.m_saGroupDef[i].m_bInit == FALSE)
{
bIsValidCmd = FALSE;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD><EFBFBD>%d δ<>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>ֵ!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr, iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
uOffset += 4;
offset = 0;
for(j=0, iFixDataNGD=0; (uOffset<rtumsg->MsgLen) && (j<pDevParam->m_sDevParam.m_saGroupDef[i].m_iPntNum); j++, iFixDataNGD++)
{
// wen 2004.02.02 <20><><EFBFBD><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֳɶ<D6B3>֡<EFBFBD><D6A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(offset >= 200)
{
sCmdParam.m_uchInf = C_INF_WRITEITEMWITHACK;
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentData_CAsdu10(commid, &sCmdParam, bSourData, (BYTE)iFixDataNGD);
offset = 0;
iFixDataNGD = 0;
}
// wen 2004.01.07 ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bSourData[offset++] = (BYTE)iGroupNo;
// wen 2004.02.02 <20>ô洢<C3B4><E6B4A2><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>
//bSourData[offset++] = (BYTE)(iStartNo-1+j);
bSourData[offset++] = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8GIN[iStartNo-1+j];
bSourData[offset++] = 1;
uDataType = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataType[iStartNo-1+j];
uDataLen = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataLen[iStartNo-1+j];
bSourData[offset++] = (BYTE)uDataType;
// <20><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
offset += PackOneValueIntoPackage(bSourData+offset, sizeof(bSourData)-offset,
PrtMsg.MsgData[uOffset], uDataType, uDataLen, &PrtMsg.MsgData[uOffset+1]);
sprintf(szbuf, "<EFBFBD><EFBFBD>%d<>㶨ֵ<E3B6A8><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=%d,<2C><>Ŀ<EFBFBD><C4BF>=%d,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=%d,<2C><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>=%d,ֵ=%d; %02X %02X %02X %02X",iStartNo-1+j,\
iGroupNo,pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8GIN[iStartNo-1+j],\
uDataType, uDataLen, *(float*)(&PrtMsg.MsgData[uOffset+1+1]), PrtMsg.MsgData[uOffset+2], PrtMsg.MsgData[uOffset+3], PrtMsg.MsgData[uOffset+4], PrtMsg.MsgData[uOffset+5]);
DebugPrint(szbuf);
uOffset += sizeof(float)+2;
}
if(iFixDataNGD > 0)
{
sCmdParam.m_uchInf = C_INF_WRITEITEMWITHACK;
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentData_CAsdu10(commid, &sCmdParam, bSourData, (BYTE)iFixDataNGD);
}
break;
case hWRITEFIXNO:// <20>޸ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
uInterAction = hREADINGDATA;
pDevParam->m_u32CallCnt = pLinkParam->m_u32TimeOutConst;
bIsValidCmd = FALSE;
break;
case hRESETPROTECT:// <20><><EFBFBD><EFBFBD><EFBFBD>źŸ<C5BA><C5B8><EFBFBD>
//Param.bCmdIdx = APPLY_REVERT;
uInterAction = hREADDATAEND;
if(pDevParam->m_sDevParam.m_sYkDBOrientation.m_iPntNum <= 0)
{
bIsValidCmd = FALSE;
break;
}
else
{
bIsValidCmd = TRUE;
}
iYkNo = pDevParam->m_sDevParam.m_sYkDBOrientation.m_iStartPntNo;
bSourData[0] = (BYTE)(commid & 0xFF);
bSourData[1] = (BYTE)((commid & 0xFF00) << 8);
bSourData[2] = (BYTE)((commid & 0xFF0000) << 16);
bSourData[3] = (BYTE)((commid & 0xFF000000) << 24);
bSourData[4] = (BYTE)(iYkNo & 0xFF);
bSourData[5] = (BYTE)((iYkNo & 0xFF00) << 8);
bSourData[6] = (BYTE)((iYkNo & 0xFF0000) << 16);
bSourData[7] = (BYTE)((iYkNo & 0xFF000000) << 24);
bSourData[8] = STEP_YKYT_EXEC;
bSourData[9] = 1;
Buban103YkYtProcess(commid, bSourData, 10);
break;
case hCHECKTIME:// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ
//Param.bCmdIdx = CHECK_TIME;
uInterAction = hREADINGDATA;
MakeTimeSyn_CAsdu6(commid, &sCmdParam);
break;
case hBROADCASTCHECKTIME:// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ù㲥<C3B9><E3B2A5>ʱ
uInterAction = hREADDATAEND;
sCmdParam.m_sDevAddr.m_uchLinkAddr = 0xFF;
MakeTimeSyn_CAsdu6(commid, &sCmdParam);
break;
case hWRITEFIXACK: // <20>޸ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵȷ<D6B5><C8B7>
sCmdParam.m_uchInf = C_INF_WRITEITEMWITHEXEC;
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentData_CAsdu10(commid, &sCmdParam, NULL, 0);
uInterAction = hREADDATAEND;
break;
case hWRITEFIXNAK: // <20>޸ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7>
sCmdParam.m_uchInf = C_INF_STOPWRITEITEM;
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentData_CAsdu10(commid, &sCmdParam, NULL, 0);
uInterAction = hREADDATAEND;
break;
// wen 2004.09.29
case hWRITESPECIALFIX:// <20>޸<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ
uInterAction = hREADINGDATA;
pDevParam->m_u32CallCnt = pLinkParam->m_u32TimeOutConst;
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(PROTECT_FIX_PNT_TYPE == pDevParam->m_sDevParam.m_saGroupDef[i].m_iDataType)
{
if(pDevParam->m_sDevParam.m_u8CPUNo == iCPUNo)
{
break;
}
else
{
iCPUNo++;
}
}
}
if(i == pDevParam->m_sDevParam.m_iCfgGroupNum)
{
bIsValidCmd = FALSE;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d<><64><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
break;
}
iGroupNo = pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo;
iStartNo = *((int *)&PrtMsg.MsgData[uOffset]);
pDevParam->m_sDevParam.m_saGroupDef[i].m_u32CurPntNo = iStartNo;
if(pDevParam->m_sDevParam.m_saGroupDef[i].m_bInit == FALSE)
{
bIsValidCmd = FALSE;
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD><EFBFBD>%d δ<>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>ֵ!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr, iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
uOffset += 4;
offset = 0;
// wen 2004.01.07 ÿһ<C3BF><D2BB><EFBFBD><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
bSourData[offset++] = (BYTE)iGroupNo;
// wen 2004.02.02 <20>ô洢<C3B4><E6B4A2><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>
bSourData[offset++] = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8GIN[iStartNo-1];
bSourData[offset++] = 1;
uDataType = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataType[iStartNo-1];
uDataLen = pDevParam->m_sDevParam.m_saGroupDef[i].m_pu8DataLen[iStartNo-1];
bSourData[offset++] = (BYTE)uDataType;
// <20><><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
offset += PackOneValueIntoPackage(bSourData+offset, sizeof(bSourData)-offset,
PrtMsg.MsgData[uOffset], uDataType, uDataLen, &PrtMsg.MsgData[uOffset+1]);
uOffset += sizeof(float)+2;
sCmdParam.m_uchInf = C_INF_WRITEITEMWITHACK;
sCmdParam.m_uchRII = RII_PROV_ID;
MakeGenIdentData_CAsdu10(commid, &sCmdParam, bSourData, 1);
break;
default:
bIsValidCmd = FALSE;
break;
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>Ϸ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>߲<EFBFBD>ѯָ<D1AF><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, ֱ<><D6B1><EFBFBD>˳<EFBFBD>
if( !bIsValidCmd )
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%dָ<64><EFBFBD><EEB2BB>ʶ<EFBFBD><CAB6>!!!\n",
commid, sAddrParam.m_uchLinkAddr, sAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
MakeInteractionCmd(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid, commid, hREADDATAEND, ptrProHead, FALSE);
}
else
{
MakeInteractionCmd(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid, commid, uInterAction, ptrProHead, FALSE);
}
}
void Buban103GDprocessWithPAIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid, iItemNum;
BYTE u8KOD, u8INF, u8DataType;
BYTE u8DataNum, u8DataLen, u8ItemNo;
u_32 *puStartNo;
int iOffset, offset;
double fValue;
float *pfValue;
BOOL bFirst, bNumChanged;
PROTECTCONTENTHEAD *ptrProHead;
RTUMSG sendmsg;
PROTECTMSG msg;
VALUEDEF sValue;
GROUPDEF *pGroupParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
bNumChanged = FALSE;
bFirst = TRUE;
iOffset = 14;
pGroupParam = &pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx];
if(pGroupParam->m_iPntNum <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD>ݿռ<DDBF>Ϊ<EFBFBD><CEAA>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
if((iOffset+3) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
u8INF = rtumsg->MsgData[11];
u8KOD = rtumsg->MsgData[16];
pGroupParam->m_u8NGD = rtumsg->MsgData[13];
memset((void *)&msg, 0, sizeof(PROTECTMSG));
msg.MsgType = fPFV_PROTECT_BYPASS_ACK;
msg.PortNumber = commid;
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData;
ptrProHead->ummid = 0xFFFFFFFF;
ptrProHead->uAddr = pDevParam->m_sDevParam.m_iProvAddr;
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>д0xFF)
ptrProHead->cFixNo = (char)pDevParam->m_sDevParam.m_u8FixNo;
// C P U <20><>(<28><><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>д0xFF)
ptrProHead->cCPUNo = (char)pDevParam->m_sDevParam.m_u8CPUNo;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptrProHead->uFuncCode = hPAIDATA;
// <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
offset = sizeof(PROTECTCONTENTHEAD);
// ʵ<><CAB5><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
msg.MsgData[offset++] = u8KOD;
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
puStartNo = (u_32*)&msg.MsgData[offset];
offset += sizeof(u_32);
iItemNum = pGroupParam->m_u8NGD & 0x3F;
for(i=0; i<iItemNum; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><> <20><>
// <20><>Ŀ<EFBFBD><C4BF>
u8ItemNo = rtumsg->MsgData[iOffset+1];
iOffset += 2;
if(TRUE == bFirst)
{
if(u8ItemNo == 0)
{
pGroupParam->m_u32CurPntNo = 1;
}
else if(u8ItemNo <= pGroupParam->m_iStartItemNo)
{
pGroupParam->m_u32CurPntNo = 1;
}
if((M_INF_WRITEITEMWITHACK == u8INF)
&& (pGroupParam->m_bInit == FALSE))
{
for(j=0; j<pGroupParam->m_iPntNum; j++)
{
if(pGroupParam->m_pu8GIN[j] == u8ItemNo)
{
break;
}
}
if(j >= pGroupParam->m_iPntNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>GIN=%d!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
pGroupParam->m_u32CurPntNo = j+1;
}
*puStartNo = pGroupParam->m_u32CurPntNo;
bFirst = FALSE;
}
if(u8KOD != rtumsg->MsgData[iOffset])
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KOD=%d<><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>KOD=%d<><64><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 4;
continue;
}
else
{
iOffset++;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<(int)u8DataNum; j++)
{
// wen 2004.02.01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿΪ<C4BF><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((u8ItemNo == 0) && (j == 0))
{
iOffset += u8DataLen;
continue;
}
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
break;
}
if(pGroupParam->m_bInit == FALSE)
{
//pGroupParam->m_pu8DataLen[pGroupParam->m_u32CurPntNo-1] = u8DataLen;
//pGroupParam->m_pu8DataType[pGroupParam->m_u32CurPntNo-1] = u8DataType;
pGroupParam->m_pu8GIN[pGroupParam->m_u32CurPntNo-1] = u8ItemNo+j;
}
if(GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen) == FALSE)
{
iOffset += u8DataLen;
continue;
}
iOffset += u8DataLen;
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fValue = sValue.m_unValue.m_uValue;
break;
case DT_INT:
fValue = sValue.m_unValue.m_iValue;
break;
case DT_FLOAT:
fValue = sValue.m_unValue.m_fValue;
break;
case DT_CONTROL:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_STRING:
fValue = -1;
break;
case DT_BINARY:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
default:
fValue = -1;
break;
}
if(pGroupParam->m_bInit == FALSE)
{
if((u8ItemNo == 0) && (j == 0))
{
if((fValue > 0) && (KOD_ACTUALVALUE == u8KOD))
{
if((int)fValue > pGroupParam->m_iPntNum)
{
//pGroupParam->m_iPntNum = (int)sValue.m_unValue.m_uValue;
bNumChanged = TRUE;
}
else
{
pGroupParam->m_iPntNum = (int)fValue;
}
}
}
}
if(TRUE == bNumChanged)
{
//freeallfixmemory
}
if(DT_STRING != sValue.m_iDataType)
{
pfValue = (float *)&msg.MsgData[offset];
*pfValue = (float)fValue;
offset += sizeof(float);
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_u32DataID = u8DataType;
}
pGroupParam->m_u32CurPntNo++;
}
}
if(pGroupParam->m_iPntNum > 0)
{
if((int)pGroupParam->m_u32CurPntNo >= pGroupParam->m_iPntNum)
{
pGroupParam->m_bInit = TRUE;
pGroupParam->m_u32CurPntNo = 1;
}
}
msg.MsgLen = offset;
sendmsg.MsgLen = (WORD)(msg.MsgLen+sizeof(PROTECTMSGHEAD));
sendmsg.MsgType = MSGTYPE_BAOHU_SCADADATA;
sendmsg.PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid;
memcpy(sendmsg.MsgData, (BYTE *)&msg, sendmsg.MsgLen);
PutBaohuDataToPort(&sendmsg);
if(pDevParam->m_sDevParam.m_u32FuncCode == hREADPAI)
{
if(TRUE == pGroupParam->m_bInit)
{
MakeInteractionCmd(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid, commid, hREADDATAEND, ptrProHead, FALSE);
pDevParam->m_sDevParam.m_u32FuncCode = 0;
}
}
}
void Buban103GDprocessWithPDIToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid, iItemNum;
BYTE u8KOD, u8INF, u8DataType;
BYTE u8DataNum, u8DataLen, u8ItemNo;
u_32 *puStartNo;
int iOffset, offset;
double fValue;
BOOL bFirst, bNumChanged;
PROTECTCONTENTHEAD *ptrProHead;
RTUMSG sendmsg;
PROTECTMSG msg;
VALUEDEF sValue;
GROUPDEF *pGroupParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
bNumChanged = FALSE;
bFirst = TRUE;
iOffset = 14;
pGroupParam = &pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx];
if(pGroupParam->m_iPntNum <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD>ݿռ<DDBF>Ϊ<EFBFBD><CEAA>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
if((iOffset+3) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
u8INF = rtumsg->MsgData[11];
u8KOD = rtumsg->MsgData[16];
pGroupParam->m_u8NGD = rtumsg->MsgData[13];
memset((void *)&msg, 0, sizeof(PROTECTMSG));
msg.MsgType = fPFV_PROTECT_BYPASS_ACK;
msg.PortNumber = commid;
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData;
ptrProHead->ummid = 0xFFFFFFFF;
ptrProHead->uAddr = pDevParam->m_sDevParam.m_iProvAddr;
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>д0xFF)
ptrProHead->cFixNo = (char)pDevParam->m_sDevParam.m_u8FixNo;
// C P U <20><>(<28><><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>д0xFF)
ptrProHead->cCPUNo = (char)pDevParam->m_sDevParam.m_u8CPUNo;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptrProHead->uFuncCode = hPDIDATA;
// <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
offset = sizeof(PROTECTCONTENTHEAD);
// ʵ<><CAB5><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
msg.MsgData[offset++] = u8KOD;
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
puStartNo = (u_32*)&msg.MsgData[offset];
offset += sizeof(u_32);
iItemNum = pGroupParam->m_u8NGD & 0x3F;
for(i=0; i<iItemNum; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><> <20><>
// <20><>Ŀ<EFBFBD><C4BF>
u8ItemNo = rtumsg->MsgData[iOffset+1];
iOffset += 2;
if(TRUE == bFirst)
{
if(u8ItemNo == 0)
{
pGroupParam->m_u32CurPntNo = 1;
}
else if(u8ItemNo <= pGroupParam->m_iStartItemNo)
{
pGroupParam->m_u32CurPntNo = 1;
}
if((M_INF_WRITEITEMWITHACK == u8INF)
&& (pGroupParam->m_bInit == FALSE))
{
for(j=0; j<pGroupParam->m_iPntNum; j++)
{
if(pGroupParam->m_pu8GIN[j] == u8ItemNo)
{
break;
}
}
if(j >= pGroupParam->m_iPntNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>GIN=%d!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
pGroupParam->m_u32CurPntNo = j+1;
}
*puStartNo = pGroupParam->m_u32CurPntNo;
bFirst = FALSE;
}
if(u8KOD != rtumsg->MsgData[iOffset])
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KOD=%d<><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>KOD=%d<><64><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 4;
continue;
}
else
{
iOffset++;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<(int)u8DataNum; j++)
{
// wen 2004.02.01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿΪ<C4BF><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((u8ItemNo == 0) && (j == 0))
{
iOffset += u8DataLen;
continue;
}
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
break;
}
if(pGroupParam->m_bInit == FALSE)
{
//pGroupParam->m_pu8DataLen[pGroupParam->m_u32CurPntNo-1] = u8DataLen;
//pGroupParam->m_pu8DataType[pGroupParam->m_u32CurPntNo-1] = u8DataType;
pGroupParam->m_pu8GIN[pGroupParam->m_u32CurPntNo-1] = u8ItemNo+j;
}
if(GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen) == FALSE)
{
iOffset += u8DataLen;
continue;
}
iOffset += u8DataLen;
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fValue = sValue.m_unValue.m_uValue;
break;
case DT_INT:
fValue = sValue.m_unValue.m_iValue;
break;
case DT_FLOAT:
fValue = sValue.m_unValue.m_fValue;
break;
case DT_CONTROL:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_STRING:
fValue = -1;
break;
case DT_BINARY:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
default:
fValue = -1;
break;
}
/*
if(pGroupParam->m_bInit == FALSE)
{
if((u8ItemNo == 0) && (j == 0))
{
if((fValue > 0) && (KOD_ACTUALVALUE == u8KOD))
{
if((int)fValue > pGroupParam->m_iPntNum)
{
//pGroupParam->m_iPntNum = (int)sValue.m_unValue.m_uValue;
bNumChanged = TRUE;
}
else
{
pGroupParam->m_iPntNum = (int)fValue;
}
}
}
}
if(TRUE == bNumChanged)
{
//freeallfixmemory
}
*/
if(DT_BINARY == sValue.m_iDataType)
{
if(2 == sValue.m_iDataNum)
{
if((fValue < 1) || (fValue > 2))
{
fValue = 0;
}
else
{
fValue -= 1;
}
}
}
if(fValue > 0)
{
msg.MsgData[offset++] = TRUE;
}
else
{
msg.MsgData[offset++] = FALSE;
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_u32DataID = u8DataType;
}
pGroupParam->m_u32CurPntNo++;
}
}
if(pGroupParam->m_iPntNum > 0)
{
if((int)pGroupParam->m_u32CurPntNo >= pGroupParam->m_iPntNum)
{
pGroupParam->m_bInit = TRUE;
pGroupParam->m_u32CurPntNo = 1;
}
}
msg.MsgLen = offset;
sendmsg.MsgLen = (WORD)(msg.MsgLen+sizeof(PROTECTMSGHEAD));
sendmsg.MsgType = MSGTYPE_BAOHU_SCADADATA;
sendmsg.PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid;
memcpy(sendmsg.MsgData, (BYTE *)&msg, sendmsg.MsgLen);
PutBaohuDataToPort(&sendmsg);
if(pDevParam->m_sDevParam.m_u32FuncCode == hREADPDI)
{
if(TRUE == pGroupParam->m_bInit)
{
MakeInteractionCmd(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid, commid, hREADDATAEND, ptrProHead, FALSE);
pDevParam->m_sDevParam.m_u32FuncCode = 0;
}
}
}
void Buban103GDprocessWithPFIXToScada(RTUMSG *rtumsg, DEVADDRPARAM *psDevAddrParam, i_32 iGroupIdx)
{
int i, j, commid, iItemNum;
BYTE u8KOD, u8INF, u8DataType;
BYTE u8DataNum, u8DataLen, u8ItemNo;
u_32 *puStartNo;
int iOffset, offset;
double fValue;
float *pfValue;
BOOL bFirst, bNumChanged;
PROTECTCONTENTHEAD *ptrProHead;
RTUMSG sendmsg;
PROTECTMSG msg;
VALUEDEF sValue;
GROUPDEF *pGroupParam;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
//#ifdef _DEBUG_MSG_
char szbuf[256];
//#endif
sprintf(szbuf, "Buban103GDprocessWithPFIXToScada");
DebugPrint(szbuf);
commid = rtumsg->PortIdx;
if(FALSE == GetSpecialPtr(commid, psDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
bNumChanged = FALSE;
bFirst = TRUE;
iOffset = 14;
pGroupParam = &pDevParam->m_sDevParam.m_saGroupDef[iGroupIdx];
if(pGroupParam->m_iPntNum <= 0)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD>ݿռ<DDBF>Ϊ<EFBFBD><CEAA>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
if((iOffset+3) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ, <20><><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
u8INF = rtumsg->MsgData[11];
u8KOD = rtumsg->MsgData[16];
pGroupParam->m_u8NGD = rtumsg->MsgData[13];
if((0xf9 == u8INF) && (rtumsg->MsgData[8] == 0x29))
{
sprintf(szbuf, "Buban103GDprocessWithPFIXToScadaд<EFBFBD><EFBFBD>ֵȷ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
DebugPrint(szbuf);
}
if((0xf9 == u8INF) && (rtumsg->MsgData[8] == 0x2c))
{
sprintf(szbuf, "Buban103GDprocessWithPFIXToScadaд<EFBFBD><EFBFBD>ֵȷ<EFBFBD>ϳɹ<EFBFBD>");
DebugPrint(szbuf);
}
if((0xfa == u8INF) && (rtumsg->MsgData[8] == 0x28))
{
sprintf(szbuf, "Buban103GDprocessWithPFIXToScadaд<EFBFBD><EFBFBD>ִֵ<EFBFBD>гɹ<EFBFBD>");
DebugPrint(szbuf);
}
if((0xfa == u8INF) && (rtumsg->MsgData[8] == 0x29))
{
sprintf(szbuf, "Buban103GDprocessWithPFIXToScadaд<EFBFBD><EFBFBD>ִֵ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
DebugPrint(szbuf);
}
if((0xfb == u8INF) && (rtumsg->MsgData[8] == 0x28))
{
sprintf(szbuf, "Buban103GDprocessWithPFIXToScadaд<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ִֹ<EFBFBD>гɹ<EFBFBD>");
DebugPrint(szbuf);
}
memset((void *)&msg, 0, sizeof(PROTECTMSG));
msg.MsgType = fPFV_PROTECT_BYPASS_ACK;
msg.PortNumber = commid;
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData;
ptrProHead->ummid = 0xFFFFFFFF;
ptrProHead->uAddr = pDevParam->m_sDevParam.m_iProvAddr;
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>д0xFF)
ptrProHead->cFixNo = (char)pDevParam->m_sDevParam.m_u8FixNo;
// C P U <20><>(<28><><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1><EFBFBD><EFBFBD>д0xFF)
ptrProHead->cCPUNo = (char)pDevParam->m_sDevParam.m_u8CPUNo;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ptrProHead->uFuncCode = hFIXDATA;
// <20><>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>
offset = sizeof(PROTECTCONTENTHEAD);
// ʵ<><CAB5><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD>
msg.MsgData[offset++] = u8KOD;
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
puStartNo = (u_32*)&msg.MsgData[offset];
offset += sizeof(u_32);
iItemNum = pGroupParam->m_u8NGD & 0x3F;
for(i=0; i<iItemNum; i++)
{
if((iOffset+6) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD>*<2A><><EFBFBD><EFBFBD>)
u8DataNum = rtumsg->MsgData[iOffset+5];
u8DataLen = rtumsg->MsgData[iOffset+4];
if((iOffset+6+u8DataLen*u8DataNum) >= rtumsg->MsgLen)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)<29><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><D6A1><EFBFBD>Ȳ<EFBFBD>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
break;
}
// <20><> <20><>
// <20><>Ŀ<EFBFBD><C4BF>
u8ItemNo = rtumsg->MsgData[iOffset+1];
iOffset += 2;
if(TRUE == bFirst)
{
if(u8ItemNo == 0)
{
pGroupParam->m_u32CurPntNo = 1;
}
else if(u8ItemNo <= pGroupParam->m_iStartItemNo)
{
pGroupParam->m_u32CurPntNo = 1;
}
if((M_INF_WRITEITEMWITHACK == u8INF)
&& (pGroupParam->m_bInit == FALSE))
{
for(j=0; j<pGroupParam->m_iPntNum; j++)
{
if(pGroupParam->m_pu8GIN[j] == u8ItemNo)
{
break;
}
}
if(j >= pGroupParam->m_iPntNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>GIN=%d!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, u8ItemNo, pGroupParam->m_iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
pGroupParam->m_u32CurPntNo = j+1;
}
*puStartNo = pGroupParam->m_u32CurPntNo;
bFirst = FALSE;
}
if(u8KOD != rtumsg->MsgData[iOffset])
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10(Group=%d)дȷ<D0B4>ϴ<EFBFBD><CFB4><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>KOD=%d<><64>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>KOD=%d<><64><EFBFBD><EFBFBD>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, pGroupParam->m_iGroupNo, rtumsg->MsgData[iOffset], u8KOD);
DebugPrint(szbuf);
#endif
iOffset += u8DataLen*u8DataNum + 4;
continue;
}
else
{
iOffset++;
}
u8DataType = rtumsg->MsgData[iOffset++];
iOffset += 2;
for(j=0; j<(int)u8DataNum; j++)
{
// wen 2004.02.01 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĿΪ<C4BF><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((u8ItemNo == 0) && (j == 0))
{
iOffset += u8DataLen;
continue;
}
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
break;
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_pu8DataLen[pGroupParam->m_u32CurPntNo-1] = u8DataLen;
pGroupParam->m_pu8DataType[pGroupParam->m_u32CurPntNo-1] = u8DataType;
pGroupParam->m_pu8GIN[pGroupParam->m_u32CurPntNo-1] = u8ItemNo+j;
}
if(GetOneValueOfASDU10(&rtumsg->MsgData[iOffset], &sValue, u8DataType, u8DataLen) == FALSE)
{
iOffset += u8DataLen;
continue;
}
iOffset += u8DataLen;
switch(sValue.m_iDataType)
{
case DT_UINT:// <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
fValue = sValue.m_unValue.m_uValue;
break;
case DT_INT:
fValue = sValue.m_unValue.m_iValue;
break;
case DT_FLOAT:
fValue = sValue.m_unValue.m_fValue;
break;
case DT_CONTROL:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_STRING:
fValue = -1;
break;
case DT_BINARY:
fValue = sValue.m_unValue.m_dwValue;
break;
case DT_NO:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
default:
fValue = -1;
break;
}
if(DT_STRING == sValue.m_iDataType)
{
msg.MsgData[offset++] = DATATYPE_STRING;
msg.MsgData[offset++] = (BYTE)sValue.m_iDataNum;
memcpy((void *)&msg.MsgData[offset], sValue.m_szValue, sValue.m_iDataNum);
offset += sValue.m_iDataNum;
}
else if(DT_BINARY == sValue.m_iDataType)
{
if(2 == sValue.m_iDataNum)
{
if((fValue < 1) || (fValue > 2))
{
fValue = 0;
}
else
{
fValue -= 1;
}
}
msg.MsgData[offset++] = DATATYPE_DI;
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//ң<><D2A3><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>float<61><74><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>͵<EFBFBD>
//if(fValue > 0)
//{
// msg.MsgData[offset++] = TRUE;
//}
//else
//{
// msg.MsgData[offset++] = FALSE;
//}
//===============================================================
if(fValue > 0)
{
fValue = TRUE;
}
else
{
fValue = FALSE;
}
pfValue = (float *)&msg.MsgData[offset];
*pfValue = (float)fValue;
offset += sizeof(float);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
else
{
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>õĿ<C3B5><C4BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//msg.MsgData[offset++] = DATATYPE_AI;
if(pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].iFixDataType == 2)
msg.MsgData[offset++] = DATATYPE_DI;
else
msg.MsgData[offset++] = DATATYPE_AI;
pfValue = (float *)&msg.MsgData[offset];
*pfValue = (float)fValue;
offset += sizeof(float);
}
if(pGroupParam->m_bInit == FALSE)
{
pGroupParam->m_psDataInfo[pGroupParam->m_u32CurPntNo-1].m_u32DataID = u8DataType;
}
pGroupParam->m_u32CurPntNo++;
}
}
if(pGroupParam->m_iPntNum > 0)
{
if((int)pGroupParam->m_u32CurPntNo > pGroupParam->m_iPntNum)
{
sprintf(szbuf, "<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>m_u32CurPntNo=%d, <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>m_iPntNum= %d", pGroupParam->m_u32CurPntNo, pGroupParam->m_iPntNum);
DebugPrint(szbuf);
pGroupParam->m_bInit = TRUE;
pGroupParam->m_u32CurPntNo = 1;
}
}
msg.MsgLen = offset;
sendmsg.MsgLen = (WORD)(msg.MsgLen+sizeof(PROTECTMSGHEAD));
sendmsg.MsgType = MSGTYPE_BAOHU_SCADADATA;
sendmsg.PortIdx = pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid;
memcpy(sendmsg.MsgData, (BYTE *)&msg, sendmsg.MsgLen);
PutBaohuDataToPort(&sendmsg);
if(pDevParam->m_sDevParam.m_u32FuncCode == hREADFIX)
{
if(TRUE == pGroupParam->m_bInit)
{
MakeInteractionCmd(pLinkParam->m_sBaoHuCmdParam.m_iBaoHuCommid, commid, hREADDATAEND, ptrProHead, FALSE);
pDevParam->m_sDevParam.m_u32FuncCode = 0;
}
}
ptrProHead = (pPROTECTCONTENTHEAD)&sendmsg.MsgData[sizeof(PROTECTMSGHEAD)];
// wen 2004.01.06 д<><D0B4>ֵȷ<D6B5><C8B7>
if((M_CAUSE_WRITEACK == rtumsg->MsgData[8])
|| ( M_CAUSE_WRITECONFIRM == rtumsg->MsgData[8]))
{
ptrProHead->uFuncCode = hWRITEFIXACK;
Buban103ScadaCmdchange(commid, &sendmsg);
}
else if(M_CAUSE_WRITENAK == rtumsg->MsgData[8])
{
ptrProHead->uFuncCode = hWRITEFIXNAK;
Buban103ScadaCmdchange(commid, &sendmsg);
}
}
void Buban103ScadaDatachange(int commid, RTUMSG *rtumsg)
{
// <20><><EFBFBD>ͱ<EFBFBD>ʶ(TYP):10
//rtumsg->MsgData[6];
// <20>ɱ<EFBFBD><C9B1><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>(VSQ):0x81
//rtumsg->MsgData[7];
// <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>(COT)
//rtumsg->MsgData[8];
// Ӧ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
//rtumsg->MsgData[9];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(FUN): 254(0xfe)
//rtumsg->MsgData[10];
// <20><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>(INF):
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 240
// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 241
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>Ŀ¼ : 243
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 244
// <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF>ֹ : 245
//rtumsg->MsgData[11];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ʶ<EFBFBD><CAB6>(RII)
//rtumsg->MsgData[12];
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ŀ
//rtumsg->MsgData[13];
// <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>(GIN):<3A><>Ŀ<EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[14];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(KOD)
// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : KOD_NOSPECIFIED(0)
// ʵ<><CAB5>ֵ : KOD_ACTUALVALUE(1)
// ȱʡֵ : KOD_DEFAULTVALUE(2)
// <20><><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>Сֵ<D0A1><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) : KOD_RANGE(3)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP1(4)
// <20><><EFBFBD><EFBFBD>(n,m) : KOD_PRECISION(5)
// <20><><EFBFBD><EFBFBD> : KOD_FACTOR(6)
// <20>α<EFBFBD> : KOD_REFERENCE(7)
// <20>б<EFBFBD> : KOD_ENUMERATION(8)
// <20><><EFBFBD><EFBFBD> : KOD_DIMENSION(9)
// <20><><EFBFBD><EFBFBD> : KOD_DESCRIPTION(10)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP2(11)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ : KOD_PASSWORD(12)
// ֻ<><D6BB> : KOD_READONLY(13)
// ֻд : KOD_WRITEONLY(14)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP3(15)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP4(16)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP5(17)
// <20><><EFBFBD><EFBFBD> : KOD_BACKUP6(18)
// <20><>Ӧ<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD> : KOD_CORFUNCANDINF(19)
// <20><>Ӧ<EFBFBD><D3A6><EFBFBD>¼<EFBFBD> : KOD_COREVENT(20)
// <20>б<EFBFBD><D0B1><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD> : KOD_ENUMTEXTARRAY(21)
// <20>б<EFBFBD><D0B1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> : KOD_ENUMVALUEARRAY(22)
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ : KOD_RELATEDENTRIES(23)
//rtumsg->MsgData[16];
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//rtumsg->MsgData[17];
//DATAID_NO : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_OS8ASCII : 8λASCII
//DATAID_BSTRING : 8λ2<CEBB><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_UIX : <20>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_INT : <20><><EFBFBD><EFBFBD>
//DATAID_UFLOAT : <20>޷<EFBFBD><DEB7>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD><EFBFBD>
//DATAID_FLOAT : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//DATAID_754SHORT : R32.23 IEEE <20><>׼754<35><34>ʵ<EFBFBD><CAB5>
//DATAID_754REAL : R64.53 IEEE <20><>׼754ʵ<34><CAB5>
//DATAID_DOUBLE : ˫<><CBAB><EFBFBD><EFBFBD>Ϣ
//DATAID_SINGLE : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//DATAID_13BITS : <20><>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ֵ(13BITS)
//DATAID_SORTIDNO : ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
//DATAID_WITHTIME : <20><>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//DATAID_WITHTIMESPACE : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
//DATAID_STRUCT : <20><><EFBFBD>ݽṹ
// <20><><EFBFBD>ݳߴ<DDB3>
//rtumsg->MsgData[18]
// <20><><EFBFBD><EFBFBD>
//rtumsg->MsgData[19]
// <20><><EFBFBD><EFBFBD>ֵ(<28><><EFBFBD>ȸ<EFBFBD><C8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
// 2 ... n <20><>ͨ<EFBFBD>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int i, iGroupNo, iCfgGroupIdx;
DEVDEF *pDevParam;
BUBAN103LINKDEF *pLinkParam;
BUBAN103PORTPARAM *pPortParam;
DEVADDRPARAM sDevAddrParam;
#ifdef _DEBUG_MSG_
char szbuf[256];
#endif
sDevAddrParam.m_uchLinkAddr = rtumsg->MsgData[5];
sDevAddrParam.m_uchCommAddr = rtumsg->MsgData[9];
pPortParam = (BUBAN103PORTPARAM *)SioParam[commid].ExtInfo;
if(FindProtectDev(pPortParam, &sDevAddrParam, FALSE) == FALSE)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d <20><><EFBFBD>ڶ˿<DAB6><CBBF><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>!!!",
commid, sDevAddrParam.m_uchLinkAddr, sDevAddrParam.m_uchCommAddr);
DebugPrint(szbuf);
#endif
return;
}
if(FALSE == GetSpecialPtr(commid, &sDevAddrParam, &pPortParam, &pLinkParam, &pDevParam))
{
return;
}
//<2F><> <20><>
iGroupNo = rtumsg->MsgData[14];
for(i=0; i<pDevParam->m_sDevParam.m_iCfgGroupNum; i++)
{
if(pDevParam->m_sDevParam.m_saGroupDef[i].m_iGroupNo == iGroupNo)
{
iCfgGroupIdx = i;
break;
}
}
if(i >= pDevParam->m_sDevParam.m_iCfgGroupNum)
{
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10 ͨ<>÷<EFBFBD><C3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʱ<EFBFBD><CAB1>Group=%d<><64><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr, iGroupNo);
DebugPrint(szbuf);
#endif
return;
}
switch(pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
case PROTECT_AI_PNT_TYPE:
Buban103GDprocessWithPAIToScada(rtumsg, &sDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
case PROTECT_DI_PNT_TYPE:
Buban103GDprocessWithPDIToScada(rtumsg, &sDevAddrParam, iCfgGroupIdx);
break;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
case PROTECT_FIX_PNT_TYPE:
Buban103GDprocessWithPFIXToScada(rtumsg, &sDevAddrParam, iCfgGroupIdx);
break;
default:
#ifdef _DEBUG_MSG_
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d linkaddr=%d devaddr=%d ASDU10<31><30><EFBFBD><EFBFBD>ʱ, Group=%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(=%d)<29><>ƥ<EFBFBD><C6A5>!!!\n",
commid, pLinkParam->m_uchLinkAddr, pDevParam->m_sDevParam.m_u8DevAddr,
pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iGroupNo,
pDevParam->m_sDevParam.m_saGroupDef[iCfgGroupIdx].m_iDataType);
DebugPrint(szbuf);
#endif
break;
}
}
void Buban103ScadaProtocolExchange(int commid, RTUMSG *rtumsg)
{
if(MSGTYPE_BAOHU_SCADACMD == rtumsg->MsgType)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103ScadaCmdchange(commid, rtumsg);
}
if(MSGTYPE_BAOHU_SCADADATA == rtumsg->MsgType)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Buban103ScadaDatachange(commid, rtumsg);
}
}
void Buban103DispConfig(int commid, BUBAN103PORTPARAM *psPortParam)
{
int i, j;
char szDbg[256];
sprintf(szDbg, ">>>Disp Commid_%02d Config(PortType=%d):", commid, psPortParam->m_psBaoHu->PortType);
DebugPrint(szDbg);
sprintf(szDbg, ">>>LinkNum=%d", psPortParam->m_iLinkNum);
DebugPrint(szDbg);
for(i=0; i<psPortParam->m_iLinkNum; i++)
{
sprintf(szDbg, ">>>LinkIdx=%d DevNum=%d", i, psPortParam->m_psLink[i].m_iDevNum);
DebugPrint(szDbg);
if(PROTOCOL_MASTER == psPortParam->m_psBaoHu->PortType)
{
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
sprintf(szDbg, "###DevNo %d", j);
DebugPrint(szDbg);
sprintf(szDbg, ">>>ProvAddr=%d CfgGroupNum=%d, DevAddr=%d",
psPortParam->m_psLink[i].m_psDev[j].m_sDevParam.m_iProvAddr,
psPortParam->m_psLink[i].m_psDev[j].m_sDevParam.m_iCfgGroupNum,
psPortParam->m_psLink[i].m_psDev[j].m_sDevParam.m_u8DevAddr);
DebugPrint(szDbg);
DebugPrint((char*)"\n");
}
}
else
{
for(j=0; j<psPortParam->m_psLink[i].m_iDevNum; j++)
{
sprintf(szDbg, "###DevNo %d", j);
sprintf(szDbg, ">>>ProvAddr=%d Asdu10Num=%d, RealCommid=%d",
psPortParam->m_psLink[i].m_psProvDev[j].m_iProvAddr,
psPortParam->m_psLink[i].m_psProvDev[j].m_iAsdu10Num,
psPortParam->m_psLink[i].m_psProvDev[j].m_iRealCommid);
DebugPrint(szDbg);
DebugPrint((char*)"\n");
}
}
}
}
void Buban103DispMalloc(int commid, int iSize)
{
char szbuf[128];
return;
sprintf(szbuf, "disp: commid=%d, malloc(%d)", commid, iSize);
DebugPrint(szbuf);
}
//===========================ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================
//===========================<3D><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================