| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- #pragma once
- #include "OTSProjMgrFile.h"
- #include "OTSSemBase.h"
- #include "OTSEDSBase.h"
- #include "OTSScanBase.h"
- #include "MsrSampleStatus.h"
- #include "MsrThreadStatus.h"
- #include "SEMDataGnr.h"
- #include "COTSHardwareMgr.h"
- #define WM_MEASURE_MSG_ID WM_USER + 100
- #define WM_LOG_MSG_ID WM_USER + 101
- namespace OTSMODEL {
- using namespace OTSController;
-
- // enum and struct used for send message to App
- typedef enum ENUM_MSG_TYPE
- {
- MTHREADSTATUS=1001,
- MSAMPLESTATUS=1002,
- MSAMPLERESULT=1003
- } MSG_TYPE;
- typedef enum ENUM_MEASURE_SAMPLE_RESULT
- {
- BSE_DATA = 0,
- FIELD_DATA = 1,
- START_MSR_FIELD = 2
- // MSR_START_TIME = 2,
- // MSR_END_TIME = 3
- } MSAMPLE_RET;
- typedef struct STMeasureSampleThreadMsg
- {
- BYTE* gbseData;
- MSG_TYPE iMsgType;
- struct STMThreadStatus
- {
- int iMThreadStatus; //OTS_MSR_THREAD_STATUS
- char cMsrStartTime[50]; //MSR_START_TIME
- char cMsrEndTime[50]; //MSR_END_TIME
- };
- struct STMSampleStatus
- {
- int iMeasureSampleStatus; //OTS_MSR_SAMPLE_STATUS
- char cSampleName[20];
- };
- struct STMSampleResultData
- {
- int iRetDataType; //ENUM_MEASURE_SAMPLE_RESULT
- struct RBSEDATA
- {
- CPoint pos;
- int iBSEDataHeight;
- int iBSEDataWidth;
- BYTE* lpBSEData;
- };
- struct SAMPLEFIELDDATA
- {
- CPoint Fieldpos;
- int iMeasureFieldCount;
- int iCompleteFieldCount;
- int iSParticleCount; // Field particle count
- };
- struct StartToMsrField
- {
- CPoint Fieldpos;
- };
- /* struct SAMPLEPARTICLECOUNT
- {
- char cSampleName[20];
- int iSParticleCount; // Sample particle count
- };
- */
- // char cMsrStartTime[50]; //MSR_START_TIME
- // char cMsrEndTime[50]; //MSR_END_TIME
- RBSEDATA BSEData;
- SAMPLEFIELDDATA SFieldData;
- StartToMsrField SMsrField;
- // SAMPLEPARTICLECOUNT SParticleCount;
- };
-
- STMThreadStatus STMThreadStu;
- STMSampleStatus STMSampleStu;
- STMSampleResultData STMSampleRetData;
-
- }ST_MSTMsg;
- typedef struct PostLogMessage
- {
- int logLevel;
- char logMsg[100];
- }PostLogMsg;
- typedef enum class __declspec(dllexport) SAMPLE_CHECK_RESULT_TYPE
- {
- INVALID = -1,
- MIN = 0,
- SWITCH_ON = 0,
- FINISHED = 1,
- SETTING_ERROR = 2,
- SETTING_WARNING = 3,
- MEASURABLE = 4,
- NO_ERROR_WARNING = 5,
- MAX = 5
- } SAMPLE_CHECK_RESULT_TYPE;
- typedef enum class __declspec(dllexport) SAMPLE_FAULT_WARN_CODE
- {
- INVALID = -1,
- MIN = 0,
- SEM_DATA_ERROR = 0,
- AREA_OUTSIDE_HOLE = 1,
- RESOLUTION_LOW = 2,
- FINISHED = 3,
- NO_ERROR_WARNING = 4,
- FILE_NOT_SAVED = 5,
- MAX = 5
- } SAMPLE_FAULT_WARN_CODE;
- typedef enum PostLogLevel
- {
- trace = 1,
- debug = 2,
- info = 3,
- warn = 4,
- error = 5,
- fatal = 6
- };
- class __declspec(dllexport) CMsrThread: public CObject
- {
- public:
- CMsrThread();
- CMsrThread(CMsrThread*);
-
- ~CMsrThread();
- // init
- BOOL Init(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplesList a_listMeasuableSamples);
- BOOL Init(COTSProjMgrFilePtr a_pProjMgrFile);
- // measurement
- void DoMeasure();
- // Hole Preview
- void DoHolePreview(int a_nHoleID, CDomainPtr a_pMeasureArea);
- // SEM controller
- CSemBasePtr GetSEMController();
- // x-ray controller
- COTSEDSBasePtr GetEDSController();
- // BSE controller
- COTSScanBasePtr GetScanController();
- // measure loop status
- void SetMsrLoopStatus(OTS_MSR_THREAD_STATUS a_nMsrLoopStatus);
- BOOL IsMeasureRunning(){ return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::INPROCESS; }
- BOOL IsMeasureStopped() { return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::STOPPED; }
- BOOL IsMeasureFailed() { return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::FAILED; }
- BOOL IsMeasureCompleted() { return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::COMPLETED; }
-
- // check measure parameters and init the measureable samplelists , meanwhile give out the measureable samples.
- BOOL CheckMeasureParam(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplesList& a_listMeasuableSamples, BOOL a_bCheckSetting = TRUE);
- // send message to App main thread
- void GetMeasureAppFormName(const CString& csFormName);
- BOOL SendMessageToMeasureApp(ST_MSTMsg Msg);
- BOOL SendLogMessageToMeasureApp(CString Msg, PostLogLevel PostLog);
- // measure file
- COTSProjMgrFilePtr GetProjMgrFile() { return m_pProjMgrFile; }
- void SetProjMgrFile(COTSProjMgrFilePtr a_pProjMgrFile);
- // measurable sample list
- COTSSamplesList GetMeasurableSamples() { return m_listMeasurableSamples; }
- void SetMeasurableSamples(COTSSamplesList& m_listMeasurableSamples);
- // SEM data general
- CSEMDataGnrPtr GetSEMDataGnr() { return m_pSEMDataGnr; }
- void SetSEMDataGnr(CSEMDataGnrPtr a_pSEMDataGnr);
- // working folder
- CString GetWorkingFolder() { return m_strWorkingFolder; }
- void SetWorkingFolderStr(CString a_strWoringFolder) { m_strWorkingFolder = a_strWoringFolder; }
- // measure loop status
- CMsrThreadStatusPtr GetMsrThreadStatus() { return m_pThreadStatus; }
- void SetMsrThreadStatus(CMsrThreadStatusPtr a_pThreadStatus);
- //MeasureAppFormName
- CString GetMsrAppFormName() { return m_strMAppFormName; }
- void SetMsrAppFormName(CString a_MAppFormName) { m_strMAppFormName = a_MAppFormName; }
- //??
- HWND GetWnd() { return m_hWnd; }
- void SetHWND(HWND a_hWnd) { m_hWnd = a_hWnd; }
- // check project file is saved
- BOOL CheckProjFileSave();
- // thread over
- void ThreadOver();
- // record the project file
- //BOOL RecordProjFile(COTSSamplePtr a_pSample);
- //Get STDId
- BOOL GetClassifyParticleId(CPartSTDDataPtr a_pPartSTDData, int steelTech, CElementChemistriesList& a_listElementChemistries, int& a_nIncId);
- // hardware
- BOOL ConnectHardware();
- void DisconnectHardware();
- protected:
- // initialization
- void Init();
- // check sample a measurement completed
- static BOOL IsMeasureCompletedSmpl(COTSSamplePtr a_pSample);
- // get sample error code
- static void GetSampleErrorCodes(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplePtr a_pSample, std::vector<SAMPLE_FAULT_WARN_CODE>& a_listErrorCodes);
- // check sample has warn
- static void GetSampleWarningCodes(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplePtr a_pSample, std::vector<SAMPLE_FAULT_WARN_CODE>& a_listErrorCodes);
- // error/waring string
- static CString GetSampleErrorWarnString(SAMPLE_FAULT_WARN_CODE a_nSampleFaultWarn);
- // SEM general data
- BOOL GetSEMDataGnrFromHW();
- // SEM general data
- BOOL GetSEMWorkingDistanceFromHW(double& dWorkingDistance);
- // working folder
- BOOL SetWorkingFolderStr();
- // create Hole sample
- COTSSamplePtr CreateHoleSample(CDomainPtr a_pMsrArea);
- // duplication
- void Duplicate(const CMsrThread& a_oSource);
-
- protected:
- // measure file
- COTSProjMgrFilePtr m_pProjMgrFile;
- // measure samples list
- COTSSamplesList m_listMeasurableSamples;
- // working folder string
- CString m_strWorkingFolder;
- // measure loop status
- CMsrThreadStatusPtr m_pThreadStatus;
- // SEM data general
- CSEMDataGnrPtr m_pSEMDataGnr;
-
- //MeasureAppFormName
- CString m_strMAppFormName;
- HWND m_hWnd ;
- COTSHardwareMgrPtr m_pHardwareMgr;
- private:
- PostLogMessage postlog;
-
-
- };
- typedef std::shared_ptr<CMsrThread> __declspec(dllexport) CMsrThreadPtr;
- }
|