From 2b37dd82b354072cd74f10d33d04e5a302b3766a Mon Sep 17 00:00:00 2001 From: TAO Cheng Date: Fri, 10 May 2013 17:26:57 +0800 Subject: [PATCH] Add Keyence LK_H laser test dialog:VER1.1 --- .../Interfac/Msi/Hsi/Keyence/Keyence_Laser.h | 2 +- .../Msi/Hsi/Keyence/Keyence_Laser_LK_H.cpp | 339 +++++++++++++++++ .../Msi/Hsi/Keyence/Keyence_Laser_LK_H.h | 88 +++++ PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIF2.h | 301 +++++++++++++++ .../Msi/Hsi/Keyence/LKIFCommonDefine.h | 344 ++++++++++++++++++ PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.h | 171 +-------- .../Tools/UsbUtility/Debug/UtilityDebug.Log | 65 ++++ .../UsbUtility/UsbUtil/Keyence_UtilDlg.cpp | 147 +++++++- .../UsbUtility/UsbUtil/Keyence_UtilDlg.h | 6 + .../Hsi/Tools/UsbUtility/UsbUtil/Mv_Util.rc | 50 ++- .../Tools/UsbUtility/UsbUtil/SO7_UtilDlg.cpp | 3 - .../Tools/UsbUtility/UsbUtil/So7_Option.cpp | 69 ++-- .../Tools/UsbUtility/UsbUtil/Usb_Util.vcxproj | 5 +- .../UsbUtil/Usb_Util.vcxproj.filters | 9 + .../Hsi/Tools/UsbUtility/UsbUtil/resource.h | 16 +- .../Hsi/Tools/UsbUtility/UsbUtil_VS2010.suo | Bin 204800 -> 201216 bytes 16 files changed, 1386 insertions(+), 229 deletions(-) create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser_LK_H.cpp create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser_LK_H.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIF2.h create mode 100644 PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIFCommonDefine.h diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser.h b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser.h index e50922b..089fe86 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser.h @@ -10,7 +10,7 @@ #endif // _MSC_VER > 1000 #include "LkIF.h" - +//Get out DATA typedef BOOL (WINAPI* pLKIF_GetCalcData)(OUT LKIF_FLOATVALUE *CalcData1,OUT LKIF_FLOATVALUE *CalcData2); // Starting the Data Storage typedef BOOL (WINAPI* pLKIF_DataStorageStart)(void); diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser_LK_H.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser_LK_H.cpp new file mode 100644 index 0000000..c33e057 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/Keyence_Laser_LK_H.cpp @@ -0,0 +1,339 @@ +#include "StdAfx.h" +#include +#include +#include "Keyence_Laser_LK_H.h" + +static const int OUT_NUM_MAX = 12; +static const int MAX_STORAGE_DATA_SIZE=65535; + + +CKeyence_Laser_LK_H::CKeyence_Laser_LK_H() +{ + m_bIsStorage=FALSE; + m_NumberOfUsedOUT=2; + m_StoredDataNumber=0; + m_NeedStorageDataNumber=0; + m_StorageCycle=LKIF_STORAGECYCLE_100; +} + +CKeyence_Laser_LK_H::~CKeyence_Laser_LK_H() +{ + if(m_hLkif) + { + m_result= m_pCloseDevice(); + FreeLibrary(m_hLkif); + } +} +//======================================== +void CKeyence_Laser_LK_H::KeyenceLaserInit(void) +{ + m_hLkif=LoadLibrary(_T("T:\\Hg_Tony\\MachineInterfaceUtility\\PcDmis\\Base\\Interfac\\Msi\\Hsi\\Tools\\UsbUtility\\Debug\\LKIF2.dll")); + if(m_hLkif) + { + m_pGetCalcDataMulti=(pLKIF2_GetCalcDataMulti)GetProcAddress(m_hLkif,"LKIF2_GetCalcDataMulti"); + m_pOpenDeviceUsb=(pLKIF2_OpenDeviceUsb)GetProcAddress(m_hLkif,"LKIF2_OpenDeviceUsb"); + m_pCloseDevice=(pLKIF2_CloseDevice)GetProcAddress(m_hLkif,"LKIF2_CloseDevice"); + m_SetNumOfUsedOut=(pLKIF2_SetNumOfUsedOut)GetProcAddress(m_hLkif,"LKIF2_SetNumOfUsedOut"); + m_GetNumOfUsedOut=(pLKIF2_GetNumOfUsedOut)GetProcAddress(m_hLkif,"LKIF2_GetNumOfUsedOut"); + m_SetSamplingCycle=(pLKIF2_SetSamplingCycle)GetProcAddress(m_hLkif,"LKIF2_SetSamplingCycle"); + + m_pGetDataStorage=(pLKIF2_GetDataStorage)GetProcAddress(m_hLkif,"LKIF2_GetDataStorage"); + m_pGetStorageTarget=(pLKIF2_GetStorageTarget)GetProcAddress(m_hLkif,"LKIF2_GetStorageTarget"); + m_pGetSamplingCycle=(pLKIF2_GetSamplingCycle)GetProcAddress(m_hLkif,"LKIF2_GetSamplingCycle"); + m_pGetNumOfUsedHeads=(pLKIF2_GetNumOfUsedHeads)GetProcAddress(m_hLkif,"LKIF2_GetNumOfUsedHeads"); + + m_SetStorageTarget=(pLKIF2_SetStorageTarget)GetProcAddress(m_hLkif,"LKIF2_SetStorageTarget"); + m_pDataStorageStart=(pLKIF2_DataStorageStart)GetProcAddress(m_hLkif,"LKIF2_DataStorageStart"); + m_pDataStorageStop=(pLKIF2_DataStorageStop)GetProcAddress(m_hLkif,"LKIF2_DataStorageStop"); + m_pDataStorageInit=(pLKIF2_DataStorageInit)GetProcAddress(m_hLkif,"LKIF2_DataStorageInit"); + m_pDataStorageGetData=(pLKIF2_DataStorageGetData)GetProcAddress(m_hLkif,"LKIF2_DataStorageGetData"); + m_pDataStorageGetStatus=(pLKIF2_DataStorageGetStatus)GetProcAddress(m_hLkif,"LKIF2_DataStorageGetStatus"); + m_pSetDataStorage=(pLKIF2_SetDataStorage)GetProcAddress(m_hLkif,"LKIF2_SetDataStorage"); + + m_result = m_pOpenDeviceUsb(); + + } + +} +//============================================== +/*********************************************** +LaserValue1:为第一个OUT01值 +LaserValue2:为第二个OUT01值 +***********************************************/ +void CKeyence_Laser_LK_H::Get_KeyenceLaserData(float *LaserValue1,float *LaserValue2) +{ + *LaserValue1=10.0; + *LaserValue2=10.0; + LKIF_FLOATVALUE_OUT GetVal[OUT_NUM_MAX]; + LKIF_OUTNO OutNumber=LKIF_OUTNO_ALL; + m_result=m_pGetCalcDataMulti(OutNumber,GetVal); + + if(m_result!=RC_OK) + { + return ; + } + switch(GetVal[0].FloatResult) + { + case LKIF_FLOATRESULT_RANGEOVER_P: + { + *LaserValue1=50; + break; + } + case LKIF_FLOATRESULT_RANGEOVER_N: + { + *LaserValue1=-50; + break; + } + case LKIF_FLOATRESULT_VALID: + { + *LaserValue1=GetVal[0].Value; + break; + } + default: + { + *LaserValue1=0.0; + break; + } + } + + switch(GetVal[1].FloatResult) + { + case LKIF_FLOATRESULT_RANGEOVER_P: + { + *LaserValue2=50; + break; + } + case LKIF_FLOATRESULT_RANGEOVER_N: + { + *LaserValue2=-50; + break; + } + case LKIF_FLOATRESULT_VALID: + { + *LaserValue2=GetVal[1].Value; + break; + } + default: + { + *LaserValue2=0; + break; + } + } +} + +//============================================== +/*********************************************** +_StorageOutNumber:设置需要进行存储的OUT的数量, + 最小为1,即只存储OUT1;最大为12 + 即存储OUT1 至 OUT12. +_NeedStorageDataNumber:设置需要存储的数量,对所有 + 的OUT都有效,有效范围为 + 1-1200000 +_SampleTime:设置存储的采样时间,单位ms +***********************************************/ +BOOL CKeyence_Laser_LK_H::StartStoreData(int _StorageOutNumber,int _NeedStorageDataNumber,int _SampleTime) +{ + BOOL ReturnStatus(FALSE); + GetStoreDataStatus(); + + int NumOfUsedHeads(0); + m_result=m_pGetNumOfUsedHeads(&NumOfUsedHeads); + + LKIF2_SAMPLINGCYCLE TestSamplingCycle(LKIF2_SAMPLINGCYCLE_2_55USEC); + m_result=m_pGetSamplingCycle(&TestSamplingCycle); + + int TestNumStorage(0); + LKIF_STORAGECYCLE TestStorageCycle(LKIF_STORAGECYCLE_1); + m_result=m_pGetDataStorage(&TestNumStorage,&TestStorageCycle); + + BOOL OutNoStatus(FALSE); + for (int i=0;i<12;i++) + { + m_result=m_pGetStorageTarget(i,&OutNoStatus); + } + + + if (!m_bIsStorage) + { + m_result=m_pDataStorageInit(); + + m_result=m_SetSamplingCycle(LKIF2_SAMPLINGCYCLE_200USEC); + m_result = m_GetNumOfUsedOut(&m_NumberOfUsedOUT); + if (_StorageOutNumber<1) + { + _StorageOutNumber=1; + } + else if (_StorageOutNumber>OUT_NUM_MAX) + { + _StorageOutNumber=OUT_NUM_MAX; + } + + + if (_NeedStorageDataNumber<1) + { + _NeedStorageDataNumber=1; + } + else if (_NeedStorageDataNumber>MAX_STORAGE_DATA_SIZE) + { + _NeedStorageDataNumber=MAX_STORAGE_DATA_SIZE; + } + 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; + } + for (int i=0;i 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "LKIF2.h" + +typedef RC (WINAPI* pLKIF2_GetCalcDataMulti)(IN LKIF_OUTNO OutNo, OUT LKIF_FLOATVALUE_OUT * CalcData); +typedef RC (WINAPI* pLKIF2_OpenDeviceUsb)(void); +typedef RC (WINAPI* pLKIF2_CloseDevice)(void); +typedef RC (WINAPI* pLKIF2_SetNumOfUsedOut)(IN int NumOfUsedHeads);//rang2-12 +typedef RC (WINAPI* pLKIF2_GetNumOfUsedOut)(OUT int * NumOfUsedOut); +typedef RC (WINAPI* pLKIF2_SetSamplingCycle)(IN LKIF2_SAMPLINGCYCLE SamplingCycle); + +typedef RC (WINAPI* pLKIF2_GetDataStorage)(OUT int * NumStorage,OUT LKIF_STORAGECYCLE * StorageCycle); +typedef RC (WINAPI* pLKIF2_GetStorageTarget)(IN int OutNo,OUT BOOL * OnOff); +typedef RC (WINAPI* pLKIF2_GetSamplingCycle)(OUT LKIF2_SAMPLINGCYCLE * SamplingCycle); +typedef RC (WINAPI* pLKIF2_GetNumOfUsedHeads)(OUT int * NumOfUsedHeads); + +//Setting the Data Storage Target +typedef RC (WINAPI* pLKIF2_SetStorageTarget)(IN int OutNo,IN BOOL OnOff); +// Starting the Data Storage +typedef RC (WINAPI* pLKIF2_DataStorageStart)(void); +// Stopping the Data Storage +typedef RC (WINAPI* pLKIF2_DataStorageStop)(void); +// Initializing the Data Storage +typedef RC (WINAPI* pLKIF2_DataStorageInit)(void); +// Outputting the Data Storage +typedef RC (WINAPI* pLKIF2_DataStorageGetData)(IN int OutNo,IN int NumOfBuffer,OUT LKIF_FLOATVALUE * OutBuffer,OUT int *NumReceived); +// Data Storage Accumulation Status Output +typedef RC (WINAPI* pLKIF2_DataStorageGetStatus)(OUT BOOL * lsStorage,OUT int * NumStorageData); +// Set Data Storage +typedef RC (WINAPI* pLKIF2_SetDataStorage)(IN int NumStorage,IN LKIF_STORAGECYCLE StorageCycle); + +//====================================================================================== +class CKeyence_Laser_LK_H +{ +protected: + int m_NumberOfUsedOUT; + int m_NeedStorageDataNumber; + LKIF_STORAGECYCLE m_StorageCycle; + HINSTANCE m_hLkif; + RC m_result; +public: + + CKeyence_Laser_LK_H(); + ~CKeyence_Laser_LK_H(); + + //获取数据的函数指针 + pLKIF2_GetCalcDataMulti m_pGetCalcDataMulti; + pLKIF2_OpenDeviceUsb m_pOpenDeviceUsb; + pLKIF2_CloseDevice m_pCloseDevice; + pLKIF2_SetNumOfUsedOut m_SetNumOfUsedOut; + pLKIF2_GetNumOfUsedOut m_GetNumOfUsedOut; + pLKIF2_SetSamplingCycle m_SetSamplingCycle; + + pLKIF2_GetDataStorage m_pGetDataStorage; + pLKIF2_GetStorageTarget m_pGetStorageTarget; + pLKIF2_GetSamplingCycle m_pGetSamplingCycle; + pLKIF2_GetNumOfUsedHeads m_pGetNumOfUsedHeads; + + pLKIF2_SetStorageTarget m_SetStorageTarget; + pLKIF2_DataStorageStart m_pDataStorageStart; + pLKIF2_DataStorageStop m_pDataStorageStop; + pLKIF2_DataStorageInit m_pDataStorageInit; + pLKIF2_DataStorageGetData m_pDataStorageGetData; + pLKIF2_DataStorageGetStatus m_pDataStorageGetStatus; + pLKIF2_SetDataStorage m_pSetDataStorage; + + int m_StoredDataNumber; + BOOL m_bIsStorage; + void KeyenceLaserInit(void); + void Get_KeyenceLaserData(float *LaserValue1,float *LaserValue2); + + BOOL StartStoreData(int _StorageOutNumber,int _NeedStorageDataNumber,int _SampleTime); + BOOL StopStoreData(); + BOOL GetStoreDataStatus(); + BOOL GetStoredData(int OutNo,float *GetStorageData,int *GetStorageNumber); + BOOL PauseScanAndGetData(int OutNo,float *GetStorageData,int *GetStorageNumber); +}; + +#endif diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIF2.h b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIF2.h new file mode 100644 index 0000000..8e43f78 --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIF2.h @@ -0,0 +1,301 @@ +#pragma once + +#ifdef LKIF2_EXPORTS +#define EXP __declspec(dllexport) +#else +#define EXP __declspec(dllimport) +#endif + +#include "LKIFCommonDefine.h" +#include "Winsock2.h" + +// 儕僞乕儞僐乕僪 +typedef enum { + RC_OK = 0x0000, // 惓忢廔椆 + /////////////////////////////////////////////// + // 僐儞僩儘乕儔偐傜偺捠怣僄儔乕捠抦 + // + RC_NAK_COMMAND = 0x1001, // 僐儅儞僪僄儔乕 + RC_NAK_COMMAND_LENGTH, // 僐儅儞僪挿僄儔乕 + RC_NAK_TIMEOUT, // 僞僀儉傾僂僩 + RC_NAK_CHECKSUM, // 僠僃僢僋僒儉僄儔乕 + RC_NAK_INVALID_STATE, // 忬懺僄儔乕 + RC_NAK_OTHER, // 偦偺懠僄儔乕 + RC_NAK_PARAMETER, // 僷儔儊乕僞僄儔乕 + RC_NAK_OUT_STAGE, // OUT墘嶼抜悢僄儔乕 + RC_NAK_OUT_HEAD_NUM, // 巊梡僿僢僪悢丄OUT悢僆乕僶乕 + RC_NAK_OUT_INVALID_CALC, // 墘嶼懳徾偵巜掕偱偒側偄OUT傪巜掕 + RC_NAK_OUT_VOID, // 墘嶼懳徾偵巜掕偝傟偰偄傞OUT偑柍偄 + RC_NAK_INVALID_CYCLE, // 巊梡偱偒側偄僒儞僾儕儞僌廃婜 + RC_NAK_CTRL_ERROR, // 儊僀儞儐僯僢僩堎忢 + RC_NAK_SRAM_ERROR, // 愝掕抣堎忢 + /////////////////////////////////////////////// + // 捠怣DLL偺僄儔乕捠抦 + // + RC_ERR_OPEN_DEVICE = 0x2000,// 僨僶僀僗偺僆乕僾儞偵幐攕 + RC_ERR_NO_DEVICE, // 僨僶僀僗偑僆乕僾儞偝傟偰偄側偄 + RC_ERR_SEND, // 僐儅儞僪憲怣僄儔乕 + RC_ERR_RECEIVE, // 儗僗億儞僗庴怣僄儔乕 + RC_ERR_TIMEOUT, // 僞僀儉傾僂僩 + RC_ERR_NODATA, // 僨乕僞側偟 + RC_ERR_NOMEMORY, // 嬻偒儊儌儕側偟 + + RC_ERR_DISCONNECT, // 抐慄偺壜擻惈偁傝 + RC_ERR_UNKNOWN, // 枹掕媊僄儔乕 +} RC; + +// 應掕抣 +typedef struct { + int OutNo; // OUT斣崋(0乣11) + LKIF_FLOATRESULT FloatResult; // 桳岠僨乕僞偐偳偆偐 + float Value; // 應掕抣 +} LKIF_FLOATVALUE_OUT; + +// IP傾僪儗僗 +typedef struct { + IN_ADDR IPAddress; +} LKIF_OPENPARAM_ETHERNET; + +extern "C" +{ +/////////////////////////////////////////////// +// 應掕惂屼僐儅儞僪 +// +// 應掕抣弌椡(扨堦) +EXP RC WINAPI LKIF2_GetCalcDataSingle(IN int OutNo,OUT LKIF_FLOATVALUE_OUT * CalcData); +// 應掕抣弌椡(暋悢) +EXP RC WINAPI LKIF2_GetCalcDataMulti(IN LKIF_OUTNO OutNo, OUT LKIF_FLOATVALUE_OUT * CalcData); +// 應掕抣弌椡(ALL) +EXP RC WINAPI LKIF2_GetCalcDataALL(OUT int * OutNo,OUT LKIF_FLOATVALUE_OUT * CalcData); + +// 僞僀儈儞僌ON/OFF(扨堦) +EXP RC WINAPI LKIF2_SetTimingSingle(IN int OutNo,IN BOOL OnOff); +// 僞僀儈儞僌ON/OFF(暋悢) +EXP RC WINAPI LKIF2_SetTimingMulti(IN LKIF_OUTNO OutNo,IN BOOL OnOff); +// 僞僀儈儞僌ON/OFF(摨婜) +EXP RC WINAPI LKIF2_SetTimingSync(IN BOOL OnOff); + +// 僆乕僩僛儘ON/OFF(扨堦) +EXP RC WINAPI LKIF2_SetZeroSingle(IN int OutNo,IN BOOL OnOff); +// 僆乕僩僛儘ON/OFF(暋悢) +EXP RC WINAPI LKIF2_SetZeroMulti(IN LKIF_OUTNO OutNo, IN BOOL OnOff); +// 僆乕僩僛儘ON/OFF(摨婜) +EXP RC WINAPI LKIF2_SetZeroSync(IN BOOL OnOff); + +// 應掕抣儕僙僢僩(扨堦) +EXP RC WINAPI LKIF2_SetResetSingle(IN int OutNo); +// 應掕抣儕僙僢僩(暋悢) +EXP RC WINAPI LKIF2_SetResetMulti(IN LKIF_OUTNO OutNo); +// 應掕抣儕僙僢僩(摨婜) +EXP RC WINAPI LKIF2_SetResetSync(); + +// 僷僱儖儘僢僋 +EXP RC WINAPI LKIF2_SetPanelLock(IN BOOL OnOff); + +// 僾儘僌儔儉愗懼 +EXP RC WINAPI LKIF2_SetProgramNo(IN int ProgramNo); +// 僾儘僌儔儉妋擣 +EXP RC WINAPI LKIF2_GetProgramNo(OUT int * ProgramNo); + +// 僨乕僞僗僩儗乕僕奐巒 +EXP RC WINAPI LKIF2_DataStorageStart(); +// 僨乕僞僗僩儗乕僕掆巭 +EXP RC WINAPI LKIF2_DataStorageStop(); +// 僨乕僞僗僩儗乕僕弌椡 +EXP RC WINAPI LKIF2_DataStorageGetData(IN int OutNo,IN int NumOfBuffer,OUT LKIF_FLOATVALUE * OutBuffer,OUT int *NumReceived); +// 僨乕僞僗僩儗乕僕弶婜壔 +EXP RC WINAPI LKIF2_DataStorageInit(); +// 僨乕僞僗僩儗乕僕拁愊忬懺弌椡 +EXP RC WINAPI LKIF2_DataStorageGetStatus(OUT BOOL * lsStorage,OUT int * NumStorageData); +// 庴岝攇宍庢摼 +EXP RC WINAPI LKIF2_GetLight(IN int HeadNo,IN int PeakNo,OUT int * MeasurePosition,OUT BYTE * WaveData); + +/////////////////////////////////////////////// +// 愝掕撪梕曄峏僐儅儞僪 +// +// 昞帵僷僱儖愗傝懼偊 +EXP RC WINAPI LKIF2_SetPanel(IN int UpperDisp,IN int LowerDisp); +// 岞嵎愝掕 +EXP RC WINAPI LKIF2_SetTolerance(IN int OutNo,IN int UpperLimit,IN int LowerLimit,IN int Hystersys); +// ABLE愝掕 +EXP RC WINAPI LKIF2_SetAbleMode(IN int HeadNo,IN LKIF_ABLEMODE AbleMode); +// ABLE惂屼斖埻愝掕 +EXP RC WINAPI LKIF2_SetAbleMinMax(IN int HeadNo,IN int Min,IN int Max); +// 應掕儌乕僪愝掕 +EXP RC WINAPI LKIF2_SetMeasureMode(IN int HeadNo,IN LKIF_MEASUREMODE MeasureMode); +// 婎揰僉僥儞愝掕 +EXP RC WINAPI LKIF2_SetBasicPoint(IN int HeadNo,IN LKIF_BASICPOINT BasicPoint); +// 傾儔乕儉張棟夞悢愝掕 +EXP RC WINAPI LKIF2_SetNumAlarm(IN int HeadNo,IN int AlarmNum); +// 傾儔乕儉暅婣夞悢愝掕 +EXP RC WINAPI LKIF2_SetNumRecovery(IN int HeadNo,IN int RecoveryNum); +// 傾儔乕儉儗儀儖愝掕 +EXP RC WINAPI LKIF2_SetAlarmLevel(IN int HeadNo,IN int AlarmLevel); +// ABLE僠儏乕僯儞僌奐巒 +EXP RC WINAPI LKIF2_AbleStart(IN int HeadNo); +// ABLE僠儏乕僯儞僌廔椆 +EXP RC WINAPI LKIF2_AbleStop(); +// ABLE僠儏乕僯儞僌拞巭 +EXP RC WINAPI LKIF2_AbleCancel(); +// 愝抲儌乕僪愝掕 +EXP RC WINAPI LKIF2_SetReflectionMode(IN int HeadNo,IN LKIF_REFLECTIONMODE ReflectionMode); +// 儅僗僋愝掕 +EXP RC WINAPI LKIF2_SetMask(IN int HeadNo,IN BOOL OnOff,IN int Pos1,IN int Pos2); +// 儊僨傿傾儞愝掕 +EXP RC WINAPI LKIF2_SetMedian(IN int HeadNo,IN LKIF_MEDIAN Median); +// LASER CTRL僌儖乕僾愝掕 +EXP RC WINAPI LKIF2_SetLaserCtrlGroup(IN int HeadNo,IN LKIF_LASER_CTRL_GROUP LaserCtrlGroup); +// 儗儞僕愝掕 +EXP RC WINAPI LKIF2_SetRange(IN int HeadNo,IN LKIF_RANGE Range); +// 憡屳姳徛僌儖乕僾愝掕 +EXP RC WINAPI LKIF2_SetMutualInterferencePreventionGroup(IN int HeadNo,IN LKIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP Group); +// 墘嶼曽幃愝掕 +EXP RC WINAPI LKIF2_SetCalcMethod(IN int OutNo,IN LKIF_CALCMETHOD CalcMethod,IN int HeadOutNo); +// 應掕柺愝掕 +EXP RC WINAPI LKIF2_SetCalcTarget(IN int OutNo,IN LKIF_CALCTARGET CalcTarget); +// 墘嶼懳徾愝掕(壛尭嶼) +EXP RC WINAPI LKIF2_SetOutAddSub(IN int OutNo,IN int AddSub1,IN int AddSub2); +// 墘嶼懳徾愝掕(AVE/MAX/MIN/P-P) +EXP RC WINAPI LKIF2_SetOutOperation(IN int OutNo,IN LKIF_OUTNO IN TargetOut); +// 僗働乕儕儞僌愝掕 +EXP RC WINAPI LKIF2_SetScaling(IN int OutNo,IN int InputValue1,IN int OutputValue1,IN int InputValue2,IN int OutputValue2); +// 僼傿儖僞愝掕 +EXP RC WINAPI LKIF2_SetFilter(IN int OutNo,IN LKIF_FILTERMODE FilterMode,IN LKIF_FILTERPARA FilterPara); +// 僩儕僈儌乕僪愝掕 +EXP RC WINAPI LKIF2_SetTriggerMode(IN int OutNo,IN LKIF_TRIGGERMODE TriggerMode); +// 僆僼僙僢僩愝掕 +EXP RC WINAPI LKIF2_SetOffset(IN int OutNo,IN int Offset); +/// 寁應儌乕僪愝掕 +EXP RC WINAPI LKIF2_SetCalcMode(IN int OutNo,IN LKIF_CALCMODE CalcMode); +/// 傾僫儘僌弌椡僗働乕儕儞僌愝掕 +EXP RC WINAPI LKIF2_SetAnalogScaling(IN int OutNo,IN int InputValue1,IN int OutputVoltage1,IN int InputValue2,IN int OutputVoltage2); +/// 嵟彫昞帵扨埵愝掕 +EXP RC WINAPI LKIF2_SetDisplayUnit(IN int OutNo,IN LKIF_DISPLAYUNIT DisplayUnit); +/// 應掕庬暿愝掕 +EXP RC WINAPI LKIF2_SetMeasureType(IN int OutNo,IN LKIF_MEASURETYPE MeasureType); +/// 摨婜愝掕 +EXP RC WINAPI LKIF2_SetSynchronization(IN int OutNo,IN BOOL OnOff); +/// 僗僩儗乕僕拁愊懳徾愝掕 +EXP RC WINAPI LKIF2_SetStorageTarget(IN int OutNo,IN BOOL OnOff); +/// 僒儞僾儕儞僌廃婜愝掕 +EXP RC WINAPI LKIF2_SetSamplingCycle(IN LKIF2_SAMPLINGCYCLE SamplingCycle); +/// 憡屳姳徛杊巭愝掕 +EXP RC WINAPI LKIF2_SetMutualInterferencePrevention(IN LKIF_MUTUAL_INTERFERENCE_PREVENTION OnOff); +/// 敾掕弌椡宍懺愝掕 +EXP RC WINAPI LKIF2_SetToleranceComparatorOutputFormat(IN LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT OutputFormat); +/// 僗僩儘乕僽帪娫愝掕 +EXP RC WINAPI LKIF2_SetStrobeTime(IN LKIF_STOROBETIME StrobeTime); +/// 僨乕僞僗僩儗乕僕愝掕 +EXP RC WINAPI LKIF2_SetDataStorage(IN int NumStorage,IN LKIF_STORAGECYCLE StorageCycle); +/// 傾僫儘僌弌椡ch愝掕 +EXP RC WINAPI LKIF2_SetAnalogChannel(IN int ChNo,IN int OutNo); +/// 傾儔乕儉弌椡宍懺愝掕 +EXP RC WINAPI LKIF2_SetAlarmOutputForm(IN LKIF_ALARM_OUTPUT_FORM AlarmOutputForm); +/// 巊梡僿僢僪悢愝掕 +EXP RC WINAPI LKIF2_SetNumOfUsedHeads(IN int NumOfUsedHeads); +/// 巊梡OUT悢愝掕 +EXP RC WINAPI LKIF2_SetNumOfUsedOut(IN int NumOfUsedOut); +/// 巊梡傾僫儘僌弌椡ch悢愝掕 +EXP RC WINAPI LKIF2_SetNumOfUsedAnalogCh(IN int NumOfUsedAnalogCh); + +/////////////////////////////////////////////// +// 愝掕撪梕曄峏僐儅儞僪 +// +// 昞帵僷僱儖夋柺妋擣 +EXP RC WINAPI LKIF2_GetPanel(OUT int * UpperDisp,OUT int * LowerDisp); +// 岞嵎庢摼 +EXP RC WINAPI LKIF2_GetTolerance(IN int OutNo,OUT int * UpperLimit,OUT int * LowerLimit,OUT int * Hysteresis); +// ABLE庢摼 +EXP RC WINAPI LKIF2_GetAbleMode(IN int HeadNo,OUT LKIF_ABLEMODE * AbleMode); +// ABLE惂屼斖埻庢摼 +EXP RC WINAPI LKIF2_GetAbleMinMax(IN int HeadNo,OUT int * Min,OUT int * Max); +// 應掕儌乕僪庢摼 +EXP RC WINAPI LKIF2_GetMeasureMode(IN int HeadNo,OUT LKIF_MEASUREMODE * MeasureMode); +// 婎揰庢摼 +EXP RC WINAPI LKIF2_GetBasicPoint(IN int HeadNo,OUT LKIF_BASICPOINT * BasicPoint); +// 傾儔乕儉張棟夞悢庢摼 +EXP RC WINAPI LKIF2_GetNumAlarm(IN int HeadNo,OUT int * AlarmNum); +// 傾儔乕儉暅婣夞悢庢摼 +EXP RC WINAPI LKIF2_GetNumRecovery(IN int HeadNo,OUT int * RecoveryNum); +// 傾儔乕儉儗儀儖庢摼 +EXP RC WINAPI LKIF2_GetAlarmLevel(IN int HeadNo,OUT int * AlarmLevel); +// 愝抲儌乕僪庢摼 +EXP RC WINAPI LKIF2_GetReflectionMode(IN int HeadNo,OUT LKIF_REFLECTIONMODE * ReflectionMode); +// 儅僗僋庢摼 +EXP RC WINAPI LKIF2_GetMask(IN int HeadNo,OUT BOOL * OnOff,OUT int * Pos1,OUT int * Pos2); +// 儊僨傿傾儞庢摼 +EXP RC WINAPI LKIF2_GetMedian(IN int HeadNo,OUT LKIF_MEDIAN * Median); +// LASER CTRL僌儖乕僾庢摼 +EXP RC WINAPI LKIF2_GetLaserCtrlGroup(IN int HeadNo,OUT LKIF_LASER_CTRL_GROUP * LaserCtrlGroup); +// 儗儞僕庢摼 +EXP RC WINAPI LKIF2_GetRange(IN int HeadNo,OUT LKIF_RANGE * Range); +// 憡屳姳徛僌儖乕僾庢摼 +EXP RC WINAPI LKIF2_GetMutualInterferencePreventionGroup(IN int HeadNo,OUT LKIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP * Group); +// 墘嶼曽幃庢摼 +EXP RC WINAPI LKIF2_GetCalcMethod(IN int OutNo,OUT LKIF_CALCMETHOD * CalcMethod,OUT int * HeadOutNo); +// 應掕柺庢摼 +EXP RC WINAPI LKIF2_GetCalcTarget(IN int OutNo,OUT LKIF_CALCTARGET * CalcTarget); +// 墘嶼懳徾庢摼(壛尭嶼) +EXP RC WINAPI LKIF2_GetOutAddSub(IN int OutNo,OUT int * AddSub1,OUT int * AddSub2); +// 墘嶼懳徾庢摼(AVE/P-P/MAX/MIN) +EXP RC WINAPI LKIF2_GetOutOperation(IN int OutNo,OUT LKIF_OUTNO * TargetOut); +// 僗働乕儕儞僌庢摼 +EXP RC WINAPI LKIF2_GetScaling(IN int OutNo,OUT int * InputValue1,OUT int * OutputValue1,OUT int * InputValue2,OUT int * OutputValue2); +// 僼傿儖僞儌乕僪庢摼 +EXP RC WINAPI LKIF2_GetFilter(IN int OutNo,OUT LKIF_FILTERMODE * FilterMode,OUT LKIF_FILTERPARA * FilterPara); +// 僩儕僈儌乕僪庢摼 +EXP RC WINAPI LKIF2_GetTriggerMode(IN int OutNo,OUT LKIF_TRIGGERMODE * TriggerMode); +// 僆僼僙僢僩庢摼 +EXP RC WINAPI LKIF2_GetOffset(IN int OutNo,OUT int * Offset); +// 寁應儌乕僪庢摼 +EXP RC WINAPI LKIF2_GetCalcMode(IN int OutNo,OUT LKIF_CALCMODE * CalcMode); +// 傾僫儘僌弌椡僗働乕儕儞僌庢摼 +EXP RC WINAPI LKIF2_GetAnalogScaling(IN int OutNo,OUT int * InputValue1,OUT int * OutputVoltage1,OUT int * InputValue2,OUT int * OutputVoltage2); +// 嵟彫昞帵扨埵庢摼 +EXP RC WINAPI LKIF2_GetDisplayUnit(IN int OutNo,OUT LKIF_DISPLAYUNIT * DisplayUnit); +// 應掕庬暿庢摼 +EXP RC WINAPI LKIF2_GetMeasureType(IN int OutNo,OUT LKIF_MEASURETYPE * MeasureType); +// 摨婜庢摼 +EXP RC WINAPI LKIF2_GetSynchronization(IN int OutNo,OUT BOOL * OnOff); +// 僗僩儗乕僕拁愊懳徾庢摼 +EXP RC WINAPI LKIF2_GetStorageTarget(IN int OutNo,OUT BOOL * OnOff); +// 僒儞僾儕儞僌廃婜庢摼 +EXP RC WINAPI LKIF2_GetSamplingCycle(OUT LKIF2_SAMPLINGCYCLE * SamplingCycle); +// 憡屳姳徛杊巭庢摼 +EXP RC WINAPI LKIF2_GetMutualInterferencePrevention(OUT LKIF_MUTUAL_INTERFERENCE_PREVENTION * OnOff); +// 敾掕弌椡宍懺庢摼 +EXP RC WINAPI LKIF2_GetToleranceComparatorOutputFormat(OUT LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT * OutputFormat); +// 僗僩儘乕僽帪娫庢摼 +EXP RC WINAPI LKIF2_GetStrobeTime(OUT LKIF_STOROBETIME * StrobeTime); +// 僨乕僞僗僩儗乕僕庢摼 +EXP RC WINAPI LKIF2_GetDataStorage(OUT int * NumStorage,OUT LKIF_STORAGECYCLE * StorageCycle); +// 傾僫儘僌弌椡ch庢摼 +EXP RC WINAPI LKIF2_GetAnalogChannel(IN int ChNo,OUT int * OutNo); +// 傾儔乕儉弌椡宍懺庢摼 +EXP RC WINAPI LKIF2_GetAlarmOutputForm(OUT LKIF_ALARM_OUTPUT_FORM * AlarmOutputForm); +// 巊梡僿僢僪悢庢摼 +EXP RC WINAPI LKIF2_GetNumOfUsedHeads(OUT int * NumOfUsedHeads); +// 巊梡Out悢庢摼 +EXP RC WINAPI LKIF2_GetNumOfUsedOut(OUT int * NumOfUsedOut); +// 巊梡傾僫儘僌弌椡Ch悢庢摼 +EXP RC WINAPI LKIF2_GetNumOfUsedAnalogCh(OUT int * NumOfUsedAnalogCh); + +/////////////////////////////////////////////// +// 儌乕僪曄峏僐儅儞僪 +// +// 應掕奐巒(儌乕僪愗懼) +EXP RC WINAPI LKIF2_StartMeasure(); +// 應掕掆巭(儌乕僪愗懼) +EXP RC WINAPI LKIF2_StopMeasure(); + +/////////////////////////////////////////////// +// 偦偺懠偺僐儅儞僪 +// +// USB僨僶僀僗僆乕僾儞 +EXP RC WINAPI LKIF2_OpenDeviceUsb(); +/// Ethernet僨僶僀僗僆乕僾儞 +EXP RC WINAPI LKIF2_OpenDeviceETHER(LKIF_OPENPARAM_ETHERNET * OpenParam); +/// 僨僶僀僗僋儘乕僘 +EXP RC WINAPI LKIF2_CloseDevice(); + +} \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIFCommonDefine.h b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIFCommonDefine.h new file mode 100644 index 0000000..8195cfe --- /dev/null +++ b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LKIFCommonDefine.h @@ -0,0 +1,344 @@ +#ifndef LKIF_COMMON_DEFINE_INCLUDED +#define LKIF_COMMON_DEFINE_INCLUDED + +#ifdef I_AM_LKIF +#define EXP __declspec(dllexport) +#else +#define EXP __declspec(dllimport) +#endif + +extern "C" +{ +// Measurement value structures +typedef enum { + LKIF_FLOATRESULT_VALID, // 桳岠僨乕僞 + LKIF_FLOATRESULT_RANGEOVER_P, // +儗儞僕僆乕僶乕 + LKIF_FLOATRESULT_RANGEOVER_N, // -儗儞僕僆乕僶乕 + LKIF_FLOATRESULT_WAITING, // 敾掕懸婡 + LKIF_FLOATRESULT_ALARM, // 傾儔乕儉 + LKIF_FLOATRESULT_INVALID, // 柍岠乮僄儔乕側偳乯 +} LKIF_FLOATRESULT; + +typedef struct { + LKIF_FLOATRESULT FloatResult; // 桳岠僨乕僞偐偳偆偐 + float Value; // 應掕抣 +} LKIF_FLOATVALUE; + +// Statistical Results Output +typedef struct { + LKIF_FLOATVALUE ToleUpper; // tolerance upper limit + LKIF_FLOATVALUE ToleLower; // tolerance lower limit + LKIF_FLOATVALUE AverageValue; // average value + LKIF_FLOATVALUE MaxValue; // maximum value + LKIF_FLOATVALUE MinValue; // minimum value + LKIF_FLOATVALUE DifValue; // maximum value - minimum value + LKIF_FLOATVALUE SdValue; // standard deviation + LONG DataCnt; // number of all data + LONG HighDataCnt; // number of tolerance High data + LONG GoDataCnt; // number of tolerance Go data + LONG LowDataCnt; // number of tolerance Low data +} LKIF_FIGUREDATA; +// Set ABLE +typedef enum { + LKIF_ABLEMODE_AUTO, // automatic + LKIF_ABLEMODE_MANUAL, // manual +} LKIF_ABLEMODE; +// Set Measurement Mode +typedef enum { + LKIF_MEASUREMODE_NORMAL, // normal + LKIF_MEASUREMODE_HALF_T, // translucent object + LKIF_MEASUREMDOE_TRAN_1, // transparent object + LKIF_MEASUREMODE_TRAN_2, // transparent object 2 + LKIF_MEASUREMODE_MRS, // multireflective object + LKIF_MEASUREMODE_OPAQUE =LKIF_MEASUREMODE_MRS, // 岝戲庽帀 +} LKIF_MEASUREMODE; +// Set Mounting Mode +typedef enum { + LKIF_REFLECTIONMODE_DIFFUSION, // diffuse reflection + LKIF_REFLECTIONMODE_MIRROR, // specular reflection +} LKIF_REFLECTIONMODE; + + +// Set Calculation Method +typedef enum { + LKIF_CALCMETHOD_HEADA, // head A + LKIF_CALCMETHOD_HEADB, // head B + LKIF_CALCMETHOD_HEAD_HEADA_PLUS_HEADB, // head A+head B + LKIF_CALCMETHOD_HEAD_HEADA_MINUS_HEADB, // head A-head B + LKIF_CALCMETHOD_HEAD_HEADA_TRANSPARENT, // head A transparent object + LKIF_CALCMETHOD_HEAD_HEADB_TRANSPARENT, // head B transparent object + + LKIF_CALCMETHOD_HEAD = 0, // 僿僢僪 + LKIF_CALCMETHOD_OUT, // OUT + LKIF_CALCMETHOD_ADD, // 壛嶼 + LKIF_CALCMETHOD_SUB, // 尭嶼 + LKIF_CALCMETHOD_AVE, // AVE + LKIF_CALCMETHOD_PP, // P-P + LKIF_CALCMETHOD_MAX, // MAX + LKIF_CALCMETHOD_MIN, // MIN +} LKIF_CALCMETHOD; + +// Measurement target +typedef enum { + LKIF_CALCTARGET_PEAK_1, // peak 1 + LKIF_CALCTARGET_PEAK_2, // peak 2 + LKIF_CALCTARGET_PEAK_3, // peak 3 + LKIF_CALCTARGET_PEAK_4, // peak 4 + LKIF_CALCTARGET_PEAK_1_2, // peak 1-peak 2 + LKIF_CALCTARGET_PEAK_1_3, // peak 1-peak 3 + LKIF_CALCTARGET_PEAK_1_4, // peak 1-peak 4 + LKIF_CALCTARGET_PEAK_2_3, // peak 2-peak 3 + LKIF_CALCTARGET_PEAK_2_4, // peak 2-peak 4 + LKIF_CALCTARGET_PEAK_3_4, // peak 3-peak 4 +} LKIF_CALCTARGET; + +// Set Filter Mode +typedef enum { + LKIF_FILTERMODE_MOVING_AVERAGE, // moving average + LKIF_FILTERMODE_LOWPASS, // low pass filter + LKIF_FILTERMODE_HIGHPASS, // high pass filter +} LKIF_FILTERMODE; + +// Set Number of Times for Averaging +typedef enum { + LKIF_AVERAGE_1, // 1 time + LKIF_AVERAGE_4, // + LKIF_AVERAGE_16, // + LKIF_AVERAGE_64, // + LKIF_AVERAGE_256, // + LKIF_AVERAGE_1024, // + LKIF_AVERAGE_4096, // + LKIF_AVERAGE_16384, // + LKIF_AVERAGE_65536, // + LKIF_AVERAGE_262144, // 262144 times +} LKIF_AVERAGE; + +// Set Cutoff Frequency +typedef enum { + LKIF_CUTOFFFREQUENCY_1000, // 1000Hz + LKIF_CUTOFFFREQUENCY_300, // 300Hz + LKIF_CUTOFFFREQUENCY_100, // 100Hz + LKIF_CUTOFFFREQUENCY_30, // 30Hz + LKIF_CUTOFFFREQUENCY_10, // 10Hz + LKIF_CUTOFFFREQUENCY_3, // 3Hz + LKIF_CUTOFFFREQUENCY_1, // 1Hz + LKIF_CUTOFFFREQUENCY_0_3, // 0.3Hz + LKIF_CUTOFFFREQUENCY_0_1, // 0.1Hz +} LKIF_CUTOFFFREQUENCY; + +// Set Trigger Mode +typedef enum { + LKIF_TRIGGERMODE_EXT1, // external trigger 1 + LKIF_TRIGGERMODE_EXT2, // external trigger 2 +} LKIF_TRIGGERMODE; + +// Set Calculation Mode +typedef enum { + LKIF_CALCMODE_NORMAL, // normal + LKIF_CALCMODE_PEAKHOLD, // peak hold + LKIF_CALCMODE_BOTTOMHOLD, // bottom hold + LKIF_CALCMODE_PEAKTOPEAKHOLD, // peak-to-peak hold + LKIF_CALCMODE_SAMPLEHOLD, // sample hold + LKIF_CALCMODE_AVERAGEHOLD, // average hold +} LKIF_CALCMODE; + +// Set Minimum Display Unit +typedef enum { + LKIF_DISPLAYUNIT_0000_01MM=0, // 0.01mm + LKIF_DISPLAYUNIT_000_001MM, // 0.001mm + LKIF_DISPLAYUNIT_00_0001MM, // 0.0001mm + LKIF_DISPLAYUNIT_0_00001MM, // 0.00001mm + LKIF_DISPLAYUNIT_00000_1UM, // 0.1兪m + LKIF_DISPLAYUNIT_0000_01UM, // 0.01兪m + LKIF_DISPLAYUNIT_000_001UM, // 0.001兪m + + LKIF_DISPLAYUNIT_00000_1M_S=0, // 0.1m/s + LKIF_DISPLAYUNIT_0000_01M_S, // 0.01m/s + LKIF_DISPLAYUNIT_000_001M_S, // 0.001m/s + LKIF_DISPLAYUNIT_00000_1MM_S, // 0.1mm/s + LKIF_DISPLAYUNIT_0000_01MM_S, // 0.01mm/s + LKIF_DISPLAYUNIT_000_001MM_S, // 0.001mm/s + LKIF_DISPLAYUNIT_00_0001MM_S, // 0.0001mm/s + + LKIF_DISPLAYUNIT_00000_1KM_S2=0,// 0.1km/s2 + LKIF_DISPLAYUNIT_0000_01KM_S2, // 0.01km/s2 + LKIF_DISPLAYUNIT_000_001KM_S2, // 0.001km/s2 + LKIF_DISPLAYUNIT_00000_1M_S2, // 0.1m/s2 + LKIF_DISPLAYUNIT_0000_01M_S2, // 0.01m/s2 + LKIF_DISPLAYUNIT_000_001M_S2, // 0.001m/s2 + LKIF_DISPLAYUNIT_00_0001M_S2, // 0.0001m/s2 +} LKIF_DISPLAYUNIT; + +// Set Timing Synchronization +typedef enum { + LKIF_SYNCHRONIZATION_ASYNCHRONOUS, // asynchronous + LKIF_SYNCHRONIZATION_SYNCHRONIZED, // synchronous +} LKIF_SYNCHRONIZATION; + +// Set Data Storage +typedef enum { + LKIF_TARGETOUT_NONE, // no target OUT + LKIF_TARGETOUT_OUT1, // OUT1 + LKIF_TARGETOUT_OUT2, // OUT2 + LKIF_TARGETOUT_BOTH, // OUT1 and OUT2 +} LKIF_TARGETOUT; + +// Set Strage Saampling Rate +typedef enum { + LKIF_STORAGECYCLE_1, // sampling rate x1 + LKIF_STORAGECYCLE_2, // sampling rate x2 + LKIF_STORAGECYCLE_5, // sampling rate x5 + LKIF_STORAGECYCLE_10, // sampling rate x10 + LKIF_STORAGECYCLE_20, // sampling rate x20 + LKIF_STORAGECYCLE_50, // sampling rate x50 + LKIF_STORAGECYCLE_100, // sampling rate x100 + LKIF_STORAGECYCLE_200, // sampling rate x200 + LKIF_STORAGECYCLE_500, // sampling rate x500 + LKIF_STORAGECYCLE_1000, // sampling rate x1000 + LKIF_STORAGECYCLE_TIMING, // 僞僀儈儞僌摨婜 +} LKIF_STORAGECYCLE; + +// Set Sampling Rate +typedef enum { + LKIF_SAMPLINGCYCLE_20USEC, // 20us + LKIF_SAMPLINGCYCLE_50USEC, // 50us + LKIF_SAMPLINGCYCLE_100USEC, // 100us + LKIF_SAMPLINGCYCLE_200USEC, // 200us + LKIF_SAMPLINGCYCLE_500USEC, // 500us + LKIF_SAMPLINGCYCLE_1MSEC, // 1ms +} LKIF_SAMPLINGCYCLE; + +// 僒儞僾儕儞僌廃婜愝掕 +typedef enum { + LKIF2_SAMPLINGCYCLE_2_55USEC, // 2.55us + LKIF2_SAMPLINGCYCLE_5USEC, // 5us + LKIF2_SAMPLINGCYCLE_10USEC, // 10us + LKIF2_SAMPLINGCYCLE_20USEC, // 20us + LKIF2_SAMPLINGCYCLE_50USEC, // 50us + LKIF2_SAMPLINGCYCLE_100USEC, // 100us + LKIF2_SAMPLINGCYCLE_200USEC, // 200us + LKIF2_SAMPLINGCYCLE_500USEC, // 500us + LKIF2_SAMPLINGCYCLE_1MSEC, // 1ms +} LKIF2_SAMPLINGCYCLE; + +// Set Comparator Output Format +typedef enum { + LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT_NORMAL, // normal + LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT_HOLD, // hold + LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT_OFF_DELAY, // off-delay +} LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT; + +// Set Strobe Time +typedef enum { + LKIF_STOROBETIME_2MS, // 2ms + LKIF_STOROBETIME_5MS, // 5ms + LKIF_STOROBETIME_10MS, // 10ms + LKIF_STOROBETIME_20MS, // 20ms +} LKIF_STOROBETIME; + +// Mode Switch +typedef enum { + LKIF_MODE_NORMAL, // normal mode + LKIF_MODE_COMMUNICATION, // setting mode +} LKIF_MODE; + +// 婎揰愝掕 +typedef enum { + LKIF_BASICPOINT_NEAR, // NEAR + LKIF_BASICPOINT_FAR, // FAR +} LKIF_BASICPOINT; +// 儊僨傿傾儞愝掕 +typedef enum { + LKIF_MEDIAN_OFF, // OFF + LKIF_MEDIAN_7, // 7揰 + LKIF_MEDIAN_15, // 15揰 + LKIF_MEDIAN_31, // 31揰 +} LKIF_MEDIAN; + +// LASER CTRL僌儖乕僾愝掕 +typedef enum { + LKIF_LASER_CTRL_GROUP_1, // LASER CTRL 1 + LKIF_LASER_CTRL_GROUP_2, // LASER CTRL 2 +} LKIF_LASER_CTRL_GROUP; + +// 儗儞僕愝掕 +typedef enum { + LKIF_RANGE_CENTER, // CENTER + LKIF_RANGE_FAR, // FAR +} LKIF_RANGE; + +// 憡屳姳徛僌儖乕僾愝掕 +typedef enum { + LKIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP_A, // Group A + LKIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP_B, // Group B + LKIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP_C, // Group C +} LKIF_MUTUAL_INTERFERENCE_PREVENTION_GROUP; +// 僼傿儖僞僷儔儊乕僞(暯嬒夞悢愝掕/僇僢僩僆僼廃攇悢愝掕) +typedef enum{ + LKIF_FILTERPARA_AVE_1 = 0, // 1夞 + LKIF_FILTERPARA_AVE_4, // 4夞 + LKIF_FILTERPARA_AVE_16, // 16夞 + LKIF_FILTERPARA_AVE_64, // 64夞 + LKIF_FILTERPARA_AVE_256, // 256夞 + LKIF_FILTERPARA_AVE_1024, // 1024夞 + LKIF_FILTERPARA_AVE_4096, // 4096夞 + LKIF_FILTERPARA_AVE_16384, // 16384夞 + LKIF_FILTERPARA_AVE_65536, // 65536夞 + LKIF_FILTERPARA_AVE_262144, // 262144夞 + + LKIF_FILTERPARA_COFF_3000 = 0, // 3000Hz + LKIF_FILTERPARA_COFF_1000, // 1000Hz + LKIF_FILTERPARA_COFF_300, // 300Hz + LKIF_FILTERPARA_COFF_100, // 100Hz + LKIF_FILTERPARA_COFF_30, // 30Hz + LKIF_FILTERPARA_COFF_10, // 10Hz + LKIF_FILTERPARA_COFF_3, // 3Hz + LKIF_FILTERPARA_COFF_1, // 1Hz + LKIF_FILTERPARA_COFF_0_3, // 0.3Hz + LKIF_FILTERPARA_COFF_0_1, // 0.1Hz +}LKIF_FILTERPARA; +// 應掕庬暿愝掕 +typedef enum { + LKIF_MEASURETYPE_DISPLACEMENT, // 曄埵 + LKIF_MEASURETYPE_SPEED, // 懍搙 + LKIF_MEASURETYPE_ACCELERATION, // 壛懍搙 +} LKIF_MEASURETYPE; + +// OUT巜掕 +typedef enum { + LKIF_OUTNO_01 = 0x0001, // OUT1 + LKIF_OUTNO_02 = 0x0002, // OUT2 + LKIF_OUTNO_03 = 0x0004, // OUT3 + LKIF_OUTNO_04 = 0x0008, // OUT4 + LKIF_OUTNO_05 = 0x0010, // OUT5 + LKIF_OUTNO_06 = 0x0020, // OUT6 + LKIF_OUTNO_07 = 0x0040, // OUT7 + LKIF_OUTNO_08 = 0x0080, // OUT8 + LKIF_OUTNO_09 = 0x0100, // OUT9 + LKIF_OUTNO_10 = 0x0200, // OUT10 + LKIF_OUTNO_11 = 0x0400, // OUT11 + LKIF_OUTNO_12 = 0x0800, // OUT12 + LKIF_OUTNO_ALL = 0x0FFF, // 慡OUT +} LKIF_OUTNO; + + +// 憡屳姳徛杊巭愝掕 +typedef enum { + LKIF_MUTUAL_INTERFERENCE_PREVENTION_OFF, // OFF + LKIF_MUTUAL_INTERFERENCE_PREVENTION_AB_ON, // AB-ON + LKIF_MUTUAL_INTERFERENCE_PREVENTION_ABC_ON, // ABC-ON +} LKIF_MUTUAL_INTERFERENCE_PREVENTION; + + +// 傾儔乕儉弌椡宍懺愝掕 +typedef enum { + LKIF_ALARM_OUTPUT_FORM_SYSTEM, // 僔僗僥儉傾儔乕儉偺傒 + LKIF_ALARM_OUTPUT_FORM_MEASURE, // 應掕抣傾儔乕儉偺傒 + LKIF_ALARM_OUTPUT_FORM_BOTH, // 僔僗僥儉傾儔乕儉媦傃應掕抣傾儔乕儉 +} LKIF_ALARM_OUTPUT_FORM; + + + +} + +#endif // LKIF_INCLUDED \ No newline at end of file diff --git a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.h b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.h index b1290d7..aac7d91 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Keyence/LkIF.h @@ -6,22 +6,9 @@ #else #define EXP __declspec(dllimport) #endif - +#include "LKIFCommonDefine.h" extern "C" { -// Measurement value structures -typedef enum { - LKIF_FLOATRESULT_VALID, // valid data - LKIF_FLOATRESULT_RANGEOVER_P, // over range at positive (+) side - LKIF_FLOATRESULT_RANGEOVER_N, // over range at negative (-) side - LKIF_FLOATRESULT_WAITING, // comparator result -} LKIF_FLOATRESULT; - -typedef struct { - LKIF_FLOATRESULT FloatResult; // valid or invalid data - float Value; // measurement value during LKIF_FLOATRESULT_VALID. - // Any other times will return an invalid value -} LKIF_FLOATVALUE; /////////////////////////////////////////////// // Measurement Control Command // @@ -40,19 +27,6 @@ EXP BOOL WINAPI LKIF_SetProgramNo(IN int ProgramNo); // Program Check EXP BOOL WINAPI LKIF_GetProgramNo(OUT int *ProgramNo); // Statistical Results Output -typedef struct { - LKIF_FLOATVALUE ToleUpper; // tolerance upper limit - LKIF_FLOATVALUE ToleLower; // tolerance lower limit - LKIF_FLOATVALUE AverageValue; // average value - LKIF_FLOATVALUE MaxValue; // maximum value - LKIF_FLOATVALUE MinValue; // minimum value - LKIF_FLOATVALUE DifValue; // maximum value - minimum value - LKIF_FLOATVALUE SdValue; // standard deviation - LONG DataCnt; // number of all data - LONG HighDataCnt; // number of tolerance High data - LONG GoDataCnt; // number of tolerance Go data - LONG LowDataCnt; // number of tolerance Low data -} LKIF_FIGUREDATA; EXP BOOL WINAPI LKIF_GetFigureData(IN int OutNo,OUT LKIF_FIGUREDATA *FigureData); // Clearing Statistics EXP BOOL WINAPI LKIF_ClearFigureData(void); @@ -77,21 +51,10 @@ EXP BOOL WINAPI LKIF_SetPanel(IN int OutNo); // Set Tolerance EXP BOOL WINAPI LKIF_SetTolerance(IN int OutNo,IN int UpperLimit,IN int LowerLimit,IN int Hysteresis); // Set ABLE -typedef enum { - LKIF_ABLEMODE_AUTO, // automatic - LKIF_ABLEMODE_MANUAL, // manual -} LKIF_ABLEMODE; EXP BOOL WINAPI LKIF_SetAbleMode(IN int HeadNo,IN LKIF_ABLEMODE AbleMode); // Set ABLE Control Range EXP BOOL WINAPI LKIF_SetAbleMinMax(IN int HeadNo,IN int Min,IN int Max); // Set Measurement Mode -typedef enum { - LKIF_MEASUREMODE_NORMAL, // normal - LKIF_MEASUREMODE_HALF_T, // translucent object - LKIF_MEASUREMDOE_TRAN_1, // transparent object - LKIF_MEASUREMODE_TRAN_2, // transparent object 2 - LKIF_MEASUREMODE_MRS, // multireflective object -} LKIF_MEASUREMODE; EXP BOOL WINAPI LKIF_SetMeasureMode(IN int HeadNo,IN LKIF_MEASUREMODE MeasureMode); // Set Number of Times of Alarm Processing EXP BOOL WINAPI LKIF_SetNumAlarm(IN int HeadNo,IN int NumAlarm); @@ -103,155 +66,39 @@ EXP BOOL WINAPI LKIF_AbleStart(IN int HeadNo); EXP BOOL WINAPI LKIF_AbleStop(void); // Stopping the ABLE Calibration EXP BOOL WINAPI LKIF_AbleCancel(void); -// Set Mounting Mode -typedef enum { - LKIF_REFLECTIONMODE_DIFFUSION, // diffuse reflection - LKIF_REFLECTIONMODE_MIRROR, // specular reflection -} LKIF_REFLECTIONMODE; EXP BOOL WINAPI LKIF_SetReflectionMode(IN int HeadNo,IN LKIF_REFLECTIONMODE ReflectionMode); -// Set Calculation Method -typedef enum { - LKIF_CALCMETHOD_HEADA, // head A - LKIF_CALCMETHOD_HEADB, // head B - LKIF_CALCMETHOD_HEAD_HEADA_PLUS_HEADB, // head A+head B - LKIF_CALCMETHOD_HEAD_HEADA_MINUS_HEADB, // head A-head B - LKIF_CALCMETHOD_HEAD_HEADA_TRANSPARENT, // head A transparent object - LKIF_CALCMETHOD_HEAD_HEADB_TRANSPARENT, // head B transparent object -} LKIF_CALCMETHOD; -// Measurement target -typedef enum { - LKIF_CALCTARGET_PEAK_1, // peak 1 - LKIF_CALCTARGET_PEAK_2, // peak 2 - LKIF_CALCTARGET_PEAK_3, // peak 3 - LKIF_CALCTARGET_PEAK_4, // peak 4 - LKIF_CALCTARGET_PEAK_1_2, // peak 1-peak 2 - LKIF_CALCTARGET_PEAK_1_3, // peak 1-peak 3 - LKIF_CALCTARGET_PEAK_1_4, // peak 1-peak 4 - LKIF_CALCTARGET_PEAK_2_3, // peak 2-peak 3 - LKIF_CALCTARGET_PEAK_2_4, // peak 2-peak 4 - LKIF_CALCTARGET_PEAK_3_4, // peak 3-peak 4 -} LKIF_CALCTARGET; EXP BOOL WINAPI LKIF_SetCalcMethod(IN int OutNo,IN LKIF_CALCMETHOD CalcMethod,LKIF_CALCTARGET CalcTarget); // Set Scaling EXP BOOL WINAPI LKIF_SetScaling(IN int OutNo,IN int HeadNo,IN int InputValue1,IN int OutputValue1,IN int InputValue2,IN int OutputValue2); -// Set Filter Mode -typedef enum { - LKIF_FILTERMODE_MOVING_AVERAGE, // moving average - LKIF_FILTERMODE_LOWPASS, // low pass filter - LKIF_FILTERMODE_HIGHPASS, // high pass filter -} LKIF_FILTERMODE; + EXP BOOL WINAPI LKIF_SetFilterMode(IN int OutNo,OUT LKIF_FILTERMODE FilterMode); -// Set Number of Times for Averaging -typedef enum { - LKIF_AVERAGE_1, // 1 time - LKIF_AVERAGE_4, // - LKIF_AVERAGE_16, // - LKIF_AVERAGE_64, // - LKIF_AVERAGE_256, // - LKIF_AVERAGE_1024, // - LKIF_AVERAGE_4096, // - LKIF_AVERAGE_16384, // - LKIF_AVERAGE_65536, // - LKIF_AVERAGE_262144, // 262144 times -} LKIF_AVERAGE; + EXP BOOL WINAPI LKIF_SetAverage(IN int OutNo,IN LKIF_AVERAGE Average); -// Set Cutoff Frequency -typedef enum { - LKIF_CUTOFFFREQUENCY_1000, // 1000Hz - LKIF_CUTOFFFREQUENCY_300, // 300Hz - LKIF_CUTOFFFREQUENCY_100, // 100Hz - LKIF_CUTOFFFREQUENCY_30, // 30Hz - LKIF_CUTOFFFREQUENCY_10, // 10Hz - LKIF_CUTOFFFREQUENCY_3, // 3Hz - LKIF_CUTOFFFREQUENCY_1, // 1Hz - LKIF_CUTOFFFREQUENCY_0_3, // 0.3Hz - LKIF_CUTOFFFREQUENCY_0_1, // 0.1Hz -} LKIF_CUTOFFFREQUENCY; + EXP BOOL WINAPI LKIF_SetCutOffFrequency(IN int OutNo,IN LKIF_CUTOFFFREQUENCY CutOffFrequency); -// Set Trigger Mode -typedef enum { - LKIF_TRIGGERMODE_EXT1, // external trigger 1 - LKIF_TRIGGERMODE_EXT2, // external trigger 2 -} LKIF_TRIGGERMODE; + EXP BOOL WINAPI LKIF_SetTriggerMode(IN int OutNo,IN LKIF_TRIGGERMODE TriggerMode); // Set Offset EXP BOOL WINAPI LKIF_SetOffset(IN int OutNo,IN int Offset); // Set Analog Output Scaling EXP BOOL WINAPI LKIF_SetAnalogScaling(IN int OutNo,IN int InputValue1,IN int OutputVoltage1,IN int InputValue2,IN int OutputVoltage2); -// Set Calculation Mode -typedef enum { - LKIF_CALCMODE_NORMAL, // normal - LKIF_CALCMODE_PEAKHOLD, // peak hold - LKIF_CALCMODE_BOTTOMHOLD, // bottom hold - LKIF_CALCMODE_PEAKTOPEAKHOLD, // peak-to-peak hold - LKIF_CALCMODE_SAMPLEHOLD, // sample hold - LKIF_CALCMODE_AVERAGEHOLD, // average hold -} LKIF_CALCMODE; + EXP BOOL WINAPI LKIF_SetCalcMode(IN int OutNo,IN LKIF_CALCMODE CalcMode); -// Set Minimum Display Unit -typedef enum { - LKIF_DISPLAYUNIT_0000_01MM, // 0.01mm - LKIF_DISPLAYUNIT_000_001MM, // 0.001mm - LKIF_DISPLAYUNIT_00_0001MM, // 0.0001mm - LKIF_DISPLAYUNIT_0_00001MM, // 0.00001mm - LKIF_DISPLAYUNIT_00000_1UM, // 0.1um - LKIF_DISPLAYUNIT_0000_01UM, // 0.01um -} LKIF_DISPLAYUNIT; + EXP BOOL WINAPI LKIF_SetDisplayUnit(IN int OutNo,IN LKIF_DISPLAYUNIT DisplayUnit); // Set Analog-Through EXP BOOL WINAPI LKIF_SetAnalogThrough(IN int OutNo,IN BOOL IsOn); // Set Data Storage -typedef enum { - LKIF_TARGETOUT_NONE, // no target OUT - LKIF_TARGETOUT_OUT1, // OUT1 - LKIF_TARGETOUT_OUT2, // OUT2 - LKIF_TARGETOUT_BOTH, // OUT1 and OUT2 -} LKIF_TARGETOUT; -typedef enum { - LKIF_STORAGECYCLE_1, // sampling rate x 1 - LKIF_STORAGECYCLE_2, // sampling rate x 2 - LKIF_STORAGECYCLE_5, // sampling rate x 5 - LKIF_STORAGECYCLE_10, // sampling rate x 10 - LKIF_STORAGECYCLE_20, // sampling rate x 20 - LKIF_STORAGECYCLE_50, // sampling rate x 50 - LKIF_STORAGECYCLE_100, // sampling rate x 100 - LKIF_STORAGECYCLE_200, // sampling rate x 200 - LKIF_STORAGECYCLE_500, // sampling rate x 500 - LKIF_STORAGECYCLE_1000, // sampling rate x 1000 -} LKIF_STORAGECYCLE; EXP BOOL WINAPI LKIF_SetDataStorage(IN LKIF_TARGETOUT TargetOut,IN int NumStorage,IN LKIF_STORAGECYCLE StorageCycle); // Set Sampling Rate -typedef enum { - LKIF_SAMPLINGCYCLE_20USEC, // 20us - LKIF_SAMPLINGCYCLE_50USEC, // 50us - LKIF_SAMPLINGCYCLE_100USEC, // 100us - LKIF_SAMPLINGCYCLE_200USEC, // 200us - LKIF_SAMPLINGCYCLE_500USEC, // 500us - LKIF_SAMPLINGCYCLE_1MSEC, // 1ms -} LKIF_SAMPLINGCYCLE; EXP BOOL WINAPI LKIF_SetSamplingCycle(IN LKIF_SAMPLINGCYCLE SamplingCycle); // Set Mutual Interference Prevention EXP BOOL WINAPI LKIF_SetMutualInterferencePrevention(IN BOOL IsOn); // Set Timing Synchronization -typedef enum { - LKIF_SYNCHRONIZATION_ASYNCHRONOUS, // asynchronous - LKIF_SYNCHRONIZATION_SYNCHRONIZED, // synchronous -} LKIF_SYNCHRONIZATION; EXP BOOL WINAPI LKIF_SetTimingSynchronization(IN LKIF_SYNCHRONIZATION Synchronization); // Set Comparator Output Format -typedef enum { - LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT_NORMAL, // normal - LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT_HOLD, // hold - LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT_OFF_DELAY, // off-delay -} LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT; EXP BOOL WINAPI LKIF_SetToleranceComparatorOutputFormat(IN LKIF_TOLERANCE_COMPARATOR_OUTPUT_FORMAT ToleranceComparatorOutputFormat); // Set Strobe Time -typedef enum { - LKIF_STOROBETIME_2MS, // 2ms - LKIF_STOROBETIME_5MS, // 5ms - LKIF_STOROBETIME_10MS, // 10ms - LKIF_STOROBETIME_20MS, // 20ms -} LKIF_STOROBETIME; EXP BOOL WINAPI LKIF_SetStorobeTime(IN LKIF_STOROBETIME StorobeTime); /////////////////////////////////////////////// // Check Parameter Command @@ -310,10 +157,6 @@ EXP BOOL WINAPI LKIF_GetStorobeTime(OUT LKIF_STOROBETIME *StorobeTime); // Mode Change Command // // Mode Switch -typedef enum { - LKIF_MODE_NORMAL, // normal mode - LKIF_MODE_COMMUNICATION, // setting mode -} LKIF_MODE; EXP BOOL WINAPI LKIF_SetMode(IN LKIF_MODE Mode); } // extern "C" 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 4372bd8..544713f 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/Debug/UtilityDebug.Log @@ -411,3 +411,68 @@ 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. +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/Keyence_UtilDlg.cpp b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Keyence_UtilDlg.cpp index 02141fe..a1be5f4 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Keyence_UtilDlg.cpp +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/Keyence_UtilDlg.cpp @@ -5,14 +5,17 @@ #include "resource.h" #include "afxdialogex.h" #include "..\..\..\Keyence\Keyence_Laser.h" +#include "..\..\..\Keyence\Keyence_Laser_LK_H.h" #include "..\..\..\Keyence\\Keyence_Proto.h" #include "..\..\..\SevenOcean\SO7_Proto.h" #include "Keyence_UtilDlg.h" extern CSO7_Proto* m_pSO7_Proto; extern CKeyence_Laser* m_pKeyence_Laser; +extern CKeyence_Laser_LK_H* m_pKeyence_Laser_LK_H; extern CKeyence_Proto* m_pKeyence_Proto; -#define MAX_STORAGE_DATA_SIZE 65536 +static const int LK_G_MAX_STORAGE_DATA_SIZE=65536; +static const int LK_H_MAX_STORAGE_DATA_SIZE=65535; long lmove_to_x(0); long lmove_to_y(0); @@ -57,6 +60,11 @@ BEGIN_MESSAGE_MAP(CKeyence_UtilDlg, CDialog) ON_BN_CLICKED(IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_GLASER, &CKeyence_UtilDlg::OnBnClickedButtonGetScanDataKeyenceLkGlaser) ON_BN_CLICKED(IDC_BUTTON_STOP_SCAN_KEYENCE_LK_GLASER, &CKeyence_UtilDlg::OnBnClickedButtonStopScanKeyenceLkGlaser) ON_BN_CLICKED(IDC_BUTTON_SCAN_KEYENCE_LK_GLASER, &CKeyence_UtilDlg::OnBnClickedButtonScanKeyenceLkGlaser) + ON_BN_CLICKED(IDC_BUTTON_LASER_LK_H_GET_DATA, &CKeyence_UtilDlg::OnBnClickedButtonLaserLkHGetData) + ON_BN_CLICKED(IDC_CHECK_CONTINUE_READ_LASER_LK_H_VALUE, &CKeyence_UtilDlg::OnBnClickedCheckContinueReadLaserLkHValue) + ON_BN_CLICKED(IDC_BUTTON_SCAN_KEYENCE_LK_HLASER, &CKeyence_UtilDlg::OnBnClickedButtonScanKeyenceLkHlaser) + ON_BN_CLICKED(IDC_BUTTON_STOP_SCAN_KEYENCE_LK_HLASER, &CKeyence_UtilDlg::OnBnClickedButtonStopScanKeyenceLkHlaser) + ON_BN_CLICKED(IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_HLASER, &CKeyence_UtilDlg::OnBnClickedButtonGetScanDataKeyenceLkHlaser) END_MESSAGE_MAP() @@ -66,14 +74,25 @@ BOOL CKeyence_UtilDlg::OnInitDialog() m_pSO7_Proto->Init_SO7Usb(); m_pSO7_Proto->_start_machine(); - m_pKeyence_Laser->KeyenceLaserInit(); + ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LK_G))->SetCheck(FALSE); + ((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LK_H))->SetCheck(TRUE); + + if (((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LK_G))->GetCheck()) + { + m_pKeyence_Laser->KeyenceLaserInit(); + } + else if (((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LK_H))->GetCheck()) + { + m_pKeyence_Laser_LK_H->KeyenceLaserInit(); + } + return TRUE; // return TRUE unless you set the focus to a control } // CKeyence_UtilDlg 消息处理程序 - +#pragma region LK_G_LASER void CKeyence_UtilDlg::OnBnClickedButtonInitKeyenceLaser() { @@ -126,7 +145,7 @@ void CKeyence_UtilDlg::OnBnClickedButtonStopScanKeyenceLkGlaser() //================================================================================================ void CKeyence_UtilDlg::OnBnClickedButtonGetScanDataKeyenceLkGlaser() { - float GetData[MAX_STORAGE_DATA_SIZE]; + float GetData[LK_G_MAX_STORAGE_DATA_SIZE]; int GetDataNumber(0); m_pKeyence_Laser->GetStoredData(GetData,&GetDataNumber); m_OutMessage.Format(_T("------TotaL:%d--------------"),GetDataNumber); @@ -154,6 +173,7 @@ void CKeyence_UtilDlg::OnBnClickedButtonGetScanDataKeyenceLkGlaser() } } +#pragma endregion //================================================================================================ void CKeyence_UtilDlg::OnTimer(UINT_PTR nIDEvent) { @@ -162,16 +182,38 @@ void CKeyence_UtilDlg::OnTimer(UINT_PTR nIDEvent) case 1:OnBnClickedButtonInitKeyenceLaser(); break; case 2: - float GetData[MAX_STORAGE_DATA_SIZE]; - int GetDataNumber(0); - m_pKeyence_Laser->PauseScanAndGetData(GetData,&GetDataNumber); - m_OutMessage.Format(_T(":%d"),m_pKeyence_Laser->m_StoredDataNumber); - OutputWithScroll(m_OutMessage,m_edMSG); - /*for(INT I=0;IPauseScanAndGetData(GetData,&GetDataNumber); + m_OutMessage.Format(_T(":%d"),m_pKeyence_Laser->m_StoredDataNumber); + OutputWithScroll(m_OutMessage,m_edMSG); + /*for(INT I=0;IPauseScanAndGetData(i,GetData,&GetDataNumber); + m_OutMessage.Format(_T("OUT%d::%d"),i+1,m_pKeyence_Laser_LK_H->m_StoredDataNumber); + OutputWithScroll(m_OutMessage,m_edMSG); + } + */ + + m_pKeyence_Laser_LK_H->GetStoreDataStatus(); + m_OutMessage.Format(_T(":%d :%d"),m_pKeyence_Laser_LK_H->m_bIsStorage,m_pKeyence_Laser_LK_H->m_StoredDataNumber); + OutputWithScroll(m_OutMessage,m_edMSG); + break; } CDialog::OnTimer(nIDEvent); @@ -181,6 +223,9 @@ void CKeyence_UtilDlg::OnBnClickedCancel() { KillTimer(1); KillTimer(2); + KillTimer(3); + KillTimer(4); + m_pSO7_Proto->_shutdown_machine(); m_pSO7_Proto->Exit_SO7Usb(); CDialog::OnCancel(); @@ -208,6 +253,8 @@ void CKeyence_UtilDlg::OutputWithScroll(const CString &strNewText,CEdit &edtOutp edtOutput.SetSel(iCount, iCount); edtOutput.SetRedraw(TRUE); } + +#pragma region BackUp /************************************************ *************************************************/ //=============================================== @@ -295,10 +342,88 @@ void CKeyence_UtilDlg::OnBnClickedButtonExitKeyenceUsb() } +#pragma endregion + +void CKeyence_UtilDlg::OnBnClickedButtonLaserLkHGetData() +{ + m_pSO7_Proto->_send_cmd_SO7_CMD_OPEN_KEYENCE_LASER(); + do + { + Sleep(20); + m_pSO7_Proto->_send_cmd_SO7_CMD_READ_INTERRUPT_MESSAGE(); + } while (m_pSO7_Proto->g_machine.InterruptFlag[0]!=CT_SEND_XYZLASE); + m_pSO7_Proto->g_machine.InterruptFlag[0]=0; + CString csLaserValue; + m_pKeyence_Laser_LK_H->Get_KeyenceLaserData(&fLaserVaule1,&fLaserVaule2); + csLaserValue.Format(_T("%f"),fLaserVaule1); + GetDlgItem(IDC_EDIT_LASER_LK_H_VALUE1)->SetWindowText(csLaserValue); + csLaserValue.Format(_T("%f"),fLaserVaule2); + GetDlgItem(IDC_EDIT_LASER_LK_H_VALUE2)->SetWindowText(csLaserValue); +} +void CKeyence_UtilDlg::OnBnClickedCheckContinueReadLaserLkHValue() +{ + if (((CButton*)(GetDlgItem(IDC_CHECK_CONTINUE_READ_LASER_LK_H_VALUE)))->GetCheck()) + { + ((CButton*)(GetDlgItem(IDC_BUTTON_LASER_LK_H_GET_DATA)))->EnableWindow(FALSE); + SetTimer(3,20,NULL); + } + else + { + ((CButton*)(GetDlgItem(IDC_BUTTON_LASER_LK_H_GET_DATA)))->EnableWindow(TRUE); + KillTimer(3); + } +} +void CKeyence_UtilDlg::OnBnClickedButtonScanKeyenceLkHlaser() +{ + m_LK_H_StorageOutNumber=4; + m_pKeyence_Laser_LK_H->StartStoreData(m_LK_H_StorageOutNumber,1000,20); + m_pSO7_Proto->_send_cmd_SO7_CMD_MOVE_X(5); + SetTimer(4,100,NULL); +} +void CKeyence_UtilDlg::OnBnClickedButtonStopScanKeyenceLkHlaser() +{ + m_pSO7_Proto->_send_cmd_SO7_CMD_STOP_MOVE_XYZ(); + m_pKeyence_Laser_LK_H->StopStoreData(); + KillTimer(4); +} + +void CKeyence_UtilDlg::OnBnClickedButtonGetScanDataKeyenceLkHlaser() +{ + float GetData[LK_H_MAX_STORAGE_DATA_SIZE]={0.0}; + int GetDataNumber(0); + + FILE* m_pOutFile; + char *outBuff = NULL; + CString cFileName=_T("T:\\log\\LK_H_Laser.log"); + _wfopen_s(&m_pOutFile, cFileName, _T("wt")); + if (!m_pOutFile) + { + free(outBuff); + } + else + { + for(int i=0;i<=m_LK_H_StorageOutNumber;i++) + { + m_pKeyence_Laser_LK_H->GetStoredData(i,GetData,&GetDataNumber); + m_OutMessage.Format(_T("--------OUT%d: TotaL:%d----------"),i,GetDataNumber); + OutputWithScroll(m_OutMessage,m_edMSG); + + fprintf(m_pOutFile,"--------OUT%d: TotaL:%d----------\n", i,GetDataNumber); + for (int i=0;iSetCheck(TRUE); + ((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->SetCheck(FALSE); ((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); return TRUE; // return TRUE unless you set the focus to a control } @@ -85,33 +88,47 @@ BOOL CSo7_Option::OnInitDialog() //=================================== void CSo7_Option::OnBnClickedOk() { - if (((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->GetCheck()) - { - if (!m_pSO7_Proto) - m_pSO7_Proto = new CSO7_Proto(); - CSO7_UtilDlg* pSO7_UtilDlg=new CSO7_UtilDlg(); - pSO7_UtilDlg->DoModal(); - delete pSO7_UtilDlg; - } - else if(((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER_LK_G))->GetCheck()) - { - if (!m_pSO7_Proto) - m_pSO7_Proto = new CSO7_Proto(); - if (!m_pKeyence_Proto) - m_pKeyence_Proto=new CKeyence_Proto(); - if (!m_pKeyence_Laser) - m_pKeyence_Laser = new CKeyence_Laser(); + if (((CButton *)GetDlgItem(IDC_RADIO_CONTROLLER))->GetCheck()) + { + if (!m_pSO7_Proto) + m_pSO7_Proto = new CSO7_Proto(); + CSO7_UtilDlg* pSO7_UtilDlg=new CSO7_UtilDlg(); + pSO7_UtilDlg->DoModal(); + delete pSO7_UtilDlg; + delete m_pSO7_Proto; + m_pSO7_Proto=NULL; + } + else if(((CButton *)GetDlgItem(IDC_RADIO_KEYENCE_LASER))->GetCheck()) + { + if (!m_pSO7_Proto) + { + m_pSO7_Proto = new CSO7_Proto(); + } + if (!m_pKeyence_Proto) + { + m_pKeyence_Proto=new CKeyence_Proto(); + } + if (!m_pKeyence_Laser) + { + m_pKeyence_Laser = new CKeyence_Laser(); + } + if (!m_pKeyence_Laser_LK_H) + { + m_pKeyence_Laser_LK_H=new CKeyence_Laser_LK_H(); + } - CKeyence_UtilDlg* pKeyence_UtilDlg=new CKeyence_UtilDlg(); - pKeyence_UtilDlg->DoModal(); - delete pKeyence_UtilDlg; + CKeyence_UtilDlg* pKeyence_UtilDlg=new CKeyence_UtilDlg(); + pKeyence_UtilDlg->DoModal(); + delete pKeyence_UtilDlg; - delete m_pKeyence_Laser; - delete m_pKeyence_Proto; - delete m_pSO7_Proto; - m_pKeyence_Laser=NULL; - m_pKeyence_Proto=NULL; - m_pSO7_Proto=NULL; + delete m_pKeyence_Laser; + m_pKeyence_Laser=NULL; + delete m_pKeyence_Laser_LK_H; + m_pKeyence_Laser_LK_H=NULL; + delete m_pKeyence_Proto; + m_pKeyence_Proto=NULL; + delete m_pSO7_Proto; + m_pSO7_Proto=NULL; } else if (((CButton *)GetDlgItem(IDC_RADIO_VIDEOCARD_SDK3000))->GetCheck()) { 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 bfbfca7..27338af 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 @@ -170,7 +170,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;%(AdditionalDependencies) + ..\..\..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Lib\Msvc\libusb.lib;..\..\..\Videocard\SDK3000\sdk3000_7130.lib;..\..\..\Videocard\SV2000E\dataAcq.lib;..\..\..\Videocard\SV2000E\DXMediaCap.lib;..\..\..\Keyence\LKIF2.lib;%(AdditionalDependencies) @@ -206,6 +206,7 @@ + ..\..\..\..\..\ThirdParty\UsbSupport\LibUsb_Win\Include @@ -252,7 +253,9 @@ + + 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 8e766f8..024e610 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 @@ -106,6 +106,9 @@ Sources Files + + Sources Files + @@ -237,6 +240,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 c4990b2..4ef4275 100644 --- a/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h +++ b/PcDmis/Base/Interfac/Msi/Hsi/Tools/UsbUtility/UsbUtil/resource.h @@ -251,6 +251,7 @@ #define IDC_CHECK_SV2000E_MIRROR_VERTICALLY 1204 #define IDC_CHECK_CONTINUE_READ_LASER_VALUE 1204 #define IDC_RADIO_MACHINE_SevenOcean 1205 +#define IDC_CHECK_CONTINUE_READ_LASER_LK_H_VALUE 1205 #define IDC_BUTTON_INIT_SO7USB 1206 #define IDC_BUTTON_LOAD_SOCONFIG 1207 #define IDC_BUTTON_LOAD_SO7CONFIG 1207 @@ -288,8 +289,11 @@ #define IDC_BUTTON_RESET_KEYENCE_USB 1228 #define IDC_BUTTON_EXIT_KEYENCE_USB 1229 #define IDC_BUTTON_SO7_MOVE_X_RIGHT 1230 +#define IDC_BUTTON_LASER_LK_H_GET_DATA 1230 #define IDC_BUTTON_SO7_MOVE_Y_BACK 1231 +#define IDC_EDIT_LASER_LK_H_VALUE1 1231 #define IDC_BUTTON_SO7_MOVE_Z_DOWN 1232 +#define IDC_EDIT_LASER_LK_H_VALUE2 1232 #define IDC_BUTTON_READ_PROBE 1233 #define IDC_BUTTON_SO7_MOVE_ZOOM_IN 1236 #define IDC_BUTTON_SO7_MOVE_ZOOM_OUT 1237 @@ -600,6 +604,7 @@ #define IDC_BUTTON_SETUP_SO7CONFIG 1518 #define IDC_BUTTON_SCAN_KEYENCE_LK_GLASER 1518 #define IDC_STATIC_CANVAS 1519 +#define IDC_BUTTON_SCAN_KEYENCE_LK_HLASER 1519 #define IDC_BUTTON_STATUS_OVERHEAT_X 1520 #define IDC_EDIT_SAMPLE_TIME_SCURVE 1520 #define IDC_BUTTON_STATUS_OVERHEAT_Y 1521 @@ -613,6 +618,7 @@ #define IDC_BUTTON_STOP_SCAN_KEYENCE_LK_GLASER 1524 #define IDC_CUSTOM1 1525 #define IDC_CUSTOM_CANVAS 1525 +#define IDC_BUTTON_STOP_SCAN_KEYENCE_LK_HLASER 1525 #define IDC_RADIO_CONTROLLER 1526 #define IDC_RADIO_VIDEOCARD_SV2000E 1528 #define IDC_RADIO_VIDEOCARD_TC4000 1529 @@ -638,12 +644,14 @@ #define IDC_RADIO_CANVAS_SPEED_TIME 1550 #define IDC_RADIO_CANVAS_POSTION_TIME 1551 #define IDC_EDIT_SET_PARAMETER_MSGOUTPUT 1552 -#define IDC_RADIO2 1553 -#define IDC_RADIO_KEYENCE_LASER_LK_G 1553 +#define IDC_RADIO_KEYENCE_LASER 1553 #define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_GLASER 1555 #define IDC_EDIT_TEST_KEYENCE_MESSAGE 1556 -#define IDC_RADIO1 1557 #define IDC_RADIO_MACHINE_KEYENCE_TM3000 1557 +#define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_GLASER2 1557 +#define IDC_BUTTON_GET_SCAN_DATA_KEYENCE_LK_HLASER 1557 +#define IDC_RADIO_KEYENCE_LASER_LK_G 1558 +#define IDC_RADIO_KEYENCE_LASER_LK_H 1559 // Next default values for new objects // @@ -651,7 +659,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 165 #define _APS_NEXT_COMMAND_VALUE 32771 -#define _APS_NEXT_CONTROL_VALUE 1558 +#define _APS_NEXT_CONTROL_VALUE 1560 #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 b9ac7d5f25c1d8ebf7d5cdf8d0cea379ca35dfa4..887526ff5273f3ab592c777f8b83a1e9da080ae8 100644 GIT binary patch delta 11710 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