From 59d5b292a286002fb2520f6c9080e80e960d30f0 Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Wed, 4 Jun 2014 14:35:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ECCS-PRIMA=E4=BD=BF=E8=83=BD?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E8=AE=BE=E7=BD=AE=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Msi/Hsi/STIL/Common/inc/cAcqEasy.h | 6 ++ .../Msi/Hsi/STIL/Common/src/cAcqEasy.cpp | 12 ++++ .../Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.cpp | 57 +++++++++++++----- .../Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.h | 3 + .../Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp | 16 ++++- .../Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h | 1 + .../UsbUtility/UsbUtil/SetSo7MotionConfig.cpp | 16 ++++- .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 4 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln | 8 ++- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 150016 -> 150016 bytes 10 files changed, 101 insertions(+), 22 deletions(-) diff --git a/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/inc/cAcqEasy.h b/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/inc/cAcqEasy.h index 220d556..f553cd0 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/inc/cAcqEasy.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/inc/cAcqEasy.h @@ -12,6 +12,8 @@ class cAcqEasy { private: +#ifdef _RELEASE_FULL_VERSION + HANDLE hThread; static DWORD WINAPI ProcessThread (LPVOID lpArg); DWORD ProcessThread(void); @@ -41,10 +43,12 @@ private: //try to determine and set the sensor mode and digital output bool _SetSensorModeAndDigitalOutput(sAcqEasyParam *pAcqEasyParam); +#endif //_RELEASE_FULL_VERSION public: cAcqEasy(MCHR_ID SensorID); ~cAcqEasy(); +#ifdef _RELEASE_FULL_VERSION //start spectrum acquisition bool StartSpectrumAcquisition(unsigned short **ppSpectrum, unsigned short *pFirstUsablePixel, unsigned short *pBufferSize); @@ -81,6 +85,8 @@ public: bool GetTransmittedData_DuoSawliDistance(PFLOAT pArrayDistance, PFLOAT pArrayQuality, PFLOAT pArrayIntensity, PFLOAT pArrayCounter, PFLOAT pArrayStatus, int* pDataCount); bool GetTransmittedData_DuoSawliThickness(PFLOAT pArrayThickness1, PFLOAT pArrayThickness2, PFLOAT pArrayThickness3, PFLOAT pArrayQuality1, PFLOAT pArrayQuality2, PFLOAT pArrayQuality3, PFLOAT pArrayIntensity, PFLOAT pArrayNbThickness, PFLOAT pArrayCounter, PFLOAT pArrayStatus, int* pDataCount); short GetStatusAcquisition(char *pMessage); +#endif //_RELEASE_FULL_VERSION + }; #endif //AFX_ACQUISITION_EASY_H_INCLUDED_ \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/src/cAcqEasy.cpp b/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/src/cAcqEasy.cpp index fde2d04..2c526c1 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/src/cAcqEasy.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/STIL/Common/src/cAcqEasy.cpp @@ -6,6 +6,8 @@ //-------------------------------------------------------------------- cAcqEasy::cAcqEasy(MCHR_ID SensorID) { +#ifdef _RELEASE_FULL_VERSION + DWORD dwThreadId = 0; int nIndex = 0, idx = 0, jdx = 0; UNREFERENCED_PARAMETER(jdx); @@ -52,10 +54,16 @@ cAcqEasy::cAcqEasy(MCHR_ID SensorID) ZeroMemory(&m_acqParam, sizeof(MCHR_tyAcqParam)); //open process thread hThread = ::CreateThread(0, 0, ProcessThread, LPVOID(this), 0, &dwThreadId); +#else + UNREFERENCED_PARAMETER(SensorID); +#endif //_RELEASE_FULL_VERSION + } //-------------------------------------------------------------------- cAcqEasy::~cAcqEasy() { +#ifdef _RELEASE_FULL_VERSION + int nIndex = 0; //close process thread @@ -88,7 +96,10 @@ cAcqEasy::~cAcqEasy() } } _ReleaseAcqBuffer(m_acqEasyParam.NumberOfBuffers); +#endif //_RELEASE_FULL_VERSION + } +#ifdef _RELEASE_FULL_VERSION //------------------------------------------------------------------------------------------------- void cAcqEasy::_ReleaseAcqBuffer(int NumberOfBuffers) { @@ -2653,3 +2664,4 @@ bool cAcqEasy::GetSpectrumAcquisition(unsigned short *pSpectrum, unsigned short return(ret); } //-------------------------------------------------------------------- +#endif //_RELEASE_FULL_VERSION diff --git a/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.cpp b/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.cpp index 7c51ef7..d142387 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.cpp @@ -4,36 +4,26 @@ CSTIL_CCS_PRIMA_Laser::CSTIL_CCS_PRIMA_Laser() { +#ifdef _RELEASE_FULL_VERSION ResetParam(); +#endif //_RELEASE_FULL_VERSION } CSTIL_CCS_PRIMA_Laser::~CSTIL_CCS_PRIMA_Laser(void) { +#ifdef _RELEASE_FULL_VERSION if (m_SensorId != 0) { CloseCom (); } -} -//================================================================ -void CSTIL_CCS_PRIMA_Laser::ResetParam() -{ - m_SensorId = 0; - m_ErrorCode = SPARKSHI_ERROR_NONE; - m_pAcqEasy = NULL; - m_ScanRate = MCHR_SCAN_RATE_CCS_PRIMA_1000HZ; - m_NumberOfPointTRE = 1; - m_evAcquisition = NULL; - m_pThickness = NULL; - m_pDistance1 = NULL; - m_pIntensity1 = NULL; - m_pDistance2 = NULL; - m_pIntensity2 = NULL; +#endif //_RELEASE_FULL_VERSION } //================================================================ BOOL CSTIL_CCS_PRIMA_Laser::Init(int _Mode) { BOOL bStatus(FALSE); +#ifdef _RELEASE_FULL_VERSION ResetParam(); switch(_Mode) { @@ -53,17 +43,22 @@ BOOL CSTIL_CCS_PRIMA_Laser::Init(int _Mode) break; } } +#else + UNREFERENCED_PARAMETER(_Mode); +#endif //_RELEASE_FULL_VERSION return bStatus; } //================================================================ BOOL CSTIL_CCS_PRIMA_Laser::Exit() { BOOL bStatus(FALSE); +#ifdef _RELEASE_FULL_VERSION bStatus=ReleaseAcquisition(); if (m_SensorId != 0) { CloseCom (); } +#endif //_RELEASE_FULL_VERSION return bStatus; } //================================================================ @@ -74,10 +69,12 @@ BOOL CSTIL_CCS_PRIMA_Laser::SetMeasureMode(int _MeasureMode) { case 0: { +#ifdef _RELEASE_FULL_VERSION double refractiveIndex = 1.5120; SetRefractiveIndex (refractiveIndex); int numberOfPointTRE(1); InitAcquisition (eMCHR_GetThicknessMeasurement, MCHR_TYPE_TRE, numberOfPointTRE); +#endif //_RELEASE_FULL_VERSION break; } default: @@ -91,21 +88,50 @@ BOOL CSTIL_CCS_PRIMA_Laser::SetMeasureMode(int _MeasureMode) BOOL CSTIL_CCS_PRIMA_Laser::GetDistance(double &_dDis1, double &_dDis2) { BOOL bStatus(FALSE); +#ifdef _RELEASE_FULL_VERSION double dbThickness(0.0),dblDistance1(0.0),dblDistance2(0.0),dblIntensity1(0.0),dblIntensity2(0.0); bool bSoftTrigger(true); bStatus=GetThicknessValue(dbThickness,dblDistance1,dblDistance2,dblIntensity1,dblIntensity2,bSoftTrigger); _dDis1=dblDistance1; _dDis2=dblDistance2; +#else + UNREFERENCED_PARAMETER(_dDis1); + UNREFERENCED_PARAMETER(_dDis2); +#endif //_RELEASE_FULL_VERSION return bStatus; } //================================================================ BOOL CSTIL_CCS_PRIMA_Laser::GetThicknessAllData(double &dbThickness, double &dblDistance1, double &dblDistance2, double &dblIntensity1, double &dblIntensity2) { BOOL bStatus(FALSE); +#ifdef _RELEASE_FULL_VERSION bool bSoftTrigger(true); bStatus=GetThicknessValue(dbThickness,dblDistance1,dblDistance2,dblIntensity1,dblIntensity2,bSoftTrigger); +#else + UNREFERENCED_PARAMETER(dbThickness); + UNREFERENCED_PARAMETER(dblDistance1); + UNREFERENCED_PARAMETER(dblDistance2); + UNREFERENCED_PARAMETER(dblIntensity1); + UNREFERENCED_PARAMETER(dblIntensity2); +#endif //_RELEASE_FULL_VERSION return bStatus; } +#ifdef _RELEASE_FULL_VERSION +//================================================================ +void CSTIL_CCS_PRIMA_Laser::ResetParam() +{ + m_SensorId = 0; + m_ErrorCode = SPARKSHI_ERROR_NONE; + m_pAcqEasy = NULL; + m_ScanRate = MCHR_SCAN_RATE_CCS_PRIMA_1000HZ; + m_NumberOfPointTRE = 1; + m_evAcquisition = NULL; + m_pThickness = NULL; + m_pDistance1 = NULL; + m_pIntensity1 = NULL; + m_pDistance2 = NULL; + m_pIntensity2 = NULL; +} BOOL CSTIL_CCS_PRIMA_Laser::InitChrLib() { char szVersion[MAX_CHAR]; @@ -596,3 +622,4 @@ BOOL CSTIL_CCS_PRIMA_Laser::GetRefractiveIndex (double &indice) } } +#endif //_RELEASE_FULL_VERSION diff --git a/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.h b/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.h index b7e0c54..eaf6764 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/STIL/STIL_CCS_PRIMA_Laser.h @@ -27,6 +27,7 @@ public: BOOL GetDistance(double &dblDistance1, double &dblDistance2); BOOL GetThicknessAllData(double &dbThickness, double &dblDistance1, double &dblDistance2, double &dblIntensity1, double &dblIntensity2); private : +#ifdef _RELEASE_FULL_VERSION void ResetParam(); BOOL InitChrLib(); @@ -74,6 +75,8 @@ private : float *m_pDistance2; float *m_pIntensity1; float *m_pIntensity2; +#endif //_RELEASE_FULL_VERSION + }; #endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp index 27462bb..650ffd6 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.cpp @@ -603,8 +603,9 @@ SSI_STATUS_MOTION CSO7_Proto::so7_config_para_set_default() g_machine.s_machine_config.motion.m_TouchProbeEnable=0; g_machine.s_machine_config.motion.m_FootSwitchEnable=0; g_machine.s_machine_config.motion.m_JoyStickEnable=0; + g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=0; g_machine.s_machine_config.motion.m_DebugOutputEnable=0; - + g_machine.s_machine_config.motion.m_SDK3000_CntThreadSleepVal=550000; g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[0]=70; g_machine.s_machine_config.motion.m_SV4000E_DenoisePara[1]=70; @@ -2262,6 +2263,10 @@ SSI_STATUS_MOTION CSO7_Proto::Save_So7_Config() fprintf(m_pOutFile,"%s", outBuff); fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_JoyStickEnable); fprintf(m_pOutFile, "\n"); + outBuff="CCS_PRIMA_ENABLE="; + fprintf(m_pOutFile,"%s", outBuff); + fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable); + fprintf(m_pOutFile, "\n"); outBuff="DEBUG_LOG_ENABLE="; fprintf(m_pOutFile,"%s", outBuff); fprintf(m_pOutFile,"%d", g_machine.s_machine_config.motion.m_DebugOutputEnable); @@ -2636,6 +2641,15 @@ SSI_STATUS_MOTION CSO7_Proto::Load_So7_Config() g_machine.s_machine_config.motion.m_JoyStickEnable=atoi(cTemp); } } + else if (!_stricmp(token,"CCS_PRIMA_ENABLE")) + { + token = strtok( NULL, seps); + if (token) + { + strcpy(cTemp,token); + g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=atoi(cTemp); + } + } else if (!_stricmp(token,"DEBUG_LOG_ENABLE")) { token = strtok( NULL, seps); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h index 5db9d8b..0d66fee 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/SO7_Proto.h @@ -199,6 +199,7 @@ struct s_so7_machine_interface_config INT m_TouchProbeEnable; INT m_FootSwitchEnable; INT m_JoyStickEnable; + INT m_STIL_CCS_PRIMA_Enable; INT m_DebugOutputEnable; INT m_SDK3000_CntThreadSleepVal; INT m_SV4000E_DenoisePara[4]; diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SetSo7MotionConfig.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SetSo7MotionConfig.cpp index a41ca76..5ace553 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SetSo7MotionConfig.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/SetSo7MotionConfig.cpp @@ -61,8 +61,8 @@ BOOL CSetSo7MotionConfig::OnInitDialog() } UpdateLabelName(); UpdateDataValue(); - m_ConfigList.SetEditableItemRange(0,36,2,2); - m_ConfigList.SetColorStyleItemRange(0,36,0,3); + m_ConfigList.SetEditableItemRange(0,37,2,2); + m_ConfigList.SetColorStyleItemRange(0,37,0,3); return TRUE; } @@ -178,6 +178,12 @@ void CSetSo7MotionConfig::UpdateLabelName() cStr=L"摇杆功能;0:禁用,1:使能;默认值:0"; m_ConfigList.SetItemText(iRow,iCol+2,cStr); iRow++; + + cStr=L"CCS_PRIMA_ENABLE"; + m_ConfigList.SetItemText(iRow,iCol,cStr); + cStr=L"CCS-PRIMA激光;0:禁用,1:使能;默认值:0"; + m_ConfigList.SetItemText(iRow,iCol+2,cStr); + iRow++; cStr=L"DEBUG_LOG_ENABLE"; m_ConfigList.SetItemText(iRow,iCol,cStr); @@ -334,6 +340,8 @@ void CSetSo7MotionConfig::UpdateDataValue() m_ConfigList.SetItemText(iRow++,iCol,cStr); cStr.Format(_T("%d"),m_pSO7_Proto->g_machine.s_machine_config.motion.m_JoyStickEnable); m_ConfigList.SetItemText(iRow++,iCol,cStr); + cStr.Format(_T("%d"),m_pSO7_Proto->g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable); + m_ConfigList.SetItemText(iRow++,iCol,cStr); cStr.Format(_T("%d"),m_pSO7_Proto->g_machine.s_machine_config.motion.m_DebugOutputEnable); m_ConfigList.SetItemText(iRow++,iCol,cStr); @@ -462,6 +470,10 @@ void CSetSo7MotionConfig::SaveDataValue() iRow++; cStr=m_ConfigList.GetItemText(iRow,iCol); cTemp=T2A(cStr); + m_pSO7_Proto->g_machine.s_machine_config.motion.m_STIL_CCS_PRIMA_Enable=atoi(cTemp); + iRow++; + cStr=m_ConfigList.GetItemText(iRow,iCol); + cTemp=T2A(cStr); m_pSO7_Proto->g_machine.s_machine_config.motion.m_DebugOutputEnable=atoi(cTemp); iRow++; 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 ee680b9..398303f 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 @@ -23,11 +23,11 @@ #include "Videocard_TC4000.h" #include "..\..\..\Videocard\SV4000E\SV4000E.h" #include "Videocard_SV4000E.h" +#endif //_RELEASE_FULL_VERSION + #include "..\..\..\STIL\Common\inc\cAcqEasy.h" #include "..\..\..\STIL\STIL_CCS_PRIMA_Laser.h" #include "STIL_CCS_PRIMA_Dlg.h" -#endif //_RELEASE_FULL_VERSION - #include "SO7_UtilDlg.h" #include "So7_UtilUsbCtlR.h" #include "..\..\..\Keyence\Keyence_Laser.h" 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 0962b3d..527e954 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil_VS2010.sln @@ -6,8 +6,14 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MachineInterfaceDll", "MachineInterfaceDll\MachineInterfaceDll.vcxproj", "{A945B062-6081-49F0-992D-D14769C4C7D4}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Win32TestDll", "Win32TestDll\Win32TestDll.vcxproj", "{BF02B850-BB32-4635-9E53-8583C474884D}" + ProjectSection(ProjectDependencies) = postProject + {A945B062-6081-49F0-992D-D14769C4C7D4} = {A945B062-6081-49F0-992D-D14769C4C7D4} + EndProjectSection EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTestDll", "ConsoleTestDll\ConsoleTestDll.csproj", "{5E3B7ED1-B324-4966-8527-D29873AC3815}" + ProjectSection(ProjectDependencies) = postProject + {A945B062-6081-49F0-992D-D14769C4C7D4} = {A945B062-6081-49F0-992D-D14769C4C7D4} + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -72,7 +78,6 @@ 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 @@ -96,7 +101,6 @@ 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 c408d0c7807cde0c4f0be637458cd52dfdaabfb3..c392d70263b622cd53ccc302f025952dd1880e61 100644 GIT binary patch delta 4308 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 delta 5055 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