TCPIP SERVER
This commit is contained in:
@@ -10,9 +10,10 @@ const int WSA_MINOR_VERSION = 1;
|
||||
|
||||
const BYTE CommHeader[]={0x46,0x49,0x4E,0x53};
|
||||
const BYTE HandShaking[]={0X46,0X49,0X4E,0X53,0X00,0X00,0X00,0X10,0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X00,0X00,0X00,0X05};
|
||||
const BYTE DRW_SData[]={0X46,0X49,0X4E,0X53,0X00,0X00,0X00,0X18,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0XC0,0X00,0X02,0X00,0X03,0X00,0X00,0X05,0X00,0XFF,0X01,0X01,0X00,0X00};
|
||||
const BYTE DRW_SData[]={0X46,0X49,0X4E,0X53,0X00,0X00,0X00,0X16,0X00,0X00,0X00,0X02,0X00,0X00,0X00,0X00,0XC0,0X00,0X02,0X00,0X03,0X00,0X00,0X05,0X00,0XFF,0X01,0X01,0X00,0X00};
|
||||
|
||||
const int DRW_SDataIndexDataSize=7;
|
||||
const int DRW_SDataHeadDataSize=8;
|
||||
const int DRW_SDataIndexData=30;
|
||||
|
||||
const int DRW_RDataIndexDA1=20;
|
||||
@@ -42,7 +43,10 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
|
||||
m_hMsgWnd=NULL;
|
||||
m_ServerStarted=FALSE;
|
||||
m_Socket=INVALID_SOCKET;
|
||||
m_SreverIPAddress;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b1=127;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b2=0;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b3=0;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b4=1;
|
||||
m_iServerPortNumber=static_cast<u_short>(0);
|
||||
for (int i=0;i<MAX_SOCKET;i++)
|
||||
{
|
||||
@@ -60,7 +64,7 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
|
||||
};
|
||||
for(int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
m_CCDData[i]=0;
|
||||
m_CCDData_D10000[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,13 +123,33 @@ BOOL CSo7_TCPIP_Server::StopServer()
|
||||
{
|
||||
if(m_Socket == INVALID_SOCKET)
|
||||
{
|
||||
return TCPIP_INVAILD_SOCKET;
|
||||
return FALSE;
|
||||
}
|
||||
if (m_ServerStarted)
|
||||
{
|
||||
CloseAllSocket();
|
||||
closesocket(m_Socket);
|
||||
m_Socket = INVALID_SOCKET;
|
||||
m_ServerStarted=FALSE;
|
||||
|
||||
m_hMsgWnd=NULL;
|
||||
m_ServerStarted=FALSE;
|
||||
m_Socket=INVALID_SOCKET;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b1=127;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b2=0;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b3=0;
|
||||
m_SreverIPAddress.S_un.S_un_b.s_b4=1;
|
||||
m_iServerPortNumber=static_cast<u_short>(0);
|
||||
for (int i=0;i<MAX_SOCKET;i++)
|
||||
{
|
||||
m_ClientSocket[i]=INVALID_SOCKET;
|
||||
}
|
||||
m_nClients=0;
|
||||
for(int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
m_CCDData_D10000[i]=0;
|
||||
}
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@@ -137,7 +161,7 @@ BOOL CSo7_TCPIP_Server::GetHostIPAddr(in_addr& _IPAddress)
|
||||
{
|
||||
if(m_Socket == INVALID_SOCKET)
|
||||
{
|
||||
return TCPIP_INVAILD_SOCKET;
|
||||
return FALSE;
|
||||
}
|
||||
char HostName[100];
|
||||
gethostname(HostName,sizeof(HostName));
|
||||
@@ -245,10 +269,25 @@ void CSo7_TCPIP_Server::CloseAllSocket()
|
||||
for(int i=0; i<m_nClients; i++)
|
||||
{
|
||||
::closesocket(m_ClientSocket[i]);
|
||||
m_ClientSocket[i]= INVALID_SOCKET;
|
||||
}
|
||||
m_nClients = 0;
|
||||
}
|
||||
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::RESPONSE_UNKNOWN_State()
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData;
|
||||
|
||||
SendBuffer();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_Handshake()
|
||||
@@ -279,8 +318,8 @@ BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(iData>>8) & 0x0ff;
|
||||
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);
|
||||
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();
|
||||
|
||||
@@ -300,8 +339,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;
|
||||
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;
|
||||
@@ -318,15 +357,20 @@ BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
|
||||
int iData(0);
|
||||
for (int i=_Addr;i<_Addr+_datasize;i++)
|
||||
BYTE DM_Data[4]={0,0,0,0};
|
||||
for (int i=0;i<_datasize;i++)
|
||||
{
|
||||
iData=m_CCDData[i];
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(iData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=iData & 0x0ff;
|
||||
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];
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData+2*_datasize);
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_datasize);
|
||||
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+2*_datasize;
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
|
||||
|
||||
SendBuffer();
|
||||
|
||||
@@ -520,8 +564,16 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01
|
||||
&&m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD2]==0x01)
|
||||
{
|
||||
short iAddr=(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr1]<<8)+m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexAddr2];
|
||||
short iDataSize=(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1]<<8)+m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
|
||||
short iAddr(0);
|
||||
short iDataSize(0);
|
||||
BYTE bData[2]={0,0};
|
||||
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];
|
||||
iDataSize=(bData[0]<<8)+bData[1];
|
||||
|
||||
if (iAddr>=20000)
|
||||
{
|
||||
iPara=RESPONSE_READ_ERRCODE;
|
||||
@@ -531,10 +583,6 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
Response_CCD_DATA((iAddr-10060),iDataSize);
|
||||
iPara=RESPONSE_READ_CCD_DATA;
|
||||
}
|
||||
else if (iAddr>=8000)
|
||||
{
|
||||
iPara=RESPONSE_WRITE_PLC_STATE;
|
||||
}
|
||||
else if (iAddr>=5000)
|
||||
{
|
||||
Response_PLC_State(1);
|
||||
@@ -542,12 +590,41 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
}
|
||||
else
|
||||
{
|
||||
RESPONSE_UNKNOWN_State();
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
else if (m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD1]==0x01
|
||||
&&m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCMD2]==0x02)
|
||||
{
|
||||
short iAddr(0);
|
||||
short iDataSize(0);
|
||||
BYTE bData[2]={0,0};
|
||||
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];
|
||||
iDataSize=(bData[0]<<8)+bData[1];
|
||||
if (iAddr>=8000)
|
||||
{
|
||||
RESPONSE_UNKNOWN_State();
|
||||
iPara=RESPONSE_WRITE_PLC_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
RESPONSE_UNKNOWN_State();
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize = 0;
|
||||
m_TCPIPBuf[CH_RECV]._hProtoPending=FALSE;
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,iPara);
|
||||
|
||||
if (iPara!=RESPONSE_READ_PLC_STATE)
|
||||
{
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,iPara);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ public:
|
||||
|
||||
static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize];
|
||||
static s_tcpip_state m_TCPIPServerState;
|
||||
int m_CCDData[MAX_CCD_ADDR];
|
||||
int m_CCDData_D10000[MAX_CCD_ADDR];
|
||||
|
||||
BOOL StartServer(HWND _hWnd,short _nPort);
|
||||
BOOL StopServer();
|
||||
@@ -103,6 +103,7 @@ public:
|
||||
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:
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 中文(简体,中国) resources
|
||||
// Chinese (Simplified, PRC) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
@@ -1072,8 +1072,8 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
PUSHBUTTON "Exit",IDCANCEL,512,305,39,14
|
||||
GROUPBOX "TCP/IP Server Control",IDC_STATIC,17,12,87,81
|
||||
PUSHBUTTON "Start",IDC_BUTTON_PLC_TCPIP_SERVER_START,28,32,63,18
|
||||
PUSHBUTTON "Stop",IDC_BUTTON_PLC_TCPIP_SERVER_STOP,28,65,63,18
|
||||
PUSHBUTTON "Start",IDC_BUTTON_PLC_TCPIP_SERVER_START,29,49,63,18
|
||||
PUSHBUTTON "Stop",IDC_BUTTON_PLC_TCPIP_SERVER_STOP,29,73,63,18
|
||||
EDITTEXT IDC_EDIT_MSG,342,14,201,273,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
|
||||
PUSHBUTTON "Update",IDC_BUTTON_PLC_TCPIP_SERVER_UPDATESTATE,277,70,40,14
|
||||
GROUPBOX "DM DATA",IDC_STATIC,110,12,214,81
|
||||
@@ -1091,6 +1091,8 @@ BEGIN
|
||||
CONTROL "",IDC_LIST_PLC_TCPIP_SERVER_CCDDATA,"SysListView32",LVS_REPORT | WS_BORDER | WS_TABSTOP,24,110,294,166
|
||||
GROUPBOX "Static",IDC_STATIC,17,97,307,214
|
||||
PUSHBUTTON "Update",IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA,277,291,40,14
|
||||
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER,51,30,40,14,ES_AUTOHSCROLL
|
||||
LTEXT "Port",IDC_STATIC,29,33,14,8
|
||||
END
|
||||
|
||||
|
||||
@@ -1728,12 +1730,12 @@ BEGIN
|
||||
IDS_SO7_ABOUTBOX "&About Utility for SO7..."
|
||||
END
|
||||
|
||||
#endif // 中文(简体,中国) resources
|
||||
#endif // Chinese (Simplified, PRC) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 英语(美国) resources
|
||||
// English (United States) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
@@ -2692,7 +2694,7 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
#endif // 英语(美国) resources
|
||||
#endif // English (United States) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
@@ -464,6 +464,7 @@ void CSo7_Option::OnBnClickedOk()
|
||||
CSo7_Util_PLC_TCPIP_SERVER* pSo7_Util_PLC_TCPIP_SERVER=new CSo7_Util_PLC_TCPIP_SERVER();
|
||||
pSo7_Util_PLC_TCPIP_SERVER->DoModal();
|
||||
delete pSo7_Util_PLC_TCPIP_SERVER;
|
||||
pSo7_Util_PLC_TCPIP_SERVER=NULL;
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
delete g_pSo7_TCPIP_Server;
|
||||
|
||||
+11
-2
@@ -89,6 +89,9 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2)->SetWindowTextW(str);
|
||||
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState);
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->SetWindowTextW(str);
|
||||
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->SetWindowTextW(_T("9600"));
|
||||
|
||||
m_UpdateListControl(E_LISTCTRL_TITLE);
|
||||
|
||||
UpdateData(FALSE);
|
||||
@@ -99,9 +102,15 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
|
||||
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStart()
|
||||
{
|
||||
CString str;
|
||||
UpdateData(TRUE);
|
||||
USES_CONVERSION;
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->GetWindowText(str);
|
||||
const char* cTempValue=T2A(str);
|
||||
short sPortNumber=static_cast<short>(atoi(cTempValue));
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
g_pSo7_TCPIP_Server->StartServer(m_hWnd,9600);
|
||||
g_pSo7_TCPIP_Server->StartServer(m_hWnd,sPortNumber);
|
||||
m_csMSG=_T("<StartServer> ok.");
|
||||
OutputWithScroll(m_csMSG,m_edMSG);
|
||||
}
|
||||
@@ -194,7 +203,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
|
||||
cTmp=T2A(csTmp);
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
g_pSo7_TCPIP_Server->m_CCDData[iRow]=atoi(cTmp);
|
||||
g_pSo7_TCPIP_Server->m_CCDData_D10000[iRow]=atoi(cTmp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1073,6 +1073,8 @@
|
||||
#define IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE 1899
|
||||
#define IDC_BUTTON_PLC_TCPIP_SERVER_UPDATESTATE2 1900
|
||||
#define IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA 1900
|
||||
#define IDC_EDIT__PLC_TCPIP_PORTNUMBER2 1901
|
||||
#define IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER 1901
|
||||
#define IDC_LIST_PLC_TCPIP_SERVER_CCDDATA 1902
|
||||
#define IDC_IPADDRESS_PLC_TCPIP 1903
|
||||
#define IDC_BUTTON_DIY_EXIT_BUTTON 32740
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user