TomoMotionModel.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #pragma once
  2. #include "IMotionModel.h"
  3. namespace DiosCtrlBox
  4. {
  5. const int TOMO_HEIGHT_SLICE_MAX = 256;
  6. class TomoMotionStageArgs;
  7. class ITubeAngleController;
  8. class ITubeHeightController;
  9. class ISensorADController;
  10. class ISensorEncoderController;
  11. class IExposureController;
  12. class TomoMotionModel : public IMotionModel
  13. {
  14. public:
  15. TomoMotionModel();
  16. ~TomoMotionModel();
  17. public:
  18. virtual void ChangeStage(const std::string &stageName) override;
  19. virtual std::string GetStageName() override;
  20. virtual IMotionStageArgs *GetStageArgs() override;
  21. public:
  22. virtual void Initialize(IMachineryManager *machineryManager, IPositionManager *coordinates) override;
  23. virtual void LoadMachineryParams(ResDataObject &params) override;
  24. virtual void LoadModelParams(ResDataObject &params) override;
  25. virtual void SetTechnicalParams(ResDataObject &params) override;
  26. virtual void OnFeedbackMotionParams(ResDataObject &params) override;
  27. virtual BOOL GetMotionParams(ResDataObject &params) override;
  28. private:
  29. void OnMotionStage(const std::string &stageName);
  30. void MotionStageClearParams();
  31. void MotionStageCalculateParams();
  32. void MotionStageSetTomoMotionSlice();
  33. void MotionStageMovetoEndPos();
  34. void MotionStageMovetoStartPos();
  35. void MotionStageErrorStop();
  36. void MotionStageErrorRecover();
  37. void MotionStageCenterAdjust();
  38. void AlignTubeHeightToDetector();
  39. void RotateTubeToHorizontal();
  40. void StopMotion();
  41. void MoveTubeHeightToTomoStartPosiotn();
  42. void RotateTubeAngleToTomoStartPostion();
  43. BOOL GetTomoRotateDirection();
  44. int JudgeDirectionInTubeHeightAxis(float current,float target);
  45. int JudgeDirectionInTubeAngleAxis(float current,float target);
  46. void MoveTubeHeight(int direction,float offset,float speed = 0.0f);
  47. void RotateTubeAngle(int direction, float offset);
  48. void UpdateDigitalTwinTomoSliceParams();
  49. void FixHeightStartPosition(float speed);
  50. private:
  51. std::string m_StageName;
  52. TomoMotionStageArgs *m_stageArgs;
  53. IPositionManager *m_coordinates;
  54. IMachineryManager *m_machineryManager;
  55. ITubeAngleController *m_motorTubeAngle;
  56. ITubeHeightController *m_motorTubeHeight;
  57. ISensorADController *m_adDetectorHeight;
  58. ISensorEncoderController *m_encoderTubeAngle;
  59. ISensorEncoderController *m_encoderTubeHeight;
  60. IExposureController *m_exposure;
  61. float *m_heightSlices;
  62. int *m_anglePeriods;
  63. int *m_angleSteps;
  64. float m_warmAngle;
  65. float m_anglePerSlice;
  66. int m_angleSliceCount;
  67. int m_heightSliceCount;
  68. float m_heightStartPosition;
  69. float m_angleStartPosition;
  70. float m_fps;
  71. //["UseHeightTriggerSyncBox"]
  72. //["UseHeightTriggerAngleRotation"]
  73. //"TubeAnglePeriodP0"
  74. //"TubeAnglePeriodP1"
  75. ResDataObject m_MachineryParams;
  76. //["TomoSID"]
  77. //["TomoAcceleratingDistance "]
  78. //["TomoAlignmentDistance"]
  79. //["TomoResetDistance"]
  80. //["TomoDeceleratingDistance"]
  81. //["TomoRotateDirection"]
  82. ResDataObject m_ModelParams;
  83. //["PositionNumber"]->int
  84. //["TomoScanAngle"]->float
  85. //["TomoScanMinDistance"]->float
  86. //["TomoMotionSpeed"]->float
  87. //["TomoProjectionNumber"]->int
  88. //["TomoProjectionDirection"]->int
  89. ResDataObject m_TechnicalParams;
  90. std::vector<int> m_FeedbackTubeHeightEncoders;
  91. std::vector<int> m_FeedbackTubeAngleEncoders;
  92. };
  93. }