/// <summary> /// Устанавливает в конструктивные параметры <see cref="DesignParameters"/> новое положения плеча <paramref name="leverType"/> исходя из /// текущего положения и количества импульсов <paramref name="stepsCount"/>. /// </summary> /// <param name="leverType"></param> /// <param name="stepsCount"></param> public void SetNewLeverPosition(LeverType leverType, long stepsCount) { var lever = GetRobotLeverByType(leverType); var newABvalue = PulseCalculation.GetNewAB(lever, stepsCount); lever.AB = newABvalue; }
/// <summary> /// Возвращает значение координат X (<paramref name="x"/>) и Y(<paramref name="y"/>) при перемещении плеча <paramref name="type"/> /// от его текущего положения на заданное количестве импульсов <paramref name="stepsCount"/>. /// </summary> public void GetXY(LeverType type, long stepsCount, out double x, out double y) { if (type == LeverType.Horizontal) { throw new ArgumentException(); } var newABvalue = PulseCalculation.GetNewAB(GetRobotLeverByType(type), stepsCount); var lever1Ab = type == LeverType.Lever1 ? newABvalue : DesignParameters.Lever1.AB; var lever2Ab = type == LeverType.Lever2 ? newABvalue : DesignParameters.Lever2.AB; GetXYByABValues(lever1Ab, lever2Ab, out x, out y); }
/// <summary> /// Возвращает коллекцию экземпляров класса <see cref="StepLever"/>, указывающий какое количество /// импульсов необходимо подать на каждое из плеч робота-манипулятора для достижения координат /// <paramref name="toX"/> и <paramref name="toY"/>, учитывая что текущее /// положение <paramref name="fromX"/> и <paramref name="fromY"/>. /// </summary> public IEnumerable <StepLever> CalculateStepLeverToXY(double fromX, double toX, double fromY, double toY) { var anglesOld = AnglesCalculation.GetAngles(DesignParameters, fromX, fromY, 0).First(); var anglesNew = AnglesCalculation.GetAngles(DesignParameters, toX, toY, 0).First(); var lever1from = DesignParameters.Lever1.GetABValueByAngle(anglesOld.Phi1); var lever1to = DesignParameters.Lever1.GetABValueByAngle(anglesNew.Phi1); var lever2from = DesignParameters.Lever2.GetABValueByAngle(anglesOld.Phi2); var lever2to = DesignParameters.Lever2.GetABValueByAngle(anglesNew.Phi2); yield return(new StepLever(LeverType.Lever1, PulseCalculation.GetPulsesCount(DesignParameters.Lever1, lever1from, lever1to))); yield return(new StepLever(LeverType.Lever2, PulseCalculation.GetPulsesCount(DesignParameters.Lever2, lever2from, lever2to))); }
/// <summary> /// Возвращает значение координаты Z при перемещении каретки робота от /// его текущего положения на заданное количестве импульсов <paramref name="stepsCount"/>. /// </summary> public double GetZ(long stepsCount) { return(PulseCalculation.GetNewAB(DesignParameters.HorizontalLever, stepsCount)); }
/// <summary> /// Возвращает количество импульсов необходимых для достижения положения <paramref name="position"/> /// плеча <paramref name="leverType"/>. /// </summary> public long CalculateStepsToLeverPosition(LeverType leverType, double position) { return(PulseCalculation.GetPulsesCountToAB(GetRobotLeverByType(leverType), position)); }
/// <summary> /// Возвращает количество импульсов для достижения положения нулевой точки /// плеча <paramref name="leverType"/>. /// </summary> public long CalculateStepsToLeverZero(LeverType leverType) { return(PulseCalculation.GetPulsesCountToZeroValue(GetRobotLeverByType(leverType))); }
/// <summary> /// Возвращает количество импульсов для достижения положения <paramref name="to"/> из положения <paramref name="from"/> /// плеча <paramref name="leverType"/>. /// </summary> public long CalculateSteps(LeverType leverType, double from, double to) { return(PulseCalculation.GetPulsesCount(GetRobotLeverByType(leverType), from, to)); }
/// <summary> /// Возвращает количество импульсов для достижения конечного положения плеча <paramref name="leverType"/> /// в зависимости от движения ротора шагового двигателя. /// </summary> public long CalculateStepsByDirection(LeverType leverType, bool isCWDirection) { return(PulseCalculation.GetPulsesCountByDirection(GetRobotLeverByType(leverType), isCWDirection)); }
/// <summary> /// Возвращает новое положения плеча <paramref name="leverType"/> исходя из текущего положения и /// количества импульсов <paramref name="stepsCount"/>. /// </summary> public double GetNewLeverPosition(LeverType leverType, long stepsCount) { return(PulseCalculation.GetNewAB(GetRobotLeverByType(leverType), stepsCount)); }
/// <summary> /// Возвращает экземпляр класса <see cref="StepLever"/>, указывающий какое количество /// импульсов необходимо подать на каретку робота-манипулятора для достижения координаты /// <paramref name="toZ"/>, учитывая что текущее <paramref name="fromZ"/>. /// </summary> public StepLever CalculateStepLeverToZ(double fromZ, double toZ) { return(new StepLever(LeverType.Horizontal, PulseCalculation.GetPulsesCount(DesignParameters.HorizontalLever, fromZ, toZ))); }
/// <summary> /// Проверяет возможно ли переместить схват робота в заданные координаты <paramref name="x"/>, <paramref name="y"/>, <paramref name="z"/>. /// </summary> public void CheckValues(double x, double y, double z) { // В случае некорректных данных выбросит исключение. AnglesCalculation.GetAngles(DesignParameters, x, y, 0); PulseCalculation.GetPulsesCount(DesignParameters.HorizontalLever, z); }