123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717 |
- #include "stdafx.h"
- #include "ImplPositionManager.h"
- #include "IMachineryManager.h"
- #include "ISensorADController.h"
- #include "ISensorEncoderController.h"
- #include "ConfigurerMotion.h"
- #include "PacketAnalizer.h"
- #include "ConfigurerCalibration.h"
- #include "DIOS.Dev.Machinery.Driver.ECOM.h"
- using namespace DIOS::Dev::Detail::MachineryECOM;
- ImplPositionManager::ImplPositionManager()
- :m_isSystemReady(FALSE),
- m_nTomoMotionLimitationStatus(0),
- m_notifyLogicDriver(nullptr),
- m_machineryManager(nullptr),
- m_motorTubeAngle(nullptr),
- m_motorTubeHeight(nullptr),
- m_adTubeHeight(nullptr),
- m_adTubeAngle(nullptr),
- m_adDetectorHeight(nullptr),
- m_encoderTubeAngle(nullptr),
- m_encoderTubeHeight(nullptr),
- m_adTubeHorizontal(nullptr),
- m_encoderTubeHorizontal(nullptr),
- m_adDetectorHorizontal(nullptr)
- {
- }
- ImplPositionManager::~ImplPositionManager()
- {
- }
- void ImplPositionManager::Initialize(IMachineryManager *machmanager)
- {
- m_machineryManager = machmanager;
- assert(m_machineryManager);
- m_motorTubeAngle = (ITubeAngleController *)(m_machineryManager->Resove(CONTROLLER_TUBE_ANGLE));
- m_motorTubeHeight = (ITubeHeightController *)(m_machineryManager->Resove(CONTROLLER_TUBE_HEIGHT));
- m_adTubeHeight = (ISensorADController *)(m_machineryManager->Resove(CONTROLLER_TUBE_HEIGHT_AD));
- m_adTubeAngle = (ISensorADController *)(m_machineryManager->Resove(CONTROLLER_TUBE_ANGLE_AD));
- m_adDetectorHeight = (ISensorADController *)(m_machineryManager->Resove(CONTROLLER_DETECTOR_HEIGHT_AD));
- m_encoderTubeAngle = (ISensorEncoderController *)(m_machineryManager->Resove(CONTROLLER_TUBE_ANGLE_ENCODER));
- m_encoderTubeHeight = (ISensorEncoderController *)(m_machineryManager->Resove(CONTROLLER_TUBE_HEIGHT_ENCODER));
- m_adTubeHorizontal = (ISensorADController*)(m_machineryManager->Resove(CONTROLLER_TUBE_HORIZONTAL_AD));
- m_adDetectorHorizontal = (ISensorADController*)(m_machineryManager->Resove(CONTROLLER_DETECTOR_HORIZONTAL_AD));
- m_encoderTubeHorizontal = (ISensorEncoderController*)(m_machineryManager->Resove(CONTROLLER_TUBE_HORIZONTAL_ENCODER)),
- assert(m_motorTubeAngle);
- assert(m_motorTubeHeight);
- assert(m_adDetectorHeight);
- assert(m_encoderTubeAngle);
- assert(m_encoderTubeHeight);
- assert(m_adTubeHorizontal);
- assert(m_adDetectorHorizontal);
- assert(m_encoderTubeHorizontal);
- DigitalTwinRecordConvertParams();
- }
- float ImplPositionManager::GetLandmarkPosition(DOF_MECH dof, LANDMARK_TYPE landmarkType)
- {
- float ret = 0.0f;
- switch (dof)
- {
- case TOMO_TUBE_ANGLE:
- ret = GetTubeAngleLandmarkPosition(landmarkType);
- break;
- case TOMO_TUBE_HEIGHT:
- ret = GetTubeHeightLandmarkPosition(landmarkType);
- break;
- case TOMO_TUBE_HORIZONTAL:
- ret = GetTubeHorizontalLandmarkPosition(landmarkType);
- break;
- default:
- if(gbusinessLog) gbusinessLog->Error("[GetLandmarkPosition] [DOF [{$:d}] Not implemented]", dof);
- break;
- }
- return ret;
- }
- float ImplPositionManager::GetCurrentAbsolutePhysical(DOF_MECH dof)
- {
- float ret = 0.0f;
- switch (dof)
- {
- case TOMO_TUBE_ANGLE:
- ret = GetCurrentAbsoluteTubeAngle();
- break;
- case TOMO_TUBE_HEIGHT:
- ret = GetCurrentAbsoluteTubeHeight();
- break;
- case TOMO_TUBE_HORIZONTAL:
- ret = GetCurrentAbsoluteTubeHorizontalPos();
- break;
- default:
- if(gbusinessLog) gbusinessLog->Error("[GetCurrentAbsolutePhysical] [DOF [{$:d}] Not implemented]", dof);
- break;
- }
- return ret;
- }
- float ImplPositionManager::GetPhysicalPerMotorPulse(DOF_MECH dof)
- {
- float ret = 0.0f;
- switch (dof)
- {
- case TOMO_TUBE_ANGLE:
- ret = GetTubeAnglePerPulse();
- break;
- default:
- if(gbusinessLog) gbusinessLog->Error("[GetPhysicalPerMotorPulse] [DOF [{$:d}] Not implemented]", dof);
- break;
- }
- return ret;
- }
- float ImplPositionManager::GetCurrentPhysical(DOF_MECH dof)
- {
- float ret = 0.0f;
- switch (dof)
- {
- case TOMO_TUBE_ANGLE:
- ret = GetCurrentTubeAngle();
- break;
- case TOMO_TUBE_HEIGHT:
- ret = GetCurrentTubeHeight();
- break;
- case TOMO_TUBE_HORIZONTAL:
- ret = GetCurrentTubeHorizontalPos();
- break;
- case TOMO_DETECTOR_HEIGHT:
- ret = GetDetectorVerticalPos();
- break;
- case TOMO_DETECTOR_HORIZONTAL:
- ret = GetDetectorHorizontalPos();
- break;
- default:
- if(gbusinessLog) gbusinessLog->Error("[GetCurrentPhysical] [DOF [{$:d}] Not implemented]", dof);
- break;
- }
- return ret;
- }
- int ImplPositionManager::GetCurrentSensorValue(DOF_MECH dof)
- {
- int ret = 0;
- switch (dof)
- {
- case TOMO_TUBE_ANGLE:
- ret = GetCurrentTubeAngleSensorValue();
- break;
- case TOMO_TUBE_HEIGHT:
- ret = GetCurrentEncoderSensorValue(m_encoderTubeHeight);
- break;
- case TOMO_TUBE_HORIZONTAL:
- //ret = GetCurrentEncoderSensorValue(m_encoderTubeHorizontal);
- ret = GetCurrentDetectorADSensorValue(m_adTubeHorizontal);
- break;
- case TOMO_DETECTOR_HEIGHT:
- ret = GetCurrentDetectorADSensorValue(m_adDetectorHeight);
- break;
- case TOMO_DETECTOR_HORIZONTAL:
- ret = GetCurrentDetectorADSensorValue(m_adDetectorHorizontal);
- break;
- default:
- if(gbusinessLog) gbusinessLog->Error("[GetCurrentSensorValue] [DOF [{$:d}] Not implemented]", dof);
- break;
- }
- return ret;
- }
- void ImplPositionManager::SetNotifyLogicDevice(MachineryECOMDriver* logicdriver)
- {
- m_notifyLogicDriver = logicdriver;
- }
- float ImplPositionManager::ConvertSensorValue(const std::string &componentName, int sensorValue)
- {
- float ret = 0.0f;
- if (componentName == CONTROLLER_TUBE_ANGLE_ENCODER)
- {
- ret = DoConvertTubeAngleEncoder(sensorValue);
- }
- else if (componentName == CONTROLLER_TUBE_HEIGHT_ENCODER)
- {
- ret = DoConvertTubeHeightEncoder(sensorValue);
- }
- else if (componentName == CONTROLLER_DETECTOR_HEIGHT_AD)
- {
- ret = DoConvertDetectorHeightAD(sensorValue);
- }
- else if (componentName == CONTROLLER_TUBE_ANGLE_AD)
- {
- ret = DoConvertTubeAngleAD(sensorValue);
- }
- else if (componentName == CONTROLLER_TUBE_HEIGHT_AD)
- {
- ret = DoConvertTubeHeightAD(sensorValue);
- }
- else if (componentName == CONTROLLER_DETECTOR_HORIZONTAL_AD)
- {
- ret = DoConvertDetectorHorizontalAD(sensorValue);
- }
- else if (componentName == CONTROLLER_TUBE_HORIZONTAL_AD)
- {
- ret = DoConvertTubeHorizontalAD(sensorValue);
- }
- else if (componentName == CONTROLLER_TUBE_HORIZONTAL_ENCODER)
- {
- ret = DoConvertTubeHorizontalEncoder(sensorValue);
- }
- if (gmotionLog) gmotionLog->Info("[ImplPositionManager][ConvertSensorValue]->[{$}][{$:d04}][{$:f6}]", componentName.c_str(), sensorValue, ret);
- return ret;
- }
- int ImplPositionManager::ConvertPhysicsValue(const std::string &componentName, float physicsValue)
- {
- DWORD ret = 0;
- if (componentName == CONTROLLER_TUBE_ANGLE_ENCODER)
- {
- ret = DoConvertTubeAngleToEncoder(physicsValue);
- }
- else if (componentName == CONTROLLER_TUBE_HEIGHT_ENCODER)
- {
- ret = DoConvertTubeHeightToEncoder(physicsValue);
- }
- else if (componentName == CONTROLLER_TUBE_HORIZONTAL_ENCODER)
- {
- ret = DoConvertTubeHorizontalToEncoder(physicsValue);
- }
- else if (componentName == CONTROLLER_DETECTOR_HEIGHT_AD)
- {
- ret = DoConvertDetectorToAD(physicsValue);
- }
- else if (componentName == CONTROLLER_DETECTOR_HORIZONTAL_AD)
- {
- ret = DoConvertDetectorHorizontalToAD(physicsValue);
- }
- if (gmotionLog) gmotionLog->Info("[ImplPositionManager][ConvertPhysicsValue]->[{$}][{$:f6}][{$:d04}]", componentName.c_str(), physicsValue, ret);
- return ret;
- }
- DWORD ImplPositionManager::ConvertMotorStepValue(const std::string &componentName, float physicsOffset)
- {
- DWORD ret = 0;
- if (componentName == CONTROLLER_TUBE_ANGLE)
- {
- ret = DoConvertTubeAngleMotorPulse(physicsOffset);
- }
- else if (componentName == CONTROLLER_TUBE_HEIGHT)
- {
- ret = DoConvertTubeHeightMotorPulse(physicsOffset);
- }
- else if (componentName == CONTROLLER_TUBE_HORIZONTAL)
- {
- ret = DoConvertTubeHorizontalMotorPulse(physicsOffset);
- }
- if (gmotionLog) gmotionLog->Info("[ImplPositionManager][ConvertMotorStepValue]->[{$}][{$:f6}][{$:d04}]", componentName.c_str(), physicsOffset, ret);
- return ret;
- }
- DWORD ImplPositionManager::ConvertMotorSpeed(const std::string &componentName, float speed)
- {
- DWORD ret = 0;
- if (componentName == CONTROLLER_TUBE_ANGLE)
- {
- ret = DoConvertTubeAngleMotorSpeed(speed);
- }
- else if (componentName == CONTROLLER_TUBE_HEIGHT)
- {
- ret = DoConvertTubeHeightMotorSpeed(speed);
- }
- else if (componentName == CONTROLLER_TUBE_HORIZONTAL)
- {
- ret = DoConvertTubeHorizontalMotorSpeed(speed);
- }
- if (gmotionLog) gmotionLog->Info("[ImplPositionManager][ConvertMotorSpeed]->[{$}][{$:f6}][{$:d04}]", componentName.c_str(), speed, ret);
- return ret;
- }
- void ImplPositionManager::ResetSystem()
- {
- m_isSystemReady = FALSE;
- }
- BOOL ImplPositionManager::IsSystemReady()
- {
- return m_isSystemReady;
- }
- int ImplPositionManager::IsTomoMotionLimitationStatus()
- {
- return m_nTomoMotionLimitationStatus;
- }
- BOOL ImplPositionManager::IsNeedCenterAdjust()
- {
- auto prisionAngle = 1.0f; //(°)
- auto prisionHeight = 0.02f; //(m)
- auto tubeAngle = GetCurrentTubeAngle();
- auto tubeHeight = GetCurrentTubeHeight();
- auto detectorHeight = GetDetectorVerticalPos();
- if (abs(tubeAngle) <= prisionAngle && abs(tubeHeight - detectorHeight) <= prisionHeight)
- {
- return FALSE;
- }
- return TRUE;
- }
- void ImplPositionManager::NotifyAlignStatus(BOOL isAligned)
- {
- if (m_notifyLogicDriver)
- {
- ResDataObject NotifyData;
- ResDataObject tmp;
- tmp.add("Alignstatus", (bool)isAligned);
- PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, NOTIFY_KEY_ALIGNSTATUS.c_str(), (const char *)tmp["Alignstatus"]);
- m_notifyLogicDriver->FireNotify("Alignstatus", std::to_string(isAligned));
- }
- }
- void ImplPositionManager::NotifySystemIsReady()
- {
- m_isSystemReady = TRUE;
- if (m_notifyLogicDriver)
- {
- ResDataObject NotifyData;
- ResDataObject tmp;
- tmp.add("MachineryReady", (bool)m_isSystemReady);
- PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, NOTIFY_KEY_SYSTEM_READY.c_str(), (const char *)tmp["MachineryReady"]);
- m_notifyLogicDriver->FireNotify("MachineryReady", std::to_string(m_isSystemReady));
- }
- }
- void ImplPositionManager::NotifySystemIsTomoMotionLimitation(int nLimitaionStatus)
- {
- m_nTomoMotionLimitationStatus = nLimitaionStatus;
- if (m_notifyLogicDriver)
- {
- ResDataObject NotifyData;
- ResDataObject tmp;
- tmp.add("MachineryTomoMotionLimitation", m_nTomoMotionLimitationStatus);
- PacketAnalizer::MakeNotify(NotifyData, PACKET_CMD_UPDATE, NOTIFY_KEY_SYSTEM_READY.c_str(), (const char*)tmp["MachineryTomoMotionLimitation"]);
- m_notifyLogicDriver->FireNotify("MachineryTomoMotionLimitation", std::to_string(m_nTomoMotionLimitationStatus));
- }
- }
- float ImplPositionManager::GetTubeHeightLandmarkPosition(LANDMARK_TYPE landmarkType)
- {
- if (LANDMARK_HIGH == landmarkType)
- {
- return ConfigurerMotion::GetTubeHeightHighLandmarkHeight();
- }
- else if (LANDMARK_LOW == landmarkType)
- {
- //int ad = ConfigurerMotion::GetTubeHeightLowLandmarkAD();
- //return ConvertSensorValue(m_adTubeHeight->Name(), ad);
- return ConfigurerMotion::GetTubeHeightLowLandmarkPos();
- }
- return 0.0f;
- }
- float ImplPositionManager::GetTubeAngleLandmarkPosition(LANDMARK_TYPE landmarkType)
- {
- if (LANDMARK_HIGH == landmarkType)
- {
- return ConfigurerMotion::GetTubeAngleHighLandmarkAngle();
- }
- else if (LANDMARK_LOW == landmarkType)
- {
- return ConfigurerMotion::GetTubeAngleLowLandmarkAngle();
- }
- return 0.0f;
- }
- float ImplPositionManager::GetTubeAnglePerPulse()
- {
- float angleinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeAngleMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeAngleMotor();
- if (pulseinonecircle == 0)
- {
- return 0.0f;
- }
- return (angleinonecircle / pulseinonecircle);
- }
- float ImplPositionManager::GetCurrentTubeHeight()
- {
- auto heightencoder = m_encoderTubeHeight->GetCurrentEncoderValue();
- return ConvertSensorValue(m_encoderTubeHeight->Name(), heightencoder);
- }
- float ImplPositionManager::GetCurrentAbsoluteTubeAngle()
- {
- auto ad = m_adTubeAngle->GetCurrentADValue();
- return ConvertSensorValue(m_adTubeAngle->Name(), ad);
- }
- float ImplPositionManager::GetCurrentAbsoluteTubeHeight()
- {
- auto ad = m_adTubeHeight->GetCurrentADValue();
- return ConvertSensorValue(m_adTubeHeight->Name(), ad);
- }
- float ImplPositionManager::GetCurrentTubeAngle()
- {
- auto angleencoder = m_encoderTubeAngle->GetCurrentEncoderValue();
- return ConvertSensorValue(m_encoderTubeAngle->Name(), angleencoder);
- }
- float ImplPositionManager::GetDetectorVerticalPos()
- {
- auto detectorad = m_adDetectorHeight->GetCurrentADValue();
- return ConvertSensorValue(m_adDetectorHeight->Name(), detectorad);
- }
- float ImplPositionManager::GetDetectorHorizontalPos()
- {
- auto detectorad = m_adDetectorHorizontal->GetCurrentADValue();
- return ConvertSensorValue(m_adDetectorHorizontal->Name(), detectorad);
- }
- int ImplPositionManager::GetCurrentTubeAngleSensorValue()
- {
- return m_encoderTubeAngle->GetCurrentEncoderValue();
- }
- int ImplPositionManager::GetCurrentEncoderSensorValue(ISensorEncoderController* pSensorEncoder)
- {
- //return m_encoderTubeHeight->GetCurrentEncoderValue();
- if (pSensorEncoder)
- {
- return pSensorEncoder->GetCurrentEncoderValue();
- }
- return -1;
- }
- int ImplPositionManager::GetCurrentDetectorADSensorValue(ISensorADController* pSensorAD)
- {
- //return m_adDetectorHeight->GetCurrentADValue();
- if (pSensorAD)
- {
- return pSensorAD->GetCurrentADValue();
- }
- return -1;
- }
- float ImplPositionManager::DoConvertTubeAngleEncoder(int sensorvalue)
- {
- float angleinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeAngleMotor();
- auto encodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeAngleMotor();
- auto absolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeAngleOrigin();
- return DoConvertEncoder(sensorvalue, angleinonecircle, encodervalueinonecircle, absolutevalueAtorigin);
- }
- float ImplPositionManager::DoConvertTubeHeightEncoder(int sensorvalue)
- {
- float distanceinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHeightMotor();
- auto encodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeHeightMotor();
- auto absolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeHeightOrigin();
- return DoConvertEncoder(sensorvalue, distanceinonecircle, encodervalueinonecircle, absolutevalueAtorigin);
- }
- int ImplPositionManager::DoConvertTubeAngleToEncoder(float physics)
- {
- float angleinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeAngleMotor();
- auto encodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeAngleMotor();
- auto absolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeAngleOrigin();
- return DoConvertPhysicsToEncoder(physics, angleinonecircle, encodervalueinonecircle, absolutevalueAtorigin);
- }
- int ImplPositionManager::DoConvertTubeHeightToEncoder(float physics)
- {
- float distanceinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHeightMotor();
- auto encodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeHeightMotor();
- auto absolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeHeightOrigin();
- return DoConvertPhysicsToEncoder(physics, distanceinonecircle, encodervalueinonecircle, absolutevalueAtorigin);
- }
- float ImplPositionManager::DoConvertEncoder(int encoder, float physicsinonecircle, float encoderinonecircle, float physicsAtOrigin)
- {
- return physicsAtOrigin + (physicsinonecircle / encoderinonecircle) * (encoder);
- }
- int ImplPositionManager::DoConvertPhysicsToEncoder(float physics, float physicsinonecircle, float encoderinonecircle, float physicsAtOrigin)
- {
- return (int)((physics - physicsAtOrigin) / (physicsinonecircle / encoderinonecircle));
- }
- DWORD ImplPositionManager::DoConvertTubeAngleMotorPulse(float physicsoffset)
- {
- float angleinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeAngleMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeAngleMotor();
- return DoConvertMotorPulse(physicsoffset, angleinonecircle, pulseinonecircle);
- }
- DWORD ImplPositionManager::DoConvertTubeHeightMotorPulse(float physicsoffset)
- {
- float heightinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHeightMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeHeightMotor();
- return DoConvertMotorPulse(physicsoffset, heightinonecircle, pulseinonecircle);
- }
- DWORD ImplPositionManager::DoConvertMotorPulse(float physicsoffset, float physicsinonecircle, DWORD pulseinonecircle)
- {
- return (DWORD)(pulseinonecircle * (abs(physicsoffset) / physicsinonecircle));
- }
- DWORD ImplPositionManager::DoConvertTubeAngleMotorSpeed(float speed)
- {
- float angleinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeAngleMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeAngleMotor();
- return DoConvertSpeed(speed, angleinonecircle, pulseinonecircle);
- }
- DWORD ImplPositionManager::DoConvertTubeHeightMotorSpeed(float speed)
- {
- float heightinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHeightMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeHeightMotor();
- return DoConvertSpeed(speed, heightinonecircle, pulseinonecircle);
- }
- DWORD ImplPositionManager::DoConvertSpeed(float speed, float physicsinonecircle, DWORD pulseinonecircle)
- {
- return (DWORD)(1000000 / ((speed / physicsinonecircle) * pulseinonecircle));
- }
- float ImplPositionManager::DoConvertDetectorHeightAD(int sensorvalue)
- {
- auto slope = ConfigurerCalibration::GetDetectorADToHeightSlope();
- auto intercept = ConfigurerCalibration::GetDetectorADToHeightIntercept();
- return slope * sensorvalue + intercept;
- }
- DWORD ImplPositionManager::DoConvertDetectorToAD(float physics)
- {
- auto slope = ConfigurerCalibration::GetDetectorADToHeightSlope();
- auto intercept = ConfigurerCalibration::GetDetectorADToHeightIntercept();
- if (abs(slope) < 1e-3)
- {
- return 0;
- }
- return (DWORD)((physics - intercept) / slope);
- }
- float ImplPositionManager::DoConvertTubeAngleAD(DWORD sensorvalue)
- {
- auto slope = ConfigurerCalibration::GetTubeAngleADToAngleSlope();
- auto intercept = ConfigurerCalibration::GetTubeAngleADToAngleIntercept();
- return slope * sensorvalue + intercept;
- }
- float ImplPositionManager::DoConvertTubeHeightAD(DWORD sensorvalue)
- {
- auto slope = ConfigurerCalibration::GetTubeHeightADToHeightSlope();
- auto intercept = ConfigurerCalibration::GetTubeHeightADToHeightIntercept();
- return slope * sensorvalue + intercept;
- }
- void ImplPositionManager::DigitalTwinRecordConvertParams()
- {
- float angleinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeAngleMotor();
- auto angleencodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeAngleMotor();
- auto angleabsolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeAngleOrigin();
- float distanceinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHeightMotor();
- auto heightencodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeHeightMotor();
- auto heightabsolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeHeightOrigin();
- if (gdigitalTwinLog) gdigitalTwinLog->Info("[CP]->[({$:f6},{$:f6},{$:f6}),({$:f6},{$:f6},{$:f6})]",
- angleabsolutevalueAtorigin,
- angleinonecircle,
- angleencodervalueinonecircle,
- heightabsolutevalueAtorigin,
- distanceinonecircle,
- heightencodervalueinonecircle);
- }
- void ImplPositionManager::ResetSystem(const std::string& componentName)
- {
- }
- BOOL ImplPositionManager::IsSystemReady(const std::string& componentName)
- {
- return TRUE;
- }
- void ImplPositionManager::NotifySystemIsReady(const std::string& componentName)
- {
- }
- DWORD ImplPositionManager::DoConvertTubeHorizontalMotorPulse(float physicsoffset)
- {
- float horizontalinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHorizontalMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeHorizontalMotor();
- return DoConvertMotorPulse(physicsoffset, horizontalinonecircle, pulseinonecircle);
- }
- DWORD ImplPositionManager::DoConvertTubeHorizontalMotorSpeed(float speed)
- {
- float horizontalinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHorizontalMotor();
- DWORD pulseinonecircle = ConfigurerMotion::GetPulseInOneCircleOfTubeHorizontalMotor();
- return DoConvertSpeed(speed, horizontalinonecircle, pulseinonecircle);
- }
- float ImplPositionManager::DoConvertTubeHorizontalEncoder(int sensorvalue)
- {
- float distanceinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHorizontalMotor();
- auto encodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeHorizontalMotor();
- auto absolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeHorizontalOrigin();
- return DoConvertEncoder(sensorvalue, distanceinonecircle, encodervalueinonecircle, absolutevalueAtorigin);
- }
- float ImplPositionManager::DoConvertTubeHorizontalAD(DWORD sensorvalue)
- {
- auto slope = ConfigurerCalibration::GetTubeHorizontalADToPositionSlope();
- auto intercept = ConfigurerCalibration::GetTubeHorizontalADToPositionIntercept();
- return slope * sensorvalue + intercept;
- }
- int ImplPositionManager::DoConvertTubeHorizontalToEncoder(float physics)
- {
- float distanceinonecircle = ConfigurerMotion::GetDistanceInOneCircleOfTubeHorizontalMotor();
- auto encodervalueinonecircle = ConfigurerMotion::GetEncoderValueInOneCircleOfTubeHorizontalMotor();
- auto absolutevalueAtorigin = ConfigurerMotion::GetAbsoluteValueAtTubeHorizontalOrigin();
- return DoConvertPhysicsToEncoder(physics, distanceinonecircle, encodervalueinonecircle, absolutevalueAtorigin);
- }
- float ImplPositionManager::DoConvertDetectorHorizontalAD(DWORD sensorvalue)
- {
- auto slope = ConfigurerCalibration::GetDetectorHorizontalADToPositionSlope();
- auto intercept = ConfigurerCalibration::GetDetectorHorizontalADToPositionIntercept();
- return slope * sensorvalue + intercept;
- }
- DWORD ImplPositionManager::DoConvertDetectorHorizontalToAD(float physics)
- {
- auto slope = ConfigurerCalibration::GetDetectorHorizontalADToPositionSlope();
- auto intercept = ConfigurerCalibration::GetDetectorHorizontalADToPositionIntercept();
- if (abs(slope) < 1e-3)
- {
- return 0;
- }
- return (DWORD)((physics - intercept) / slope);
- }
- float ImplPositionManager::GetTubeHorizontalLandmarkPosition(LANDMARK_TYPE landmarkType)
- {
- if (LANDMARK_HIGH == landmarkType)
- {
- return ConfigurerMotion::GetTubeHorizontalRightLandmark();
- }
- else if (LANDMARK_LOW == landmarkType)
- {
- return ConfigurerMotion::GetTubeHorizontalLowLandmarkPos();
- }
- return 0.0f;
- }
- float ImplPositionManager::GetCurrentAbsoluteTubeHorizontalPos()
- {
- auto ad = m_adTubeHorizontal->GetCurrentADValue();
- return ConvertSensorValue(m_adTubeHorizontal->Name(), ad);
- }
- float ImplPositionManager::GetCurrentTubeHorizontalPos()
- {
- auto encoder = m_encoderTubeHorizontal->GetCurrentEncoderValue();
- return ConvertSensorValue(m_encoderTubeHorizontal->Name(), encoder);
- }
|