MobiFlight Community Support

Welcome to the forum for MobiFlight! Feel free to reach out to the community in case you have questions, issues or just want to share great ideas or details about your latest home cockpit project.

You like MobiFlight? Donate via PayPal and support the MobiFlight development. Thanks! 

Go to page 1Go to page 012Go to page 2Go to page 2
Avatar
FraMic
Posts: 7
Hallo zusammen,
dies ist mein erster Post und habe nichts zu meinem aktuellen Problem gefunden.

Habe MobiFlight bereits im FSX erfolgreich eingesetzt gehabt (nur kleinere Geschichten).

Mit P3Dv4 und dem A318/A319 (und auch mit PMDG737) mags nicht so recht funktionieren.

In Standard Flugzeugen kann ich z.Bsp AP Altitude per Encoder verändern, sehe es im FS und auch auf der 7-Digit LED. Auch die Veränderung über den FS erscheint einwandfrei im LED,
jedoch nicht beim A318/A319 Addon.

Parkbremse und Gear UP/Down über Button funktionieren.

Versucht habe ich folgendes:
FSUIPC Offset 0x7D4
EventID 65893/65892

Habe jetzt schon die FSUIPC5 Key gekauft, weil ich dachte, es liegt an der Demo …
… leider ohne Erfolg! Kann jemand helfen?

Gruß
FraMic
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-11-17 12:41
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 2464
Supporter
Hiho.

Erstmal die Gute Nachricht....

Die Vollvesion von FSUIPC ist gut investiertes Geld. Wie du merkst löst das in diesen Fall nicht dein Problem.... ABER Die Vollversion ist auf lange Sicht wenn du mehr als nur ein kleines MCP Panel bauen willst sowieso ein Must Have. Spätestens wenn du nen Throttle bzw Pedale mit Bremsen verwendest kommst fast nicht mehr um FSUIPC rum.


Zu deinen Problem:

PMDG und auch Aerosoft Airbus sind AddOns ..... Und diese nutzen meist andere Offsets als die Standardflieger.
Verwirrend ist es schon denn manche Offsets und Events werden weiterhin vom FSX/P3D genommen ( wie Parkingbrake, Gear und meist Radios). Aber die meisten Elemente sind mit eigenen Offsets umgesetzt.

