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

163 lines
3.7 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
#define MAX_DM_PAGE_NUMBER 1024
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_READ_PLC_CALIB_POS,
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;
};
};
struct s_tcpip_msg_data
{
int _MsgType;
int _CmdType;
int _DataAddr;
int _DataSize;
int _UpdateData;
void Init()
{
_MsgType=0;
_CmdType=0;
_DataAddr=0;
_DataSize=0;
_UpdateData=0;
};
s_tcpip_msg_data()
{
Init();
};
};
//======================================================================================
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;
s_tcpip_msg_data m_TCPIPMsg;
short *DM5000;
short *DM8000;
short *DM10000;
BOOL StartServer(HWND _hWnd,short _nPort);
BOOL StopServer();
BOOL _Send_Cmd_Write_State();
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_DM_UNKNOWN();
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