TCPIP SERVER
This commit is contained in:
@@ -499,16 +499,21 @@ void CSo7_TCPIP::m_ProcessSocketReadEvent(SOCKET s)
|
||||
{
|
||||
int _BufferSize(0);
|
||||
BYTE _bData[4]={0,0,0,0};
|
||||
_bData[0]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize1]);
|
||||
_bData[1]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize2]);
|
||||
|
||||
_BufferSize=static_cast<int>(static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize2]));
|
||||
_BufferSize=static_cast<int>((_bData[0]<<8)+_bData[1]);
|
||||
_BufferSize-=DRW_RDataCCLen;
|
||||
m_TCPIPData.s_recv_data._DataSize=0;
|
||||
for (int i=0;i<_BufferSize;i+=4)
|
||||
for (int i=0;i<_BufferSize;i+=2)
|
||||
{
|
||||
_bData[0]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i]);
|
||||
_bData[1]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+1]);
|
||||
_bData[2]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+2]);
|
||||
_bData[3]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+3]);
|
||||
//_bData[2]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+2]);
|
||||
//_bData[3]=static_cast<BYTE>(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+3]);
|
||||
|
||||
_bData[2]=0;
|
||||
_bData[3]=0;
|
||||
m_TCPIPData.s_recv_data._lData[m_TCPIPData.s_recv_data._DataSize]=static_cast<int>(+(_bData[2]<<24)+(_bData[3]<<16)+(_bData[0]<<8)+(_bData[1]));
|
||||
m_TCPIPData.s_recv_data._DataSize++;
|
||||
}
|
||||
|
||||
@@ -33,12 +33,14 @@ const int DRW_RSDataIndexBufSize2=7;
|
||||
|
||||
|
||||
struct_so7_tcpip_buff CSo7_TCPIP_Server::m_TCPIPBuf[lChannelSize];
|
||||
s_tcpip_state CSo7_TCPIP_Server::m_TCPIPServerState;
|
||||
|
||||
|
||||
//================================================================
|
||||
CSo7_TCPIP_Server::CSo7_TCPIP_Server()
|
||||
{
|
||||
m_hMsgWnd=NULL;
|
||||
m_ServerStarted=FALSE;
|
||||
m_Socket=INVALID_SOCKET;
|
||||
m_SreverIPAddress;
|
||||
m_iServerPortNumber=static_cast<u_short>(0);
|
||||
@@ -93,6 +95,10 @@ int CSo7_TCPIP_Server::Init_Winsock()
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::StartServer(HWND _hWnd,short _nPort)
|
||||
{
|
||||
if (m_ServerStarted)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
int retVal=Init_Winsock();
|
||||
retVal=Init_Winsock();
|
||||
if(!retVal)
|
||||
@@ -102,7 +108,10 @@ BOOL CSo7_TCPIP_Server::StartServer(HWND _hWnd,short _nPort)
|
||||
m_iServerPortNumber=_nPort;
|
||||
GetHostIPAddr(m_SreverIPAddress);
|
||||
m_hMsgWnd=_hWnd;
|
||||
CreateAndListen();
|
||||
if (CreateAndListen())
|
||||
{
|
||||
m_ServerStarted=TRUE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
@@ -112,9 +121,13 @@ BOOL CSo7_TCPIP_Server::StopServer()
|
||||
{
|
||||
return TCPIP_INVAILD_SOCKET;
|
||||
}
|
||||
closesocket(m_Socket);
|
||||
m_Socket = INVALID_SOCKET;
|
||||
return TCPIP_CONNECT_OK;
|
||||
if (m_ServerStarted)
|
||||
{
|
||||
CloseAllSocket();
|
||||
closesocket(m_Socket);
|
||||
m_Socket = INVALID_SOCKET;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::GetHostIPAddr(in_addr& _IPAddress)
|
||||
@@ -135,7 +148,7 @@ BOOL CSo7_TCPIP_Server::GetHostIPAddr(in_addr& _IPAddress)
|
||||
first = FALSE;
|
||||
}
|
||||
_IPAddress=m_SreverIPAddress;
|
||||
return TCPIP_CONNECT_OK;
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::CreateAndListen()
|
||||
@@ -246,6 +259,7 @@ BOOL CSo7_TCPIP_Server::Response_Handshake()
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,HandShaking,sizeof(HandShaking));
|
||||
m_TCPIPBuf[CH_SEND]._size=sizeof(HandShaking);
|
||||
SendBuffer();
|
||||
return TRUE;
|
||||
}
|
||||
@@ -266,6 +280,7 @@ BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=iData & 0x0ff;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData+2*_datasize);
|
||||
m_TCPIPBuf[CH_SEND]._size=sizeof(HandShaking);
|
||||
|
||||
SendBuffer();
|
||||
|
||||
@@ -286,6 +301,8 @@ BOOL CSo7_TCPIP_Server::Response_Sensor_State(short _datasize)
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+i]=m_TCPIPServerState._PLCSensorState[i];
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData+2*_datasize);
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+2*_datasize;
|
||||
|
||||
SendBuffer();
|
||||
return TRUE;
|
||||
|
||||
@@ -309,6 +326,8 @@ BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData+2*_datasize);
|
||||
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+2*_datasize;
|
||||
|
||||
SendBuffer();
|
||||
|
||||
return TRUE;
|
||||
@@ -321,6 +340,7 @@ BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State()
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
m_TCPIPBuf[CH_SEND]._size=0;
|
||||
|
||||
SendBuffer();
|
||||
|
||||
@@ -488,11 +508,14 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
}
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize += bytesReceived;
|
||||
m_TCPIPBuf[CH_RECV]._size = m_TCPIPBuf[CH_RECV]._CompletedSize;
|
||||
int iPara(0);
|
||||
|
||||
if (strstr(m_TCPIPBuf[CH_RECV]._buffer, "FINS"))
|
||||
{
|
||||
if (m_TCPIPBuf[CH_RECV]._buffer[7]==0x0C)//handshake
|
||||
{
|
||||
Response_Handshake();
|
||||
iPara=RESPONSE_HANDSHAKE;
|
||||
}
|
||||
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01
|
||||
&&m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD2]==0x01)
|
||||
@@ -501,29 +524,30 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
short iDataSize=(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1]<<8)+m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
|
||||
if (iAddr>=20000)
|
||||
{
|
||||
;//errcode
|
||||
iPara=RESPONSE_READ_ERRCODE;
|
||||
}
|
||||
else if (iAddr>=10000)
|
||||
{
|
||||
Response_CCD_DATA((iAddr-10060),iDataSize);//ccd data
|
||||
Response_CCD_DATA((iAddr-10060),iDataSize);
|
||||
iPara=RESPONSE_READ_CCD_DATA;
|
||||
}
|
||||
else if (iAddr>=8000)
|
||||
{
|
||||
Response_PLC_State(1);//WRITE PLC STATE
|
||||
{
|
||||
iPara=RESPONSE_WRITE_PLC_STATE;
|
||||
}
|
||||
else if (iAddr>=5000)
|
||||
{
|
||||
;//READ PLC STATE
|
||||
|
||||
Response_PLC_State(1);
|
||||
iPara=RESPONSE_READ_PLC_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
;
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize = 0;
|
||||
m_TCPIPBuf[CH_RECV]._hProtoPending=FALSE;
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,0);
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,iPara);
|
||||
}
|
||||
|
||||
@@ -40,6 +40,19 @@ enum OMRON_PLC_SENSOR
|
||||
OMRON_PLC_LASER5_HEADB,
|
||||
OMRON_PLC_SENSOR_TOTAL=PLC_MAX_SENSOR_STATE
|
||||
};
|
||||
|
||||
enum TCPIP_RESPONSE_RESULT
|
||||
{
|
||||
RESPONSE_UNKNOWN=0,
|
||||
RESPONSE_HANDSHAKE,
|
||||
RESPONSE_READ_PLC_STATE,
|
||||
RESPONSE_WRITE_PLC_STATE,
|
||||
RESPONSE_READ_SENSOR_STATE,
|
||||
RESPONSE_READ_CCD_DATA,
|
||||
RESPONSE_READ_ERRCODE,
|
||||
RESPONSE_RESULT
|
||||
};
|
||||
|
||||
struct s_tcpip_state
|
||||
{
|
||||
TCPIP_RETURN_CODE _SendReturnCode;
|
||||
@@ -79,7 +92,7 @@ public:
|
||||
virtual ~CSo7_TCPIP_Server();
|
||||
|
||||
static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize];
|
||||
s_tcpip_state m_TCPIPServerState;
|
||||
static s_tcpip_state m_TCPIPServerState;
|
||||
int m_CCDData[MAX_CCD_ADDR];
|
||||
|
||||
BOOL StartServer(HWND _hWnd,short _nPort);
|
||||
@@ -94,7 +107,7 @@ public:
|
||||
LRESULT OnSocket(WPARAM wParam, LPARAM lParam);
|
||||
private:
|
||||
HWND m_hMsgWnd;
|
||||
|
||||
BOOL m_ServerStarted;
|
||||
SOCKET m_Socket;
|
||||
SOCKET m_ClientSocket[MAX_SOCKET];
|
||||
int m_nClients;
|
||||
|
||||
Reference in New Issue
Block a user