#pragma once #include "IMotionModel.h" namespace DiosCtrlBox { class CBCTMotionStageArgs; class ICircularController; class ISwingController; class ISensorEncoderController; class IExposureController; class CBCTMotionModel : public IMotionModel { public: CBCTMotionModel(); ~CBCTMotionModel(); 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; private: void OnMotionStage(const std::string &stageName); void MotionStageClearParams(); void MotionStageCalculateParams(); void MotionStageSetCBCTMotionSlice(); void MotionStageMovetoEndPos(); void MotionStageMovetoStartPos(); void MotionStageErrorStop(); void MotionStageErrorRecover(); void TubeSwingToStartPostion(); void TubeCircularToStartPosition(); int JudgeDirectionInTubeSwingAxis(float current, float target); void RotateTubeSwing(int direction, float offset); int JudgeDirectionInTubeHeightAxis(float current, float target); void MoveTubeCircular(int direction, float offset, float speed = 0.0f); private: std::string m_StageName; CBCTMotionStageArgs *m_stageArgs; IPositionManager *m_coordinates; IMachineryManager *m_machineryManager; ICircularController *m_circular; ISwingController *m_swing; ISensorEncoderController *m_circularencoder; ISensorEncoderController *m_swingencoder; IExposureController *m_exposure; ResDataObject m_MachineryParams; ResDataObject m_ModelParams; ResDataObject m_TechnicalParams; float m_startPos; float m_endPos; std::vector m_exposureTriggerSlice; std::vector m_FeedbackTubeCircularEncoders; }; }