Sign in to follow this  
Dimit

[Hilfe] Mit externem Programm DataRefs auslesen / bearbeiten ?

Recommended Posts

Hallo leute

 

Soweit ich weiß gibt es Programme welche mit Xplane 11 über z.B XPUIPC kommunizieren um DataRefs auszulesen oder zu bearbeiten, und dadurch zb die Höhe, den anstell-winkel auslesen, oder eine Engine-Failure auslösen.

 

Ich möchte gerne ein eigenes programm schreiben dass Datarefs auslesen bzw bearbeiten kann.

Nur leider weiß ich nicht wie man ein externes program mit X-Plane (und wohl XPUIPC) so verbinden kann, dass man ständig die Daten auslesen und eingeben kann.

 

 

Kennt sich irgendjemand damit aus? wäre sehr hilfreich

 

Vielen Dank im Vorraus!

Share this post


Link to post
Share on other sites

Hallo Dimit,

 

es bietet sich zum Beispiel FlyWithLua an. (Siehe Forumsstruktur). Das Lua hat einen C ähnlichen Syntax, ist aber ein reines PlugIn

Wenn Du mit "extern" einen Client mit der Sprache Deiner Wahl meinst, so bietet sich die Kommunikation per UDP an.

Diese Verbindung kann direkt mit XP erfolgen, oder indirekt über ein PlugIn, das Deine Anfragen über die SDK an XP weiterleitet.

Hierzu einfach mal Google mit der Frage nach "X-Plane SDK UDP"  (oder ähnlich) herausfordern.

 

Zu dem XPUIPC (was man auch nehmen kann) wirst Du Dich mit dem Syntax innerhalb der "config-datei" etwas auseinander setzen müssen.

Für mich war dieser Syntax/Logik  am Anfang etwas mehr als "Böhmische Dörfer", aber irgendwann habe ich das kapiert. (Frage mich aber heute nicht mehr)

Als Verbindungscode, Dein Client <-> XPUIPC, kannst Du durchaus das SDK von FSUIPC nehmen. Der Code steht für C und C++ zur Verfügung (andere Sprachunterstützung ist mir nicht bekannt (was nichts heißen mag)), aber man kann das in die (meisten) Sprachen seiner Wahl konvertieren)

 

Ich selber versuche mich gerade an XPlaneConnect. XPC ist ein Plugin mit UDP Schnittstelle. Der Sourcecode liegt bei (MSVC++ für das PlugIn, Client kann eine beliebige Sprache sein). Für mich erweitert habe ich dieses PlugIn um die Möglichkeit auch Commands zu verarbeiten (im original Standard sind eigentlich nur DataRefs bisher implementiert)

Der einzige  Wermutstropfen bisher, das ist eine Inkonsistenz zu  XP11 (XPC ist nur freigegeben für XP9 und XP10). Falls der Simulator passiv wird (Beispielsweise wird ein Dialog aufgerufen, oder andere Gründe schlagen zu Tage), dann bekomme ich falsche Werte bei DRef Anfragen zurück Was schief läuft, das habe ich noch nicht gefunden.

Behelfen tue ich mich - bis zur Erkennung/Bereinigung  des Problems - mit der zyklischen Anfrage an eine Konstante. Stimmt der Rückgabewert nicht, so schließe ich den UDP Port und eröffne ihn gleich wieder.  

 

Ahoj

-Uwe

 

  • Upvote 1

Share this post


Link to post
Share on other sites
vor 1 hour , Hüpper sagte:

Hallo Dimit,

 

es bietet sich zum Beispiel FlyWithLua an. (Siehe Forumsstruktur). Das Lua hat einen C ähnlichen Syntax, ist aber ein reines PlugIn

Wenn Du mit "extern" einen Client mit der Sprache Deiner Wahl meinst, so bietet sich die Kommunikation per UDP an.

Diese Verbindung kann direkt mit XP erfolgen, oder indirekt über ein PlugIn, das Deine Anfragen über die SDK an XP weiterleitet.

Hierzu einfach mal Google mit der Frage nach "X-Plane SDK UDP"  (oder ähnlich) herausfordern.

 

Zu dem XPUIPC (was man auch nehmen kann) wirst Du Dich mit dem Syntax innerhalb der "config-datei" etwas auseinander setzen müssen.

Für mich war dieser Syntax/Logik  am Anfang etwas mehr als "Böhmische Dörfer", aber irgendwann habe ich das kapiert. (Frage mich aber heute nicht mehr)

Als Verbindungscode, Dein Client <-> XPUIPC, kannst Du durchaus das SDK von FSUIPC nehmen. Der Code steht für C und C++ zur Verfügung (andere Sprachunterstützung ist mir nicht bekannt (was nichts heißen mag)), aber man kann das in die (meisten) Sprachen seiner Wahl konvertieren)

 

Ich selber versuche mich gerade an XPlaneConnect. XPC ist ein Plugin mit UDP Schnittstelle. Der Sourcecode liegt bei (MSVC++ für das PlugIn, Client kann eine beliebige Sprache sein). Für mich erweitert habe ich dieses PlugIn um die Möglichkeit auch Commands zu verarbeiten (im original Standard sind eigentlich nur DataRefs bisher implementiert)

