コード例 #1
0
        /// <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;
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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)));
        }
コード例 #4
0
 /// <summary>
 /// Возвращает значение координаты Z при перемещении каретки робота от
 /// его текущего положения на заданное количестве импульсов <paramref name="stepsCount"/>.
 /// </summary>
 public double GetZ(long stepsCount)
 {
     return(PulseCalculation.GetNewAB(DesignParameters.HorizontalLever, stepsCount));
 }
コード例 #5
0
 /// <summary>
 /// Возвращает количество импульсов необходимых для достижения положения <paramref name="position"/>
 /// плеча <paramref name="leverType"/>.
 /// </summary>
 public long CalculateStepsToLeverPosition(LeverType leverType, double position)
 {
     return(PulseCalculation.GetPulsesCountToAB(GetRobotLeverByType(leverType), position));
 }
コード例 #6
0
 /// <summary>
 /// Возвращает количество импульсов для достижения положения нулевой точки
 /// плеча <paramref name="leverType"/>.
 /// </summary>
 public long CalculateStepsToLeverZero(LeverType leverType)
 {
     return(PulseCalculation.GetPulsesCountToZeroValue(GetRobotLeverByType(leverType)));
 }
コード例 #7
0
 /// <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));
 }
コード例 #8
0
 /// <summary>
 /// Возвращает количество импульсов для достижения конечного положения плеча <paramref name="leverType"/>
 /// в зависимости от движения ротора шагового двигателя.
 /// </summary>
 public long CalculateStepsByDirection(LeverType leverType, bool isCWDirection)
 {
     return(PulseCalculation.GetPulsesCountByDirection(GetRobotLeverByType(leverType), isCWDirection));
 }
コード例 #9
0
 /// <summary>
 /// Возвращает новое положения плеча <paramref name="leverType"/> исходя из текущего положения и
 /// количества импульсов <paramref name="stepsCount"/>.
 /// </summary>
 public double GetNewLeverPosition(LeverType leverType, long stepsCount)
 {
     return(PulseCalculation.GetNewAB(GetRobotLeverByType(leverType), stepsCount));
 }
コード例 #10
0
 /// <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)));
 }
コード例 #11
0
 /// <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);
 }