[SU12 Beta] twin-engine helicopter throttle is not controllable

Hello. I have installed 1.31.18.0 and our product is crippled. We need to
independently control the throttle for each engine and this features is newly
unavailable in SU12. We have a twin-engine helicopter with custom FADEC logic.
Each indexed engine was (SU11) controlled by simconnect data values "GENERAL ENG THROTTLE LEVER POSITION:1", "Percent". This has no effect on 1.31.18.0. I
have first ensured that ROTOR GOV SWITCH POS, bool is 0. Per the flighting
documentation here:
https://docs.flightsimulator.com/flighting/html/Programming_Tools/Event_IDs/Helicopter_Specific_Events.htm
I see there exists K:AXIS_HELICOPTER_THROTTLE1_SET and
K:AXIS_HELICOPTER_THROTTLE2_SET 0-16384. These events do control the throttle
reliably, but they actually control both engines together despite their names.
Is there a data variable that we could set (and then mask these events)? For
example we set the collective position this way (blocking the events and
writing to the collective position variable). Using these commands via debug,
both engines are always controlled together.
SimVar.SetSimVarValue(“K:ROTOR_GOV_SWITCH_OFF”,“bool”, 1)
SimVar.SetSimVarValue(“K:AXIS_HELICOPTER_THROTTLE1_SET”,“number”, 0)
SimVar.SetSimVarValue(“K:AXIS_HELICOPTER_THROTTLE1_SET”,“number”, 16384)
SimVar.SetSimVarValue(“K:AXIS_HELICOPTER_THROTTLE2_SET”,“number”, 0)
SimVar.SetSimVarValue(“K:AXIS_HELICOPTER_THROTTLE2_SET”,“number”, 16384) Right
now I do not have a workaround and we are seeing other problems but are now
blocked on discovering them, which means we may not be able to assure a good
transition to SU12 for our customers. Per communications we expected the
flight model to be compatible but it looks like it’s changed despite the
configuration not changing, so this especially will also take time to fix on
top of resolving flight control primitives. @FlyingRaccoon Hello and apologies
for the ping, but this is an urgent issue as it has rendered our products
completely inoperative in the forthcoming sim update. Is there some workaround
that you can suggest? EDIT 1: Controlling engine N1 directly seems to be
working. This solution had tradeoffs but has us flying again. :slight_smile: This topic
may be related (N2 is not simulated for both engines):
https://devsupport.flightsimulator.com/t/5150

Hello @davux3 As you have probably seen in the release notes, there are quite
a few changes on the helicopter controls. I have forwarded this feedback to
our core sim engineers and I’ll come back to you when we have decided how to
address this issue. Thanks for the feedback. Regards, Sylvain

Hello @davux3 First off all, thank you for your quick feedback! To be honest,
I’m really surprised that some multi engine helicopter had a separate engines
control in SU11. Trying to figure it out now, how it was possible… Because
form what I saw in the SU11 code, there was only one value (after all
calculations with separate throttles and governor) that finally fed all
engines throttles at the same time. Thus, all engines got the same control
value of throttle. That wasn’t changed in SU12. But I’ve changed the way how
this final value is calculated. Could you please clarify one thing for me so
that I can help with this issue? What exactly way did you use to control
separate engines and how they reacted in SU11? Like: “set both vars XXX and
YYY values to ZZZ, then change XXX var value to VVV, and then engine #N
reaction was TTT” UPD: Also any tips on cockpit controls and related
procedures would be very helpful because I am not familiar with its cockpit.
Thank you in advance! Regards, Andrey

Hi Andrey. Thank you for the quick engagement. I have provided a package (our
Airbus H145) you can test on, to Asobo, in another thread. Please let me know
if you don’t have access to that package and I can add it again here. You are
welcome to always test with our aircraft and we are happy to work with you in
public and private on these matters. This is really simple and explained in my
first message here already: I was (in SU11 with native helicopters and as a
new native helicopter) using SimConnect, in WASM, to set these data values:
“GENERAL ENG THROTTLE LEVER POSITION:1”, “Percent” This controls the throttle
for engine 1. You will see this reflected by the Engines debug, it’s
definitely controlling the throttle position for each engine there, which then
drives N1. “GENERAL ENG THROTTLE LEVER POSITION:2”, “Percent” This controls
the throttle for engine 2 in the same fashion. We have extensive OEI logic so
I’m 100% sure this actually did work.

