From 4bc4d0eb92ba255d11d2fb7d37bdc8e1a26fb1a2 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Wed, 16 Jul 2014 10:34:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=A4=96=E8=A7=A6=E5=8F=91?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp | 12 ++ .../Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h | 6 +- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 27 ++++ .../Tools/UsbUtility/Debug/Utility_Config.ini | 76 +++++------ .../Hsi/Tools/UsbUtility/Debug/so7_config.ini | 1 + .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 3 +- .../UsbUtil/So7_Util_External_Trig.cpp | 120 ++++++++++++++---- .../UsbUtil/So7_Util_External_Trig.h | 4 + .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 2 +- .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 3 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln | 2 + .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 150016 -> 150016 bytes 12 files changed, 189 insertions(+), 67 deletions(-) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp b/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp index 6cbd3f6..c50ff34 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/ART/ART_PCI8622.cpp @@ -372,10 +372,22 @@ BOOL CART_PCI8622::GetData(double (*_Data)[HALF_SIZE_WORDS],int* _DataNumber) case E_ART_PCI8622_SAMPLE_NPT_SEQ: case E_ART_PCI8622_SAMPLE_NPT_TRIGCLK: { + PCI8622_STATUS_AD ADStatus; + if(!PCI8622_GetDevStatusProAD(m_hDevice, &ADStatus)) + { + rStatus=FALSE; + break; + } m_SegmentID=0; LONG nReadSizeWords = m_iReadDataSize; LONG nRetSizeWords(0); PCI8622_ReadDeviceProAD_Npt(m_hDevice, ADBuffer[m_SegmentID], nReadSizeWords, &nRetSizeWords); + + if(!PCI8622_GetDevStatusProAD(m_hDevice, &ADStatus)) + { + rStatus=FALSE; + break; + } nADChannel = m_ADPara.FirstChannel; TRACE1("[PCI8622_ReadDeviceProAD_Npt] Retsize:%d.\r\n",nRetSizeWords); for(Index=0; Index_send_cmd_SO7_CMD_TRIG_PULSE_START(); - char _Gear(3); - _Gear=m_pSO7_Proto->g_machine.x._Move_Speed_Gear; - m_pSO7_Proto->g_machine.x._MoveTo_Speed_Gear=_Gear; - m_pSO7_Proto->g_machine.y._MoveTo_Speed_Gear=_Gear; - m_pSO7_Proto->g_machine.z._MoveTo_Speed_Gear=_Gear; + Sleep(50); + m_SetGear(false); m_pSO7_Proto->so7_motion_set_position_xyz(m_EndPos[0],m_EndPos[1],m_EndPos[2],false); - if (m_TestTimes>1) + if (m_TestTimes>=1) { - SetTimer(1,500,NULL); + SetTimer(1,m_Timer1Interval,NULL); } } //===================================================================== @@ -218,6 +217,23 @@ void CSo7_Util_External_Trig::OnBnClickedButtonSo7ExtrigGetPara() } m_UpdatePara(FALSE); } +//===================================================================== +void CSo7_Util_External_Trig::m_SetGear(bool bDefault) +{ + if(bDefault) + { + m_pSO7_Proto->g_machine.x._MoveTo_Speed_Gear=0; + m_pSO7_Proto->g_machine.y._MoveTo_Speed_Gear=0; + m_pSO7_Proto->g_machine.z._MoveTo_Speed_Gear=0; + } + else + { + m_pSO7_Proto->g_machine.x._MoveTo_Speed_Gear=m_pSO7_Proto->g_machine.x._Move_Speed_Gear; + m_pSO7_Proto->g_machine.y._MoveTo_Speed_Gear=m_pSO7_Proto->g_machine.x._Move_Speed_Gear; + m_pSO7_Proto->g_machine.z._MoveTo_Speed_Gear=m_pSO7_Proto->g_machine.x._Move_Speed_Gear; + } +} + //===================================================================== void CSo7_Util_External_Trig::m_UpdateCtrls(int _type) { @@ -288,7 +304,7 @@ void CSo7_Util_External_Trig::m_UpdatePara(BOOL _bSave) CString csTmp; const char* cTmp; double dResolution(0.5); - double dEndPos(0.5); + double dEndPos(1.0); double dTmp(0.0); ((CEdit*)GetDlgItem(IDC_EDIT_SO7_EXTRIG_TEST_TIMES))->GetWindowTextW(csTmp); @@ -321,7 +337,7 @@ void CSo7_Util_External_Trig::m_UpdatePara(BOOL _bSave) dTmp=atof(cTmp); m_TrigPara[0] = static_cast(m_pSO7_Proto->MMtoScale(dTmp,dResolution)); iParaNumber=1; - dEndPos=10.0; + dEndPos+=m_ParaNumber*dTmp; } else { @@ -371,6 +387,42 @@ void CSo7_Util_External_Trig::m_UpdatePara(BOOL _bSave) } } //===================================================================================== +void CSo7_Util_External_Trig::m_ReadTrigPara(short _Index,int _type) +{ + if (_type==0) + { + BYTE cdata[5]={0}; + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_ActiveAxis,12); + cdata[0]=static_cast(m_pSO7_Proto->g_machine.FPGAData); + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_ActiveAxis,10); + cdata[1]=static_cast(m_pSO7_Proto->g_machine.FPGAData); + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_ActiveAxis,13); + cdata[2]=static_cast(m_pSO7_Proto->g_machine.FPGAData); + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_ActiveAxis,14); + cdata[3]=static_cast(m_pSO7_Proto->g_machine.FPGAData); + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_DATA_FROM_FPGA(m_ActiveAxis,15); + cdata[4]=static_cast(m_pSO7_Proto->g_machine.FPGAData); + int WData(0),HoldTime(0),CurSate(0),ErrPos(0); + WData=(cdata[0]*256)+cdata[1]; + HoldTime=cdata[2]; + CurSate=((cdata[3]&0xE0)/32); + ErrPos=((cdata[3]&0x1F)*256)+cdata[4]; + + m_csMsg.Format(_T("WData=%d,HoldTime=%d,State=%d,ErrPos=%d.\r\n"), + WData,HoldTime,CurSate,ErrPos); + OutputWithScroll(m_csMsg,m_EdMsg); + } + if (_type==1) + { + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_TRIG_PULSE_PARA(_Index); + m_csMsg.Format(_T("[Read Trig Para]:R Axis=%d,Method=%d,TotalNo=%d,CurIndex=%d,Para[%d]=%d."),m_pSO7_Proto->g_machine.TrigPara.TrigPulseActiveAxis, + m_pSO7_Proto->g_machine.TrigPara.TrigPulseMethod,m_pSO7_Proto->g_machine.TrigPara.TrigTotalNo._long_, + m_pSO7_Proto->g_machine.TrigPara.TrigCurIndex._long_,static_cast(m_pSO7_Proto->g_machine.TrigPara.TrigReadIndex._long_), + m_pSO7_Proto->g_machine.TrigPara.TrigReadPara._long_); + OutputWithScroll(m_csMsg,m_EdMsg); + } +} +//===================================================================================== void CSo7_Util_External_Trig::m_StartTrig() { short iParaNumber(0); @@ -421,13 +473,18 @@ void CSo7_Util_External_Trig::m_StartTrig() m_csMsg.Format(_T("[Write Trig Para]:R TotalNo=%d"),m_pSO7_Proto->g_machine.TrigPara.TrigTotalNo); OutputWithScroll(m_csMsg,m_EdMsg); m_pSO7_Proto->_send_cmd_SO7_CMD_TRIG_PULSE_START(); - Sleep(20); + Sleep(50); + m_SetGear(false); m_pSO7_Proto->so7_motion_set_position_xyz(m_EndPos[0],m_EndPos[1],m_EndPos[2],false); } //===================================================================================== void CSo7_Util_External_Trig::m_StopTrig() { + int index(65535); + m_ReadTrigPara(0,0); + m_ReadTrigPara(static_cast(index),1); m_pSO7_Proto->_send_cmd_SO7_CMD_TRIG_PULSE_STOP(); + m_SetGear(true); m_pSO7_Proto->so7_motion_set_position_xyz(m_BeginPos[0],m_BeginPos[1],m_BeginPos[2],false); } //===================================================================================== @@ -466,26 +523,43 @@ void CSo7_Util_External_Trig::OnTimer(UINT_PTR nIDEvent) { case 1: { - bool Isfinished(false); - m_pSO7_Proto->so7_Motion_XYZ_IsMotionFinished(Isfinished); - if(Isfinished) + if(m_TestTimes>1) { - if (m_CurTestCnt%2==0) + bool Isfinished(false); + m_pSO7_Proto->so7_Motion_XYZ_IsMotionFinished(Isfinished); + if(Isfinished) { - m_StopTrig(); - } + if (m_CurTestCnt%2==0) + { + m_StopTrig(); + } + else + { + m_StartTrig(); + } + m_CurTestCnt++; + + if(m_CurTestCnt>=(2*m_TestTimes-1)) + { + OnBnClickedButtonSo7ExtrigStop(); + } + } else { - m_StartTrig(); + m_ReadTrigPara(0,0); } - m_CurTestCnt++; } - if(m_CurTestCnt>=2*m_TestTimes) + else { - OnBnClickedButtonSo7ExtrigStop(); + m_ReadTrigPara(0,0); } break; } } CDialog::OnTimer(nIDEvent); -} \ No newline at end of file +} + +void CSo7_Util_External_Trig::OnBnClickedButtonSo7ExtrigClearMsg() +{ + ((CEdit*)GetDlgItem(IDC_EDIT_SO7_EXTRIG_RESULT))->SetWindowTextW(_T("")); +} diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_External_Trig.h b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_External_Trig.h index 482cb55..4959c42 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_External_Trig.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/So7_Util_External_Trig.h @@ -39,6 +39,8 @@ protected: void m_UpdateListControl(int _type); void m_StartTrig(); void m_StopTrig(); + void m_SetGear(bool bDefault=true); + void m_ReadTrigPara(short _Index,int _type=0); int m_ParaListRows; int m_ParaListSelectedRow; int m_ParaListSelectedCol; @@ -47,6 +49,7 @@ protected: double m_EndPos[3]; int m_TestTimes; int m_CurTestCnt; + int m_Timer1Interval; public: afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnBnClickedRadioSo7ExtrigEqdis(); @@ -57,4 +60,5 @@ public: afx_msg void OnBnClickedButtonSo7ExtrigSetPara(); afx_msg void OnBnClickedButtonSo7ExtrigGetPara(); afx_msg void OnBnClickedCancel(); + afx_msg void OnBnClickedButtonSo7ExtrigClearMsg(); }; 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 ac6818a..d8832b3 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 @@ -206,7 +206,7 @@ true true MachineX86 - ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\TC4000\Sa7134Capture.lib;..\..\..\Videocard\SV4000E\dataAcq.lib;..\..\..\Videocard\SV4000E\DXMediaCap.lib;..\..\..\ART\PCI8622_32.lib;..\..\..\STIL\Dll_chr.lib;%(AdditionalDependencies) 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 4f61a89..96560a0 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -666,6 +666,8 @@ #define IDC_BTN_CONFIGURE_MOVEVOUT 1544 #define IDC_BUTTON_SO7_EXTRIG_GET_PARA 1544 #define IDC_BUTTON_STOP_SCAN_KEYENCE_LK_GLASER 1545 +#define IDC_BUTTON_SO7_EXTRIG_GET_PARA2 1545 +#define IDC_BUTTON_SO7_EXTRIG_CLEAR_MSG 1545 #define IDC_BUTTON_SET_TRIGGER 1546 #define IDC_BUTTON_IMAGEDLL_GET_SCAN_LASER_DATA 1547 #define IDC_BUTTON_SO7_TEST_Z_SIGNAL 1548 @@ -1019,7 +1021,6 @@ #define IDC_EDIT_SO7_EXTRIG_EQDIS 1869 #define IDC_LIST_SO7_EXTRIG_SPECLOCATION 1870 #define IDC_EDIT_SO7_EXTRIG_TEST_TIMES 1872 -#define IDC_EDIT2 1873 #define IDC_EDIT_SO7_MOTION_STOP_CNTS 1873 #define IDC_EDIT_SO7_MOTION_START_CNTS 1874 #define IDC_BUTTON_DIY_EXIT_BUTTON 32740 diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln index 527e954..57df6ab 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln @@ -78,6 +78,7 @@ Global {A945B062-6081-49F0-992D-D14769C4C7D4}.ReleaseSO7|Mixed Platforms.ActiveCfg = Release|Win32 {A945B062-6081-49F0-992D-D14769C4C7D4}.ReleaseSO7|Mixed Platforms.Build.0 = Release|Win32 {A945B062-6081-49F0-992D-D14769C4C7D4}.ReleaseSO7|Win32.ActiveCfg = Release|Win32 + {A945B062-6081-49F0-992D-D14769C4C7D4}.ReleaseSO7|Win32.Build.0 = Release|Win32 {A945B062-6081-49F0-992D-D14769C4C7D4}.ReleaseSO7|x64.ActiveCfg = Release|Win32 {A945B062-6081-49F0-992D-D14769C4C7D4}.ReleaseSO7|x86.ActiveCfg = Release|Win32 {A945B062-6081-49F0-992D-D14769C4C7D4}.Template|Mixed Platforms.ActiveCfg = Release|Win32 @@ -101,6 +102,7 @@ Global {BF02B850-BB32-4635-9E53-8583C474884D}.ReleaseSO7|Mixed Platforms.ActiveCfg = Release|Win32 {BF02B850-BB32-4635-9E53-8583C474884D}.ReleaseSO7|Mixed Platforms.Build.0 = Release|Win32 {BF02B850-BB32-4635-9E53-8583C474884D}.ReleaseSO7|Win32.ActiveCfg = Release|Win32 + {BF02B850-BB32-4635-9E53-8583C474884D}.ReleaseSO7|Win32.Build.0 = Release|Win32 {BF02B850-BB32-4635-9E53-8583C474884D}.ReleaseSO7|x64.ActiveCfg = Release|Win32 {BF02B850-BB32-4635-9E53-8583C474884D}.ReleaseSO7|x86.ActiveCfg = Release|Win32 {BF02B850-BB32-4635-9E53-8583C474884D}.Template|Mixed Platforms.ActiveCfg = Release|Win32 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 9556d30b754e932f8640dfe1232c449b4b14e1c5..2b050464ec7a7798c17c620b67f6ce9549a44749 100644 GIT binary patch delta 11496 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 Hs-*reeP;Gy delta 6343 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