TCPIP SERVER

This commit is contained in:
TAO Cheng
2014-11-12 15:40:40 +08:00
parent cba2694c0c
commit c78c3c6f28
5 changed files with 125 additions and 60 deletions
@@ -62,10 +62,12 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
m_TCPIPBuf[i]._hProtoPending = false;
m_TCPIPBuf[i]._event = NULL;
};
for(int i=0;i<MAX_CCD_ADDR;i++)
{
m_CCDData_D10000[i]=0;
}
DM5000= (short *)malloc(MAX_DM_PAGE_NUMBER);
DM8000= (short *)malloc(MAX_DM_PAGE_NUMBER);
DM10000= (short *)malloc(MAX_DM_PAGE_NUMBER);
memset(DM5000,0,MAX_DM_PAGE_NUMBER);
memset(DM8000,0,MAX_DM_PAGE_NUMBER);
memset(DM10000,0,MAX_DM_PAGE_NUMBER);
}
@@ -78,6 +80,12 @@ CSo7_TCPIP_Server::~CSo7_TCPIP_Server()
free(m_TCPIPBuf[i]._buffer);
m_TCPIPBuf[i]._buffer=NULL;
}
free(DM5000);
DM5000=NULL;
free(DM8000);
DM8000=NULL;
free(DM10000);
DM10000=NULL;
}
//================================================================
int CSo7_TCPIP_Server::Init_Winsock()
@@ -145,11 +153,6 @@ BOOL CSo7_TCPIP_Server::StopServer()
m_ClientSocket[i]=INVALID_SOCKET;
}
m_nClients=0;
for(int i=0;i<MAX_CCD_ADDR;i++)
{
m_CCDData_D10000[i]=0;
}
}
return TRUE;
}
@@ -275,7 +278,7 @@ void CSo7_TCPIP_Server::CloseAllSocket()
}
//================================================================
BOOL CSo7_TCPIP_Server::RESPONSE_UNKNOWN_State()
BOOL CSo7_TCPIP_Server::RESPONSE_PLC_DM_UNKNOWN()
{
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
{
@@ -303,7 +306,7 @@ BOOL CSo7_TCPIP_Server::Response_Handshake()
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
BOOL CSo7_TCPIP_Server::Response_PLC_DM5000_R(short _StartAddr,short _DataSize)
{
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
{
@@ -311,22 +314,27 @@ BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
}
m_ClearSendBuf();
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
int iData=m_TCPIPServerState._PLCRunningState;
for (int i=0;i<_datasize;i++)
short sData(0);
_StartAddr-=5000;
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
{
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(iData>>8) & 0x0ff;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=iData & 0x0ff;
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
}
for (int i=0;i<_DataSize;i++)
{
sData=DM5000[_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);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
SendBuffer();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_Sensor_State(short _datasize)
BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize)
{
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
{
@@ -335,19 +343,28 @@ BOOL CSo7_TCPIP_Server::Response_Sensor_State(short _datasize)
m_ClearSendBuf();
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
for (int i=0;i<_datasize;i++)
short sData(0);
_StartAddr-=10000;
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
{
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+i]=m_TCPIPServerState._PLCSensorState[i];
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
}
for (int i=0;i<_DataSize;i++)
{
sData=DM10000[_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);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
SendBuffer();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
BOOL CSo7_TCPIP_Server::Response_PLC_DM8000_W(short _StartAddr,short _DataSize)
{
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
{
@@ -355,27 +372,26 @@ BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
}
m_ClearSendBuf();
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
for (int i=0;i<_datasize;i++)
short sData(0);
_StartAddr-=8000;
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
{
iData=m_CCDData_D10000[_Addr+i/2];
DM_Data[2]=(iData>>24) & 0x0ff;
DM_Data[3]=(iData>>16) & 0x0ff;
DM_Data[0]=(iData>>8) & 0x0ff;
DM_Data[1]=iData & 0x0ff;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=DM_Data[2*(i%2)+0];
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=DM_Data[2*(i%2)+1];
_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);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_DataSize);
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_DataSize*2;
SendBuffer();
return TRUE;
}
//================================================================
BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State()
{
@@ -570,8 +586,8 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr2];
iAddr=(bData[0]<<8)+bData[1];
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr2];
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
iDataSize=(bData[0]<<8)+bData[1];
if (iAddr>=20000)
@@ -580,17 +596,17 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
}
else if (iAddr>=10000)
{
Response_CCD_DATA((iAddr-10060),iDataSize);
Response_PLC_DM10000_R(iAddr,iDataSize);
iPara=RESPONSE_READ_CCD_DATA;
}
else if (iAddr>=5000)
{
Response_PLC_State(1);
Response_PLC_DM5000_R(iAddr,iDataSize);
iPara=RESPONSE_READ_PLC_STATE;
}
else
{
RESPONSE_UNKNOWN_State();
RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_UNKNOWN;
}
}
@@ -603,17 +619,17 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr2];
iAddr=(bData[0]<<8)+bData[1];
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr2];
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
iDataSize=(bData[0]<<8)+bData[1];
if (iAddr>=8000)
{
RESPONSE_UNKNOWN_State();
RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_WRITE_PLC_STATE;
}
else
{
RESPONSE_UNKNOWN_State();
RESPONSE_PLC_DM_UNKNOWN();
iPara=RESPONSE_UNKNOWN;
}
}