#pragma once #include "IMotionModel.h" namespace DIOS::Dev::Detail::MachineryECOM { class ResetMotionStageArgs; class ICircularController; class ISwingController; class ISensorEncoderController; class ILandmarkController; class IOutputController; class CArmResetMotionModel : public IMotionModel { public: CArmResetMotionModel(); ~CArmResetMotionModel(); 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 &stageName); void OnMotionStageStopMove(); void OnMotionStageFindSwingLandmark(); void OnMotionStageFindCircularLandmark(); void OnMotionStageAttachSwingZAxis(); void OnMotionStageDetachSwingZAxis(); void OnMotionStageAttachCircularZAxis(); void OnMotionStageDetachCircularZAxis(); void OnMotionStageSwingFinish(); void OnMotionStageCircularFinish(); void OnMotionStageSwingStopAtLandmark(); void OnMotionStageCircularStopAtLandmark(); BOOL IsTubeSwingAtResetLandmark(); int JudgeTubeSwingLandmarkDirection(); BOOL IsTubeCircularAtResetLandmark(); int JudgeTubeCircularLandmarkDirection(); float GetTubeSwingResetPosition(); int JudgeSwingDirection(float current,float target); float GetTubeCircularResetPosition(); int JudgeCircularDirection(float current, float target); void OnStartExposure(); void OnStopExposure(); private: std::string m_StageName; ResetMotionStageArgs *m_stageArgs; IPositionManager *m_coordinates; ICircularController *m_circular; ISwingController *m_swing; ISensorEncoderController *m_circularencoder; ISensorEncoderController *m_swingencoder; ILandmarkController *m_landmark; IOutputController* m_fluoroSwitch; DWORD m_resetSwingPeriod; DWORD m_resetCircularPeriod; int m_tubeSwingLandmarkDirection; int m_tubeCircularLandmarkDirection; float m_tubeSwingResetAngle; float m_tubeCircularResetAngle; int m_tubeCircularAxisPositiveDirection; int m_tubeSwingAxisPositiveDirection; }; }