123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860 |
- #include "stdafx.h"
- #include "CalibrationHandler.h"
- #include "IMotionModel.h"
- #include "IMotionModelManager.h"
- #include "CalibrationStageArgs.h"
- #include "MotionStages.h"
- #include "ConfigurerMotion.h"
- #include "ConfigurerCalibration.h"
- #include "MechnicalMonitor.h"
- #include "RADMotionStageArgs.h"
- using namespace DIOS::Dev::Detail::MachineryECOM;
- static bool LeastSquare(const vector<float>& x, const vector<float>& y, float &a, float &b)//最小二乘法公式
- {
- bool bRes = false;
- if (x.size() > 0 && x.size() == y.size())
- {
- float t1 = 0, t2 = 0, t3 = 0, t4 = 0;
- for (int i = 0; i < x.size(); ++i)
- {
- t1 += x[i] * x[i];
- t2 += x[i];
- t3 += x[i] * y[i];
- t4 += y[i];
- }
- a = (t3 * x.size() - t2 * t4) / (t1 * x.size() - t2 * t2);
- b = (t1 * t4 - t2 * t3) / (t1 * x.size() - t2 * t2);
- bRes = true;
- }
- if(gbusinessLog) gbusinessLog->Info("[CalibrationHandler][LeastSquare]->[{$:f9} , {$:f9}]", a, b);
- return bRes;
- }
- CalibrationHandler::CalibrationHandler()
- :m_modelLoaded(FALSE),
- m_modelManager(nullptr)
- {
- }
- CalibrationHandler::~CalibrationHandler()
- {
- }
- void CalibrationHandler::OnModelLoaded(IMotionModelManager *modelManager)
- {
- m_modelManager = modelManager;
- }
- void CalibrationHandler::OnCoordinatesLoaded(IPositionManager *coordinates)
- {
- }
- RET_STATUS CalibrationHandler::OnSelectExamMode(const char *pExamKey)
- {
- if (!m_modelLoaded)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (model)
- {
- ResDataObject mechparms;
- if (ConfigurerMotion::GetMachineryConfigs(mechparms))
- {
- model->LoadMachineryParams(mechparms);
- }
- }
- m_modelLoaded = TRUE;
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSetTechParamsInfo(ResDataObject &pParam)
- {
- return RET_STATUS::RET_SUCCEED;
- }
- void CalibrationHandler::OnMotionEvent(const std::string &motionEventName)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_RESET);
- if (!model)
- {
- return;
- }
- auto stageArg = model->GetStageArgs();
- if (motionEventName == MONITOR_EVENT_TUBEANGLE_MOVE_STOP)
- {
- stageArg->SetTubeAngleMotionStatus(FALSE);
- MechnicalMonitor::Instance()->EndMonitor();
- ChangeAutoCalibrationADToNextStage(MO_TUBE_ANGLE);
- }
- else if (motionEventName == MONITOR_EVENT_TUBEHEIGHT_MOVE_STOP)
- {
- stageArg->SetTubeHeightMotionStatus(FALSE);
- MechnicalMonitor::Instance()->EndMonitor();
- ChangeAutoCalibrationADToNextStage(MO_TUBE_HEIGHT);
- }
- }
- RET_STATUS CalibrationHandler::OnStopMech()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (model)
- {
- model->ChangeStage(CALIBRATION_STOP_TUBE_HEIGHT_AT_ZAXIS);
- model->ChangeStage(CALIBRATION_STOP_TUBE_ANGLE_AT_ZAXIS);
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnMoveTubeHeight(ResDataObject &ParamIn)
- {
- int direction = 1;
- int steps = 0;
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- auto modelArgs = (CalibrationStageArgs *)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->TubeHeightMoveDirection = ori;
- if (ParamIn.GetFirstOf("AsPhysical") >= 0)
- {
- modelArgs->TubeHeightMovePhysical = (float)atof(ParamIn["StepNumber"]);
- model->ChangeStage(CALIBRATION_MOVE_TUBE_HEIGHT_AS_PHYSICAL);
- }
- else
- {
- modelArgs->TubeHeightMoveStep = atoi(ParamIn["StepNumber"]);
- model->ChangeStage(CALIBRATION_MOVE_TUBE_HEIGHT);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnRotateTubeAngle(ResDataObject &ParamIn)
- {
- int direction = 1;
- int steps = 0;
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- auto modelArgs = (CalibrationStageArgs *)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->TubeAngleRotateDirection = ori;
- if (ParamIn.GetFirstOf("AsPhysical") >= 0)
- {
- modelArgs->TubeAngleRotatePhysical = (float)atof(ParamIn["StepNumber"]);
- model->ChangeStage(CALIBRATION_ROTATE_TUBE_ANGLE_AS_PHYSICAL);
- }
- else
- {
- modelArgs->TubeAngleRotateStep = atoi(ParamIn["StepNumber"]);
- model->ChangeStage(CALIBRATION_ROTATE_TUBE_ANGLE);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetTubeHeightAD(ResDataObject &ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_TUBE_HEIGHT_AD);
- auto modelArgs = (CalibrationStageArgs *)model->GetStageArgs();
- ParamOut.add("ADTubeHeight", modelArgs->TubeHeightAD);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetTubeAngleAD(ResDataObject &ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_TUBE_ANGLE_AD);
- auto modelArgs = (CalibrationStageArgs *)model->GetStageArgs();
- ParamOut.add("ADTubeAngle", modelArgs->TubeAngleAD);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetDetectorHeightAD(ResDataObject &ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_DETECTOR_HEIGHT_AD);
- auto modelArgs = (CalibrationStageArgs *)model->GetStageArgs();
- ParamOut.add("ADDetectorHeight", modelArgs->DetectorHeightAD);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetTubeHeightEncoder(ResDataObject &ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_TUBE_HEIGHT_ENCODER);
- auto modelArgs = (CalibrationStageArgs *)model->GetStageArgs();
- ParamOut.add("EncoderTubeHeight", modelArgs->TubeHeightEncoder);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetTubeAngleEncoder(ResDataObject &ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_TUBE_ANGLE_ENCODER);
- auto modelArgs = (CalibrationStageArgs *)model->GetStageArgs();
- ParamOut.add("EncoderTubeAngle", modelArgs->TubeAngleEncoder);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetDetectorHeightEncoder(ResDataObject &ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_DETECTOR_HEIGHT_ENCODER);
- auto modelArgs = (CalibrationStageArgs *)model->GetStageArgs();
- ParamOut.add("EncoderDetectorHeight", modelArgs->DetectorHeightEncoder);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnActiveTubeAngleZAxisClear()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_ACTIVE_TUBE_ANGLE_ZAXIS_CLEAR);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnCancleTubeAngleZAxisClear()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_CANCEL_TUBE_ANGLE_ZAXIS_CLEAR);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnActiveTubeHeightZAxisClear()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_ACTIVE_TUBE_HEIGHT_ZAXIS_CLEAR);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnCancelTubeHeightZAxisClear()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_CANCEL_TUBE_HEIGHT_ZAXIS_CLEAR);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnTubeAngleRotateToZAxis()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_ROTATE_TUBE_ANGLE_TO_ZAXIS);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnTubeHeightMoveToZAxis()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_MVOE_TUBE_HEIGHT_TO_ZAXIS);
- return RET_STATUS::RET_SUCCEED;
- }
- void CalibrationHandler::OnTubeAngleEncoderZPos()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (model)
- {
- model->ChangeStage(CALIBRATION_STOP_TUBE_ANGLE_AT_ZAXIS);
- }
- }
- void CalibrationHandler::OnTubeHeightEncoderZPos()
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (model)
- {
- model->ChangeStage(CALIBRATION_STOP_TUBE_HEIGHT_AT_ZAXIS);
- }
- }
- RET_STATUS CalibrationHandler::OnSwitchSvoStatus(ResDataObject &ParamIn)
- {
- if (ParamIn.GetFirstOf("DOF") < 0 || ParamIn.GetFirstOf("SvoStatus") < 0)
- {
- return RET_STATUS::RET_FAILED;
- }
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- auto stageArgs = (CalibrationStageArgs*)model->GetStageArgs();
- stageArgs->SvoStatus = atoi((const char*)ParamIn["SvoStatus"]);
- stageArgs->AutoCalADDof = atoi((const char *)ParamIn["DOF"]);
- model->ChangeStage(CALIBRATION_SWITCH_SVO_STATUS);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnAutoCalibrationAD(ResDataObject &ParamIn)
- {
- if (ParamIn.GetFirstOf("DOF") < 0
- || ParamIn.GetFirstOf("CurrentHeight") < 0
- || ParamIn.GetFirstOf("HighLimit") < 0
- || ParamIn.GetFirstOf("LowLimit") < 0)
- {
- return RET_STATUS::RET_FAILED;
- }
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- auto stageArgs = (CalibrationStageArgs*)model->GetStageArgs();
- stageArgs->AutoCalADDof = atoi(ParamIn["DOF"]);
- stageArgs->AutoCalADCurrentPhysical = (float)atof(ParamIn["CurrentHeight"]);
- stageArgs->AutoCalADHighLimit = (float)atof(ParamIn["HighLimit"]);
- stageArgs->AutoCalADLowLimit = (float)atof(ParamIn["LowLimit"]);
- stageArgs->AutoCalADCurrentStep = 0;
- stageArgs->AutoCalADTotalStep = 12;
- if(gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnAutoCalibrationAD]->[{$:f6} {$:f6} {$:f6}]",
- stageArgs->AutoCalADCurrentPhysical,
- stageArgs->AutoCalADHighLimit,
- stageArgs->AutoCalADLowLimit);
- if (stageArgs->AutoCalADCurrentPhysical < 1e-2
- || stageArgs->AutoCalADHighLimit < 1e-2
- || stageArgs->AutoCalADLowLimit < 1e-2
- || (stageArgs->AutoCalADHighLimit < stageArgs->AutoCalADLowLimit))
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_AUTO_CALIBRATION_AD_START);
- if (stageArgs->AutoCalADDof == 0)
- {
- MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_ANGLE);
- }
- else if (stageArgs->AutoCalADDof == 1)
- {
- MechnicalMonitor::Instance()->BeginMonitor(this, MO_TUBE_HEIGHT);
- }
- return RET_STATUS::RET_SUCCEED;
- }
- void CalibrationHandler::ChangeAutoCalibrationADToNextStage(int offset)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- auto stageArgs = (CalibrationStageArgs*)model->GetStageArgs();
-
- if (stageArgs->AutoCalADTotalStep == stageArgs->AutoCalADCurrentStep)
- {
- //自动AD校正完成
- model->ChangeStage(CALIBRATION_AUTO_CALIBRATION_AD_END);
- if (stageArgs->AutoCalADDof == 0)
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(stageArgs->AutoCalADADs, stageArgs->AutoCalADPhysicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateTubeAngleADToAngleCurve(slope, intercept);
- }
- }
- else if (stageArgs->AutoCalADDof == 1)
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(stageArgs->AutoCalADADs, stageArgs->AutoCalADPhysicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateTubeHeightADToHeightCurve(slope, intercept);
- }
- }
- }
- else
- {
- model->ChangeStage(CALIBRATION_AUTO_CALIBRATION_AD_NEXT);
- stageArgs->AutoCalADCurrentStep++;
- MechnicalMonitor::Instance()->BeginMonitor(this, offset);
- }
- }
- RET_STATUS CalibrationHandler::OnSaveTubeHeightADCalibrationResult(ResDataObject &ParamIn, ResDataObject &pParamOut)
- {
- if(gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnSaveTubeHeightADCalibrationResult]->[{$}]", ParamIn.encode());
- std::vector<float> physicals;
- std::vector<float> ads;
- if (ParsePhysicsAndADMapParams(ParamIn, physicals, ads))
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(ads, physicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateTubeHeightADToHeightCurve(slope, intercept);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSaveTubeAngleADCalibrationResult(ResDataObject &ParamIn, ResDataObject &pParamOut)
- {
- if(gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnSaveTubeAngleADCalibrationResult]->[{$}]", ParamIn.encode());
- std::vector<float> physicals;
- std::vector<float> ads;
- if (ParsePhysicsAndADMapParams(ParamIn, physicals, ads))
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(ads, physicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateTubeAngleADToAngleCurve(slope, intercept);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSaveDetectorADCalibrationResult(ResDataObject &ParamIn, ResDataObject &pParamOut)
- {
- if(gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnSaveDetectorADCalibrationResult]->[{$}]", ParamIn.encode());
- std::vector<float> physicals;
- std::vector<float> ads;
- if (ParsePhysicsAndADMapParams(ParamIn, physicals, ads))
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(ads, physicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateDetectorHeightADToHeightCurve(slope, intercept);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- bool CalibrationHandler::ParsePhysicsAndADMapParams(ResDataObject &ParamIn, std::vector<float> &physical, std::vector<float> &ads)
- {
- string strKeyCount = "PointCount";
- int nPointCount = 0;
- if (ParamIn.GetFirstOf(strKeyCount.c_str()) >= 0)
- {
- nPointCount = atoi((const char *)ParamIn[strKeyCount.c_str()]);
- }
- else
- {
- return false;
- }
- for (int n = 0; n < nPointCount; n++)
- {
- char tmp1[64] = { 0 };
- char tmp2[64] = { 0 };
- sprintf_s(tmp1, "Physical%d", n);
- sprintf_s(tmp2, "AD%d", n);
- if (ParamIn.GetFirstOf(tmp1) >= 0 && ParamIn.GetFirstOf(tmp2) >= 0)
- {
- physical.push_back((float)atof((const char *)ParamIn[tmp1]));
- ads.push_back(atoi((const char *)ParamIn[tmp2]) * 1.0f);
- }
- }
- return true;
- }
- BOOL CalibrationHandler::IsMovingEnable()
- {
- BOOL bRes = TRUE;
- if (m_bMachineMoving)
- {
- if (gbusinessLog) gbusinessLog->Warn("[CalibrationHandler][IsMovingEnable]->[Machine is moving, single motion is not allowed]");
- bRes = FALSE;
- }
- return bRes;
- }
- RET_STATUS CalibrationHandler::OnStartMove(DOF_MECH mech, int nOrientation)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_RAD);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- if (!IsMovingEnable())
- {
- return RET_STATUS::RET_FAILED;
- }
- auto modelArgs = (RADMotionStageArgs*)model->GetStageArgs();
- if (mech == TOMO_TUBE_HEIGHT)
- {
- modelArgs->TubeHeightDirection = nOrientation;
- modelArgs->TubeHeightStep = -1;
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnStartMove]->[Enter][TOMO_TUBE_HEIGHT][Org: {$:d}]", modelArgs->TubeHeightDirection);
- model->ChangeStage(RAD_STAGE_MOVE_TUBE_HEIGHT);
- }
- else if (mech == TOMO_TUBE_HORIZONTAL)
- {
- modelArgs->TubeHorizontalMoveDirection = nOrientation;
- modelArgs->TubeHorizontalMoveStep = -1;
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnStartMove]->[Enter][TOMO_TUBE_HORIZONTAL][Org: {$:d}]", modelArgs->TubeHeightDirection);
- model->ChangeStage(RAD_STAGE_MOVE_TUBE_HORIZONTAL);
- }
- else if (mech == TOMO_TUBE_ANGLE)
- {
- modelArgs->TubeAngleDirection = nOrientation;
- modelArgs->TubeAngleStep = -1;
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnStartMove]->[Enter][TOMO_TUBE_ANGLE][Org: {$:d}]", modelArgs->TubeAngleDirection);
- model->ChangeStage(RAD_STAGE_MOVE_TUBE_ROTATION);
- }
- m_bMachineMoving = TRUE;
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnStartMove]->[Leave]");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnStopMove(DOF_MECH mech)
- {
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnStopMove]->[Enter]");
- auto model = m_modelManager->Resove(MOTION_MODEL_RAD);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(RAD_STAGE_STOP_MOVE);
- m_bMachineMoving = FALSE;
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnStopMove]->[Leave]");
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnMoveTubeHorizontal(ResDataObject& ParamIn)
- {
- int direction = 1;
- int steps = 0;
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- auto modelArgs = (CalibrationStageArgs*)model->GetStageArgs();
- if (ParamIn.GetFirstOf("Orientation") >= 0
- && ParamIn.GetFirstOf("StepNumber") >= 0)
- {
- auto positive = ConfigurerMotion::GetTubeHorizontalAxisPositiveDirection() > 0 ? 1 : -1;
- auto ori = atoi(ParamIn["Orientation"]) > 0 ? positive : (-1 * positive);
- modelArgs->TubeHorizontalMoveDirection = ori;
- if (ParamIn.GetFirstOf("AsPhysical") >= 0)
- {
- modelArgs->TubeHorizontalMovePhysical = (float)atof(ParamIn["StepNumber"]);
- model->ChangeStage(CALIBRATION_MOVE_TUBE_HORIZONTAL_AS_PHYSICAL);
- }
- else
- {
- modelArgs->TubeHorizontalMoveStep = atoi(ParamIn["StepNumber"]);
- model->ChangeStage(CALIBRATION_MOVE_TUBE_HORIZONTAL);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetTubeHorizontalAD(ResDataObject& ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_TUBE_HORIZONTAL_AD);
- auto modelArgs = (CalibrationStageArgs*)model->GetStageArgs();
- ParamOut.add("ADTubeHeight", modelArgs->TubeHorizontalAD);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetTubeHorizontalEncoder(ResDataObject& ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_TUBE_HORIZONTAL_ENCODER);
- auto modelArgs = (CalibrationStageArgs*)model->GetStageArgs();
- ParamOut.add("EncoderTubeHeight", modelArgs->TubeHorizontalEncoder);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetDetectorHorizontalAD(ResDataObject& ParamOut)
- {
- auto model = m_modelManager->Resove(MOTION_MODEL_CALIBRATION);
- if (!model)
- {
- return RET_STATUS::RET_FAILED;
- }
- model->ChangeStage(CALIBRATION_GET_DETECTOR_HORIZONTAL_AD);
- auto modelArgs = (CalibrationStageArgs*)model->GetStageArgs();
- ParamOut.add("ADDetectorHeight", modelArgs->DetectorHorizontalAD);
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSaveTubeHorizontalADCalibrationResult(ResDataObject& ParamIn, ResDataObject& pParamOut)
- {
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnSaveTubeHorizontalADCalibrationResult]->[{$}]", ParamIn.encode());
- std::vector<float> physicals;
- std::vector<float> ads;
- if (ParsePhysicsAndADMapParams(ParamIn, physicals, ads))
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(ads, physicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateTubeHorizontalADToPositionCurve(slope, intercept);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSaveDetectorHorizontalADCalibrationResult(ResDataObject& ParamIn, ResDataObject& pParamOut)
- {
- if (gbusinessLog) gbusinessLog->Info("[CalibrationHandler][OnSaveDetectorHorizontalADCalibrationResult]->[{$}]", ParamIn.encode());
- std::vector<float> physicals;
- std::vector<float> ads;
- if (ParsePhysicsAndADMapParams(ParamIn, physicals, ads))
- {
- float slope = 0.0f;
- float intercept = 0.0f;
- if (LeastSquare(ads, physicals, slope, intercept))
- {
- ConfigurerCalibration::UpdateDetectorHorizontalADToPositionCurve(slope, intercept);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSaveResetLowPosition(ResDataObject& ParamIn, ResDataObject& pParamOut)
- {
- string motionUnit;
- string lowpos;
- if (ParamIn.GetFirstOf("MotionUnit") >= 0)
- {
- motionUnit = (const char*)(ParamIn["MotionUnit"]);
- }
- if (ParamIn.GetFirstOf("LowPosition") >= 0)
- {
- lowpos = (const char*)(ParamIn["LowPosition"]);
- }
- if (motionUnit == "TubeAngle")
- {
- if (ParamIn.GetFirstOf("LowPosition") >= 0)
- {
- ConfigurerMotion::UpdateResetLowPositionTubleAngle(lowpos);
- }
- }
- else if (motionUnit == "TubeVertical")
- {
- if (ParamIn.GetFirstOf("LowPosition") >= 0)
- {
- ConfigurerMotion::UpdateResetLowPositionTubleHeight(lowpos);
- }
- }
- else if (motionUnit == "TubeHorizontal")
- {
- if (ParamIn.GetFirstOf("LowPosition") >= 0)
- {
- ConfigurerMotion::UpdateResetLowPositionTubleHorizontal(lowpos);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnSaveResetEncorderZeroPosition(ResDataObject& ParamIn, ResDataObject& pParamOut)
- {
- string motionUnit;
- string encoderzeropos;
- if (ParamIn.GetFirstOf("MotionUnit") >= 0)
- {
- motionUnit = (const char*)ParamIn["MotionUnit"];
- }
- else
- {
- return RET_STATUS::RET_FAILED;
- }
- if (ParamIn.GetFirstOf("EncoderZeroPosition") >= 0)
- {
- encoderzeropos = (const char*)(ParamIn["EncoderZeroPosition"]);
- }
- if (motionUnit == "TubeAngle")
- {
- if (ParamIn.GetFirstOf("EncoderZeroPosition") >= 0)
- {
- ConfigurerMotion::UpdateResetEncoderZeroPositionTubeAngle(encoderzeropos);
- }
- }
- else if (motionUnit == "TubeVertical")
- {
- if (ParamIn.GetFirstOf("EncoderZeroPosition") >= 0)
- {
- ConfigurerMotion::UpdateResetEncoderZeroPositionTubeHeight(encoderzeropos);
- }
- }
- else if (motionUnit == "TubeHorizontal")
- {
- if (ParamIn.GetFirstOf("EncoderZeroPosition") >= 0)
- {
- ConfigurerMotion::UpdateResetEncoderZeroPositionTubeHorizontal(encoderzeropos);
- }
- }
- return RET_STATUS::RET_SUCCEED;
- }
- RET_STATUS CalibrationHandler::OnGetResetPosition(ResDataObject& ParamIn, ResDataObject& pParamOut)
- {
- ResDataObject SubParamOutTubeHeight;
- SubParamOutTubeHeight.add("LowPosition", ConfigurerMotion::GetTubeHeightLowLandmarkPos());
- SubParamOutTubeHeight.add("EncoderZeroPosition", ConfigurerMotion::GetAbsoluteValueAtTubeHeightOrigin());
- pParamOut.add("TubeHeight", SubParamOutTubeHeight);
- ResDataObject SubParamOutTubeHorizontal;
- SubParamOutTubeHorizontal.add("LowPosition", ConfigurerMotion::GetTubeHorizontalLowLandmarkPos());
- SubParamOutTubeHorizontal.add("EncoderZeroPosition", ConfigurerMotion::GetAbsoluteValueAtTubeHorizontalOrigin());
- pParamOut.add("TubeHorizontal", SubParamOutTubeHorizontal);
- return RET_STATUS::RET_SUCCEED;
- }
|