TomoMotionModel.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #pragma once
  2. #include "IMotionModel.h"
  3. namespace DIOS::Dev::Detail::MachineryECOM
  4. {
  5. const int TOMO_HEIGHT_SLICE_MAX = 256;
  6. enum
  7. {
  8. DET_HIGHT_NORMAL,
  9. DET_HIGHT_TOOHIGH,
  10. DET_HIGHT_TOOLOW,
  11. };
  12. class TomoMotionStageArgs;
  13. class ITubeAngleController;
  14. class ITubeHeightController;
  15. class ISensorADController;
  16. class ISensorEncoderController;
  17. class IExposureController;
  18. class IOutputController;
  19. class TomoMotionModel : public IMotionModel
  20. {
  21. public:
  22. TomoMotionModel();
  23. ~TomoMotionModel();
  24. public:
  25. virtual void ChangeStage(const std::string &stageName) override;
  26. virtual std::string GetStageName() override;
  27. virtual IMotionStageArgs *GetStageArgs() override;
  28. public:
  29. virtual void Initialize(IMachineryManager *machineryManager, IPositionManager *coordinates) override;
  30. virtual void LoadMachineryParams(ResDataObject &params) override;
  31. virtual void LoadModelParams(ResDataObject &params) override;
  32. virtual void SetTechnicalParams(ResDataObject &params) override;
  33. virtual void OnFeedbackMotionParams(ResDataObject &params) override;
  34. virtual BOOL GetMotionParams(ResDataObject &params) override;
  35. virtual void SwitchScanningComponents(int nSwitch) override;
  36. virtual void SwitchWorkstation(string ws) override;
  37. private:
  38. void OnMotionStage(const std::string &stageName);
  39. void MotionStageClearParams();
  40. void MotionStageCalculateParams();
  41. void MotionStageSetTomoMotionSlice();
  42. void MotionStageMovetoEndPos();
  43. void MotionStageMovetoStartPos();
  44. void MotionStageErrorStop();
  45. void MotionStageErrorRecover();
  46. void MotionStageCenterAdjust();
  47. void AlignTubeHeightToDetector();
  48. void RotateTubeToHorizontal();
  49. void StopMotion();
  50. void MoveTubeHeightToTomoStartPosiotn();
  51. void RotateTubeAngleToTomoStartPostion();
  52. BOOL GetTomoRotateDirection();
  53. int JudgeDirectionInTubeHeightAxis(float current,float target);
  54. int JudgeDirectionInTubeAngleAxis(float current,float target);
  55. void MoveTubeHeight(int direction,float offset,float spd = 0.0f);
  56. void RotateTubeAngle(int direction, float offset);
  57. void UpdateDigitalTwinTomoSliceParams();
  58. void FixHeightStartPosition(float speed);
  59. void OnMotionStageMove2SID(string ws);
  60. int JudgeDirectionInTubeHorizontalAxis(float current, float target);
  61. void MoveTubeHorizontal(int direction, float offset, float spd = 0.0f);
  62. void DoMotionStageSetTomoMotionSlice(ISensorEncoderController* pEncoder, string encoderControllerName);
  63. void DoMotionStageMovetoEndPosHeight();
  64. void DoMotionStageMovetoEndPosHorizontal();
  65. void DoMotionStageMovetoStartPosHeight();
  66. void DoMotionStageMovetoStartPosHorizontal();
  67. void MoveTubeHorizontalToTomoStartPosiotn();
  68. int IsTomoMotionDetectorPosCorrect(float fDetectorCurPos, string scanangle);
  69. private:
  70. std::string m_StageName;
  71. TomoMotionStageArgs *m_stageArgs;
  72. IPositionManager *m_coordinates;
  73. IMachineryManager *m_machineryManager;
  74. ITubeAngleController *m_motorTubeAngle;
  75. ITubeHeightController *m_motorTubeHeight;
  76. ISensorADController *m_adDetectorHeight;
  77. ISensorEncoderController *m_encoderTubeAngle;
  78. ISensorEncoderController *m_encoderTubeHeight;
  79. IExposureController *m_exposure;
  80. ITubeHeightController* m_motorTubeHorizontal;
  81. ISensorADController* m_adTubeHorizontal;
  82. ISensorEncoderController* m_encoderTubeHorizontal;
  83. IOutputController* m_tubeLineMotionSwitch;
  84. float *m_heightSlices;
  85. int *m_anglePeriods;
  86. int *m_angleSteps;
  87. float m_warmAngle;
  88. float m_anglePerSlice;
  89. int m_angleSliceCount;
  90. int m_heightSliceCount;
  91. float m_heightStartPosition;
  92. float m_angleStartPosition;
  93. float m_fps;
  94. ResDataObject m_MachineryParams;
  95. ResDataObject m_ModelParams;
  96. ResDataObject m_TechnicalParams;
  97. std::vector<int> m_FeedbackTubeHeightEncoders;
  98. std::vector<int> m_FeedbackTubeAngleEncoders;
  99. };
  100. }