163 lines
3.7 KiB
C++
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
|