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

2405 lines
60 KiB
C++

2 years ago
//***************************************************************
//* 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>=========================