#include "StdAfx.h" #include #include #include "Keyence_Laser.h" #define MAX_STORAGE_DATA_SIZE 65536 CKeyence_Laser::CKeyence_Laser() { m_hLkif=NULL; m_bIsStorage=FALSE; m_iSetOutNo=0; m_StoredDataNumber=0; m_NeedStorageDataNumber=0; m_StorageCycle=LKIF_STORAGECYCLE_100; m_ProgramNO=1; } CKeyence_Laser::~CKeyence_Laser() { if (m_hLkif) { FreeLibrary(m_hLkif); } } //======================================== void CKeyence_Laser::KeyenceLaserInit(void) { if (!m_hLkif) { m_hLkif=(HMODULE)LoadLibrary(GetAppPath()+_T("\\LkIF.dll")); if(m_hLkif) { m_pGetCalcData=(pLKIF_GetCalcData)GetProcAddress(m_hLkif,"LKIF_GetCalcData"); m_pDataStorageStart=(pLKIF_DataStorageStart)GetProcAddress(m_hLkif,"LKIF_DataStorageStart"); m_pDataStorageStop=(pLKIF_DataStorageStop)GetProcAddress(m_hLkif,"LKIF_DataStorageStop"); m_pDataStorageInit=(pLKIF_DataStorageInit)GetProcAddress(m_hLkif,"LKIF_DataStorageInit"); m_pDataStorageGetData=(pLKIF_DataStorageGetData)GetProcAddress(m_hLkif,"LKIF_DataStorageGetData"); m_pDataStorageGetStatus=(pLKIF_DataStorageGetStatus)GetProcAddress(m_hLkif,"LKIF_DataStorageGetStatus"); m_pSetDataStorage=(pLKIF_SetDataStorage)GetProcAddress(m_hLkif,"LKIF_SetDataStorage"); m_pSetProgramNo=(pLKIF_SETPROGRAMNO)GetProcAddress(m_hLkif,"LKIF_SetProgramNo"); m_pSetScaling=(pLKIF_SetScaling)GetProcAddress(m_hLkif,"LKIF_SetScaling"); m_pGetScaling=(pLKIF_GetScaling)GetProcAddress(m_hLkif,"LKIF_GetScaling"); m_pSetDisplayUnit=(pLKIF_SetDisplayUnit)GetProcAddress(m_hLkif,"LKIF_SetDisplayUnit"); m_pGetDisplayUnit=(pLKIF_GetDisplayUnit)GetProcAddress(m_hLkif,"LKIF_GetDisplayUnit"); m_pSetPanel=(pLKIF_SetPanel)GetProcAddress(m_hLkif,"LKIF_SetPanel"); m_pSetMeasureMode=(pLKIF_SetMeasureMode)GetProcAddress(m_hLkif,"LKIF_SetMeasureMode"); m_pSetCalcMethod=(pLKIF_SetCalcMethod)GetProcAddress(m_hLkif,"LKIF_SetCalcMethod"); m_pSetMutualInterferencePrevention=(pLKIF_SetMutualInterferencePrevention)GetProcAddress(m_hLkif,"LKIF_SetMutualInterferencePrevention"); } else { MessageBox(NULL, _T("Load LkIF.dll failed!"), _T("Message"), MB_OK); } } } //============================================== void CKeyence_Laser::Get_KeyenceLaserData(float *LaserValue1,float *LaserValue2) { *LaserValue1=10; *LaserValue2=10; LKIF_FLOATVALUE GetVal1,GetVal2; if(m_pGetCalcData(&GetVal1,&GetVal2)!=1) { return ; } switch(GetVal1.FloatResult) { case LKIF_FLOATRESULT_RANGEOVER_P: { *LaserValue1=50; break; } case LKIF_FLOATRESULT_RANGEOVER_N: { *LaserValue1=-50; break; } case LKIF_FLOATRESULT_WAITING: { *LaserValue1=0; break; } default: { *LaserValue1=GetVal1.Value; break; } } switch(GetVal2.FloatResult) { case LKIF_FLOATRESULT_RANGEOVER_P: { *LaserValue2=50; break; } case LKIF_FLOATRESULT_RANGEOVER_N: { *LaserValue2=-50; break; } case LKIF_FLOATRESULT_WAITING: { *LaserValue2=0; break; } default: { *LaserValue2=GetVal2.Value; break; } } } //============================================== BOOL CKeyence_Laser::StartStoreData(int _NeedStorageDataNumber,int _SampleTime) { BOOL bStatus(FALSE); GetStoreDataStatus(); if (!m_bIsStorage) { bStatus=m_pDataStorageInit(); if (_NeedStorageDataNumber<1) { _NeedStorageDataNumber=1; } else if (_NeedStorageDataNumber>65536) { _NeedStorageDataNumber=65536; } m_NeedStorageDataNumber=_NeedStorageDataNumber; if (_SampleTime<0.4) { m_StorageCycle=LKIF_STORAGECYCLE_1; } else if (_SampleTime<1) { m_StorageCycle=LKIF_STORAGECYCLE_2; } else if (_SampleTime<2) { m_StorageCycle=LKIF_STORAGECYCLE_5; } else if (_SampleTime<4) { m_StorageCycle=LKIF_STORAGECYCLE_10; } else if (_SampleTime<10) { m_StorageCycle=LKIF_STORAGECYCLE_20; } else if (_SampleTime<20) { m_StorageCycle=LKIF_STORAGECYCLE_50; } else if (_SampleTime<40) { m_StorageCycle=LKIF_STORAGECYCLE_100; } else if (_SampleTime<100) { m_StorageCycle=LKIF_STORAGECYCLE_200; } else if (_SampleTime<200) { m_StorageCycle=LKIF_STORAGECYCLE_500; } else { m_StorageCycle=LKIF_STORAGECYCLE_1000; } bStatus=m_pSetDataStorage(LKIF_TARGETOUT_OUT1,m_NeedStorageDataNumber,m_StorageCycle); if (bStatus) { bStatus=m_pDataStorageStart(); } } return bStatus; }; //============================================== BOOL CKeyence_Laser::StopStoreData() { BOOL bStatus(FALSE); GetStoreDataStatus(); if (m_bIsStorage) { bStatus=m_pDataStorageStop(); } return bStatus; }; //============================================== BOOL CKeyence_Laser::PauseScanAndGetData(float *GetStorageData,int *GetStorageNumber) { BOOL bStatus(FALSE); GetStoreDataStatus(); if (m_bIsStorage) { bStatus=m_pDataStorageStop(); bStatus=GetStoredData(GetStorageData,GetStorageNumber); bStatus=m_pDataStorageStart(); } else { bStatus=GetStoredData(GetStorageData,GetStorageNumber); } return bStatus; }; //============================================== BOOL CKeyence_Laser::GetStoredData(float *GetStorageData,int *GetStorageNumber) { BOOL bStatus(FALSE); GetStoreDataStatus(); if (!m_bIsStorage) { LKIF_FLOATVALUE GetStorageValue[MAX_STORAGE_DATA_SIZE]; bStatus=m_pDataStorageGetData(m_iSetOutNo,m_StoredDataNumber,GetStorageValue,GetStorageNumber); for(int i=0;i<*GetStorageNumber;i++) { switch(GetStorageValue[i].FloatResult) { case LKIF_FLOATRESULT_RANGEOVER_P: { *GetStorageData++=50; break; } case LKIF_FLOATRESULT_RANGEOVER_N: { *GetStorageData++=-50; break; } case LKIF_FLOATRESULT_WAITING: { *GetStorageData++=0; break; } default: { *GetStorageData++=GetStorageValue[i].Value; break; } } } } return bStatus; }; //============================================== BOOL CKeyence_Laser::GetStoreDataStatus() { BOOL bStatus(FALSE); bStatus=m_pDataStorageGetStatus(m_iSetOutNo,&m_bIsStorage,&m_StoredDataNumber); return bStatus; }; //============================================== BOOL CKeyence_Laser::SetProgramNO(int ProNO) { BOOL bStatus(FALSE); bStatus=m_pSetProgramNo(ProNO); m_ProgramNO=ProNO; return bStatus; }; //============================================== BOOL CKeyence_Laser::SetOutValueScaling(double _CalibVal) { BOOL bStatus(FALSE); double DisplayUnit(0.0001); bStatus=m_pSetDisplayUnit(0,LKIF_DISPLAYUNIT_00_0001MM); bStatus=m_pSetDisplayUnit(1,LKIF_DISPLAYUNIT_00_0001MM); int InputValue1(0),OutputValue1(0),InputValue2(10000),OutputValue2(10000); bStatus=m_pSetScaling(0,0,InputValue1,OutputValue1,InputValue2,OutputValue2); bStatus=m_pSetScaling(1,1,InputValue1,OutputValue1,InputValue2,OutputValue2); Sleep(20); float OutValue1(0.0),OutValue2(0.0); Get_KeyenceLaserData(&OutValue1,&OutValue2); InputValue2=static_cast((static_cast(OutValue1))/DisplayUnit); OutputValue2=static_cast((_CalibVal)/DisplayUnit); bStatus=m_pSetScaling(0,0,InputValue1,OutputValue1,InputValue2,OutputValue2); InputValue2=static_cast((static_cast(OutValue2))/DisplayUnit); bStatus=m_pSetScaling(1,1,InputValue1,OutputValue1,InputValue2,OutputValue2); return bStatus; }; //============================================== BOOL CKeyence_Laser::GetOutValueScaling(double* _CalibratedScale) { BOOL bStatus(FALSE); double DisplayUnit(0.0001); bStatus=m_pSetDisplayUnit(0,LKIF_DISPLAYUNIT_00_0001MM); bStatus=m_pSetDisplayUnit(1,LKIF_DISPLAYUNIT_00_0001MM); int InputValue1(0),OutputValue1(0),InputValue2(0),OutputValue2(0); bStatus=m_pGetScaling(0,0,&InputValue1,&OutputValue1,&InputValue2,&OutputValue2); _CalibratedScale[0]=static_cast(InputValue1)*DisplayUnit; _CalibratedScale[1]=static_cast(OutputValue1)*DisplayUnit; _CalibratedScale[2]=static_cast(InputValue2)*DisplayUnit; _CalibratedScale[3]=static_cast(OutputValue2)*DisplayUnit; Sleep(20); bStatus=m_pGetScaling(1,1,&InputValue1,&OutputValue1,&InputValue2,&OutputValue2); _CalibratedScale[4]=static_cast(InputValue1)*DisplayUnit; _CalibratedScale[5]=static_cast(OutputValue1)*DisplayUnit; _CalibratedScale[6]=static_cast(InputValue2)*DisplayUnit; _CalibratedScale[7]=static_cast(OutputValue2)*DisplayUnit; return bStatus; }; //============================================== BOOL CKeyence_Laser::SetProgram(char _MeasureMode) { BOOL bStatus(FALSE); switch(_MeasureMode) { case 1: { bStatus=m_pSetPanel(2); bStatus=m_pSetMeasureMode(0,LKIF_MEASUREMODE_TRAN_2); bStatus=m_pSetMeasureMode(1,LKIF_MEASUREMODE_TRAN_2); bStatus=m_pSetCalcMethod(0,LKIF_CALCMETHOD_HEAD_HEADA_TRANSPARENT,LKIF_CALCTARGET_PEAK_1_2); bStatus=m_pSetCalcMethod(1,LKIF_CALCMETHOD_HEAD_HEADB_TRANSPARENT,LKIF_CALCTARGET_PEAK_1_2); bStatus=m_pSetMutualInterferencePrevention(TRUE); break; } default: break; } return bStatus; }