From c722659c411d592941251cbe3e92dd4e96725ca4 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Mon, 17 Jun 2013 15:29:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=BF=90=E5=8A=A8=E6=9B=B2?= =?UTF-8?q?=E7=BA=BF=E5=9B=BE=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 57 +++ .../Tools/UsbUtility/UsbUtil/DrawGraph.cpp | 58 ++- .../Hsi/Tools/UsbUtility/UsbUtil/DrawGraph.h | 9 +- .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 33 +- .../UsbUtility/UsbUtil/SO7_Send_Parameter.cpp | 448 +++++++++++------- .../UsbUtility/UsbUtil/SO7_Send_Parameter.h | 129 ++--- .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 6 +- .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 5 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 1202176 -> 1202176 bytes 9 files changed, 473 insertions(+), 272 deletions(-) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log index c27ca05..6678e01 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log @@ -1159,3 +1159,60 @@ Construct Cso7_Proto. Destruct Cso7_Proto. Construct Cso7_Proto. Destruct Cso7_Proto. +Construct Cso7_Proto. +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. +Construct Cso7_Proto. +Init:Open device succeed . +_start_machine +Exit: Exit_SO7Usb +Destruct Cso7_Proto. diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/DrawGraph.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/DrawGraph.cpp index 831bde3..01576ab 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/DrawGraph.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/DrawGraph.cpp @@ -2,6 +2,7 @@ // #include "stdafx.h" +#include #include "DrawGraph.h" @@ -87,6 +88,12 @@ void CDrawGraph::SetViewFont(const CString& strFont, int nPointSize, int nWeight Invalidate(); } //======================================================== +void CDrawGraph::SetCoordinateLabel(const CString& _XAxis,const CString& _YAxis) +{ + m_XAxisLabel=_XAxis; + m_YAxisLabel=_YAxis; +} +//======================================================== void CDrawGraph::SetMargin(int nLeft, int nTop, int nRight, int nBottom, BOOL bIsRedraw) { m_nMarginLeft = nLeft; @@ -125,7 +132,26 @@ void CDrawGraph::SetResolution(double dbResolutionX, double dbResolutionY, BOOL Invalidate(); } //======================================================== -void CDrawGraph::LoadGraphyData(DataBuff& dataShow) +void CDrawGraph::LoadGraphyXAxisData(DataBuff& dataShow) +{ + double dbData; + INT_PTR nCount = dataShow.GetCount(); + + if(nCount==0) + return; + + m_dataGraphX.RemoveAll(); + m_dataGraphX.SetSize(nCount); + for(int i=0; iSelectObject (&font); - pDC->TextOut(rectCoord.left-40,rectCoord.top+(rectCoord.Height()/2)+30,_T("速度(mm/s)"));//旋转90°输出 + pDC->TextOut(rectCoord.left-40,rectCoord.top+(rectCoord.Height()/2)+30,m_YAxisLabel);//旋转90°输出 pDC->SelectObject (pOldFont); - pDC->TextOut(rectCoord.left-20+(rectCoord.Width()/2),rectCoord.bottom+15,_T("时间(s)")); + pDC->TextOut(rectCoord.left-20+(rectCoord.Width()/2),rectCoord.bottom+15,m_XAxisLabel); nOffset = 4; rectTemp.SetRect(rectCoord.left+nOffset, rectCoord.top+1, rectCoord.right, rectCoord.bottom-nOffset); @@ -226,18 +252,18 @@ void CDrawGraph::DrawActualCurve(CDC *pDC, CRect rectCoord) CRect rectView; CRgn rgnTemp, rgnView; CPen penLine, *pOldPen; - INT_PTR nCount = m_dataGraph.GetCount(); + INT_PTR nCount = m_dataGraphY.GetCount(); if(nCount==0) return; double dbData(0.0); int nOffsetX(0), nOffsetY(0),nOriginX(0),nOriginY(0); - dbData = m_dataGraph.ElementAt(0); + dbData = m_dataGraphY.ElementAt(0); nOriginX = rectCoord.left; nOriginY = rectCoord.bottom;; nOffsetX = static_cast(m_dbResolutionX*(rectCoord.Width())); - nOffsetY = static_cast(m_dbResolutionY*(rectCoord.Height())*dbData); + nOffsetY = static_cast(m_dbResolutionY*(rectCoord.Height())*(dbData-m_dbStartY)); rgnTemp.CreateRectRgnIndirect(rectCoord); pDC->SelectObject(rgnTemp); @@ -249,8 +275,8 @@ void CDrawGraph::DrawActualCurve(CDC *pDC, CRect rectCoord) for(int i=1; i(m_dbResolutionY*(rectCoord.Height())*dbData); + dbData = m_dataGraphY.ElementAt(i); + nOffsetY = static_cast(m_dbResolutionY*(rectCoord.Height())*(dbData-m_dbStartY)); pDC->LineTo(nOriginX+nOffsetX*i, nOriginY-nOffsetY); } @@ -265,7 +291,7 @@ void CDrawGraph::DrawIdealCurve(CDC *pDC, CRect rectCoord) CRect rectView; CRgn rgnTemp, rgnView; CPen penLine, *pOldPen; - INT_PTR nCount = m_dataGraph.GetCount(); + INT_PTR nCount = m_dataGraphY.GetCount(); if(nCount==0) return; @@ -285,13 +311,13 @@ void CDrawGraph::DrawIdealCurve(CDC *pDC, CRect rectCoord) penLine.CreatePen(PS_SOLID, 1, m_clrWave); pOldPen = pDC->SelectObject(&penLine); - dbData = m_dataGraph.ElementAt(0); + dbData = m_dataGraphY.ElementAt(0); nOffsetY = int(nCoordHeight*dbData/nRangY); pDC->MoveTo(nOriginX, nOriginY-nOffsetY); for(int i=1; iGetWindowRect(&CanvasRect); + //CanvasRect.SetRect(550,50,1100,600);//L T R B + +}; +//================================================================================================ +BOOL CSO7_Send_Parameter::OnEraseBkgnd(CDC* pDC) +{ + //UNREFERENCED_PARAMETER(pDC); + //return TRUE; + return CDialog::OnEraseBkgnd(pDC); +} + //================================================================ void CSO7_Send_Parameter::OnBnClickedOk() { KillTimer(1); CDialog::OnOK(); } +#pragma region Send_Parameter + //================================================================ void CSO7_Send_Parameter::OnBnClickedButtonBrowse() { @@ -467,156 +488,9 @@ void CSO7_Send_Parameter::ShowParameterOnEdit() UpdateData(FALSE); } +#pragma endregion -//================================================================ -void CSO7_Send_Parameter::OnDraw(CDC* pDC) -{ - UNREFERENCED_PARAMETER(pDC); - //CWnd* m_p=(CWnd*)GetDlgItem(IDC_STATIC_CANVAS); - //m_p->GetWindowRect(&CanvasRect); - //CanvasRect.SetRect(550,50,1100,600);//L T R B - -}; - - -//================================================================================================ -void CSO7_Send_Parameter::OnTimer(UINT_PTR nIDEvent) -{ - USES_CONVERSION; - switch(nIDEvent) - { - case 1: - { - if (m_pSO7_Proto) - { - if (m_pSO7_Proto->g_machine.s_status._machine_running) - { - m_pSO7_Proto->_send_cmd_SO7_CMD_READ_AXIS_XYZ(); - - if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_POSTION_TIME))->GetCheck()) - { - if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_X))->GetCheck()) - { - m_pSO7_Proto->g_machine.x._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.x._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.x_axis._scale_resolution); - m_FinishTime=clock(); - m_duration=m_FinishTime-m_StartTime; - m_dataGraph.Add(m_pSO7_Proto->g_machine.x._d_cur_pos_); - if((abs(m_pSO7_Proto->g_machine.x._d_cur_pos_)-abs(m_dPos))<0.0) - { - m_csMSG.Format(_T("X Reverse;%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.x._d_cur_pos_); - OutputWithScroll(m_csMSG,m_edMSG); - } - else - { - m_csMSG.Format(_T("X Normal;%f->%f"),m_dPos,m_pSO7_Proto->g_machine.x._d_cur_pos_); - OutputWithScroll(m_csMSG,m_edMSG); - } - m_dPos=m_pSO7_Proto->g_machine.x._d_cur_pos_; - } - else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Y))->GetCheck()) - { - m_pSO7_Proto->g_machine.y._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.y._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.y_axis._scale_resolution); - m_FinishTime=clock(); - m_duration=m_FinishTime-m_StartTime; - m_dataGraph.Add(m_pSO7_Proto->g_machine.y._d_cur_pos_); - if((abs(m_pSO7_Proto->g_machine.y._d_cur_pos_)-abs(m_dPos))<0.0) - { - m_csMSG.Format(_T("Y Reverse;%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.y._d_cur_pos_); - OutputWithScroll(m_csMSG,m_edMSG); - } - else - { - m_csMSG.Format(_T("Y Normal;%f->%f"),m_dPos,m_pSO7_Proto->g_machine.y._d_cur_pos_); - OutputWithScroll(m_csMSG,m_edMSG); - } - m_dPos=m_pSO7_Proto->g_machine.y._d_cur_pos_; - } - else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Z))->GetCheck()) - { - m_pSO7_Proto->g_machine.z._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.z._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.z_axis._scale_resolution); - m_FinishTime=clock(); - m_duration=m_FinishTime-m_StartTime; - m_dataGraph.Add(m_pSO7_Proto->g_machine.z._d_cur_pos_); - if((abs(m_pSO7_Proto->g_machine.z._d_cur_pos_)-abs(m_dPos))<0.0) - { - m_csMSG.Format(_T("Z Reverse;%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.z._d_cur_pos_); - OutputWithScroll(m_csMSG,m_edMSG); - } - else - { - m_csMSG.Format(_T("Z Normal;%f->%f"),m_dPos,m_pSO7_Proto->g_machine.z._d_cur_pos_); - OutputWithScroll(m_csMSG,m_edMSG); - } - m_dPos=m_pSO7_Proto->g_machine.z._d_cur_pos_; - } - - if(nCount!=0) - {if (abs(m_dataGraph.ElementAt(nCount)-m_dataGraph.ElementAt(nCount-1))<0.000001) - { - m_DrawGraph.LoadGraphyData(m_dataGraph); - KillTimer(1); - }} - } - else - { - if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_X))->GetCheck()) - { - m_pSO7_Proto->g_machine.x._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.x._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.x_axis._scale_resolution); - m_FinishTime=clock(); - m_duration=m_FinishTime-m_StartTime; - m_dataGraph.Add(static_cast(((1000.0*(fabs(m_pSO7_Proto->g_machine.x._d_cur_pos_-m_dPos)))/m_duration))); - m_dPos=m_pSO7_Proto->g_machine.x._d_cur_pos_; - } - else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Y))->GetCheck()) - { - m_pSO7_Proto->g_machine.y._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.y._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.y_axis._scale_resolution); - m_FinishTime=clock(); - m_duration=m_FinishTime-m_StartTime; - m_dataGraph.Add(static_cast(1000.0*(fabs(m_pSO7_Proto->g_machine.y._d_cur_pos_-m_dPos)/m_duration))); - m_dPos=m_pSO7_Proto->g_machine.y._d_cur_pos_; - } - else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Z))->GetCheck()) - { - m_pSO7_Proto->g_machine.z._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.z._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.z_axis._scale_resolution); - m_FinishTime=clock(); - m_duration=m_FinishTime-m_StartTime; - m_dataGraph.Add(static_cast(1000.0*(fabs(m_pSO7_Proto->g_machine.z._d_cur_pos_-m_dPos)/m_duration))); - m_dPos=m_pSO7_Proto->g_machine.z._d_cur_pos_; - } - - if (m_TimerCnt<=nCount) - { - KillTimer(1); - INT_PTR nTmpCount = m_dataGraph.GetCount(); - double dbData(0.0); - m_dbEndY=dbData; - m_dbStartY=dbData; - for(int i=0; im_dbEndY) - m_dbEndY=dbData; - if(dbData(1/(m_dbEndY-m_dbStartY)); - m_DrawGraph.SetGraphyView(m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY,m_nDivisionX,m_nDivisionY); - m_DrawGraph.SetResolution(m_dbResolutionX,m_dbResolutionY); - m_DrawGraph.LoadGraphyData(m_dataGraph); - } - - } - - nCount++; - m_StartTime=clock(); - } - } - break; - } - } - - CDialog::OnTimer(nIDEvent); -} +//#pragma region Sample_Motion_Curve //================================================================================================ void CSO7_Send_Parameter::OnEnKillfocusEditSampleScurveDis() @@ -629,6 +503,14 @@ void CSO7_Send_Parameter::OnEnKillfocusEditSampleScurveDis() const char* cTempValue=T2A(str); m_dMoveDis = atof(cTempValue); + if (m_dMoveDis<0) + { + m_MotionDir=false; + } + else + { + m_MotionDir=true; + } } @@ -643,11 +525,27 @@ void CSO7_Send_Parameter::OnEnKillfocusEditSampleTimeScurve() const char* cTempValue=T2A(str); m_SampleTime = atof(cTempValue); - m_dbStartX=0; - m_dbEndX=m_SampleTime; - m_dbResolutionX=static_cast(m_TimerInterval/(m_dbEndX*1000.0));//每一次采样所需时间对应X坐标的长度 - m_DrawGraph.SetResolution(m_dbResolutionX,m_dbResolutionY); - m_DrawGraph.SetGraphyView(m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY,m_nDivisionX,m_nDivisionY,TRUE); + if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_POSTION_TIME))->GetCheck()) + { + m_dbStartX=0; + m_dbEndX=m_SampleTime; + m_dbResolutionX=static_cast(m_TimerInterval/(m_dbEndX*1000.0));//每一次采样所需时间对应X坐标的长度 + m_DrawGraph.SetResolution(m_dbResolutionX,m_dbResolutionY); + m_DrawGraph.SetGraphyView(m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY,m_nDivisionX,m_nDivisionY,TRUE); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_TIME))->GetCheck()) + { + m_dbStartX=0; + m_dbEndX=m_SampleTime; + m_dbResolutionX=static_cast(m_TimerInterval/(m_dbEndX*1000.0));//每一次采样所需时间对应X坐标的长度 + m_DrawGraph.SetResolution(m_dbResolutionX,m_dbResolutionY); + m_DrawGraph.SetGraphyView(m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY,m_nDivisionX,m_nDivisionY,TRUE); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_POSTION))->GetCheck()) + { + ; + } + } //================================================================================================ @@ -676,14 +574,19 @@ void CSO7_Send_Parameter::OnBnClickedButtonStartSampleScurve() m_dbEndX=m_SampleTime; if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_POSTION_TIME))->GetCheck()) { - // m_dbStartY=0; - // m_dbEndY=50; m_dbResolutionX=static_cast(m_TimerInterval/(m_dbEndX*1000.0));//每一次采样所需时间对应X坐标的长度 - // m_dbResolutionY=static_cast(1/m_dbEndY); m_nDivisionX=10; m_nDivisionY=10; + m_DrawGraph.SetCoordinateLabel(_T("时间(s)"),_T("位置(mm)")); } - else + else if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_TIME))->GetCheck()) + { + m_dbResolutionX=static_cast(m_TimerInterval/(m_dbEndX*1000.0));//每一次采样所需时间对应X坐标的长度 + m_nDivisionX=10; + m_nDivisionY=10; + m_DrawGraph.SetCoordinateLabel(_T("时间(s)"),_T("速度(mm/s)")); + } + else if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_POSTION))->GetCheck()) { //m_dbStartY=0; //m_dbEndY=50; @@ -691,11 +594,11 @@ void CSO7_Send_Parameter::OnBnClickedButtonStartSampleScurve() //m_dbResolutionY=static_cast(1/m_dbEndY); m_nDivisionX=10; m_nDivisionY=10; + m_DrawGraph.SetCoordinateLabel(_T("位置(mm)"),_T("速度(mm/s)")); } - nCount=0; - m_dataGraph.RemoveAll(); + m_dataGraphY.RemoveAll(); m_DrawGraph.SetGraphyView(m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY,m_nDivisionX,m_nDivisionY); m_DrawGraph.SetResolution(m_dbResolutionX,m_dbResolutionY); m_TimerCnt=static_cast((m_SampleTime*1000)/m_TimerInterval); @@ -709,20 +612,225 @@ void CSO7_Send_Parameter::OnBnClickedButtonStopSampleScurve() { m_TimerCnt=0; } +//================================================================================================ +void CSO7_Send_Parameter::Sample_Speed_Time_Curve() +{ + if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_X))->GetCheck()) + { + m_pSO7_Proto->g_machine.x._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.x._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.x_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(static_cast(((1000.0*(fabs(m_pSO7_Proto->g_machine.x._d_cur_pos_-m_dPos)))/m_duration))); + m_dPos=m_pSO7_Proto->g_machine.x._d_cur_pos_; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Y))->GetCheck()) + { + m_pSO7_Proto->g_machine.y._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.y._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.y_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(static_cast(1000.0*(fabs(m_pSO7_Proto->g_machine.y._d_cur_pos_-m_dPos)/m_duration))); + m_dPos=m_pSO7_Proto->g_machine.y._d_cur_pos_; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Z))->GetCheck()) + { + m_pSO7_Proto->g_machine.z._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.z._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.z_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(static_cast(1000.0*(fabs(m_pSO7_Proto->g_machine.z._d_cur_pos_-m_dPos)/m_duration))); + m_dPos=m_pSO7_Proto->g_machine.z._d_cur_pos_; + } +}; //================================================================================================ -BOOL CSO7_Send_Parameter::OnEraseBkgnd(CDC* pDC) +void CSO7_Send_Parameter::Sample_Position_Time_Curve() { - //UNREFERENCED_PARAMETER(pDC); - //return TRUE; - return CDialog::OnEraseBkgnd(pDC); -} - -void CSO7_Send_Parameter::OnBnClickedRadioCanvasSpeedTime() -{ - // TODO: Add your control notification handler code here + if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_X))->GetCheck()) + { + m_pSO7_Proto->g_machine.x._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.x._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.x_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(m_pSO7_Proto->g_machine.x._d_cur_pos_); + if (m_MotionDir) + { + if((m_pSO7_Proto->g_machine.x._d_cur_pos_-m_dPos)<0.0) + { + m_csMSG.Format(_T("X Reverse:%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.x._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + else + { + m_csMSG.Format(_T("X Normal:%f->%f"),m_dPos,m_pSO7_Proto->g_machine.x._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + } + else + { + if((m_pSO7_Proto->g_machine.x._d_cur_pos_-m_dPos)>0.0) + { + m_csMSG.Format(_T("X Reverse:%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.x._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + else + { + m_csMSG.Format(_T("X Normal:%f->%f"),m_dPos,m_pSO7_Proto->g_machine.x._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + } + m_dPos=m_pSO7_Proto->g_machine.x._d_cur_pos_; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Y))->GetCheck()) + { + m_pSO7_Proto->g_machine.y._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.y._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.y_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(m_pSO7_Proto->g_machine.y._d_cur_pos_); + if (m_MotionDir) + { + if((m_pSO7_Proto->g_machine.y._d_cur_pos_-m_dPos)<0.0) + { + m_csMSG.Format(_T("Y Reverse:%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.y._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + else + { + m_csMSG.Format(_T("Y Normal:%f->%f"),m_dPos,m_pSO7_Proto->g_machine.y._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + } + else + { + if((m_pSO7_Proto->g_machine.y._d_cur_pos_-m_dPos)>0.0) + { + m_csMSG.Format(_T("Y Reverse:%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.y._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + else + { + m_csMSG.Format(_T("Y Normal:%f->%f"),m_dPos,m_pSO7_Proto->g_machine.y._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + } + + m_dPos=m_pSO7_Proto->g_machine.y._d_cur_pos_; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Z))->GetCheck()) + { + m_pSO7_Proto->g_machine.z._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.z._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.z_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(m_pSO7_Proto->g_machine.z._d_cur_pos_); + if (m_MotionDir) + { + if((m_pSO7_Proto->g_machine.z._d_cur_pos_-m_dPos)<0.0) + { + m_csMSG.Format(_T("Z Reverse:%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.z._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + else + { + m_csMSG.Format(_T("Z Normal:%f->%f"),m_dPos,m_pSO7_Proto->g_machine.z._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + } + else + { + if((m_pSO7_Proto->g_machine.z._d_cur_pos_-m_dPos)>0.0) + { + m_csMSG.Format(_T("Z Reverse:%f->%f!!!"),m_dPos,m_pSO7_Proto->g_machine.z._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + else + { + m_csMSG.Format(_T("Z Normal:%f->%f"),m_dPos,m_pSO7_Proto->g_machine.z._d_cur_pos_); + OutputWithScroll(m_csMSG,m_edMSG); + } + } + m_dPos=m_pSO7_Proto->g_machine.z._d_cur_pos_; + } + +}; +//================================================================================================ +void CSO7_Send_Parameter::Sample_Speed_Position_Curve() +{ + if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_X))->GetCheck()) + { + m_pSO7_Proto->g_machine.x._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.x._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.x_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(static_cast(((1000.0*(fabs(m_pSO7_Proto->g_machine.x._d_cur_pos_-m_dPos)))/m_duration))); + m_dPos=m_pSO7_Proto->g_machine.x._d_cur_pos_; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Y))->GetCheck()) + { + m_pSO7_Proto->g_machine.y._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.y._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.y_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(static_cast(1000.0*(fabs(m_pSO7_Proto->g_machine.y._d_cur_pos_-m_dPos)/m_duration))); + m_dPos=m_pSO7_Proto->g_machine.y._d_cur_pos_; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_SAMPLE_Z))->GetCheck()) + { + m_pSO7_Proto->g_machine.z._d_cur_pos_ = m_pSO7_Proto->ScaleToMM(m_pSO7_Proto->g_machine.z._scale_pos._long_, m_pSO7_Proto->g_machine.s_machine_config.z_axis._scale_resolution); + m_duration=m_FinishTime-m_StartTime; + m_dataGraphY.Add(static_cast(1000.0*(fabs(m_pSO7_Proto->g_machine.z._d_cur_pos_-m_dPos)/m_duration))); + m_dPos=m_pSO7_Proto->g_machine.z._d_cur_pos_; + } +}; +//================================================================================================ +void CSO7_Send_Parameter::OnTimer(UINT_PTR nIDEvent) +{ + USES_CONVERSION; + switch(nIDEvent) + { + case 1: + { + if (m_pSO7_Proto) + { + if (m_pSO7_Proto->g_machine.s_status._machine_running) + { + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_AXIS_XYZ(); + m_FinishTime=clock(); + if(((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_TIME))->GetCheck()) + { + Sample_Speed_Time_Curve(); + } + else if (((CButton *)GetDlgItem(IDC_RADIO_CANVAS_SPEED_POSTION))->GetCheck()) + { + Sample_Speed_Position_Curve(); + } + else if (((CButton *)GetDlgItem(IDC_RADIO_CANVAS_POSTION_TIME))->GetCheck()) + { + Sample_Position_Time_Curve(); + } + if (m_TimerCnt<=nCount) + { + KillTimer(1); + INT_PTR nTmpCount = m_dataGraphY.GetCount(); + double dbData(0.0); + dbData = m_dataGraphY.ElementAt(0); + m_dbEndY=dbData; + m_dbStartY=dbData; + for(INT_PTR i=10; i0.0 &&(dbData-m_dbEndY)0.0 &&(m_dbStartY-dbData)(1.0/(m_dbEndY-m_dbStartY)); + m_DrawGraph.SetGraphyView(m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY,m_nDivisionX,m_nDivisionY); + m_DrawGraph.SetResolution(m_dbResolutionX,m_dbResolutionY); + m_DrawGraph.LoadGraphyYAxisData(m_dataGraphY); + } + + nCount++; + m_StartTime=clock(); + } + + + } + break; + } + } + + CDialog::OnTimer(nIDEvent); } +//#pragma endregion //===================================================================================== //Print message on edit control void CSO7_Send_Parameter::OutputWithScroll(const CString &strNewText,CEdit &edtOutput) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Send_Parameter.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Send_Parameter.h index 59c5498..7f9d537 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Send_Parameter.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SO7_Send_Parameter.h @@ -7,93 +7,98 @@ class CSO7_Send_Parameter : public CDialog { - DECLARE_DYNAMIC(CSO7_Send_Parameter) + DECLARE_DYNAMIC(CSO7_Send_Parameter) public: - CSO7_Send_Parameter(CWnd* pParent = NULL); // standard constructor - virtual ~CSO7_Send_Parameter(); + CSO7_Send_Parameter(CWnd* pParent = NULL); // standard constructor + virtual ~CSO7_Send_Parameter(); -// Dialog Data - enum { IDD = IDD_S07_UTIL_SEND_PARAMETER }; + // Dialog Data + enum { IDD = IDD_S07_UTIL_SEND_PARAMETER }; protected: - virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support - virtual BOOL OnInitDialog(); + virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support + virtual BOOL OnInitDialog(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnPaint(); void OnDraw(CDC* pDC); afx_msg BOOL OnEraseBkgnd(CDC* pDC); - DECLARE_MESSAGE_MAP() + DECLARE_MESSAGE_MAP() public: - clock_t m_StartTime, m_FinishTime; - double m_duration; - CString m_csMSG; - CEdit m_edMSG; - DataBuff m_dataGraph; - CDrawGraph m_DrawGraph; - double m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY; - int m_nDivisionX,m_nDivisionY; - int nCount; - double m_StartPos,m_dPos,m_dMoveDis; - double m_SampleTime; - int m_TimerInterval; - double m_dbResolutionX,m_dbResolutionY; - CRect CanvasRect; - int m_TimerCnt; + clock_t m_StartTime, m_FinishTime; + double m_duration; + CString m_csMSG; + CEdit m_edMSG; + DataBuff m_dataGraphX; + DataBuff m_dataGraphY; + CDrawGraph m_DrawGraph; + double m_dbStartX,m_dbEndX,m_dbStartY,m_dbEndY; + int m_nDivisionX,m_nDivisionY; + int nCount; + double m_StartPos,m_dPos,m_dMoveDis; + double m_SampleTime; + int m_TimerInterval; + double m_dbResolutionX,m_dbResolutionY; + CRect CanvasRect; + int m_TimerCnt; + bool m_MotionDir; public: - CString m_csBaseSpeedX[5]; - CString m_csMaxSpeedX[5]; - CString m_csStartSpeedX[5]; - CString m_csFreshSpeedX[5]; - CString m_csSlowDisX[5]; + CString m_csBaseSpeedX[5]; + CString m_csMaxSpeedX[5]; + CString m_csStartSpeedX[5]; + CString m_csFreshSpeedX[5]; + CString m_csSlowDisX[5]; - CString m_csBaseSpeedY[5]; - CString m_csMaxSpeedY[5]; - CString m_csStartSpeedY[5]; - CString m_csFreshSpeedY[5]; - CString m_csSlowDisY[5]; + CString m_csBaseSpeedY[5]; + CString m_csMaxSpeedY[5]; + CString m_csStartSpeedY[5]; + CString m_csFreshSpeedY[5]; + CString m_csSlowDisY[5]; - CString m_csBaseSpeedZ[5]; - CString m_csMaxSpeedZ[5]; - CString m_csStartSpeedZ[5]; - CString m_csFreshSpeedZ[5]; - CString m_csSlowDisZ[5]; + CString m_csBaseSpeedZ[5]; + CString m_csMaxSpeedZ[5]; + CString m_csStartSpeedZ[5]; + CString m_csFreshSpeedZ[5]; + CString m_csSlowDisZ[5]; - CString m_csWheelbaseX; - CString m_csWheelbaseY; - CString m_csWheelbaseZ; - CString m_csPulseNum; + CString m_csWheelbaseX; + CString m_csWheelbaseY; + CString m_csWheelbaseZ; + CString m_csPulseNum; - CString m_csPercisionX; - CString m_csPercisionY; - CString m_csPercisionZ; + CString m_csPercisionX; + CString m_csPercisionY; + CString m_csPercisionZ; - CString m_csNegWorkLimitX; - CString m_csNegWorkLimitY; - CString m_csNegWorkLimitZ; + CString m_csNegWorkLimitX; + CString m_csNegWorkLimitY; + CString m_csNegWorkLimitZ; - CString m_csPosWorkLimitX; - CString m_csPosWorkLimitY; - CString m_csPosWorkLimitZ; + CString m_csPosWorkLimitX; + CString m_csPosWorkLimitY; + CString m_csPosWorkLimitZ; - CStatusBarCtrl m_StatusBar; + CStatusBarCtrl m_StatusBar; - void ShowParameterOnEdit(); - void ChangeParameterOnEdit(); + void ShowParameterOnEdit(); + void ChangeParameterOnEdit(); - afx_msg void OnBnClickedOk(); - afx_msg void OnBnClickedButtonBrowse(); - CString m_csIniFile; - CString m_IniFile; - afx_msg void OnBnClickedButtonSaveParameter(); - afx_msg void OnBnClickedButtonSave(); - afx_msg void OnBnClickedButtonReadParameterFromController(); + afx_msg void OnBnClickedOk(); + afx_msg void OnBnClickedButtonBrowse(); + CString m_csIniFile; + CString m_IniFile; + afx_msg void OnBnClickedButtonSaveParameter(); + afx_msg void OnBnClickedButtonSave(); + afx_msg void OnBnClickedButtonReadParameterFromController(); afx_msg void OnEnKillfocusEditSampleScurveDis(); afx_msg void OnEnKillfocusEditSampleTimeScurve(); afx_msg void OnBnClickedButtonStartSampleScurve(); afx_msg void OnBnClickedButtonStopSampleScurve(); - afx_msg void OnBnClickedRadioCanvasSpeedTime(); + void Sample_Speed_Time_Curve(); + void Sample_Speed_Position_Curve(); + void Sample_Position_Time_Curve(); + void OutputWithScroll(const CString &strNewText,CEdit &edtOutput); }; 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 3265655..199aebe 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 @@ -37,7 +37,7 @@ #include "So7_Option.h" #include "afxdialogex.h" -//#define _RELEASE_ONLY_ONE_FUNCTION +#define _RELEASE_ONLY_ONE_FUNCTION //CSerial* m_pSO7_Serial=NULL; CPSerial* m_pSO7_PCDSerial=NULL; @@ -100,13 +100,13 @@ BOOL CSo7_Option::OnInitDialog() } } - ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(TRUE); ((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(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_IP_CAMERA))->SetCheck(FALSE); - ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(TRUE); + ((CButton *)GetDlgItem(IDC_RADIO__SO7_RS232))->SetCheck(FALSE); ((CButton *)GetDlgItem(IDC_RADIO_SO7_VERIFICATION_ALGORITHM))->SetCheck(FALSE); #ifdef _RELEASE_ONLY_ONE_FUNCTION 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 2142cb7..f0abb82 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -744,8 +744,9 @@ #define IDC_EDIT_TEST_KEYENCE_SETFOCUS 1650 #define IDC_RADIO_SO7_VERIFICATION_ALGORITHM 1651 #define IDC_BUTTON_SO7_MANUAL_MACHINEREAD_POS 1652 -#define IDC_RADIO1 1653 #define IDC_RADIO_SO7_MANUAL_MACHINE_COMMON_CMD4 1653 +#define IDC_RADIO1 1654 +#define IDC_RADIO_CANVAS_SPEED_POSTION 1654 // Next default values for new objects // @@ -753,7 +754,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 168 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1654 +#define _APS_NEXT_CONTROL_VALUE 1655 #define _APS_NEXT_SYMED_VALUE 101 #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 7d30dc7e806ab778b17f6294983533fe0f4a3bd7..98f93e1b2a9776dd24c8996fe704cd6ee9025be6 100644 GIT binary patch delta 7629 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 delta 10766 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