模拟PLC数据存储区。

This commit is contained in:
TAO Cheng
2014-11-20 21:19:34 +08:00
parent e4cce07a49
commit ed3d4180ea
7 changed files with 487 additions and 168 deletions
@@ -363,35 +363,6 @@ BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize)
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_PLC_DM8000_W(short _StartAddr,short _DataSize)
{
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
{
return FALSE;
}
m_ClearSendBuf();
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
short sData(0);
_StartAddr-=8000;
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
{
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
}
for (int i=0;i<_DataSize;i++)
{
sData=DM8000[_StartAddr+i];
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
}
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize*2);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
SendBuffer();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State()
{
@@ -624,6 +595,19 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
iDataSize=(bData[0]<<8)+bData[1];
if (iAddr>=8000)
{
int iBuffsize(0);
int iStartAddr(0);
iStartAddr=iAddr-8000;
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize2];
iBuffsize=(bData[0]<<8)+bData[1];
iBuffsize-=DRW_RDataCCLen;
for (int i=0;i<iBuffsize;i+=2)
{
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+1];
DM8000[iStartAddr++]=(bData[0]<<8)+bData[1];
}
RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_WRITE_PLC_STATE;
}
@@ -107,7 +107,6 @@ public:
BOOL Response_Handshake();
BOOL Response_PLC_DM5000_R(short _StartAddr,short _DataSize);//PLC State
BOOL Response_PLC_DM10000_R(short _StartAddr,short _DataSize);//CCD
BOOL Response_PLC_DM8000_W(short _StartAddr,short _DataSize);//PC State
BOOL RESPONSE_PLC_DM_UNKNOWN();