Leider hast du mit PMDG und Aerosoft Airbus jetzt auch gleich 2 Extrembeispiele genommen.
Die PMDG ist da sehr Benutzerfreundlich. Hier brauchst du eigentlich nur eine neue Offsetliste ( In deinnen FSUIPC Ordner unter "documents" .
Dort steht alles drin.... Auch das du im PMDG Ordner ne Datei umschreiben musst damit die Daten übertragen werden (Enable DataBoradcast) .

Der Aerosoft Airbus ist das andere Extrem. Dieser sendet gar nix an FSUIPC. Hierfür musst du leider selber einen Script schreiben ( oder versuchen das dir ein anderer User einen schickt) der dann alle Daten aus dem System holt (Lvars) und diese auf Offsets schreibt die man dann mit Mobiflight verwenden kann.
Siehe dazu https://www.mobiflight.com/forum/topic/251.html

Bei weiteren Fragen.... Schreib einfach ! Wir helfen gerne !
Good Luck !
2018-11-17 15:30
Avatar
FraMic
Posts: 7
Cool, danke für die Info´s!

Dann werde ich mich mal wieder ans Arduino programmieren machen …
… nächstes Projekt :mad:

VG
FraMic
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-11-17 18:18
Avatar
FraMic
Posts: 7
Hallo zusammen,

so, habe es geschafft, auf dem PMDG 737 die AP-Altitude auf meinem 7-Digit Display darzustellen.

Auf meinem Aerosoft A319 will es noch nicht richtig funktioieren.
Beim drehen am Encoder komme ich gerade mal auf 100, bzw -49000
Verwende folgendes LUA Sript:
iconCode:
first = true

while true do
    if first then
        initialALTVal = ipc.readLvar("L:AB_AP_ALT_Select")
        ipc.writeUD(0x66D5, initialALTVal)
        first = false
    else
        currentALTVal = ipc.readUD(0x66D5)
        ipc.writeLvar("L:AB_AP_ALT_Select", currentALTVal)
    end
end



Nach dem Starten der LUA im FSUIPC kann man auch nicht mehr am AP_ALT-Regler im FS-Panel die Altitude verstellen ...

Weiss jemand Abhilfe?

VG
FraMic
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-12-11 21:24
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 2464
Supporter
Darf man fragen wie du auf diese Technik gekommen bist ?

Warum eigentlich ein 4 Byte Int ? D Word ?
Good Luck !
2018-12-12 00:41
Avatar
FraMic
Posts: 7
Das, … äähm, wüsste ich auch gerne …!
Hab mir gedacht, wenn ich die Standard Offset AP_Alt nehme, steht dort 0X074D mit INT 4

Daher war meine (wohl falsche) Schlussfolgerung, dass muss hier auch so sein !?

EDIT:
So, die Frage nach den 4byte INT war ein sehr guter Hinweis, bei INT 2 klappts jetzt auch mit dem verstellen.
Leider Rundet die Anzeige im Panel immer auf volle Tausender und ein verstellen nach starten des LUA Scripts geht leider auch nicht … :(

Hat jemand eine Idee?
[Last edited by FraMic, 2018-12-12 19:04]
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-12-12 18:20
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 2464
Supporter
Grundsätzlich muss ich gestehen ich kenne mich mit diesen while schleifen nicht so ganz aus.

Wie ich es sehen definierst du "am Anfang" das FIRST = TRUE ist.
Dann sagst du Solange True hol dir den Initialen Wert aus dem Sim und schreibe ihn auf den Offset ( Damit wir in Mobiflight eine Referenz haben)
Nach diesen einmaligen schreiben änderst du FIRST in False . Somit "sollte" wenn ich die While schleife richtig verstehe der erste Part nicht mehr ausgeführt werden.

Was ich an der Stelle nicht ganz verstehe ist ob der 2. Part ( Der den aktuellen Offset Wert jetzt auf die Lvar schreibt) nun in dauerschleife gemacht wird ODER ob dieser nur Einmalig gemacht wird ODER ob dieser nur bei Bedarf gemacht wird ... Sprich wenn sich dein Offset verändert hat.

Einmalig wäre auf jeden fall falsch. Ob ein Dauerschreiben sinn macht (bzw auf dauer funktioniert) weis ich nicht. Ich denke das schreiben bei Bedarf wäre am logischten.

Ich vermute aber das du ein Dauerschreiben hast ....
Das würde auch erklären warum du den Drehregler nicht mehr im Vituellen Cockpit verwenden kannst denn deine "Schleife" würde stets den aktuellen CustomOffset Wert immer wieder auf den Offset schreiben.... Denn dieser hat sich durch das drehen des Virtuellen Reglers ja nicht verändert.

******

Zum System : Das Folgende ist also nur eine "Idee" da ich mich leider immer noch nicht mit dem Code befassen konnte.

1. Du musst ganz klar die "Stucktur" der Lvar kennen und verstehen.
Der Erste schritt wäre es also noch nicht zu schreiben..... Sondern nur dauerhaft mit einen script den interen Wert der Lvar "L:AB_AP_ALT_Select" auf einen Freien Offset zu legen.
Dabei kannst du auch gleich prüfen wie der Offset sein muss.... signed oder Unsigned .... Und Byte Word oder DWord. (1Byte 2 Byte oder 4 Byte)
Mit diesen Wissen kannst du dann auch die richtige WERT Eingabe in Mobiflight bestimmen.
Ist der Offset 1:1 ... also z.b. 23000ft ergeben einen Value von 23000 dann kannst du $+100 verwenden. Ist der Wert aber z.b. 230 ( Also er gibt die Höhe in Ft/100 aus) dann muss dein Input $+1 sein. ( Du meintest er spring in 1000er Steps. Also vermute ich die Lvar gibt ft/10 aus..... also 23000ft entspricht einen Wert von 2300 auf dem Offset !

2. In der Theorie würde ich sagen sollte ein Write nur stattfinden bei einer veränderung.
Du brauchst also eine Logik die sagt ...
A: Lese Lvar und definiere Variable ( Name z.b. SimAltitude )
B: Schreibe Einmalig bei Systemstart die Sim Altitude auf deinen Custom Offset
C: Lese Dauerhaft den CustomOffset (Name z.b Cockpit Altitude)
D: Vergleiche beide Werte ... Wenn SimAltitude und Cokpitaltitude gleich sind dann beginne von vorne (Da ja kein Write erforderlich ist) ..... Wenn NICHT Dann....
E: Bei Ungleichheit SCHREIBE Cockpitaltitude auf Lvar. Und beginne anschließend von vorne !

Ergebnis meiner Logik.... Lesen.... ((((Initialisieren bei bedarf)))) ..... Lesen des HomeCockpits .... Vergleichen ..... Und bei Bedarf im Sim angleichen.

************

Vielleicht könnte mal ein Profi das bestätigen bzw besser erklären.
Danke !


EDIT:
Natürlich auch an der Stelle möchte ich noch sagen das man überlegen sollte sich solche Writes zu sparen !!!
Meist lässt sich per FSUIPC macros vieles belegen.
Das wir die Lvars lesen müssen um unsere Anzeigen zu füttern ist klar.... Aber der komplizierte Umweg über die Lvars und Customoffsets INPUTS zu machen halte ich für "unnötig"
Meine Empfehlung wäre es also grundsätzlich zu testen ob es nicht viel einfacher über Kex/Joystick Commands und FSUIPC geht bzw direct in der Tastenbelegung falls dein AddOn eine solche hat !
[Last edited by pizman82, 2018-12-13 00:27]
Good Luck !
2018-12-13 00:22
Avatar
FraMic
Posts: 7
Danke, Danke, Danke!
Auf so eine Ausführung war ich jetzt nicht vorbereitet. :)

Bin in Sachen Programmierung / Scriptsprachen kein PRO, habe zwar lange mit PHP&Co zu tun gehabt, habe auch einige Projekte mit Raspi auf Linux umgesetzt, auch im Bereich Arduino bin ich nicht ganz unbeleckt, aber reicht halt nicht. Eher so Trial and Error Prinzipien angewendet und aus 5 Scripten ein für mich passendes gebastelt.

Eigentlich wollte ich nur einen kleinen Zeitvertreib mit meinem Flusi verbringen und die Abläufe dahinter zu verstehen (meine Flugangst bekämpfen :rolleyes: ).
Jetzt artet das schon mit ein paar Schaltern, Encodern, Displays, 7-Digit und einer zusätzlichen Scriptsprache aus. Naja, … macht aber Spaß, besonders wenns nachher funktioniert.
Zurück zum Thema:
Wenn ich das so lese, verstehe ich das in groben Zügen.
Habe gestern Abend noch herausgefunden, dass es am Schalter 1000>100 im FS-Panel liegt. Steht der auf 1000 und ich drehe am ext.Encoder, dann kann ich keine 100er Schritte gehen. Bei 100 geht es sehr gut.

Kann halt bei laufendem LUA nicht mehr am FS-Panel verstellen. Daher ist ein Script mit "Schreiben bei Veränderung" wohl sinnvoll.

Ich versuche mal, deine Vorschläge abzuarbeiten und werde berichten.

Viele Grüße
FraMic
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-12-13 18:32
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 2464
Supporter
Noch eine kleine überlegung was die Lua Macros angeht.

Dein Script ist ja dafür gedacht "immer" zu laufen. Also in deinen Fall ununterbrochen den Wert zu schreiben bzw mit der empfohlenen Änderung zumindest ununterbrochen die 2 Dinge zu lesen ( Offset und Lvar) und zu vergleichen.

Ein "Macro" ist im Gegenzug ja vom Prinzip ein einmaliges ereigniss das wir abfeuern. ( würde zwar auch als Dauerschleife gehen aber darauf will ich nciht hinaus)

****
Der Grundgedanke ist also eigentlich:
Für OUTPUTS nutzen wir einen Script ( Der Ordnung halber einen Sammelscript für ALLE Outputs die wir brauchen)
In diesen sagen wir im Prinzip Lese die folgenden z.b. 60 Lvars und schreibe die Daten auf die Offsets A, B, C , D und so weiter.
Du baust dir ansich eine eigene Offsetliste ( wie du sie von den Standardfliegern oder der PMDG kennst) nur das du diese durch deinen Script fütterst und nicht durch die automatic von FSUIPC.
Für INPUTS gehst du nun einen anderen Weg.
Hier wäre es eine Idee für jeden Input ein eigenes Macro zu erstellen.... Jedes Macro läuft nur genau für eine Eingabe und endet danach von selbst. Die Macros wiederrum feuern wir über eine der uns zu verfügung stehenden Möglichkeiten .... Keycommand ODER Joystickbutton (LeoBodnar/ArduinoJoystickcontoller) ODER Vjoy ODER Mobi LuaMacroTool.

Um ein Beispiel zu bringen.

Für den Encoder würden wir 2 Macros machen. Nehmen wir das Linke.
Makro: Hole Wert von der Lvar und setzte auf Variable .... Variable verändern .... z.b. minus 100 ft .... Schreibe veränderte Variable zurück auf Lvar.... END
Dieses makro starten wir mit einen Linksdreh am Encoder .... Z.b. in dem das du hier "a" belegst und in FSUIPC sagst das bei "a" eben dieses Macro EINMAL ausgeführt wird.

Bei Schaltern (An/Aus) ist es noch einfacher.... Denn hier brauchen wir den aktuellen zustand gar nicht wissen.... Hier würde ein Press (schalter auf AN) schlicht die Lvar mit dem AN Wert schreiben... (Völlig egal ob er im Sim Bereits an war. )

********

Zusammenfassend: Denk mal über das Macro System nach.
Weiterhin eine Idee.... Hannes (spricht auch deutsch) ist ebenfalls grad am basteln was LUA angeht ( anderes AddOn aber gleiches Problem)
Wollen nächste Woche mal Teamviewer machen und reden. Du kannt gerne mitmachen. 3 Leute sind besser als 2
Good Luck !
2018-12-14 05:43
Avatar
StephanHo
From: EDDG, Germany
Posts: 1260
Supporter
So, wie ich das Script verstehe, ist es schon schlüssig.

iconCode:
first = true

while true do
    if first then
        initialALTVal = ipc.readLvar("L:AB_AP_ALT_Select")
        ipc.writeUD(0x66D5, initialALTVal)
        first = false
    else
        currentALTVal = ipc.readUD(0x66D5)
        ipc.writeLvar("L:AB_AP_ALT_Select", currentALTVal)
    end
end


first ist eine Hilfsvariable, die zum Start gesetzt wird.
while true do startet eine Endlosschleife, die mit dem 2. end (äußere Scchleife) abgeschlossen wird, sie aber nicht verläßt.
if first then muß man lesen als: if first == true

Was jetzt folgt, dient lediglich dazu, die Variable aus dem Sim zu holen und mit dem Offset (66D5) zu synchronisieren, also Wert holen und auf den Offset schreiben.
Dann wird first auf false gesetzt und dieser Teil der Schleife wird nicht mehr durchlaufen.
Dafür wird jetzt permanent der else-Teil (innere Schleife) durchlaufen.
Hier wird nun permanent der Offset geholt. Dieser wird mit einer anderen Config beschrieben, z.B. mit einem Wert, der mit einem Encoder verändert wird und diesen Offset beschreibt.
Dieser Offestwert wird dann wieder zurück in die Sim geschrieben und sollte dort angezeigt werden.
Da die äußere Schleife keinen Ausgang hat, wird das Script bis zum Sankt-Nimmerleinstag laufen oder bis sie mit einem Kill-Kommando abgeschossen wird.
Ein Vergleich auf Veränderung findet nicht statt. Also wird ohne Veränderung bei jedem Schleifendurchlauf der selbe Wert auf den Offset geschrieben.
Wenn das Script nur bei einer Änderung schreiben soll, müßte das Script etwa so aussehen:

iconCode:
first = true
wert_alt=0 // Variable für Zwischenspeicherung

while true do
    if first then
        initialALTVal = ipc.readLvar("L:AB_AP_ALT_Select")
        ipc.writeUD(0x66D5, initialALTVal)
        wert_alt=initialALTVal // Wert initialisieren
        first = false
    else
        currentALTVal = ipc.readUD(0x66D5)
        if wert_alt != currentALTVal then   // ungleich?
              ipc.writeLvar("L:AB_AP_ALT_Select", currentALTVal) // Sim schreiben
              wert_alt = currentALTVal // neuen Wert zuweisen
        end
    end
end


Kenne mir mit LUA offen gesagt nicht aus, aber mit den hier dargestellten Fragmenten sollte der Syntax stimmen.
Wenn nun der wert_alt nicht mit dem currentALTVal übereinstimmt, wird er neu geschrieben, ansonsten läuft das Script zwar, aber es schreibt nicht mehr dauerhaft den Offset.

Den Input kann man ja durchaus mit Mobiflight auf den Offset schreiben aber mit LUA auslesen. Vielleicht kann man das Script auch so umschreiben, daß es sich nach jeder Aktion selbst beendet und mit jedem Dreh am Encoder neu gestartet wird.
Grüße,
Stephan
2018-12-14 23:34
Avatar
FraMic
Posts: 7
Erstmal Danke für Eure Unterstützung,

hab mal mit Macros rumprobiert, leider ganz ohne Erfolg. Muss aber gehen=>
(darf man hier Links zu anderen Foren setzen?) https://www.friendlyflusi.de/forum/index.php?thread/479-lua-script-und-fsuipc/&postID=7699#post7699
Dann bekomme ich die Funktionen nur über Tastatur hin, Bsp: AB_AP_ATHR (Switch für Auto Throttle)
Also: alles nicht soo einfach, Muss wohl erstmal die FSUIPC Dokumentation durchackern ...

Zurück zur LUA:
@StephanHo habe das Script nochmal angepasst:
iconCode:
first = true
wert_alt=0 -- Variable für Zwischenspeicherung

while true do
    if first then
        initialALTVal = ipc.readLvar("L:AB_AP_ALT_Select")
        ipc.writeUD(0x66D5, initialALTVal)
        wert_alt=initialALTVal -- Wert initialisieren
        first = false
    else
        currentALTVal = ipc.readUD(0x66D5)
        if wert_alt == currentALTVal then   -- ungleich? !!! ANGEPASST !!!
              ipc.writeLvar("L:AB_AP_ALT_Select", currentALTVal) -- Sim schreiben
              wert_alt = currentALTVal -- neuen Wert zuweisen
        end
    end
end


Er liest dann aber nur noch den Wert vom FSPanel und schreibt in mein Display, zurück geht leider nicht …

@pizman82
TeamViewer ist eine gute Idee, wir sollten per PM einen Termin abstimmen.
(Können wir das auch zu anderen Zeiten machen, als zu den Du üblicher Weise antwortest :lol: ?)

Aus Richtung Mobiflight in Richtung FSUIPC funktioniert ja alles tadellos.
Kann beim FSUIPC Logging auch sehen, auf welchen Offsets die Veränderungen stattfinden.
Von daher passt der Start also schonmal …

Das FSPanel sollte auf jeden Fall "Master" sein. Werden also dort Veränderungen gemacht, sollten die auf dem Display erscheinen.
Also egal, ob ich am Panel oder am Encoder verstelle: verstellt wird immer nur das FSPanel. Der Display-Wert entspricht immer dem FSPanel.
Oder sehe ich das falsch?

Im Moment sieht es für mich so aus, als würde ich das EXTDisplay verstellen (Mobiflight) und dann das Panel darauf anpassen … Das wäre meiner Meinung nach nicht OK
Was denkt Ihr?
(Ich muss mich jetzt erstnochmal in Eure Ausführungen einarbeiten ;)

Viele Grüße
FraMic
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-12-15 13:46
Avatar
StephanHo
From: EDDG, Germany
Posts: 1260
Supporter
Ich denke, da hast du etwas falsch verstanden.

!= bedeutet NICHT GLEICH

und

== bedeutet IST GLEICH

Du veränderst ja den Wert z.B. mit einem Encoder. Solange das nicht geschieht, ist wert_alt gleich currentALTVal.
Solange das der Fall ist, braucht das Script nichts zu tun.
Wenn ich es richtig verstanden habe, schreibt dein Encoder veränderte Werte nach 0x66D5. Erst wenn das geschieht, ist auch currentALTVal verändert.
Dieser veränderte Wert ist dann auf dem Display darzustellen.

Stellst du den Vergleich auf == ab, wird nur etwas geschrieben, SOLANGE beide Werte identisch sind. Das macht in meinen Augen keinen Sinn.
Wenn ich dich bzw. das Script richtig verstanden habe, dann möchtest du Veränderungen anzeigen.
Was soll das Script denn machen, wenn wert_alt und currentALTVal ungleich sind???
Für die Ungleichheit fehlt dann wieder eine ELSE-Bedingung.

Beim 1. Script wird permanent 0x66D5 geholt und auf L:AB_AP_ALT_Select geschrieben.
Das 2. Script schreibt hier nur, wenn 0x66D5 nicht mehr mit dem zuletzt geschriebenen Wert übereinstimmt. Daher !=.
Grüße,
Stephan
2018-12-15 15:42
Avatar
FraMic
Posts: 7
Ähm, jo, da hast Du definif recht …

daher hab ich mal was anderes probiert:
iconCode:
while true do
-- Lese vom FS Panel
	currentATHRVal = ipc.readLvar("L:AB_AP_ATHR")
	currentALTVal = ipc.readLvar("L:AB_AP_ALT_Select") 
	currentHDGVal = ipc.readLvar("L:AB_AP_HDG_Select")
	currentSPDVal = ipc.readLvar("L:AB_AP_SPEED_Select")

-- Lese Altitude vom MF Encoder
	initialALTVal = ipc.readUW(0x66C7) 

-- Schreibe ins MF Display	
	ipc.writeUW(0x66D1, currentATHRVal)
	ipc.writeUW(0x66D5, currentALTVal) 
	ipc.writeUW(0x66F5, currentHDGVal)
	ipc.writeUW(0x66F7, currentSPDVal)
	
	if	currentALTVal == initialALTVal then
	-- do nothing
	else
		ipc.writeLvar("L:AB_AP_ALT_Select", initialALTVal) -- Schreibe ALTITUDE ins FS Panel	
	end
end


Das Lesen und Schreiben funktioniert, jedoch nicht das verstellen von ALT aus dem FSPanel.
Nachdem ich etwas darüber nachgedacht habe ist es eigentlich egal, weil wenn ich mein Exteren Panel habe, brauch ich ja nicht mehr am FSPanel drehen …?!

Viele Grüße
FraMic
Simulator: P3Dv4.4
Mobiflight: V7.5
Modul: Arduino Mega2560 R3
FSUIPC: V5 - Paid
Sceneries: Aerosoft EDDK, Aerosoft EDDF, Aerosoft LPMA
Airplanes: Aerosoft A318/A319, PMDG 737
2018-12-15 18:12
Avatar
StephanHo
From: EDDG, Germany
Posts: 1260
Supporter
warum schreibst du diese Passage so kompliziert:

iconCode:
if	currentALTVal == initialALTVal then
	-- do nothing
	else
		ipc.writeLvar("L:AB_AP_ALT_Select", initialALTVal) -- Schreibe ALTITUDE ins FS Panel	
	end


schreib sie doch so:

iconCode:
if	currentALTVal ~= initialALTVal then
	    ipc.writeLvar("L:AB_AP_ALT_Select", initialALTVal) -- Schreibe ALTITUDE ins FS Panel	
	end


Statt "~=" könnte evtl auch "<>" gehen. Das müßte ein LUA-Insider sagen können. Logisch ist beides, ob's möglich ist, ist was anderes, hängt vom Syntax ab.

Für den Simulator sollte es keine Rolle spielen, ob du das FS-Panel bedienst oder dein Externes.

Ist denn die Adresse, die der Sim vom Sim-Panel verändert, nicht bekannt? Dann kannst du doch den mit deinem Encoder verändern.

EDIT: Hab's gefunden UNGLEICH wird als "~=" geschrieben. Oben geändert
[Last edited by StephanHo, 2018-12-15 23:16]
Grüße,
Stephan
2018-12-15 18:59
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 2464
Supporter
Soll das ein eigentändiger Code sein oder ist das nur der "Auszug" aus deinen script ?

Denn bei deiser version hast du keine Initialisierung.... Du Liest zwar die Lvar und den Offset .... Und vergleichst...
Du hast aber diesesmla keine "initialisierung" obwohl du die Variable "initial" nennst.... Der Offset 66C7 ist somit bei beginn "0 - Zero" da du ihn nicht "einmalig" angleichst.

Desweiteren hast du mich verwirrt mit dem Ausdruck "FS PANEL" Was im FS passiert interessiert uns doch eigentlich nicht ! Sprich ob der Encoder im Virtuellen Cockpit geht oder nicht ist doch völlig egal wenn du jetzt einen "echten" hast.

Folgerlich brauchst du doch auf den ersten blick auch nicht mehr 2 Variablen hier.

Auf initialALTVal = ipc.readUW(0x66C7) schreibst du in deinen System mit dem Encoder per Mobiflight und nutzt das als Vergleichswert.
Mit ipc.writeUW(0x66D5, currentALTVal) schreibst du auf einen ANDEREN Offset den aktuellen Wert der Lvar.

Einfache Logik... Nach einer initialisierung zeigt doch der Erste Wert ( 667C ) bereits den aktuellen Wert im Sim an. Veränderst du diesen wird DAMIT ja der Sim sofort wieder beschrieben. Folge... Der Sim hat sofort nach dem drehen erneut den gleichen Wert als dieser Offset.

Folgerlich müsstest du für das Display nicht den Wert erneut lesen sondern könntest auch den Input Offset einfach als Output verwenden.

******
Aber VORSICHT:
Das erklärte System und auch deins funktioniert NUR wenn der Airbus nicht selbsttändig einen Wert verändern kann. Angenommen irgendwas im Sim wie das FMS kann die AP Altitude verstellen ( Keine ahnung ob das Airbus kann) dann würde das nicht gehen denn dein script würde ja stets den Wert wieder auf den zurückändern der grad im Offset steht.

Ich bleib dabei..... Die einzig Sinnvolle Logik sehe ich in einen einmaligen Macro ! Für Schalter sicher problemlos möglich.... Ob ein Encoder das packt müsste man testen !
Good Luck !
2018-12-16 05:22
Go to page 1Go to page 012Go to page 2Go to page 2