TCPIP SERVER
This commit is contained in:
@@ -62,10 +62,12 @@ CSo7_TCPIP_Server::CSo7_TCPIP_Server()
|
||||
m_TCPIPBuf[i]._hProtoPending = false;
|
||||
m_TCPIPBuf[i]._event = NULL;
|
||||
};
|
||||
for(int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
m_CCDData_D10000[i]=0;
|
||||
}
|
||||
DM5000= (short *)malloc(MAX_DM_PAGE_NUMBER);
|
||||
DM8000= (short *)malloc(MAX_DM_PAGE_NUMBER);
|
||||
DM10000= (short *)malloc(MAX_DM_PAGE_NUMBER);
|
||||
memset(DM5000,0,MAX_DM_PAGE_NUMBER);
|
||||
memset(DM8000,0,MAX_DM_PAGE_NUMBER);
|
||||
memset(DM10000,0,MAX_DM_PAGE_NUMBER);
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +80,12 @@ CSo7_TCPIP_Server::~CSo7_TCPIP_Server()
|
||||
free(m_TCPIPBuf[i]._buffer);
|
||||
m_TCPIPBuf[i]._buffer=NULL;
|
||||
}
|
||||
free(DM5000);
|
||||
DM5000=NULL;
|
||||
free(DM8000);
|
||||
DM8000=NULL;
|
||||
free(DM10000);
|
||||
DM10000=NULL;
|
||||
}
|
||||
//================================================================
|
||||
int CSo7_TCPIP_Server::Init_Winsock()
|
||||
@@ -145,11 +153,6 @@ BOOL CSo7_TCPIP_Server::StopServer()
|
||||
m_ClientSocket[i]=INVALID_SOCKET;
|
||||
}
|
||||
m_nClients=0;
|
||||
for(int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
m_CCDData_D10000[i]=0;
|
||||
}
|
||||
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
@@ -275,7 +278,7 @@ void CSo7_TCPIP_Server::CloseAllSocket()
|
||||
}
|
||||
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::RESPONSE_UNKNOWN_State()
|
||||
BOOL CSo7_TCPIP_Server::RESPONSE_PLC_DM_UNKNOWN()
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
@@ -303,7 +306,7 @@ BOOL CSo7_TCPIP_Server::Response_Handshake()
|
||||
return TRUE;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
|
||||
BOOL CSo7_TCPIP_Server::Response_PLC_DM5000_R(short _StartAddr,short _DataSize)
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
@@ -311,22 +314,27 @@ BOOL CSo7_TCPIP_Server::Response_PLC_State(short _datasize)
|
||||
}
|
||||
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++)
|
||||
short sData(0);
|
||||
_StartAddr-=5000;
|
||||
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(iData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=iData & 0x0ff;
|
||||
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
|
||||
}
|
||||
for (int i=0;i<_DataSize;i++)
|
||||
{
|
||||
sData=DM5000[_StartAddr+i];
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_datasize);
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
|
||||
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;
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_Sensor_State(short _datasize)
|
||||
BOOL CSo7_TCPIP_Server::Response_PLC_DM10000_R(short _StartAddr,short _DataSize)
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
@@ -335,19 +343,28 @@ BOOL CSo7_TCPIP_Server::Response_Sensor_State(short _datasize)
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
|
||||
for (int i=0;i<_datasize;i++)
|
||||
short sData(0);
|
||||
_StartAddr-=10000;
|
||||
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
|
||||
{
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+i]=m_TCPIPServerState._PLCSensorState[i];
|
||||
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
|
||||
}
|
||||
for (int i=0;i<_DataSize;i++)
|
||||
{
|
||||
sData=DM10000[_StartAddr+i];
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_datasize);
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
|
||||
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;
|
||||
|
||||
}
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
|
||||
BOOL CSo7_TCPIP_Server::Response_PLC_DM8000_W(short _StartAddr,short _DataSize)
|
||||
{
|
||||
if(m_ClientSocket[m_nActiveClient] == INVALID_SOCKET)
|
||||
{
|
||||
@@ -355,27 +372,26 @@ BOOL CSo7_TCPIP_Server::Response_CCD_DATA(short _Addr,short _datasize)
|
||||
}
|
||||
m_ClearSendBuf();
|
||||
memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData));
|
||||
|
||||
int iData(0);
|
||||
BYTE DM_Data[4]={0,0,0,0};
|
||||
for (int i=0;i<_datasize;i++)
|
||||
short sData(0);
|
||||
_StartAddr-=8000;
|
||||
if ((_StartAddr+_DataSize)>=MAX_DM_PAGE_NUMBER)
|
||||
{
|
||||
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];
|
||||
_DataSize=MAX_DM_PAGE_NUMBER-_StartAddr;
|
||||
}
|
||||
for (int i=0;i<_DataSize;i++)
|
||||
{
|
||||
sData=DM8000[_StartAddr+i];
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(sData>>8) & 0x0ff;
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=sData & 0x0ff;
|
||||
}
|
||||
m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast<char>(DRW_SDataIndexData-DRW_SDataHeadDataSize+_datasize);
|
||||
|
||||
m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+_datasize*2;
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
//================================================================
|
||||
BOOL CSo7_TCPIP_Server::_Send_Cmd_Write_State()
|
||||
{
|
||||
@@ -570,8 +586,8 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
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];
|
||||
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
|
||||
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
|
||||
iDataSize=(bData[0]<<8)+bData[1];
|
||||
|
||||
if (iAddr>=20000)
|
||||
@@ -580,17 +596,17 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
}
|
||||
else if (iAddr>=10000)
|
||||
{
|
||||
Response_CCD_DATA((iAddr-10060),iDataSize);
|
||||
Response_PLC_DM10000_R(iAddr,iDataSize);
|
||||
iPara=RESPONSE_READ_CCD_DATA;
|
||||
}
|
||||
else if (iAddr>=5000)
|
||||
{
|
||||
Response_PLC_State(1);
|
||||
Response_PLC_DM5000_R(iAddr,iDataSize);
|
||||
iPara=RESPONSE_READ_PLC_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
RESPONSE_UNKNOWN_State();
|
||||
RESPONSE_PLC_DM_UNKNOWN();
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
@@ -603,17 +619,17 @@ void CSo7_TCPIP_Server::m_ProcessSocketReadEvent(SOCKET s)
|
||||
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];
|
||||
bData[0]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh1];
|
||||
bData[1]=m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexCh2];
|
||||
iDataSize=(bData[0]<<8)+bData[1];
|
||||
if (iAddr>=8000)
|
||||
{
|
||||
RESPONSE_UNKNOWN_State();
|
||||
RESPONSE_PLC_DM_UNKNOWN();
|
||||
iPara=RESPONSE_WRITE_PLC_STATE;
|
||||
}
|
||||
else
|
||||
{
|
||||
RESPONSE_UNKNOWN_State();
|
||||
RESPONSE_PLC_DM_UNKNOWN();
|
||||
iPara=RESPONSE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#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,
|
||||
@@ -93,17 +95,21 @@ public:
|
||||
|
||||
static struct_so7_tcpip_buff m_TCPIPBuf[lChannelSize];
|
||||
static s_tcpip_state m_TCPIPServerState;
|
||||
int m_CCDData_D10000[MAX_CCD_ADDR];
|
||||
|
||||
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_State(short _datasize);
|
||||
BOOL Response_Sensor_State(short _datasize);
|
||||
BOOL Response_CCD_DATA(short _Addr,short _datasize);
|
||||
BOOL Response_PLC_DM5000_R(short _StartAddr,short _DataSize);//PLC State
|
||||
BOOL Response_PLC_DM10000_R(short _StartAddr,short _DataSize);//CCD
|
||||
BOOL Response_PLC_DM8000_W(short _StartAddr,short _DataSize);//PC State
|
||||
|
||||
BOOL RESPONSE_UNKNOWN_State();
|
||||
BOOL RESPONSE_PLC_DM_UNKNOWN();
|
||||
|
||||
LRESULT OnSocket(WPARAM wParam, LPARAM lParam);
|
||||
private:
|
||||
|
||||
+47
-6
@@ -24,7 +24,10 @@ 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)
|
||||
{
|
||||
|
||||
for(int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
m_CCDData_D10000[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
CSo7_Util_PLC_TCPIP_SERVER::~CSo7_Util_PLC_TCPIP_SERVER()
|
||||
@@ -152,7 +155,15 @@ void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedButtonPlcTcpipServerUpdatestate()
|
||||
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));
|
||||
|
||||
|
||||
BYTE DM_Data[4]={0,0,0,0};
|
||||
g_pSo7_TCPIP_Server->DM5000[0]=static_cast<short>(g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState);
|
||||
for (int i=1;i<=8;i++)
|
||||
{
|
||||
DM_Data[0]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2];
|
||||
DM_Data[1]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2+1];
|
||||
g_pSo7_TCPIP_Server->DM5000[i]=(DM_Data[0]<<8)+DM_Data[1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -201,11 +212,29 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
|
||||
{
|
||||
csTmp=m_DataList.GetItemText(iRow,iCol);
|
||||
cTmp=T2A(csTmp);
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
g_pSo7_TCPIP_Server->m_CCDData_D10000[iRow]=atoi(cTmp);
|
||||
}
|
||||
m_CCDData_D10000[iRow]=atoi(cTmp);
|
||||
}
|
||||
for (int iRow=0;iRow<MAX_CCD_ADDR;iRow++)
|
||||
{
|
||||
m_CCDData_D10000[iRow];
|
||||
}
|
||||
if (g_pSo7_TCPIP_Server)
|
||||
{
|
||||
int iData(0);
|
||||
BYTE DM_Data[4]={0,0,0,0};
|
||||
int StartAddr(60);
|
||||
for (int i=0;i<MAX_CCD_ADDR;i++)
|
||||
{
|
||||
iData=m_CCDData_D10000[i];
|
||||
DM_Data[0]=(iData>>24) & 0x0ff;
|
||||
DM_Data[1]=(iData>>16) & 0x0ff;
|
||||
DM_Data[2]=(iData>>8) & 0x0ff;
|
||||
DM_Data[3]=iData & 0x0ff;
|
||||
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
|
||||
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
default:break;
|
||||
@@ -224,6 +253,18 @@ void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedCancel()
|
||||
CDialog::OnCancel();
|
||||
}
|
||||
//=====================================================================================
|
||||
BOOL CSo7_Util_PLC_TCPIP_SERVER::PreTranslateMessage(MSG* pMsg)
|
||||
{
|
||||
if(pMsg->message==WM_KEYDOWN)
|
||||
{
|
||||
if(pMsg->wParam==VK_RETURN || pMsg->wParam==VK_ESCAPE)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return CDialog::PreTranslateMessage(pMsg);
|
||||
}
|
||||
//=====================================================================================
|
||||
//Print message on edit control
|
||||
void CSo7_Util_PLC_TCPIP_SERVER::OutputWithScroll(const CString &strNewText,CEdit &edtOutput)
|
||||
{
|
||||
|
||||
@@ -16,6 +16,7 @@ public:
|
||||
|
||||
CString m_csMSG;
|
||||
CEdit m_edMSG;
|
||||
int m_CCDData_D10000[MAX_CCD_ADDR];
|
||||
protected:
|
||||
CEditableListCtrl m_DataList;
|
||||
|
||||
@@ -30,6 +31,7 @@ public:
|
||||
afx_msg void OnBnClickedButtonPlcTcpipServerUpdatestate();
|
||||
afx_msg void OnBnClickedButtonClearMsg();
|
||||
afx_msg void OnBnClickedCancel();
|
||||
afx_msg BOOL PreTranslateMessage(MSG* pMsg);
|
||||
|
||||
|
||||
LRESULT OnSocket(WPARAM w, LPARAM p);
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user