Der einzige  Wermutstropfen bisher, das ist eine Inkonsistenz zu  XP11 (XPC ist nur freigegeben für XP9 und XP10). Falls der Simulator passiv wird (Beispielsweise wird ein Dialog aufgerufen, oder andere Gründe schlagen zu Tage), dann bekomme ich falsche Werte bei DRef Anfragen zurück Was schief läuft, das habe ich noch nicht gefunden.

Behelfen tue ich mich - bis zur Erkennung/Bereinigung  des Problems - mit der zyklischen Anfrage an eine Konstante. Stimmt der Rückgabewert nicht, so schließe ich den UDP Port und eröffne ihn gleich wieder.  

 

Ahoj

-Uwe

 

Hallo Uwe und danke für deine sehr ausführliche Antwort!

 

Da die Eingabe von Commands an Xplane den Rahmen meines Projekts doch zu sprengen scheint, habe ich mich nun damit abgefunden es bei einem auslesen der X-Plane DataRefs zu belassen.

 

Das heißt mir reicht es kontinuierlich Daten wie die Höhe meines Flugzeuges auszulesen um diese dann in meinem Externen Programm in einem kleinen Info-Bereich anzuzeigen. (es reicht schon wenn es sich alle ~3 sekunden updatet)

 

Ich werde mich jetzt mal in die UDP Geschichte einlesen und schauen ob mich das meinen neuen Plan in die Tat umsetzen lässt.

Natürlich werde ich hier dann sofort über den Fortschritt berichten

Share this post


Link to post
Share on other sites

Interessante Idee,

ich muss mich einmal damit beschäftigen.

 

Nur mal Konzept gedacht:

Mit Hilfe des SDK lassen sich mit C/C++ dll schreiben, die als Plugin unter X-Plane eingeklingt werden können.

Wenn solch ein Plugin über shared memory, named pipes oder sonstige Techniken zur Interprozesskommunikation mit einem entsprechenden exe Prog zusammenarbeitet, müsste sich beinahe alles realisieren lassen.

 

Gruß

Othello

Share this post


Link to post
Share on other sites

Hallo Dimit,

 

für XPUIPC lade Dir von http://www.schiratti.com/dowson.html das FSUIPC SDK (etwa in der Seitenmitte zu finden) herunter. Da drinnen findest Du alles was Du brauchst. Aufpassen must Du auf die 32/64Bit Variante (Dein Client), denn in einer Struktur wird ein Zeiger gespeichert, der in der 64Bit Variante naturgemäß etwas größer ist. Der Rest vom Code ist identisch zu 32bit.

FSUIPC und XPUIPC benutzen Offsets Anstelle von "Variable Namen) für SimConnect (FSX/P3D)  - sowie Offsets für die "DataRefs" in X-Plane. Aus Deiner Clientsicht unterscheiden sich beide nicht, allerdings kann man mit der Versionsabfrage feststellen, ob sich bei dem aktiven Simulator um (von unten nach oben) FS9/FSX Varianten/P3D/X-Plane/P3Dv4 handelt und gegebenenfalls im eigenen Code unteschiedliche Anpassungen vornehmen. Die Offset-Tabelle liegt dem SDK bei.

 

Auf der X-Plane Seite brauchst Du das neueste XPUIPC. Ich habe die Version 2..0.4.4. Eventuell gibt es was neueres ?  Auch habe ich diese nur gegen XP10 eingesetzt. Also für XP11 muss man es einfach ausprobieren., ich denke,  es wird funktionieren.

Wahrscheinlich wirst Du Dich auch nicht mit der XPUIC Konfigurationsdatei auseinandersetzen müssen. Das braucht man nur, wenn man mehr als Standard von XPUIPC fordert.

 

Dann wünsche ich Dir viel Spaß, wenig Frust und gutes gelingen.

 

---

 

Hallo Günther,

 

ich wusste bis vor 14 Tagen nicht, was sich unter dem win.xpl verbirgt. Es ist eine umbenannte MeinProject.dll. Wer hätte das gedacht

Und mit irgendeinem IPC ausgestattet kann diese nicht nur mit X-Plane, sondern auch mit der Welt kommunizieren. 

Ich habe die letzten vier Wochen doch so einiges über SimConnect (P3Dv4) und X-Plane gelernt, aber nun ist mein Urlaub vorbei. Schade eigentlich

 

Viele Grüße

-Uwe

 

 

Share this post


Link to post
Share on other sites

Genau, jedes Plugin (z.B. FlyWithLua, 124thATC, DatarefEditor, xSquakbox) wird als dll realisiert und muss unter Windows zu win.xpl umbenannt werden.

Man kann also selbst ein Plugin schreiben, welches als Vermittler von X-Plane zu beliebigen anderen Prozessen dient.

 

 

Share this post


Link to post
Share on other sites

Da dieser Thread beantwortet wurde haben wir ihn geschlossen. Wenn Sie weitere Fragen haben können Sie jederzeit einen Neuen öffnen.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this