Annonce

Réduire
Aucune annonce.

Communication UDP avec xplane

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Communication UDP avec xplane

    Bonsoir à tous,

    Je travaille actuellement sur un projet de fin d'études avec des collègues qui consiste à afficher en temps réel "l'état" de l'hélicoptère (une Alouette 3, pour les connaisseurs) utilisé sur xplane. En effet, l'altimètre, le turn coordinator, et quelques autres instruments, dessinés par mes collègues, afficheront les mêmes indications que l'hélicoptère d'xplane.
    Pour cela, nous sommes obligés d'utiliser une connexion udp entre xplane et la machine embarquée, et il s'agit justement de ma partie : établir la connexion udp. Je connais les noms des datarefs à utiliser, le nom des classes, mais je n'ai aucune idée de comment créer le programme, ni même le commencer (le C++, c'est pas trop mon truc).
    Pourriez-vous m'aider en me montrant un exemple pour un instrument au hasard ? Je pourrais alors m'en inspirer pour les autres.

    Merci d'avance, et bonne soirée !

  • #2
    Envoyé par Laminar
    ANY App can now send in the string (by UDP, to port 49,000) “RREF” plus a dataref, and X-Plane will then send that dataref string, and its value, BACK TO THAT IP ADDRESS EVERY FRAME! So, we can get unlimited datarefs from X-Plane with no UI needed!So, just write your own map or external visual or other app and have it send the dataref requests to X-Plane, and X-Plane will send those datarefs right back to you with their values! Now, you can write an App to get any data you like from X-Plane, easily, with no configuration needed from the user!THIS lets you write any App you can imagine, that can EASILY interact with X-Plane by UDP!
    C'est extrait de cette page. Donc pas besoin de C++, n'importe quelle java ou n'importe quoi d'autre, capable d'envoyer un paquet UDP tel que décrit sur le port 49000 recevra la valeur en retour. Je n'ai pas testé.

    La question suivante est : Qu'est-ce qui va afficher les valeurs, donc recevoir les données et donc initialiser leur envoi, comme décrit ci-dessus, en premier lieu ?

    PhM
    X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

    Commentaire


    • #3
      Bonsoir PhM, et merci de votre réponse.

      Le C++ est imposé car mon programme va interagir avec celui d'un collègue gérant le modbus et celui d'un autre gérant l'affichage à l'écran des instruments.

      Ce sont les instruments modélisés par mes collègues qui recevront et afficheront les valeurs.

      Nico77

      Commentaire


      • #4
        Envoyé par Nico77 Voir le message
        ... Ce sont les instruments modélisés par mes collègues qui recevront et afficheront les valeurs.
        Ca j'avais compris, c'est l'architecture du truc que je cherchais à comprendre pour avoir une idée sur comment faire. Je suppose donc qu'il va y avoir une boîte avec les instruments etc, qui va être reliée à X-Plane par ethernet et que tout ce qui est dans cette boîte est progammé en C++, j'ai bon ?

        PhM
        X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

        Commentaire


        • #5
          Oui c'est bien cela, et la communication entre X-Plane et cette boîte se fait en UDP.

          Nico77

          Commentaire


          • #6
            Autre question pour avoir une idée du niveau de connaissances, c'est un projet de fin de quelles études ?

            Je suggère un premier pas consistant à vérifier que ce que j'ai mentionné dans ma première réponse fonctionne bien, et comme c'est décrit. Avec Laminar on peut avoir des surprises. Ca peut se faire avec n'importe quel application capable d'envoyer et de recevoir des messages UDP, je ne sais pas de quoi vous disposez dans le cadre de ce projet, en parler aux profs pourrait aider pour cette première étape.

            PhM
            X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

            Commentaire


            • #7
              Je suis en deuxième année de BTS d'informatique (SNIR).
              Mon prof a testé ce que vous avez mentionnez, et cela fonctionne. Il a même fait ma partie du projet, mais pour des raisons évidentes, il ne me l'a pas donnée.

              Nico77

              Commentaire


              • #8
                Envoyé par Nico77 Voir le message
                Je suis en deuxième année de BTS d'informatique (SNIR).... mais pour des raisons évidentes, il ne me l'a pas donnée.
                ... et pour des raisons évidentes je peux aider à le faire mais pas le faire à ta place .

                Donc seconde étape, la boîte qu'est-ce que tu as dedans pour arriver à tes fins ? C'est un PC ? Autre chose ?

                PhM
                X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                Commentaire


                • #9
                  Oui bien sûr, cela va de soi ;)

                  Il s'agit d'un PC sous Linux équipé de Qt Creator et de QFlightInstruments.

                  Commentaire


                  • #10
                    Envoyé par Nico77 Voir le message
                    ... Il s'agit d'un PC sous Linux équipé de Qt Creator et de QFlightInstruments.
                    Bon, on avance .
                    • Sais-tu comment utiliser les sockets réseau sous linux ? Si non, une petite recherche te donnera des réponses.
                    • As-tu créé un diagramme représentant les différents éléments et les infos qui vont circuler entre eux ? (histoire de bien visualiser la chose).


                    PhM
                    X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                    Commentaire


                    • #11
                      Non je ne maîtrise pas vraiment les sockets réseau. On a vu cela il y a un moment. Je vais essayer de me rafraîchir la mémoire.

                      Oui j'en ai dessiné un au brouillon.

                      Commentaire


                      • #12
                        Alors ? Il en est où ce projet ?

                        PhM
                        X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                        Commentaire


                        • #13
                          Bonsoir,

                          J'ai compris qu'il faudra que je fasse en tout quatre fichiers en C++ (dont deux headers) : deux qui s'occuperont des Datarefs (je les ai appelés tout simplement "Dataref.h" et "Dataref.cpp"), et deux qui s'occuperont de la communication (je les ai baptisés "XPlaneUDPWorker.h et XPlaneUDPWorker.cpp"). Je me suis occupé d'une bonne partie du Dataref.cpp, où j'ai, par exemple pour l'altimètre, codé ceci :

                          // ALTIMETRE
                          struct dref_struct_in QAltimeter ;
                          QAltimeter.dref_freq=100 ;
                          QAltimeter.dref_id=1 ;
                          QAltimeter.dref_path="sim/cockpit2/gauges/indicators/altitude ft pilot";


                          J'ai fait cela pour 6 instruments en tout.
                          Cependant, je reste bloqué pour la partie communication où je ne sais pas vraiment comment faire.
                          Le temps presse pour moi, puisqu'il ne me reste plus que 5 semaines maintenant pour finir mon projet.

                          Cordialement,

                          Nico77

                          Commentaire


                          • #14
                            Envoyé par Nico77 Voir le message
                            ...Cependant, je reste bloqué pour la partie communication où je ne sais pas vraiment comment faire....
                            As-tu trouve comment créer un socket UDP ? As-tu testé que tu peux en ouvrir un et le fermer sans erreurs ?

                            Autres étapes :
                            1. Consulter le chapitre concernant RREF dans Instructions\Sending Data to X-Plane.rtfd\TXT.rtf. C'est du Austin, pas facilement compréhensible !
                            2. En déduire le format du paquet qu'il va falloir envoyer.
                            3. Trouver le moyen que X-Plane donne des infos sur ce qu'il reçoit du réseau.
                            4. Trouver le port sur lequel il faudra l'envoyer.
                            5. Trouver un "packet sniffer" pour linux et l'installer.
                            6. Envoyer le paquet défini précédemment vers la machine X-Plane.
                            7. Vérifier avec le sniffer que ca fonctionne comme prévu.
                            8. Regarder si le sniffer voit des paquets venant de X-Plane.
                            9. Si ca parle cote X-Plane vérifier que les données sont cohérentes.
                            10. Sinon aller voir dans les infos citées en 3 ce qu'il y a et chercher le problème.


                            PhM
                            Dernière modification par PhM, 13 mars 2016, 15h48.
                            X-Plane 9.70 & 11.5r1 / W10 / AMD Ryzen 7 2700 / 8Go RAM / Sapphire R9 390 Nitro 8Go / Sapphire HD7870 GHz 2Go / Samsung LN40C530 / Oculus DK2 / LeapMotion / Saitek X56 / Thrustmaster Pendular Rudder

                            Commentaire


                            • #15
                              J'ai effectivement fait des recherches. D'un point de vue théorique, je saisis à peu près le truc, mais d'un point de vue pratique, c'est très compliqué dans la mesure où je n'aligne pas deux lignes de code. De plus, j'ai recherché dans mes cours, et je me suis aperçu que j'avais seulement travaillé sur les sockets TCP. Par conséquent, je n'ai jamais vu les sockets UDP auparavant.
                              Le numéro du port sur lequel il faut envoyer les paquets est le 49000 si je ne me trompe pas.

                              Commentaire

                              Chargement...
                              X