Пример #1
0
 public CanServo this[ServomoteurID servoGlobalId]
 {
     get
     {
         return(_servos[servoGlobalId]);
     }
 }
Пример #2
0
        /// <summary>
        /// Retourne le nom de la position en fonction du servomoteur (Ouvert, fermé, etc...)
        /// </summary>
        /// <param name="position">Position du servomoteur</param>
        /// <param name="servo">Servomoteur</param>
        /// <returns>Nom de la position</returns>
        public static String GetName(int position, ServomoteurID servo)
        {
            PropertyInfo[] properties = typeof(Config).GetProperties();
            foreach (PropertyInfo p in properties)
            {
                if (p.PropertyType.IsSubclassOf(typeof(PositionableServo)))
                {
                    PositionableServo positionnableServo = (PositionableServo)(p.GetValue(Config.CurrentConfig, null));

                    if (positionnableServo.ID == servo)
                    {
                        PropertyInfo[] proprietesServo = positionnableServo.GetType().GetProperties();
                        foreach (PropertyInfo ps in proprietesServo)
                        {
                            if (ps.Name.StartsWith("Position") && ((int)(ps.GetValue(positionnableServo, null)) == position))
                            {
                                return(Config.PropertyNameToScreen(ps) + " (" + position + ")");
                            }
                        }
                    }
                }
            }

            return(position.ToString());
        }
Пример #3
0
        /// <summary>
        /// Retourne le nom usuel du servomoteur
        /// </summary>
        /// <param name="servo">Servomoteur recherché</param>
        /// <returns>Nom usuel</returns>
        public static String GetName(ServomoteurID servo)
        {
            switch (servo)
            {
            case ServomoteurID.Clamp1:
                return("crochet gauche");

            case ServomoteurID.Clamp2:
                return("crochet milieu gauche");

            case ServomoteurID.Clamp3:
                return("crochet milieu");

            case ServomoteurID.Clamp4:
                return("crochet milieu droite");

            case ServomoteurID.Clamp5:
                return("crochet droite");

            case ServomoteurID.FingerLeft:
                return("doigt gauche");

            case ServomoteurID.FingerRight:
                return("doigt droite");

            case ServomoteurID.FlagLeft:
                return("drapeau gauche");

            case ServomoteurID.FlagRight:
                return("drapeau droite");

            case ServomoteurID.GrabberLeft:
                return("rabatteur gauche");

            case ServomoteurID.GrabberRight:
                return("rabatteur droite");

            case ServomoteurID.Lifter:
                return("monteur crochets");

            case ServomoteurID.LockerLeft:
                return("verrouilleur gauche");

            case ServomoteurID.LockerRight:
                return("verrouilleur droite");

            case ServomoteurID.PushArmLeft:
                return("bras sortie gauche");

            case ServomoteurID.PushArmRight:
                return("bras sortie droite");

            case ServomoteurID.Tilter:
                return("rotationneur crochets");

            default:
                return(servo.ToString());
            }
        }
Пример #4
0
        private PositionableServo FindPositionnableFromServo(ServomoteurID servo)
        {
            PropertyInfo[] properties = Config.CurrentConfig.GetType().GetProperties();

            List <PositionableServo> positionnables = properties.Where(o => typeof(PositionableServo).IsAssignableFrom(o.PropertyType)).Select(o => o.GetValue(Config.CurrentConfig, null)).Cast <PositionableServo>().ToList();

            return(positionnables.Where(o => o.ID == servo).FirstOrDefault());
        }
Пример #5
0
 public CanServo(ServomoteurID id, iCanSpeakable communication)
 {
     _id            = (ServomoteurID)((int)id % 100);
     _communication = communication;
     _lockResponse  = new Semaphore(0, int.MaxValue);
     _enableAutoCut = false;
     _nextDisable   = null;
 }
Пример #6
0
        public static Frame BuildDisableOutput(ServomoteurID id)
        {
            byte[] tab = new byte[10];

            tab[0] = 0x00;
            tab[1] = (byte)GlobalIdToCanBoard(id);
            tab[2] = (byte)CanFrameFunction.DisableOutput;
            tab[3] = GlobalIdToServoNo(id);

            return(new Frame(tab));
        }
