#pragma once #include "IMotionModel.h" namespace DIOS::Dev::Detail::MachineryECOM { class CalibrationStageArgs; class ITubeAngleController; class ITubeHeightController; class ISensorADController; class ISensorEncoderController; class IOutputController; class CalibrationModel : public IMotionModel { public: CalibrationModel(); ~CalibrationModel(); public: virtual void ChangeStage(const std::string &stageName) override; virtual std::string GetStageName() override; virtual IMotionStageArgs *GetStageArgs() override; public: virtual void Initialize(IMachineryManager *machineryManager, IPositionManager *coordinates) override; virtual void LoadMachineryParams(ResDataObject ¶ms) override; virtual void LoadModelParams(ResDataObject ¶ms) override; virtual void SetTechnicalParams(ResDataObject ¶ms) override; virtual void OnFeedbackMotionParams(ResDataObject ¶ms) override; virtual BOOL GetMotionParams(ResDataObject ¶ms) override; virtual void SwitchScanningComponents(int nSwitch) override; virtual void SwitchWorkstation(string ws) override; private: void OnMotionStage(const std::string &name); void OnStageMoveTubeHeight(); void OnStageRotateTubeAngle(); void OnStageGetTubeAngleAD(); void OnStageGetTubeHeightAD(); void OnStageGetDetectorHeightAD(); void OnStageGetTubeAngleEncoder(); void OnStageGetTubeHeightEncoder(); void OnStageGetDetectorHeightEncoder(); void OnStageActiveTubeAngleZAxisClear(); void OnStageCancelTubeAngleZAxisClear(); void OnStageActiveTubeHeightZAxisClear(); void OnStageCancelTubeHeightZAxisClear(); void OnStageRotateTubeAngleToZAxis(); void OnStageMoveTubeHeightToZAxis(); void OnStageStopTubeAngleAtZxis(); void OnStageStopTubeHeightAtZAxis(); void OnStageMoveTubeHeightAsPhysical(); void OnStageRotateTubeAngleAsPhysical(); void OnStageSwitchSvoStatus(); void OnStageAutoCalibrationADStart(); void OnStageAutoCalibrationADNext(); void OnStageAutoCalibrationADEnd(); int GetAD(int dof); void MoveMech(int dof,float current, float target); void RotateTubeAngle(float current,float target); void MoveTubeHeight(float current, float target); int JudgeDirectionInTubeHeightAxis(float current, float target); int JudgeDirectionInTubeAngleAxis(float current, float target); void OnStageMoveTubeHorizontal(); void OnStageGetTubeHorizontalAD(); void OnStageGetTubeHorizontalEncoder(); void OnStageGetDetectorHorizontalAD(); private: std::string m_StageName; CalibrationStageArgs *m_stageArgs; IPositionManager *m_coordinates; ITubeAngleController *m_tubeAngle; ITubeHeightController *m_tubeHeight; ISensorADController *m_tubeHeightAD; ISensorADController *m_tubeAngleAD; ISensorADController *m_detectorAD; ISensorEncoderController *m_tubeHeightEncoder; ISensorEncoderController *m_tubeAngleEncoder; ISensorEncoderController *m_detectorHeightEncoder; ITubeHeightController* m_motorTubeHorizontal; ISensorADController* m_adTubeHorizontal; ISensorEncoderController* m_encoderTubeHorizontal; IOutputController* m_tubeLineMotionSwitch; ISensorADController* m_detectorHorizontalAD; ISensorEncoderController* m_detectorHorizontalEncoder; int m_tubeHeightMotionPeriod; int m_tubeAngleMotionPeriod; int m_tubeRotateLandmarkDirection; int m_tubeHeightLandmarkDirection; int m_tubeHeightAxisPositiveDirection; int m_tubeRotateAxisPositiveDirection; float m_autoCalADPhysicalEachStep; int m_tubeHorizontalMotionPeriod; int m_tubeHorizontalLandmarkDirection; int m_tubeHorizontalAxisPositiveDirection; }; }