MsrThread.h 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. #pragma once
  2. #include "OTSProjMgrFile.h"
  3. #include "OTSSemBase.h"
  4. #include "OTSEDSBase.h"
  5. #include "OTSScanBase.h"
  6. #include "MsrSampleStatus.h"
  7. #include "MsrThreadStatus.h"
  8. #include "SEMDataGnr.h"
  9. #include "COTSHardwareMgr.h"
  10. #define WM_MEASURE_MSG_ID WM_USER + 100
  11. #define WM_LOG_MSG_ID WM_USER + 101
  12. namespace OTSMODEL {
  13. using namespace OTSController;
  14. // enum and struct used for send message to App
  15. typedef enum ENUM_MSG_TYPE
  16. {
  17. MTHREADSTATUS=1001,
  18. MSAMPLESTATUS=1002,
  19. MSAMPLERESULT=1003
  20. } MSG_TYPE;
  21. typedef enum ENUM_MEASURE_SAMPLE_RESULT
  22. {
  23. BSE_DATA = 0,
  24. FIELD_DATA = 1,
  25. START_MSR_FIELD = 2
  26. // MSR_START_TIME = 2,
  27. // MSR_END_TIME = 3
  28. } MSAMPLE_RET;
  29. typedef struct STMeasureSampleThreadMsg
  30. {
  31. BYTE* gbseData;
  32. MSG_TYPE iMsgType;
  33. struct STMThreadStatus
  34. {
  35. int iMThreadStatus; //OTS_MSR_THREAD_STATUS
  36. char cMsrStartTime[50]; //MSR_START_TIME
  37. char cMsrEndTime[50]; //MSR_END_TIME
  38. };
  39. struct STMSampleStatus
  40. {
  41. int iMeasureSampleStatus; //OTS_MSR_SAMPLE_STATUS
  42. char cSampleName[20];
  43. };
  44. struct STMSampleResultData
  45. {
  46. int iRetDataType; //ENUM_MEASURE_SAMPLE_RESULT
  47. struct RBSEDATA
  48. {
  49. CPoint pos;
  50. int iBSEDataHeight;
  51. int iBSEDataWidth;
  52. BYTE* lpBSEData;
  53. };
  54. struct SAMPLEFIELDDATA
  55. {
  56. CPoint Fieldpos;
  57. int iMeasureFieldCount;
  58. int iCompleteFieldCount;
  59. int iSParticleCount; // Field particle count
  60. };
  61. struct StartToMsrField
  62. {
  63. CPoint Fieldpos;
  64. };
  65. /* struct SAMPLEPARTICLECOUNT
  66. {
  67. char cSampleName[20];
  68. int iSParticleCount; // Sample particle count
  69. };
  70. */
  71. // char cMsrStartTime[50]; //MSR_START_TIME
  72. // char cMsrEndTime[50]; //MSR_END_TIME
  73. RBSEDATA BSEData;
  74. SAMPLEFIELDDATA SFieldData;
  75. StartToMsrField SMsrField;
  76. // SAMPLEPARTICLECOUNT SParticleCount;
  77. };
  78. STMThreadStatus STMThreadStu;
  79. STMSampleStatus STMSampleStu;
  80. STMSampleResultData STMSampleRetData;
  81. }ST_MSTMsg;
  82. typedef struct PostLogMessage
  83. {
  84. int logLevel;
  85. char logMsg[100];
  86. }PostLogMsg;
  87. typedef enum class __declspec(dllexport) SAMPLE_CHECK_RESULT_TYPE
  88. {
  89. INVALID = -1,
  90. MIN = 0,
  91. SWITCH_ON = 0,
  92. FINISHED = 1,
  93. SETTING_ERROR = 2,
  94. SETTING_WARNING = 3,
  95. MEASURABLE = 4,
  96. NO_ERROR_WARNING = 5,
  97. MAX = 5
  98. } SAMPLE_CHECK_RESULT_TYPE;
  99. typedef enum class __declspec(dllexport) SAMPLE_FAULT_WARN_CODE
  100. {
  101. INVALID = -1,
  102. MIN = 0,
  103. SEM_DATA_ERROR = 0,
  104. AREA_OUTSIDE_HOLE = 1,
  105. RESOLUTION_LOW = 2,
  106. FINISHED = 3,
  107. NO_ERROR_WARNING = 4,
  108. FILE_NOT_SAVED = 5,
  109. MAX = 5
  110. } SAMPLE_FAULT_WARN_CODE;
  111. typedef enum PostLogLevel
  112. {
  113. trace = 1,
  114. debug = 2,
  115. info = 3,
  116. warn = 4,
  117. error = 5,
  118. fatal = 6
  119. };
  120. class __declspec(dllexport) CMsrThread: public CObject
  121. {
  122. public:
  123. CMsrThread();
  124. CMsrThread(CMsrThread*);
  125. ~CMsrThread();
  126. // init
  127. BOOL Init(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplesList a_listMeasuableSamples);
  128. BOOL Init(COTSProjMgrFilePtr a_pProjMgrFile);
  129. // measurement
  130. void DoMeasure();
  131. // Hole Preview
  132. void DoHolePreview(int a_nHoleID, CDomainPtr a_pMeasureArea);
  133. // SEM controller
  134. CSemBasePtr GetSEMController();
  135. // x-ray controller
  136. COTSEDSBasePtr GetEDSController();
  137. // BSE controller
  138. COTSScanBasePtr GetScanController();
  139. // measure loop status
  140. void SetMsrLoopStatus(OTS_MSR_THREAD_STATUS a_nMsrLoopStatus);
  141. BOOL IsMeasureRunning(){ return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::INPROCESS; }
  142. BOOL IsMeasureStopped() { return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::STOPPED; }
  143. BOOL IsMeasureFailed() { return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::FAILED; }
  144. BOOL IsMeasureCompleted() { return m_pThreadStatus->GetStatus() == OTS_MSR_THREAD_STATUS::COMPLETED; }
  145. // check measure parameters and init the measureable samplelists , meanwhile give out the measureable samples.
  146. BOOL CheckMeasureParam(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplesList& a_listMeasuableSamples, BOOL a_bCheckSetting = TRUE);
  147. // send message to App main thread
  148. void GetMeasureAppFormName(const CString& csFormName);
  149. BOOL SendMessageToMeasureApp(ST_MSTMsg Msg);
  150. BOOL SendLogMessageToMeasureApp(CString Msg, PostLogLevel PostLog);
  151. // measure file
  152. COTSProjMgrFilePtr GetProjMgrFile() { return m_pProjMgrFile; }
  153. void SetProjMgrFile(COTSProjMgrFilePtr a_pProjMgrFile);
  154. // measurable sample list
  155. COTSSamplesList GetMeasurableSamples() { return m_listMeasurableSamples; }
  156. void SetMeasurableSamples(COTSSamplesList& m_listMeasurableSamples);
  157. // SEM data general
  158. CSEMDataGnrPtr GetSEMDataGnr() { return m_pSEMDataGnr; }
  159. void SetSEMDataGnr(CSEMDataGnrPtr a_pSEMDataGnr);
  160. // working folder
  161. CString GetWorkingFolder() { return m_strWorkingFolder; }
  162. void SetWorkingFolderStr(CString a_strWoringFolder) { m_strWorkingFolder = a_strWoringFolder; }
  163. // measure loop status
  164. CMsrThreadStatusPtr GetMsrThreadStatus() { return m_pThreadStatus; }
  165. void SetMsrThreadStatus(CMsrThreadStatusPtr a_pThreadStatus);
  166. //MeasureAppFormName
  167. CString GetMsrAppFormName() { return m_strMAppFormName; }
  168. void SetMsrAppFormName(CString a_MAppFormName) { m_strMAppFormName = a_MAppFormName; }
  169. //??
  170. HWND GetWnd() { return m_hWnd; }
  171. void SetHWND(HWND a_hWnd) { m_hWnd = a_hWnd; }
  172. // check project file is saved
  173. BOOL CheckProjFileSave();
  174. // thread over
  175. void ThreadOver();
  176. // record the project file
  177. //BOOL RecordProjFile(COTSSamplePtr a_pSample);
  178. //Get STDId
  179. BOOL GetClassifyParticleId(CPartSTDDataPtr a_pPartSTDData, int steelTech, CElementChemistriesList& a_listElementChemistries, int& a_nIncId);
  180. // hardware
  181. BOOL ConnectHardware();
  182. void DisconnectHardware();
  183. protected:
  184. // initialization
  185. void Init();
  186. // check sample a measurement completed
  187. static BOOL IsMeasureCompletedSmpl(COTSSamplePtr a_pSample);
  188. // get sample error code
  189. static void GetSampleErrorCodes(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplePtr a_pSample, std::vector<SAMPLE_FAULT_WARN_CODE>& a_listErrorCodes);
  190. // check sample has warn
  191. static void GetSampleWarningCodes(COTSProjMgrFilePtr a_pProjMgrFile, COTSSamplePtr a_pSample, std::vector<SAMPLE_FAULT_WARN_CODE>& a_listErrorCodes);
  192. // error/waring string
  193. static CString GetSampleErrorWarnString(SAMPLE_FAULT_WARN_CODE a_nSampleFaultWarn);
  194. // SEM general data
  195. BOOL GetSEMDataGnrFromHW();
  196. // SEM general data
  197. BOOL GetSEMWorkingDistanceFromHW(double& dWorkingDistance);
  198. // working folder
  199. BOOL SetWorkingFolderStr();
  200. // create Hole sample
  201. COTSSamplePtr CreateHoleSample(CDomainPtr a_pMsrArea);
  202. // duplication
  203. void Duplicate(const CMsrThread& a_oSource);
  204. protected:
  205. // measure file
  206. COTSProjMgrFilePtr m_pProjMgrFile;
  207. // measure samples list
  208. COTSSamplesList m_listMeasurableSamples;
  209. // working folder string
  210. CString m_strWorkingFolder;
  211. // measure loop status
  212. CMsrThreadStatusPtr m_pThreadStatus;
  213. // SEM data general
  214. CSEMDataGnrPtr m_pSEMDataGnr;
  215. //MeasureAppFormName
  216. CString m_strMAppFormName;
  217. HWND m_hWnd ;
  218. COTSHardwareMgrPtr m_pHardwareMgr;
  219. private:
  220. PostLogMessage postlog;
  221. };
  222. typedef std::shared_ptr<CMsrThread> __declspec(dllexport) CMsrThreadPtr;
  223. }