Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.h
T
2014-11-12 08:58:34 +08:00

136 lines
3.3 KiB
C++

//////////////////////////////////////////////////////////////////////
#ifndef SO7_TCPIP_SERVER_H_INCLUDED_
#define SO7_TCPIP_SERVER_H_INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include <afxwin.h>
#include <afxcmn.h>
#include <Winsock2.h>
#include "So7_TCPIP.h"
#define MAX_SOCKET 56
#define PLC_MAX_SENSOR_STATE 20
#define MAX_CCD_ADDR 120
enum OMRON_PLC_SENSOR
{
OMRON_PLC_CCD1_CAMERA1=0,
OMRON_PLC_CCD1_CAMERA2,
OMRON_PLC_CCD2_CAMERA1,
OMRON_PLC_CCD2_CAMERA2,
OMRON_PLC_CCD3_CAMERA1,
OMRON_PLC_CCD3_CAMERA2,
OMRON_PLC_CCD4_CAMERA1,
OMRON_PLC_CCD4_CAMERA2,
OMRON_PLC_CCD5_CAMERA1,
OMRON_PLC_CCD5_CAMERA2,
OMRON_PLC_LASER1_HEADA,
OMRON_PLC_LASER1_HEADB,
OMRON_PLC_LASER2_HEADA,
OMRON_PLC_LASER2_HEADB,
OMRON_PLC_LASER3_HEADA,
OMRON_PLC_LASER3_HEADB,
OMRON_PLC_LASER4_HEADA,
OMRON_PLC_LASER4_HEADB,
OMRON_PLC_LASER5_HEADA,
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;
TCPIP_RETURN_CODE _RecvReturnCode;
bool _ConnectionSuccessful;
bool _HandshakeSuccessful;
bool _WriteDataCompleted;
bool _ReadDataCompleted;
int _PLCRunningState;
BYTE _PLCSensorState[10];
bool _PLCSensorTrigged[10];
int _PCState;
int _PCMeasureResult;
s_tcpip_state()
{
_SendReturnCode=TCPIP_CONNECT_OK;
_RecvReturnCode=TCPIP_CONNECT_OK;
_ConnectionSuccessful=false;
_HandshakeSuccessful=false;
_WriteDataCompleted=true;
_ReadDataCompleted=true;
_PLCRunningState=0;
for(int i=0;i<PLC_MAX_SENSOR_STATE;i++)
{
_PLCSensorState[i]=0;
_PLCSensorTrigged[i]=false;
}
_PCState=0;
_PCMeasureResult=0;
};
};
//======================================================================================
class CSo7_TCPIP_Server
{
public:
CSo7_TCPIP_Server();
virtual ~CSo7_TCPIP_Server();
static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize];
static s_tcpip_state m_TCPIPServerState;
int m_CCDData_D10000[MAX_CCD_ADDR];
BOOL StartServer(HWND _hWnd,short _nPort);
BOOL StopServer();
BOOL _Send_Cmd_Write_State();
BOOL Response_Handshake();
BOOL Response_PLC_State(short _datasize);
BOOL Response_Sensor_State(short _datasize);
BOOL Response_CCD_DATA(short _Addr,short _datasize);
BOOL RESPONSE_UNKNOWN_State();
LRESULT OnSocket(WPARAM wParam, LPARAM lParam);
private:
HWND m_hMsgWnd;
BOOL m_ServerStarted;
SOCKET m_Socket;
SOCKET m_ClientSocket[MAX_SOCKET];
int m_nClients;
int m_nActiveClient;
in_addr m_SreverIPAddress;
u_short m_iServerPortNumber;
int Init_Winsock();
BOOL GetHostIPAddr(in_addr& _IPAddress);
BOOL CreateAndListen();
void CloseAllSocket();
BOOL AddClient(SOCKET s);
void RemoveClient(SOCKET s);
BOOL UpdateActiveClient(SOCKET s);
void SendBuffer();
void m_ClearSendBuf();
void m_ProcessSocketWriteEvent();
void m_ProcessSocketReadEvent(SOCKET s);
};
#endif