#pragma once #include "ITubeAngleController.h" #include "DiosBoardCtrlParams.h" namespace DIOS::Dev::Detail::MachineryECOM { struct RS232_PARAM; class TubeAngleController : public ITubeAngleController { public: TubeAngleController(); ~TubeAngleController(); public: static std::string CLASSID(); public: 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 ClearSignal() override; virtual void AppendPWM(int steps, int period,float pulseDutyCycle = 0.0f) override; virtual void ClearServoDriveWarning() override; virtual void SetServoStatus(int svostatus) override; protected: virtual void InitializeServo(); private: void ActivePWMMode(); void ServoOn(BOOL servoon); void DoWrite485(RS232_PARAM ¶m); bool IsBrakeOpening(); private: ICommunicateEntity *m_communicate; int m_driveNumber; float m_pulseDutyCycle; IServoDrive *m_servo; }; }