#include "stdafx.h" #include "GeneralExamHandler.h" #include "ConfigurerMotion.h" #include "IMotionModelManager.h" #include "IPositionManager.h" #include "IMotionModel.h" #include "CArmGeneralMotionStageArgs.h" #include "MotionStages.h" using namespace DIOS::Dev::Detail::MachineryECOM; GeneralExamHandler::GeneralExamHandler(): m_modelLoaded(FALSE), m_modelManager(nullptr), m_positionManager(nullptr) { } GeneralExamHandler::~GeneralExamHandler() { } void GeneralExamHandler::OnModelLoaded(IMotionModelManager *modelManager) { m_modelManager = modelManager; } void GeneralExamHandler::OnCoordinatesLoaded(IPositionManager *coordinates) { m_positionManager = coordinates; } RET_STATUS GeneralExamHandler::OnSelectExamMode(const char *pExamKey) { if (!m_modelLoaded) { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (model) { ResDataObject mechparms; if (ConfigurerMotion::GetMachineryConfigs(mechparms)) { model->LoadMachineryParams(mechparms); } } m_modelLoaded = TRUE; } return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnSetTechParamsInfo(ResDataObject& pParam) { return RET_STATUS::RET_SUCCEED; } void GeneralExamHandler::OnMotionEvent(const std::string &motionEventName) { } RET_STATUS GeneralExamHandler::OnStopMech() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_SUCCEED; } model->ChangeStage(CARM_GENERAL_STOP_MECH_MOVING); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnTubeSwing(ResDataObject& ParamIn) { int direction = 1; int steps = 0; auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } auto modelArgs = (CArmGeneralMotionStageArgs *)model->GetStageArgs(); if (ParamIn.GetFirstOf("Orientation") >= 0 && ParamIn.GetFirstOf("StepNumber") >= 0) { auto positive = ConfigurerMotion::GetTubeRotateAxisPositiveDirection() > 0 ? 1 : -1; auto ori = atoi(ParamIn["Orientation"]) > 0 ? positive : (-1 * positive); modelArgs->TubeSwingDirection = ori; if (ParamIn.GetFirstOf("AsPhysical") >= 0) { modelArgs->TubeSwingPhysical = (float)atof(ParamIn["StepNumber"]); model->ChangeStage(CARM_GENERAL_MOVE_TUBE_SWING_AS_PHYSICAL); } else { modelArgs->TubeSwingStep = atoi(ParamIn["StepNumber"]); model->ChangeStage(CARM_GENERAL_MOVE_TUBE_SWING); } } return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnTubeCircular(ResDataObject& ParamIn) { int direction = 1; int steps = 0; auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } auto modelArgs = (CArmGeneralMotionStageArgs *)model->GetStageArgs(); if (ParamIn.GetFirstOf("Orientation") >= 0 && ParamIn.GetFirstOf("StepNumber") >= 0) { auto positive = ConfigurerMotion::GetTubeHeightAxisPositiveDirection() > 0 ? 1 : -1; auto ori = atoi(ParamIn["Orientation"]) > 0 ? positive : (-1 * positive); modelArgs->TubeCircularMoveDirection = ori; if (ParamIn.GetFirstOf("AsPhysical") >= 0) { modelArgs->TubeCircularMovePhysical = (float)atof(ParamIn["StepNumber"]); model->ChangeStage(CARM_GENERAL_MOVE_TUBE_CIRCULAR_AS_PHYSICAL); } else { modelArgs->TubeCircularMoveStep = atoi(ParamIn["StepNumber"]); model->ChangeStage(CARM_GENERAL_MOVE_TUBE_CIRCULAR); } } return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnGetTubeCircularEncoder(ResDataObject& Paramout) { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_GET_TUBE_CIRCULAR_ENCODER); auto modelArgs = (CArmGeneralMotionStageArgs *)model->GetStageArgs(); Paramout.add("EncoderTubeHeight", modelArgs->TubeCircularEncoder); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnGetTubeSwingEncoder(ResDataObject& Paramout) { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_GET_TUBE_SWING_ENCODER); auto modelArgs = (CArmGeneralMotionStageArgs *)model->GetStageArgs(); Paramout.add("EncoderTubeAngle", modelArgs->TubeSwingEncoder); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnActiveTubeSwingZAxis() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_ACTIVE_TUBE_SWING_Z_AXIS); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnCancleTubeSwingZAxis() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_CANCLE_TUBE_SWING_Z_AXIS); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnActiveTubeCircularZAxis() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_ACTIVE_TUBE_CIRCULAR_Z_AXIS); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnCancleTubeCircularZAxis() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_CANCLE_TUBE_CIRCULAR_Z_AXIS); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnStartMove(DOF_MECH mech, int nOrientation) { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } auto modelArgs = (CArmGeneralMotionStageArgs *)model->GetStageArgs(); if (mech == TOMO_TUBE_HEIGHT) { modelArgs->TubeCircularMoveDirection = nOrientation; modelArgs->TubeCircularMoveStep = -1; if(gbusinessLog) gbusinessLog->Info("[GeneralExamHandler][OnStartMove]->[Enter][TOMO_TUBE_HEIGHT][Org: {$:d}]", modelArgs->TubeSwingDirection); model->ChangeStage(CARM_GENERAL_MOVE_TUBE_CIRCULAR); } else if (mech == TOMO_TUBE_ANGLE) { modelArgs->TubeSwingDirection = nOrientation; modelArgs->TubeSwingStep = -1; if(gbusinessLog) gbusinessLog->Info("[GeneralExamHandler][OnStartMove]->[Enter][TOMO_TUBE_ANGLE][Org: {$:d}]", modelArgs->TubeSwingDirection); model->ChangeStage(CARM_GENERAL_MOVE_TUBE_SWING); } if(gbusinessLog) gbusinessLog->Info("[GeneralExamHandler][OnStartMove]->[Leave]"); return RET_STATUS::RET_SUCCEED; } RET_STATUS GeneralExamHandler::OnStopMove(DOF_MECH mech) { if(gbusinessLog) gbusinessLog->Info("[GeneralExamHandler][OnStopMove]->[Enter]"); auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return RET_STATUS::RET_FAILED; } model->ChangeStage(CARM_GENERAL_STOP_MECH_MOVING); if(gbusinessLog) gbusinessLog->Info("[GeneralExamHandler][OnStopMove]->[Leave]"); return RET_STATUS::RET_SUCCEED; } void GeneralExamHandler::OnHandSwitchGearFirstPressed() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return ; } model->ChangeStage(CARM_GENERAL_START_EXPOSURE); } void GeneralExamHandler::OnHandSwitchGearFirstReleased() { auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL); if (!model) { return ; } model->ChangeStage(CARM_GENERAL_STOP_EXPOSURE); }