SelfTestHandler.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "stdafx.h"
  2. #include "SelfTestHandler.h"
  3. #include "IMotionModelManager.h"
  4. #include "IMotionModel.h"
  5. #include "SelfTestMotionStageArgs.h"
  6. #include "MotionStages.h"
  7. #include "MechnicalMonitor.h"
  8. using namespace DIOS::Dev::Detail::MachineryECOM;
  9. SelfTestHandler::SelfTestHandler() :m_modelManager(nullptr)
  10. {
  11. }
  12. SelfTestHandler::~SelfTestHandler()
  13. {
  14. }
  15. void SelfTestHandler::OnModelLoaded(IMotionModelManager *modelManager)
  16. {
  17. m_modelManager = modelManager;
  18. }
  19. void SelfTestHandler::OnCoordinatesLoaded(IPositionManager *coordinates)
  20. {
  21. }
  22. RET_STATUS SelfTestHandler::OnSelectExamMode(const char *pExamKey)
  23. {
  24. return RET_STATUS::RET_SUCCEED;
  25. }
  26. RET_STATUS SelfTestHandler::OnSetTechParamsInfo(ResDataObject &pParam)
  27. {
  28. return RET_STATUS::RET_SUCCEED;
  29. }
  30. void SelfTestHandler::OnMotionEvent(const std::string &motionEventName)
  31. {
  32. auto model = m_modelManager->Resove(MOTION_MODEL_SELFTEST);
  33. if (!model)
  34. {
  35. return;
  36. }
  37. auto stageArg = model->GetStageArgs();
  38. if (motionEventName == MONITOR_EVENT_TUBEANGLE_MOVE_STOP)
  39. {
  40. stageArg->SetTubeAngleMotionStatus(FALSE);
  41. MechnicalMonitor::Instance()->EndMonitor();
  42. ChangeSelfTestNextStage(MO_TUBE_ANGLE);
  43. }
  44. else if (motionEventName == MONITOR_EVENT_TUBEHEIGHT_MOVE_STOP)
  45. {
  46. stageArg->SetTubeHeightMotionStatus(FALSE);
  47. MechnicalMonitor::Instance()->EndMonitor();
  48. ChangeSelfTestNextStage(MO_TUBE_HEIGHT);
  49. }
  50. }
  51. RET_STATUS SelfTestHandler::OnStopMech()
  52. {
  53. auto model = m_modelManager->Resove(MOTION_MODEL_SELFTEST);
  54. model->ChangeStage(SELFTEST_STAGE_END_AUTO_SELFTEST);
  55. auto stageArgs = (SelfTestMotionStageArgs*)model->GetStageArgs();
  56. stageArgs->CurrentRepeat = stageArgs->RepeatTime;
  57. return RET_STATUS::RET_SUCCEED;
  58. }
  59. void SelfTestHandler::OnStartSelfTest(ResDataObject &pParam)
  60. {
  61. if (pParam.GetFirstOf("DOF") < 0
  62. || pParam.GetFirstOf("HighLimit") < 0
  63. || pParam.GetFirstOf("LowLimit") < 0
  64. || pParam.GetFirstOf("Period") < 0
  65. || pParam.GetFirstOf("DutyCycle") < 0
  66. || pParam.GetFirstOf("RepeatTime") < 0)
  67. {
  68. return;
  69. }
  70. if (m_modelManager == nullptr)
  71. {
  72. return;
  73. }
  74. auto model = m_modelManager->Resove(MOTION_MODEL_SELFTEST);
  75. auto stageArgs = (SelfTestMotionStageArgs*)model->GetStageArgs();
  76. stageArgs->DOF = atoi(pParam["DOF"]);
  77. stageArgs->HighLimit = (float)atof(pParam["HighLimit"]);
  78. stageArgs->LowLimit = (float)atof(pParam["LowLimit"]);
  79. stageArgs->Period = atoi(pParam["Period"]);
  80. stageArgs->DutyCycle = (float)atof(pParam["DutyCycle"]);
  81. stageArgs->RepeatTime = atoi(pParam["RepeatTime"]);
  82. stageArgs->CurrentRepeat = 0;
  83. if(gbusinessLog) gbusinessLog->Info("[SelfTestHandler][OnStartSelfTest]->[DOF:{$:d},H:{$:f3},L:{$:f3},P:{$:d},D:{$:f3},Rept:{$:d}]",
  84. stageArgs->DOF, stageArgs->HighLimit, stageArgs->LowLimit, stageArgs->Period, stageArgs->DutyCycle, stageArgs->RepeatTime);
  85. auto offfset = -1;
  86. if (stageArgs->DOF == 0)
  87. {
  88. offfset = MO_TUBE_ANGLE;
  89. }
  90. else if (stageArgs->DOF == 1)
  91. {
  92. offfset = MO_TUBE_HEIGHT;
  93. }
  94. if (offfset == -1)
  95. {
  96. return;
  97. }
  98. model->ChangeStage(SELFTEST_STAGE_START_AUTO_SELFTEST);
  99. MechnicalMonitor::Instance()->BeginMonitor(this, offfset);
  100. }
  101. void SelfTestHandler::ChangeSelfTestNextStage(int dof)
  102. {
  103. auto model = m_modelManager->Resove(MOTION_MODEL_SELFTEST);
  104. auto stageArgs = (SelfTestMotionStageArgs*)model->GetStageArgs();
  105. stageArgs->CurrentRepeat++;
  106. if (stageArgs->CurrentRepeat >= stageArgs->RepeatTime)
  107. {
  108. return;
  109. }
  110. if (dof == MO_TUBE_ANGLE)
  111. {
  112. if (stageArgs->CurrentRepeat % 2 != 0)
  113. {//High->Low
  114. model->ChangeStage(SELFTEST_STAGE_TUBE_ANGLE_ROTATETO_TARGET);
  115. }
  116. else
  117. {//Low->High
  118. model->ChangeStage(SELFTEST_STAGE_TUBE_ANGLE_ROTATE_BACK);
  119. }
  120. MechnicalMonitor::Instance()->BeginMonitor(this, dof);
  121. }
  122. else if (dof == MO_TUBE_HEIGHT)
  123. {
  124. if (stageArgs->CurrentRepeat % 2 != 0)
  125. {//High->Low
  126. model->ChangeStage(SELFTEST_STAGE_TUBE_HEIGHT_MOVETO_TARGET);
  127. }
  128. else
  129. {//Low->High
  130. model->ChangeStage(SELFTEST_STAGE_TUBE_HEIGHT_MOVE_BACK);
  131. }
  132. MechnicalMonitor::Instance()->BeginMonitor(this, dof);
  133. }
  134. }
  135. RET_STATUS SelfTestHandler::OnStartMove(DOF_MECH mech, int nOrientation)
  136. {
  137. return RET_STATUS::RET_SUCCEED;
  138. }
  139. RET_STATUS SelfTestHandler::OnStopMove(DOF_MECH mech)
  140. {
  141. return RET_STATUS::RET_SUCCEED;
  142. }