#pragma once #include "IMotionModel.h" namespace DIOS::Dev::Detail::MachineryECOM { class CArmGeneralMotionStageArgs; class ICircularController; class ISwingController; class ISensorEncoderController; class IPositionManager; class IOutputController; class CArmGeneralModel : public IMotionModel { public: CArmGeneralModel(); ~CArmGeneralModel(); 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 OnMotionStageMoveTubeCircular(); void OnMotionStageMoveTubeSwing(); void OnMotionStageGetTubeCircularEncoder(); void OnMotionStageGetTubeSwingEncoder(); void OnMotionStageActiveTubeSwingZAxis(); void OnMotionStageCancleTubeSwingZAxis(); void OnMotionStageActiveTubeCircularZAxis(); void OnMotionStageCancleTubeCircularZAxis(); void OnMotionStageStopMechMoving(); void OnMotionStageMoveTubeSwingAsPhysical(); void OnMotionStageMoveTubeCircularAsPhysical(); void OnStartExposure(); void OnStopExposure(); private: std::string m_StageName; CArmGeneralMotionStageArgs *m_stageArgs; IPositionManager *m_coordinates; ICircularController *m_circular; ISwingController *m_swing; ISensorEncoderController *m_circularencoder; ISensorEncoderController *m_swingencoder; IOutputController* m_fluoroSwitch; DWORD m_tubeCircularMotionPeriod; DWORD m_tubeSwingMotionPeriod; }; }