#pragma once /* 1、模组基类 方向:X轴向右为正,Y轴向里为正,Z轴向下为正 */ #include "CAxis.h" #include "CAxis.h" #include "CIO.h" #include #include #include #include "dt.h" #include "CBondMatrix.h" #include "CResources.h" #include "CCoord.h" #include "CError.h" #include "FHConvert.h" #include "CLog.h" #include "SystemResources.h" #include "CHardwareList.h" using namespace std; using namespace ns_db; #pragma region 轴定义 //超声头 #define CUltraHead_X "UltraHead_X" #define CUltraHead_Y "UltraHead_Y" #define CUltraHead_Z "UltraHead_Z" #define CUltraHead_R "UltraHead_R" #define CUltraHead_Force "UltraHead_Force" #define BDX "BDX" #define BDY "BDY" #define BDZ "BDZ" #define BDR "BDR" #define BDForceZ "BDForceZ" #define WaferHeadX "WaferHeadX" #define WaferHeadY "WaferHeadY" #define WaferHeadZ "WaferHeadZ" #define WaferHeadForceZ "WaferHeadForceZ" #define WaffleHeadX "WaffleHeadX" #define WaffleHeadY "WaffleHeadY" #define WaffleHeadZ "WaffleHeadZ" ///吸嘴架///吸嘴架 #define NuzzleAxisY "NuzzleAxisY" //中转台//中转台 #define WaferCalibTableX "WaferCalibTableX" #define WaffleCalibTableX "WaffleCalibTableX" //WaferTalbe//WaferTalbe #define WaferTable_X "WaferTable_X" #define WaferTable_Y "WaferTable_Y" #define WaferTable_Z "WaferTable_Z" #define WaferTable_R "WaferTable_R" //BondTable//BondTable #define BondTableZ "BondTableZ" //顶针//顶针 #define EjectorX "EjectorX" #define EjectorY "EjectorY" #define EjectorZ "EjectorZ" #define EjectorPinZ "EjectorPinZ" #pragma endregion enum USE_TYPE { NOUSE = 0, DIAGNOSIS = 1, USE = 2 }; //typedef struct _AXIS_STRUCT //{ // string AxisName; //轴名称 // USE_TYPE Use; //0:禁用,1:启用 // CAxis::AXIS_TYPE AxisType; //Io类型 // UINT HomeTime; //回零等待时间(秒) // UINT FastTime; //快速等待时间(秒) // UINT MediumTime; //中速等待时间(秒) // UINT SlowTime; //慢速等待时间(秒) // _AXIS_STRUCT(string name, USE_TYPE use, CAxis::AXIS_TYPE type, UINT homeTime, UINT slowTime, UINT mediumTime, UINT fastTime) // { // AxisName = name; // Use = use; // AxisType = type; // HomeTime = homeTime; // FastTime = fastTime; // MediumTime = mediumTime; // SlowTime = slowTime; // } //}AXIS_STRUCT; //const static map g_mapAxisList = { // {BDX,AXIS_STRUCT("BondHead_X",USE_TYPE::USE,CAxis::AXIS_TYPE::X,100000,80000,50000,30000)}, // {BDY ,AXIS_STRUCT("BondHead_Y",USE_TYPE::USE,CAxis::AXIS_TYPE::Y,100000,80000,50000,30000)}, // {BDZ,AXIS_STRUCT("BondHead_Z",USE_TYPE::USE,CAxis::AXIS_TYPE::Z,100000,80000,50000,30000)}, // {BDR,AXIS_STRUCT("BondHead_R",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,100000,80000,50000,30000)}, // {BDForceZ,AXIS_STRUCT("BondHead_ForceZ",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::FORCE,10000,8000,5000,3000)}, // {WaferHeadX,AXIS_STRUCT("WaferHead_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)}, // {WaferHeadY ,AXIS_STRUCT("WaferHead_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)}, // {WaferHeadZ,AXIS_STRUCT("WaferHead_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)}, // {WaferHeadForceZ,AXIS_STRUCT("WaferHead_ForceZ",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)}, // {WaffleHeadX,AXIS_STRUCT("WaffleHead_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)}, // {WaffleHeadY ,AXIS_STRUCT("WaffleHead_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)}, // {WaffleHeadZ,AXIS_STRUCT("WaffleHead_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)}, // //吸嘴架 // {NuzzleAxisY,AXIS_STRUCT("NuzzleAxis_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)}, // //中转台 // {WaferCalibTableX,AXIS_STRUCT("WaferCalibTable_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)}, // {WaffleCalibTableX,AXIS_STRUCT("WaffleCalibTable_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)}, // // //WaferTalbe // {WaferTable_X,AXIS_STRUCT("WaferTable_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::X,10000,8000,5000,3000)}, // {WaferTable_Y,AXIS_STRUCT("WaferTable_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Y,10000,8000,5000,3000)}, // {WaferTable_Z,AXIS_STRUCT("WaferTable_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::Z,10000,8000,5000,3000)}, // {WaferTable_R,AXIS_STRUCT("WaferTable_R",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)}, // //BondTable // {BondTableZ,AXIS_STRUCT("BondTable_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)}, // //顶针 // {EjectorX,AXIS_STRUCT("Ejector_X",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)}, // {EjectorY,AXIS_STRUCT("Ejector_Y",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)}, // {EjectorZ,AXIS_STRUCT("Ejector_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)}, // {EjectorPinZ,AXIS_STRUCT("EjectorPin_Z",USE_TYPE::NOUSE,CAxis::AXIS_TYPE::R,10000,8000,5000,3000)}, // //}; enum IO_LIST { BDVacDi, BDFlowDi, WaferHeadVacDi, WaferHeadFlowDi, WaferHeadFlowDo, WaffleHeadVacDi, WaffleHeadFlowDi, //BondTable PcbArriveDi, PcbLeaveDi, BondTableDo, //吸嘴架 NozzleCylNDi, NozzleCylPDi, NozzleExistDi1, NozzleExistDi2, NozzleExistDi3, NozzleExistDi4, NozzleExistDi5, NozzleExistDi6, NozzleExistDi7, NozzleExistDi8, NozzleExistDi9, NozzleExistDi10, NozzleExistDi11, NozzleExistDi12, BDVacDo, BDFlowDo, WaferHeadVacDo, WaffleHeadVacDo, WaffleHeadFlowDo, //中转台 WaferCalibVacDo, WaffleCalibVacDo, BDTableVacGpo, NozzleCylDo, WaferTable_Ring, EjectorVacDo, //超声 UltraHeadDo, }; //typedef struct _IO_STRUCT //{ // string IoName; //Io名称 // USE_TYPE Use; //0:禁用,1:启用 // IO_TYPE IoType; //Io类型 // DIGIT_IO_LEVEL FirstStatus; //数字Io的初始状态 // _IO_STRUCT(string name, USE_TYPE use, IO_TYPE type, DIGIT_IO_LEVEL status) // { // IoName = name; // Use = use; // IoType = type; // FirstStatus = status; // } // _IO_STRUCT(string name, USE_TYPE use, IO_TYPE type) // { // IoName = name; // Use = use; // IoType = type; // FirstStatus = DIGIT_IO_LEVEL::NUL; // } //}IO_STRUCT; // //const static map g_mapIoList = { // {BDVacDi,IO_STRUCT("BDVacDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {BDFlowDi,IO_STRUCT("BDFlowDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {BDVacDo,IO_STRUCT("BDVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {BDFlowDo,IO_STRUCT("BDFlowDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {UltraHeadDo,IO_STRUCT("UltraHeadDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // // {WaferHeadVacDi,IO_STRUCT("WaferHeadVacDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {WaferHeadFlowDi,IO_STRUCT("WaferHeadFlowDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {WaferHeadFlowDo,IO_STRUCT("WaferHeadFlowDo",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {WaffleHeadVacDi,IO_STRUCT("WaffleHeadVacDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {WaffleHeadFlowDi,IO_STRUCT("WaffleHeadFlowDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // //BondTable // {PcbArriveDi,IO_STRUCT("PcbArriveDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {PcbLeaveDi,IO_STRUCT("PcbLeaveDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {BondTableDo,IO_STRUCT("BondTableDo",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // //吸嘴架 // {NozzleCylNDi,IO_STRUCT("NozzleCylNDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // {NozzleCylPDi,IO_STRUCT("NozzleCylPDi",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // // {WaferHeadVacDo,IO_STRUCT("WaferHeadVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {WaffleHeadVacDo,IO_STRUCT("WaffleHeadVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {WaffleHeadFlowDo,IO_STRUCT("WaffleHeadFlowDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // //中转台 // {WaferCalibVacDo,IO_STRUCT("WaferCalibVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {WaffleCalibVacDo,IO_STRUCT("WaffleCalibVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {BDTableVacGpo,IO_STRUCT("BDTableVacGpo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // {NozzleCylDo,IO_STRUCT("NozzleCylDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // // {WaferTable_Ring,IO_STRUCT("WaferTable_Ring",USE_TYPE::NOUSE,IO_TYPE::DI,DIGIT_IO_LEVEL::LOW)}, // // {EjectorVacDo,IO_STRUCT("EjectorVacDo",USE_TYPE::NOUSE,IO_TYPE::DO,DIGIT_IO_LEVEL::LOW)}, // // //}; class __declspec(dllexport) CModule { public: CModule(MODULE_LIST eModuleType); LONG Init(); bool IsInitSuccess() {return m_bIsInitSuccess;} LONG GetModuleType() const { return m_nModuleType; } string GetModuleName() const { return m_strModuleName; } virtual LONG AllocateIo(vector vecIo) { return OK; }; virtual LONG AllocateAxis(vector vecAxis) { return OK; }; virtual LONG GetParam() = 0; //获取配置参数 virtual LONG SetParam() = 0; //设置配置参数 virtual LONG ToHome() = 0; //模组回零 virtual LONG Sync() = 0; //等待到位 virtual LONG ToSafePosition() = 0; //模组去安全位置 virtual LONG InitResource() = 0; //分配轴、IO、标定等资源 virtual void SetDataChangFunction() = 0; //设置收到数据更改通知后处理函数,绑定回调函数 virtual void DataChangNotice(string strDbName, string strTableName) = 0; //回调触发处理函数 LONG SaveDataToDB(); protected: vector* GetConfigVector() { return &m_vecConfig; } protected: CManageDB* m_pCManageDB = nullptr; CModuleConfig* m_pModuleConfigDB = nullptr; CHardware* m_pCHardware = nullptr; vector m_vecConfig; bool m_bIsInitSuccess = false; INT m_nModuleType = 0; string m_strModuleName = ""; //模组是否启用 bool m_bEnable = false; };