Ejemplo n.º 1
0
 public TrameReplay(Trame trame, DateTime date, bool entrant = true)
 {
     Trame = trame.ToString();
     Date = date;
     Entrant = entrant;
 }
Ejemplo n.º 2
0
        public void ReceptionMessage(Trame trameRecue)
        {
            // Analyser la trame reçue

            Console.WriteLine(trameRecue.ToString());

            if ((trameRecue[0] == (byte)Carte.RecMove && this == Robots.GrosRobot))
            {
                if (trameRecue[1] == (byte)FonctionMove.Blocage)
                {
                    thActivationAsser = new Thread(ActivationAsserv);
                    thActivationAsser.Start();
                }

                if (trameRecue[1] == (byte)FonctionMove.FinDeplacement
                    || trameRecue[1] == (byte)FonctionMove.FinRecallage)
                {
                    Console.WriteLine("Déblocage déplacement " + DateTime.Now.Hour + ":" + DateTime.Now.Minute + ":" + DateTime.Now.Second + ":" + DateTime.Now.Millisecond);
                    SemaphoresMove[FonctionMove.FinDeplacement].Release();
                }

                if (trameRecue[1] == (byte)FonctionMove.RetourPositionXYTeta)
                {
                    // Réception de la position mesurée par l'asservissement
                    try
                    {
                        double y = (double)((short)(trameRecue[2] << 8 | trameRecue[3]) / 10.0);
                        double x = (double)((short)(trameRecue[4] << 8 | trameRecue[5]) / 10.0);
                        double teta = (trameRecue[6] << 8 | trameRecue[7]) / 100.0 - 180;
                        teta = (-teta);
                        y = -y;
                        x = -x;

                        Position nouvellePosition = new Position(new Angle(teta, AnglyeType.Degre), new PointReel(x, y));

                        if (Position.Coordonnees.Distance(nouvellePosition.Coordonnees) < 300 || !positionRecue)
                        {
                            Position = nouvellePosition;
                            //Position.Coordonnees.Placer(nouvellePosition.Coordonnees.X, nouvellePosition.Coordonnees.Y);
                        }
                        //else
                        //    ReglerOffsetAsserv((int)Position.Coordonnees.X, (int)Position.Coordonnees.Y, -Position.Angle);

                        positionRecue = true;

                        DateRefreshPos = DateTime.Now;
                        SemaphoresMove[FonctionMove.DemandePositionXYTeta].Release();

                        HistoriqueCoordonnees.Add(new Position(teta, new PointReel(x, y)));
                        if (HistoriqueCoordonnees.Count > 1200)
                        {
                            semHistoriquePosition.WaitOne();
                            while (HistoriqueCoordonnees.Count > 1200)
                                HistoriqueCoordonnees.RemoveAt(0);
                            semHistoriquePosition.Release();
                        }

                        if (Plateau.Balise != null)
                            Plateau.Balise.Position = Position;

                        ChangerPosition(Position);
                    }
                    catch (Exception)
                    {
                        Console.WriteLine("Erreur dans le retour de position asservissement.");
                    }
                }

                if (trameRecue[1] == (byte)FonctionMove.RetourPositionCodeurs)
                {
                    int nbPositions = trameRecue[2];

                    for (int i = 0; i < nbPositions; i++)
                    {
                        int gauche1 = trameRecue[3 + i * 8];
                        int gauche2 = trameRecue[4 + i * 8];
                        int gauche3 = trameRecue[5 + i * 8];
                        int gauche4 = trameRecue[6 + i * 8];

                        int codeurGauche = gauche1 * 256 * 256 * 256 + gauche2 * 256 * 256 + gauche3 * 256 + gauche4;

                        int droite1 = trameRecue[7 + i * 8];
                        int droite2 = trameRecue[8 + i * 8];
                        int droite3 = trameRecue[9 + i * 8];
                        int droite4 = trameRecue[10 + i * 8];

                        int codeurDroit = droite1 * 256 * 256 * 256 + droite2 * 256 * 256 + droite3 * 256 + droite4;

                        retourTestPid[0].Add(codeurGauche);
                        retourTestPid[1].Add(codeurDroit);
                    }
                }

                if (trameRecue[1] == (byte)FonctionMove.RetourDiagnostic)
                {
                    int nbValeurs = trameRecue[2];

                    for (int i = 0; i < nbValeurs; i++)
                    {
                        double chargeCPU = (trameRecue[3 + i * 6] * 256 + trameRecue[4 + i * 6]) / 5000.0;
                        double chargePWMGauche = trameRecue[5 + i * 6] * 256 + trameRecue[6 + i * 6] - 4000;
                        double chargePWMDroite = trameRecue[7 + i * 6] * 256 + trameRecue[8 + i * 6] - 4000;

                        retourTestCharge[0].Add(chargeCPU);
                        retourTestCharge[1].Add(chargePWMGauche);
                        retourTestCharge[2].Add(chargePWMDroite);
                    }
                }

                if (trameRecue[1] == (byte)FonctionMove.RetourValeursAnalogiques)
                {
                    double valeurAnalogique1 = (trameRecue[2] * 256 + trameRecue[3]);
                    double valeurAnalogique2 = (trameRecue[4] * 256 + trameRecue[5]);
                    double valeurAnalogique3 = (trameRecue[6] * 256 + trameRecue[7]);
                    double valeurAnalogique4 = (trameRecue[8] * 256 + trameRecue[9]);
                    double valeurAnalogique5 = (trameRecue[10] * 256 + trameRecue[11]);
                    double valeurAnalogique6 = (trameRecue[12] * 256 + trameRecue[13]);

                    double valeurAnalogique1V = valeurAnalogique1 * 0.0008056640625;
                    double valeurAnalogique2V = valeurAnalogique2 * 0.0008056640625;
                    double valeurAnalogique3V = valeurAnalogique3 * 0.0008056640625;
                    double valeurAnalogique4V = valeurAnalogique4 * 0.0008056640625;
                    double valeurAnalogique5V = valeurAnalogique5 * 0.0008056640625;
                    double valeurAnalogique6V = valeurAnalogique6 * 0.0008056640625;

                    /*
                        ??
                        GP2 1
                        GP2 2
                        ??
                        ??
                        ??
                    */

                    ValeursAnalogiquesMove = new List<double>();
                    ValeursAnalogiquesMove.Add(valeurAnalogique1);
                    ValeursAnalogiquesMove.Add(valeurAnalogique2);
                    ValeursAnalogiquesMove.Add(valeurAnalogique3);
                    ValeursAnalogiquesMove.Add(valeurAnalogique4);
                    ValeursAnalogiquesMove.Add(valeurAnalogique5);
                    ValeursAnalogiquesMove.Add(valeurAnalogique6);

                    if (SemaphoresMove[FonctionMove.RetourValeursAnalogiques] != null)
                        SemaphoresMove[FonctionMove.RetourValeursAnalogiques].Release();
                }
            }
            else if (trameRecue[0] == (byte)Carte.RecIO)
            {
                if (trameRecue[1] == (byte)FonctionIO.ReponseLidar)
                {
                    int lidarID = trameRecue[2];

                    if (mesureLidar == null)
                        mesureLidar = "";

                    for(int i = 3; i < trameRecue.Length; i++)
                    {
                        mesureLidar += (char)trameRecue[i];
                    }

                    if (Regex.Matches(mesureLidar, "\n\n").Count == 2)
                        SemaphoresIO[FonctionIO.ReponseLidar].Release();
                }
                if (trameRecue[1] == (byte)FonctionIO.RetourValeursAnalogiques)
                {
                    double valeurAnalogique1 = (trameRecue[2] * 256 + trameRecue[3]);
                    double valeurAnalogique2 = (trameRecue[4] * 256 + trameRecue[5]);
                    double valeurAnalogique3 = (trameRecue[6] * 256 + trameRecue[7]);
                    double valeurAnalogique4 = (trameRecue[8] * 256 + trameRecue[9]);
                    double valeurAnalogique5 = (trameRecue[10] * 256 + trameRecue[11]);
                    double valeurAnalogique6 = (trameRecue[12] * 256 + trameRecue[13]);
                    double valeurAnalogique7 = (trameRecue[14] * 256 + trameRecue[15]);
                    double valeurAnalogique8 = (trameRecue[16] * 256 + trameRecue[17]);
                    double valeurAnalogique9 = (trameRecue[18] * 256 + trameRecue[19]);

                    double valeurAnalogique1V = valeurAnalogique1 * 0.0008056640625;
                    double valeurAnalogique2V = valeurAnalogique2 * 0.0008056640625;
                    double valeurAnalogique3V = valeurAnalogique3 * 0.0008056640625;
                    double valeurAnalogique4V = valeurAnalogique4 * 0.0008056640625;
                    double valeurAnalogique5V = valeurAnalogique5 * 0.0008056640625;
                    double valeurAnalogique6V = valeurAnalogique6 * 0.0008056640625;
                    double valeurAnalogique7V = valeurAnalogique7 * 0.0008056640625;
                    double valeurAnalogique8V = valeurAnalogique8 * 0.0008056640625;
                    double valeurAnalogique9V = valeurAnalogique9 * 0.0008056640625;

                    /*
                        Codeur effet hall Ascenseur Droite
                        VadcV2 (AN1)
                        Codeur effet hall Ascenseur Gauche
                        Switchs Ascenseur Gauche
                        Switchs Ascenseur Droite
                        Switchs Bonus
                    */

                    ValeursAnalogiquesIO = new List<double>();
                    ValeursAnalogiquesIO.Add(valeurAnalogique1);
                    ValeursAnalogiquesIO.Add(valeurAnalogique2);
                    ValeursAnalogiquesIO.Add(valeurAnalogique3);
                    ValeursAnalogiquesIO.Add(valeurAnalogique4);
                    ValeursAnalogiquesIO.Add(valeurAnalogique5);
                    ValeursAnalogiquesIO.Add(valeurAnalogique6);
                    ValeursAnalogiquesIO.Add(valeurAnalogique7);
                    ValeursAnalogiquesIO.Add(valeurAnalogique8);
                    ValeursAnalogiquesIO.Add(valeurAnalogique9);

                    if (SemaphoresIO[FonctionIO.RetourValeursAnalogiques] != null)
                        SemaphoresIO[FonctionIO.RetourValeursAnalogiques].Release();
                }
                if (trameRecue[1] == (byte)FonctionIO.RetourCapteurOnOff)
                {
                    CapteurOnOffID capteur = (CapteurOnOffID)trameRecue[2];
                    bool nouvelEtat = trameRecue[3] > 0 ? true : false;
                    if (nouvelEtat != CapteurActive[capteur])
                    {
                        ChangerEtatCapteurOnOff(capteur, nouvelEtat);
                    }
                    if (SemaphoresCapteurs[capteur] != null)
                        SemaphoresCapteurs[capteur].Release();
                }

                if (trameRecue[1] == (byte)FonctionIO.RetourTestConnexion)
                {
                    TensionPack1 = (double)(trameRecue[2] * 256 + trameRecue[3]) / 100.0;
                    TensionPack2 = (double)(trameRecue[4] * 256 + trameRecue[5]) / 100.0;
                }

                if (trameRecue[1] == (byte)FonctionIO.ReponseJack)
                {
                    jackBranche = trameRecue[2] == 1 ? true : false;

                    if (historiqueJack)
                        Historique.AjouterAction(new ActionCapteur(this, CapteurID.Jack, jackBranche ? "branché" : "absent"));

                    SemaphoresIO[FonctionIO.ReponseJack].Release();
                }

                if (trameRecue[1] == (byte)FonctionIO.DepartJack)
                {
                    if (Plateau.Enchainement == null)
                        Plateau.Enchainement = new GoBot.Enchainements.EnchainementMatch();
                    Plateau.Enchainement.Executer();
                }

                if (trameRecue[1] == (byte)FonctionIO.ReponseCouleurEquipe)
                {
                    if (trameRecue[2] == 0)
                        couleurEquipe = Plateau.CouleurGaucheViolet;
                    else if (trameRecue[2] == 1)
                        couleurEquipe = Plateau.CouleurDroiteVert;

                    Plateau.NotreCouleur = couleurEquipe;

                    SemaphoresIO[FonctionIO.ReponseCouleurEquipe].Release();
                }

                if (trameRecue[1] == (byte)FonctionIO.RetourValeurCapteur)
                {
                    if (trameRecue[2] == (byte)CapteurID.Balise)
                    {
                        // Recomposition de la trame comme si elle venait d'une balise
                        String message = "B1 E4 " + trameRecue.ToString().Substring(9);
                        if (Plateau.Balise != null)
                            Plateau.Balise.connexion_NouvelleTrame(new Trame(message));
                    }

                    if (trameRecue[2] == (byte)CapteurID.BaliseRapide1)
                    {
                        // Recomposition de la trame comme si elle venait d'une balise
                        String message = "B1 E5 02 " + trameRecue.ToString().Substring(9);
                        if (Plateau.Balise != null)
                            Plateau.Balise.connexion_NouvelleTrame(new Trame(message));
                    }

                    if (trameRecue[2] == (byte)CapteurID.BaliseRapide2)
                    {
                        // Recomposition de la trame comme si elle venait d'une balise
                        String message = "B1 E5 01 " + trameRecue.ToString().Substring(9);
                        if (Plateau.Balise != null)
                            Plateau.Balise.connexion_NouvelleTrame(new Trame(message));
                    }
                }

                if (trameRecue[1] == (byte)FonctionIO.FrontCapteur)
                {
                    // Réception des changement d'état des capteurs
                }
            }
        }
