Sign in to follow this  
Guest iholrf

Microsoft engine startup programming error?

Recommended Posts

I find that if I want to start a JET engine with a purpose made starter button XML gauge, the starter motor continues to turn the engine over indefinitely (long after the pre-ignition spool up period) if the fuel is turned off. However, if you have a mixture leaning control for that engine, and apply full lean, the starter will stop turning the engine, or if put at full lean before pressing the starter button, the starter motor stops after about 10 seconds. I have tried all sorts of workarounds, to get my starter button to stop automatically after a period if the fuel is turned off but none work. I now suspect this is because the "Start jet engine" command within FS goes into a loop if the fuel is not available.Anyone seen this or got a fix?Peter

Share this post


Link to post
Share on other sites
Help AVSIM continue to serve you!
Please donate today!

Take a look at the code below, it is from the default 747 and you canadopt it to your needs.(G:Var1) if{ (A:Circuit general panel on, bool) (A:Eng1 N2 RPM, percent) 50 < && if{ 0 (>K:TOGGLE_STARTER1) } els{ (G:Var1) -- (>G:Var1) } } (G:Var1) 0 != (A:General eng1 starter, bool) ||5 (>G:Var1)hope it helps,Douglas.

Share this post


Link to post
Share on other sites

Hi,Here an example with a lot of conditions:...........(L:fhl,enum) 0 == (A:SIM ON GROUND,bool) (L:ignition, enum) 0 == (L:left starter switch,enum) 1 == and and (A:SIM ON GROUND,bool) ! (L:ignition, enum) 1 == (L:left starter switch,enum) 4 == and and | (L:Sys Fail,bool) (L:left ductpressure,number) 40 > (L:left AC volts,number) 100 > (L:left AC volts,number) 100 < (L:STBY AC volts,number) 100 > and | (L:left forward fuelpump,bool) (L:left aft fuelpump,bool) | (L:left center fuelpump,bool) | (P:Absolute Time,seconds) (L:left engine cooling,number) > and and and and and and if{ 0 (>L:left engine cooling,number) 5 (>L:left engine start up,enum) } (L:left engine start up,enum) if{ (A:Eng1 N2 RPM, percent) 50 < (L:left starter switch,enum) 0 == (L:left starter switch,enum) 1 == | (L:left starter switch,enum) 4 == | and if{ (>K:TOGGLE_STARTER1) } els{ (L:left engine start up,enum) -- (>L:left engine start up,enum) } } .........Start only possible when all conditions ok.The starter stops "firing" when N2 > 50% or when starter switch is in wrong position.(here you can add of course more functions to stop the starter if necessary)May be you can take something useful from it,Jan"Beatus ille qui procul negotiis..."

Share this post


Link to post
Share on other sites

I think the rucial bit, which you have both highlighted in different ways is that the starter stops firing when N2 reaches 50%. But if the fuel is off, N2 never reaches 50%. Nevertheless I'll try both ideas and report back.Peter

Share this post


Link to post
Share on other sites

