Beispiel #1
0
        /// <summary>
        /// Возвращает количество импульсов для достижения нулевого положения плеча.
        /// </summary>
        /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param>
        /// <returns>Количество импульсов для достижения нулевого положения плеча</returns>
        public static long GetPulsesCountToZeroValue(IRobotLever lever)
        {
            if (lever.Workspace.ABzero == null)
            {
                throw new DesignParametersException("Нулевая точка не задана");
            }

            return(GetPulsesCountToAB(lever, (double)lever.Workspace.ABzero));
        }
Beispiel #2
0
 private LeverDesign GetLeverDesign(DesignType type, IRobotLever lever)
 {
     return(new LeverDesign()
     {
         DesignType = type,
         Items = GetLeverItems(lever),
         ABZero = lever.ABzero,
         IsAbIncreases = lever.IsABIncreasesOnStepperCW
     });
 }
Beispiel #3
0
        /// <summary>
        /// Возвращает количество импульсов для достижения крайнего положения плеча <paramref name="lever"/>
        /// в зависимости от направления движения <paramref name="isCWDirection"/> ротора шагового двигателя.
        /// </summary>
        /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param>
        /// <param name="isCWDirection">Направление движения ротора шагового двигателя</param>
        /// <returns>Количество импульсов для достижения крайнего положения плеча</returns>
        public static long GetPulsesCountByDirection(IRobotLever lever, bool isCWDirection)
        {
            var target = lever.IsABIncreasesOnStepperCW && isCWDirection ? lever.Workspace.ABmax : lever.Workspace.ABmin;

            if (!lever.IsABIncreasesOnStepperCW && !isCWDirection)
            {
                target = lever.Workspace.ABmax;
            }

            return(GetPulsesCountToAB(lever, target));
        }
Beispiel #4
0
        private List <Item> GetLeverItems(IRobotLever lever)
        {
            if (lever is UM160CalculationLib.LeverDesignParameters)
            {
                return(GetLeverItems(lever as UM160CalculationLib.LeverDesignParameters).ToList());
            }

            if (lever is HorizontalLeverDesignParameters)
            {
                return(GetLeverItems(lever as HorizontalLeverDesignParameters).ToList());
            }

            throw new NotImplementedException();
        }
Beispiel #5
0
        /// <summary>
        /// Возвращает количество импульсов для достижения положения <paramref name="abTo"/> из положения <paramref name="abFrom"/>
        /// плеча <paramref name="lever"/>.
        /// </summary>
        /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param>
        /// <param name="abFrom">Начальное положение плеча</param>
        /// <param name="abTo">Конечное положение плеча</param>
        /// <returns>Количество импульсов для перемещения плеча от начального положения в конечное</returns>
        public static long GetPulsesCount(IRobotLever lever, double abFrom, double abTo)
        {
            if (lever is LeverDesignParameters)
            {
                return(GetPulsesCount(lever as LeverDesignParameters, abFrom, abTo));
            }

            if (lever is HorizontalLeverDesignParameters)
            {
                return(GetPulsesCount(lever as HorizontalLeverDesignParameters, abFrom, abTo));
            }

            throw new Exception("Расчеты для данного экземпляра не реализованы");
        }
Beispiel #6
0
        /// <summary>
        /// Рассчитывает значение AB в зависимости от числа импульсов и текущего значения AB.
        /// </summary>
        /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param>
        /// <param name="pulsesCount">Число импульсов</param>
        /// <returns>Новое значение AB</returns>
        public static double GetNewAB(IRobotLever lever, long pulsesCount)
        {
            if (lever is LeverDesignParameters)
            {
                return(GetNewAB(lever as LeverDesignParameters, pulsesCount));
            }

            if (lever is HorizontalLeverDesignParameters)
            {
                return(GetNewAB(lever as HorizontalLeverDesignParameters, pulsesCount));
            }

            throw new Exception("Расчеты для данного экземпляра не реализованы");
        }
Beispiel #7
0
        /// <summary>
        /// Возвращает количество импульсов для достижения значения <paramref name="ab"/>
        /// исходя из текущего положения плеча <paramref name="lever"/>.
        /// </summary>
        /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param>
        /// <param name="ab">Новое положение плеча робота-манипулятора</param>
        /// <returns>Количество импульсов для достижения нового положения плеча</returns>
        public static long GetPulsesCountToAB(IRobotLever lever, double ab)
        {
            if (lever is HorizontalLeverDesignParameters)
            {
                return(GetPulsesCount(lever as HorizontalLeverDesignParameters, ab));
            }

            if (lever is LeverDesignParameters)
            {
                var lvr = lever as LeverDesignParameters;
                return(GetPulsesCount(lvr, lvr.GetAngleByABValue(ab)));
            }

            throw new Exception("Расчеты для данного экземпляра не реализованы");
        }
Beispiel #8
0
 private double?GetAbZero(LeverDesign design, IRobotLever lever)
 {
     return(lever.ABmin > design.ABZero || lever.ABmax > design.ABZero ? null : design.ABZero);
 }
Beispiel #9
0
 /// <summary>
 /// Возвращает количество импульсов для достижения минимального положения плеча.
 /// </summary>
 /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param>
 /// <returns>Количество импульсов для достижения минимального положения плеча</returns>
 public static long GetPulsesCountToMinValue(IRobotLever lever)
 {
     return(GetPulsesCountToAB(lever, lever.Workspace.ABmin));
 }