Aerosoft official retail partner for Microsoft Flight Simulator !! 
Click here for more information

Jump to content

Archived

This topic is now archived and is closed to further replies.

ralhue

Cowl Flaps mit Achse - geht das?

Recommended Posts

Hallo Carsten,

toll was so alles mit LUA geht. Angeregt durch Deine Anleitung "Zwei Achsen steuern gemeinsam das Seitenruder (unpassende Hardware nutzen)" kommt mir die Idee die Cowl Flaps mit einer Saitek-Achse zu steuern.

Ist es möglich z. B. bei der Cessna Centurion 210 genau diese Funktion auf eine Achse zu legen obwohl es in X-Plane lediglich die zwei Tastenfunktionen "Move Cowl Flaps to close a bit" und "Move Cowl Flaps to open a bit" gibt? Wenn das realisierbar wäre, könnte man das dann auch für Vergaservorwärmung oder Primer etc. nutzen.

LG Ralf

Uups, sehe gerade für Vergaservorwärmung gibt es ja die Möglichkeit der Achsenzuweisung.

Share this post


Link to post
Share on other sites

Die Cowl Flaps kann man mit einem Script automatisch öffnen oder schließen. Das macht schon seit Jahren das Script "automatic_cowl_flaps.lua" aus den Beispielen von FlyWithLua.

https://github.com/X-Friese/FlyWithLua/blob/master/FlyWithLua/Scripts (disabled)/automatic_cowl_flaps.lua

Wie man dem Script entnehmen kann stammt es noch aus der "alten Zeit" vor der Einführung der magischen Tabellen. Heute sähe es so aus:

xp_ENGN_oil_temp = dataref_table("sim/flightmodel/engine/ENGN_oil_temp")
xp_ENGN_cowl     = dataref_table("sim/flightmodel/engine/ENGN_cowl")


function automatic_cowl_flaps()
	-- check and set the first engine
	if xp_ENGN_oil_temp[0] < 0.35 then
		xp_ENGN_cowl[0] = 0
	elseif xp_ENGN_oil_temp[0] >= 0.35 and xp_ENGN_oil_temp[0] < 0.65 then
		xp_ENGN_cowl[0] = ENGN_oil_temp[0] * 3.3333333 - 1.1166666
	else
		xp_ENGN_cowl[0] = 1
	end
	-- check and set the second engine
	if xp_ENGN_oil_temp[1] < 0.35 then
		xp_ENGN_cowl[1] = 0
	elseif xp_ENGN_oil_temp[1] >= 0.35 and xp_ENGN_oil_temp[1] < 0.65 then
		xp_ENGN_cowl[1] = ENGN_oil_temp[1] * 3.3333333 - 1.1166666
	else
		xp_ENGN_cowl[1] = 1
	end
end

do_often("automatic_cowl_flaps()")

Man muss hier nur daran denken, dass sim/flightmodel/engine/ENGN_oil_temp einen Wert von 0.0 bis 1.0 besitzt, in der offiziellen Tabelle mit "ratio" bezeichnet. In Celsius bekommt man den Wert als sim/flightmodel/engine/ENGN_oil_temp_c.

Wird dem Motor warm, dann öffnen sich die Klappen, sinkt die Öltemperatur auf unter 35% ihres Wertebereichs bleiben die Klappen geschlossen. Realistischer ist sicher die Kopplung ein einen Hebel an der Hardware. Das ginge dann noch einfacher.

local xp_JOY_axis  = dataref_table("sim/joystick/joystick_axis_values")
local xp_ENGN_cowl = dataref_table("sim/flightmodel/engine/ENGN_cowl")

local COWL_AXIS = 12

function axis_driven_cowl_flaps()
	-- set both cowl flaps with one axis
	xp_ENGN_cowl[0] = xp_JOY_axis[COWL_AXIS]
    xp_ENGN_cowl[1] = xp_JOY_axis[COWL_AXIS]
end

do_every_frame("axis_driven_cowl_flaps()")

Mit der Variable COWL_AXIS definiert man die Axennummer, die man mit dem DataRefEditor ermittelt.

Share this post


Link to post
Share on other sites

Hallo Carsten,

danke - hat prima geklappt. Mit dem DataRefEditor kann ich jetzt schön beobachten, wie sich der Wert von

sim/flightmodel/engine/ENGN_cowl

ändert. Leider wird dieser dataref nicht von simcoders benutzt und das ganze ist damit nutzlos (vom Lernerfolg mal abgesehen).

