/// <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)); }
private LeverDesign GetLeverDesign(DesignType type, IRobotLever lever) { return(new LeverDesign() { DesignType = type, Items = GetLeverItems(lever), ABZero = lever.ABzero, IsAbIncreases = lever.IsABIncreasesOnStepperCW }); }
/// <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)); }
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(); }
/// <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("Расчеты для данного экземпляра не реализованы"); }
/// <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("Расчеты для данного экземпляра не реализованы"); }
/// <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("Расчеты для данного экземпляра не реализованы"); }
private double?GetAbZero(LeverDesign design, IRobotLever lever) { return(lever.ABmin > design.ABZero || lever.ABmax > design.ABZero ? null : design.ABZero); }
/// <summary> /// Возвращает количество импульсов для достижения минимального положения плеча. /// </summary> /// <param name="lever">Конструктивные параметры плеча робота-манипулятора</param> /// <returns>Количество импульсов для достижения минимального положения плеча</returns> public static long GetPulsesCountToMinValue(IRobotLever lever) { return(GetPulsesCountToAB(lever, lever.Workspace.ABmin)); }