ResetHandler.cpp 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793
  1. #include "stdafx.h"
  2. #include "ResetHandler.h"
  3. #include "IMotionModelManager.h"
  4. #include "IMotionModel.h"
  5. #include "MotionStages.h"
  6. #include "MechnicalMonitor.h"
  7. #include "IPositionManager.h"
  8. #include "IMotionStageArgs.h"
  9. #include "ConfigurerMotion.h"
  10. #include "LogicDeviceManager.h"
  11. #include "LogicDeviceMechTomo.h"
  12. #include "RADMotionStageArgs.h"
  13. #include "ConfigurerWS.h"
  14. using namespace DIOS::Dev::Detail::MachineryECOM;
  15. ResetHandler::ResetHandler()
  16. :m_modelLoaded(FALSE),
  17. m_useTubeHeightLandmarkAD(FALSE),
  18. m_useTubeAngleLandmarkAD(FALSE),
  19. m_useTubeHorizontalLandmarkAD(FALSE),
  20. m_useHandSwitchControlReset(FALSE),
  21. m_isResetting(FALSE),
  22. m_bStopAtLowLimitPos(FALSE),
  23. m_ResetFinishedAxisCount(0),
  24. m_postionManager(nullptr),
  25. m_modelManager(nullptr),
  26. m_bRestWorking(FALSE)
  27. {
  28. }
  29. ResetHandler::~ResetHandler()
  30. {
  31. }
  32. void ResetHandler::OnModelLoaded(IMotionModelManager *modelManager)
  33. {
  34. m_modelManager = modelManager;
  35. }
  36. void ResetHandler::OnCoordinatesLoaded(IPositionManager *coordinates)
  37. {
  38. m_postionManager = coordinates;
  39. }
  40. RET_STATUS ResetHandler::OnSelectExamMode(const char *pExamKey)
  41. {
  42. if (!m_modelLoaded)
  43. {
  44. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnSelectExamMode]->[Enter][{$}]", pExamKey);
  45. auto model = m_modelManager->Resove(MOTION_MODEL_RESET);
  46. if (model)
  47. {
  48. ResDataObject mechparms;
  49. if (ConfigurerMotion::GetMachineryConfigs(mechparms))
  50. {
  51. model->LoadMachineryParams(mechparms);
  52. }
  53. }
  54. m_useTubeHeightLandmarkAD = ConfigurerMotion::GetUseTubeHeightADLandmark();
  55. m_useTubeAngleLandmarkAD = ConfigurerMotion::GetUseTubeAngleADLandmark();
  56. m_useHandSwitchControlReset = ConfigurerMotion::GetUseHandSwitchControlReset();
  57. m_useTubeHorizontalLandmarkAD = ConfigurerMotion::GetUseTubeHorizontalADLandmark();
  58. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][ResetParams]->[{$:d} {$:d} {$:d} {$:d}]", m_useTubeHeightLandmarkAD, m_useTubeAngleLandmarkAD, m_useHandSwitchControlReset, m_useTubeHorizontalLandmarkAD);
  59. m_modelLoaded = TRUE;
  60. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnSelectExamMode]->[Exit]");
  61. }
  62. return RET_STATUS::RET_SUCCEED;
  63. }
  64. RET_STATUS ResetHandler::OnSetTechParamsInfo(ResDataObject &pParam)
  65. {
  66. return RET_STATUS::RET_SUCCEED;
  67. }
  68. void ResetHandler::OnMotionEvent(const std::string &motionEventName)
  69. {
  70. auto model = m_modelManager->Resove(MOTION_MODEL_RESET);
  71. if (!model)
  72. {
  73. return;
  74. }
  75. auto stageArg = model->GetStageArgs();
  76. if (!m_bRestWorking)
  77. {
  78. stageArg->SetTubeAngleMotionStatus(FALSE);
  79. stageArg->SetTubeHeightMotionStatus(FALSE);
  80. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEvent]->[Reset is stopped, return]");
  81. return;
  82. }
  83. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEvent]->[Enter][{$}]", motionEventName.c_str());
  84. if (motionEventName == MONITOR_EVENT_TUBEANGLE_MOVE_STOP)
  85. {
  86. stageArg->SetTubeAngleMotionStatus(FALSE);
  87. OnMotionEventTubeAngleStop();
  88. }
  89. else if (motionEventName == MONITOR_EVENT_TUBEHEIGHT_MOVE_STOP)
  90. {
  91. stageArg->SetTubeHeightMotionStatus(FALSE);
  92. OnMotionEventTubeHeightStop();
  93. }
  94. else if (motionEventName == MONITOR_EVENT_TUBEHORIZONTAL_MOVE_STOP)
  95. {
  96. stageArg->SetTubeHorizontalMotionStatus(FALSE);
  97. OnMotionEventTubeHorizontalStop();
  98. }
  99. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEvent]->[Exit]");
  100. }
  101. void ResetHandler::OnMotionEventTubeAngleStop()
  102. {
  103. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeAngleStop]->[Enter][{$}]", m_currentWaitingTubeAngeStage.c_str());
  104. if (m_currentWaitingTubeAngeStage == RESET_STAGE_TUBE_ANGLE_MOVE_TO_LANDMARK)
  105. {
  106. m_currentWaitingTubeAngeStage = "";
  107. DoOnTubeAngleLandmarkPos();
  108. }
  109. else if (m_currentWaitingTubeAngeStage == RESET_STAGE_TUBE_ANGLE_FINISH_RESET)
  110. {
  111. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeAngleStop]->[Tube Angle Reset Finish]");
  112. m_currentWaitingTubeAngeStage = "";
  113. m_ResetFinishedAxisCount = m_ResetFinishedAxisCount + 1;
  114. OnJudgeResetFinished();
  115. }
  116. }
  117. void ResetHandler::OnMotionEventTubeHeightStop()
  118. {
  119. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHeightStop]->[Enter]");
  120. if (m_currentWaitingTubeHeightStage == RESET_STAGE_TUBE_HEIGHT_MOVE_TO_LANDMARK)
  121. {
  122. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHeightStop]->[On Tube Height Landmark]");
  123. m_currentWaitingTubeHeightStage = "";
  124. DoOnTubHeightLandmarkPos();
  125. }
  126. else if (m_currentWaitingTubeHeightStage == RESET_STAGE_TUBE_HEIGHT_STOP_AT_ZAXIS)
  127. {
  128. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHeightStop]->[On Tube Height Axis Z]");
  129. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_FINISH_RESET);
  130. }
  131. else if (m_currentWaitingTubeHeightStage == RESET_STAGE_TUBE_HEIGHT_FINISH_RESET)
  132. {
  133. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHeightStop]->[Tube Height Reset Finish]");
  134. if (ConfigurerWS::IsDoubleWorkstation())
  135. {
  136. DoTubeAligntoDetector();
  137. }
  138. else
  139. {
  140. m_currentWaitingTubeHeightStage = "";
  141. m_ResetFinishedAxisCount = m_ResetFinishedAxisCount + 1;
  142. OnJudgeResetFinished();
  143. }
  144. }
  145. else if (m_currentWaitingTubeHeightStage == RESET_STAGE_ADJUST_SID_MOVE)
  146. {
  147. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHeightStop]->[Tube Height Move to Default SID Finish]");
  148. if (ConfigurerWS::IsDoubleWorkstation())
  149. {
  150. string ws = ConfigurerWS::GetDefaultWS();
  151. if (ws == WS_WALL)
  152. {
  153. m_currentWaitingTubeHeightStage = "";
  154. m_ResetFinishedAxisCount = m_ResetFinishedAxisCount + 1;
  155. OnJudgeResetFinished();
  156. }
  157. else if (ws == WS_TABLE)
  158. {
  159. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_FINISH_RESET);
  160. }
  161. }
  162. }
  163. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHeightStop]->[Exit]");
  164. }
  165. void ResetHandler::OnJudgeResetFinished()
  166. {
  167. int ResetFinishedAxisCount = 2;
  168. if (ConfigurerWS::IsDoubleWorkstation())
  169. {
  170. ResetFinishedAxisCount = 3;
  171. }
  172. if (m_ResetFinishedAxisCount >= ResetFinishedAxisCount)
  173. {
  174. m_ResetFinishedAxisCount = 0;
  175. MechnicalMonitor::Instance()->EndMonitor();
  176. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnJudgeResetFinished]->[******NotifySystemIsReady******]");
  177. m_isResetting = FALSE;
  178. m_postionManager->NotifySystemIsReady();
  179. auto logicTomo = (LogicDeviceMechTomo*)LogicDeviceManager::Instance()->Resove(LOGICDEVICE_MECH_TOMO);
  180. if (logicTomo)
  181. {
  182. logicTomo->NotifyMachineryReadyState(true);
  183. }
  184. }
  185. }
  186. void ResetHandler::OnMotionEventMotionStoped()
  187. {
  188. }
  189. RET_STATUS ResetHandler::OnStopMech()
  190. {
  191. ChangeMotionModelStage(RESET_STAGE_STOP_MOVE);
  192. return RET_STATUS::RET_SUCCEED;
  193. }
  194. RET_STATUS ResetHandler::OnReset(DOF_MECH mech)
  195. {
  196. m_postionManager->ResetSystem();
  197. DoStartReset();
  198. return RET_STATUS::RET_SUCCEED;
  199. }
  200. RET_STATUS ResetHandler::OnCenterAdjust(DOF_MECH mech)
  201. {
  202. DoTubeAligntoDetector();
  203. return RET_STATUS::RET_SUCCEED;
  204. }
  205. void ResetHandler::OnHandSwitchGearFirstPressed()
  206. {
  207. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnHandSwitchGearFirstPressed]->[Enter]");
  208. if (m_useHandSwitchControlReset)
  209. {
  210. DoStartReset();
  211. }
  212. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnHandSwitchGearFirstPressed]->[Exit]");
  213. }
  214. void ResetHandler::OnHandSwitchGearFirstReleased()
  215. {
  216. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnHandSwitchGearFirstReleased]->[Enter]");
  217. if (m_useHandSwitchControlReset)
  218. {
  219. m_bRestWorking = FALSE;
  220. if (m_isResetting)
  221. {
  222. m_isResetting = FALSE;
  223. }
  224. ChangeMotionModelStage(RESET_STAGE_STOP_MOVE);
  225. }
  226. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnHandSwitchGearFirstReleased]->[Exit]");
  227. }
  228. void ResetHandler::OnTubeAngleLowLimitPos()
  229. {
  230. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleLowLimitPos]->[Enter]");
  231. if (m_isResetting)
  232. {
  233. m_bStopAtLowLimitPos = TRUE;
  234. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_STOP_AT_LANDMARK);
  235. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_GO_OUT_OF_LOW_LANDMARK);
  236. }
  237. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleLowLimitPos]->[Exit]");
  238. }
  239. void ResetHandler::OnTubeAngleHighLimitPos()
  240. {
  241. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleHighLimitPos]->[Enter]");
  242. if (m_isResetting)
  243. {
  244. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_STOP_AT_LANDMARK);
  245. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_GO_OUT_OF_HIGH_LANDMARK);
  246. }
  247. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleHighLimitPos]->[Exit]");
  248. }
  249. void ResetHandler::OnTubeHeightLowLimitPos()
  250. {
  251. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightLowLimitPos]->[Enter]");
  252. if (m_isResetting)
  253. {
  254. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_STOP_AT_LANDMARK);
  255. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_GO_OUT_OF_LOW_LANDMARK);
  256. }
  257. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightLowLimitPos]->[Exit]");
  258. }
  259. void ResetHandler::OnTubeHeightHighLimitPos()
  260. {
  261. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightHighLimitPos]->[Enter]");
  262. if (m_isResetting)
  263. {
  264. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_STOP_AT_LANDMARK);
  265. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_GO_OUT_OF_HIGH_LANDMARK);
  266. }
  267. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightHighLimitPos]->[Exit]");
  268. }
  269. void ResetHandler::OnTubeAngleLeaveLowLimitPos()
  270. {
  271. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleLeaveLowLimitPos]->[Enter]");
  272. if (m_isResetting)
  273. {
  274. if (m_bStopAtLowLimitPos)
  275. {
  276. m_bStopAtLowLimitPos = FALSE;
  277. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_STOP_AT_LANDMARK);
  278. DoOnTubeAngleLandmarkPos();
  279. }
  280. else
  281. {
  282. if(gbusinessLog) gbusinessLog->Warn("[ResetHandler][OnTubeAngleLeaveLowLimitPos]->[Do nothing, never receive stop at low limit pos command]");
  283. }
  284. }
  285. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleLeaveLowLimitPos]->[Exit]");
  286. }
  287. void ResetHandler::OnTubeAngleLeaveHighLimitPos()
  288. {
  289. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleLeaveHighLimitPos]->[Enter]");
  290. if (m_isResetting)
  291. {
  292. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_STOP_AT_LANDMARK);
  293. DoOnTubeAngleLandmarkPos();
  294. }
  295. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleLeaveHighLimitPos]->[Exit]");
  296. }
  297. void ResetHandler::OnTubeHeightLeaveLowLimitPos()
  298. {
  299. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightLeaveLowLimitPos]->[Enter]");
  300. if (m_isResetting)
  301. {
  302. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_STOP_AT_LANDMARK);
  303. DoOnTubHeightLandmarkPos();
  304. }
  305. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightLeaveLowLimitPos]->[Exit]");
  306. }
  307. void ResetHandler::OnTubeHeightLeaveHighLimitPos()
  308. {
  309. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightLeaveLowLimitPos]->[Enter]");
  310. if (m_isResetting)
  311. {
  312. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_STOP_AT_LANDMARK);
  313. }
  314. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightLeaveLowLimitPos]->[Exit]");
  315. }
  316. void ResetHandler::OnTubeAngleEncoderZPos()
  317. {
  318. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleEncoderZPos]->[Enter]");
  319. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_DETACH_ZAXIS);
  320. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_STOP_AT_ZAXIS);
  321. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_FINISH_RESET);
  322. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeAngleEncoderZPos]->[Exit]");
  323. }
  324. void ResetHandler::OnTubeHeightEncoderZPos()
  325. {
  326. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightEncoderZPos]->[Enter]");
  327. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_DETACH_ZAXIS);
  328. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_STOP_AT_ZAXIS);
  329. //ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_FINISH_RESET);
  330. if(gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHeightEncoderZPos]->[Exit]");
  331. }
  332. void ResetHandler::ChangeMotionModelStage(const std::string& stageName)
  333. {
  334. auto model = m_modelManager->Resove(MOTION_MODEL_RESET);
  335. if (model)
  336. {
  337. model->ChangeStage(stageName);
  338. if (stageName == RESET_STAGE_TUBE_ANGLE_FINISH_RESET
  339. || stageName == RESET_STAGE_TUBE_ANGLE_MOVE_TO_LANDMARK
  340. || stageName == RESET_STAGE_TUBE_HEIGHT_FINISH_RESET
  341. || stageName == RESET_STAGE_TUBE_HEIGHT_MOVE_TO_LANDMARK
  342. || stageName == RESET_STAGE_TUBE_HEIGHT_STOP_AT_ZAXIS
  343. || stageName == RESET_STAGE_TUBE_HORIZONTAL_MOVE_TO_LANDMARK
  344. || stageName == RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_ZAXIS
  345. || stageName == RESET_STAGE_TUBE_HORIZONTAL_FINISH_RESET
  346. || stageName == RESET_STAGE_ADJUST_SID_MOVE
  347. )
  348. {
  349. auto stageArgs = model->GetStageArgs();
  350. if (stageName == RESET_STAGE_TUBE_ANGLE_MOVE_TO_LANDMARK || stageName == RESET_STAGE_TUBE_ANGLE_FINISH_RESET)
  351. {
  352. stageArgs->SetTubeAngleMotionStatus(TRUE);
  353. m_currentWaitingTubeAngeStage = stageName;
  354. MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_ANGLE);
  355. }
  356. else if (stageName == RESET_STAGE_TUBE_HEIGHT_MOVE_TO_LANDMARK || stageName == RESET_STAGE_TUBE_HEIGHT_FINISH_RESET
  357. || stageName == RESET_STAGE_TUBE_HEIGHT_STOP_AT_ZAXIS)
  358. {
  359. stageArgs->SetTubeHeightMotionStatus(TRUE);
  360. m_currentWaitingTubeHeightStage = stageName;
  361. MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_HEIGHT);
  362. }
  363. else if (stageName == RESET_STAGE_TUBE_HORIZONTAL_MOVE_TO_LANDMARK || stageName == RESET_STAGE_TUBE_HORIZONTAL_FINISH_RESET
  364. || stageName == RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_ZAXIS)
  365. {
  366. stageArgs->SetTubeHorizontalMotionStatus(TRUE);
  367. m_currentWaitingTubeHorizontalStage = stageName;
  368. MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_HORIZONTAL);
  369. }
  370. else if (stageName == RESET_STAGE_ADJUST_SID_MOVE)
  371. {
  372. stageArgs->SetTubeHeightMotionStatus(TRUE);
  373. m_currentWaitingTubeHeightStage = stageName;
  374. MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_HEIGHT);
  375. stageArgs->SetTubeHorizontalMotionStatus(TRUE);
  376. m_currentWaitingTubeHorizontalStage = stageName;
  377. MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_HORIZONTAL);
  378. }
  379. }
  380. }
  381. }
  382. void ResetHandler::DoOnTubeAngleLandmarkPos()
  383. {
  384. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_ATTACH_ZAXIS);
  385. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_FIND_Z_AXIS);
  386. }
  387. void ResetHandler::DoOnTubHeightLandmarkPos()
  388. {
  389. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_ATTACH_ZAXIS);
  390. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_FIND_Z_AXIS);
  391. }
  392. void ResetHandler::DoStartReset()
  393. {
  394. if (m_isResetting)
  395. {
  396. return;
  397. }
  398. m_bRestWorking = TRUE;
  399. m_isResetting = TRUE;
  400. m_ResetFinishedAxisCount = 0;
  401. auto model = m_modelManager->Resove(MOTION_MODEL_RESET);
  402. auto stageArg = model->GetStageArgs();
  403. ChangeMotionModelStage(RESET_STAGE_CLEAE_PARAMS);
  404. if (m_useTubeHeightLandmarkAD)
  405. {
  406. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_MOVE_TO_LANDMARK);
  407. }
  408. else
  409. {
  410. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_FIND_LANDMARK);
  411. if (stageArg->IsTubeHeightAtResetLandmark)
  412. {
  413. stageArg->IsTubeHeightAtResetLandmark = FALSE;
  414. if (stageArg->ActivedTubeHeightLandmark > 0)
  415. {
  416. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_GO_OUT_OF_HIGH_LANDMARK);
  417. }
  418. else
  419. {
  420. ChangeMotionModelStage(RESET_STAGE_TUBE_HEIGHT_GO_OUT_OF_LOW_LANDMARK);
  421. }
  422. }
  423. }
  424. if (m_useTubeAngleLandmarkAD)
  425. {
  426. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_MOVE_TO_LANDMARK);
  427. }
  428. else
  429. {
  430. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_FIND_LANDMARK);
  431. if (stageArg->IsTubeAngleAtResetLandmark)
  432. {
  433. stageArg->IsTubeAngleAtResetLandmark = FALSE;
  434. if (stageArg->ActivedTubeAngleLandmark > 0)
  435. {
  436. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_GO_OUT_OF_LOW_LANDMARK);
  437. }
  438. else
  439. {
  440. ChangeMotionModelStage(RESET_STAGE_TUBE_ANGLE_GO_OUT_OF_HIGH_LANDMARK);
  441. }
  442. }
  443. }
  444. }
  445. void ResetHandler::OnExit()
  446. {
  447. m_isResetting = FALSE;
  448. ChangeMotionModelStage(RESET_STAGE_STOP_MOVE);
  449. }
  450. BOOL ResetHandler::IsMovingEnable()
  451. {
  452. BOOL bRes = TRUE;
  453. if (m_isResetting)
  454. {
  455. if (gbusinessLog) gbusinessLog->Warn("[ResetHandler][IsMovingEnable]->[Reset is working, single motion is not allowed]");
  456. bRes = FALSE;
  457. }
  458. if (m_bMachineMoving)
  459. {
  460. if (gbusinessLog) gbusinessLog->Warn("[ResetHandler][IsMovingEnable]->[Machine is moving, single motion is not allowed]");
  461. bRes = FALSE;
  462. }
  463. return bRes;
  464. }
  465. RET_STATUS ResetHandler::OnStartMove(DOF_MECH mech, int nOrientation)
  466. {
  467. auto model = m_modelManager->Resove(MOTION_MODEL_RAD);
  468. if (!model)
  469. {
  470. return RET_STATUS::RET_FAILED;
  471. }
  472. if (!IsMovingEnable())
  473. {
  474. return RET_STATUS::RET_FAILED;
  475. }
  476. auto modelArgs = (RADMotionStageArgs*)model->GetStageArgs();
  477. if (mech == TOMO_TUBE_HEIGHT)
  478. {
  479. modelArgs->TubeHeightDirection = nOrientation;
  480. modelArgs->TubeHeightStep = -1;
  481. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnStartMove]->[Enter][TOMO_TUBE_HEIGHT][Org: {$:d}]", modelArgs->TubeHeightDirection);
  482. model->ChangeStage(RAD_STAGE_MOVE_TUBE_HEIGHT);
  483. }
  484. else if (mech == TOMO_TUBE_HORIZONTAL)
  485. {
  486. modelArgs->TubeHorizontalMoveDirection = nOrientation;
  487. modelArgs->TubeHorizontalMoveStep = -1;
  488. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnStartMove]->[Enter][TOMO_TUBE_HORIZONTAL][Org: {$:d}]", modelArgs->TubeHeightDirection);
  489. model->ChangeStage(RAD_STAGE_MOVE_TUBE_HORIZONTAL);
  490. }
  491. else if (mech == TOMO_TUBE_ANGLE)
  492. {
  493. modelArgs->TubeAngleDirection = nOrientation;
  494. modelArgs->TubeAngleStep = -1;
  495. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnStartMove]->[Enter][TOMO_TUBE_ANGLE][Org: {$:d}]", modelArgs->TubeAngleDirection);
  496. model->ChangeStage(RAD_STAGE_MOVE_TUBE_ROTATION);
  497. }
  498. m_bMachineMoving = TRUE;
  499. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnStartMove]->[Leave]");
  500. return RET_STATUS::RET_SUCCEED;
  501. }
  502. RET_STATUS ResetHandler::OnStopMove(DOF_MECH mech)
  503. {
  504. m_bMachineMoving = FALSE;
  505. if (!IsMovingEnable())
  506. {
  507. if (gbusinessLog) gbusinessLog->Warn("[ResetHandler][OnStopMove]->[Single motor motion is not allowed]");
  508. return RET_STATUS::RET_FAILED;
  509. }
  510. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnStopMove]->[Enter]");
  511. auto model = m_modelManager->Resove(MOTION_MODEL_RAD);
  512. if (!model)
  513. {
  514. return RET_STATUS::RET_FAILED;
  515. }
  516. model->ChangeStage(RAD_STAGE_STOP_MOVE);
  517. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnStopMove]->[Leave]");
  518. return RET_STATUS::RET_SUCCEED;
  519. }
  520. void ResetHandler::DoStartTubeHorizontalReset()
  521. {
  522. if (m_isResetting)
  523. {
  524. auto model = m_modelManager->Resove(MOTION_MODEL_RESET);
  525. auto stageArg = model->GetStageArgs();
  526. if (m_useTubeHorizontalLandmarkAD)
  527. {
  528. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_MOVE_TO_LANDMARK);
  529. }
  530. else
  531. {
  532. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_FIND_LANDMARK);
  533. if (stageArg->IsTubeHorizontalAtResetLandmark)
  534. {
  535. stageArg->IsTubeHorizontalAtResetLandmark = FALSE;
  536. if (stageArg->ActivedTubeHorizontalLandmark > 0)
  537. {
  538. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_GO_OUT_OF_LEFT_LANDMARK);
  539. }
  540. else
  541. {
  542. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_GO_OUT_OF_RIGHT_LANDMARK);
  543. }
  544. }
  545. }
  546. }
  547. }
  548. void ResetHandler::DoOnTubeHorizontalLandMarkPos()
  549. {
  550. if (m_isResetting)
  551. {
  552. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_ATTACH_ZAXIS);
  553. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_FIND_Z_AXIS);
  554. }
  555. }
  556. void ResetHandler::OnTubeHorizontalEncoderZPos()
  557. {
  558. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalEncoderZPos]->[Enter]");
  559. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_ZAXIS);
  560. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_DETACH_ZAXIS);
  561. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalEncoderZPos]->[Exit]");
  562. }
  563. void ResetHandler::OnTubeHorizontalLeftLimitPos()
  564. {
  565. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalLeftLimitPos]->[Enter]");
  566. if (m_isResetting)
  567. {
  568. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_LANDMARK);
  569. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_GO_OUT_OF_LEFT_LANDMARK);
  570. }
  571. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalLeftLimitPos]->[Exit]");
  572. }
  573. void ResetHandler::OnTubeHorizontalRightLimitPos()
  574. {
  575. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalRightLimitPos]->[Enter]");
  576. if (m_isResetting)
  577. {
  578. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_LANDMARK);
  579. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_GO_OUT_OF_RIGHT_LANDMARK);
  580. }
  581. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalRightLimitPos]->[Exit]");
  582. }
  583. void ResetHandler::OnTubeHorizontalLeaveLeftLimitPos()
  584. {
  585. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalLeaveLeftLimitPos]->[Enter]");
  586. if (m_isResetting)
  587. {
  588. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_LANDMARK);
  589. DoOnTubeHorizontalLandMarkPos();
  590. }
  591. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalLeaveLeftLimitPos]->[Exit]");
  592. }
  593. void ResetHandler::OnTubeHorizontalLeaveRightLimitPos()
  594. {
  595. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalLeaveRightLimitPos]->[Enter]");
  596. if (m_isResetting)
  597. {
  598. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_LANDMARK);
  599. DoOnTubeHorizontalLandMarkPos();
  600. }
  601. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnTubeHorizontalLeaveRightLimitPos]->[Exit]");
  602. }
  603. void ResetHandler::OnMotionEventTubeHorizontalStop()
  604. {
  605. if (m_isResetting)
  606. {
  607. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHorizontalStop]->[Enter]");
  608. if (m_currentWaitingTubeHorizontalStage == RESET_STAGE_TUBE_HORIZONTAL_MOVE_TO_LANDMARK)
  609. {
  610. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHorizontalStop]->[On Tube HORIZONTAL Landmark]");
  611. m_currentWaitingTubeHorizontalStage = "";
  612. DoOnTubeHorizontalLandMarkPos();
  613. }
  614. else if (m_currentWaitingTubeHorizontalStage == RESET_STAGE_TUBE_HORIZONTAL_STOP_AT_ZAXIS)
  615. {
  616. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHorizontalStop]->[On Tube HORIZONTAL Axis Z]");
  617. ChangeMotionModelStage(RESET_STAGE_TUBE_HORIZONTAL_FINISH_RESET);
  618. }
  619. else if (m_currentWaitingTubeHorizontalStage == RESET_STAGE_TUBE_HORIZONTAL_FINISH_RESET)
  620. {
  621. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHorizontalStop]->[Tube HORIZONTAL Reset Finish]");
  622. if (ConfigurerWS::IsDoubleWorkstation())
  623. {
  624. m_currentWaitingTubeHorizontalStage = "";
  625. m_ResetFinishedAxisCount = m_ResetFinishedAxisCount + 1;
  626. OnJudgeResetFinished();
  627. }
  628. }
  629. else if (m_currentWaitingTubeHorizontalStage == RESET_STAGE_ADJUST_SID_MOVE)
  630. {
  631. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHorizontalStop]->[Tube HORIZONTAL Move to Default SID Finish]");
  632. if (ConfigurerWS::IsDoubleWorkstation())
  633. {
  634. m_currentWaitingTubeHorizontalStage = "";
  635. m_ResetFinishedAxisCount = m_ResetFinishedAxisCount + 1;
  636. OnJudgeResetFinished();
  637. }
  638. }
  639. if (gbusinessLog) gbusinessLog->Info("[ResetHandler][OnMotionEventTubeHorizontalStop]->[Exit]");
  640. }
  641. }
  642. void ResetHandler::DoTubeAligntoDetector()
  643. {
  644. ChangeMotionModelStage(RESET_STAGE_ADJUST_SID_MOVE);
  645. }