Пример #7
0
        public static Frame BuildGetAcceleration(ServomoteurID id)
        {
            byte[] tab = new byte[10];

            tab[0] = 0x00;
            tab[1] = (byte)GlobalIdToCanBoard(id);
            tab[2] = (byte)CanFrameFunction.AccelerationAsk;
            tab[3] = GlobalIdToServoNo(id);

            return(new Frame(tab));
        }
Пример #8
0
        public static Frame BuildSetTorqueMax(ServomoteurID id, int torque)
        {
            byte[] tab = new byte[10];

            tab[0] = 0x00;
            tab[1] = (byte)GlobalIdToCanBoard(id);
            tab[2] = (byte)CanFrameFunction.TorqueMaxSet;
            tab[3] = GlobalIdToServoNo(id);
            tab[4] = ByteDivide(torque, true);
            tab[5] = ByteDivide(torque, false);

            return(new Frame(tab));
        }
Пример #9
0
        public static Frame BuildSetPositionMin(ServomoteurID id, int position)
        {
            byte[] tab = new byte[10];

            tab[0] = 0x00;
            tab[1] = (byte)GlobalIdToCanBoard(id);
            tab[2] = (byte)CanFrameFunction.PositionMinSet;
            tab[3] = GlobalIdToServoNo(id);
            tab[4] = ByteDivide(position, true);
            tab[5] = ByteDivide(position, false);

            return(new Frame(tab));
        }
Пример #10
0
        public void SetServo(ServomoteurID servo)
        {
            if (_servo is null || _servo.ID != servo)
            {
                numID.Value           = (int)(servo);
                _servo                = AllDevices.CanServos[(ServomoteurID)numID.Value];
                picConnection.Visible = false;
                lblName.Text          = "";
                ReadValues();

                _currentPositionable = FindPositionnableFromServo(servo);
                SetPositions(_currentPositionable);
            }
        }
