diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h index 8568674..be66234 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP.h @@ -12,6 +12,7 @@ #include #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 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp new file mode 100644 index 0000000..4f935af --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.cpp @@ -0,0 +1,529 @@ +#include "StdAfx.h" +#include +#include +#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(0); + for (int i=0;ih_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>8) & 0x0ff; + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexData+2*i+1]=iData & 0x0ff; + } + m_TCPIPBuf[CH_SEND]._buffer[DRW_SDataIndexDataSize]=static_cast(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(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(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=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); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.h new file mode 100644 index 0000000..9d8293e --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/So7_TCPIP_Server.h @@ -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 +#include +#include +#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;iSetCheck(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(); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP_SERVER.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP_SERVER.cpp new file mode 100644 index 0000000..de80d2e --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP_SERVER.cpp @@ -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(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(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(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(atoi(cTempValue)); + + GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->GetWindowText(str); + cTempValue=T2A(str); + g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState=static_cast(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; im_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 ); +} + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP_SERVER.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP_SERVER.h new file mode 100644 index 0000000..10204ad --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_PLC_TCPIP_SERVER.h @@ -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); + +}; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj index 36eff43..e7cc54e 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj @@ -218,7 +218,7 @@ MaxSpeed true - WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;_RELEASE_SO7_CONTROLER_ONLY;%(PreprocessorDefinitions) + WIN32;_WINDOWS;NDEBUG;_CRT_SECURE_NO_WARNINGS;_RELEASE_SO7_CONTROLER_ONLY;_REMOVE_DLLCHR;%(PreprocessorDefinitions) false MultiThreaded true @@ -324,6 +324,7 @@ + @@ -368,6 +369,7 @@ + @@ -417,6 +419,7 @@ + @@ -461,6 +464,7 @@ + diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters index 9e9fbbb..d0f813b 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj.filters @@ -229,6 +229,12 @@ Sources Files + + Sources Files + + + Sources Files + @@ -492,6 +498,12 @@ Header Files + + Header Files + + + Header Files + 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 1d29563..ad71e99 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -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 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 30ac501..7697f6c 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