chenluhua1980
6 天以前 d400f022161ff47f02cd0ea95a5076d0187ecd4d
SourceCode/Bond/Servo/CMaster.h
@@ -1,5 +1,6 @@
#pragma once
#include <list>
#include <unordered_set>
#include "CEquipment.h"
#include "CEFEM.h"
#include "CBonder.h"
@@ -16,6 +17,9 @@
#include "ProcessJob.h"
#include "CControlJob.h"
#include "../DAQBridge/core/Collector.h"
#include "CJobDataS.h"
class CModel;
#define CTStep_Unknow                   0
@@ -50,6 +54,11 @@
        ATHERERROR
    };
    enum class CurveMode {
        Production = 0,
        EmptyChamber
    };
    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;
@@ -58,9 +67,15 @@
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, int code)> ONEQDATACHANGED;
    typedef std::function<void(void* pMaster, CRobotTask* pTask, int code)> ONROBOTTASKEVENT;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, short status, __int64 data)> ONLOADPORTSTATUSCHANGED;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, int slotNo, PROCESS_STATE state)> ONPROCESSSTATECHANGED;
    typedef std::function<void(void* pMaster, CEquipment* pEquipment, int slotNo, PROCESS_STATE prevState, PROCESS_STATE state)> ONPROCESSSTATECHANGED;
    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;
    typedef struct _MasterListener
    {
        ONMASTERSTATECHANGED    onMasterStateChanged;
@@ -72,6 +87,11 @@
        ONROBOTTASKEVENT        onRobotTaskEvent;
        ONLOADPORTSTATUSCHANGED   onLoadPortStatusChanged;
        ONPROCESSSTATECHANGED   onProcessStateChanged;
        ONSVDATAREPORT          onSVDataReport;
        ONPROCESSDATAREPORTEX   onProcessDataReport;
        ONJOBRECEIVED           onJobReceived;
        ONJOBSENTOUT            onJobSentOut;
        ONEQSTATUSCHANGEDEX       onEqStatusChanged;
        ONCTROUNDEND            onCTRoundEnd;
        ONPJSTART               onCjStart;
        ONPJSTART               onCjEnd;
@@ -79,6 +99,7 @@
        ONPJSTART               onPjEnd;
        ONPJSTART               onPanelStart;
        ONPJSTART               onPanelEnd;
        ONCONTROLJOBCHANGED     onControlJobChanged;
    } MasterListener;
    class CMaster : public IResourceView
@@ -89,6 +110,7 @@
    public:
        void setModelCtx(CModel* pModel);
        void setListener(MasterListener listener);
        CRobotTask* getActiveRobotTask();
        int init();
@@ -100,6 +122,8 @@
        void clearError();
        ULONGLONG getRunTime();
        MASTERSTATE getState();
        void setCurveMode(CurveMode mode);
        CurveMode getCurveMode() const;
        unsigned DispatchProc();
        unsigned ReadBitsProc();
        void onTimer(UINT nTimerid);
@@ -180,6 +204,15 @@
        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();
@@ -203,7 +236,7 @@
        bool canCompleteControlJob();
        bool canDeleteControlJob();
        
        // DAQ Bridge鐩稿叧
        // DAQ Bridge 相关
        Collector* getCollector() const { return m_pCollector; }
    private:
@@ -232,6 +265,7 @@
        ULONGLONG m_ullStartTime;
        ULONGLONG m_ullRunTime;
        MASTERSTATE m_state;
        CurveMode m_curveMode;
        // 当前任务和已完成任务列表
        CRobotTask* m_pActiveRobotTask;
@@ -241,10 +275,9 @@
        int m_nLastError;
        std::string m_strLastError;
        // 在开始工艺前是否先需要先比较map
        // 在开始工艺前是否需要先比较 map
        BOOL m_isCompareMapsBeforeProceeding;
        BOOL m_bJobMode;
        // 千传圈数计数
        int m_nContinuousTransferCount;
@@ -252,7 +285,7 @@
        int m_nContinuousWorkingPort;
        int m_nContinuousWorkingSlot;
        // 新增已经开始处理的ProcessJob列表
        // 已经开始处理的 ProcessJob 列表
        std::vector<CProcessJob*> m_inProcesJobs;
        std::vector<CProcessJob*> m_completeProcessJobs;
        std::vector<CGlass*> m_queueGlasses;
@@ -262,15 +295,23 @@
    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);
            }
        }
    };
}