Пример #11
0
        private void _communication_FrameReceived(Frame frame)
        {
            try
            {
                CanBoard idCan = CanFrameFactory.ExtractBoard(frame);

                if (_canBoards.Contains(idCan))
                {
                    ServomoteurID servoGlobalId = CanFrameFactory.ExtractServomoteurID(frame);
                    _servos[servoGlobalId].FrameReceived(frame);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("ERREUR CAN : " + frame.ToString() + " - " + e.Message);
            }
        }
Пример #12
0
        public static Frame BuildSetTrajectory(ServomoteurID id, int position, int speed, int accel)
        {
            byte[] tab = new byte[10];

            tab[0] = 0x00;
            tab[1] = (byte)GlobalIdToCanBoard(id);
            tab[2] = (byte)CanFrameFunction.TrajectorySet;
            tab[3] = GlobalIdToServoNo(id);
            tab[4] = ByteDivide(position, true);
            tab[5] = ByteDivide(position, false);
            tab[6] = ByteDivide(speed, true);
            tab[7] = ByteDivide(speed, false);
            tab[8] = ByteDivide(accel, true);
            tab[9] = ByteDivide(accel, false);

            return(new Frame(tab));
        }
Пример #13
0
        /// <summary>
        /// Retourne le nom usuel du servomoteur
        /// </summary>
        /// <param name="servo">Servomoteur recherché</param>
        /// <returns>Nom usuel</returns>
        public static String Nommer(ServomoteurID servo)
        {
            switch (servo)
            {
                case ServomoteurID.Tous:
                    return "tous les servomoteurs";
                case ServomoteurID.BrasLunaireAvance:
                    return "bras lunaire linéaire";
                case ServomoteurID.BrasLunaireMonte:
                    return "bras lunaire rotation";
                case ServomoteurID.ServoLunaireSerrageDroit:
                    return "bras lunaire serrage droit";
                case ServomoteurID.ServoLunaireSerrageGauche:
                    return "bras lunaire serrage gauche";

                default:
                    if (servo.ToString().Contains("zzLibre"))
                        return "servo n°" + (int)servo;
                    else
                        return servo.ToString();
            }
        }
Пример #14
0
        /// <summary>
        /// Retourne le nom de la position en fonction du servomoteur (Ouvert, fermé, etc...)
        /// </summary>
        /// <param name="position">Position du servomoteur</param>
        /// <param name="servo">Servomoteur</param>
        /// <returns></returns>
        public static String Nommer(int position, ServomoteurID servo)
        {
            PropertyInfo[] proprietes = typeof(Config).GetProperties();
            foreach (PropertyInfo p in proprietes)
            {
                if (p.PropertyType.IsSubclassOf(typeof(PositionnableServo)))
                {
                    PositionnableServo positionnableServo = (PositionnableServo)(p.GetValue(Config.CurrentConfig, null));

                    if (positionnableServo.ID == servo)
                    {
                        PropertyInfo[] proprietesServo = positionnableServo.GetType().GetProperties();
                        foreach (PropertyInfo ps in proprietesServo)
                        {
                            if (ps.Name.StartsWith("Position") && ((int)(ps.GetValue(positionnableServo, null)) == position))
                                return Config.PropertyNameToScreen(ps) + " (" + position + ")";
                        }
                    }
                }
            }

            return position.ToString();
        }
Пример #15
0
 public static Trame ServoEnvoiId(ServomoteurID servo, char nouvelId, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[5];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiId;
     tab[3] = (byte)servo;
     tab[4] = (byte)nouvelId;
     return new Trame(tab);
 }
Пример #16
0
 public static Trame ServoEnvoiConfigAlarmeShutdown(ServomoteurID servo, bool inputVoltage, bool angleLimit, bool overheating, bool range, bool checksum, bool overload, bool instruction, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[11];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiConfigAlarmeShutdown;
     tab[3] = (byte)servo;
     tab[4] = (byte)(inputVoltage ? 1 : 0);
     tab[5] = (byte)(angleLimit ? 1 : 0);
     tab[6] = (byte)(overheating ? 1 : 0);
     tab[7] = (byte)(range ? 1 : 0);
     tab[8] = (byte)(checksum ? 1 : 0);
     tab[9] = (byte)(overload ? 1 : 0);
     tab[10] = (byte)(instruction ? 1 : 0);
     return new Trame(tab);
 }
Пример #17
0
 public static Trame ServoEnvoiConfigEcho(ServomoteurID servo, char val, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[5];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiConfigEcho;
     tab[3] = (byte)servo;
     tab[4] = (byte)val;
     return new Trame(tab);
 }
Пример #18
0
 public static Trame ServoEnvoiBaudrate(ServomoteurID servo, ServoBaudrate baud, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[5];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiBaudrate;
     tab[3] = (byte)servo;
     tab[4] = (byte)baud;
     return new Trame(tab);
 }
Пример #19
0
 public static Trame ServoEnvoiComplianceParams(ServomoteurID servo, byte CCWSlope, byte CCWMargin, byte CWMargin, byte CWSlope, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[8];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiComplianceParams;
     tab[3] = (byte)servo;
     tab[4] = CCWSlope;
     tab[5] = CCWMargin;
     tab[6] = CWMargin;
     tab[7] = CWSlope;
     return new Trame(tab);
 }
Пример #20
0
 private static CanBoard GlobalIdToCanBoard(ServomoteurID servoGlobalId)
 {
     return((CanBoard)((int)servoGlobalId / 4 + 1));
 }
Пример #21
0
 public static Trame ServoDemandeCoupleActuel(ServomoteurID servo, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[4];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.DemandeCoupleCourant;
     tab[3] = (byte)servo;
     return new Trame(tab);
 }
Пример #22
0
 public override void ServoVitesse(ServomoteurID servo, int vitesse)
 {
 }
Пример #23
0
 private String Parse(ServomoteurID servo)
 {
     return(servo.ToString().Replace("Unused", ""));
 }
Пример #24
0
        public override void BougeServo(ServomoteurID servo, int position)
        {
            base.BougeServo(servo, position);

            // Envoi à la pololu si c'est un servo géré par la carte
            int idPololu = Servomoteur.idServoPololu(servo);
            if (idPololu != -1)
                PololuMiniUart.setTarget((byte)idPololu, (ushort)position);
            // Sinon en UDP aux cartes elecs
            else
            {
                if (this == Robots.GrosRobot)
                {
                    Trame trame = TrameFactory.ServoEnvoiPositionCible(servo, position);
                    Connexions.ConnexionIO.SendMessage(trame);
                }
            }
            Historique.AjouterAction(new ActionServo(this, position, servo));
        }
Пример #25
0
 public ActionServo(Robot r, int po, ServomoteurID pi)
 {
     robot    = r;
     position = po;
     pince    = pi;
 }
Пример #26
0
 public static Trame ServoEnvoiVitesseMax(ServomoteurID servo, int vitesse, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[6];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiVitesseMax;
     tab[3] = (byte)servo;
     tab[4] = ByteDivide(vitesse, true);
     tab[5] = ByteDivide(vitesse, false);
     return new Trame(tab);
 }
Пример #27
0
 public static Trame ServoEnvoiTemperatureMax(ServomoteurID servo, int temperature, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[5];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiTemperatureMax;
     tab[3] = (byte)servo;
     tab[4] = (byte)temperature;
     return new Trame(tab);
 }
Пример #28
0
 private static byte GlobalIdToServoNo(ServomoteurID servoGlobalId)
 {
     return((byte)((int)servoGlobalId % 4));
 }
Пример #29
0
 public static Trame ServoEnvoiLed(ServomoteurID servo, bool allume, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[5];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiLed;
     tab[3] = (byte)servo;
     tab[4] = (byte)(allume ? 1 : 0);
     return new Trame(tab);
 }
Пример #30
0
 public static Trame ServoDemandeConfigAlarmeShutdown(ServomoteurID servo, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[4];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.DemandeConfigAlarmeShutdown;
     tab[3] = (byte)servo;
     return new Trame(tab);
 }
Пример #31
0
 public static Trame ServoEnvoiPositionMinimum(ServomoteurID servo, int position, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[6];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiPositionMinimum;
     tab[3] = (byte)servo;
     tab[4] = ByteDivide(position, true);
     tab[5] = ByteDivide(position, false);
     return new Trame(tab);
 }
Пример #32
0
 public override void ServoVitesse(ServomoteurID servo, int vitesse)
 {
     Trame trame = TrameFactory.ServoEnvoiVitesseMax(servo, vitesse);
     Connexions.ConnexionIO.SendMessage(trame);
 }
Пример #33
0
 public static Trame ServoEnvoiTensionMin(ServomoteurID servo, double tension, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[5];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.EnvoiTensionMin;
     tab[3] = (byte)servo;
     tab[4] = (byte)(tension * 10);
     return new Trame(tab);
 }
Пример #34
0
 private void panelCan_ServoClick(ServomoteurID servoNo)
 {
     panelServoCan.SetServo(servoNo);
 }
Пример #35
0
 public static Trame ServoReset(ServomoteurID servo, Carte carte = Carte.RecIO)
 {
     byte[] tab = new byte[4];
     tab[0] = (byte)carte;
     tab[1] = (byte)FonctionIO.CommandeServo;
     tab[2] = (byte)FonctionServo.Reset;
     tab[3] = (byte)servo;
     return new Trame(tab);
 }
Пример #36
0
        public virtual void BougeServo(ServomoteurID servo, int position)
        {
            if (ServoActive.ContainsKey(servo))
            {
                /*
                 * Todo
                 * if (servo == ServomoteurID.GRFruitsCoude && position != Config.CurrentConfig.PositionGRCoudeRange ||
                    servo == ServomoteurID.GRFruitsEpaule && position != Config.CurrentConfig.PositionGREpauleRange)
                    ServoActive[servo] = true;
                else
                    ServoActive[servo] = false;*/
            }

            Thread.Sleep(10);
        }
Пример #37
0
 public ActionServo(Robot r, int po, ServomoteurID pi)
 {
     robot = r;
     position = po;
     pince = pi;
 }
Пример #38
0
 public override void BougeServo(ServomoteurID servo, int position)
 {
     base.BougeServo(servo, position);
     Historique.AjouterAction(new ActionServo(this, position, servo));
 }
Пример #39
0
 public abstract void ServoVitesse(ServomoteurID servo, int vitesse);
Пример #40
0
 public static short idServoPololu(ServomoteurID servo)
 {
     if (servosPololu.ContainsKey(servo))
         return servosPololu[servo];
     else
         return -1;
 }