I really wish I had more time to post here these days. I enjoy coming here from time-to-time and seeing what new and amazing concepts are being discussed, and even some of the "atomic clocks" that are being built as well! ( With apologies to Bill for using that! lol... )Bill, Jan, Rob, Eugen, Douglas, Nick, Tom and everyone... I truly hope all is well with you and your families. You have all been very helpful with me in the past. Again, I wish time would permit me to "build a clock" here every once in a while, but life has been busy to say the least. So with that being said...I read this post not long ago and thought I'd post my work-around for a 737 Engine Start Knob. As you all know by now, the nature of the starting knob in MSFS usually only allows for two image positions to be shown with the knob. There have been work-arounds, but they don't always work so well when you have four positions on the overhead: "Ground" "Off" "Continuous" and "Flight". Not only this, but there's a lot to be said for the lack of realism with a delayed "snap-to" the off position after the engine starts.So, the workaround here uses the same MSFS logic, but now adds another variable to the mix and thus allowing for an enumerative click event to be programmed, while still keeping the two engine start event keys: "0" and "5". You may throw in several commands as Jan has mentioned above, but for my purposes I've only included the "Sim On Ground" function for utilizing the "ignition" of the starter. The number 1 event is for the "Ground" firing, and the number 4 event is for the "Flight" firing. The "Continuous" event, number 3, can be used either in flight or on the ground, simulating takeoff, landing, turbulence or engine anti-ice conditions. In any case, the knob works independantly of the engine start commands and can be used to toggle between all four positions at any time. Availability of the system is dependant upon the (L:StartX Avail, bool) command.Again... hope all is well and we'll see about getting to this forum a bit more often. Thanks again guys! : )Here's the code for the 737 Engine Start Knob: (L:Start1 Var1, enum) if{ (L:Start1 Avail, bool) (A:Eng1 N2 RPM, percent) 50 < && if{ 0 (>K:TOGGLE_STARTER1) } els{ (L:Start1 Var1, enum) -- (>L:Start1 Var1, enum) } } (L:Start1 Var1, enum) 0 != (A:General Eng1 Starter, bool) || if{ (L:Start1 Var2, enum) } els{ (L:Start1 Var2, enum) }(L:Start2 Var1, enum) if{ (L:Start2 Avail, bool) (A:Eng2 N2 RPM, percent) 50 < && if{ 0 (>K:TOGGLE_STARTER2) } els{ (L:Start2 Var1, enum) -- (>L:Start2 Var1, enum) } } (L:Start2 Var1, enum) 0 != (A:General Eng2 Starter, bool) || if{ (L:Start2 Var2, enum) } els{ (L:Start2 Var2, enum) }(L:Start1 Var1, enum) if{ 2 (>L:Start1 Var1, enum) } (L:Start2 Var1, enum) if{ 2 (>L:Start2 Var1, enum) }Eng1 Start Control (%((L:Start1 Var2, enum))%{case}%{:1}grd%{:2}off%{:3}cont%{:4}flt%{end})(L:Start1 Var2, enum) 2 == if{ 1 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) if{ 5 (>L:Start1 Var1, enum) } } (L:Start1 Var2, enum) 3 == if{ 2 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) 0 (>L:Start1 Var1, enum) } (L:Start1 Var2, enum) 4 == if{ 3 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) if{ 5 (>L:Start1 Var1, enum) } }(L:Start1 Var2, enum) 3 == if{ 4 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) ! if{ 5 (>L:Start1 Var1, enum) } } (L:Start1 Var2, enum) 2 == if{ 3 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) if{ 5 (>L:Start1 Var1, enum) } } (L:Start1 Var2, enum) 1 == if{ 2 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) 0 (>L:Start1 Var1, enum) }Eng2 Start Control (%((L:Start2 Var2, enum))%{case}%{:1}grd%{:2}off%{:3}cont%{:4}flt%{end})(L:Start1 Var2, enum) 2 == if{ 1 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) if{ 5 (>L:Start1 Var1, enum) } } (L:Start1 Var2, enum) 3 == if{ 2 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) 0 (>L:Start1 Var1, enum) } (L:Start1 Var2, enum) 4 == if{ 3 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) if{ 5 (>L:Start1 Var1, enum) } }(L:Start1 Var2, enum) 3 == if{ 4 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) ! if{ 5 (>L:Start1 Var1, enum) } } (L:Start1 Var2, enum) 2 == if{ 3 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) (A:Sim On Ground, bool) if{ 5 (>L:Start1 Var1, enum) } } (L:Start1 Var2, enum) 1 == if{ 2 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) 0 (>L:Start1 Var1, enum) }

Share this post


Link to post
Share on other sites

