コード例 #1
0
 /// <summary>
 /// Останавливает шаговый двигатель, перемещающий плечо <paramref name="type"/>, с заданным торможением.
 /// </summary>
 public void Stop(LeverType type)
 {
     if (movingLever != null && movingLever.Type == type)
     {
         worker.Stop();
     }
 }
コード例 #2
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;
        }
コード例 #3
0
ファイル: Lever.cs プロジェクト: Terhands/LazerSharktopus
        public Lever(Game game, int xPos, int yPos, int screenWidth, int screenHeight, LeverType leverType, List<Gate> gates, Texture2D texture)
        {
            position = new Rectangle(xPos, yPos, spriteWidth/2, spriteHeight/2);
            type = leverType;
            status = Status.off;
            leverTexture = texture;

            gatesControlled = gates;
        }
コード例 #4
0
        public StepperSettingsPanel()
        {
            InitializeComponent();

            var leverTypes = Enum.GetValues(typeof(LeverType));

            LeverType[] levers = new LeverType[leverTypes.Length];
            leverTypes.CopyTo(levers, 0);

            cmbLeverType.DataSource = levers.Select(lever => lever.ToRuString()).ToList();
        }
コード例 #5
0
        public void SetCurrentEditWorkspaceModeLeverPosition(LeverType leverType, double currentValue)
        {
            if (GetEditWorkspaceModeActiveLever() != leverType)
            {
                return;
            }

            this.Invoke(new Action(() =>
            {
                lblWorkspaceAB.Text = currentValue.ToString();
            }));
        }
コード例 #6
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);
        }
        public double GetCurrentPosition(LeverType leverType)
        {
            if (leverType == LeverType.Horizontal)
            {
                return(Properties.Settings.Default.HorizontalLeverAB);
            }
            if (leverType == LeverType.Lever1)
            {
                return(Properties.Settings.Default.Lever1AB);
            }
            if (leverType == LeverType.Lever2)
            {
                return(Properties.Settings.Default.Lever2AB);
            }

            throw new NotImplementedException("Получение текущего положения для данного плеча не реализовано");
        }
コード例 #8
0
        public ManualControlItem(LeverType type, Keys keyPos, Keys keyNeg, Keys keyNull, Button btnPos, Button btnNeg, Button btnNull)
        {
            Type = type;
            PositiveDirection = new ManualUserControls(btnPos, keyPos, true);
            NegativeDirection = new ManualUserControls(btnNeg, keyNeg, false);
            NullDirection     = new ManualUserControls(btnNull, keyNull, null);

            foreach (var btn in ControlButtons)
            {
                btn.Paint      += Button_Paint;
                btn.MouseDown  += Button_MouseDown;
                btn.MouseUp    += Button_MouseUp;
                btn.MouseLeave += Button_MouseLeave;
            }

            timer.Tick += Timer_Tick;
        }
コード例 #9
0
        /// <summary>
        /// Возвращает экземпляр класса рабочей зоны плеча на основе его типа <paramref name="type"/>.
        /// </summary>
        /// <returns>Экземпляр класса рабочей зоны плеча</returns>
        public IWorkspace GetLeverByType(LeverType type)
        {
            switch (type)
            {
            case LeverType.Horizontal:
                return(HorizontalLever);

            case LeverType.Lever1:
                return(Lever1);

            case LeverType.Lever2:
                return(Lever2);

            default:
                throw new NotImplementedException();
            }
        }
コード例 #10
0
        /// <summary>
        /// Возвращает наименование подвижного звена робота на русском языке.
        /// </summary>
        /// <param name="leverType">Тип звена</param>
        /// <returns>Наименование подвижного звена робота на русском языке</returns>
        public static string ToRuString(this LeverType leverType)
        {
            if (leverType == LeverType.Horizontal)
            {
                return("Каретка робота");
            }

            if (leverType == LeverType.Lever1)
            {
                return("Плечо");
            }

            if (leverType == LeverType.Lever2)
            {
                return("Предплечье");
            }

            return("");
        }
コード例 #11
0
        /// <summary>
        /// Возвращает экземляр класса, реализующего интерфейс <see cref="IRobotLever"/> по заданному
        /// типу плеча <paramref name="leverType"/>.
        /// </summary>
        public IRobotLever GetRobotLeverByType(LeverType leverType)
        {
            if (leverType == LeverType.Horizontal)
            {
                return(DesignParameters.HorizontalLever);
            }

            if (leverType == LeverType.Lever1)
            {
                return(DesignParameters.Lever1);
            }

            if (leverType == LeverType.Lever2)
            {
                return(DesignParameters.Lever2);
            }

            throw new NotImplementedException("Нет реализации для заданного плеча робота");
        }
