#pragma once #define C_MACHINE_EXPORTS #include "Machine.h" #include "CDieBondFsm.h" #include "CMessageBox.h" #include "dt.h" namespace ns_module { enum EN_MSG_WND_ICO { IHINT = 0, IWARN, IERROR, IRUN, ISTOP }; struct ST_BUTTON_FUN { int nId; // 0~12 int DirectoryId; // 绑定的ID std::string strCallFun; // 执行函数名 std::map mapPar; // 参数 }; struct ST_BUTTON_DONE { int nId; // 0~12 int DirectoryId; // 绑定的ID std::string strCallFun; // 执行函数名 LONG lError; //错误Id std::string strErrMeassage; //错误描述 }; //报警弹框回调函数 //typedef void(*SendButtonRunDone) (ST_BUTTON_DONE stMsgInfo); using SendButtonRunDone = std::function; // 定义宏,将函数名和对应的 lambda 表达式封装起来 #define REGISTER_FUNCTION(funcName) { #funcName, [](CRunButton* obj, ns_module::ST_BUTTON_FUN stInfo) { return obj->funcName(stInfo); } } class __declspec(dllexport) CRunButton { public: struct THREAD_RUN_BUTTON { CRunButton* pClass; ST_BUTTON_FUN stButtonInfo; SendButtonRunDone fun; }; void SetButtonRunDoneFunc(SendButtonRunDone func); void StopRunButton(); private: static CRunButton* m_instance; SendButtonRunDone m_funButtonRunDone = nullptr; CManageDB* m_pCManageDB = nullptr; Machine* m_pMachine = nullptr; CCameraManage* m_pCameraManage = nullptr; CBondHead* m_pBondHead = nullptr; CWaferTable* m_pWaferTable = nullptr; CWaferHead* m_pWaferHead = nullptr; CTransferTable* m_pWaferTransferTable = nullptr; CTransferTable* m_pWaffleTransferTable = nullptr; CResources* m_pResource = nullptr; CDieBondFsm* m_pDieBondFsm = nullptr; public: static HANDLE m_hEvent; static CRunButton* GetInstance(); CRunButton(); // 创建函数映射表,在主线程中执行 std::map> m_mapFunctionByMain = { REGISTER_FUNCTION(BH_PickCreateTemplate), REGISTER_FUNCTION(BH_BondCreateTemplate), REGISTER_FUNCTION(BH_LookUpCreateTemplate), REGISTER_FUNCTION(XYCalib_HeadCreateTemplate), REGISTER_FUNCTION(XYCalib_LookUpCreateTemplate), REGISTER_FUNCTION(XYCalib_WaferCreateTemplate), REGISTER_FUNCTION(HighCameraCalib_CreateTemp), REGISTER_FUNCTION(WaferTable_BondCreateTemplate), REGISTER_FUNCTION(LookUpCalib_HeadCameraCreateTemplate), REGISTER_FUNCTION(LookUpCalib_LookUpCreateTemplate), REGISTER_FUNCTION(LookUpCalib_HeadCreateTemplate), REGISTER_FUNCTION(HighCTD_HeadCameraCreateTemplate), REGISTER_FUNCTION(HighCTD_LookUpCreateTemplate), REGISTER_FUNCTION(HighCTD_HeadCreateTemplate), REGISTER_FUNCTION(RCalib_HeadCreateTemplate), REGISTER_FUNCTION(RCalib_WaferTableCreateTemplate), REGISTER_FUNCTION(ShowMotionAdjustPage), REGISTER_FUNCTION(BH_AccracyTestCreateTemp), REGISTER_FUNCTION(BH_AccracyTestModifyTemp), }; // 创建函数映射表,在子线程中执行 std::map> m_mapFunctionByThread = { REGISTER_FUNCTION(MachineToHome), REGISTER_FUNCTION(MachineToSafePosition), REGISTER_FUNCTION(Machine_SaveConfig), REGISTER_FUNCTION(UltraHead_XY_Test), REGISTER_FUNCTION(Machine_LoadConfig), REGISTER_FUNCTION(Machine_Wafer2Transfer), REGISTER_FUNCTION(Machine_Waffle2Transfer), REGISTER_FUNCTION(Machine_Transfer2BondTable), REGISTER_FUNCTION(Machine_SingnedRun), REGISTER_FUNCTION(BondHead_AccuracyTest), REGISTER_FUNCTION(BondHead_PRAccuracyTest), REGISTER_FUNCTION(BondHead_PickAndBond_Diagnosis), REGISTER_FUNCTION(SaveDB), REGISTER_FUNCTION(BH_VacOn), REGISTER_FUNCTION(BH_UltralOnOffTest), REGISTER_FUNCTION(BH_VacOff), REGISTER_FUNCTION(BH_Pick), REGISTER_FUNCTION(BH_LookUpCalib), REGISTER_FUNCTION(BH_Bond), REGISTER_FUNCTION(BH_PickAndBond), REGISTER_FUNCTION(BH_ToPickGrabPos), REGISTER_FUNCTION(BH_ToLookUpGrabPos), REGISTER_FUNCTION(BH_ToBondGrabPos), REGISTER_FUNCTION(BH_BondOffsetCheck), REGISTER_FUNCTION(BH_ViewTest), REGISTER_FUNCTION(BH_PickHTest), REGISTER_FUNCTION(BH_BondHTest), REGISTER_FUNCTION(BH_WriteTemprature), REGISTER_FUNCTION(BH_ReadTemprature), REGISTER_FUNCTION(BH_PickOffsetCheck), REGISTER_FUNCTION(WaferTransfer_Home), REGISTER_FUNCTION(WaferTransfer_ToGetDiePos), REGISTER_FUNCTION(WaferTransfer_ToTransferPos), REGISTER_FUNCTION(WaferTransfer_VacOn), REGISTER_FUNCTION(WaferTransfer_VacOff), REGISTER_FUNCTION(WaffleTransfer_Home), REGISTER_FUNCTION(WaffleTransfer_ToGetDiePos), REGISTER_FUNCTION(WaffleTransfer_ToTransferPos), REGISTER_FUNCTION(WaferTable_ToChangeRingPosition), REGISTER_FUNCTION(WaferTable_ChangeRingDone), REGISTER_FUNCTION(WaferTable_ToPickPos), REGISTER_FUNCTION(WaferTable_ToPreDie), REGISTER_FUNCTION(WaferTable_ToNextDie), REGISTER_FUNCTION(WaferTable_ToDieCenter), REGISTER_FUNCTION(WaferHead_Pick), REGISTER_FUNCTION(WaferHead_Bond), REGISTER_FUNCTION(WaferHead_OpenVac), REGISTER_FUNCTION(WaferHead_CloseVac), REGISTER_FUNCTION(BondTable_ToPreDie), REGISTER_FUNCTION(BondTable_ToNextDie), REGISTER_FUNCTION(BondTable_WriteTemprature), REGISTER_FUNCTION(BondTable_ReadTemprature), REGISTER_FUNCTION(Ejector_ToSafePos), REGISTER_FUNCTION(Ejector_ToWorkPos), REGISTER_FUNCTION(XYCalib_LookUpToPos), REGISTER_FUNCTION(XYCalib_LookUpCalib), REGISTER_FUNCTION(XYCalib_HeadCalib), REGISTER_FUNCTION(XYCalib_HeadToPos), REGISTER_FUNCTION(HighCameraCalib_HeadToPos), REGISTER_FUNCTION(HighCameraCalib_HeadCalib), REGISTER_FUNCTION(BondCameraCalibCheck), REGISTER_FUNCTION(HighCameraCalib_Check), REGISTER_FUNCTION(LookUpCameraCalibCheck), REGISTER_FUNCTION(XYCalib_WaferToPos), REGISTER_FUNCTION(XYCalib_WaferCalib), REGISTER_FUNCTION(WaferCameraCalibCheck), REGISTER_FUNCTION(ForceControl_ToTestPos), REGISTER_FUNCTION(ForceControl_ElectricCalib), REGISTER_FUNCTION(ForceControl_SpringcCalib), REGISTER_FUNCTION(ForceControl_CalculationResults), REGISTER_FUNCTION(ForceControl_Test), REGISTER_FUNCTION(ForceControl_FindZero), REGISTER_FUNCTION(UpdateForce), REGISTER_FUNCTION(LookUpCalib_StartCalib), REGISTER_FUNCTION(LookUpCalib_ToCalibPos), REGISTER_FUNCTION(LookUpCalib_ToHeadCalibPos), REGISTER_FUNCTION(LookUpCalib_CalResult), REGISTER_FUNCTION(LookUpCalib_HeadToAucPos), REGISTER_FUNCTION(LookUpCalib_HeadToCameraPos), REGISTER_FUNCTION(LookUpCalib_CameraToHeadPos), REGISTER_FUNCTION(HighCTD_CameraPosCalib), REGISTER_FUNCTION(HighCTD_ToCameraCalibPos), REGISTER_FUNCTION(HighCTD_HeadActualPosCalib), REGISTER_FUNCTION(HighCTD_HeadToCameraPos), REGISTER_FUNCTION(HighCTD_ToHeadCalibPos), REGISTER_FUNCTION(HighCTD_CalResult), REGISTER_FUNCTION(RCalib_HeadCalib), REGISTER_FUNCTION(RCalib_HeadToPos), REGISTER_FUNCTION(RCalib_WaferTableCalib), REGISTER_FUNCTION(RCalib_WaferTableToPos), REGISTER_FUNCTION(RCalibCheck), REGISTER_FUNCTION(RCalib_ToCenterPos), REGISTER_FUNCTION(RCalib_ZeroOffset), REGISTER_FUNCTION(VMeasure_Test1), REGISTER_FUNCTION(VMeasure_Test2), REGISTER_FUNCTION(VMeasure_Test3), REGISTER_FUNCTION(HMeasure_Test1), REGISTER_FUNCTION(HMeasure_Test2), REGISTER_FUNCTION(HMeasure_Test3), REGISTER_FUNCTION(ModuleMove), REGISTER_FUNCTION(SetHotZoneOn), REGISTER_FUNCTION(SetHotZoneOff), REGISTER_FUNCTION(SetPrTestOn), REGISTER_FUNCTION(SetPrTestOff), REGISTER_FUNCTION(BondHead_PickBondTest), }; // 根据 strCallFun 执行相应的函数 long ExecuteFunction(ST_BUTTON_FUN stInfo); static VOID CALLBACK threadRunButton(PTP_CALLBACK_INSTANCE Instance, PVOID Parameter, PTP_WORK Work); long RunButtonByThread(ST_BUTTON_FUN stInfo); long BH_PickCreateTemplate(ST_BUTTON_FUN stInfo); long BH_BondCreateTemplate(ST_BUTTON_FUN stInfo); long BH_LookUpCreateTemplate(ST_BUTTON_FUN stInfo); long XYCalib_HeadCreateTemplate(ST_BUTTON_FUN stInfo); long XYCalib_LookUpCreateTemplate(ST_BUTTON_FUN stInfo); long XYCalib_WaferCreateTemplate(ST_BUTTON_FUN stInfo); long HighCameraCalib_CreateTemp(ST_BUTTON_FUN stInfo); long WaferTable_BondCreateTemplate(ST_BUTTON_FUN stInfo); long LookUpCalib_HeadCameraCreateTemplate(ST_BUTTON_FUN stInfo); long LookUpCalib_LookUpCreateTemplate(ST_BUTTON_FUN stInfo); long LookUpCalib_HeadCreateTemplate(ST_BUTTON_FUN stInfo); long HighCTD_HeadCameraCreateTemplate(ST_BUTTON_FUN stInfo); long HighCTD_LookUpCreateTemplate(ST_BUTTON_FUN stInfo); long HighCTD_HeadCreateTemplate(ST_BUTTON_FUN stInfo); long RCalib_HeadCreateTemplate(ST_BUTTON_FUN stInfo); long RCalib_WaferTableCreateTemplate(ST_BUTTON_FUN stInfo); long ShowMotionAdjustPage(ST_BUTTON_FUN stInfo); long MachineToHome(ST_BUTTON_FUN stInfo); long MachineToSafePosition(ST_BUTTON_FUN stInfo); long Machine_SaveConfig(ST_BUTTON_FUN stInfo); long UltraHead_XY_Test(ST_BUTTON_FUN stInfo); long Machine_LoadConfig(ST_BUTTON_FUN stInfo); long Machine_Wafer2Transfer(ST_BUTTON_FUN stInfo); long Machine_Waffle2Transfer(ST_BUTTON_FUN stInfo); long Machine_Transfer2BondTable(ST_BUTTON_FUN stInfo); long Machine_SingnedRun(ST_BUTTON_FUN stInfo); long BondHead_AccuracyTest(ST_BUTTON_FUN stInfo); long BondHead_PRAccuracyTest(ST_BUTTON_FUN stInfo); long BondHead_PickAndBond_Diagnosis(ST_BUTTON_FUN stInfo); long BondHead_PickBondTest(ST_BUTTON_FUN stInfo); long BH_AccracyTestCreateTemp(ST_BUTTON_FUN stInfo); long BH_AccracyTestModifyTemp(ST_BUTTON_FUN stInfo); long SaveDB(ST_BUTTON_FUN stInfo); long BH_VacOn(ST_BUTTON_FUN stInfo); long BH_UltralOnOffTest(ST_BUTTON_FUN stInfo); long BH_VacOff(ST_BUTTON_FUN stInfo); long BH_Pick(ST_BUTTON_FUN stInfo); long BH_LookUpCalib(ST_BUTTON_FUN stInfo); long BH_Bond(ST_BUTTON_FUN stInfo); long BH_PickAndBond(ST_BUTTON_FUN stInfo); long BH_ToPickGrabPos(ST_BUTTON_FUN stInfo); long BH_ToLookUpGrabPos(ST_BUTTON_FUN stInfo); long BH_ToBondGrabPos(ST_BUTTON_FUN stInfo); long BH_PickHTest(ST_BUTTON_FUN stInfo); long BH_BondHTest(ST_BUTTON_FUN stInfo); long BH_ViewTest(ST_BUTTON_FUN stInfo); long BH_BondOffsetCheck(ST_BUTTON_FUN stInfo); long BH_PickOffsetCheck(ST_BUTTON_FUN stInfo); long BH_WriteTemprature(ST_BUTTON_FUN stInfo); long BH_ReadTemprature(ST_BUTTON_FUN stInfo); long NozzleHTest(ST_BUTTON_FUN stInfo); long WaferTransfer_Home(ST_BUTTON_FUN stInfo); long WaferTransfer_ToGetDiePos(ST_BUTTON_FUN stInfo); long WaferTransfer_ToTransferPos(ST_BUTTON_FUN stInfo); long WaferTransfer_VacOn(ST_BUTTON_FUN stInfo); long WaferTransfer_VacOff(ST_BUTTON_FUN stInfo); long WaffleTransfer_Home(ST_BUTTON_FUN stInfo); long WaffleTransfer_ToGetDiePos(ST_BUTTON_FUN stInfo); long WaffleTransfer_ToTransferPos(ST_BUTTON_FUN stInfo); long WaferTable_ToChangeRingPosition(ST_BUTTON_FUN stInfo); long WaferTable_ChangeRingDone(ST_BUTTON_FUN stInfo); long WaferTable_ToPickPos(ST_BUTTON_FUN stInfo); long WaferTable_ToPreDie(ST_BUTTON_FUN stInfo); long WaferTable_ToNextDie(ST_BUTTON_FUN stInfo); long WaferTable_ToDieCenter(ST_BUTTON_FUN stInfo); long WaferHead_Pick(ST_BUTTON_FUN stInfo); long WaferHead_Bond(ST_BUTTON_FUN stInfo); long WaferHead_OpenVac(ST_BUTTON_FUN stInfo); long WaferHead_CloseVac(ST_BUTTON_FUN stInfo); long BondTable_ToPreDie(ST_BUTTON_FUN stInfo); long BondTable_ToNextDie(ST_BUTTON_FUN stInfo); long BondTable_WriteTemprature(ST_BUTTON_FUN stInfo); long BondTable_ReadTemprature(ST_BUTTON_FUN stInfo); long Ejector_ToSafePos(ST_BUTTON_FUN stInfo); long Ejector_ToWorkPos(ST_BUTTON_FUN stInfo); long XYCalib_LookUpToPos(ST_BUTTON_FUN stInfo); long XYCalib_LookUpCalib(ST_BUTTON_FUN stInfo); long XYCalib_HeadCalib(ST_BUTTON_FUN stInfo); long XYCalib_HeadToPos(ST_BUTTON_FUN stInfo); long HighCameraCalib_HeadToPos(ST_BUTTON_FUN stInfo); long HighCameraCalib_HeadCalib(ST_BUTTON_FUN stInfo); long HighCameraCalib_Check(ST_BUTTON_FUN stInfo); long BondCameraCalibCheck(ST_BUTTON_FUN stInfo); long LookUpCameraCalibCheck(ST_BUTTON_FUN stInfo); long XYCalib_WaferToPos(ST_BUTTON_FUN stInfo); long XYCalib_WaferCalib(ST_BUTTON_FUN stInfo); long WaferCameraCalibCheck(ST_BUTTON_FUN stInfo); long ForceControl_ToTestPos(ST_BUTTON_FUN stInfo); long ForceControl_ElectricCalib(ST_BUTTON_FUN stInfo); long ForceControl_SpringcCalib(ST_BUTTON_FUN stInfo); long ForceControl_CalculationResults(ST_BUTTON_FUN stInfo); long ForceControl_Test(ST_BUTTON_FUN stInfo); long ForceControl_FindZero(ST_BUTTON_FUN stInfo); long UpdateForce(ST_BUTTON_FUN stInfo); long GetCurForce(ST_BUTTON_FUN stInfo); long LookUpCalib_StartCalib(ST_BUTTON_FUN stInfo); long LookUpCalib_ToCalibPos(ST_BUTTON_FUN stInfo); long LookUpCalib_ToHeadCalibPos(ST_BUTTON_FUN stInfo); long LookUpCalib_CalResult(ST_BUTTON_FUN stInfo); long LookUpCalib_HeadToAucPos(ST_BUTTON_FUN stInfo); long LookUpCalib_HeadToCameraPos(ST_BUTTON_FUN stInfo); long LookUpCalib_CameraToHeadPos(ST_BUTTON_FUN stInfo); long HighCTD_CameraPosCalib(ST_BUTTON_FUN stInfo); long HighCTD_ToCameraCalibPos(ST_BUTTON_FUN stInfo); long HighCTD_HeadActualPosCalib(ST_BUTTON_FUN stInfo); long HighCTD_HeadToCameraPos(ST_BUTTON_FUN stInfo); long HighCTD_ToHeadCalibPos(ST_BUTTON_FUN stInfo); long HighCTD_CalResult(ST_BUTTON_FUN stInfo); long RCalib_HeadCalib(ST_BUTTON_FUN stInfo); long RCalib_HeadToPos(ST_BUTTON_FUN stInfo); long RCalib_WaferTableCalib(ST_BUTTON_FUN stInfo); long RCalib_WaferTableToPos(ST_BUTTON_FUN stInfo); long RCalibCheck(ST_BUTTON_FUN stInfo); long RCalib_ToCenterPos(ST_BUTTON_FUN stInfo); long RCalib_ZeroOffset(ST_BUTTON_FUN stInfo); long VMeasure_Test1(ST_BUTTON_FUN stInfo); long VMeasure_Test2(ST_BUTTON_FUN stInfo); long VMeasure_Test3(ST_BUTTON_FUN stInfo); long HMeasure_Test1(ST_BUTTON_FUN stInfo); LONG HMeasure_Test2(ST_BUTTON_FUN stInfo); LONG HMeasure_Test3(ST_BUTTON_FUN stInfo); long ModuleMove(ST_BUTTON_FUN stInfo); long SetHotZoneOn(ST_BUTTON_FUN stInfo); long SetHotZoneOff(ST_BUTTON_FUN stInfo); long SetPrTestOn(ST_BUTTON_FUN stInfo); long SetPrTestOff(ST_BUTTON_FUN stInfo); }; }