#include "stdafx.h" #include "ParkingHandler.h" #include "IMotionModelManager.h" #include "ConfigurerMotion.h" #include "IMotionModel.h" #include "MotionStages.h" #include "MechnicalMonitor.h" #include "ParkingMotionStageArgs.h" #include "WorkFlowManager.h" using namespace DIOS::Dev::Detail::MachineryECOM; ParkingHandler::ParkingHandler() :m_modelLoaded(FALSE), m_modelManager(nullptr) { } ParkingHandler::~ParkingHandler() { } void ParkingHandler::OnModelLoaded(IMotionModelManager *modelManager) { m_modelManager = modelManager; } void ParkingHandler::OnCoordinatesLoaded(IPositionManager *coordinates) { } RET_STATUS ParkingHandler::OnSelectExamMode(const char *pExamKey) { if (!m_modelLoaded) { auto model = m_modelManager->Resove(MOTION_MODEL_PARKING); if (model) { ResDataObject mechparms; if (ConfigurerMotion::GetMachineryConfigs(mechparms)) { model->LoadMachineryParams(mechparms); } } m_modelLoaded = TRUE; } return RET_STATUS::RET_SUCCEED; } RET_STATUS ParkingHandler::OnSetTechParamsInfo(ResDataObject &pParam) { return RET_STATUS::RET_SUCCEED; } void ParkingHandler::OnMotionEvent(const std::string &motionEventName) { auto model = m_modelManager->Resove(MOTION_MODEL_RAD); auto args = model->GetStageArgs(); auto stageName = model->GetStageName(); if (motionEventName == MONITOR_EVENT_TUBEANGLE_MOVE_STOP) { args->SetTubeAngleMotionStatus(FALSE); } else if (motionEventName == MONITOR_EVENT_TUBEHEIGHT_MOVE_STOP) { args->SetTubeHeightMotionStatus(FALSE); } if (args->IsMotionStoped()) { if (stageName == PARKING_STAGE_PARK_TO_HORIZONTAL || stageName == PARKING_STAGE_PARK_TO_VERTICAL || stageName == PARKING_STAGE_PARK_TO_TUBE_ANGLE_LOW_LIMIT || stageName == PARKING_STAGE_PARK_TO_TUBE_HEIGHT_LOW_LIMIT ) { WorkFlowManager::Instance()->ExitParking(); } } } RET_STATUS ParkingHandler::OnStopMech() { ChangeMotionModelStage(PARKING_STAGE_STOP_MOVE); return RET_STATUS::RET_SUCCEED; } RET_STATUS ParkingHandler::OnStartParking(ResDataObject &ParamIn) { if (ParamIn.GetFirstOf("ParkingMode") >= 0) { auto parkingMode = atoi(ParamIn["ParkingMode"]); if (parkingMode == PKM_HORIZONTAL) { ChangeMotionModelStage(PARKING_STAGE_PARK_TO_HORIZONTAL); } else if (parkingMode == PKM_VERTICAL) { ChangeMotionModelStage(PARKING_STAGE_PARK_TO_VERTICAL); } else if (parkingMode == PKM_TUBE_ANGLE_LOW_LIMIT) { ChangeMotionModelStage(PARKING_STAGE_PARK_TO_TUBE_ANGLE_LOW_LIMIT); } else if (parkingMode == PKM_TUBE_HEIGHT_LOW_LIMIT) { ChangeMotionModelStage(PARKING_STAGE_PARK_TO_TUBE_HEIGHT_LOW_LIMIT); } } else { return RET_STATUS::RET_FAILED; } return RET_STATUS::RET_SUCCEED; } void ParkingHandler::ChangeMotionModelStage(const std::string &stageName) { auto model = m_modelManager->Resove(MOTION_MODEL_PARKING); if (model) { model->ChangeStage(stageName); if (stageName == PARKING_STAGE_PARK_TO_HORIZONTAL || stageName == PARKING_STAGE_PARK_TO_VERTICAL || stageName == PARKING_STAGE_PARK_TO_TUBE_ANGLE_LOW_LIMIT || stageName == PARKING_STAGE_PARK_TO_TUBE_HEIGHT_LOW_LIMIT ) { auto stageArgs = model->GetStageArgs(); stageArgs->SetTubeAngleMotionStatus(TRUE); stageArgs->SetTubeHeightMotionStatus(TRUE); MechnicalMonitor::Instance()->BeginMonitor(this); } } }