using MECF.Framework.Common.CommonData;
using System.Drawing;
using System.Runtime.Serialization;
namespace MECF.Framework.Common.Simulator
{
    /// 
    /// 电机运动阶段
    /// 
    public enum MotionPhase
    {
        Accelerating,
        Decelerating,
        ConstantSpeed
    };
    [DataContract]
    public class SimulatorMotionData : NotifiableItem
    {
        #region 属性   
        [DataMember]
        public bool SwitchSignal
        {
            get { return _switchSignal; }
            set { _switchSignal = value; InvokePropertyChanged(nameof(SwitchSignal)); }
        }
        [DataMember]
        public byte StopCode
        {
            get { return _stopCode; }
            set { _stopCode = value; InvokePropertyChanged(nameof(StopCode)); }
        }
        [DataMember]
        public int PositionError
        {
            get { return _positionError; }
            set { _positionError = value; InvokePropertyChanged(nameof(StopCode)); }
        }
        [DataMember]
        public int ActualPosition
        {
            get { return _actualPosition; }
            set { _actualPosition = value; InvokePropertyChanged(nameof(ActualPosition)); }
        }
        [DataMember]
        public int ActualVelocity
        {
            get { return _actualVelocity; }
            set { _actualVelocity = value; InvokePropertyChanged(nameof(ActualVelocity)); }
        }
        [DataMember]
        public int ActualAccel
        {
            get { return _actualAccel; }
            set { _actualAccel = value; InvokePropertyChanged(nameof(ActualAccel)); }
        }
        [DataMember]
        public int ActualDecel
        {
            get { return _actualDecel; }
            set { _actualDecel = value; InvokePropertyChanged(nameof(ActualDecel)); }
        }
        [DataMember]
        public short ActualTorque
        {
            get { return _actualTorque; }
            set { _actualTorque = value; InvokePropertyChanged(nameof(ActualTorque)); }
        }
        [DataMember]
        public int TargetPosition
        {
            get { return _targetPosition; }
            set { _targetPosition = value; InvokePropertyChanged(nameof(TargetPosition)); }
        }
        [DataMember]
        public int TargetVelocity
        {
            get { return _targetVelocity; }
            set { _targetVelocity = value; InvokePropertyChanged(nameof(TargetVelocity)); }
        }
        [DataMember]
        public int TargetAccel
        {
            get { return _targetAccel; }
            set { _targetAccel = value; InvokePropertyChanged(nameof(TargetAccel)); }
        }
        [DataMember]
        public int TargetDecel
        {
            get { return _targetDecel; }
            set { _targetDecel = value; InvokePropertyChanged(nameof(TargetDecel)); }
        }
        [DataMember]
        public short TargetTorque
        {
            get { return _targetTorque; }
            set { _targetTorque = value; InvokePropertyChanged(nameof(TargetTorque)); }
        }
        [DataMember]
        public int HomingVelocity
        {
            get { return _homingVelocity; }
            set { _homingVelocity = value; InvokePropertyChanged(nameof(HomingVelocity)); }
        }
        [DataMember]
        public int HomingOffSet
        {
            get { return _homingOffSet; }
            set { _homingOffSet = value; InvokePropertyChanged(nameof(HomingOffSet)); }
        }
        [DataMember]
        public int HomingTimeout
        {
            get { return _homingTimeOut; }
            set { _homingTimeOut = value; InvokePropertyChanged(nameof(HomingTimeout)); }
        }
        [DataMember]
        public int HomingAccel
        {
            get { return _homingAccel; }
            set { _homingAccel = value; InvokePropertyChanged(nameof(HomingAccel)); }
        }
        [DataMember]
        public int HomingDecel
        {
            get { return _homingDecel; }
            set { _homingDecel = value; InvokePropertyChanged(nameof(HomingDecel)); }
        }
        [DataMember]
        public int RevSoftLimit
        {
            get { return _revSoftLimit; }
            set { _revSoftLimit = value; InvokePropertyChanged(nameof(RevSoftLimit)); }
        }
        [DataMember]
        public int FwdSoftLimit
        {
            get { return _fwdSoftLimit; }
            set { _fwdSoftLimit = value; InvokePropertyChanged(nameof(FwdSoftLimit)); }
        }
        [DataMember]
        public int NegativeTorqueLimit
        {
            get { return _negativeTorqueLimit; }
            set { _negativeTorqueLimit = value; InvokePropertyChanged(nameof(NegativeTorqueLimit)); }
        }
        [DataMember]
        public int PositiveTorqueLimit
        {
            get { return _positiveTorqueLimit; }
            set { _positiveTorqueLimit = value; InvokePropertyChanged(nameof(PositiveTorqueLimit)); }
        }
        [DataMember]
        public bool HomingSignal
        {
            get { return _homingSignal; }
            set { _homingSignal = value; InvokePropertyChanged(nameof(HomingSignal)); }
        }
        [DataMember]
        public bool MotionSignal
        {
            get { return _motionSignal; }
            set { _motionSignal = value; InvokePropertyChanged(nameof(MotionSignal)); }
        }
        [DataMember]
        public MotionPhase MotionPhase
        {
            get { return _motionPhase; }
            set { _motionPhase = value; InvokePropertyChanged(nameof(MotionPhase)); }
        }
        [DataMember]
        public bool StopSignal
        {
            get { return _stopSignal; }
            set { _stopSignal = value; InvokePropertyChanged(nameof(StopSignal)); }
        }
        [DataMember]
        public string ModuleName
        {
            get { return _moduleName; }
            set { _moduleName = value; InvokePropertyChanged(nameof(ModuleName)); }
        }
        [DataMember]
        public bool ForwardLimit
        {
            get { return _forwardLimit; }
            set { _forwardLimit = value; InvokePropertyChanged(nameof(ForwardLimit)); }
        }
        [DataMember]
        public bool ReverseLimit
        {
            get { return _reverseLimit; }
            set { _reverseLimit = value; InvokePropertyChanged(nameof(ReverseLimit)); }
        }
        [DataMember]
        public bool FIHomingSignal
        {
            get { return _fIHomingSignal; }
            set { _fIHomingSignal = value; InvokePropertyChanged(nameof(FIHomingSignal)); }
        }
        #endregion
        #region 内部变量
        #region Signal
        private bool _switchSignal;
        private bool _fIHomingSignal;
        private bool _homingSignal;
        private bool _motionSignal;       
        private bool _stopSignal;
        private MotionPhase _motionPhase;
        private bool _forwardLimit;
        private bool _reverseLimit;
        #endregion
        private byte _stopCode;
        private int _positionError;
        /// 
        /// 实际参数
        /// 
        private int _actualPosition;   
        private int _actualVelocity;   
        private int _actualAccel;
        private int _actualDecel;
        private short _actualTorque;
        /// 
        /// 设定参数
        /// 
        private int _targetPosition;
        private int _targetVelocity;
        private int _targetAccel;
        private int _targetDecel;
        private short _targetTorque;
        /// 
        /// Home相关设定参数
        /// 
        private int _homingVelocity;
        private int _homingOffSet;
        private int _homingTimeOut;
        private int _homingAccel;
        private int _homingDecel;
        private int _revSoftLimit;
        private int _fwdSoftLimit;
        private int _negativeTorqueLimit;
        private int _positiveTorqueLimit;
        private string _moduleName;
        #endregion
    }
}