非标框架(7)-机械手抽象类

   /// <summary>
    /// 机械手抽象类
    /// </summary>
    /// <typeparam name="TPrm">参数类型</typeparam>
    public abstract class RobotBase<TPrm> : ICanGetAxisArray, IMsgRobot where TPrm : RobotPrmBase
    {
        /// <summary>
        /// 为了区分多个同类机械手
        /// </summary>
        public int Key { get; set; }
        public RobotBase()
        {
            Key = 0;
        }
        public RobotBase(int key)
        {
            Key = key;
        }
        //获得参数保存的路径
        private string getPath()
        {
            return Constant.SAVE_DIRECTORY + typeof(TPrm).Name +
                Key.ToString() + ".mgr";
        }
        /// <summary>
        /// Calib参数
        /// </summary>
        public TPrm Prm { get; set; }
        /// <summary>
        /// 获得所有轴
        /// </summary>
        /// <returns></returns>
        public abstract Axis[] GetAllAxis();
        public abstract Result Reset();
        /// <summary>
        /// 回原点并阻塞
        /// </summary>
        /// <returns></returns>
        public abstract Result GoHomeAndReply();
        /// <summary>
        /// 暂停运动(暂停插补运动)
        /// </summary>
        public abstract void StopGoHome();

        public abstract void Pause();
        /// <summary>
        /// 停止所有轴的运动
        /// </summary>
        /// <returns></returns>
        public Result StopAllAxis(bool isAbout = false)
        {
            Result rst = null;
            Result lastRst = null;
            foreach (var axis in GetAllAxis())
            {
                rst = axis.Stop(isAbout);
                if (!rst.IsOk)
                {
                    lastRst = rst;
                }
            }
            if (lastRst == null)
            {
                return rst;
            }
            else
            {
                return lastRst;
            }
        }
        /// <summary>
        /// 设置所有轴的上电状态,true为上电,false为断电
        /// </summary>
        /// <param name="onOrOff"></param>
        /// <returns></returns>
        public void SetAllAxisServo(bool onOrOff)
        {
            foreach (var axis in GetAllAxis())
            {
                axis.Servo = onOrOff;
                Thread.Sleep(200);
            }
        }
        /// <summary>
        /// 加载参数
        /// </summary>
        /// <returns></returns>
        public bool LoadPrm()
        {
            try
            {
                string json = System.IO.File.ReadAllText(getPath());
                this.Prm = JsonConvert.DeserializeObject<TPrm>(json);
                return true;
            }
            catch
            {
                return false;
            }
        }
        /// <summary>
        /// 保存参数
        /// </summary>
        /// <returns></returns>
        public bool SavePrm()
        {
            try
            {
                if (!Directory.Exists(Constant.SAVE_DIRECTORY))
                {
                    Directory.CreateDirectory(Constant.SAVE_DIRECTORY);
                }
                Prm.SavedTime = DateTime.Now;
                string json = JsonConvert.SerializeObject(Prm, Formatting.Indented);
                System.IO.File.WriteAllText(getPath(), json);
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章