| | |
| | | #pragma once |
| | | #include <list> |
| | | #include <unordered_set> |
| | | #include "CEquipment.h" |
| | | #include "CEFEM.h" |
| | | #include "CBonder.h" |
| | |
| | | #include "CControlJob.h" |
| | | #include "../DAQBridge/core/Collector.h" |
| | | #include "CJobDataS.h" |
| | | |
| | | class CModel; |
| | | |
| | | |
| | | #define CTStep_Unknow 0 |
| | |
| | | ATHERERROR |
| | | }; |
| | | |
| | | enum class CurveMode { |
| | | Production = 0, |
| | | EmptyChamber |
| | | }; |
| | | |
| | | enum class SchedulingMode { |
| | | Production = 0, // 生产模式(按客户指定Port映射) |
| | | Tuning = 1 // 调机模式(原有调度逻辑) |
| | | }; |
| | | |
| | | typedef std::function<void(void* pMaster, MASTERSTATE state)> ONMASTERSTATECHANGED; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEiuipment, BOOL bAlive)> ONEQALIVE; |
| | | typedef std::function<void(CStep* pStep, int code, void* pData)> ONEQSTEPEVENT; |
| | |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONPROCESSDATAREPORTEX; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, const std::vector<CParam>& params)> ONSVDATAREPORT; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int port, CJobDataS* pJobDataS)> ONJOBRECEIVED; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int port, CJobDataS* pJobDataS)> ONJOBSENTOUT; |
| | | typedef std::function<void(void* pMaster, CEquipment* pEquipment, int unitId, int status, int reason)> ONEQSTATUSCHANGEDEX; |
| | | typedef std::function<void(void* pMaster, int round)> ONCTROUNDEND; |
| | | typedef std::function<void(void* pMaster, void* pj)> ONPJSTART; |
| | | typedef std::function<void(void* pMaster)> ONCONTROLJOBCHANGED; |
| | |
| | | ONSVDATAREPORT onSVDataReport; |
| | | ONPROCESSDATAREPORTEX onProcessDataReport; |
| | | ONJOBRECEIVED onJobReceived; |
| | | ONJOBSENTOUT onJobSentOut; |
| | | ONEQSTATUSCHANGEDEX onEqStatusChanged; |
| | | ONCTROUNDEND onCTRoundEnd; |
| | | ONPJSTART onCjStart; |
| | | ONPJSTART onCjEnd; |
| | |
| | | |
| | | |
| | | public: |
| | | void setModelCtx(CModel* pModel); |
| | | void setListener(MasterListener listener); |
| | | CRobotTask* getActiveRobotTask(); |
| | | int init(); |
| | |
| | | void clearError(); |
| | | ULONGLONG getRunTime(); |
| | | MASTERSTATE getState(); |
| | | void setCurveMode(CurveMode mode); |
| | | CurveMode getCurveMode() const; |
| | | void setSchedulingMode(SchedulingMode mode); |
| | | SchedulingMode getSchedulingMode() const; |
| | | void applySchedulingModePortMapping(); |
| | | unsigned DispatchProc(); |
| | | unsigned ReadBitsProc(); |
| | | void onTimer(UINT nTimerid); |
| | |
| | | CRobotTask* createTransferTask_bake_to_cooling(CEquipment* pSrcEq); |
| | | CRobotTask* createTransferTask_bakecooling_to_measurement(CEquipment* pSrcEq, CEquipment* pTarEq); |
| | | CRobotTask* createTransferTask_restore(CEquipment* pEqSrc, CLoadPort** pPorts); |
| | | CRobotTask* createTransferTask_returnOrigin(CEquipment* pEqSrc, CLoadPort** pPorts); |
| | | CRobotTask* createTransferTask_continuous_transfer(CEquipment* pSrcEq, int nSrcSlot, |
| | | CEquipment* pTarEq, int nTarSlot, int armNo = 1); |
| | | |
| | |
| | | bool carrierPresent(const std::string& carrierId) const override; |
| | | bool slotUsable(const std::string& carrierId, uint16_t slot) const override; |
| | | bool ceidDefined(uint32_t ceid) const override; |
| | | void setAllowedCeids(const std::vector<unsigned int>& ceids); |
| | | void handleCollectionEvent(uint32_t ceid); |
| | | bool raiseSoftAlarm(int alarmId, |
| | | const std::string& desc, |
| | | int level = -1, |
| | | int deviceId = 0, |
| | | int unitId = 0, |
| | | const char* deviceName = "Software", |
| | | const char* unitName = "App"); |
| | | |
| | | public: |
| | | int getLastError(); |
| | |
| | | ULONGLONG m_ullStartTime; |
| | | ULONGLONG m_ullRunTime; |
| | | MASTERSTATE m_state; |
| | | CurveMode m_curveMode; |
| | | |
| | | // 当前任务和已完成任务列表 |
| | | CRobotTask* m_pActiveRobotTask; |
| | |
| | | // 在开始工艺前是否需要先比较 map |
| | | BOOL m_isCompareMapsBeforeProceeding; |
| | | BOOL m_bJobMode; |
| | | SchedulingMode m_schedulingMode; |
| | | |
| | | // 千传圈数计数 |
| | | int m_nContinuousTransferCount; |
| | |
| | | private: |
| | | bool m_bEnableEventReport; |
| | | bool m_bEnableAlarmReport; |
| | | bool m_bPauseAlarmRaised; |
| | | SERVO::CControlJob* m_pControlJob; |
| | | std::vector<SERVO::CProcessJob*> m_processJobs; |
| | | std::string m_strStatePath; |
| | | CModel* m_pModelCtx; |
| | | |
| | | int m_nTestFlag; |
| | | std::list<CGlass*> m_bufGlass; |
| | | std::unordered_set<uint32_t> m_allowedCeids; |
| | | |
| | | private: |
| | | Collector* m_pCollector = nullptr; |
| | | void CreateDAQBridgeServer(); |
| | | inline void notifyControlJobChanged() { |
| | | if (m_listener.onControlJobChanged) { |
| | | m_listener.onControlJobChanged(this); |
| | | } |
| | | } |
| | | }; |
| | | } |