|
|
|
|
//***************************************************************
|
|
|
|
|
//* scadaprotect.cpp *
|
|
|
|
|
//* aaawen 2004.10.19 *
|
|
|
|
|
//***************************************************************
|
|
|
|
|
|
|
|
|
|
#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 "scadaprotect.h"
|
|
|
|
|
#include "buban103.h"
|
|
|
|
|
|
|
|
|
|
extern SIO_PARAM_DEF SioParam[];
|
|
|
|
|
extern FUNCTION_CALL *FunCallPtr;
|
|
|
|
|
extern BYTE SyncWordEB[];
|
|
|
|
|
extern void *pvconf_handle;
|
|
|
|
|
extern void *pvportconf_handle;
|
|
|
|
|
extern void *pvdataconf_handle;
|
|
|
|
|
extern char pvDataFileName[256];
|
|
|
|
|
extern char IniFilePath[256];
|
|
|
|
|
|
|
|
|
|
const int gActiveConst = 3;
|
|
|
|
|
const int gStatusConst = 10;
|
|
|
|
|
|
|
|
|
|
/*!
|
|
|
|
|
<EFBFBD><EFBFBD>֯<EFBFBD>ṹ:<EFBFBD><EFBFBD>·(<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)+װ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
const char *gpStrScadaProtectConfigInfo[] =
|
|
|
|
|
{
|
|
|
|
|
"*******˹<><CBB9><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC>ʼ*******",
|
|
|
|
|
"ģ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=template.csv",
|
|
|
|
|
"*******˹<><CBB9><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Լ<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 ScadaProtectReadConfig(int commid)
|
|
|
|
|
{
|
|
|
|
|
int i, iMaxPort, iDevId;
|
|
|
|
|
char szSection[128], entry[256];
|
|
|
|
|
char szPortConfig[256], szTemplate[256];
|
|
|
|
|
PORTSTATUS sPortStatus;
|
|
|
|
|
SCADAPROTECTPORTPARAM *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(SCADAPROTECTPORTPARAM));
|
|
|
|
|
|
|
|
|
|
if(!SioParam[commid].ExtInfo)
|
|
|
|
|
{
|
|
|
|
|
sprintf(szSection, "WARN(%04d): commid_%02d ExtInfo=malloc(%d) failed.",
|
|
|
|
|
_getpid(), commid, sizeof(SCADAPROTECTPORTPARAM));
|
|
|
|
|
DebugPrint(szSection);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
memset(SioParam[commid].ExtInfo, 0, sizeof(SCADAPROTECTPORTPARAM));
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)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;
|
|
|
|
|
|
|
|
|
|
iMaxPort = GetMaxPort();
|
|
|
|
|
pPortParam->m_pPrtPortStatus = (PORTSTATUS *)HEAP_MALLOC(iMaxPort*sizeof(PORTSTATUS));
|
|
|
|
|
//memset((void *)pPortParam->m_pPrtPortStatus, 0, GetMaxPort()*sizeof(PORTSTATUS));
|
|
|
|
|
|
|
|
|
|
for(i=0; i<iMaxPort; i++)
|
|
|
|
|
{
|
|
|
|
|
sPortStatus.bPortIdle = TRUE;
|
|
|
|
|
sPortStatus.mmid = 0xFFFFFFFF;
|
|
|
|
|
sPortStatus.timeOut = 0;
|
|
|
|
|
SetProtectPortIdle(i, pPortParam, &sPortStatus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPortParam->m_iActiveTimeCnt = 0;
|
|
|
|
|
pPortParam->m_iActiveTimeConst = (gActiveConst*1000)/TIMER_CNT;
|
|
|
|
|
|
|
|
|
|
pPortParam->m_iStatusTimeCnt = 0;
|
|
|
|
|
pPortParam->m_iStatusTimeConst = (gStatusConst*1000)/TIMER_CNT;
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
sprintf(szSection, "Port%d", commid+1);
|
|
|
|
|
strcpy(entry, "ģ<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|
|
|
|
GetPrivateProString(szSection, entry, "template.csv", pPortParam->m_chArrayTempletFileName,
|
|
|
|
|
sizeof(pPortParam->m_chArrayTempletFileName)-1, szPortConfig);
|
|
|
|
|
#ifdef OS_LINUX
|
|
|
|
|
sprintf(szTemplate, "inf/%s", pPortParam->m_chArrayTempletFileName);
|
|
|
|
|
#else
|
|
|
|
|
sprintf(szTemplate, "%s/inf/%s", IniFilePath, pPortParam->m_chArrayTempletFileName);
|
|
|
|
|
#endif
|
|
|
|
|
InitScadaInfoFromTempletFile(commid, pPortParam, szTemplate, FALSE);
|
|
|
|
|
|
|
|
|
|
// wen 2005.06.22
|
|
|
|
|
// <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>Ϊ20<32><30>
|
|
|
|
|
//SingleListInit(&pPortParam->m_sBaoHuData, 20);
|
|
|
|
|
iDevId = commid<<16;
|
|
|
|
|
SingleListInitEx(&pPortParam->m_sBaoHuData, 20, iDevId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//********************************************************************
|
|
|
|
|
//* <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 ScadaProtectRecvData(int commid, u_char *buf, int len)// <20><>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
PROTECTMSGHEAD sMsgHead;
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
char szbuf[256];
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
if(IsExtInfoPtr(commid) == FALSE)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo;
|
|
|
|
|
|
|
|
|
|
for(i=0; i<len; i++)
|
|
|
|
|
{
|
|
|
|
|
switch(pPortParam->m_psBaoHu->m_iRevStatus)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
pPortParam->m_iRecvLen = 0;
|
|
|
|
|
case 1:
|
|
|
|
|
case 2:
|
|
|
|
|
case 3:
|
|
|
|
|
case 4:
|
|
|
|
|
case 5:
|
|
|
|
|
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
|
|
|
|
|
if(buf[i] == SyncWordEB[pPortParam->m_psBaoHu->m_iRevStatus])
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus = 50;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//SioParam[commid].ErrMsgNum++;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
case 7:
|
|
|
|
|
case 8:
|
|
|
|
|
case 9: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case 10:
|
|
|
|
|
case 11:
|
|
|
|
|
case 12:
|
|
|
|
|
case 13: // <20>˿ں<CBBF>
|
|
|
|
|
case 14:
|
|
|
|
|
case 15:
|
|
|
|
|
case 16:
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus++;
|
|
|
|
|
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
|
|
|
|
|
break;
|
|
|
|
|
case 17: // <20><> <20><>(<28><><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD>)
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus++;
|
|
|
|
|
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
|
|
|
|
|
memcpy((void *)&sMsgHead, pPortParam->m_achRecvBuf+6, sizeof(PROTECTMSGHEAD));
|
|
|
|
|
SequenceNetToHost((char *)&sMsgHead.MsgLen, sizeof(u_32));
|
|
|
|
|
if(sMsgHead.MsgLen == 0)
|
|
|
|
|
{
|
|
|
|
|
ScadaProtectProcessData(commid, pPortParam, TRUE);
|
|
|
|
|
#ifndef OS_LINUX
|
|
|
|
|
if((GetCurPort() == commid) && IsRealDataDisp())
|
|
|
|
|
{
|
|
|
|
|
WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA,
|
|
|
|
|
(BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus = 0;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_psBaoHu->m_iNeedRevLength = sMsgHead.MsgLen;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 18:// <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)
|
|
|
|
|
{
|
|
|
|
|
// wen 2006.04.29 <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ȱ<EFBFBD>ٺ<EFBFBD><D9BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC>
|
|
|
|
|
if(buf[i] == 0x90)
|
|
|
|
|
{
|
|
|
|
|
if(pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen-2] == (char)0xeb)
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_achRecvBuf[0] = (char)0xEB;
|
|
|
|
|
pPortParam->m_achRecvBuf[1] = (char)0x90;
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus = 2;
|
|
|
|
|
pPortParam->m_iRecvLen = 2;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ScadaProtectProcessData(commid, pPortParam, TRUE);
|
|
|
|
|
#ifndef OS_LINUX
|
|
|
|
|
if((GetCurPort() == commid) && IsRealDataDisp())
|
|
|
|
|
{
|
|
|
|
|
WatchDataPutDispBuf(commid, SDS_SIO_RECV_DATA,
|
|
|
|
|
(BYTE *)pPortParam->m_achRecvBuf, pPortParam->m_iRecvLen);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus = 0;
|
|
|
|
|
//pPortParam->m_iRecvLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 19:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
default:
|
|
|
|
|
if(buf[i] == 0xEB)
|
|
|
|
|
{
|
|
|
|
|
#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
|
|
|
|
|
ScadaProtectProcessData(commid, pPortParam, FALSE);
|
|
|
|
|
SioParam[commid].ErrMsgNum += pPortParam->m_iRecvLen;
|
|
|
|
|
|
|
|
|
|
// <20><>״̬1<CCAC><31>ʼ
|
|
|
|
|
pPortParam->m_achRecvBuf[0] = buf[i];
|
|
|
|
|
pPortParam->m_psBaoHu->m_iRevStatus = 1;
|
|
|
|
|
pPortParam->m_iRecvLen = 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_achRecvBuf[pPortParam->m_iRecvLen++] = buf[i];
|
|
|
|
|
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
|
|
|
|
|
ScadaProtectProcessData(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 ScadaProtectTimer(int commid)
|
|
|
|
|
{
|
|
|
|
|
RTUMSG rtumsg;
|
|
|
|
|
PORTSTATUS sPortStatus;
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
if(IsExtInfoPtr(commid) == FALSE)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo;
|
|
|
|
|
|
|
|
|
|
if(PROTOCOL_MASTER == pPortParam->m_psBaoHu->PortType)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ReduceTimeOut(pPortParam);
|
|
|
|
|
|
|
|
|
|
//1. <20><><EFBFBD>Ͷ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if(SingleListHaveData(&pPortParam->m_sBaoHuData) > 0)
|
|
|
|
|
{
|
|
|
|
|
// wen 2006.05.11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTUMSG<53>ṹѹ<E1B9B9><D1B9><EFBFBD>б<EFBFBD>
|
|
|
|
|
//rtumsg.MsgLen = SingleListGetAndDelData(&pPortParam->m_sBaoHuData, rtumsg.MsgData, sizeof(rtumsg.MsgData));
|
|
|
|
|
rtumsg.MsgLen = SingleListGetAndDelData(&pPortParam->m_sBaoHuData, (BYTE *)&rtumsg, sizeof(RTUMSG));
|
|
|
|
|
rtumsg.MsgLen -= sizeof(RTUMSGHEAD);
|
|
|
|
|
if(rtumsg.MsgLen > 0)
|
|
|
|
|
{
|
|
|
|
|
// wen 2006.05.11 <20>ڴ˽<DAB4><CBBD><EFBFBD>æ<EFBFBD><C3A6>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD>
|
|
|
|
|
if((rtumsg.PortIdx >= 0) && (rtumsg.PortIdx < GetMaxPort()))
|
|
|
|
|
{
|
|
|
|
|
sPortStatus.bPortIdle = TRUE;
|
|
|
|
|
sPortStatus.mmid = 0xFFFFFFFF;
|
|
|
|
|
sPortStatus.timeOut = 0;
|
|
|
|
|
SetProtectPortIdle(rtumsg.PortIdx, pPortParam, &sPortStatus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FormatDataAndSend(commid, (PROTECTMSG *)rtumsg.MsgData);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//2. <20><><EFBFBD><EFBFBD>soe<6F><65><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
if(ProvHaveSoeData(commid) > 0)
|
|
|
|
|
{
|
|
|
|
|
//printf("scadaprotect have soe data.\n");
|
|
|
|
|
if(MakeSoeDataPacket(commid) == TRUE)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//3. <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB6AF><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>״̬
|
|
|
|
|
if(pPortParam->m_iActiveTimeConst > 0)
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_iActiveTimeCnt++;
|
|
|
|
|
if(pPortParam->m_iActiveTimeCnt > pPortParam->m_iActiveTimeConst)
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_iActiveTimeCnt = 0;
|
|
|
|
|
MakeNetActivePacket(commid);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if(pPortParam->m_iStatusTimeConst > 0)
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_iStatusTimeCnt++;
|
|
|
|
|
if(pPortParam->m_iStatusTimeCnt > pPortParam->m_iStatusTimeConst)
|
|
|
|
|
{
|
|
|
|
|
pPortParam->m_iStatusTimeCnt = 0;
|
|
|
|
|
MakeStatusPacket(commid);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//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 ScadaProtectYkYtProcess(int commid, u_char *buf, int len) // ң<><D2A3>ң<EFBFBD><D2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
int portno, ykytpnt;
|
|
|
|
|
int iDirect;
|
|
|
|
|
//SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
// 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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//********************************************************************
|
|
|
|
|
//* ϵͳ<CFB5>˳<EFBFBD>ʱ<EFBFBD><CAB1>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> *
|
|
|
|
|
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>int commid : <20>˿ں<CBBF> *
|
|
|
|
|
//********************************************************************
|
|
|
|
|
void ScadaProtectExit(int commid)
|
|
|
|
|
{
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
if(SioParam[commid].ExtInfo == NULL)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo;
|
|
|
|
|
|
|
|
|
|
if(pPortParam->m_pPrtPortStatus != NULL)
|
|
|
|
|
{
|
|
|
|
|
HEAP_FREE(pPortParam->m_pPrtPortStatus);
|
|
|
|
|
pPortParam->m_pPrtPortStatus = NULL;
|
|
|
|
|
}
|
|
|
|
|
if(pPortParam->m_psProvDev != NULL)
|
|
|
|
|
{
|
|
|
|
|
HEAP_FREE(pPortParam->m_psProvDev);
|
|
|
|
|
pPortParam->m_psProvDev = NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SingleListDelData(&pPortParam->m_sBaoHuData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <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 ScadaProtectBaoHuCmdProcess(int commid, RTUMSG *rtumsg, BOOL bUpData)
|
|
|
|
|
{
|
|
|
|
|
//char szDbg[128];
|
|
|
|
|
//int iProvAddr;
|
|
|
|
|
//PROTECTCONTENTHEAD *ptrProHead;
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if(MSGTYPE_BAOHU_SCADADATA == rtumsg->MsgType)
|
|
|
|
|
//if(bUpData == TRUE)
|
|
|
|
|
{
|
|
|
|
|
if(pPortParam->m_psProvDev != NULL)
|
|
|
|
|
{
|
|
|
|
|
// wen 2006.05.11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTUMSG<53>ṹѹ<E1B9B9><D1B9><EFBFBD>б<EFBFBD>
|
|
|
|
|
//SingleListAddData(&pPortParam->m_sBaoHuData, rtumsg->MsgData, rtumsg->MsgLen);
|
|
|
|
|
SingleListAddData(&pPortParam->m_sBaoHuData, (BYTE *)rtumsg, rtumsg->MsgLen+sizeof(RTUMSGHEAD));
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ScadaProtectGetBaohuDataBase(int commid, int iProvAddr, GROUPDEF **ppBaoHuDB)
|
|
|
|
|
{
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
/////////////////////////ͨ<>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ӿڽ<D3BF><DABD><EFBFBD>///////////////////////////////
|
|
|
|
|
|
|
|
|
|
///////////////////////////<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ӿ<EFBFBD>///////////////////////////
|
|
|
|
|
BOOL InitScadaInfoFromTempletFile(int commid, SCADAPROTECTPORTPARAM *psPortParam,\
|
|
|
|
|
char *ptrTemplate, BOOL bMaster)
|
|
|
|
|
{
|
|
|
|
|
char *ptr;
|
|
|
|
|
char szBuf[512];
|
|
|
|
|
BOOL bVal;
|
|
|
|
|
HDSFILE hFile;
|
|
|
|
|
enum Param_Type ParamType;
|
|
|
|
|
|
|
|
|
|
if(bMaster == TRUE)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
hFile = DSOpenFile(ptrTemplate);
|
|
|
|
|
if(hFile == NULL)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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 = GetProvDevNumFromTemplateFileScada(commid, hFile, psPortParam);
|
|
|
|
|
if(TRUE == bVal)
|
|
|
|
|
{
|
|
|
|
|
if(psPortParam->m_iDevNum > 0)
|
|
|
|
|
{
|
|
|
|
|
// test
|
|
|
|
|
//DebugPrint("malloc provDev.");
|
|
|
|
|
|
|
|
|
|
psPortParam->m_psProvDev = (SCADAPROVDEVDEF *)HEAP_MALLOC(psPortParam->m_iDevNum*sizeof(SCADAPROVDEVDEF));
|
|
|
|
|
if(psPortParam->m_psProvDev == NULL)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_iDevNum = 0;
|
|
|
|
|
}
|
|
|
|
|
memset((void *)psPortParam->m_psProvDev, 0, psPortParam->m_iDevNum*sizeof(SCADAPROVDEVDEF));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case PARAM_DEV:
|
|
|
|
|
bVal = GetProvDevParamFromTemplateFileScada(commid, hFile, psPortParam);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
DSCloseFile(hFile);
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL GetProvDevNumFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTPORTPARAM *psPortParam)
|
|
|
|
|
{
|
|
|
|
|
char *ptr, *ptrSour, *ptrDest;
|
|
|
|
|
char szBuf[512];
|
|
|
|
|
int i, ilen;
|
|
|
|
|
BOOL bRetVal;
|
|
|
|
|
|
|
|
|
|
ptr = DSfgets(szBuf, sizeof(szBuf), hFile);
|
|
|
|
|
|
|
|
|
|
if(ptr == NULL)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// test
|
|
|
|
|
//DebugPrint(szBuf);
|
|
|
|
|
|
|
|
|
|
ptrSour = szBuf;
|
|
|
|
|
|
|
|
|
|
if(strstr(ptrSour, "LINK") == NULL)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bRetVal = FALSE;
|
|
|
|
|
for(i=0; i<4; i++)
|
|
|
|
|
{
|
|
|
|
|
if(GetParamItem(ptrSour, &ptrDest) == FALSE)
|
|
|
|
|
{
|
|
|
|
|
bRetVal = FALSE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
*ptrDest = 0;
|
|
|
|
|
ilen = strlen(ptrSour);
|
|
|
|
|
|
|
|
|
|
switch(i)
|
|
|
|
|
{
|
|
|
|
|
case 0:// <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 1:// <20><>·<EFBFBD><C2B7>ʶ
|
|
|
|
|
break;
|
|
|
|
|
case 2:// <20><>·<EFBFBD><C2B7>ַ
|
|
|
|
|
break;
|
|
|
|
|
case 3:// װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if(ilen > 0)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_iDevNum = atoi(ptrSour);
|
|
|
|
|
bRetVal = TRUE;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 4:// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 5:// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 6:// <20><>ַƫ<D6B7><C6AB>
|
|
|
|
|
break;
|
|
|
|
|
case 7:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 8:// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>վ<EFBFBD><D5BE>
|
|
|
|
|
break;
|
|
|
|
|
case 9:// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 10:// <20>Ƿ<EFBFBD><C7B7>ж<EFBFBD>ASDU<44><55>
|
|
|
|
|
break;
|
|
|
|
|
case 11:// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 12:// <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case 13:// һ<><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ɴ<C9B4><EFA3AC>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><E2B4A6>)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ptrSour = ptrDest+1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return bRetVal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL GetProvDevParamFromTemplateFileScada(int commid, HDSFILE hFile, SCADAPROTECTPORTPARAM *psPortParam)
|
|
|
|
|
{
|
|
|
|
|
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;
|
|
|
|
|
for(i=0; i<psPortParam->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)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->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)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_psProvDev[i].m_iRealCommid = atoi(ptrSour);
|
|
|
|
|
if(GetParamItemEx(ptrSour, &ptr, "&") == FALSE)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_psProvDev[i].m_iStatusStn = 0;
|
|
|
|
|
psPortParam->m_psProvDev[i].m_iStatusPnt = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ptrSour = ptr+1;
|
|
|
|
|
if(strlen(ptrSour) > 0)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_psProvDev[i].m_iStatusStn = atoi(ptrSour);
|
|
|
|
|
if(GetParamItemEx(ptrSour, &ptr, "&") == FALSE)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_psProvDev[i].m_iStatusStn = 0;
|
|
|
|
|
psPortParam->m_psProvDev[i].m_iStatusPnt = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ptrSour = ptr+1;
|
|
|
|
|
if(strlen(ptrSour) > 0)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->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;
|
|
|
|
|
iPntNo = 0;
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(ptrSour, "YX") == 0)
|
|
|
|
|
{
|
|
|
|
|
ParamType = PARAM_YX;
|
|
|
|
|
psPortParam->m_psProvDev[i].m_sYxInfo.m_iPntNum = iNum;
|
|
|
|
|
psPortParam->m_psProvDev[i].m_sYxInfo.m_iStartPntNo = iDiStart;
|
|
|
|
|
psPortParam->m_psProvDev[i].m_sYxInfo.m_iStnNo = 0;
|
|
|
|
|
psPortParam->m_psProvDev[i].m_sYxInfo.m_psDataInfo = NULL;
|
|
|
|
|
iDiStart += iNum;
|
|
|
|
|
iPntNo = 0;
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(ptrSour, "YM") == 0)
|
|
|
|
|
{
|
|
|
|
|
ParamType = PARAM_YM;
|
|
|
|
|
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;
|
|
|
|
|
iPntNo = 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
ptrSour = ptrDest+1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch(ParamType)
|
|
|
|
|
{
|
|
|
|
|
case PARAM_YC:
|
|
|
|
|
break;
|
|
|
|
|
case PARAM_YX:
|
|
|
|
|
break;
|
|
|
|
|
case PARAM_YM:
|
|
|
|
|
break;
|
|
|
|
|
case PARAM_YK:
|
|
|
|
|
break;
|
|
|
|
|
case PARAM_SYNCTIME:
|
|
|
|
|
break;
|
|
|
|
|
case PARAM_ASDU10:
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return bRetVal;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int FindProtectDevFromPntNoScada(SCADAPROTECTPORTPARAM *psPortParam, int iPntNo, int itype)
|
|
|
|
|
{
|
|
|
|
|
int i, ipnt;
|
|
|
|
|
BOOL bRetVal;
|
|
|
|
|
DBORIENTATION *pDataUnit;
|
|
|
|
|
|
|
|
|
|
bRetVal = FALSE;
|
|
|
|
|
if(psPortParam->m_psProvDev == NULL)
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//printf("psPortParam->m_iDevNum = %d\n", psPortParam->m_iDevNum);
|
|
|
|
|
|
|
|
|
|
for(i=0; i<psPortParam->m_iDevNum; i++)
|
|
|
|
|
{
|
|
|
|
|
switch(itype)
|
|
|
|
|
{
|
|
|
|
|
case DI_PNT_TYPE:
|
|
|
|
|
pDataUnit = &psPortParam->m_psProvDev[i].m_sYxInfo;
|
|
|
|
|
break;
|
|
|
|
|
case AI_PNT_TYPE:
|
|
|
|
|
case PI_PNT_TYPE:
|
|
|
|
|
default:
|
|
|
|
|
pDataUnit = NULL;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if(pDataUnit == NULL)
|
|
|
|
|
{
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//printf("pDataUnit->m_iStartPntNo=%d, pDataUnit->m_iPntNum=%d\n",
|
|
|
|
|
// pDataUnit->m_iStartPntNo, pDataUnit->m_iPntNum);
|
|
|
|
|
|
|
|
|
|
ipnt = iPntNo - pDataUnit->m_iStartPntNo;
|
|
|
|
|
if((ipnt >= 0) && (ipnt < pDataUnit->m_iPntNum))
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(i >= psPortParam->m_iDevNum)
|
|
|
|
|
{
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return i;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
/////////////////////////////<2F><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><EFBFBD>ӿڽ<D3BF><DABD><EFBFBD>///////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void ScadaProtectProvMakeYkYtCommand(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>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
///////////////////////<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>///////////////////////////
|
|
|
|
|
//*******************************************************************************/
|
|
|
|
|
//* <09><><EFBFBD>ͻ<EFBFBD><CDBB>˵<EFBFBD>ǰ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>еı<D0B5><C4B1>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTUMSG* hostmsg:ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
//* ORTUMSG* userdata:ת<><D7AA>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
//*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
|
|
|
|
|
//*******************************************************************************/
|
|
|
|
|
void AllNetToHostByteSequence(PROTECTMSG *userdata)
|
|
|
|
|
{
|
|
|
|
|
u_32 iOffset;
|
|
|
|
|
pPROTECTCONTENTHEAD ptrContent;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
char szbuf[256];
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgType, sizeof(u_32));
|
|
|
|
|
SequenceNetToHost((char *)&userdata->PortNumber, sizeof(u_32));
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgLen, sizeof(u_32));
|
|
|
|
|
switch(userdata->MsgType)
|
|
|
|
|
{
|
|
|
|
|
case pPFV_PROTECT_BYPASS://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ptrContent = (pPROTECTCONTENTHEAD)(userdata->MsgData);
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|
|
|
|
SequenceNetToHost((char *)&ptrContent->uAddr, sizeof(u_32));
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
SequenceNetToHost((char *)&ptrContent->uFuncCode, sizeof(u_32));
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|
|
|
|
SequenceNetToHost((char *)&ptrContent->ummid, sizeof(u_32));
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
SequenceNetToHost((char *)&ptrContent->uReserved, sizeof(u_32));
|
|
|
|
|
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
//ptrContent->cFixNo;
|
|
|
|
|
//CPU <20><>
|
|
|
|
|
//ptrContent->cCPUNo;
|
|
|
|
|
iOffset = sizeof(PROTECTCONTENTHEAD);
|
|
|
|
|
switch(ptrContent->uFuncCode)
|
|
|
|
|
{
|
|
|
|
|
case hREADFIX://<2F><>ȡ<EFBFBD><C8A1>ֵ
|
|
|
|
|
case hREADPAI:// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
|
|
|
|
|
case hREADPDI:// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case hQUERYFAULT:// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
|
|
|
|
|
case hQUERYSELFCHECK:// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>Լ챨<D4BC><ECB1A8>
|
|
|
|
|
break;
|
|
|
|
|
case hREADFIXNO://<2F><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
case hREADPWAVE:// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hWRITEALLFIX:// <20>ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
for(; iOffset<userdata->MsgLen;)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
switch(userdata->MsgData[iOffset++] & 0x7F)
|
|
|
|
|
{
|
|
|
|
|
case DATATYPE_AI:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(ռ<><D5BC>λ<EFBFBD><CEBB>)
|
|
|
|
|
iOffset++;
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
break;
|
|
|
|
|
case DATATYPE_DI:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(ռ<><D5BC>λ<EFBFBD><CEBB>)
|
|
|
|
|
iOffset++;
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
break;
|
|
|
|
|
case DATATYPE_STRING:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<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>");
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hWRITESPECIALFIX:// <20><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
for(;iOffset<userdata->MsgLen;)
|
|
|
|
|
{
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
switch(userdata->MsgData[iOffset++] & 0x7F)
|
|
|
|
|
{
|
|
|
|
|
case DATATYPE_AI:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(ռ<><D5BC>λ<EFBFBD><CEBB>)
|
|
|
|
|
iOffset++;
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
break;
|
|
|
|
|
case DATATYPE_DI:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(ռ<><D5BC>λ<EFBFBD><CEBB>)
|
|
|
|
|
iOffset++;
|
|
|
|
|
SequenceNetToHost((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
break;
|
|
|
|
|
case DATATYPE_STRING:
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<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>");
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hWRITEFIXNO:// <20>ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|
|
|
|
break;
|
|
|
|
|
case hRESETPROTECT:// <20><><EFBFBD><EFBFBD><EFBFBD>źŸ<C5BA><C5B8><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hCHECKTIME:// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ
|
|
|
|
|
break;
|
|
|
|
|
case hBROADCASTCHECKTIME:// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ù㲥<C3B9><E3B2A5>ʱ
|
|
|
|
|
break;
|
|
|
|
|
case hCANCEL:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case fPFV_NETACTIVE://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//*******************************************************************************/
|
|
|
|
|
//* <09><>ǰ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>еı<D0B5><C4B1>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
//*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RTUMSG* userdata:ת<><D7AA>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
//* ORTUMSG* hostmsg:ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
//*<2A><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD> */
|
|
|
|
|
//*******************************************************************************/
|
|
|
|
|
void AllHostToNetByteSequence(PROTECTMSG *userdata)
|
|
|
|
|
{
|
|
|
|
|
u_short u_shortLen;
|
|
|
|
|
u_32 uDataLen, datatype, msgtype, uFuncCode;
|
|
|
|
|
u_32 iOffset;
|
|
|
|
|
pPROTECTCONTENTHEAD ptrContent;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
char szbuf[512];
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
uDataLen = userdata->MsgLen;
|
|
|
|
|
msgtype = userdata->MsgType;
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgType, sizeof(u_32));
|
|
|
|
|
SequenceHostToNet((char *)&userdata->PortNumber, sizeof(u_32));
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgLen, sizeof(u_32));
|
|
|
|
|
|
|
|
|
|
switch(msgtype)
|
|
|
|
|
{
|
|
|
|
|
case fPFV_PROTECT_BYPASS_ACK://ǰ<>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ptrContent = (pPROTECTCONTENTHEAD)(userdata->MsgData);
|
|
|
|
|
uFuncCode = ptrContent->uFuncCode;
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|
|
|
|
SequenceHostToNet((char *)&ptrContent->uAddr, sizeof(u_32));
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
SequenceHostToNet((char *)&ptrContent->uFuncCode, sizeof(u_32));
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|
|
|
|
SequenceHostToNet((char *)&ptrContent->ummid, sizeof(u_32));
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|
|
|
|
SequenceHostToNet((char *)&ptrContent->uReserved, sizeof(u_32));
|
|
|
|
|
//<2F><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
//ptrContent->cFixNo;
|
|
|
|
|
//CPU <20><>
|
|
|
|
|
//ptrContent->cCPUNo;
|
|
|
|
|
iOffset = sizeof(PROTECTCONTENTHEAD);
|
|
|
|
|
switch(uFuncCode)
|
|
|
|
|
{
|
|
|
|
|
case hREADINGDATA:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hFIXDATAWITHNO:// <20><>ֵ<EFBFBD><D6B5><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
datatype = userdata->MsgData[iOffset++];
|
|
|
|
|
|
|
|
|
|
for(;iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
switch(datatype)
|
|
|
|
|
{
|
|
|
|
|
case ITEM_ATTR_REALVALUE:// ʵ<><CAB5>ֵ
|
|
|
|
|
case ITEM_ATTR_DEFAULTVALUE:// ȱʡֵ
|
|
|
|
|
case ITEM_ATTR_MINMAXSTEP:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_PRECISION:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_FIGURE:// <20><> <20><>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(WORD)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(WORD));
|
|
|
|
|
iOffset += sizeof(WORD);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
switch(userdata->MsgData[iOffset] & 0x7F)
|
|
|
|
|
{
|
|
|
|
|
case DATATYPE_AI:
|
|
|
|
|
case DATATYPE_DI:
|
|
|
|
|
iOffset++;
|
|
|
|
|
if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case DATATYPE_STRING:
|
|
|
|
|
iOffset++;
|
|
|
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_UNIT:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_DESCRIPTION:// <20><> <20><>
|
|
|
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
//userdata->MsgData[iOffset];
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_RATE:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_LIST:// <20><> <20><>
|
|
|
|
|
default:
|
|
|
|
|
iOffset = uDataLen;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<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>");
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hPAIDATAWITHNO: // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hPDIDATAWITHNO: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hFIXDATA:// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
datatype = userdata->MsgData[iOffset++];
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(;iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
switch(datatype)
|
|
|
|
|
{
|
|
|
|
|
case ITEM_ATTR_REALVALUE:// ʵ<><CAB5>ֵ
|
|
|
|
|
case ITEM_ATTR_DEFAULTVALUE:// ȱʡֵ
|
|
|
|
|
case ITEM_ATTR_MINMAXSTEP:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_PRECISION:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_FIGURE:// <20><> <20><>
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
switch(userdata->MsgData[iOffset] & 0x7F)
|
|
|
|
|
{
|
|
|
|
|
case DATATYPE_AI:
|
|
|
|
|
case DATATYPE_DI:
|
|
|
|
|
iOffset++;
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case DATATYPE_STRING:
|
|
|
|
|
iOffset++;
|
|
|
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_UNIT:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_DESCRIPTION:// <20><> <20><>
|
|
|
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_RATE:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_LIST:// <20><> <20><>
|
|
|
|
|
default:
|
|
|
|
|
iOffset = uDataLen;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<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>");
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hREADDATAEND:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hNORESPONSE:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
break;
|
|
|
|
|
case hSYSTEMBUSY:// <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>æ<EFBFBD><C3A6><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hFIXNODATA:// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hPAIDATA:// <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
datatype = userdata->MsgData[iOffset++];
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(;iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
switch(datatype)
|
|
|
|
|
{
|
|
|
|
|
case ITEM_ATTR_REALVALUE:// ʵ<><CAB5>ֵ
|
|
|
|
|
case ITEM_ATTR_DEFAULTVALUE:// ȱʡֵ
|
|
|
|
|
case ITEM_ATTR_MINMAXSTEP:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_PRECISION:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_FIGURE:// <20><> <20><>
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_UNIT:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_DESCRIPTION:// <20><> <20><>
|
|
|
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_RATE:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_LIST:// <20><> <20><>
|
|
|
|
|
default:
|
|
|
|
|
iOffset = uDataLen;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<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>");
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hPDIDATA:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
datatype = userdata->MsgData[iOffset++];
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(; iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
switch(datatype)
|
|
|
|
|
{
|
|
|
|
|
case ITEM_ATTR_REALVALUE:// ʵ<><CAB5>ֵ
|
|
|
|
|
case ITEM_ATTR_DEFAULTVALUE:// ȱʡֵ
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
iOffset++;
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_UNIT:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_DESCRIPTION:// <20><> <20><>
|
|
|
|
|
// <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>(ռ<><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>)
|
|
|
|
|
// <20><>ֵ
|
|
|
|
|
if((iOffset + userdata->MsgData[iOffset] + 1) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset] + 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case ITEM_ATTR_MINMAXSTEP:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_PRECISION:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_FIGURE:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_RATE:// <20><> <20><>
|
|
|
|
|
case ITEM_ATTR_LIST:// <20><> <20><>
|
|
|
|
|
default:
|
|
|
|
|
iOffset = uDataLen;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<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>");
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hPWAVEDATASTART:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD>ʼ
|
|
|
|
|
break;
|
|
|
|
|
case hPWAVEDATA:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
/*
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(WORD));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(WORD));
|
|
|
|
|
iOffset += sizeof(WORD);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//ת<><D7AA>ʱ
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><CEA2>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(;iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
if((iOffset + sizeof(float)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(float));
|
|
|
|
|
iOffset += sizeof(float);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
break;
|
|
|
|
|
case hPWAVEDATAEND:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case hPEVENTDATAWITHID:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA>ʱ
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ת<><D7AA><EFBFBD><CEA2>
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(;iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
|
|
|
|
if(userdata->MsgData[iOffset] > 0)
|
|
|
|
|
{
|
|
|
|
|
iOffset += userdata->MsgData[iOffset]+1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
iOffset++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hPEVENTDATAWITHSTRING:// <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
for(; iOffset<uDataLen;)
|
|
|
|
|
{
|
|
|
|
|
//ת<><D7AA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
u_shortLen = *(u_short*)&userdata->MsgData[iOffset];
|
|
|
|
|
if((iOffset + sizeof(u_short)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_short));
|
|
|
|
|
iOffset += sizeof(u_short);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
//<2F>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
if((iOffset + u_shortLen) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
iOffset += u_shortLen;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset + u_shortLen);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case hWRITEFIXACK:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵȷ<D6B5><C8B7>
|
|
|
|
|
break;
|
|
|
|
|
case hWRITEFIXNAK:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7>
|
|
|
|
|
break;
|
|
|
|
|
case hWRITEFIXNOACK:// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
|
|
|
|
|
break;
|
|
|
|
|
case hWRITEFIXNONAK:// <20><>ֵ<EFBFBD><D6B5><EFBFBD>IJ<DEB8>ȷ<EFBFBD><C8B7>
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case fPFV_NETACTIVE://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case fPFV_STATUS://ǰ<>û<EFBFBD>״̬<D7B4><CCAC>
|
|
|
|
|
iOffset = 0;
|
|
|
|
|
//ǰ<>û<EFBFBD>A״̬
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//ǰ<>û<EFBFBD>B״̬
|
|
|
|
|
if((iOffset + sizeof(u_32)) < MAX_RTU_MSG_SIZE)
|
|
|
|
|
{
|
|
|
|
|
SequenceHostToNet((char *)&userdata->MsgData[iOffset], sizeof(u_32));
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "AllHostToNetByteSequence<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ濽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><EFBFBD><EFBFBD>%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>δ<EFBFBD><CEB4><EFBFBD>", iOffset);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
userdata->MsgLen = 0;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScadaProtectProcessData(int commid, SCADAPROTECTPORTPARAM *psPortParam, BOOL bProcess)
|
|
|
|
|
{
|
|
|
|
|
PROTECTMSG msg;
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
if(FALSE == GetPortParamPtr(commid, &pPortParam))
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
pPortParam = psPortParam;
|
|
|
|
|
|
|
|
|
|
if(TRUE == bProcess)
|
|
|
|
|
{
|
|
|
|
|
memcpy((void *)&msg, psPortParam->m_achRecvBuf+6, pPortParam->m_iRecvLen-6);
|
|
|
|
|
AllNetToHostByteSequence(&msg);
|
|
|
|
|
|
|
|
|
|
// <20><>վ<EFBFBD><D5BE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|
|
|
|
if(PROTOCOL_MASTER == pPortParam->m_psBaoHu->PortType)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><>վ<EFBFBD><D5BE><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|
|
|
|
switch(msg.MsgType)
|
|
|
|
|
{
|
|
|
|
|
case pPFV_PROTECT_BYPASS:// <20><><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EEB4A6>
|
|
|
|
|
ScadaProtectByPassData(commid, pPortParam, &msg);
|
|
|
|
|
break;
|
|
|
|
|
case fPFV_PROTECT_BYPASS_ACK: // <20><><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>
|
|
|
|
|
break;
|
|
|
|
|
case fPFV_NETACTIVE:// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB6AF>
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ReduceTimeOut(SCADAPROTECTPORTPARAM *psPortParam)
|
|
|
|
|
{
|
|
|
|
|
int i, iMaxPort;
|
|
|
|
|
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus == NULL)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
iMaxPort = GetMaxPort();
|
|
|
|
|
for(i=0; i<iMaxPort; i++)
|
|
|
|
|
{
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus[i].timeOut > 0)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_pPrtPortStatus[i].timeOut--;
|
|
|
|
|
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus[i].timeOut <= 0)
|
|
|
|
|
{
|
|
|
|
|
psPortParam->m_pPrtPortStatus[i].mmid = 0xFFFFFFFF;
|
|
|
|
|
psPortParam->m_pPrtPortStatus[i].bPortIdle = TRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL IsProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam)
|
|
|
|
|
{
|
|
|
|
|
if((commid < 0) || (commid > GetMaxPort()))
|
|
|
|
|
{
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus == NULL)
|
|
|
|
|
{
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return psPortParam->m_pPrtPortStatus[commid].bPortIdle;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL GetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTATUS *pStatus)
|
|
|
|
|
{
|
|
|
|
|
if((commid < 0) || (commid > GetMaxPort()))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus == NULL)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pStatus->mmid = psPortParam->m_pPrtPortStatus[commid].mmid;
|
|
|
|
|
pStatus->timeOut = psPortParam->m_pPrtPortStatus[commid].timeOut;
|
|
|
|
|
pStatus->bPortIdle = psPortParam->m_pPrtPortStatus[commid].bPortIdle;
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SetProtectPortIdle(int commid, SCADAPROTECTPORTPARAM *psPortParam, PORTSTATUS *pStatus)
|
|
|
|
|
{
|
|
|
|
|
if((commid < 0) || (commid > GetMaxPort()))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus == NULL)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// wen 2005.06.22 <20><>uclinuxϵͳ<CFB5><CDB3>,<2C><>ʼ<EFBFBD><CABC>ʱȫ<CAB1><C8AB>Ϊ0
|
|
|
|
|
/*
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus[commid].bPortIdle == FALSE)
|
|
|
|
|
{
|
|
|
|
|
if(psPortParam->m_pPrtPortStatus[commid].mmid != pStatus->mmid)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
psPortParam->m_pPrtPortStatus[commid].bPortIdle = pStatus->bPortIdle;
|
|
|
|
|
psPortParam->m_pPrtPortStatus[commid].mmid = pStatus->mmid;
|
|
|
|
|
psPortParam->m_pPrtPortStatus[commid].timeOut = pStatus->timeOut;
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
//printf("Idle1(port%d): Idle=%d, mmid=%d, timeout=%d\n", commid+1,
|
|
|
|
|
// pStatus->bPortIdle, pStatus->mmid, pStatus->timeOut);
|
|
|
|
|
|
|
|
|
|
psPortParam->m_pPrtPortStatus[commid].bPortIdle = pStatus->bPortIdle;
|
|
|
|
|
psPortParam->m_pPrtPortStatus[commid].mmid = pStatus->mmid;
|
|
|
|
|
psPortParam->m_pPrtPortStatus[commid].timeOut = pStatus->timeOut;
|
|
|
|
|
|
|
|
|
|
//printf("Idle2(port%d): Idle=%d, mmid=%d, timeout=%d\n", commid+1,
|
|
|
|
|
// psPortParam->m_pPrtPortStatus[commid].bPortIdle,
|
|
|
|
|
// psPortParam->m_pPrtPortStatus[commid].mmid,
|
|
|
|
|
// psPortParam->m_pPrtPortStatus[commid].timeOut);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL SetProtectPortIdleEx(int commid, int iBaoHuCommid, PORTSTATUS *pStatus)
|
|
|
|
|
{
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
if((iBaoHuCommid < 0) || (iBaoHuCommid > GetMaxPort()))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[iBaoHuCommid].ExtInfo;
|
|
|
|
|
|
|
|
|
|
if(pPortParam->m_pPrtPortStatus == NULL)
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if((commid < 0) || (commid > GetMaxPort()))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//printf("Idle1(port%d): Idle=%d, mmid=%d, timeout=%d\n", commid+1,
|
|
|
|
|
// pStatus->bPortIdle, pStatus->mmid, pStatus->timeOut);
|
|
|
|
|
|
|
|
|
|
pPortParam->m_pPrtPortStatus[commid].bPortIdle = pStatus->bPortIdle;
|
|
|
|
|
pPortParam->m_pPrtPortStatus[commid].mmid = pStatus->mmid;
|
|
|
|
|
pPortParam->m_pPrtPortStatus[commid].timeOut = pStatus->timeOut;
|
|
|
|
|
|
|
|
|
|
//printf("Idle2(port%d): Idle=%d, mmid=%d, timeout=%d\n", commid+1,
|
|
|
|
|
// pPortParam->m_pPrtPortStatus[commid].bPortIdle,
|
|
|
|
|
// pPortParam->m_pPrtPortStatus[commid].mmid,
|
|
|
|
|
// pPortParam->m_pPrtPortStatus[commid].timeOut);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SendResponsetoMMI(int commid, int mmid, u_32 ResponseType, PROTECTMSG *pmsg)
|
|
|
|
|
{
|
|
|
|
|
PROTECTMSG mmimsg;
|
|
|
|
|
pPROTECTCONTENTHEAD ptrProHead, pSourProHead;
|
|
|
|
|
|
|
|
|
|
memset((void*)&mmimsg, 0, sizeof(PROTECTMSG));
|
|
|
|
|
mmimsg.MsgType = fPFV_PROTECT_BYPASS_ACK;
|
|
|
|
|
ptrProHead = (pPROTECTCONTENTHEAD)mmimsg.MsgData;
|
|
|
|
|
if(pmsg != NULL)
|
|
|
|
|
{
|
|
|
|
|
pSourProHead = (pPROTECTCONTENTHEAD)pmsg->MsgData;
|
|
|
|
|
mmimsg.PortNumber = pmsg->PortNumber;
|
|
|
|
|
|
|
|
|
|
//memcpy(mmimsg.MsgData, rtumsg->MsgData, 10);
|
|
|
|
|
ptrProHead->cCPUNo = pSourProHead->cCPUNo;
|
|
|
|
|
ptrProHead->cFixNo = pSourProHead->cFixNo;
|
|
|
|
|
ptrProHead->uAddr = pSourProHead->uAddr;
|
|
|
|
|
ptrProHead->uFuncCode = pSourProHead->uFuncCode;
|
|
|
|
|
ptrProHead->ummid = pSourProHead->ummid;
|
|
|
|
|
ptrProHead->uReserved = pSourProHead->uReserved;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
switch(ResponseType)
|
|
|
|
|
{
|
|
|
|
|
case hREADINGDATA: // <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
|
|
|
|
case hREADDATAEND: // <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case hSYSTEMBUSY: // <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>æ
|
|
|
|
|
case hNORESPONSE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
|
|
|
|
ptrProHead->ummid = mmid;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ptrProHead->uFuncCode = ResponseType;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>λ
|
|
|
|
|
mmimsg.MsgLen = sizeof(PROTECTCONTENTHEAD);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(mmimsg.MsgLen > 0)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|
|
|
|
//SendDataToPort(commid, (char *)&mmimsg, sizeof(PROTECTMSGHEAD)+mmimsg.MsgLen);
|
|
|
|
|
FormatDataAndSend(commid, &mmimsg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <20><>103<30><33>Լ<EFBFBD><D4BC>ʽת<CABD><D7AA><EFBFBD><EFBFBD>scada<64>ڲ<EFBFBD><DAB2><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķ˿<C4B6>
|
|
|
|
|
BOOL ScadaProtectConvertToScadaFrameAndSend(int commid)
|
|
|
|
|
{
|
|
|
|
|
// SendDataToPort(commid, (char *)&mmimsg, sizeof(PROTECTMSGHEAD)+mmimsg.MsgLen);
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ת<><D7AA><EFBFBD><EFBFBD>103<30><33>Լ<EFBFBD><D4BC>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ķ˿<C4B6>
|
|
|
|
|
BOOL ScadaProtectConvertTo103AndSend(int commid, PROTECTMSG *pmsg)
|
|
|
|
|
{
|
|
|
|
|
PROTECTCONTENTHEAD *ptrProHead;
|
|
|
|
|
|
|
|
|
|
ptrProHead = (PROTECTCONTENTHEAD *)pmsg->MsgData;
|
|
|
|
|
|
|
|
|
|
switch(ptrProHead->uFuncCode)
|
|
|
|
|
{
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ֵ
|
|
|
|
|
case hREADFIX:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|
|
|
|
case hREADFIXNO:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>
|
|
|
|
|
case hREADPAI:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case hREADPDI:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case hREADPWAVE:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>
|
|
|
|
|
case hQUERYFAULT:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>Լ챨<D4BC><ECB1A8>
|
|
|
|
|
case hQUERYSELFCHECK:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20>ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
case hWRITEALLFIX:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
case hWRITESPECIALFIX:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵȷ<D6B5><C8B7>
|
|
|
|
|
case hWRITEFIXACK:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7>
|
|
|
|
|
case hWRITEFIXNAK:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20>ı<DEB8><C4B1><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>
|
|
|
|
|
case hWRITEFIXNO:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7>
|
|
|
|
|
case hWRITEFIXNOACK:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><>ֵ<EFBFBD><D6B5><EFBFBD>IJ<DEB8>ȷ<EFBFBD><C8B7>
|
|
|
|
|
case hWRITEFIXNONAK:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>źŸ<C5BA><C5B8><EFBFBD>
|
|
|
|
|
case hRESETPROTECT:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ö<EFBFBD>ʱ
|
|
|
|
|
case hCHECKTIME:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>װ<EFBFBD>ù㲥<C3B9><E3B2A5>ʱ
|
|
|
|
|
case hBROADCASTCHECKTIME:
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
|
|
|
|
case hCANCEL:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ScadaProtectByPassData(int commid, SCADAPROTECTPORTPARAM *psPortParam, PROTECTMSG *pmsg)
|
|
|
|
|
{
|
|
|
|
|
int mmid, port;
|
|
|
|
|
RTUMSG rtumsg;
|
|
|
|
|
PORTSTATUS sPortStatus;
|
|
|
|
|
PROTECTCONTENTHEAD *ptrProHead;
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
pPortParam = psPortParam;
|
|
|
|
|
|
|
|
|
|
ptrProHead = (PROTECTCONTENTHEAD *)pmsg->MsgData;
|
|
|
|
|
|
|
|
|
|
port = pmsg->PortNumber;
|
|
|
|
|
mmid = 0;
|
|
|
|
|
|
|
|
|
|
if(ptrProHead->uFuncCode == hCANCEL)
|
|
|
|
|
{
|
|
|
|
|
SendResponsetoMMI(commid, mmid, hREADDATAEND, pmsg);
|
|
|
|
|
sPortStatus.bPortIdle = TRUE;
|
|
|
|
|
sPortStatus.mmid = 0xFFFFFFFF;
|
|
|
|
|
sPortStatus.timeOut = 0;
|
|
|
|
|
SetProtectPortIdle(port, pPortParam, &sPortStatus);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(GetProtectPortIdle(port, pPortParam, &sPortStatus) == FALSE)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// wen 2005.06.22 Debug
|
|
|
|
|
//DispPrtPortStatus(commid, pPortParam);
|
|
|
|
|
|
|
|
|
|
if(sPortStatus.bPortIdle == FALSE)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>æ
|
|
|
|
|
SendResponsetoMMI(commid, mmid, hSYSTEMBUSY, pmsg);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if((sPortStatus.mmid != 0xffffffff)
|
|
|
|
|
&& (mmid != (int)sPortStatus.mmid))
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD>æ
|
|
|
|
|
SendResponsetoMMI(commid, mmid, hSYSTEMBUSY, pmsg);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rtumsg.MsgLen = sizeof(PROTECTMSGHEAD)+pmsg->MsgLen;
|
|
|
|
|
rtumsg.PortIdx = commid;
|
|
|
|
|
rtumsg.MsgType = MSGTYPE_BAOHU_SCADACMD;
|
|
|
|
|
memcpy(rtumsg.MsgData, (void *)pmsg, rtumsg.MsgLen);
|
|
|
|
|
//PutBaohuDataToPort(&rtumsg);
|
|
|
|
|
|
|
|
|
|
SendProtectCmdToDev(port, &rtumsg);
|
|
|
|
|
|
|
|
|
|
sPortStatus.bPortIdle = FALSE;
|
|
|
|
|
sPortStatus.mmid = mmid;
|
|
|
|
|
sPortStatus.timeOut = OPERPROTECTTIMEOUT*1000/TIMER_CNT;
|
|
|
|
|
SetProtectPortIdle(port, pPortParam, &sPortStatus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL FormatDataAndSend(int commid, PROTECTMSG *pmsg)
|
|
|
|
|
{
|
|
|
|
|
int iDataLen;
|
|
|
|
|
char buf[4096];
|
|
|
|
|
|
|
|
|
|
iDataLen = 6+sizeof(PROTECTMSGHEAD)+pmsg->MsgLen;
|
|
|
|
|
if(iDataLen > sizeof(buf))
|
|
|
|
|
{
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AllHostToNetByteSequence(pmsg);
|
|
|
|
|
|
|
|
|
|
memcpy(buf, SyncWordEB, 6);
|
|
|
|
|
memcpy(buf+6, (void *)pmsg, iDataLen-6);
|
|
|
|
|
SendDataToPort(commid, buf, iDataLen);
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MakeInteractionCmd(int commid, int sourcommid, u_32 ResponseFunc, PROTECTCONTENTHEAD *pSourHead, BOOL bBoardCast)
|
|
|
|
|
{
|
|
|
|
|
PROTECTMSG msg;
|
|
|
|
|
pPROTECTCONTENTHEAD ptrProHead;
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
char szbuf[256];
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
msg.MsgLen = 0;
|
|
|
|
|
memset((void*)&msg, 0, sizeof(PROTECTMSG));
|
|
|
|
|
msg.MsgType = fPFV_PROTECT_BYPASS_ACK;
|
|
|
|
|
msg.PortNumber = sourcommid;
|
|
|
|
|
|
|
|
|
|
ptrProHead = (pPROTECTCONTENTHEAD)msg.MsgData;
|
|
|
|
|
// <20>㲥<EFBFBD><E3B2A5><EFBFBD><EFBFBD>
|
|
|
|
|
if(bBoardCast == TRUE)
|
|
|
|
|
{
|
|
|
|
|
ptrProHead->ummid = 0xffffffff;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ptrProHead->uFuncCode = ResponseFunc;
|
|
|
|
|
ptrProHead->uAddr = pSourHead->uAddr;
|
|
|
|
|
ptrProHead->ummid = pSourHead->ummid;
|
|
|
|
|
ptrProHead->cCPUNo = pSourHead->cCPUNo;
|
|
|
|
|
ptrProHead->cFixNo = pSourHead->cFixNo;
|
|
|
|
|
ptrProHead->uReserved = 0;
|
|
|
|
|
|
|
|
|
|
switch(ResponseFunc)
|
|
|
|
|
{
|
|
|
|
|
case hREADINGDATA: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case hPWAVEDATASTART: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD>ʼ
|
|
|
|
|
case hREADDATAEND: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
case hPWAVEDATAEND: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|
|
|
|
case hWRITEFIXNAK: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ȷ<EFBFBD><C8B7>
|
|
|
|
|
case hWRITEFIXNONAK: // <20><>ֵ<EFBFBD><D6B5><EFBFBD>IJ<DEB8>ȷ<EFBFBD><C8B7>
|
|
|
|
|
case hNORESPONSE: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
|
|
|
|
|
msg.MsgLen = sizeof(PROTECTCONTENTHEAD);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
#ifdef _DEBUG_MSG_
|
|
|
|
|
sprintf(szbuf, "<EFBFBD>˿<EFBFBD>%d <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ч<EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD><EFBFBD><EFBFBD>=%d!!!\n", commid, ResponseFunc);
|
|
|
|
|
DebugPrint(szbuf);
|
|
|
|
|
#endif
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(msg.MsgLen > 0)
|
|
|
|
|
{
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|
|
|
|
//SendDataToPort(commid, (char *)&msg, sizeof(PROTECTMSGHEAD)+msg.MsgLen);
|
|
|
|
|
FormatDataAndSend(commid, &msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MakeNetActivePacket(int commid)
|
|
|
|
|
{
|
|
|
|
|
PROTECTMSG msg;
|
|
|
|
|
|
|
|
|
|
msg.PortNumber = commid;
|
|
|
|
|
msg.MsgType = fPFV_NETACTIVE;
|
|
|
|
|
msg.MsgLen = 0;
|
|
|
|
|
|
|
|
|
|
//SendDataToPort(commid, (char *)&msg, sizeof(PROTECTMSGHEAD)+msg.MsgLen);
|
|
|
|
|
FormatDataAndSend(commid, &msg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void MakeStatusPacket(int commid)
|
|
|
|
|
{
|
|
|
|
|
u_32 *puData;
|
|
|
|
|
PROTECTMSG msg;
|
|
|
|
|
|
|
|
|
|
msg.PortNumber = commid;
|
|
|
|
|
msg.MsgType = fPFV_STATUS;
|
|
|
|
|
puData = (u_32 *)msg.MsgData;
|
|
|
|
|
|
|
|
|
|
*puData = 1;
|
|
|
|
|
//SequenceHostToNet((char *)puData, sizeof(u_32));
|
|
|
|
|
*(puData+1) = 0;
|
|
|
|
|
//SequenceHostToNet((char *)(puData+1), sizeof(u_32));
|
|
|
|
|
msg.MsgLen = sizeof(u_32) * 2;
|
|
|
|
|
|
|
|
|
|
//SendDataToPort(commid, (char *)&msg, sizeof(PROTECTMSGHEAD)+msg.MsgLen);
|
|
|
|
|
FormatDataAndSend(commid, &msg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
BOOL MakeSoeDataPacket(int commid)
|
|
|
|
|
{
|
|
|
|
|
WORD *pwValue;
|
|
|
|
|
u_32 *puValue;
|
|
|
|
|
int iDevNo, iOffset;
|
|
|
|
|
SOE_DEF sSoeData;
|
|
|
|
|
char szExtend[128];
|
|
|
|
|
PROTECTMSG msg;
|
|
|
|
|
PROTECTCONTENTHEAD *pProHead;
|
|
|
|
|
SCADAPROTECTPORTPARAM *pPortParam;
|
|
|
|
|
|
|
|
|
|
pPortParam = (SCADAPROTECTPORTPARAM *)SioParam[commid].ExtInfo;
|
|
|
|
|
|
|
|
|
|
msg.MsgType = fPFV_PROTECT_BYPASS_ACK;
|
|
|
|
|
|
|
|
|
|
ProvAndDelGetSoeData(commid, &sSoeData);
|
|
|
|
|
|
|
|
|
|
iDevNo = FindProtectDevFromPntNoScada(pPortParam, sSoeData.iPntNo, DI_PNT_TYPE);
|
|
|
|
|
|
|
|
|
|
// Debug
|
|
|
|
|
//printf("commid=%d sSoeData.iPntNo=%d, iDevNo=%d\n", commid, sSoeData.iPntNo, iDevNo);
|
|
|
|
|
|
|
|
|
|
if(iDevNo >= 0)
|
|
|
|
|
{
|
|
|
|
|
msg.PortNumber = pPortParam->m_psProvDev[iDevNo].m_iRealCommid-1;
|
|
|
|
|
pProHead = (PROTECTCONTENTHEAD *)msg.MsgData;
|
|
|
|
|
pProHead->ummid = 0xFFFFFFFF;
|
|
|
|
|
pProHead->uAddr = pPortParam->m_psProvDev[iDevNo].m_iProvAddr;
|
|
|
|
|
pProHead->cCPUNo = (char)0xFF;
|
|
|
|
|
pProHead->cFixNo = (char)0xFF;
|
|
|
|
|
pProHead->uFuncCode = hPEVENTDATAWITHID;
|
|
|
|
|
pProHead->uReserved = 0;
|
|
|
|
|
iOffset = sizeof(PROTECTCONTENTHEAD);
|
|
|
|
|
pwValue = (WORD *)&msg.MsgData[iOffset];
|
|
|
|
|
*pwValue = sSoeData.SoeTime.Year;
|
|
|
|
|
*(pwValue+1) = sSoeData.SoeTime.Month;
|
|
|
|
|
*(pwValue+2) = sSoeData.SoeTime.Day;
|
|
|
|
|
*(pwValue+3) = sSoeData.SoeTime.Hour;
|
|
|
|
|
*(pwValue+4) = sSoeData.SoeTime.Min;
|
|
|
|
|
*(pwValue+5) = sSoeData.SoeTime.Sec;
|
|
|
|
|
iOffset += sizeof(WORD)*6;
|
|
|
|
|
puValue = (u_32 *)&msg.MsgData[iOffset];
|
|
|
|
|
*puValue = sSoeData.SoeTime.mSec;
|
|
|
|
|
iOffset += sizeof(u_32);
|
|
|
|
|
pwValue = (WORD *)&msg.MsgData[iOffset];
|
|
|
|
|
// <20><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>Ϊfun<75><6E>inf
|
|
|
|
|
//*pwValue = sSoeData.iPntNo - pPortParam->m_psProvDev[iDevNo].m_sYxInfo.m_iStartPntNo + 1;
|
|
|
|
|
*pwValue = (WORD)(((sSoeData.u8ProvFun<<8) + sSoeData.u8ProvInf) & 0x0000FFFF);
|
|
|
|
|
if((*pwValue) == 0)
|
|
|
|
|
{
|
|
|
|
|
*pwValue = sSoeData.iPntNo - pPortParam->m_psProvDev[iDevNo].m_sYxInfo.m_iStartPntNo + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
iOffset += sizeof(WORD);
|
|
|
|
|
|
|
|
|
|
// <<< <20><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
//if(sSoeData.u8Type == 2)
|
|
|
|
|
//{
|
|
|
|
|
// sprintf(szExtend, "<<3C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>[%d],<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%d]>", sSoeData.wRelativeTime, sSoeData.wFaultNo);
|
|
|
|
|
// msg.MsgData[iOffset] = strlen(szExtend);
|
|
|
|
|
// memcpy((void *)&msg.MsgData[iOffset+1], szExtend, msg.MsgData[iOffset]);
|
|
|
|
|
// iOffset += msg.MsgData[iOffset]+1;
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// msg.MsgData[iOffset++] = 0;
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
if(sSoeData.bStatus == 1)
|
|
|
|
|
{
|
|
|
|
|
strcpy(szExtend, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
strcpy(szExtend, "<EFBFBD>ָ<EFBFBD>");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
// wen 2005.10.25 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>еĹ<D0B5><C4B9>ϲ<EFBFBD><CFB2><EFBFBD>
|
|
|
|
|
// <20><><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
//if(sSoeData.u8Type == 2)
|
|
|
|
|
//{
|
|
|
|
|
// sprintf(szExtend, "%s <<3C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>[%d],<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%d]>", szExtend, sSoeData.wRelativeTime, sSoeData.wFaultNo);
|
|
|
|
|
//}
|
|
|
|
|
if(sSoeData.u8Type == 2)
|
|
|
|
|
{
|
|
|
|
|
sprintf(szExtend, "%s <<3C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>[%d],<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>[%d]>", szExtend, sSoeData.wRelativeTime, sSoeData.wFaultNo);
|
|
|
|
|
}
|
|
|
|
|
else if(sSoeData.u8Type == 3)
|
|
|
|
|
{
|
|
|
|
|
sprintf(szExtend, "%s <%s>", szExtend, sSoeData.szMsgEx);
|
|
|
|
|
}
|
|
|
|
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
msg.MsgData[iOffset] = strlen(szExtend);
|
|
|
|
|
memcpy((void *)&msg.MsgData[iOffset+1], szExtend, msg.MsgData[iOffset]);
|
|
|
|
|
iOffset += msg.MsgData[iOffset]+1;
|
|
|
|
|
// >>> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
msg.MsgLen = iOffset;
|
|
|
|
|
FormatDataAndSend(commid, &msg);
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>soe<6F><65><EFBFBD><EFBFBD>
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
|
}
|
|
|
|
|
//===========================<3D><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================
|
|
|
|
|
|
|
|
|
|
//===========================<3D><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD>ʼ=========================
|
|
|
|
|
void DispPrtPortStatus(int commid, SCADAPROTECTPORTPARAM *psPortParam)
|
|
|
|
|
{
|
|
|
|
|
int i, iMaxPort;
|
|
|
|
|
char szDbg[128];
|
|
|
|
|
|
|
|
|
|
iMaxPort = GetMaxPort();
|
|
|
|
|
sprintf(szDbg, ">>>commid=%d, MaxPort=%d, PrtPortStatus:", commid, iMaxPort);
|
|
|
|
|
DebugPrint(szDbg);
|
|
|
|
|
for(i=0; i<iMaxPort; i++)
|
|
|
|
|
{
|
|
|
|
|
sprintf(szDbg, " port=%d, Idle=%d, mmid=%d, timeout=%d",
|
|
|
|
|
i+1, psPortParam->m_pPrtPortStatus[i].bPortIdle,
|
|
|
|
|
psPortParam->m_pPrtPortStatus[i].mmid,
|
|
|
|
|
psPortParam->m_pPrtPortStatus[i].timeOut);
|
|
|
|
|
DebugPrint(szDbg);
|
|
|
|
|
}
|
|
|
|
|
strcpy(szDbg, "<<<PrtPortStatus Disp over\n");
|
|
|
|
|
DebugPrint(szDbg);
|
|
|
|
|
}
|
|
|
|
|
//===========================<3D><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================
|