Ejemplo n.º 3
0
        private void ReceptionCallback(IAsyncResult ar)
        {
            try
            {
                UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;

                IPEndPoint e = new IPEndPoint(IPAddress.Any, PortEntree);

                Byte[] receiveBytes = u.EndReceive(ar, ref e);

                ConnexionCheck.MajConnexion();

                Trame trameRecue = new Trame(receiveBytes);
                if (trameRecue.ToString() == "C2 A1 C5")
                    trameRecue = new Trame("C2 A1 C3");
                TrameRecue(trameRecue);

                UdpState s = new UdpState();
                s.e = e;
                s.u = u;
                u.BeginReceive(ReceptionCallback, s);
            }
            catch (Exception)
            {
            }
        }
Ejemplo n.º 4
0
        private void AfficherTrame(TrameReplay trameReplay)
        {
            String heure = "";
            try
            {
                Trame trame = new Trame(trameReplay.Trame);

                if (rdoHeure.Checked)
                    heure = trameReplay.Date.ToString("hh:mm:ss:fff");
                if (rdoTempsDebut.Checked)
                    heure = (trameReplay.Date - dateDebut).ToString(@"hh\:mm\:ss\:fff");
                if (rdoTempsPrec.Checked)
                    heure = ((int)(trameReplay.Date - datePrec).TotalMilliseconds).ToString() + " ms";
                if (rdoTempsPrecAff.Checked)
                    heure = ((int)(trameReplay.Date - datePrecAff).TotalMilliseconds).ToString() + " ms";

                Carte destinataire = trameReplay.Entrant ? Carte.PC : TrameFactory.Identifiant(trame);
                Carte expediteur = trameReplay.Entrant ? TrameFactory.Identifiant(trame) : Carte.PC;
                Carte carte = trame.Carte;

                if (carte == Carte.PC)
                    throw new Exception();

                bool cartesAutorisees = false;
                if (Config.CurrentConfig.LogsDestinataires[destinataire] && Config.CurrentConfig.LogsExpediteurs[expediteur])
                    cartesAutorisees = true;

                bool fonctionAutorisee = false;
                if ((carte == Carte.RecMove && Config.CurrentConfig.LogsFonctionsMove[(FonctionMove)trame[1]]) ||
                    trame[1] == 0xA1 ||
                    (carte == Carte.RecIO && Config.CurrentConfig.LogsFonctionsIO[(FonctionIO)trame[1]]))
                    fonctionAutorisee = true;

                if (cartesAutorisees && fonctionAutorisee)
                {
                    dataGridViewLog.Rows.Add(compteur, expediteur.ToString(), destinataire.ToString(), heure, DecodeurTrames.Decode(trame), trame.ToString());
                    datePrecAff = trameReplay.Date;

                    if (rdoCarte.Checked)
                        dataGridViewLog.Rows[dataGridViewLog.Rows.Count - 1].DefaultCellStyle.BackColor = couleurCarte[carte];
                    else if (rdoDest.Checked)
                        dataGridViewLog.Rows[dataGridViewLog.Rows.Count - 1].DefaultCellStyle.BackColor = couleurCarte[destinataire];
                    else if (rdoExp.Checked)
                        dataGridViewLog.Rows[dataGridViewLog.Rows.Count - 1].DefaultCellStyle.BackColor = couleurCarte[expediteur];
                }
            }
            catch (Exception)
            {
                dataGridViewLog.Rows.Add(compteur, "?", "?", heure, "Inconnu !", trameReplay.Trame.ToString());
                dataGridViewLog.Rows[dataGridViewLog.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Red;
            }

            compteur++;

            datePrec = trameReplay.Date;
        }