public override void Stop(StopMode mode) { Historique.AjouterAction(new ActionStop(this, mode)); _lockMove.WaitOne(); if (mode == StopMode.Smooth) { Position nouvelleDestination = new Position(Position.Angle, new RealPoint(_currentPosition.Coordinates.X, _currentPosition.Coordinates.Y)); if (IsInLineMove) { if (_sensMove == SensAR.Avant) { nouvelleDestination.Move(GetCurrentLineBreakDistance()); } else { nouvelleDestination.Move(-GetCurrentLineBreakDistance()); } } _destination = nouvelleDestination; } else if (mode == StopMode.Abrupt) { _currentSpeed = 0; _destination = Position; } _lockMove.Release(); }
public override void MoveForward(int distance, bool wait = true) { base.MoveForward(distance, wait); IsInLineMove = true; if (distance > 0) { if (!_inRecalibration) { Historique.AjouterAction(new ActionAvance(this, distance)); } _sensMove = SensAR.Avant; } else { if (!_inRecalibration) { Historique.AjouterAction(new ActionRecule(this, -distance)); } _sensMove = SensAR.Arriere; } _destination = new Position(Position.Angle, new RealPoint(Position.Coordinates.X + distance * Position.Angle.Cos, Position.Coordinates.Y + distance * Position.Angle.Sin)); // TODO2018 attente avec un sémaphore ? if (wait) { while ((Position.Coordinates.X != _destination.Coordinates.X || Position.Coordinates.Y != _destination.Coordinates.Y) && !Execution.Shutdown) { Thread.Sleep(10); } } }
public override void MoveBackward(int distance, bool wait = true) { base.MoveBackward(distance, wait); if (wait) { _lockFrame[UdpFrameFunction.FinDeplacement] = new Semaphore(0, int.MaxValue); } IsInLineMove = true; Frame frame; if (distance < 0) { frame = UdpFrameFactory.Deplacer(SensAR.Avant, -distance, this); } else { frame = UdpFrameFactory.Deplacer(SensAR.Arriere, distance, this); } _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionRecule(this, distance)); if (wait) { //if (!SemaphoresTrame[FrameFunction.FinDeplacement].WaitOne((int)SpeedConfig.LineDuration(distance).TotalMilliseconds)) // Thread.Sleep(1000); // Tempo de secours, on a jamais reçu la fin de trajectoire après la fin du délai théorique _lockFrame[UdpFrameFunction.FinDeplacement].WaitOne(); } }
private void SpeedConfig_ParamChange(bool lineAccelChange, bool lineDecelChange, bool lineSpeedChange, bool pivotAccelChange, bool pivotDecelChange, bool pivotSpeedChange) { if (lineSpeedChange) { Frame frame = UdpFrameFactory.VitesseLigne(SpeedConfig.LineSpeed, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionVitesseLigne(this, SpeedConfig.LineSpeed)); } if (lineAccelChange || lineDecelChange) { Frame frame = UdpFrameFactory.AccelLigne(SpeedConfig.LineAcceleration, SpeedConfig.LineDeceleration, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionAccelerationLigne(this, SpeedConfig.LineAcceleration, SpeedConfig.LineDeceleration)); } if (pivotSpeedChange) { Frame frame = UdpFrameFactory.VitessePivot(SpeedConfig.PivotSpeed, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionVitessePivot(this, SpeedConfig.PivotSpeed)); } if (pivotAccelChange || pivotDecelChange) { Frame frame = UdpFrameFactory.AccelPivot(SpeedConfig.PivotAcceleration, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionAccelerationPivot(this, SpeedConfig.PivotAcceleration, SpeedConfig.PivotDeceleration)); } }
public virtual void SetMotorSpeed(MotorID moteur, SensGD sens, int vitesse) { if (MotorState.ContainsKey(moteur)) { MotorState[moteur] = vitesse == 0 ? false : true; } Historique.AjouterAction(new ActionMoteur(this, vitesse, moteur)); }
public override void SetActuatorOnOffValue(ActuatorOnOffID actuator, bool on) { ActuatorOnOffState[actuator] = on; Frame frame = UdpFrameFactory.ActionneurOnOff(_boardActuatorOnOff[actuator], actuator, on); Connections.UDPBoardConnection[_boardActuatorOnOff[actuator]].SendMessage(frame); Historique.AjouterAction(new ActionOnOff(this, actuator, on)); }
public override void Stop(StopMode mode = StopMode.Smooth) { AsserEnable = (mode != StopMode.Freely); IsInLineMove = false; Frame frame = UdpFrameFactory.Stop(mode, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionStop(this, mode)); }
public override void Recalibration(SensAR sens, bool wait = true, bool sendOffset = false) { _inRecalibration = true; Historique.AjouterAction(new ActionRecallage(this, sens)); if (wait) { RecalProcedure(sens); } else { ThreadManager.CreateThread(link => RecalProcedure(sens)).StartThread(); } base.Recalibration(sens, wait, sendOffset); }
public override void PivotRight(AngleDelta angle, bool wait = true) { base.PivotRight(angle, wait); angle = Math.Round(angle, 2); Historique.AjouterAction(new ActionPivot(this, angle, SensGD.Droite)); _destination = new Position(Position.Angle + angle, new RealPoint(Position.Coordinates.X, Position.Coordinates.Y)); _sensPivot = SensGD.Droite; if (wait) { while (Position.Angle != _destination.Angle) { Thread.Sleep(10); } } }
public override void Turn(SensAR sensAr, SensGD sensGd, int radius, AngleDelta angle, bool wait = true) { if (wait) { _lockFrame[UdpFrameFunction.FinDeplacement] = new Semaphore(0, int.MaxValue); } Frame frame = UdpFrameFactory.Virage(sensAr, sensGd, radius, angle, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionVirage(this, radius, angle, sensAr, sensGd)); if (wait) { _lockFrame[UdpFrameFunction.FinDeplacement].WaitOne(); } }
public override void Recalibration(SensAR sens, bool wait = true, bool sendOffset = false) { if (wait) { _lockFrame[UdpFrameFunction.FinDeplacement] = new Semaphore(0, int.MaxValue); } Frame frame = UdpFrameFactory.Recallage(sens, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionRecallage(this, sens)); if (wait) { _lockFrame[UdpFrameFunction.FinDeplacement].WaitOne(); } base.Recalibration(sens, wait, sendOffset); }
public override void PivotRight(AngleDelta angle, bool wait = true) { base.PivotRight(angle, wait); if (wait) { _lockFrame[UdpFrameFunction.FinDeplacement] = new Semaphore(0, int.MaxValue); } Frame frame = UdpFrameFactory.Pivot(SensGD.Droite, angle, this); _asserConnection.SendMessage(frame); Historique.AjouterAction(new ActionPivot(this, angle, SensGD.Droite)); if (wait) { //if (!SemaphoresTrame[FrameFunction.FinDeplacement].WaitOne((int)SpeedConfig.PivotDuration(angle, Entraxe).TotalMilliseconds)) // Thread.Sleep(1000); // Tempo de secours, on a jamais reçu la fin de trajectoire après la fin du délai théorique _lockFrame[UdpFrameFunction.FinDeplacement].WaitOne(); } }
public virtual void SetMotorAcceleration(MotorID moteur, int acceleration) { Historique.AjouterAction(new ActionMoteur(this, acceleration, moteur)); }
public override void SetActuatorOnOffValue(ActuatorOnOffID actuator, bool on) { // TODO Historique.AjouterAction(new ActionOnOff(this, actuator, on)); }