コード例 #12
0
        /// <summary>
        /// Устанавливает новое значение для рабочей зоны плеча.
        /// </summary>
        /// <param name="type">Тип плеча</param>
        /// <param name="valueType">Тип значения</param>
        /// <param name="ab">Новое значение</param>
        public void SetValue(LeverType type, MovableValueTypes valueType, double ab)
        {
            var lever = GetLeverByType(type);

            switch (valueType)
            {
            case MovableValueTypes.Max:
                lever.ABmax = ab;
                break;

            case MovableValueTypes.Min:
                lever.ABmin = ab;
                break;

            case MovableValueTypes.Zero:
                lever.ABzero = ab;
                break;

            default: throw new NotImplementedException();
            }
        }
        public void SaveCurrentPosition(LeverType leverType, double currentPosition)
        {
            switch (leverType)
            {
            case LeverType.Horizontal:
                Properties.Settings.Default.HorizontalLeverAB = currentPosition;
                break;

            case LeverType.Lever1:
                Properties.Settings.Default.Lever1AB = currentPosition;
                break;

            case LeverType.Lever2:
                Properties.Settings.Default.Lever2AB = currentPosition;
                break;

            default:
                throw new NotImplementedException("Cохранение текущего положения для данного плеча не реализовано");
            }

            Properties.Settings.Default.Save();
        }
コード例 #14
0
        private void ChangeLeverPosition(LeverType type, long stepsCount)
        {
            var lever = Calculation.GetRobotLeverByType(type);

            var oldValue = lever.AB;

            Calculation.SetNewLeverPosition(type, stepsCount);

            UpdateLocation();

            var newValue = lever.AB;

            LeverPositionChanged(this, new LeverPosition(type, newValue));

            if (lever.Workspace.ABzero == null)
            {
                return;
            }

            if (oldValue == lever.Workspace.ABzero || newValue == lever.Workspace.ABzero)
            {
                OnZeroPositionChanged(this, new LeverZeroPositionEventArgs(type, newValue == lever.Workspace.ABzero));
            }
        }
コード例 #15
0
        /// <summary>
        /// Возвращает истину если плечо робота типа <paramref name="type"/>
        /// находится в нулевой точке рабочей зоны плеча.
        /// </summary>
        /// <param name="type">Тип плеча</param>
        /// <returns>Истина, если плечо в нулевой точке</returns>
        public bool IsOnZeroPosition(LeverType type)
        {
            var lever = Calculation.GetRobotLeverByType(type);

            return(lever.Workspace.ABzero == lever.AB);
        }
コード例 #16
0
 /// <summary>
 /// Предоставляет класс содержащий данные об одном шаге в сценарии.
 /// </summary>
 /// <param name="leverType">Тип плеча робота</param>
 public LeverScriptPosition(LeverType leverType)
 {
     LeverType = leverType;
 }
コード例 #17
0
 /// <summary>
 /// Возвращает строку, представляющую текущий объект.
 /// </summary>
 /// <returns>Строка, представляющая текущий объект.</returns>
 public override string ToString()
 {
     return(string.Format("{0}: {1} ---> {2}", LeverType.ToRuString(), From, To));
 }
コード例 #18
0
 /// <summary>
 /// Служит хэш-функцией по умолчанию
 /// </summary>
 /// <returns>Хэш-код для текущего объекта</returns>
 public override int GetHashCode()
 {
     return(From.GetHashCode() ^ To.GetHashCode() ^ LeverType.GetHashCode());
 }
コード例 #19
0
 /// <summary>
 /// Возвращает количество импульсов для достижения положения нулевой точки
 /// плеча <paramref name="leverType"/>.
 /// </summary>
 public long CalculateStepsToLeverZero(LeverType leverType)
 {
     return(PulseCalculation.GetPulsesCountToZeroValue(GetRobotLeverByType(leverType)));
 }
コード例 #20
0
 /// <summary>
 /// Предоставляет класс, содержащий данные о событии окончания движения плеча робота.
 /// </summary>
 /// <param name="leverType">Тип плеча</param>
 /// <param name="stepsCount">Количество шагов</param>
 /// <param name="stopReason">Причина окончания движения плеча робота</param>
 public LeverMovingEndEventArgs(LeverType leverType, long stepsCount, StepperStopReason stopReason) : base(leverType, stepsCount)
 {
     StopReason = stopReason;
 }
