#pragma once #define C_MACHINE_EXPORTS #include "Machine.h" #include "CDieBondFsm.h" #include "CMessageBox.h" #include "dt.h" namespace ns_module { 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); 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(WaferTable_BondCreateTemplate), REGISTER_FUNCTION(LookUpCalib_HeadCameraCreateTemplate), REGISTER_FUNCTION(LookUpCalib_LookUpCreateTemplate), REGISTER_FUNCTION(LookUpCalib_HeadCreateTemplate), REGISTER_FUNCTION(RCalib_HeadCreateTemplate), REGISTER_FUNCTION(RCalib_WaferTableCreateTemplate), REGISTER_FUNCTION(ShowMotionAdjustPage) }; // 创建函数映射表,在子线程中执行 std::map> m_mapFunctionByThread = { REGISTER_FUNCTION(MachineToHome), 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(SaveDB), REGISTER_FUNCTION(BH_VacOn), REGISTER_FUNCTION(BH_UltralOn), REGISTER_FUNCTION(BH_VacOff), REGISTER_FUNCTION(BH_Pick), REGISTER_FUNCTION(BH_Bond), REGISTER_FUNCTION(BH_PickAndBond), REGISTER_FUNCTION(BH_ToPickGrabPos), REGISTER_FUNCTION(BH_ToLookUpGrabPos), REGISTER_FUNCTION(BH_ToBondGrabPos), 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(Ejector_ToSafePos), REGISTER_FUNCTION(Ejector_ToWorkPos), REGISTER_FUNCTION(XYCalib_LookUpToPos), REGISTER_FUNCTION(XYCalib_LookUpCalib), REGISTER_FUNCTION(XYCalib_HeadCalib), REGISTER_FUNCTION(XYCalib_HeadToPos), REGISTER_FUNCTION(BondCameraCalibCheck), 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(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(RCalib_HeadCalib), REGISTER_FUNCTION(RCalib_HeadToPos), REGISTER_FUNCTION(RCalib_WaferTableCalib), REGISTER_FUNCTION(RCalib_WaferTableToPos), }; // 根据 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 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 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 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 SaveDB(ST_BUTTON_FUN stInfo); long BH_VacOn(ST_BUTTON_FUN stInfo); long BH_UltralOn(ST_BUTTON_FUN stInfo); long BH_VacOff(ST_BUTTON_FUN stInfo); long BH_Pick(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 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 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 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 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 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); }; }