I confirm that there is a difference between SU11 and SU12 on this subject.
Long story “short”. In SU11 there was a problem with a turbine engine
governor, which was always ON and didn’t depend on the switch. But there was a
“hack” on how to disable our governor, and you used this method: if one set
the “governed_pct_rpm_min” parameter to an obviously unrealistically high
value, say 10 in your case, then the RpmPct of the engine(s) never reaches
this threshold and this eliminates our governor and its code from work. So the
original throttles values are not changed and remain as you set them with
“GENERAL ENG THROTTLE LEVER POSITION:1/2”. In SU12 it is now possible to
disable a turbine engine governor. But the logic of helicopter engine(s)
throttle control also was changed due to the implementation of the correlator
and engine trimmer. Now there is also a new variable in the code that reflect
the position of the twist grip on the collective. And we still rely on the
helicopter throttles input, not the airplanes throttles. Although when the
governor is ON, the same final throttle value is applied to the different
engines in SU12, as in SU11 (there is no change here, which is why I was
surprised at first). But. When the governor is OFF, the throttle value is now
also fed to each engine in the same way after “calculations” (since now not
only the governor, but also the twist grip control and correlator are taken
into account). Here’s what’s changed. And this is why the values you set with
“GENERAL ENG THROTTLE LEVER POSITION:1/2” are now overwritten, even if you
keep our governor disabled. In fact, the root of the problem is that there was
no difference in the legacy code between “throttle control” (in the cockpit)
and “actual throttle” (on the engine). This is the same variable. You set the
“control” via “GENERAL ENG THROTTLE LEVER POSITION:1/2” (and now it goes
through all the systems), however your intention is obviously to set the
“actual throttle” on the engine. I have this in mind to redo in the future to
make it possible to split engine control on multi-engine helicopters. But it
needs a lot of refactoring since there are hundreds areas in the code where
this variable is used. All I can suggest now is to add a new parameter to the
config file for helicopters that will force us to use the original values of
the throttles variables that you set with “GENERAL ENG THROTTLE LEVER
POSITION:1/2”, bypassing (disabling) all the functionality implemented in the
SU12. I don’t have a better idea yet. I’ll give it some more thought. If you
have any other suggestions, please, let me know. Regards, Andrey

So, there will be a new parameter in the [HELICOPTER] section of the
flight_model.cfg :

enable_custom_throttles_control = 0 ; boolean , set 1 to control engines throttles directly using SimVars and bypassing (disabling) all internal Sim functional, default = 0

You will get it with a new build 1.31.19.0, hope it will help! :slight_smile: Don’t
hesitate to ask any questions. Regards, Andrey

Hi Andrey. This solution will certainly work for us, though maybe it will
cause confusion for others as it is implicitly disabling several other
features in a way that may not be expected. We are happy with this solution of
course. I’m not sure exactly what you refer to by twist grip throttle (with
respect to MSFS). Do you mean the HELICOPTER THROTTLE events? (like
AXIS_HELICOPTER_THROTTLE1_SET and the various button versions). Indeed some of
the duplication for helicopters in SU11 had me confused. I was able to mask
these events but I was never able to successfully both intercept and then emit
the events. It seemed at the end that the GENERAL ENG THROTTLE LEVER POSITION
data vars were what is finally manipulated below the surface when the sim
receives any of those events. In the end it would still be optimal if the
throttle worked when the governor and correlator are turned off, so, I’m not
fully clear on why at the bottom of the stack of calculations, we don’t still
end up with a throttle lever position, even if its not the expected var above.
I wanted to mention quickly a couple of other related things: - The Working
Title guys may have some input, as the FADEC in their CJ4 was the inspiration
for how to accomplish this type of interception logic. I don’t see any
difference between the way fixed wing was doing the throttle levers (input vs
output), but either way this pattern exists so there may be some commonality
to consider. In general it seems you mask the events (to take control) and
then directly manipulate the data var. - I think the (seemingly) singleton
governor logic in MSFS may be part of the problem. In my research I find that,
if a multi-engine helicopter has GOV logic, it is not shared between engines,
but rather the logic is isolated to each engine. Both governors will
independently meter their respective engine against the NR datum (i.e. the new
engine trimmer addition), but they don’t know about each other (cross-talk is
common for FADEC). Dave

Hello Dave, I’m glad you’re happy with the proposed solution. You actually
raised a very interesting topic, but I need more time to answer your questions
and now I am busy with another urgent task, sorry! Basically, from what I
know, separate throttle control input commands have been added for helicopters
because in a helicopter, unlike an airplane, the primary control is the
collective (which has similarities to propeller pitch control on an aircraft)
and the throttle is only a secondary control. I’ll try to come back with
details later, if you need some, let me know! Anyway I hope the new parameter
helps to solve your problem and thanks again for your quick feedback! Regards,
Andrey

Fix confirmed working in 1.31.19.0.

I’ve run into the same issue regarding separated controls for each of the
helicopters engines. However when I enable enable_custom_throttles_control, I
don’t seem to have any control over my engines with the
AXIS_HELICOPTER_THROTTLE1_SET and HELICOPTER_THROTTLE1_SET variables in XML.
Can you suggest which variabels and events stay settable when when custom
controls are enabled?

Try the non-helicopter ones, like AXIS_THROTTLE_SET. If that doesn’t work,
then the only way may be to directly set the simconnect data values like I
mention above.

Setting the lever with myVar (>A:GENERAL ENG THROTTLE LEVER:1, percent) is the
only thing I got working without resorting to simconnect.