コード例 #21
0
ファイル: StepLever.cs プロジェクト: q2een/ManipulatorControl
 /// <summary>
 /// Предоставляет класс, содержащий данные о количестве шагов шагового двигателя, который управляет плечом.
 /// </summary>
 /// <param name="lever">Тип плеча</param>
 /// <param name="stepsCount">Количество шагов</param>
 public StepLever(LeverType lever, long stepsCount)
 {
     Lever      = lever;
     StepsCount = stepsCount;
 }
コード例 #22
0
 /// <summary>
 /// Предоставляет класс, содержащий данные о событии изменения нулевого положения плеча робота-манипулятора.
 /// </summary>
 /// <param name="leverType">Тип плеча робота-манипулятора</param>
 /// <param name="isOnZeroPosition">Флаг, который указывает находится ли плечо робота в нулевом положении</param>
 public LeverZeroPositionEventArgs(LeverType leverType, bool isOnZeroPosition)
 {
     LeverType        = leverType;
     IsOnZeroPosition = isOnZeroPosition;
 }
コード例 #23
0
 /// <summary>
 /// Возвращает количество импульсов для достижения конечного положения плеча <paramref name="leverType"/>
 /// в зависимости от движения ротора шагового двигателя.
 /// </summary>
 public long CalculateStepsByDirection(LeverType leverType, bool isCWDirection)
 {
     return(PulseCalculation.GetPulsesCountByDirection(GetRobotLeverByType(leverType), isCWDirection));
 }
コード例 #24
0
 /// <summary>
 /// Предоставляет класс содержащий информацию о шаговом двигателе, который приводит в движение плечо
 /// </summary>
 /// <param name="type">Тип плеча робота-манипулятора</param>
 /// <param name="stepper">Экземпляр класса для управления шаговым двигателем</param>
 public LeverStepper(LeverType type, StepperMotor stepper)
 {
     Type    = type;
     Stepper = stepper;
 }
コード例 #25
0
 /// <summary>
 /// Служит хэш-функцией по умолчанию.
 /// </summary>
 /// <returns>Хэш-код указанного объекта</returns>
 public override int GetHashCode()
 {
     return(Position.GetHashCode() ^ LeverType.GetHashCode());
 }
コード例 #26
0
 /// <summary>
 /// Предоставляет класс содержащий данные о положении плеча робота-манипулятора.
 /// </summary>
 /// <param name="leverType">Тип плеча робота</param>
 /// <param name="position">Положение плеча робота.</param>
 public LeverPosition(LeverType leverType, double position)
 {
     LeverType = leverType;
     Position  = position;
 }
コード例 #27
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));
 }
コード例 #28
0
 /// <summary>
 /// Предоставляет данные собитий по изменению параметров рабочей зоны плеча.
 /// </summary>
 /// <param name="leverType">Тип плеча</param>
 /// <param name="valueType">Тип изменяемого значения</param>
 public EditWorkspaceEventArgs(LeverType leverType, MovableValueTypes valueType)
 {
     LeverType = leverType;
     ValueType = valueType;
 }
コード例 #29
0
 /// <summary>
 /// Возвращает новое положения плеча <paramref name="leverType"/> исходя из текущего положения и
 /// количества импульсов <paramref name="stepsCount"/>.
 /// </summary>
 public double GetNewLeverPosition(LeverType leverType, long stepsCount)
 {
     return(PulseCalculation.GetNewAB(GetRobotLeverByType(leverType), stepsCount));
 }
コード例 #30
0
 /// <summary>
 /// Предоставляет класс, связывающий тип плеча с шаговым двигателем, которое его
 /// перемещает и номерами выводов порта для управления ШД.
 /// </summary>
 /// <param name="type">Тип плеча</param>
 /// <param name="pinType">Тип вывода на драйвере</param>
 /// <param name="stepper">Объект шагового двигателя</param>
 public LeverStepperSettings(LeverType type, StepDirPinType pinType, LptStepperMotorControl.Stepper.StepperMotor stepper)
 {
     LeverType = type;
     PinType   = pinType;
     Stepper   = stepper;
 }
コード例 #31
0
 /// <summary>
 /// Возвращает количество импульсов необходимых для достижения положения <paramref name="position"/>
 /// плеча <paramref name="leverType"/>.
 /// </summary>
 public long CalculateStepsToLeverPosition(LeverType leverType, double position)
 {
     return(PulseCalculation.GetPulsesCountToAB(GetRobotLeverByType(leverType), position));
 }