#pragma once #include "IMotionModel.h" namespace DIOS::Dev::Detail::MachineryECOM { class SelfTestMotionStageArgs; class ITubeAngleController; class ITubeHeightController; class ISensorADController; class ISensorEncoderController; class SelfTestModel : public IMotionModel { public: SelfTestModel(); ~SelfTestModel(); 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 OnStageAutoSelfTest(); void OnStageTubeHeightMoveToTarget(); void OnStageTubeHeightMoveBack(); void OnStageTubeAngleRotateToTarget(); void OnStageTubeAngleRotateBack(); void MoveMech(int dof, float current, float target,int period,float dutyCycle); void RotateTubeAngle(float current, float target, int period, float dutyCycle); void MoveTubeHeight(float current, float target, int period, float dutyCycle); int JudgeDirectionInTubeHeightAxis(float current, float target); int JudgeDirectionInTubeAngleAxis(float current, float target); private: std::string m_StageName; SelfTestMotionStageArgs *m_stageArgs; IPositionManager *m_coordinates; ITubeAngleController *m_tubeAngle; ITubeHeightController *m_tubeHeight; }; }