From 6f04c5fda456efb583e973364d3ecdc04d972022 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Thu, 13 Jun 2013 17:13:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=8B=E5=8A=A8=E6=9C=BA?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP | 60 +++---- .../Msi/Hsi/SevenOcean/CMMIO_SERIAL.H | 10 +- .../Interfac/Msi/Hsi/SevenOcean/Serial.cpp | 170 ++++++++++++++++++ .../Base/Interfac/Msi/Hsi/SevenOcean/Serial.h | 41 +++++ .../Tools/UsbUtility/Debug/UtilityDebug.Log | 5 + .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 8 +- .../UsbUtility/UsbUtil/SO7_Automatic_Zoom.cpp | 112 ++++++------ .../Tools/UsbUtility/UsbUtil/SO7_UtilDlg.cpp | 24 +-- .../UsbUtil/SO7_Verfication_Algorithm.h | 4 +- .../UsbUtility/UsbUtil/Setup_so7config.cpp | 78 ++++---- .../UsbUtility/UsbUtil/So7_Manual_Machine.cpp | 113 +++++++----- .../UsbUtility/UsbUtil/So7_Manual_Machine.h | 6 +- .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 25 ++- .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 2 + .../UsbUtil/Usb_Util.vcxproj.filters | 14 +- .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 3 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 1202176 -> 1202176 bytes 17 files changed, 471 insertions(+), 204 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/Serial.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/Serial.h diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP index cfae9d9..22a3880 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.CPP @@ -21,7 +21,7 @@ static char Codes[][6] = */ ///////////////////////////////////////////////////////////////////////////// -// CSerial() : Constructor +// CPSerial() : Constructor ///////////////////////////////////////////////////////////////////////////// // CSerialTask() : Function to run ReceiveTask() method as a task @@ -31,7 +31,7 @@ unsigned int WINAPI CSerialTask(LPVOID CSerialPtr) { TRACE( TEXT("Serial task has started \n") ); // Call the ControlTask function in the specified plugin - ((CSerial *)CSerialPtr)->ReceiveTask(); + ((CPSerial *)CSerialPtr)->ReceiveTask(); TRACE( TEXT("Serial task has completed \n") ); @@ -40,7 +40,7 @@ unsigned int WINAPI CSerialTask(LPVOID CSerialPtr) return(0); } -CSerial::CSerial() +CPSerial::CPSerial() { // Serial port is not open m_PortHandle = INVALID_HANDLE_VALUE; @@ -93,9 +93,9 @@ CSerial::CSerial() ///////////////////////////////////////////////////////////////////////////// -// ~CSerial() : Destructor - Close the port and free up the CriticalSection +// ~CPSerial() : Destructor - Close the port and free up the CriticalSection -CSerial::~CSerial() +CPSerial::~CPSerial() { if( IsOpen( ) ) { @@ -122,7 +122,7 @@ CSerial::~CSerial() // OpenPort() : Opens the serial port using the parameters set by default // or a call to SetPort -DWORD CSerial::Open() +DWORD CPSerial::Open() { CString PortName; COMMTIMEOUTS CommTimeOut; @@ -201,7 +201,7 @@ DWORD CSerial::Open() // IsOpen() : returns true if the serial port is open // -int CSerial::IsOpen( ) +int CPSerial::IsOpen( ) { return( m_PortHandle != INVALID_HANDLE_VALUE ); } @@ -211,7 +211,7 @@ int CSerial::IsOpen( ) // SetPort() : Store the serial settings. If the port is open then these // settings are applied now -int CSerial::SetPort(int Port,int Baud,char Parity,int Bits,int StopBits,int HandShake) +int CPSerial::SetPort(int Port,int Baud,char Parity,int Bits,int StopBits,int HandShake) { // Use the current settings if the value has the default of 0 m_Port = Port; @@ -243,7 +243,7 @@ int CSerial::SetPort(int Port,int Baud,char Parity,int Bits,int StopBits,int Han // GetPortData() : return the current settings // -void CSerial::GetPortData(int *Port,int *Baud,char *Parity,int *Bits,int *StopBits,int *HandShake) +void CPSerial::GetPortData(int *Port,int *Baud,char *Parity,int *Bits,int *StopBits,int *HandShake) { // return the requested settings if( Port ) @@ -265,7 +265,7 @@ void CSerial::GetPortData(int *Port,int *Baud,char *Parity,int *Bits,int *StopBi // ClosePort() : Close the port and shut down the monitoring thread // -DWORD CSerial::Close() +DWORD CPSerial::Close() { //struct SerialList *Free; HANDLE Port; @@ -319,13 +319,13 @@ DWORD CSerial::Close() // Send functions // [8/11/2004] // -DWORD CSerial::Send(LPCSTR buffer, int l, BOOL /*needsResponse=FALSE*/) +DWORD CPSerial::Send(LPCSTR buffer, int l, BOOL /*needsResponse=FALSE*/) { return ( WritePort ((const char*) buffer, (DWORD) l)); } /* -DWORD CSerial::Send(CString buffer) +DWORD CPSerial::Send(CString buffer) { char LocBuffer[MAX_OUTPUT_BUFFER_SIZE]; int length = buffer.GetLength (); @@ -347,7 +347,7 @@ return res; // WritePort() : Writes the specifed bytes to the serial port // -DWORD CSerial::WritePort(const char *Buffer,DWORD Bytes) +DWORD CPSerial::WritePort(const char *Buffer,DWORD Bytes) { DWORD BytesWritten, TotalWritten, Error; BOOL WriteState; @@ -413,7 +413,7 @@ DWORD CSerial::WritePort(const char *Buffer,DWORD Bytes) // ReceiveTask() : Internal function, this runs as a thread and provides the // OnRecieve and OnTransmit events -void CSerial::ReceiveTask( void ) +void CPSerial::ReceiveTask( void ) { //DWORD BytesWritten; DWORD Events; @@ -478,7 +478,7 @@ void CSerial::ReceiveTask( void ) // OnReceive() : Default OnReceive() // V114 -void CSerial::OnReceive() +void CPSerial::OnReceive() { // Dummy OnReceieve if not used char s[255]={0}; @@ -510,7 +510,7 @@ void CSerial::OnReceive() // ReadPort() : Read the specifed number of bytes. // -DWORD CSerial::ReadPort(char *Buffer,DWORD Bytes) +DWORD CPSerial::ReadPort(char *Buffer,DWORD Bytes) { DWORD BytesRead,Error; BOOL ReadState; @@ -564,7 +564,7 @@ DWORD CSerial::ReadPort(char *Buffer,DWORD Bytes) // ReadPort() : Read the specifed number of bytes into a CString class. // #if 0 -DWORD CSerial::ReadPort(CString &Buffer,DWORD Bytes) +DWORD CPSerial::ReadPort(CString &Buffer,DWORD Bytes) { DWORD BytesRead; @@ -581,7 +581,7 @@ DWORD CSerial::ReadPort(CString &Buffer,DWORD Bytes) // ProgramPort() : Internal function to setup the serial port // -int CSerial::ProgramPort(int Port,int Baud,char Parity,int Bits,int StopBits,int HandShake) +int CPSerial::ProgramPort(int Port,int Baud,char Parity,int Bits,int StopBits,int HandShake) { CString Param,Params; DCB SerialDCB; @@ -728,7 +728,7 @@ int CSerial::ProgramPort(int Port,int Baud,char Parity,int Bits,int StopBits,int // OnTransmit() : Default OnTransmit() // -void CSerial::OnTransmit(int /*Item*/, DWORD /*Error*/) +void CPSerial::OnTransmit(int /*Item*/, DWORD /*Error*/) { // Dummy OnTransmit if not used } @@ -738,7 +738,7 @@ void CSerial::OnTransmit(int /*Item*/, DWORD /*Error*/) // SetTimeouts() : Sets the rx and tx timeouts // -void CSerial::SetTimeouts( int RXTimeout, int TXTimeout ) +void CPSerial::SetTimeouts( int RXTimeout, int TXTimeout ) { COMMTIMEOUTS CommTimeOut; @@ -764,7 +764,7 @@ void CSerial::SetTimeouts( int RXTimeout, int TXTimeout ) // AddToDebug() : Add the data to the debug output. State is 1 = rx 2 = tx // 3 = user -void CSerial::AddToDebug( const char * /*Ptr*/, DWORD /*BytesToCopy*/, int /*State*/ ) +void CPSerial::AddToDebug( const char * /*Ptr*/, DWORD /*BytesToCopy*/, int /*State*/ ) { //ZH #if 0 @@ -831,7 +831,7 @@ void CSerial::AddToDebug( const char * /*Ptr*/, DWORD /*BytesToCopy*/, int /*Sta // FlushPort() : Removes all characters in the serial buffer // /* -int CSerial::FlushPort(void) +int CPSerial::FlushPort(void) { int TXTimeout,RXTimeout; char FlushBuffer[256]; @@ -879,7 +879,7 @@ return(BytesTotal); // MaxPort() : // -int CSerial::MaxPort() +int CPSerial::MaxPort() { // return the max port, :-) return(8); @@ -892,7 +892,7 @@ int CSerial::MaxPort() // data sent. // -int CSerial::Transmit(const char * /*Buffer*/,DWORD /*Bytes*/) +int CPSerial::Transmit(const char * /*Buffer*/,DWORD /*Bytes*/) { /* struct SerialList *Ptr; @@ -952,7 +952,7 @@ int CSerial::Transmit(const char * /*Buffer*/,DWORD /*Bytes*/) // /* -int CSerial::AddReceived( const char *Buffer,DWORD Bytes) +int CPSerial::AddReceived( const char *Buffer,DWORD Bytes) { DWORD index = 0; //primary buffer index struct SerialList *Ptr; @@ -1081,7 +1081,7 @@ return(TRUE); // //ZH /* -char *CSerial::GetNextReceived(void) +char *CPSerial::GetNextReceived(void) { struct SerialList *Free; @@ -1120,7 +1120,7 @@ return( m_RXTempPtr ); // ascii hex // -int CSerial::HexToInt(char *Data, int Bytes) +int CPSerial::HexToInt(char *Data, int Bytes) { int Byte; int HexChar, Value; @@ -1150,7 +1150,7 @@ int CSerial::HexToInt(char *Data, int Bytes) // //ZH /* -void CSerial::RegisterDebugWindow() +void CPSerial::RegisterDebugWindow() { // Register the CSerialRaw window for future use WNDCLASS wndcls; @@ -1160,7 +1160,7 @@ wndcls.hInstance = AfxGetInstanceHandle( ); wndcls.hCursor = LoadCursor( NULL, IDC_ARROW ); wndcls.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW; -wndcls.lpszClassName = TEXT("CSerial"); +wndcls.lpszClassName = TEXT("CPSerial"); AfxRegisterClass( &wndcls ); } */ @@ -1172,7 +1172,7 @@ AfxRegisterClass( &wndcls ); // SendBuffer() : Internal function, this writes the next block of data // queued to the serial port. -void CSerial::SendBuffer(int Next) +void CPSerial::SendBuffer(int Next) { struct SerialList *Free; // DWORD BytesWritten; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.H b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.H index 2464efc..387283f 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.H +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_SERIAL.H @@ -12,7 +12,7 @@ *$!! Serial.h *$!! *$!! DESCRIPTION -*$!! Header file for CSerial. +*$!! Header file for CPSerial. *$!! *$!! AUTHOR *$!! M.J.S.Gooder. @@ -69,17 +69,17 @@ const int CS_DEFAULT_RX_TIMEOUT = 25; const int CS_DEFAULT_TX_TIMEOUT = 1000; /////////////////////////////////////////////////////////////////////////////// -// The CSerial class +// The CPSerial class -class CSerial : public CMMIO +class CPSerial : public CMMIO { // Construction public: - CSerial(); + CPSerial(); // Implementation public: - virtual ~CSerial(); + virtual ~CPSerial(); // Attributes public: diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/Serial.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/Serial.cpp new file mode 100644 index 0000000..ae9097e --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/Serial.cpp @@ -0,0 +1,170 @@ +// Serial.cpp + +#include "stdafx.h" +#include +#include +#include "Serial.h" + +CSerial::CSerial() +{ + + memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) ); + memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) ); + m_hIDComDev = NULL; + m_bOpened = FALSE; + +} + +CSerial::~CSerial() +{ + + Close(); + +} + +BOOL CSerial::Open( int nPort, int nBaud ) +{ + + if( m_bOpened ) return( TRUE ); + + TCHAR szPort[15]; + TCHAR szComParams[50]; + DCB dcb; + + wsprintf( szPort, _T("COM%d"), nPort ); + m_hIDComDev = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL ); + if( m_hIDComDev == NULL ) return( FALSE ); + + memset( &m_OverlappedRead, 0, sizeof( OVERLAPPED ) ); + memset( &m_OverlappedWrite, 0, sizeof( OVERLAPPED ) ); + + COMMTIMEOUTS CommTimeOuts; + CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF; + CommTimeOuts.ReadTotalTimeoutMultiplier = 0; + CommTimeOuts.ReadTotalTimeoutConstant = 0; + CommTimeOuts.WriteTotalTimeoutMultiplier = 0; + CommTimeOuts.WriteTotalTimeoutConstant = 5000; + SetCommTimeouts( m_hIDComDev, &CommTimeOuts ); + + wsprintf( szComParams, _T("COM%d:%d,n,8,1"), nPort, nBaud ); + + m_OverlappedRead.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); + m_OverlappedWrite.hEvent = CreateEvent( NULL, TRUE, FALSE, NULL ); + + dcb.DCBlength = sizeof( DCB ); + GetCommState( m_hIDComDev, &dcb ); + dcb.BaudRate = nBaud; + dcb.ByteSize = 8; + unsigned char ucSet; + ucSet = (unsigned char) ( ( FC_RTSCTS & FC_DTRDSR ) != 0 ); + ucSet = (unsigned char) ( ( FC_RTSCTS & FC_RTSCTS ) != 0 ); + ucSet = (unsigned char) ( ( FC_RTSCTS & FC_XONXOFF ) != 0 ); + if( !SetCommState( m_hIDComDev, &dcb ) || + !SetupComm( m_hIDComDev, 10000, 10000 ) || + m_OverlappedRead.hEvent == NULL || + m_OverlappedWrite.hEvent == NULL ){ + DWORD dwError(0); + dwError = GetLastError(); + if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent ); + if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent ); + CloseHandle( m_hIDComDev ); + return( FALSE ); + } + + m_bOpened = TRUE; + + return( m_bOpened ); + +} + +BOOL CSerial::Close( void ) +{ + + if( !m_bOpened || m_hIDComDev == NULL ) return( TRUE ); + + if( m_OverlappedRead.hEvent != NULL ) CloseHandle( m_OverlappedRead.hEvent ); + if( m_OverlappedWrite.hEvent != NULL ) CloseHandle( m_OverlappedWrite.hEvent ); + CloseHandle( m_hIDComDev ); + m_bOpened = FALSE; + m_hIDComDev = NULL; + + return( TRUE ); + +} + +BOOL CSerial::WriteCommByte( unsigned char ucByte ) +{ + BOOL bWriteStat; + DWORD dwBytesWritten; + + bWriteStat = WriteFile( m_hIDComDev, (LPSTR) &ucByte, 1, &dwBytesWritten, &m_OverlappedWrite ); + if( !bWriteStat && ( GetLastError() == ERROR_IO_PENDING ) ){ + if( WaitForSingleObject( m_OverlappedWrite.hEvent, 1000 ) ) dwBytesWritten = 0; + else{ + GetOverlappedResult( m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE ); + m_OverlappedWrite.Offset += dwBytesWritten; + } + } + + return( TRUE ); + +} + +int CSerial::SendData( const char *buffer, int size ) +{ + + if( !m_bOpened || m_hIDComDev == NULL ) return( 0 ); + + DWORD dwBytesWritten = 0; + int i; + for( i=0; iSetCheck(true); - if (m_pSO7_Serial) + if (m_pSO7_PCDSerial) { - m_pSO7_Serial->GetPortData(&Port,&Baud,&Parity,&Bits,&StopBits,&HandShake); + m_pSO7_PCDSerial->GetPortData(&Port,&Baud,&Parity,&Bits,&StopBits,&HandShake); Params.Format( TEXT("[COM%d]"), Port ); Param.Format( TEXT(" Baud=%d"), Baud ); Params += Param; @@ -157,7 +157,7 @@ BOOL CSO7_Automatic_Zoom::OnInitDialog() Params += Param; m_StatusBar.SetText(Params, 0, 0); - if(m_pSO7_Serial->Open()) + if(m_pSO7_PCDSerial->Open()) { m_StatusBar.SetText(_T("成功打开串口。"), 1, 0); @@ -408,8 +408,8 @@ void CSO7_Automatic_Zoom::OnBnClickedCancel() { delete g_pLoggerDebug; g_pLoggerDebug=NULL; - delete m_pSO7_Serial; - m_pSO7_Serial=NULL; + delete m_pSO7_PCDSerial; + m_pSO7_PCDSerial=NULL; KillTimer(1); KillTimer(2); KillTimer(3); @@ -532,24 +532,24 @@ double CSO7_Automatic_Zoom::ReadZoomAngle() { double dZoomAngle(-1); char sendData[6]={'A','D',':','0',13,10}; - DWORD iWriteByte=m_pSO7_Serial->Send(sendData,6); + DWORD iWriteByte=m_pSO7_PCDSerial->Send(sendData,6); INT iRetrys(0); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==6) + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==6) { iRetrys++; Sleep(10); } - if (m_pSO7_Serial->m_iRecvState) + if (m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(50); USES_CONVERSION; char *cRecvData= NULL; char *token = NULL; char cTemp[20]={0}; - cRecvData=T2A(m_pSO7_Serial->m_csRecv); + cRecvData=T2A(m_pSO7_PCDSerial->m_csRecv); char seps[] = "$AD:"; token = strtok(cRecvData,seps); @@ -567,8 +567,8 @@ double CSO7_Automatic_Zoom::ReadZoomAngle() }; token=NULL; cRecvData=NULL; - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return dZoomAngle; @@ -588,72 +588,72 @@ BOOL CSO7_Automatic_Zoom::CalibrateEncoder() csRightRecv.Format(_T("@OK\r\n")); INT iRetrys(0); DWORD iWriteByte(0); - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; //Phase I - iWriteByte=m_pSO7_Serial->Send(sendDataI,12); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==12) + iWriteByte=m_pSO7_PCDSerial->Send(sendDataI,12); + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==12) { iRetrys++; Sleep(50); } - if (m_pSO7_Serial->m_iRecvState) + if (m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(100); - if(m_pSO7_Serial->m_csRecv==csRightRecv) + if(m_pSO7_PCDSerial->m_csRecv==csRightRecv) { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; iRetrys=0; iWriteByte=0; //Phase II - iWriteByte=m_pSO7_Serial->Send(sendDataII,6); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==6) + iWriteByte=m_pSO7_PCDSerial->Send(sendDataII,6); + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==6) { iRetrys++; Sleep(50); } - if(m_pSO7_Serial->m_iRecvState) + if(m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(100); - if(m_pSO7_Serial->m_csRecv==csRightRecv) + if(m_pSO7_PCDSerial->m_csRecv==csRightRecv) { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; iRetrys=0; iWriteByte=0; //Phase III - iWriteByte=m_pSO7_Serial->Send(sendDataIII,6); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==6) + iWriteByte=m_pSO7_PCDSerial->Send(sendDataIII,6); + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==6) { iRetrys++; Sleep(50); } - if(m_pSO7_Serial->m_iRecvState) + if(m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(100); - if(m_pSO7_Serial->m_csRecv==csRightRecv) + if(m_pSO7_PCDSerial->m_csRecv==csRightRecv) { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; iRetrys=0; iWriteByte=0; return TRUE; } else { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return FALSE; } } @@ -664,8 +664,8 @@ BOOL CSO7_Automatic_Zoom::CalibrateEncoder() } else { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return FALSE; } } @@ -677,8 +677,8 @@ BOOL CSO7_Automatic_Zoom::CalibrateEncoder() } else { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return FALSE; } @@ -749,7 +749,7 @@ void CSO7_Automatic_Zoom::OnBnClickedButtonSendData() UpdateData(TRUE); CString csSendData(""); GetDlgItem(IDC_EDIT_DATASEND)->GetWindowText(csSendData); - m_pSO7_Serial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_csRecv=_T(""); USES_CONVERSION; //加上回车换行符 CString csTemp; @@ -759,7 +759,7 @@ void CSO7_Automatic_Zoom::OnBnClickedButtonSendData() const char* cSendData; cSendData=T2A(csSendData); DWORD iSendDataLength=csSendData.GetLength(); - DWORD iWriteByte=m_pSO7_Serial->Send(cSendData,iSendDataLength); + DWORD iWriteByte=m_pSO7_PCDSerial->Send(cSendData,iSendDataLength); ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Send]: "))+cSendData);// @@ -767,36 +767,36 @@ void CSO7_Automatic_Zoom::OnBnClickedButtonSendData() m_StatusBar.SetText(csSendData, 1, 0); //接受数据 INT iRetrys(0); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20) + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20) { iRetrys++; Sleep(100); } - if (m_pSO7_Serial->m_iRecvState) + if (m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) { - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_iRecvState=FALSE; INT iRetrys2(0); - while(!m_pSO7_Serial->m_iRecvState && iRetrys2<60) + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys2<60) { iRetrys2++; Sleep(100); } - ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Recv]: "))+m_pSO7_Serial->m_csRecv); - m_pSO7_Serial->m_csRecv=_T(""); - csSendData.Format(_T("Recv(%dByte)"),m_pSO7_Serial->m_iRecvByte); + ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Recv]: "))+m_pSO7_PCDSerial->m_csRecv); + m_pSO7_PCDSerial->m_csRecv=_T(""); + csSendData.Format(_T("Recv(%dByte)"),m_pSO7_PCDSerial->m_iRecvByte); m_StatusBar.SetText(csSendData, 2, 0); } else { - ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Recv]: "))+m_pSO7_Serial->m_csRecv); - m_pSO7_Serial->m_csRecv=_T(""); - csSendData.Format(_T("Recv(%dByte)"),m_pSO7_Serial->m_iRecvByte); + ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Recv]: "))+m_pSO7_PCDSerial->m_csRecv); + m_pSO7_PCDSerial->m_csRecv=_T(""); + csSendData.Format(_T("Recv(%dByte)"),m_pSO7_PCDSerial->m_iRecvByte); m_StatusBar.SetText(csSendData, 2, 0); } - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_iRecvState=FALSE; } else { diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_UtilDlg.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_UtilDlg.cpp index 9242675..a291aff 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_UtilDlg.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_UtilDlg.cpp @@ -14,7 +14,7 @@ #include "SO7_UtilDlg.h" // CSO7_UtilDlg 对话框 -extern CSerial* m_pSO7_Serial; +extern CPSerial* m_pSO7_PCDSerial; extern CSO7_Proto* m_pSO7_Proto; CLogger* g_pLoggerDebug=NULL; CSO7_VolComp* g_pVolComp=NULL; @@ -437,9 +437,6 @@ void CSO7_UtilDlg::OnBnClickedButtonSo7ResetXyz() //===================================================================== void CSO7_UtilDlg::OnBnClickedButtonMoveTo() { - if (!m_pSO7_Serial) - m_pSO7_Serial = new CSerial(); - if(!g_pVolComp) g_pVolComp=new CSO7_VolComp(); @@ -448,11 +445,6 @@ void CSO7_UtilDlg::OnBnClickedButtonMoveTo() delete pSO7_Move_Location; pSO7_Move_Location=NULL; - if (m_pSO7_Serial) - { - delete m_pSO7_Serial; - m_pSO7_Serial=NULL; - } if (g_pVolComp) { delete g_pVolComp; @@ -465,8 +457,8 @@ void CSO7_UtilDlg::OnBnClickedButtonMoveTo() void CSO7_UtilDlg::OnBnClickedButtonAutoZoom() { - if (!m_pSO7_Serial) - m_pSO7_Serial = new CSerial(); + if (!m_pSO7_PCDSerial) + m_pSO7_PCDSerial = new CPSerial(); delete g_pLoggerDebug; g_pLoggerDebug=NULL; @@ -956,17 +948,17 @@ void CSO7_UtilDlg::OnBnClickedButtonLoadSo7config() void CSO7_UtilDlg::OnBnClickedButtonSetupSo7config() { KillTimer(1); - if (!m_pSO7_Serial) - m_pSO7_Serial = new CSerial(); + if (!m_pSO7_PCDSerial) + m_pSO7_PCDSerial = new CPSerial(); CSetup_so7config* pSetup_so7config=new CSetup_so7config; pSetup_so7config->DoModal(); delete pSetup_so7config; - if (m_pSO7_Serial) + if (m_pSO7_PCDSerial) { - delete m_pSO7_Serial; - m_pSO7_Serial=NULL; + delete m_pSO7_PCDSerial; + m_pSO7_PCDSerial=NULL; } SetTimer(1,150,NULL); } diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h index c47c880..4c85f75 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Verfication_Algorithm.h @@ -25,8 +25,8 @@ protected: protected: CFont m_BTNFont; public: - BOOL ThreePntsConstructionPanel(Struct_3DPoint* pArr,double* Coe); - double PointToPanelDistance(Struct_3DPoint PntPos,double* Coe); + BOOL ThreePntsConstructPlane(Struct_3DPoint* pArr,double* Coe); + double PointToPlaneDistance(Struct_3DPoint PntPos,double* Coe); afx_msg void OnBnClickedButtonImagedll2laserCalculate(); }; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Setup_so7config.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Setup_so7config.cpp index cb6be3e..12c3f97 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Setup_so7config.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Setup_so7config.cpp @@ -11,7 +11,7 @@ #include "Setup_so7config.h" -extern CSerial* m_pSO7_Serial; +extern CPSerial* m_pSO7_PCDSerial; extern CSO7_Proto* m_pSO7_Proto; #define PI 3.1415926535897932384626433 // CSetup_so7config dialog @@ -96,9 +96,9 @@ BOOL CSetup_so7config::OnInitDialog() m_pSO7_Proto->g_machine.zm._Move_Speed_Gear=2; ((CButton *)GetDlgItem(IDC_RADIO_SO7CONFIG_ZOOM_MOVE_FAST))->SetCheck(true); - if (m_pSO7_Serial) + if (m_pSO7_PCDSerial) { - if(m_pSO7_Serial->Open()) + if(m_pSO7_PCDSerial->Open()) { ChangGUIWithStep(m_nStep); m_csMsg.Format(_T("串口打开正常!")); @@ -389,24 +389,24 @@ double CSetup_so7config::ReadZoomAngle() _bReading=true; double dZoomAngle(-1); char sendData[6]={'A','D',':','0',13,10}; - DWORD iWriteByte=m_pSO7_Serial->Send(sendData,6); + DWORD iWriteByte=m_pSO7_PCDSerial->Send(sendData,6); INT iRetrys(0); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==6) + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==6) { iRetrys++; Sleep(10); } - if (m_pSO7_Serial->m_iRecvState) + if (m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(40);//200 char *cRecvData= NULL; char *token = NULL; char cTemp[20]={0}; USES_CONVERSION; - cRecvData=T2A(m_pSO7_Serial->m_csRecv); + cRecvData=T2A(m_pSO7_PCDSerial->m_csRecv); char seps[] = "$AD:"; @@ -419,8 +419,8 @@ double CSetup_so7config::ReadZoomAngle() }; token=NULL; cRecvData=NULL; - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; _bReading=false; return dZoomAngle; } @@ -484,72 +484,72 @@ BOOL CSetup_so7config::CalibrateEncoder() csRightRecv.Format(_T("@OK\r\n")); INT iRetrys(0); DWORD iWriteByte(0); - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; //Phase I - iWriteByte=m_pSO7_Serial->Send(sendDataI,12); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==12) + iWriteByte=m_pSO7_PCDSerial->Send(sendDataI,12); + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==12) { iRetrys++; Sleep(50); } - if (m_pSO7_Serial->m_iRecvState) + if (m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(100); - if(m_pSO7_Serial->m_csRecv==csRightRecv) + if(m_pSO7_PCDSerial->m_csRecv==csRightRecv) { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; iRetrys=0; iWriteByte=0; //Phase II - iWriteByte=m_pSO7_Serial->Send(sendDataII,6); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==6) + iWriteByte=m_pSO7_PCDSerial->Send(sendDataII,6); + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==6) { iRetrys++; Sleep(50); } - if(m_pSO7_Serial->m_iRecvState) + if(m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(100); - if(m_pSO7_Serial->m_csRecv==csRightRecv) + if(m_pSO7_PCDSerial->m_csRecv==csRightRecv) { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; iRetrys=0; iWriteByte=0; //Phase III - iWriteByte=m_pSO7_Serial->Send(sendDataIII,6); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20 && iWriteByte==6) + iWriteByte=m_pSO7_PCDSerial->Send(sendDataIII,6); + while(!m_pSO7_PCDSerial->m_iRecvState && iRetrys<20 && iWriteByte==6) { iRetrys++; Sleep(50); } - if(m_pSO7_Serial->m_iRecvState) + if(m_pSO7_PCDSerial->m_iRecvState) { - if(m_pSO7_Serial->m_csRecv==_T("")) + if(m_pSO7_PCDSerial->m_csRecv==_T("")) Sleep(100); - if(m_pSO7_Serial->m_csRecv==csRightRecv) + if(m_pSO7_PCDSerial->m_csRecv==csRightRecv) { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; iRetrys=0; iWriteByte=0; return TRUE; } else { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return FALSE; } } @@ -560,8 +560,8 @@ BOOL CSetup_so7config::CalibrateEncoder() } else { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return FALSE; } } @@ -573,8 +573,8 @@ BOOL CSetup_so7config::CalibrateEncoder() } else { - m_pSO7_Serial->m_csRecv=_T(""); - m_pSO7_Serial->m_iRecvState=FALSE; + m_pSO7_PCDSerial->m_csRecv=_T(""); + m_pSO7_PCDSerial->m_iRecvState=FALSE; return FALSE; } diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp index 3d50218..252ff86 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.cpp @@ -3,10 +3,11 @@ #include "stdafx.h" #include "resource.h" -#include "..\..\..\SevenOcean\CMMIO_SERIAL.H" +#include "..\..\..\SevenOcean\Serial.h" #include "So7_Manual_Machine.h" #include "afxdialogex.h" +#define MAX_OUTPUT_BUFFER_SIZE 512 extern CSerial* m_pSO7_Serial; // CSo7_Manual_Machine dialog @@ -24,6 +25,7 @@ CSo7_Manual_Machine::~CSo7_Manual_Machine() void CSo7_Manual_Machine::DoDataExchange(CDataExchange* pDX) { + DDX_Control(pDX, IDC_EDIT_MANUAL_MACHINE_MSG, m_edMSG); CDialog::DoDataExchange(pDX); } @@ -95,26 +97,11 @@ void CSo7_Manual_Machine::OnBnClickedButtonSo7ManualMachineStartMachine() { if (m_pSO7_Serial) { - CString Param,Params; - int Port; - int Baud; - char Parity; - int Bits; - int StopBits; - int HandShake; - m_pSO7_Serial->GetPortData(&Port,&Baud,&Parity,&Bits,&StopBits,&HandShake); - Params.Format( TEXT("[COM%d]"), Port ); - Param.Format( TEXT(" Baud=%d"), Baud ); - Params += Param; - Param.Format( TEXT(" Parity=%c"), Parity ); - Params += Param; - Param.Format( TEXT(" Data=%d"), Bits ); - Params += Param; - Param.Format( TEXT(" Stop=%d"), StopBits ); - Params += Param; + CString Params; + Params =_T("[COM1]Baud=19200,Parity=N,Data=8,Stop=0"); m_StatusBar.SetText(Params, 0, 0); - if(m_pSO7_Serial->Open()) + if(m_pSO7_Serial->Open(1,19200)) { m_StatusBar.SetText(_T("成功打开串口"), 1, 0); GetDlgItem(IDC_BUTTON_SO7_MANUAL_MACHINE_SEND_DATA)->EnableWindow(TRUE); @@ -130,6 +117,10 @@ void CSo7_Manual_Machine::OnBnClickedButtonSo7ManualMachineStartMachine() //=================================================== void CSo7_Manual_Machine::OnBnClickedButtonSo7ManualMachineStopMachine() { + if (m_pSO7_Serial) + { + m_pSO7_Serial->Close(); + } GetDlgItem(IDC_BUTTON_SO7_MANUAL_MACHINE_SEND_DATA)->EnableWindow(TRUE); } @@ -166,50 +157,64 @@ void CSo7_Manual_Machine::OnBnClickedRadioSo7ManualMachineSendDataTypeAnscii() //=================================================== void CSo7_Manual_Machine::OnBnClickedButtonSo7ManualMachineSendData() { - /* UpdateData(TRUE); USES_CONVERSION; CString csSendData(L""); GetDlgItem(IDC_EDIT_SO7_MANUAL_MACHINE_DATA)->GetWindowText(csSendData); const char* cSendData=T2A(csSendData); + + int iSendDataLength(0); + int iWriteByte(0); + int iReadByte(0); + if (m_SendType==HEXADECIMAL) { - char* stop; - BYTE bSendData[MAX_OUTPUT_BUFFER_SIZE]={0}; - INT iSendDataLength=(csSendData.GetLength()+1)/3; - for(INT i=0;iSendData((const char*)bSendData,iSendDataLength); } else { - m_pSO7_Serial->m_csRecv=_T(""); - - //加上回车换行符 - CString csTemp; - csTemp.Format(_T("\r\n")); - csSendData+=csTemp; - - - cSendData=T2A(csSendData); + //加上回车换行符 + CString csTemp; + csTemp.Format(_T("\r\n")); + csSendData+=csTemp; + cSendData=T2A(csSendData); + iSendDataLength=csSendData.GetLength(); + iWriteByte=m_pSO7_Serial->SendData(cSendData,iSendDataLength); } - DWORD iSendDataLength=csSendData.GetLength(); - DWORD iWriteByte=m_pSO7_Serial->Send(cSendData,iSendDataLength); - ((CListBox *)GetDlgItem(IDC_LIST_SHOWMESSAGE))->InsertString(-1,CString(_T("[Send]: "))+cSendData);// + m_OutMessage=_T("[Send] ")+csSendData; + OutputWithScroll(m_OutMessage,m_edMSG); - csSendData.Format(_T("Send(%dByte)"),iWriteByte); - m_StatusBar.SetText(csSendData, 1, 0); + m_OutMessage.Format(_T("Send(%dByte)"),iWriteByte); + m_StatusBar.SetText(m_OutMessage, 1, 0); //接受数据 INT iRetrys(0); - while(!m_pSO7_Serial->m_iRecvState && iRetrys<20) + while(!m_pSO7_Serial->ReadDataWaiting() && iRetrys<20) { iRetrys++; Sleep(100); } - */ + if (iRetrys<20) + { + BYTE RecvData[MAX_OUTPUT_BUFFER_SIZE]={0}; + iReadByte=m_pSO7_Serial->ReadData(RecvData,MAX_OUTPUT_BUFFER_SIZE); + m_OutMessage.Format(_T("[Recv]%s"),RecvData); + OutputWithScroll(m_OutMessage,m_edMSG); + m_OutMessage.Format(_T("Recv(%dByte)"),iReadByte); + m_StatusBar.SetText(m_OutMessage, 2, 0); + } + else + { + m_StatusBar.SetText(_T("Time Out!"), 2, 0); + } } //=================================================== @@ -248,3 +253,25 @@ void CSo7_Manual_Machine::OnBnClickedCancel() OnBnClickedButtonSo7ManualMachineStopMachine(); CDialog::OnCancel(); } + +//===================================================================================== +//Print message on edit control +void CSo7_Manual_Machine::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); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h index 8954c3a..1b5ca44 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Manual_Machine.h @@ -23,8 +23,10 @@ protected: DECLARE_MESSAGE_MAP() protected: CStatusBarCtrl m_StatusBar; - CEdit m_edit_Log; - char m_SendType; + CString m_OutMessage; + CEdit m_edMSG; + char m_SendType; + void OutputWithScroll(const CString &strNewText,CEdit &edtOutput); public: afx_msg void OnBnClickedButtonSo7ManualMachineStartMachine(); afx_msg void OnBnClickedButtonSo7ManualMachineStopMachine(); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp index 9763aec..a39bf04 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Option.cpp @@ -32,12 +32,15 @@ #include "SO7_Verfication_Algorithm.h" +#include "..\..\..\SevenOcean\Serial.h" +#include "So7_Manual_Machine.h" + #include "So7_Option.h" #include "afxdialogex.h" //#define _RELEASE_ONLY_ONE_FUNCTION - CSerial* m_pSO7_Serial=NULL; +CPSerial* m_pSO7_PCDSerial=NULL; CSO7_Proto* m_pSO7_Proto=NULL; CKeyence_Laser* m_pKeyence_Laser=NULL; CKeyence_Laser_LK_H* m_pKeyence_Laser_LK_H=NULL; @@ -101,9 +104,9 @@ BOOL CSo7_Option::OnInitDialog() ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SV2000E))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_TC4000))->SetCheck(FALSE); - ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->SetCheck(TRUE); + ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->SetCheck(FALSE); - ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(TRUE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->SetCheck(FALSE); #ifdef _RELEASE_ONLY_ONE_FUNCTION @@ -157,7 +160,7 @@ void CSo7_Option::OnBnClickedOk() m_pKeyence_Proto=NULL; delete m_pSO7_Proto; m_pSO7_Proto=NULL; - } + } else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->GetCheck()) { CVideocard_SDK3000* pVideocard_SDK3000=new CVideocard_SDK3000(); @@ -196,6 +199,20 @@ void CSo7_Option::OnBnClickedOk() CSO7_Verfication_Algorithm* pSO7_Verfication_Algorithm=new CSO7_Verfication_Algorithm(); pSO7_Verfication_Algorithm->DoModal(); } + else if (((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->GetCheck()) + { + if (!m_pSO7_Serial) + m_pSO7_Serial = new CSerial(); + + CSo7_Manual_Machine* pSo7_Manual_Machine=new CSo7_Manual_Machine(); + pSo7_Manual_Machine->DoModal(); + + if (m_pSO7_Serial) + { + delete m_pSO7_Serial; + m_pSO7_Serial=NULL; + } + } #ifdef _RELEASE_ONLY_ONE_FUNCTION 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 459c4ca..755d84a 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 @@ -213,6 +213,7 @@ + @@ -267,6 +268,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 0a0acf3..8a7bec1 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 @@ -121,7 +121,12 @@ Sources Files - + + Sources Files + + + Sources Files + @@ -274,7 +279,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 153af00..0192be3 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -345,6 +345,8 @@ #define IDC_EDIT_IMAGEDLL_2LASER_TOPZ1 1274 #define IDC_EDIT_FRESHSPEED_X2 1275 #define IDC_EDIT_IMAGEDLL_2LASER_TOPZ2 1275 +#define IDC_EDIT_REPRETEST2 1275 +#define IDC_EDIT_MANUAL_MACHINE_MSG 1275 #define IDC_EDIT_FRESHSPEED_X3 1276 #define IDC_EDIT_IMAGEDLL_2LASER_TOPZ3 1276 #define IDC_BUTTON_ZERO_SET 1277 @@ -356,7 +358,6 @@ #define IDC_EDIT_FRESHSPEED_Y1 1279 #define IDC_EDIT_IMAGEDLL_2LASER_TOPZ6 1279 #define IDC_BUTTON_SAVE 1280 -#define IDC_EDIT_IMAGEDLL_2LASER_TOPZ7 1280 #define IDC_EDIT_IMAGEDLL_2LASER_BOTTOMZ__CALIBRATE 1280 #define IDC_BUTTON_SAVE_PARAMETER 1281 #define IDC_EDIT_IMAGEDLL_2LASER_TOPZ_CALIBRATE 1281 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 78fce168e5627dc145bd2dcbc6beda1f570950aa..8063e9504ea451a3862f9567173c6d511e535990 100644 GIT binary patch delta 9143 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 CXR8PR delta 8728 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