diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp index 1c95dcf..b38ed55 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.cpp @@ -7,9 +7,26 @@ 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 char BufferHeader[4]={0x46,0x49,0x4E,0x53}; -const char HandShaking[]={0x46,0x49,0x4E,0x53,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +const BYTE CommHeader[]={0x46,0x49,0x4E,0x53}; +const BYTE HandShaking[]={0x46,0x49,0x4E,0x53,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; +const BYTE DRW_SData[]={0x46,0x49,0x4E,0x53,0x00,0x00,0x00,0x1A,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x00,0x05,0x00,0x00,0x03,0x00,0xFF,0x01,0x01,0x82,0x00,0x0A,0x00,0x00,0x01}; +const int DRW_SDataIndexDA1=20; +const int DRW_SDataIndexSA1=23; +const int DRW_SDataIndexCMD1=26; +const int DRW_SDataIndexCMD2=27; +const int DRW_SDataIndexAddr1=29; +const int DRW_SDataIndexAddr2=30; +const int DRW_SDataIndexCh1=32; +const int DRW_SDataIndexCh2=33; +const int DRW_SDataIndexData=34; +const int DRW_SDataCCLen=0x1A; + +const int DRW_RSDataIndexBufSize1=6; +const int DRW_RSDataIndexBufSize2=7; + +const int DRW_RDataIndexData=30; +const int DRW_RDataCCLen=0x16; HANDLE CSo7_TCPIP::m_Thread_Id=NULL; HANDLE CSo7_TCPIP::m_Thread_Mutex=NULL; @@ -40,12 +57,14 @@ CSo7_TCPIP::CSo7_TCPIP() m_TCPIPBuf[i]._hProtoPending = false; m_TCPIPBuf[i]._event = NULL; }; - m_TCPIPData.s_status._handshaking=false; + m_TCPIPData.s_status._HandshakingSucceed=false; + m_TCPIPData.s_status._WriteDataCompleted=false; + m_TCPIPData.s_status._ReadDataCompleted=false; m_TCPIPData.s_status._SendReturnCode=TCPIP_CONNECT_OK; m_TCPIPData.s_status._RecvReturnCode=TCPIP_CONNECT_OK; m_TCPIPData.s_recv_data._type=0; m_TCPIPData.s_recv_data._DataSize=0; - m_TCPIPData.s_recv_data._dbBuff=(double *)malloc(TCPIP_MAX_DAT_SIZE); + m_TCPIPData.s_recv_data._iData=(int *)malloc(TCPIP_MAX_DAT_SIZE); } @@ -58,8 +77,8 @@ CSo7_TCPIP::~CSo7_TCPIP() free(m_TCPIPBuf[i]._buffer); m_TCPIPBuf[i]._buffer=NULL; } - free(m_TCPIPData.s_recv_data._dbBuff); - m_TCPIPData.s_recv_data._dbBuff=NULL; + free(m_TCPIPData.s_recv_data._iData); + m_TCPIPData.s_recv_data._iData=NULL; } //================================================================ void CSo7_TCPIP::Create_Thread() @@ -103,14 +122,8 @@ void CSo7_TCPIP::_do_single_threaded_tcpip_comm(bool _bWaitForRsponse) Sleep(3); } m_TCPIPBuf[CH_SEND]._hProtoPending = TRUE; - if (_bWaitForRsponse) - { - m_TCPIPBuf[CH_RECV]._hProtoPending = TRUE; - } - else - { - m_TCPIPBuf[CH_RECV]._hProtoPending = FALSE; - } + UNREFERENCED_PARAMETER(_bWaitForRsponse); + m_TCPIPBuf[CH_RECV]._hProtoPending = FALSE; SetEvent(m_TCPIPBuf[CH_SEND]._event); while ((m_TCPIPBuf[CH_SEND]._hProtoPending == TRUE) || (m_TCPIPBuf[CH_RECV]._hProtoPending == TRUE)) { @@ -258,27 +271,72 @@ TCPIP_RETURN_CODE CSo7_TCPIP::Handshaking() } //================================================================ -TCPIP_RETURN_CODE CSo7_TCPIP::Send(int _Addr,int _Data) +TCPIP_RETURN_CODE CSo7_TCPIP::_Send_Cmd_Write_D_Data(const short& _Addr,short* _Data,int _DataSize) { - _Addr=0; - _Data=0; if(m_Socket == INVALID_SOCKET) { return TCPIP_INVAILD_SOCKET; } - return TCPIP_CONNECT_OK; + WaitForSingleObject(m_Thread_Mutex, INFINITE); + m_ClearSendBuf(); + memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); + + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDA1]=m_SreverIPAddress.S_un.S_un_b.s_b4; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexSA1]=m_ClientIPAddress.S_un.S_un_b.s_b4; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCMD1]=0x01; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCMD2]=0x02; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexAddr1]=(_Addr>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexAddr2]=_Addr & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCh1]=(_DataSize>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCh2]=_DataSize & 0x0ff; + for (int i=0;i<_DataSize;i++) + { + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i]=(_Data[i]>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=_Data[i] & 0x0ff; + } + short sTmpData(0); + sTmpData=static_cast(DRW_SDataCCLen+2*_DataSize); + m_TCPIPBuf[CH_SEND]._buffer[DRW_RSDataIndexBufSize1]=(sTmpData>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_RSDataIndexBufSize2]=sTmpData & 0x0ff; + + m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData+2*_DataSize; + m_TCPIPBuf[CH_SEND]._save_send_cmd=TCPIP_CMD_WRITE_D_DATA; + m_TCPIPData.s_status._WriteDataCompleted=false; + + m_Thread_State=TCPIP_THREAD_RUNNING; + _do_single_threaded_tcpip_comm(); + ReleaseMutex(m_Thread_Mutex); + return m_TCPIPData.s_status._SendReturnCode; } //================================================================ -TCPIP_RETURN_CODE CSo7_TCPIP::Recv(int _Addr,int& _Data,bool _bWait) +TCPIP_RETURN_CODE CSo7_TCPIP::_Send_Cmd_Read_D_Data(const short& _Addr,const short& _DataSize) { - _Addr=0; - _Data=0; - _bWait=false; if(m_Socket == INVALID_SOCKET) { return TCPIP_INVAILD_SOCKET; } - return TCPIP_CONNECT_OK; + WaitForSingleObject(m_Thread_Mutex, INFINITE); + m_ClearSendBuf(); + memcpy(m_TCPIPBuf[CH_SEND]._buffer,DRW_SData,sizeof(DRW_SData)); + + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDA1]=m_SreverIPAddress.S_un.S_un_b.s_b4; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexSA1]=m_ClientIPAddress.S_un.S_un_b.s_b4; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCMD1]=0x01; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCMD2]=0x01; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexAddr1]=(_Addr>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexAddr2]=_Addr & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCh1]=(_DataSize>>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexCh2]=_DataSize & 0x0ff; + + + m_TCPIPBuf[CH_SEND]._size=DRW_SDataIndexData; + m_TCPIPBuf[CH_SEND]._save_send_cmd=TCPIP_CMD_READ_D_DATA; + m_TCPIPData.s_status._ReadDataCompleted=false; + + m_Thread_State=TCPIP_THREAD_RUNNING; + _do_single_threaded_tcpip_comm(); + ReleaseMutex(m_Thread_Mutex); + return m_TCPIPData.s_status._SendReturnCode; } //================================================================ LRESULT CSo7_TCPIP::OnSocket(WPARAM wParam, LPARAM lParam) @@ -295,7 +353,7 @@ LRESULT CSo7_TCPIP::OnSocket(WPARAM wParam, LPARAM lParam) { case FD_CONNECT: { - + } break; case FD_READ: @@ -426,15 +484,40 @@ void CSo7_TCPIP::m_ProcessSocketReadEvent(SOCKET s) switch (m_TCPIPBuf[CH_SEND]._save_send_cmd) { case TCPIP_CMD_HANDSHAKING: - if (m_TCPIPBuf[CH_RECV]._CompletedSize==24) { - m_TCPIPData.s_status._handshaking=true; - } - else - { - m_TCPIPData.s_status._handshaking=false; + if (m_TCPIPBuf[CH_RECV]._CompletedSize==24) + { + m_TCPIPData.s_status._HandshakingSucceed=true; + } + else + { + m_TCPIPData.s_status._HandshakingSucceed=false; + } + break; + } + case TCPIP_CMD_READ_D_DATA: + { + int _BufferSize(0); + BYTE _bData[2]={0,0}; + + _BufferSize=static_cast(static_cast(m_TCPIPBuf[CH_RECV]._buffer[DRW_RSDataIndexBufSize2])); + _BufferSize-=DRW_RDataCCLen; + m_TCPIPData.s_recv_data._DataSize=0; + for (int i=0;i<_BufferSize;i+=2) + { + _bData[0]=static_cast(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i]); + _bData[1]=static_cast(m_TCPIPBuf[CH_RECV]._buffer[DRW_RDataIndexData+i+1]); + m_TCPIPData.s_recv_data._iData[m_TCPIPData.s_recv_data._DataSize]=static_cast(_bData[0]*256+_bData[1]); + m_TCPIPData.s_recv_data._DataSize++; + } + m_TCPIPData.s_status._ReadDataCompleted=true; + break; + } + case TCPIP_CMD_WRITE_D_DATA: + { + m_TCPIPData.s_status._WriteDataCompleted=true; + break; } - break; default:break; } m_TCPIPBuf[CH_RECV]._CompletedSize = 0; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h index 0d71cfc..8568674 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h @@ -31,8 +31,8 @@ enum TCPIP_CMD { TCPIP_CMD_NONE=0, TCPIP_CMD_HANDSHAKING, - TCPIP_CMD_READ_DATA, - TCPIP_CMD_WRITE_DATA, + TCPIP_CMD_READ_D_DATA, + TCPIP_CMD_WRITE_D_DATA, TCPIP_CMD_TATAL }; @@ -67,13 +67,15 @@ struct struct_so7_tcpip_data { int _type; int _DataSize; - double *_dbBuff; + int* _iData; } s_recv_data; struct s_status { TCPIP_RETURN_CODE _SendReturnCode; TCPIP_RETURN_CODE _RecvReturnCode; - bool _handshaking; + bool _HandshakingSucceed; + bool _WriteDataCompleted; + bool _ReadDataCompleted; } s_status; }; #pragma pack(pop) @@ -93,11 +95,12 @@ public: static int m_Thread_State; TCPIP_RETURN_CODE Connect(const HWND& _hWnd,const in_addr& _IPAddress,const u_short& _nPortNumber); - TCPIP_RETURN_CODE Send(int _Addr,int _Data); - TCPIP_RETURN_CODE Recv(int _Addr,int& _Data,bool _bWait); TCPIP_RETURN_CODE DisConnect(); TCPIP_RETURN_CODE GetHostIPAddr(in_addr& _IPAddress); TCPIP_RETURN_CODE Handshaking(); + TCPIP_RETURN_CODE _Send_Cmd_Write_D_Data(const short& _Addr,short* _Data,int _DataSize); + TCPIP_RETURN_CODE _Send_Cmd_Read_D_Data(const short& _StartAddr,const short& _DataSize); + LRESULT OnSocket(WPARAM wParam, LPARAM lParam); private: diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc index f7a9ed6..9878b5b 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc @@ -1050,11 +1050,13 @@ BEGIN PUSHBUTTON "Read Data",IDC_BUTTON_PLC_TCPIP_READ,203,30,63,18 PUSHBUTTON "Write Data",IDC_BUTTON_PLC_TCPIP_WRITE,203,62,63,18 GROUPBOX "TCP/IP Control",IDC_STATIC,110,12,174,81 - EDITTEXT IDC_EDIT_PLC_TCPIP_ADDR,141,32,40,14,ES_AUTOHSCROLL - LTEXT "Addr",IDC_STATIC,116,35,16,8 - EDITTEXT IDC_EDIT_PLC_TCPIP_Data,141,61,40,14,ES_AUTOHSCROLL - LTEXT "Data",IDC_STATIC,116,64,16,8 + EDITTEXT IDC_EDIT_PLC_TCPIP_ADDR,144,28,40,14,ES_AUTOHSCROLL + LTEXT "Addr",IDC_STATIC,120,30,16,8 + EDITTEXT IDC_EDIT_PLC_TCPIP_Data,144,74,40,14,ES_AUTOHSCROLL + LTEXT "Data",IDC_STATIC,120,76,16,8 PUSHBUTTON "Handshaking",IDC_BUTTON_PLC_TCPIP_HANDSHAKING,28,49,63,18 + EDITTEXT IDC_EDIT_PLC_TCPIP_DATA_SIZE,144,51,40,14,ES_AUTOHSCROLL + LTEXT "Size",IDC_STATIC,120,53,14,8 END diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP.cpp index a6eda6c..b39639b 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP.cpp @@ -73,20 +73,54 @@ void CSo7_Util_PLC_TCPIP::OnBnClickedButtonPlcTcpipDisconnect() void CSo7_Util_PLC_TCPIP::OnBnClickedButtonPlcTcpipRead() { - ; + CString str; + UpdateData(TRUE); + USES_CONVERSION; + GetDlgItem(IDC_EDIT_PLC_TCPIP_ADDR)->GetWindowText(str); + const char* cTempValue=T2A(str); + short sAddr=static_cast(atoi(cTempValue)); + + GetDlgItem(IDC_EDIT_PLC_TCPIP_DATA_SIZE)->GetWindowText(str); + cTempValue=T2A(str); + short sSize=static_cast(atoi(cTempValue)); + + TCPIP_RETURN_CODE rCode=g_pSo7_TCPIP->_Send_Cmd_Read_D_Data(sAddr,sSize); + m_csMSG.Format(_T(">> Read ReturnCode:%d."),rCode); + OutputWithScroll(m_csMSG,m_edMSG); } void CSo7_Util_PLC_TCPIP::OnBnClickedButtonPlcTcpipHandshaking() { TCPIP_RETURN_CODE rCode=g_pSo7_TCPIP->Handshaking(); - m_csMSG.Format(_T("[Handshaking] Send ReturnCode:%d."),rCode); + m_csMSG.Format(_T(">> Handshaking ReturnCode:%d."),rCode); OutputWithScroll(m_csMSG,m_edMSG); } void CSo7_Util_PLC_TCPIP::OnBnClickedButtonPlcTcpipWrite() { - TCPIP_RETURN_CODE rCode=g_pSo7_TCPIP->Send(1001,0); - m_csMSG.Format(_T("Write ReturnCode:%d."),rCode); + CString str; + UpdateData(TRUE); + USES_CONVERSION; + GetDlgItem(IDC_EDIT_PLC_TCPIP_ADDR)->GetWindowText(str); + const char* cTempValue=T2A(str); + short sAddr=static_cast(atoi(cTempValue)); + + GetDlgItem(IDC_EDIT_PLC_TCPIP_Data)->GetWindowText(str); + cTempValue=T2A(str); + int sData=(atoi(cTempValue)); + + GetDlgItem(IDC_EDIT_PLC_TCPIP_DATA_SIZE)->GetWindowText(str); + cTempValue=T2A(str); + int sSize=(atoi(cTempValue)); + + short* _Data=new short[sSize]; + for(int i=0;i(sData); + } + TCPIP_RETURN_CODE rCode=g_pSo7_TCPIP->_Send_Cmd_Write_D_Data(sAddr,_Data,(int)sSize); + delete []_Data; + m_csMSG.Format(_T(">> Write ReturnCode:%d."),rCode); OutputWithScroll(m_csMSG,m_edMSG); } @@ -141,12 +175,39 @@ LRESULT CSo7_Util_PLC_TCPIP::OnTCPIPRecv(WPARAM w, LPARAM p) { if (g_pSo7_TCPIP) { - m_csMSG.Format(_T(">> Handshaking status:%d."),g_pSo7_TCPIP->m_TCPIPData.s_status._handshaking); + m_csMSG.Format(_T("<< Handshaking status:%d."),g_pSo7_TCPIP->m_TCPIPData.s_status._HandshakingSucceed); OutputWithScroll(m_csMSG,m_edMSG); } m_csMSG=_T("[Handshaking]"); break; } + case TCPIP_CMD_READ_D_DATA: + { + if (g_pSo7_TCPIP) + { + CString csTmp; + m_csMSG=_T(""); + m_csMSG.Format(_T("<< Read status:%d;Data:"),g_pSo7_TCPIP->m_TCPIPData.s_status._ReadDataCompleted); + for (int i=0;im_TCPIPData.s_recv_data._DataSize;i++) + { + csTmp.Format(_T("%0X,"),g_pSo7_TCPIP->m_TCPIPData.s_recv_data._iData[i]); + m_csMSG+=csTmp; + } + OutputWithScroll(m_csMSG,m_edMSG); + m_csMSG=_T("[Read]"); + } + break; + } + case TCPIP_CMD_WRITE_D_DATA: + { + if (g_pSo7_TCPIP) + { + m_csMSG.Format(_T("<< Write status:%d."),g_pSo7_TCPIP->m_TCPIPData.s_status._WriteDataCompleted); + OutputWithScroll(m_csMSG,m_edMSG); + } + m_csMSG=_T("[Write]"); + break; + } default: { m_csMSG=_T("[Unknown]"); @@ -163,7 +224,7 @@ LRESULT CSo7_Util_PLC_TCPIP::OnTCPIPRecv(WPARAM w, LPARAM p) m_csMSG+=_T("RecvData:"); for (int i=0;im_TCPIPBuf[CH_RECV]._size;i++) { - csTmp.Format(_T("0x%X "),g_pSo7_TCPIP->m_TCPIPBuf[CH_RECV]._buffer[i]); + csTmp.Format(_T("0x%02X "),static_cast(g_pSo7_TCPIP->m_TCPIPBuf[CH_RECV]._buffer[i])); m_csMSG+=csTmp; } } diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h index 699d3c5..1d29563 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -1054,8 +1054,9 @@ #define IDC_EDIT_PLC_TCPIP_ADDR 1887 #define IDC_EDIT_MSG 1888 #define IDC_EDIT_PLC_TCPIP_Data 1889 -#define IDC_BUTTON_PLC_TCPIP_CONNECT2 1890 #define IDC_BUTTON_PLC_TCPIP_HANDSHAKING 1890 +#define IDC_EDIT_PLC_TCPIP_ADDR2 1891 +#define IDC_EDIT_PLC_TCPIP_DATA_SIZE 1891 #define IDC_BUTTON_DIY_EXIT_BUTTON 32740 #define ID_EDIT_SO7_CONFIG_MOTION 32741 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo index 9e0d9f1..30ac501 100644 Binary files a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo and b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo differ