123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 |
- #include "stdafx.h"
- #include "CArmResetHandler.h"
- #include "IPositionManager.h"
- #include "IMotionModelManager.h"
- #include "ConfigurerMotion.h"
- #include "IMotionModel.h"
- #include "MotionStages.h"
- #include "ResetMotionStageArgs.h"
- #include "MechnicalMonitor.h"
- #include "LogicDeviceManager.h"
- #include "LogicDeviceMechCarm.h"
- #include "CArmComponentNameDef.h"
- #include "CArmGeneralMotionStageArgs.h"
- using namespace DIOS::Dev::Detail::MachineryECOM;
- CArmResetHandler::CArmResetHandler() :
- m_modelLoaded(FALSE),
- m_useHandSwitchControlReset(FALSE),
- m_isResetting(FALSE),
- m_isResettingSwing(FALSE),
- m_isResettingCircular(FALSE),
- m_postionManager(nullptr),
- m_modelManager(nullptr),
- m_MechReset(TOMO_TUBE_HEIGHT)
- {
- }
- CArmResetHandler::~CArmResetHandler()
- {
- }
- void CArmResetHandler::OnModelLoaded(IMotionModelManager *modelManager)
- {
- m_modelManager = modelManager;
- }
- void CArmResetHandler::OnCoordinatesLoaded(IPositionManager *coordinates)
- {
- m_postionManager = coordinates;
- }
- RET_STATUS CArmResetHandler::OnReset(DOF_MECH mech)
- {
- DOF_MECH mechtemp = mech;
- if (mech == MECH_ALL)
- {
- mechtemp = m_MechReset;
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnReset]->[Set reset value {$:d}]", mechtemp);
- }
- if (mechtemp == TOMO_TUBE_ANGLE)
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnReset]->[Enter][CARM_TUBE_SWING]");
- m_postionManager->ResetSystem(CONTROLLER_CARM_TUBE_SWING);
- DoStartSwingReset();
- }
- else if (mechtemp == TOMO_TUBE_HEIGHT)
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnReset]->[Enter][CARM_TUBE_CIRCULAR]");
- m_postionManager->ResetSystem(CONTROLLER_CARM_TUBE_CIRCULAR);
- DoStartCircularReset();
- }
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnReset]->[Leave]");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CArmResetHandler::OnCenterAdjust(DOF_MECH mech)
- {
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CArmResetHandler::OnSelectExamMode(const char *pExamKey)
- {
- if (!m_modelLoaded)
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnSelectExamMode]->[Enter][{$}]", pExamKey);
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- if (model)
- {
- ResDataObject mechparms;
- if (ConfigurerMotion::GetMachineryConfigs(mechparms))
- {
- model->LoadMachineryParams(mechparms);
- }
- }
- m_useHandSwitchControlReset = ConfigurerMotion::GetUseHandSwitchControlReset();
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][ResetParams]->[{$:d}]",m_useHandSwitchControlReset);
- m_modelLoaded = TRUE;
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnSelectExamMode]->[Exit]");
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CArmResetHandler::OnSetTechParamsInfo(ResDataObject& pParam)
- {
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CArmResetHandler::OnStopMech()
- {
- ChangeMotionModelStage(RESET_STAGE_STOP_MOVE);
- m_isResetting = FALSE;
- m_isResettingCircular = FALSE;
- m_isResettingSwing = FALSE;
- return RET_STATUS::RET_SUCCEED;
- }
- void CArmResetHandler::OnMotionEvent(const std::string &motionEventName)
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnMotionEvent]->[Enter][{$}]", motionEventName.c_str());
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- if (!model)
- {
- return;
- }
- auto stageArg = model->GetStageArgs();
- if (motionEventName == MONITOR_EVENT_TUBEANGLE_MOVE_STOP)
- {
- stageArg->SetTubeAngleMotionStatus(FALSE);
- OnMotionEventTubeSwingStop();
- }
- else if (motionEventName == MONITOR_EVENT_TUBEHEIGHT_MOVE_STOP)
- {
- stageArg->SetTubeHeightMotionStatus(FALSE);
- OnMotionEventTubeCircularStop();
- }
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnMotionEvent]->[Exit]");
- }
- void CArmResetHandler::OnHandSwitchGearFirstPressed()
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnHandSwitchGearFirstPressed]->[Enter]");
- //if (m_useHandSwitchControlReset)
- //{
- // DoStartReset();
- //}
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- if (!model)
- {
- return;
- }
- model->ChangeStage(CARM_RESET_START_EXPOSURE);
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnHandSwitchGearFirstPressed]->[Exit]");
- }
- void CArmResetHandler::OnHandSwitchGearFirstReleased()
- {
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- if (!model)
- {
- return;
- }
- model->ChangeStage(CARM_RESET_STOP_EXPOSURE);
- //auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- //if (model && model->GetStageName() == CARM_RESET_TUBE_CIRCULAR_FINISHRESET)
- //{
- // m_isResetting = FALSE;
- // m_isResettingSwing = FALSE;
- // m_isResettingCircular = FALSE;
- // m_postionManager->NotifySystemIsReady();
- // auto logicDevice = (LogicDeviceMechCarm*)LogicDeviceManager::Instance()->Resove(LOGICDEVICE_MECH_CARM);
- // if (logicDevice)
- // {
- // logicDevice->NotifyMachineryReadyState(true);
- // }
- // if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler]->[NotifySystemIsReady]");
- //}
- //if (m_useHandSwitchControlReset)
- //{
- // ChangeMotionModelStage(RESET_STAGE_STOP_MOVE);
- //}
- }
- void CArmResetHandler::OnTubeAngleLowLimitPos()
- {
- }
- void CArmResetHandler::OnTubeAngleHighLimitPos()
- {
- }
- void CArmResetHandler::OnTubeHeightLowLimitPos()
- {
- }
- void CArmResetHandler::OnTubeHeightHighLimitPos()
- {
- }
- void CArmResetHandler::OnTubeAngleLeaveLowLimitPos()
- {
- if (m_isResettingSwing)
- {
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_DETACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_STOP_AT_LANDMARK);
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_FINISHRESET);
- }
- }
- void CArmResetHandler::OnTubeAngleLeaveHighLimitPos()
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler]->[OnTubeAngleLeaveHighLimitPos][Enter][m_isResettingSwing = {$:d}, m_isResetting = {$:d}]", m_isResettingSwing, m_isResetting);
- if (m_isResettingSwing)
- {
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_DETACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_STOP_AT_LANDMARK);
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_FINISHRESET);
- }
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler]->[OnTubeAngleLeaveHighLimitPos][Leave]");
- }
- void CArmResetHandler::OnTubeHeightLeaveLowLimitPos()
- {
- if (m_isResettingCircular)
- {
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_DETACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_STOP_AT_LANDMARK);
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_FINISHRESET);
- }
- }
- void CArmResetHandler::OnTubeHeightLeaveHighLimitPos()
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler]->[OnTubeHeightLeaveHighLimitPos][Enter][m_isResettingCircular = {$:d}, m_isResetting = {$:d}]", m_isResettingCircular, m_isResetting);
- if (m_isResettingCircular)
- {
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_DETACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_STOP_AT_LANDMARK);
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_FINISHRESET);
- }
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler]->[OnTubeHeightLeaveHighLimitPos][Leave]");
- }
- void CArmResetHandler::OnTubeAngleEncoderZPos()
- {
- }
- void CArmResetHandler::OnTubeHeightEncoderZPos()
- {
- }
- void CArmResetHandler::OnExit()
- {
- }
- void CArmResetHandler::DoStartReset()
- {
- if (m_isResetting)
- {
- return;
- }
- m_isResetting = TRUE;
- StartSwingAxisReset();
- }
- void CArmResetHandler::DoStartSwingReset()
- {
- if (m_isResetting)
- {
- return;
- }
- m_isResetting = TRUE;
- m_isResettingSwing = TRUE;
- StartSwingAxisReset();
- }
- void CArmResetHandler::DoStartCircularReset()
- {
- if (m_isResetting)
- {
- return;
- }
- m_isResetting = TRUE;
- m_isResettingCircular = TRUE;
- StartCircularAxisReset();
- }
- void CArmResetHandler::ChangeMotionModelStage(const std::string &stageName)
- {
- if (m_isResetting)
- {
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- if (model)
- {
- model->ChangeStage(stageName);
- if (stageName == CARM_RESET_TUBE_SWING_FINISHRESET)
- {
- auto stageArgs = model->GetStageArgs();
- stageArgs->SetTubeAngleMotionStatus(TRUE);
- MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_ANGLE);
- }
- else if (stageName == CARM_RESET_TUBE_CIRCULAR_FINISHRESET)
- {
- auto stageArgs = model->GetStageArgs();
- stageArgs->SetTubeHeightMotionStatus(TRUE);
- MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_HEIGHT);
- }
- }
- }
- }
- void CArmResetHandler::StartSwingAxisReset()
- {
- if (m_isResettingSwing)
- {
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_ATTACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_FIND_LANDMARK);
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- auto stageArg = model->GetStageArgs();
- if (stageArg->IsTubeAngleAtResetLandmark)
- {
- stageArg->IsTubeAngleAtResetLandmark = FALSE;
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_DETACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_SWING_FINISHRESET);
- }
- }
- }
- void CArmResetHandler::OnMotionEventTubeSwingStop()
- {
- if (m_isResettingSwing)
- {
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- auto stageArg = model->GetStageArgs();
- if (model->GetStageName() == CARM_RESET_TUBE_SWING_FINISHRESET)
- {
- m_isResetting = FALSE;
- m_isResettingSwing = FALSE;
- MechnicalMonitor::Instance()->EndMonitor();
- m_postionManager->NotifySystemIsReady(CONTROLLER_CARM_TUBE_SWING);
- }
- }
- }
- void CArmResetHandler::OnMotionEventTubeCircularStop()
- {
- if (m_isResettingCircular)
- {
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- auto stageArg = model->GetStageArgs();
- if (model->GetStageName() == CARM_RESET_TUBE_CIRCULAR_FINISHRESET)
- {
- m_isResetting = FALSE;
- m_isResettingCircular = FALSE;
- MechnicalMonitor::Instance()->EndMonitor();
- m_postionManager->NotifySystemIsReady(CONTROLLER_CARM_TUBE_CIRCULAR);
- }
- }
- }
- void CArmResetHandler::StartCircularAxisReset()
- {
- if (m_isResettingCircular)
- {
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_ATTACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_FIND_LANDMARK);
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_RESTE);
- auto stageArg = model->GetStageArgs();
- if (stageArg->IsTubeHeightAtResetLandmark)
- {
- stageArg->IsTubeHeightAtResetLandmark = FALSE;
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_DETACH_Z_AXIS);
- ChangeMotionModelStage(CARM_RESET_TUBE_CIRCULAR_FINISHRESET);
- }
- }
- }
- RET_STATUS CArmResetHandler::OnStartMove(DOF_MECH mech, int nOrientation)
- {
- auto model = m_modelManager->Resove(MOTION_MODLE_CARM_GENERAL);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- if (!IsMovingEnable())
- {
- 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("[CArmResetHandler][OnStartMove]->[Enter][TOMO_TUBE_CIRCULAR][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("[CArmResetHandler][OnStartMove]->[Enter][TOMO_TUBE_ANGLE][Org: {$:d}]", modelArgs->TubeSwingDirection);
- model->ChangeStage(CARM_GENERAL_MOVE_TUBE_SWING);
- }
- m_bMachineMoving = TRUE;
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnStartMove]->[Leave]");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CArmResetHandler::OnStopMove(DOF_MECH mech)
- {
- m_bMachineMoving = FALSE;
- if (!IsMovingEnable())
- {
- return RET_STATUS::RET_FAILED;
- }
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][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("[CArmResetHandler][OnStopMove]->[Leave]");
- return RET_STATUS::RET_SUCCEED;
- }
- BOOL CArmResetHandler::IsMovingEnable()
- {
- BOOL bRes = TRUE;
- if (m_isResetting)
- {
- if(gbusinessLog) gbusinessLog->Warn("[CArmResetHandler][IsMovingEnable]->[Reset is working, single motion is not allowed]");
- bRes = FALSE;
- }
- if (m_bMachineMoving)
- {
- if(gbusinessLog) gbusinessLog->Warn("[CArmResetHandler][IsMovingEnable]->[Machine is moving, single motion is not allowed]");
- bRes = FALSE;
- }
- return bRes;
- }
- RET_STATUS CArmResetHandler::OnScanningSwitch(DOF_MECH mech)
- {
- m_MechReset = mech;
- if (m_MechReset == TOMO_TUBE_HEIGHT)
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnScanningSwitch]->[Using circular for scanning]");
- }
- else if (m_MechReset == TOMO_TUBE_ANGLE)
- {
- if(gbusinessLog) gbusinessLog->Info("[CArmResetHandler][OnScanningSwitch]->[Using swing for scanning]");
- }
- return RET_STATUS::RET_SUCCEED;
- }
|