public TrameReplay(Trame trame, DateTime date, bool entrant = true) { Trame = trame.ToString(); Date = date; Entrant = entrant; }
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 } } }
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) { } }
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; }