#pragma once #include "IPositionManager.h" namespace DIOS::Dev::Detail::MachineryECOM { class ITubeAngleController; class ITubeHeightController; class ISensorADController; class ISensorEncoderController; class ImplPositionManager : public IPositionManager { public: ImplPositionManager(); ~ImplPositionManager(); public: virtual void Initialize(IMachineryManager *machmanager) override; virtual float GetLandmarkPosition(DOF_MECH dof, LANDMARK_TYPE landmarkType) override; virtual float GetCurrentAbsolutePhysical(DOF_MECH dof) override; virtual float GetPhysicalPerMotorPulse(DOF_MECH dof) override; virtual float GetCurrentPhysical(DOF_MECH dof) override; virtual int GetCurrentSensorValue(DOF_MECH dof) override; virtual float ConvertSensorValue(const std::string &componentName, int sensorValue) override; virtual int ConvertPhysicsValue(const std::string &componentName, float physicsValue) override; virtual DWORD ConvertMotorStepValue(const std::string &componentName, float physicsOffset) override; virtual DWORD ConvertMotorSpeed(const std::string &componentName, float speed) override; virtual void ResetSystem() override; virtual BOOL IsSystemReady() override; virtual int IsTomoMotionLimitationStatus() override; virtual BOOL IsNeedCenterAdjust() override; virtual void SetNotifyLogicDevice(MachineryECOMDriver* logicdriver) override; virtual void NotifyAlignStatus(BOOL isAligned) override; virtual void NotifySystemIsReady() override; virtual void NotifySystemIsTomoMotionLimitation(int nLimitaionStatus) override; virtual void ResetSystem(const std::string& componentName) override; virtual BOOL IsSystemReady(const std::string& componentName) override; virtual void NotifySystemIsReady(const std::string& componentName) override; private: float GetTubeHeightLandmarkPosition(LANDMARK_TYPE landmarkType); float GetTubeAngleLandmarkPosition(LANDMARK_TYPE landmarkType); float GetCurrentAbsoluteTubeAngle(); float GetCurrentAbsoluteTubeHeight(); float GetTubeAnglePerPulse(); float GetCurrentTubeHeight(); float GetCurrentTubeAngle(); float GetDetectorVerticalPos(); float GetDetectorHorizontalPos(); int GetCurrentTubeAngleSensorValue(); int GetCurrentEncoderSensorValue(ISensorEncoderController *pSensorEncoder); int GetCurrentDetectorADSensorValue(ISensorADController *pSensorAD); DWORD DoConvertTubeHeightMotorPulse(float physicsoffset); DWORD DoConvertTubeHeightMotorSpeed(float speed); float DoConvertTubeHeightEncoder(int sensorvalue); float DoConvertTubeHeightAD(DWORD sensorvalue); int DoConvertTubeHeightToEncoder(float physics); DWORD DoConvertTubeAngleMotorPulse(float physicsoffset); DWORD DoConvertTubeAngleMotorSpeed(float speed); float DoConvertTubeAngleEncoder(int sensorvalue); float DoConvertTubeAngleAD(DWORD sensorvalue); int DoConvertTubeAngleToEncoder(float physics); DWORD DoConvertTubeHorizontalMotorPulse(float physicsoffset); DWORD DoConvertTubeHorizontalMotorSpeed(float speed); float DoConvertTubeHorizontalEncoder(int sensorvalue); float DoConvertTubeHorizontalAD(DWORD sensorvalue); int DoConvertTubeHorizontalToEncoder(float physics); float DoConvertDetectorHeightAD(int sensorvalue); DWORD DoConvertDetectorToAD(float physics); float DoConvertDetectorHorizontalAD(DWORD sensorvalue); DWORD DoConvertDetectorHorizontalToAD(float physics); DWORD DoConvertMotorPulse(float physicsoffset, float physicsinonecircle, DWORD pulseinonecircle); DWORD DoConvertSpeed(float speed, float physicsinonecircle, DWORD pulseinonecircle); float DoConvertEncoder(int encoder, float physicsinonecircle, float encoderinonecircle, float physicsAtOrigin); int DoConvertPhysicsToEncoder(float physics, float physicsinonecircle, float encoderinonecircle, float physicsAtOrigin); void DigitalTwinRecordConvertParams(); float GetTubeHorizontalLandmarkPosition(LANDMARK_TYPE landmarkType); float GetCurrentAbsoluteTubeHorizontalPos(); float GetCurrentTubeHorizontalPos(); private: BOOL m_isSystemReady; int m_nTomoMotionLimitationStatus;//0:正常 1:过高 2:过低 MachineryECOMDriver* m_notifyLogicDriver; IMachineryManager *m_machineryManager; ITubeAngleController *m_motorTubeAngle; ITubeHeightController *m_motorTubeHeight; ISensorADController *m_adTubeHeight; ISensorADController *m_adTubeAngle; ISensorADController *m_adDetectorHeight; ISensorEncoderController *m_encoderTubeAngle; ISensorEncoderController *m_encoderTubeHeight; ISensorADController* m_adTubeHorizontal; ISensorEncoderController* m_encoderTubeHorizontal; ISensorADController* m_adDetectorHorizontal; }; }