You know... the guy who posted earlier... who will remain nameless... must confess he posted the wrong code. It seems this was a blessing in disguise. Sometimes code needs to be placed in more than one gauge, and this circumstance was so for the engine starters on both my overhead and upper main panel bitmap images. This will cause "cross-talk" between the two that if one is removed the other will stay the same... if not changed... due to the fact someone forgot all about the second set of coding in the first place. Do I need to say that lack of sleep these days contributed to my not seeing the trees for the forrest in front of my face? Oh well... live and learn. In any case, here's the CORRECT code and a much more tidy usage of it in fact. Sorry for the redundancy here... (L:Start1 Var1, enum) if{ (L:Start1 Avail, bool) (A:Eng1 N2 RPM, percent) 50 < && if{ 0 (>K:TOGGLE_STARTER1) } els{ (L:Start1 Var1, enum) -- (>L:Start1 Var1, enum) } } (L:Start1 Var1, enum) 0 != (A:General Eng1 Starter, bool) || if{ (L:Start1 Var2, enum) } els{ (L:Start1 Var2, enum) }(L:Start2 Var1, enum) if{ (L:Start2 Avail, bool) (A:Eng2 N2 RPM, percent) 50 < && if{ 0 (>K:TOGGLE_STARTER2) } els{ (L:Start2 Var1, enum) -- (>L:Start2 Var1, enum) } } (L:Start2 Var1, enum) 0 != (A:General Eng2 Starter, bool) || if{ (L:Start2 Var2, enum) } els{ (L:Start2 Var2, enum) }(L:Start1 Var2, enum) 0 == if{ 2 (>L:Start1 Var2, enum) } (L:Start2 Var2, enum) 0 == if{ 2 (>L:Start2 Var2, enum) } (L:Start1 Var2, enum) 1 == (A:Sim On Ground, bool) && if{ 5 (>L:Start1 Var1, enum) } (L:Start1 Var2, enum) 2 == if{ 0 (>L:Start1 Var1, enum) } (L:Start1 Var2, enum) 3 == if{ 5 (>L:Start1 Var1, enum) } (L:Start1 Var2, enum) 4 == (A:Sim On Ground, bool) ! && if{ 5 (>L:Start1 Var1, enum) } (L:Start2 Var2, enum) 1 == (A:Sim On Ground, bool) && if{ 5 (>L:Start2 Var1, enum) } (L:Start2 Var2, enum) 2 == if{ 0 (>L:Start2 Var1, enum) } (L:Start2 Var2, enum) 3 == if{ 5 (>L:Start2 Var1, enum) } (L:Start2 Var2, enum) 4 == (A:Sim On Ground, bool) ! && if{ 5 (>L:Start2 Var1, enum) } Eng1 Start Control (%((L:Start1 Var2, enum))%{case}%{:1}grd%{:2}off%{:3}cont%{:4}flt%{end})(L:Start1 Var2, enum) 2 == if{ 1 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start1 Var2, enum) 3 == if{ 2 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start1 Var2, enum) 4 == if{ 3 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) }(L:Start1 Var2, enum) 3 == if{ 4 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start1 Var2, enum) 2 == if{ 3 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start1 Var2, enum) 1 == if{ 2 (>L:Start1 Var2, enum) 05 (>L:skpd_xml_sound_id,number) }Eng2 Start Control (%((L:Start2 Var2, enum))%{case}%{:1}grd%{:2}off%{:3}cont%{:4}flt%{end})(L:Start2 Var2, enum) 2 == if{ 1 (>L:Start2 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start2 Var2, enum) 3 == if{ 2 (>L:Start2 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start2 Var2, enum) 4 == if{ 3 (>L:Start2 Var2, enum) 05 (>L:skpd_xml_sound_id,number) }(L:Start2 Var2, enum) 3 == if{ 4 (>L:Start2 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start2 Var2, enum) 2 == if{ 3 (>L:Start2 Var2, enum) 05 (>L:skpd_xml_sound_id,number) } (L:Start2 Var2, enum) 1 == if{ 2 (>L:Start2 Var2, enum) 05 (>L:skpd_xml_sound_id,number) }

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this