Auch ein umschreiben des script auf:

local xp_JOY_axis  = dataref_table("sim/joystick/joystick_axis_values")
local xp_ENGN_cowl = dataref_table("simcoders/rep/engine/cowl/handle_ratio_")

local COWL_AXIS = 70

function axis_driven_cowl_flaps()
	-- set both cowl flaps with one axis
	xp_ENGN_cowl[0] = xp_JOY_axis[COWL_AXIS]
    xp_ENGN_cowl[1] = xp_JOY_axis[COWL_AXIS]
end

do_every_frame("axis_driven_cowl_flaps()")

bringt lediglich ein abkac.... der LUA engine mit sich. Habe jetzt mal Claudio von simcoders angeschrieben - eigentlich ist der sehr nett und hilfsbereit. Mal schauen.

Wie kann man eigentlich einen nicht default dataref im Editor beobachten?

LG Ralf

 

Share this post


Link to post
Share on other sites

Also - ich bin ein bisschen weiter. Wenn ich im skript statt

local xp_ENGN_cowl = dataref_table("sim/flightmodel/engine/ENGN_cowl")
local xp_ENGN_cowl = dataref_table("sim/cockpit2/engine/actuators/cowl_flap_ratio")

nehme, kann ich im DRE bei beiden refs simultan die Werteänderung von 0 - 1 sehen. Die Cowlflaps zeigen im Flug auch die gewünschte Wirkung. Einziger Schönheitsfehler - im Cockpit bewegt sich der Hebel nicht.

Was auch merkwürdig ist, der Drehenkoder, dem ich in einer Richtung "Move Cowl Flaps to close a bit" und in die andere "Move Cowl Flaps to open a bit" zugewiesen habe (dabei bewegt sich der Hebel im Cockpit auch) funktioniert nicht mehr sobald das luaskript aktiv ist.

Die von mir zwischenzeitlich getestete Variable

"simcoders/rep/engine/cowl/handle_ratio_"

scheint es nicht zu geben. Denn wenn die in einem Skript auftaucht stoppt die LUA-Engine.

LG Ralf

Share this post


Link to post
Share on other sites
Wie kann man eigentlich einen nicht default dataref im Editor beobachten?

Hallo Ralf,

schau dir mal den letzten Absatz hier an:

http://wiki.x-plane.com/DataRefEditor

Wenn ein Plugin seine Custom DataRefs nicht an den DRE veröffentlicht, dann bleibt nur der Weg dies von Hand in die Datei DataRefs.txt einzutragen.

Leider macht so gut wie kein Plugin davon Gebrauch mit dem DRE zu kommunizieren.

Share this post


Link to post
Share on other sites

Hallo Carsten,

jetzt passt alles. Claudio von simcoders.com hat sich gemeldet, und mir den passenden Namen des datarefs mitgeteilt. Er lautet nicht

"simcoders/rep/engine/cowl/handle_ratio_" wie es in der XPDRFS.lua unter "Custom Avionics\DRFS" steht

sondern

"simcoders/rep/engine/cowl/handle_ratio_0" (warum und wieso ist mir auch nicht klar)

Ich mußte dann noch ein bischen am Script basteln aber jetzt funktioniert es incl. Anzeige des Hebels im Cockpit.

local xp_JOY_axis  = dataref_table("sim/joystick/joystick_axis_values")
local xp_ENGN_cowl = dataref_table("simcoders/rep/engine/cowl/handle_ratio_0")

local COWL_AXIS = 70

function axis_driven_cowl_flaps()

    xp_ENGN_cowl[0] = xp_JOY_axis[COWL_AXIS]
    
end

do_every_frame("axis_driven_cowl_flaps()")

Ein weiterer Weg die Custom Datarefs anzuzeigen ist ja Dein Skript "display clist.lua". Das finde ich recht praktisch. Claudio habe ich gebeten in Zukunft doch bitte die DataRefs im DRE zu veröffentlichen.
Mal kucken wie es mit dem nächsten REP läuft ;-)

Vielen Dank für die tolle Unterstützung

LG Ralf

Share this post


Link to post
Share on other sites

Hallo Ralf,

du kannst auch die Eingabezeile von FlyWithLua verwenden und damit sogar Variablen beobachten. Die dürfen dann allerdings nicht als lokal definiert worden sein, denn dann kann die Eingabezeile die Variable nicht sehen.

Die aktuellen Werte werden als Bubble dargestellt.

Carsten

Share this post


Link to post
Share on other sites

×
×
  • Create New...