Add Tcpip Server
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include <Winsock2.h>
|
||||
#define WM_SOCKET WM_USER + 0x060
|
||||
#define WM_TCPIP_RECV_DATA WM_USER + 0x061
|
||||
#define WM_TCPIP_MSG WM_USER + 0x062
|
||||
|
||||
#define lChannelSize 2
|
||||
#define CH_SEND 0
|
||||
|
||||
@@ -0,0 +1,529 @@
|
||||
#include "StdAfx.h"
|
||||
#include <WinDef.h>
|
||||
#include <WinBase.h>
|
||||
#include "So7_TCPIP_Server.h"
|
||||
|
||||
const int WSA_MAJOR_VERSION = 1;
|
||||
const int WSA_MINOR_VERSION = 1;
|
||||
#define WSA_VERSION MAKEWORD(WSA_MAJOR_VERSION, WSA_MINOR_VERSION)
|
||||
#define SOCKADDR_LEN sizeof(SOCKADDR_IN)
|
||||
|
||||
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 int DRW_SDataIndexDataSize=7;
|
||||
const int DRW_SDataIndexData=30;
|
||||
|
||||
const int DRW_RDataIndexDA1=20;
|
||||
const int DRW_RDataIndexSA1=23;
|
||||
const int DRW_RDataIndexCMD1=26;
|
||||
const int DRW_RDataIndexCMD2=27;
|
||||
const int DRW_RDataIndexAddr1=29;
|
||||
const int DRW_RDataIndexAddr2=30;
|
||||
const int DRW_RDataIndexCh1=32;
|
||||
const int DRW_RDataIndexCh2=33;
|
||||
const int DRW_RDataIndexData=34;
|
||||
const int DRW_RDataCCLen=0x1A;
|
||||
|
||||
const int DRW_RSDataIndexBufSize1=6;
|
||||
const int DRW_RSDataIndexBufSize2=7;
|
||||
|
||||
|
||||
|
||||
|
||||
struct_so7_tcpip_buff CSo7_TCPIP_Server::m_TCPIPBuf[lChannelSize];
|
||||
|
||||
|
||||
//================================================================
|
||||
CSo7_TCPIP_Server::CSo7_TCPIP_Server()
|
||||
{
|
||||
m_hMsgWnd=NULL;
|
||||
m_Socket=INVALID_SOCKET;
|
||||
m_SreverIPAddress;
|
||||
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<lChannelSize;i++)
|
||||
{
|
||||
m_TCPIPBuf[i]._size = 0;
|
||||
m_TCPIPBuf[i]._CompletedSize = 0;
|
||||
m_TCPIPBuf[i]._save_send_cmd = 99;
|
||||
m_TCPIPBuf[i]._buffer = (char *)malloc(TCPIP_MAX_BUFF_SIZE);
|
||||
m_TCPIPBuf[i]._hProtoPending = false;
|
||||
m_TCPIPBuf[i]._event = NULL;
|
||||
};
|
||||
for(int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
m_CCDData[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//================================================================
|
||||
CSo7_TCPIP_Server::~CSo7_TCPIP_Server()
|
||||
{
|
||||
StopServer();
|
||||
for (int i=0;i<lChannelSize;i++)
|
||||
{
|
||||
free(m_TCPIPBuf[i]._buffer);
|
||||
m_TCPIPBuf[i]._buffer=NULL;
|
||||
}
|
||||
}
|
||||
//================================================================
|
||||
int CSo7_TCPIP_Server::Init_Winsock()
|
||||
{
|
||||
int nRet;
|
||||
static int first = TRUE;
|
||||
if (first)
|
||||
{
|
||||
WSADATA stWSAData; /* WinSock DLL Info */
|
||||
nRet = WSAStartup(WSA_VERSION, &stWSAData);
|
||||
if (nRet)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
first = FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::StartServer(HWND _hWnd,short _nPort)
|
||||
{
|
||||
int retVal=Init_Winsock();
|
||||
retVal=Init_Winsock();
|
||||
if(!retVal)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_iServerPortNumber=_nPort;
|
||||
GetHostIPAddr(m_SreverIPAddress);
|
||||
m_hMsgWnd=_hWnd;
|
||||
CreateAndListen();
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::StopServer()
|
||||
{
|
||||
if(m_Socket == INVALID_SOCKET)
|
||||
{
|
||||
return TCPIP_INVAILD_SOCKET;
|
||||
}
|
||||
closesocket(m_Socket);
|
||||
m_Socket = INVALID_SOCKET;
|
||||
return TCPIP_CONNECT_OK;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::GetHostIPAddr(in_addr& _IPAddress)
|
||||
{
|
||||
static int first = TRUE;
|
||||
if (first)
|
||||
{
|
||||
if(m_Socket == INVALID_SOCKET)
|
||||
{
|
||||
return TCPIP_INVAILD_SOCKET;
|
||||
}
|
||||
char HostName[100];
|
||||
gethostname(HostName,sizeof(HostName));
|
||||
hostent *pAddr;
|
||||
pAddr=gethostbyname(HostName);
|
||||
memcpy(&m_SreverIPAddress,pAddr->h_addr_list[0],sizeof(in_addr));
|
||||
_IPAddress=m_SreverIPAddress;
|
||||
first = FALSE;
|
||||
}
|
||||
_IPAddress=m_SreverIPAddress;
|
||||
return TCPIP_CONNECT_OK;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::CreateAndListen()
|
||||
{
|
||||
if(m_Socket == INVALID_SOCKET)
|
||||
::closesocket(m_Socket);
|
||||
|
||||
// 创建套节字
|
||||
m_Socket = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
if(m_Socket == INVALID_SOCKET)
|
||||
return FALSE;
|
||||
|
||||
// 填写要关联的本地地址
|
||||
sockaddr_in sin;
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_port = htons(m_iServerPortNumber);
|
||||
sin.sin_addr.s_addr = INADDR_ANY;
|
||||
// 绑定端口
|
||||
if(::bind(m_Socket, (sockaddr*)&sin, sizeof(sin)) == SOCKET_ERROR)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// 设置socket为窗口通知消息类型
|
||||
::WSAAsyncSelect(m_Socket, m_hMsgWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE);
|
||||
// 进入监听模式
|
||||
::listen(m_Socket, 5);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::AddClient(SOCKET s)
|
||||
{
|
||||
if(m_nClients < MAX_SOCKET)
|
||||
{
|
||||
m_ClientSocket[m_nClients++] = s;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
//================================================================
|
||||
void CSo7_TCPIP_Server::RemoveClient(SOCKET s)
|
||||
{
|
||||
BOOL bFind = FALSE;
|
||||
int i(0);
|
||||
for(i=0; i<m_nClients; i++)
|
||||
{
|
||||
if(m_ClientSocket[i] == s)
|
||||
{
|
||||
bFind = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// 如果找到就将此成员从列表中移除
|
||||
if(bFind)
|
||||
{
|
||||
m_nClients--;
|
||||
// 将此成员后面的成员都向前移动一个单位
|
||||
for(int j=i; j<m_nClients; j++)
|
||||
{
|
||||
m_ClientSocket[j] = m_ClientSocket[j+1];
|
||||
}
|
||||
}
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::UpdateActiveClient(SOCKET s)
|
||||
{
|
||||
BOOL bFind = FALSE;
|
||||
int i(0);
|
||||
m_nActiveClient=0;
|
||||
for(i=0; i<m_nClients; i++)
|
||||
{
|
||||
if(m_ClientSocket[i] == s)
|
||||
{
|
||||
bFind = TRUE;
|
||||
m_nActiveClient=i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return bFind;
|
||||
}
|
||||
|
||||
//================================================================
|
||||
void CSo7_TCPIP_Server::CloseAllSocket()
|
||||
{
|
||||
// 关闭监听套节字
|
||||
if(m_Socket != INVALID_SOCKET)
|
||||
{
|
||||
::closesocket(m_Socket);
|
||||
m_Socket = INVALID_SOCKET;
|
||||
}
|
||||
|
||||
// 关闭所有客户的连接
|
||||
for(int i=0; i<m_nClients; i++)
|
||||
{
|
||||
::closesocket(m_ClientSocket[i]);
|
||||
}
|
||||
m_nClients = 0;
|
||||
}
|
||||
|
||||
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_Handshake()
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,HandShaking,sizeof(HandShaking));
|
||||
SendBuffer();
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
|
||||
int iData=m_TCPIPServerState._PLCRunningState;
|
||||
for (int i=0;i<_datasize;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;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData+2*_datasize);
|
||||
|
||||
SendBuffer();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_Sensor_State(short _datasize)
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
|
||||
for (int i=0;i<_datasize;i++)
|
||||
{
|
||||
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);
|
||||
SendBuffer();
|
||||
return TRUE;
|
||||
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
|
||||
int iData(0);
|
||||
for (int i=_Addr;i<_Addr+_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;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData+2*_datasize);
|
||||
|
||||
SendBuffer();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State()
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
|
||||
SendBuffer();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
LRESULT CSo7_TCPIP_Server::OnSocket(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
// 取得有事件发生的套节字句柄
|
||||
SOCKET s = wParam;
|
||||
// 查看是否出错
|
||||
|
||||
int errorCode = WSAGETSELECTERROR(lParam);
|
||||
if(errorCode)
|
||||
{
|
||||
RemoveClient(s);
|
||||
::closesocket(s);
|
||||
return errorCode;
|
||||
}
|
||||
int event = WSAGETSELECTEVENT(lParam);
|
||||
switch(event)
|
||||
{
|
||||
case FD_ACCEPT:
|
||||
{
|
||||
if(m_nClients < MAX_SOCKET)
|
||||
{
|
||||
SOCKET client = ::accept(s, NULL, NULL);
|
||||
::WSAAsyncSelect(client,m_hMsgWnd, WM_SOCKET, FD_READ|FD_WRITE|FD_CLOSE);
|
||||
AddClient(client);
|
||||
}
|
||||
else
|
||||
{
|
||||
AfxMessageBox(_T("连接客户太多!"));
|
||||
};
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_ACCEPT,0);
|
||||
}
|
||||
break;
|
||||
case FD_READ:
|
||||
{
|
||||
UpdateActiveClient(s);
|
||||
|
||||
m_ProcessSocketReadEvent(s);
|
||||
}
|
||||
break;
|
||||
case FD_WRITE:
|
||||
//This event happens when the tcp buffers are ready for another send.
|
||||
//So if there is not enough room for the first write the event will happen
|
||||
//and then the buffers are ready for more.
|
||||
m_ProcessSocketWriteEvent();
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_WRITE,0);
|
||||
break;
|
||||
case FD_CLOSE:
|
||||
{
|
||||
RemoveClient(s);
|
||||
::closesocket(s);
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_CLOSE,0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
//================================================================
|
||||
void CSo7_TCPIP_Server::m_ClearSendBuf(void)
|
||||
{
|
||||
int i;
|
||||
for(i=0;i<TCPIP_MAX_BUFF_SIZE;i++)
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._buffer[i] = 0x0;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._CompletedSize=0;
|
||||
m_TCPIPBuf[CH_SEND]._size=0;
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize=0;
|
||||
m_TCPIPBuf[CH_RECV]._size=0;
|
||||
}
|
||||
//================================================================
|
||||
void CSo7_TCPIP_Server::SendBuffer()
|
||||
{
|
||||
int errorCode, numBytesSent;
|
||||
bool bInfinite=true;
|
||||
while(bInfinite)
|
||||
{
|
||||
numBytesSent = send(m_ClientSocket[m_nActiveClient], &(m_TCPIPBuf[CH_SEND]._buffer[m_TCPIPBuf[CH_SEND]._CompletedSize]), m_TCPIPBuf[CH_SEND]._size-m_TCPIPBuf[CH_SEND]._CompletedSize, 0);
|
||||
if(numBytesSent == SOCKET_ERROR)
|
||||
{
|
||||
errorCode = WSAGetLastError();
|
||||
if(errorCode == WSAEWOULDBLOCK)
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._hProtoPending=FALSE;
|
||||
return; //Should get a FD_WRITE event if this happens. Send the rest from there.
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._hProtoPending=FALSE;
|
||||
return; //should check for other errors here, and set an error code or something.
|
||||
}
|
||||
else
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._CompletedSize += numBytesSent;
|
||||
}
|
||||
if(m_TCPIPBuf[CH_SEND]._CompletedSize>=m_TCPIPBuf[CH_SEND]._size)
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._size = 0;
|
||||
m_TCPIPBuf[CH_SEND]._CompletedSize = 0;
|
||||
m_TCPIPBuf[CH_SEND]._hProtoPending=FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================
|
||||
void CSo7_TCPIP_Server::m_ProcessSocketWriteEvent(void)
|
||||
{
|
||||
int errorCode, numBytesSent;
|
||||
SOCKET s = m_Socket;
|
||||
if(m_TCPIPBuf[CH_SEND]._size <= 0)
|
||||
return;
|
||||
char* sendBuf = m_TCPIPBuf[CH_SEND]._buffer;
|
||||
|
||||
while(1)
|
||||
{
|
||||
numBytesSent = send(s, &(sendBuf[m_TCPIPBuf[CH_SEND]._CompletedSize]), m_TCPIPBuf[CH_SEND]._size-m_TCPIPBuf[CH_SEND]._CompletedSize, 0);
|
||||
if(numBytesSent == SOCKET_ERROR)
|
||||
{
|
||||
errorCode = WSAGetLastError();
|
||||
if(errorCode == WSAEWOULDBLOCK)
|
||||
{
|
||||
return; //Should get a FD_WRITE event if this happens. Send the rest from there.
|
||||
}
|
||||
else
|
||||
{
|
||||
//showSocketError(errorCode);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._CompletedSize += numBytesSent;
|
||||
}
|
||||
if(m_TCPIPBuf[CH_SEND]._CompletedSize>=m_TCPIPBuf[CH_SEND]._size)
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._CompletedSize = 0;
|
||||
m_ClearSendBuf();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
//================================================================
|
||||
void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
{
|
||||
int bytesReceived=0;
|
||||
int errorCode;
|
||||
|
||||
bytesReceived = recv(s, &(m_TCPIPBuf[CH_RECV]._buffer[0]), TCPIP_MAX_BUFF_SIZE, 0);
|
||||
if(bytesReceived == SOCKET_ERROR)
|
||||
{
|
||||
errorCode = WSAGetLastError();
|
||||
if (errorCode == WSAEWOULDBLOCK)
|
||||
{
|
||||
//have to wait for the next receive event
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
//showSocketError(errorCode);
|
||||
return;
|
||||
}
|
||||
}
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize += bytesReceived;
|
||||
m_TCPIPBuf[CH_RECV]._size = m_TCPIPBuf[CH_RECV]._CompletedSize;
|
||||
if (strstr(m_TCPIPBuf[CH_RECV]._buffer, "FINS"))
|
||||
{
|
||||
if (m_TCPIPBuf[CH_RECV]._buffer[7]==0x0C)//handshake
|
||||
{
|
||||
Response_Handshake();
|
||||
}
|
||||
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];
|
||||
if (iAddr>=20000)
|
||||
{
|
||||
;//errcode
|
||||
}
|
||||
else if (iAddr>=10000)
|
||||
{
|
||||
Response_CCD_DATA((iAddr-10060),iDataSize);//ccd data
|
||||
}
|
||||
else if (iAddr>=8000)
|
||||
{
|
||||
Response_PLC_State(1);//WRITE PLC STATE
|
||||
}
|
||||
else if (iAddr>=5000)
|
||||
{
|
||||
;//READ PLC STATE
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_TCPIPBuf[CH_RECV]._CompletedSize = 0;
|
||||
m_TCPIPBuf[CH_RECV]._hProtoPending=FALSE;
|
||||
::PostMessage(m_hMsgWnd,WM_TCPIP_MSG,FD_READ,0);
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
#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
|
||||
};
|
||||
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];
|
||||
s_tcpip_state m_TCPIPServerState;
|
||||
int m_CCDData[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);
|
||||
|
||||
|
||||
LRESULT OnSocket(WPARAM wParam, LPARAM lParam);
|
||||
private:
|
||||
HWND m_hMsgWnd;
|
||||
|
||||
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
|
||||
@@ -396,35 +396,37 @@ BEGIN
|
||||
EDITTEXT IDC_EDIT_ZOOM_TIME,14,159,112,112,ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL
|
||||
END
|
||||
|
||||
IDD_SO7_OPTION_DIALOG DIALOGEX 0, 0, 290, 185
|
||||
IDD_SO7_OPTION_DIALOG DIALOGEX 0, 0, 290, 214
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Utility for SO7"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON | WS_GROUP,24,32,69,10
|
||||
CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,24,48,69,10
|
||||
CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,24,64,68,10
|
||||
CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,24,80,69,10
|
||||
CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,24,115,62,10
|
||||
CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,21,130,62,10
|
||||
CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,100,32,76,10
|
||||
CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,100,48,76,10
|
||||
CONTROL "SDK3000视频卡",IDC_RADIO_VIDEOCARD_SDK3000,"Button",BS_AUTORADIOBUTTON | WS_GROUP,24,31,69,10
|
||||
CONTROL "SV2000E视频卡",IDC_RADIO_VIDEOCARD_SV2000E,"Button",BS_AUTORADIOBUTTON,24,47,69,10
|
||||
CONTROL "SV4000E视频卡",IDC_RADIO_VIDEOCARD_SV4000E,"Button",BS_AUTORADIOBUTTON,24,63,68,10
|
||||
CONTROL "TC4000视频卡",IDC_RADIO_VIDEOCARD_TC4000,"Button",BS_AUTORADIOBUTTON,24,79,69,10
|
||||
CONTROL "IP Camera",IDC_RADIO_SO7_IP_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,24,111,62,10
|
||||
CONTROL "USB Camera",IDC_RADIO_SO7_USB_CAMERA,"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,24,127,62,10
|
||||
CONTROL "LK_G激光",IDC_RADIO_KEYENCE_LASER,"Button",BS_AUTORADIOBUTTON,100,31,76,10
|
||||
CONTROL "LK_H激光(USB)",IDC_RADIO_KEYENCE_LASER_LK_H,"Button",BS_AUTORADIOBUTTON,100,47,76,10
|
||||
CONTROL "LK_H激光(ETHERNET)",IDC_RADIO_KEYENCE_LASER_LKH_ETHERNET,
|
||||
"Button",BS_AUTORADIOBUTTON,100,64,85,10
|
||||
CONTROL "LJ_G激光",IDC_RADIO_KEYENCE_LASER3,"Button",BS_AUTORADIOBUTTON,100,80,76,10
|
||||
CONTROL "ART PCI8822",IDC_RADIO_ART_PCI8622,"Button",BS_AUTORADIOBUTTON,100,96,76,10
|
||||
CONTROL "STIL CCS-PRIMA",IDC_RADIO_ERT_CCS_PRIMA,"Button",BS_AUTORADIOBUTTON,100,112,76,10
|
||||
"Button",BS_AUTORADIOBUTTON,100,63,85,10
|
||||
CONTROL "LJ_G激光",IDC_RADIO_KEYENCE_LASER3,"Button",BS_AUTORADIOBUTTON,100,79,76,10
|
||||
CONTROL "ART PCI8822",IDC_RADIO_ART_PCI8622,"Button",BS_AUTORADIOBUTTON,100,95,76,10
|
||||
CONTROL "STIL CCS-PRIMA",IDC_RADIO_ERT_CCS_PRIMA,"Button",BS_AUTORADIOBUTTON,100,111,76,10
|
||||
CONTROL "控制器(USB)",IDC_RADIO_CONTROLLER,"Button",BS_AUTORADIOBUTTON,195,31,69,10
|
||||
CONTROL "控制器(USB R)",IDC_RADIO_CONTROLLER2,"Button",BS_AUTORADIOBUTTON,195,47,75,10
|
||||
CONTROL "控制器(RS232)",IDC_RADIO__SO7_RS232,"Button",BS_AUTORADIOBUTTON,195,63,77,10
|
||||
CONTROL "Verifcation algorithm",IDC_RADIO_SO7_VERIFICATION_ALGORITHM,
|
||||
"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,168,81,10
|
||||
CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON,195,80,45,10
|
||||
DEFPUSHBUTTON "OK",IDOK,145,164,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,225,164,50,14
|
||||
GROUPBOX "测试选项",IDC_STATIC,10,8,265,153
|
||||
CONTROL "MV900视频卡",IDC_RADIO_VIDEOCARD_MV900,"Button",BS_AUTORADIOBUTTON,24,96,69,10
|
||||
CONTROL "CJ2M PLC",IDC_RADIO_SO7_OMRON_PLC,"Button",BS_AUTORADIOBUTTON,101,129,62,10
|
||||
"Button",BS_AUTORADIOBUTTON | NOT WS_VISIBLE,7,197,81,10
|
||||
CONTROL "Image.dll",IDC_RADIO_TEST_IMAGE_DLL,"Button",BS_AUTORADIOBUTTON,195,79,45,10
|
||||
DEFPUSHBUTTON "OK",IDOK,145,193,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,225,193,50,14
|
||||
GROUPBOX "测试选项",IDC_STATIC,10,8,265,179
|
||||
CONTROL "MV900视频卡",IDC_RADIO_VIDEOCARD_MV900,"Button",BS_AUTORADIOBUTTON,24,95,69,10
|
||||
CONTROL "TCPIP Client(CJ2M PLC)",IDC_RADIO_SO7_OMRON_PLC,"Button",BS_AUTORADIOBUTTON,100,127,106,10
|
||||
CONTROL "TCPIP Server(CJ2M PLC)",IDC_RADIO_SO7_OMRON_PLC_SERVER,
|
||||
"Button",BS_AUTORADIOBUTTON,100,143,91,10
|
||||
END
|
||||
|
||||
IDD_SO7_VIDEOCARD_SDK3000 DIALOGEX 0, 0, 488, 316
|
||||
@@ -1059,6 +1061,34 @@ BEGIN
|
||||
LTEXT "Size",IDC_STATIC,120,53,14,8
|
||||
END
|
||||
|
||||
IDD_SO7_UTIL_PLC_TCPIP_SERVER DIALOGEX 0, 0, 558, 326
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "PLC TCP/IP SERVER"
|
||||
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
|
||||
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
|
||||
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE,230,39,40,14,ES_AUTOHSCROLL
|
||||
LTEXT "PLC STATE",IDC_STATIC,231,26,36,8
|
||||
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2,174,71,40,14,ES_AUTOHSCROLL
|
||||
LTEXT "LASER1 STATE",IDC_STATIC,168,26,48,8
|
||||
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1,118,38,40,14,ES_AUTOHSCROLL
|
||||
LTEXT "CCD1 STATE",IDC_STATIC,118,26,42,8
|
||||
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1,174,39,40,14,ES_AUTOHSCROLL
|
||||
LTEXT "LASER2 STATE",IDC_STATIC,168,59,48,8
|
||||
EDITTEXT IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2,118,71,40,14,ES_AUTOHSCROLL
|
||||
LTEXT "CCD2 STATE",IDC_STATIC,118,59,42,8
|
||||
PUSHBUTTON "Clear",IDC_BUTTON_CLEAR_MSG,453,305,39,14
|
||||
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
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
@@ -1096,7 +1126,7 @@ BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 275
|
||||
TOPMARGIN, 6
|
||||
BOTTOMMARGIN, 178
|
||||
BOTTOMMARGIN, 207
|
||||
END
|
||||
|
||||
IDD_SO7_VIDEOCARD_SDK3000, DIALOG
|
||||
@@ -1247,6 +1277,14 @@ BEGIN
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 244
|
||||
END
|
||||
|
||||
IDD_SO7_UTIL_PLC_TCPIP_SERVER, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 551
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 319
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include "..\..\..\SevenOcean\SO7_Proto.h"
|
||||
#include "..\..\..\SevenOcean\SO7_Proto_Aux.h"
|
||||
#include "ProcessButton.h"
|
||||
#include "EditableListCtrl.h"
|
||||
|
||||
#ifdef _RELEASE_FULL_VERSION
|
||||
#include "VideoCardDefine.h"
|
||||
@@ -56,7 +57,9 @@
|
||||
#include "So7_XBoxController.h"
|
||||
|
||||
#include "..\..\..\SevenOcean\So7_TCPIP.h"
|
||||
#include "..\..\..\SevenOcean\So7_TCPIP_Server.h"
|
||||
#include "So7_Util_PLC_TCPIP.h"
|
||||
#include "So7_Util_PLC_TCPIP_SERVER.h"
|
||||
|
||||
#include "So7_Option.h"
|
||||
#include "afxdialogex.h"
|
||||
@@ -79,6 +82,8 @@ CART_PCI8622* m_pART_PCI8622=NULL;
|
||||
CSTIL_CCS_PRIMA_Laser* g_pSTIL_CCS_PRIMA=NULL;
|
||||
|
||||
CSo7_TCPIP* g_pSo7_TCPIP=NULL;
|
||||
CSo7_TCPIP_Server* g_pSo7_TCPIP_Server=NULL;
|
||||
|
||||
// CSo7_Option dialog
|
||||
|
||||
IMPLEMENT_DYNAMIC(CSo7_Option, CDialog)
|
||||
@@ -146,7 +151,8 @@ BOOL CSo7_Option::OnInitDialog()
|
||||
((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->SetCheck(FALSE);
|
||||
((CButton *)GetDlgItem(IDC_RADIO_TEST_IMAGE_DLL))->SetCheck(FALSE);
|
||||
((CButton *)GetDlgItem(IDC_RADIO_ART_PCI8622))->SetCheck(FALSE);
|
||||
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC))->SetCheck(TRUE);
|
||||
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC))->SetCheck(FALSE);
|
||||
((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC_SERVER))->SetCheck(TRUE);
|
||||
|
||||
#ifdef _RELEASE_SO7_CONTROLER_ONLY
|
||||
((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->EnableWindow(FALSE);
|
||||
@@ -449,6 +455,21 @@ void CSo7_Option::OnBnClickedOk()
|
||||
g_pSo7_TCPIP=NULL;
|
||||
}
|
||||
}
|
||||
else if(((CButton *)GetDlgItem(IDC_RADIO_SO7_OMRON_PLC_SERVER))->GetCheck())
|
||||
{
|
||||
if (!g_pSo7_TCPIP_Server)
|
||||
{
|
||||
g_pSo7_TCPIP_Server=new CSo7_TCPIP_Server();
|
||||
}
|
||||
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;
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
delete g_pSo7_TCPIP_Server;
|
||||
g_pSo7_TCPIP=NULL;
|
||||
}
|
||||
}
|
||||
else if(((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->GetCheck())
|
||||
{
|
||||
CSO7_Verfication_Algorithm* pSO7_Verfication_Algorithm=new CSO7_Verfication_Algorithm();
|
||||
|
||||
@@ -0,0 +1,271 @@
|
||||
// So7_Util_PLC_TCPIP_SERVER.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "resource.h"
|
||||
#include "EditableListCtrl.h"
|
||||
#include "..\..\..\SevenOcean\So7_TCPIP_Server.h"
|
||||
#include "So7_Util_PLC_TCPIP_SERVER.h"
|
||||
#include "afxdialogex.h"
|
||||
|
||||
enum E_UPDATE_LIST_CONTROL_TYPE
|
||||
{
|
||||
E_LISTCTRL_TITLE,
|
||||
E_LISTCTRL_CONTENT,
|
||||
E_LISTCTRL_TOTAL
|
||||
};
|
||||
|
||||
extern CSo7_TCPIP_Server* g_pSo7_TCPIP_Server;
|
||||
|
||||
// CSo7_Util_PLC_TCPIP_SERVER dialog
|
||||
|
||||
IMPLEMENT_DYNAMIC(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
|
||||
|
||||
CSo7_Util_PLC_TCPIP_SERVER::CSo7_Util_PLC_TCPIP_SERVER(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(CSo7_Util_PLC_TCPIP_SERVER::IDD, pParent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CSo7_Util_PLC_TCPIP_SERVER::~CSo7_Util_PLC_TCPIP_SERVER()
|
||||
{
|
||||
}
|
||||
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
DDX_Control(pDX, IDC_LIST_PLC_TCPIP_SERVER_CCDDATA, m_DataList);
|
||||
CDialog::DoDataExchange(pDX);
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
|
||||
ON_BN_CLICKED(IDC_BUTTON_PLC_TCPIP_SERVER_START, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStart)
|
||||
ON_BN_CLICKED(IDC_BUTTON_PLC_TCPIP_SERVER_STOP, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStop)
|
||||
ON_BN_CLICKED(IDC_BUTTON_PLC_TCPIP_SERVER_UPDATESTATE, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatestate)
|
||||
ON_BN_CLICKED(IDC_BUTTON_CLEAR_MSG, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonClearMsg)
|
||||
ON_BN_CLICKED(IDCANCEL, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedCancel)
|
||||
ON_MESSAGE(WM_SOCKET,&CSo7_Util_PLC_TCPIP_SERVER::OnSocket)
|
||||
ON_MESSAGE(WM_TCPIP_MSG,&CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg)
|
||||
ON_BN_CLICKED(IDC_BUTTON_PLC_TCPIP_SERVER_UPDATEDATA, &CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatedata)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
// CSo7_Util_PLC_TCPIP_SERVER message handlers
|
||||
|
||||
BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
|
||||
{
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
// Add "About..." menu item to system menu.
|
||||
|
||||
// IDM_ABOUTBOX must be in the system command range.
|
||||
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
|
||||
ASSERT(IDM_ABOUTBOX < 0xF000);
|
||||
|
||||
CMenu* pSysMenu = GetSystemMenu(FALSE);
|
||||
if (pSysMenu != NULL)
|
||||
{
|
||||
BOOL bNameValid;
|
||||
CString strAboutMenu;
|
||||
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
|
||||
ASSERT(bNameValid);
|
||||
if (!strAboutMenu.IsEmpty())
|
||||
{
|
||||
pSysMenu->AppendMenu(MF_SEPARATOR);
|
||||
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
||||
}
|
||||
}
|
||||
|
||||
CString str;
|
||||
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]);
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->SetWindowTextW(str);
|
||||
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA2]);
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2)->SetWindowTextW(str);
|
||||
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1]);
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->SetWindowTextW(str);
|
||||
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]);
|
||||
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);
|
||||
|
||||
UpdateData(FALSE);
|
||||
|
||||
return TRUE; // return TRUE unless you set the focus to a control
|
||||
}
|
||||
|
||||
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStart()
|
||||
{
|
||||
;// TODO: Add your control notification handler code here
|
||||
}
|
||||
|
||||
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerStop()
|
||||
{
|
||||
;// TODO: Add your control notification handler code here
|
||||
}
|
||||
|
||||
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatestate()
|
||||
{
|
||||
CString str;
|
||||
UpdateData(TRUE);
|
||||
USES_CONVERSION;
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->GetWindowText(str);
|
||||
const char* cTempValue=T2A(str);
|
||||
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]=static_cast<BYTE>(atoi(cTempValue));
|
||||
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2)->GetWindowText(str);
|
||||
cTempValue=T2A(str);
|
||||
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA2]=static_cast<BYTE>(atoi(cTempValue));
|
||||
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1)->GetWindowText(str);
|
||||
cTempValue=T2A(str);
|
||||
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER1_HEADA]=static_cast<BYTE>(atoi(cTempValue));
|
||||
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2)->GetWindowText(str);
|
||||
cTempValue=T2A(str);
|
||||
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_LASER2_HEADA]=static_cast<BYTE>(atoi(cTempValue));
|
||||
|
||||
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->GetWindowText(str);
|
||||
cTempValue=T2A(str);
|
||||
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState=static_cast<BYTE>(atoi(cTempValue));
|
||||
|
||||
}
|
||||
|
||||
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatedata()
|
||||
{
|
||||
m_UpdateListControl(E_LISTCTRL_CONTENT);
|
||||
}
|
||||
|
||||
//=====================================================================
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
|
||||
{
|
||||
switch(_type)
|
||||
{
|
||||
case E_LISTCTRL_TITLE:
|
||||
{
|
||||
RECT m_rect;
|
||||
m_DataList.GetClientRect(&m_rect); //获取list的客户区
|
||||
m_DataList.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT); //设置list风格
|
||||
|
||||
m_DataList.InsertColumn(0,_T("CCD地址"),LVCFMT_LEFT, m_rect.right*1/2);
|
||||
m_DataList.InsertColumn(1,_T("数据值"),LVCFMT_LEFT, m_rect.right*1/2);
|
||||
|
||||
int iStartRow(0),iEndRow(0);
|
||||
CString str;
|
||||
|
||||
iStartRow=0;
|
||||
iEndRow=MAX_CCD_ADDR;
|
||||
for (int i=iStartRow; i<iEndRow; i++)
|
||||
{
|
||||
str.Format(_T("%d"),120+i*4);
|
||||
m_DataList.InsertItem(i,str);
|
||||
m_DataList.SetItemText(i,0,str);
|
||||
m_DataList.SetItemText(i,1,_T("0"));
|
||||
}
|
||||
m_DataList.SetEditableItemRange(0,MAX_CCD_ADDR-1,1,1);
|
||||
m_DataList.SetColorStyleItemRange(0,MAX_CCD_ADDR-1,0,2);
|
||||
break;
|
||||
}
|
||||
case E_LISTCTRL_CONTENT:
|
||||
{
|
||||
USES_CONVERSION;
|
||||
CString csTmp;
|
||||
const char* cTmp;
|
||||
int iCol=1;
|
||||
for (int iRow=0;iRow<MAX_CCD_ADDR;iRow++)
|
||||
{
|
||||
csTmp=m_DataList.GetItemText(iRow,iCol);
|
||||
cTmp=T2A(csTmp);
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
g_pSo7_TCPIP_Server->m_CCDData[iRow]=atoi(cTmp);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:break;
|
||||
}
|
||||
}
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonClearMsg()
|
||||
{
|
||||
((CEdit *)GetDlgItem(IDC_EDIT_MSG))->SetWindowTextW(_T(""));
|
||||
}
|
||||
|
||||
|
||||
//=====================================================================================
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedCancel()
|
||||
{
|
||||
// TODO: Add your control notification handler code here
|
||||
CDialog::OnCancel();
|
||||
}
|
||||
//=====================================================================================
|
||||
//Print message on edit control
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OutputWithScroll(const CString &strNewText,CEdit &edtOutput)
|
||||
{
|
||||
CString strOutput;
|
||||
edtOutput.GetWindowText(strOutput);
|
||||
strOutput += strNewText;
|
||||
if ("\r\n" != strOutput.Right(2))
|
||||
{
|
||||
strOutput += "\r\n";
|
||||
}
|
||||
|
||||
int iCount = strOutput.GetLength();
|
||||
|
||||
edtOutput.SetRedraw(FALSE);
|
||||
edtOutput.SetWindowText(strOutput);
|
||||
int iLine = edtOutput.GetLineCount();
|
||||
edtOutput.LineScroll(iLine, 0);
|
||||
edtOutput.SetSel(iCount, iCount);
|
||||
edtOutput.SetRedraw(TRUE);
|
||||
}
|
||||
//=====================================================================================
|
||||
LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnSocket(WPARAM w, LPARAM p)
|
||||
{
|
||||
LRESULT lResult=0;
|
||||
if( g_pSo7_TCPIP_Server )
|
||||
lResult = g_pSo7_TCPIP_Server->OnSocket(w,p);
|
||||
|
||||
return( lResult );
|
||||
}
|
||||
//=====================================================================================
|
||||
LRESULT CSo7_Util_PLC_TCPIP_SERVER::OnTCPIPMsg(WPARAM w, LPARAM p)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(p);
|
||||
LRESULT lResult=0;
|
||||
switch(w)
|
||||
{
|
||||
case FD_ACCEPT:
|
||||
{
|
||||
m_csMSG=_T("FD_ACCEPT");
|
||||
break;
|
||||
}
|
||||
case FD_READ:
|
||||
{
|
||||
m_csMSG=_T("FD_READ");
|
||||
break;
|
||||
}
|
||||
case FD_WRITE:
|
||||
{
|
||||
m_csMSG=_T("FD_WRITE");
|
||||
break;
|
||||
}
|
||||
case FD_CLOSE:
|
||||
{
|
||||
m_csMSG=_T("FD_CLOSE");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
m_csMSG=_T("[Unknown]");
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_csMSG+=_T(".");
|
||||
OutputWithScroll(m_csMSG,m_edMSG);
|
||||
return( lResult );
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
#pragma once
|
||||
|
||||
|
||||
// CSo7_Util_PLC_TCPIP_SERVER dialog
|
||||
|
||||
class CSo7_Util_PLC_TCPIP_SERVER : public CDialog
|
||||
{
|
||||
DECLARE_DYNAMIC(CSo7_Util_PLC_TCPIP_SERVER)
|
||||
|
||||
public:
|
||||
CSo7_Util_PLC_TCPIP_SERVER(CWnd* pParent = NULL); // standard constructor
|
||||
virtual ~CSo7_Util_PLC_TCPIP_SERVER();
|
||||
|
||||
// Dialog Data
|
||||
enum { IDD = IDD_SO7_UTIL_PLC_TCPIP_SERVER };
|
||||
|
||||
protected:
|
||||
CString m_csMSG;
|
||||
CEdit m_edMSG;
|
||||
CEditableListCtrl m_DataList;
|
||||
|
||||
void OutputWithScroll(const CString &strNewText,CEdit &edtOutput);
|
||||
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||
virtual BOOL OnInitDialog();
|
||||
DECLARE_MESSAGE_MAP()
|
||||
public:
|
||||
afx_msg void OnBnClickedButtonPlcTcpipServerStart();
|
||||
afx_msg void OnBnClickedButtonPlcTcpipServerStop();
|
||||
afx_msg void OnBnClickedButtonPlcTcpipServerUpdatestate();
|
||||
afx_msg void OnBnClickedButtonClearMsg();
|
||||
afx_msg void OnBnClickedCancel();
|
||||
|
||||
|
||||
LRESULT OnSocket(WPARAM w, LPARAM p);
|
||||
LRESULT OnTCPIPMsg(WPARAM w, LPARAM p);
|
||||
afx_msg void OnBnClickedButtonPlcTcpipServerUpdatedata();
|
||||
void m_UpdateListControl(int _type);
|
||||
|
||||
};
|
||||
@@ -218,7 +218,7 @@
|
||||
<ClCompile>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;_RELEASE_SO7_CONTROLER_ONLY;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;_RELEASE_SO7_CONTROLER_ONLY;_REMOVE_DLLCHR;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
@@ -324,6 +324,7 @@
|
||||
<ClCompile Include="..\..\..\SevenOcean\SO7_Proto.cpp" />
|
||||
<ClCompile Include="..\..\..\SevenOcean\SO7_Proto_Aux.cpp" />
|
||||
<ClCompile Include="..\..\..\SevenOcean\So7_TCPIP.cpp" />
|
||||
<ClCompile Include="..\..\..\SevenOcean\So7_TCPIP_Server.cpp" />
|
||||
<ClCompile Include="..\..\..\STIL\Common\src\cAcqEasy.cpp" />
|
||||
<ClCompile Include="..\..\..\STIL\STIL_CCS_PRIMA_Laser.cpp" />
|
||||
<ClCompile Include="..\..\..\Tesa\TesaStarE.cpp" />
|
||||
@@ -368,6 +369,7 @@
|
||||
<ClCompile Include="So7_Util_External_Trig.cpp" />
|
||||
<ClCompile Include="So7_Util_ImageDll.cpp" />
|
||||
<ClCompile Include="So7_Util_PLC_TCPIP.cpp" />
|
||||
<ClCompile Include="So7_Util_PLC_TCPIP_SERVER.cpp" />
|
||||
<ClCompile Include="So7_Util_Program.cpp" />
|
||||
<ClCompile Include="SO7_Verfication_Algorithm.cpp" />
|
||||
<ClCompile Include="SO7_VolComp.cpp" />
|
||||
@@ -417,6 +419,7 @@
|
||||
<ClInclude Include="..\..\..\SevenOcean\SO7_Proto.h" />
|
||||
<ClInclude Include="..\..\..\SevenOcean\SO7_Proto_Aux.h" />
|
||||
<ClInclude Include="..\..\..\SevenOcean\So7_TCPIP.h" />
|
||||
<ClInclude Include="..\..\..\SevenOcean\So7_TCPIP_Server.h" />
|
||||
<ClInclude Include="..\..\..\STIL\STIL_CCS_PRIMA_Laser.h" />
|
||||
<ClInclude Include="..\..\..\Tesa\TesaStarE.h" />
|
||||
<ClInclude Include="..\..\..\Videocard\SDK3000\sdk3000_7130.h" />
|
||||
@@ -461,6 +464,7 @@
|
||||
<ClInclude Include="So7_Util_External_Trig.h" />
|
||||
<ClInclude Include="So7_Util_ImageDll.h" />
|
||||
<ClInclude Include="So7_Util_PLC_TCPIP.h" />
|
||||
<ClInclude Include="So7_Util_PLC_TCPIP_SERVER.h" />
|
||||
<ClInclude Include="So7_Util_Program.h" />
|
||||
<ClInclude Include="SO7_Verfication_Algorithm.h" />
|
||||
<ClInclude Include="SO7_VolComp.h" />
|
||||
|
||||
@@ -229,6 +229,12 @@
|
||||
<ClCompile Include="..\..\..\SevenOcean\So7_TCPIP.cpp">
|
||||
<Filter>Sources Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\..\SevenOcean\So7_TCPIP_Server.cpp">
|
||||
<Filter>Sources Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="So7_Util_PLC_TCPIP_SERVER.cpp">
|
||||
<Filter>Sources Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="CaptureDataDlg.h">
|
||||
@@ -492,6 +498,12 @@
|
||||
<ClInclude Include="So7_Util_PLC_TCPIP.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\..\SevenOcean\So7_TCPIP_Server.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="So7_Util_PLC_TCPIP_SERVER.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="ReadMe.txt" />
|
||||
|
||||
@@ -756,6 +756,8 @@
|
||||
#define IDC_RADIO_TC4000_CHANNEL2 1605
|
||||
#define IDC_RADIO_SO7_OMRON_PLC 1605
|
||||
#define IDC_RADIO_TC4000_CHANNEL3 1606
|
||||
#define IDC_RADIO_SO7_OMRON_PLC2 1606
|
||||
#define IDC_RADIO_SO7_OMRON_PLC_SERVER 1606
|
||||
#define IDC_RADIO_TC4000_CHANNEL4 1607
|
||||
#define IDC_RADIO_SV2000E_CHANNEL1 1608
|
||||
#define IDC_RADIO_SV2000E_CHANNEL2 1609
|
||||
@@ -876,6 +878,7 @@
|
||||
#define IDD_DIALOG_STIL_CCS_PRIMA 1722
|
||||
#define IDD_SO7_VIDEOCARD_MV900 1723
|
||||
#define IDD_SO7_UTIL_PLC_TCPIP 1724
|
||||
#define IDD_SO7_UTIL_PLC_TCPIP_SERVER 1725
|
||||
#define IDC_RADIO_SPEED_SLOW 1770
|
||||
#define IDC_RADIO_SCALE 1772
|
||||
#define IDC_EDIT_SPEED_X 1773
|
||||
@@ -1055,8 +1058,20 @@
|
||||
#define IDC_EDIT_MSG 1888
|
||||
#define IDC_EDIT_PLC_TCPIP_Data 1889
|
||||
#define IDC_BUTTON_PLC_TCPIP_HANDSHAKING 1890
|
||||
#define IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER1 1890
|
||||
#define IDC_EDIT_PLC_TCPIP_ADDR2 1891
|
||||
#define IDC_EDIT_PLC_TCPIP_DATA_SIZE 1891
|
||||
#define IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1 1892
|
||||
#define IDC_EDIT_PLC_TCPIP_SERVER_STATE_LASER2 1893
|
||||
#define IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD2 1894
|
||||
#define IDC_BUTTON_PLC_TCPIP_SERVER_START 1895
|
||||
#define IDC_BUTTON_PLC_TCPIP_SERVER_STOP 1896
|
||||
#define IDC_BUTTON_PLC_TCPIP_SERVER_UPDATESTATE 1897
|
||||
#define IDC_BUTTON_CLEAR_MSG 1898
|
||||
#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_LIST_PLC_TCPIP_SERVER_CCDDATA 1902
|
||||
#define IDC_BUTTON_DIY_EXIT_BUTTON 32740
|
||||
#define ID_EDIT_SO7_CONFIG_MOTION 32741
|
||||
|
||||
@@ -1066,7 +1081,7 @@
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 193
|
||||
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||
#define _APS_NEXT_CONTROL_VALUE 1889
|
||||
#define _APS_NEXT_CONTROL_VALUE 1903
|
||||
#define _APS_NEXT_SYMED_VALUE 104
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user