非標框架(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;
            }
        }
    }

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