#pragma once #include "ICircularController.h" namespace DIOS::Dev::Detail::MachineryECOM { struct RS232_PARAM; class TubeCircularController : public ICircularController { public: TubeCircularController(); ~TubeCircularController(); public: static std::string CLASSID(); virtual void Initialize(const std::string &name) override; virtual void AttachServoDrive(IServoDrive *servodrive) override; virtual void SetPulseOneCircle(unsigned short pulseonecircle) override; virtual void SetPulseDutyCycle(float dutyCycle) override; virtual void OnCommunicationEstablished(ICommunicateEntity *communicate) override; virtual void StopRotation() override; virtual void Rotate(int direction, int steps, DWORD pwmperiod, float pulseDutyCycle = 0.0f) override; virtual void SetRotateOrientation(bool clockWise) override; virtual void SetServoStatus(int svostatus) override; protected: virtual void InitializeServo(); private: void ActivePWMMode(); void ServoOn(BOOL servoon); void DoWrite485(RS232_PARAM ¶m); private: ICommunicateEntity *m_communicate; int m_driveNumber; int m_pulseInOneCircle; float m_pulseDutyCycle; IServoDrive *m_servo; }; }