ImplPositionManager.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #pragma once
  2. #include "IPositionManager.h"
  3. namespace DIOS::Dev::Detail::MachineryECOM
  4. {
  5. class ITubeAngleController;
  6. class ITubeHeightController;
  7. class ISensorADController;
  8. class ISensorEncoderController;
  9. class ImplPositionManager : public IPositionManager
  10. {
  11. public:
  12. ImplPositionManager();
  13. ~ImplPositionManager();
  14. public:
  15. virtual void Initialize(IMachineryManager *machmanager) override;
  16. virtual float GetLandmarkPosition(DOF_MECH dof, LANDMARK_TYPE landmarkType) override;
  17. virtual float GetCurrentAbsolutePhysical(DOF_MECH dof) override;
  18. virtual float GetPhysicalPerMotorPulse(DOF_MECH dof) override;
  19. virtual float GetCurrentPhysical(DOF_MECH dof) override;
  20. virtual int GetCurrentSensorValue(DOF_MECH dof) override;
  21. virtual float ConvertSensorValue(const std::string &componentName, int sensorValue) override;
  22. virtual int ConvertPhysicsValue(const std::string &componentName, float physicsValue) override;
  23. virtual DWORD ConvertMotorStepValue(const std::string &componentName, float physicsOffset) override;
  24. virtual DWORD ConvertMotorSpeed(const std::string &componentName, float speed) override;
  25. virtual void ResetSystem() override;
  26. virtual BOOL IsSystemReady() override;
  27. virtual int IsTomoMotionLimitationStatus() override;
  28. virtual BOOL IsNeedCenterAdjust() override;
  29. virtual void SetNotifyLogicDevice(MachineryECOMDriver* logicdriver) override;
  30. virtual void NotifyAlignStatus(BOOL isAligned) override;
  31. virtual void NotifySystemIsReady() override;
  32. virtual void NotifySystemIsTomoMotionLimitation(int nLimitaionStatus) override;
  33. virtual void ResetSystem(const std::string& componentName) override;
  34. virtual BOOL IsSystemReady(const std::string& componentName) override;
  35. virtual void NotifySystemIsReady(const std::string& componentName) override;
  36. private:
  37. float GetTubeHeightLandmarkPosition(LANDMARK_TYPE landmarkType);
  38. float GetTubeAngleLandmarkPosition(LANDMARK_TYPE landmarkType);
  39. float GetCurrentAbsoluteTubeAngle();
  40. float GetCurrentAbsoluteTubeHeight();
  41. float GetTubeAnglePerPulse();
  42. float GetCurrentTubeHeight();
  43. float GetCurrentTubeAngle();
  44. float GetDetectorVerticalPos();
  45. float GetDetectorHorizontalPos();
  46. int GetCurrentTubeAngleSensorValue();
  47. int GetCurrentEncoderSensorValue(ISensorEncoderController *pSensorEncoder);
  48. int GetCurrentDetectorADSensorValue(ISensorADController *pSensorAD);
  49. DWORD DoConvertTubeHeightMotorPulse(float physicsoffset);
  50. DWORD DoConvertTubeHeightMotorSpeed(float speed);
  51. float DoConvertTubeHeightEncoder(int sensorvalue);
  52. float DoConvertTubeHeightAD(DWORD sensorvalue);
  53. int DoConvertTubeHeightToEncoder(float physics);
  54. DWORD DoConvertTubeAngleMotorPulse(float physicsoffset);
  55. DWORD DoConvertTubeAngleMotorSpeed(float speed);
  56. float DoConvertTubeAngleEncoder(int sensorvalue);
  57. float DoConvertTubeAngleAD(DWORD sensorvalue);
  58. int DoConvertTubeAngleToEncoder(float physics);
  59. DWORD DoConvertTubeHorizontalMotorPulse(float physicsoffset);
  60. DWORD DoConvertTubeHorizontalMotorSpeed(float speed);
  61. float DoConvertTubeHorizontalEncoder(int sensorvalue);
  62. float DoConvertTubeHorizontalAD(DWORD sensorvalue);
  63. int DoConvertTubeHorizontalToEncoder(float physics);
  64. float DoConvertDetectorHeightAD(int sensorvalue);
  65. DWORD DoConvertDetectorToAD(float physics);
  66. float DoConvertDetectorHorizontalAD(DWORD sensorvalue);
  67. DWORD DoConvertDetectorHorizontalToAD(float physics);
  68. DWORD DoConvertMotorPulse(float physicsoffset, float physicsinonecircle, DWORD pulseinonecircle);
  69. DWORD DoConvertSpeed(float speed, float physicsinonecircle, DWORD pulseinonecircle);
  70. float DoConvertEncoder(int encoder, float physicsinonecircle, float encoderinonecircle, float physicsAtOrigin);
  71. int DoConvertPhysicsToEncoder(float physics, float physicsinonecircle, float encoderinonecircle, float physicsAtOrigin);
  72. void DigitalTwinRecordConvertParams();
  73. float GetTubeHorizontalLandmarkPosition(LANDMARK_TYPE landmarkType);
  74. float GetCurrentAbsoluteTubeHorizontalPos();
  75. float GetCurrentTubeHorizontalPos();
  76. private:
  77. BOOL m_isSystemReady;
  78. int m_nTomoMotionLimitationStatus;//0:Õý³£ 1:¹ý¸ß 2:¹ýµÍ
  79. MachineryECOMDriver* m_notifyLogicDriver;
  80. IMachineryManager *m_machineryManager;
  81. ITubeAngleController *m_motorTubeAngle;
  82. ITubeHeightController *m_motorTubeHeight;
  83. ISensorADController *m_adTubeHeight;
  84. ISensorADController *m_adTubeAngle;
  85. ISensorADController *m_adDetectorHeight;
  86. ISensorEncoderController *m_encoderTubeAngle;
  87. ISensorEncoderController *m_encoderTubeHeight;
  88. ISensorADController* m_adTubeHorizontal;
  89. ISensorEncoderController* m_encoderTubeHorizontal;
  90. ISensorADController* m_adDetectorHorizontal;
  91. };
  92. }