• Which the release of FS2020 we see an explosition of activity on the forun and of course we are very happy to see this. But having all questions about FS2020 in one forum becomes a bit messy. So therefore we would like to ask you all to use the following guidelines when posting your questions:

    • Tag FS2020 specific questions with the MSFS2020 tag.
    • Questions about making 3D assets can be posted in the 3D asset design forum. Either post them in the subforum of the modelling tool you use or in the general forum if they are general.
    • Questions about aircraft design can be posted in the Aircraft design forum
    • Questions about airport design can be posted in the FS2020 airport design forum. Once airport development tools have been updated for FS2020 you can post tool speciifc questions in the subforums of those tools as well of course.
    • Questions about terrain design can be posted in the FS2020 terrain design forum.
    • Questions about SimConnect can be posted in the SimConnect forum.

    Any other question that is not specific to an aspect of development or tool can be posted in the General chat forum.

    By following these guidelines we make sure that the forums remain easy to read for everybody and also that the right people can find your post to answer it.

FS2004 EGT Question

Whatever I do the n2 needle gets to 11%, stops and returns to zero.

That is because you stop firing the starter beyond (L:ign,number), which I assume is 11 %. This is a FS9 specific behavior of TOGGLE_STARTER event, being different in FSX.
I think you should keep toggling the starter until engine is stabilized, around 50% N2.

Tom
 
I tried Tom but the needle never goes above 11% and always wants to return to zero. And the EGT also doesn't increase until above 22%.
If you could have a look at my starter code above and see if something can be done with it. Many thanks.
 
If you could have a look at my starter code above and see if something can be done with it. Many thanks.
Volo,

I've checked your code and I think it can be very much improved. To do so I would need you to write down some parameters:

- N2 % for EGT first (300 C?) peak, REAL DATA
- N2 % for EGT second rise REAL DATA
- N2 % for EGT rollback start, REAL DATA

- EGT peak at Ambient Temp 50 Celsius FS SIM
- EGT peak at Ambient Temp -40 Celsius FS SIM
- EGT for stabilized engine Ambient Temp 50 Celsius FS SIM
- EGT for stabilized engine Ambient Temp -30 Celsius FS SIM

- N2% at MIXTURE RICH (full Ctr-Shift-F4) FS SIM
- N2% at 50 % MIXTURE. FS SIM
- N2% at 10 % MIXTURE. FS SIM

Then I would be able to code some algorithms matching real values with sim values.

Tom
 
I think you should keep toggling the starter until engine is stabilized, around 50% N2.
That was a hard won lesson for FS9. This is the only event where a "runaway event" was required, due entirely to some poor FS9 coding...
 
Volo,

I've checked your code and I think it can be very much improved. To do so I would need you to write down some parameters:

- N2 % for EGT first (300 C?) peak, REAL DATA
- N2 % for EGT second rise REAL DATA
- N2 % for EGT rollback start, REAL DATA

- EGT peak at Ambient Temp 50 Celsius FS SIM
- EGT peak at Ambient Temp -40 Celsius FS SIM
- EGT for stabilized engine Ambient Temp 50 Celsius FS SIM
- EGT for stabilized engine Ambient Temp -30 Celsius FS SIM

- N2% at MIXTURE RICH (full Ctr-Shift-F4) FS SIM
- N2% at 50 % MIXTURE. FS SIM
- N2% at 10 % MIXTURE. FS SIM

Then I would be able to code some algorithms matching real values with sim values.

Tom

Many thanks Tom,
I'll compile the data for you by tomorrow.
 
Tom,
Here is some initial data. The real data is taken at EG0D Bruntingthorpe which has an elevation of 466feet The temperature was obscured so I am assuming 15c

- N2 % for EGT first (300 C?) peak, REAL DATA 29% n2
- N2 % for EGT second rise REAL DATA 580c There is a Top temperature control which cuts in at 595c The sim gets to 538c
- N2 % for EGT rollback start, REAL DATA 295c

- EGT peak at Ambient Temp 50 Celsius FS SIM 630c
- EGT peak at Ambient Temp -40 Celsius FS SIM 386c
- EGT for stabilized engine Ambient Temp 50 Celsius FS SIM 359c
- EGT for stabilized engine Ambient Temp -40 Celsius FS SIM 184c

- N2% at MIXTURE RICH (full Ctr-Shift-F4) FS SIM ? (full Ctr-Shift-F4) does nothing! However max n2% at 15c is 102%
- N2% at 50 % MIXTURE. FS SIM
- N2% at 10 % MIXTURE. FS SIM

Many thanks Tom for your help. It is much appreciated.
 
Volo,

Here :
- N2 % for EGT second rise REAL DATA 580c There is a Top temperature control which cuts in at 595c The sim gets to 538c
- N2 % for EGT rollback start, REAL DATA 295c

I need N2 % besides the temperature

Also you said firt peak of 300 C was reaching 22 %, then there was a short plateau, then starter to rise again.
I need values for N2% and EGT here as well.

Also IDLE N2% at full MIXTURE position
Thanks
Tom
 
Tom many apologies for the wrong data. It was getting late (excuse!!!)
- N2 % for EGT second rise REAL DATA 580c There is a Top temperature control which cuts in at 595c The sim gets to 538c 30% n2 btw the comment on the flight deck was that this was a bit hotter.
- N2 % for EGT rollback start, REAL DATA 295c 60% n2 but it needs to fall back from this to idle.


Also you said firt peak of 300 C was reaching 22 %, then there was a short plateau, then starter to rise again.
I need values for N2% and EGT here as well. Tom the short plateau was no more than 1 second if that. However the EGT does slow down from 200c 16% n2 to 400c 23% n2 then about 4.5 seconds to max second rise.

Idle n2 is 56% at ISA. Rising to 58% for hot airfields. That is currently on the ball.
If you can bear to watch this video
you can see what is currently in the sim model. The overall rate of EGT increase is about right except of course it starts to late. But the slow down between 200-400c is not modelled.

Incidentally when starting no.3 in the real start-up sequence the top temp was 550c. So no.4 in the example above is definately a bit hot. So the value I gave in my earlier post of 538c sim value is pretty much on the mark.

Many thanks again for your time.
 
Last edited:
Volo,

Thank you.
I am trying to build some XML parsing tables, so I need a bit of patient from you. Not much, I hope:stirthepo

Tom
 
Ok, I was able to make an aproximation for FS2004 of what XMLTables does in FSX.

Here are a couple of basic tables that can be used to calculate engine EGT at startup:

Code:
<Macro Name="TableRow">
    l1 @1 > l1 @2 &lt;= and
    if{
        @2 @1 - sp10
        @4 @3 - sp11
        l11 l10 / sp20
        l1 @1 - sp21
        l21 l20 * @3 + sp0
    }
</Macro>

<Macro Name="TableEnd">
    @1 @2 >
    if{
        @3 sp0
    }
</Macro>

<Macro Name="Table1">
    385 sp0   <!-- 385 = lowest value to return -->
    @1 sp1   <!-- source value (A:Ambient Temperature, Celsius) -->
    @TableRow(-40,15,385,545)
    @TableRow(15,50,545,630)
    @TableEnd(@1,50,630)
    l0   <!-- Return value -->
</Macro>

<Macro Name="Table2">
    <!--

    N2 RPM %    EGT Celsius
    =========================
        11            20
        16            200
        22            400
        25            400
        30            540
        32            545
        54            285
        56            295
    -->

    20 sp0   <!-- 20 = lowest value to return -->
    @1 sp1   <!-- source value (A:Eng3 N2 RPM, percent) -->

    <!-- TableRow meanings
    for each row:
    #1 parameter = lowest row source value
    #2 parameter = greatest row source value
    #3 parameter = return value for lowest row source value
    #4 parameter = return value for greatest row source value
    -->  
    <!-- TableEnd meaning
    #1 parameter = source value
    #2 parameter = greatest row source value of the table
    #3 parameter = return value for greatest row source value of the table
    -->  
    @TableRow(11,16,20,200)
    @TableRow(16,22,200,400)
    @TableRow(22,25,400,400)
    @TableRow(25,30,400,540)
    @TableRow(30,32,540,545)
    @TableRow(32,54,545,285)
    @TableRow(54,56,285,295)
    @TableEnd(@1,56,295)
    l0   <!-- Return value -->
</Macro>


<Element>
    <Select>
        <Value>
            <!-- 545 Celsius is peak temp at ISA -->
            @Table1((A:Ambient Temperature, Celsius)) 545 / (>L:EGT_per_AmbTemp_correction,number)
        </Value>
    </Select>
</Element>


<Element>
    <Select>
        <Value>
            @Table2((A:Eng3 N2 RPM, percent)) (L:EGT_per_AmbTemp_correction,number) * 0 max (>L:Eng3 EGT, celsius)
        </Value>
    </Select>
</Element>

Take a look at Table2 to understand how the concept works. It is very simple to adapt it to other needs.


Now, to complete the logic I need to know some things :

-When you switch the starter ON, I guess you are constant firing TOGGLE_STARTER for the proper engine right? What is the LVar name for the Starter switch?

Now, at some point you need to turn on another switch to enable FUEL ON, right? At what point of N2 RPM do you do that? I guess that switch fires a MIXTURE event, right? Are you sending Combustion AVar?

Any other info that might be relevant will be welcomed.

Tom
 
Hi Tom,
Your table looks understandable:scratchch
As far as I can tell the starter switches are (G:Var1). Here is the full code for engine 3
Code:
<Gauge Name="Starter 3" Version="1.0">
   <Element>
      <Select>
         <Value>(G:Var1) if{ (A:Circuit general panel on, bool) (A:Eng3 N2 RPM, percent) (L:ign,number) &lt; &amp;&amp; if{ 0 (&gt;K:TOGGLE_STARTER3) 0 (&gt;K:THROTTLE3_SET) } els{ (G:Var1) -- (&gt;G:Var1) 0 (&gt;K:MIXTURE3_INCR) } } (G:Var1) 0 != (A:General eng3 starter, bool) ||</Value>
         <Case Value="0">
            <Image Name="FUEL_SWITCH_2_OFF.bmp" ImageSizes="24,36"/>
         </Case>
         <Case Value="1">
            <Image Name="FUEL_SWITCH_2_ON.bmp" ImageSizes="24,36"/>
         </Case>
      </Select>
   </Element>
   <Mouse>
      <Help ID="HELPID_GAUGE_STARTER_SWITCH"/>
      <Tooltip ID="TOOLTIPTEXT_LIGHT_STARTER_ON"/>
      <Cursor Type="Hand"/>
      <Click>5 (&gt;G:Var1) 0 (&gt;K:MIXTURE3_LEAN) </Click>
   </Mouse>
</Gauge>
The starter switch stays on until (L:ign,number) which is arbitarily set as part of a general process gauge. Once the engine is running I can flick the starter switch to stop the engine. DM made it this way as he had no intention of doing an engine panel or HP cocks etc.He made it drive like a car lol.
Code:
<Value>(A:Ambient Temperature, celsius) 0 &lt; if{ 22 (>L:ign,number) } els{ 24 (>L:ign,number) }</Value>
As for the fuel itself there is no need to throw a switch. The fuel comes on automatically. Also the LP switches are on by default.
There is a fuel flow control gauge see code below. Other than that there is nothing else to control engine start-up.
Code:
<Gauge Name="fuel controller" Version="1.0">

//---------- CURRENT READING OF FUEL LEVEL - USED IN FUEL FLOW AND TOTAL FUEL LEVEL
   <Element>
      <Select>
         <Value>(A:FUEL TANK CENTER QUANTITY, meter cubed) (A:FUEL TANK CENTER2 QUANTITY, meter cubed) + (A:FUEL LEFT QUANTITY, meter cubed) + (A:FUEL RIGHT QUANTITY, meter cubed) + (&gt;L:DM FUEL CURRENT,number)</Value>
      </Select>
   </Element>

//---------- STOP ENGINES WITH LOW FUEL
   <Element>
      <Select>
         <Value>(L:DM FUEL CURRENT,number) 802.84 * flr s1 l1 2500 &lt; if{ l1 2100 == d (G:Var1) 3 != r &amp;&amp; if{ 0 (&gt;K:TOGGLE_ENGINE3_FAILURE) 3 (&gt;G:Var1) } l1 1920 == d (G:Var1) 2 != r &amp;&amp; if{ 0 (&gt;K:TOGGLE_ENGINE2_FAILURE) 2 (&gt;G:Var1) } l1 1900 == d (G:Var1) 4 != r &amp;&amp; if{ 0 (&gt;K:TOGGLE_ENGINE4_FAILURE) 4 (&gt;G:Var1) } l1 1880 == d (G:Var1) 1 != r &amp;&amp; if{ 0 (&gt;K:TOGGLE_ENGINE1_FAILURE) 1 (&gt;G:Var1) } }</Value>
      </Select>
   </Element>
//-------------------------------------

//---------- INITIALIZE READING OF FUEL LEVEL FOR ENGINE 1 - USED IN FUEL FLOW
   <Element>
      <Select>
         <Value>(L:DM FUEL 1 INIT FLAG,number) 1 != if{ (A:FUEL TANK CENTER QUANTITY, meter cubed) (A:FUEL TANK CENTER2 QUANTITY, meter cubed) + (A:FUEL LEFT QUANTITY, meter cubed) + (A:FUEL RIGHT QUANTITY, meter cubed) + (&gt;L:DM FUEL 1 INIT,number) 1 (&gt;L:DM FUEL 1 INIT FLAG,number) }</Value>
      </Select>
   </Element>

//-------------------------------------

//---------- INITIALIZE READING OF FUEL LEVEL FOR ENGINE 2 - USED IN FUEL FLOW
   <Element>
      <Select>
         <Value>(L:DM FUEL 2 INIT FLAG,number) 1 != if{ (A:FUEL TANK CENTER QUANTITY, meter cubed) (A:FUEL TANK CENTER2 QUANTITY, meter cubed) + (A:FUEL LEFT QUANTITY, meter cubed) + (A:FUEL RIGHT QUANTITY, meter cubed) + (&gt;L:DM FUEL 2 INIT,number) 1 (&gt;L:DM FUEL 2 INIT FLAG,number) }</Value>
      </Select>
   </Element>
//---------------------------------------

//---------- INITIALIZE READING OF FUEL LEVEL FOR ENGINE 3 - USED IN FUEL FLOW
   <Element>
      <Select>
         <Value>(L:DM FUEL 3 INIT FLAG,number) 1 != if{ (A:FUEL TANK CENTER QUANTITY, meter cubed) (A:FUEL TANK CENTER2 QUANTITY, meter cubed) + (A:FUEL LEFT QUANTITY, meter cubed) + (A:FUEL RIGHT QUANTITY, meter cubed) + (&gt;L:DM FUEL 3 INIT,number) 1 (&gt;L:DM FUEL 3 INIT FLAG,number) }</Value>
      </Select>
   </Element>
//---------------------------------------

//---------- INITIALIZE READING OF FUEL LEVEL FOR ENGINE 4 - USED IN FUEL FLOW
   <Element>
      <Select>
         <Value>(L:DM FUEL 4 INIT FLAG,number) 1 != if{ (A:FUEL TANK CENTER QUANTITY, meter cubed) (A:FUEL TANK CENTER2 QUANTITY, meter cubed) + (A:FUEL LEFT QUANTITY, meter cubed) + (A:FUEL RIGHT QUANTITY, meter cubed) + (&gt;L:DM FUEL 4 INIT,number) 1 (&gt;L:DM FUEL 4 INIT FLAG,number) }</Value>
      </Select>
   </Element>
//---------------------------------------


</Gauge>
Hope this is sufficient.
 
Last edited:
Ok you can test these two gauges:

-ENG3 Starter
Code:
<Gauge Name="Starter 3" Version="1.0">
   <Element>
      <Select>
         <Value>
        30 (>L:ign,number)
        (G:Var1)
        if{
            (A:Circuit general panel on, bool) (A:Eng3 N2 RPM, percent) (L:ign,number) &lt; and
            if{
                0 (>K:TOGGLE_STARTER3)
                0 (>K:THROTTLE3_SET)
                }
             
            (A:Eng3 N2 RPM, percent) 10 > (A:ENG3 COMBUSTION,bool) ! and
            if{
                1000 (>K:MIXTURE3_SET)          
                }
            (A:Eng3 N2 RPM, percent) (L:ign,number) >         
            if{
                0 (>G:Var1)
                }
            }
        (G:Var1) (A:General eng3 starter, bool) or
        </Value>
         <Case Value="0">
            <Image Name="FUEL_SWITCH_2_OFF.bmp" ImageSizes="24,36"/>
         </Case>
         <Case Value="1">
            <Image Name="FUEL_SWITCH_2_ON.bmp" ImageSizes="24,36"/>
         </Case>
      </Select>
   </Element>
   <Mouse>
      <Help ID="HELPID_GAUGE_STARTER_SWITCH"/>
      <Tooltip ID="TOOLTIPTEXT_LIGHT_STARTER_ON"/>
      <Cursor Type="Hand"/>
      <Click>(G:Var1) ! (>G:Var1) 0 (&gt;K:MIXTURE3_LEAN) </Click>
   </Mouse>
</Gauge>

(L:ign,number) is arbitrary set to 30 % N2, so the starter will auto shut at that number.

-ENG3 EGT
Code:
<Gauge Name="TGT 3" Version="1.0">
   <Image Name="EGT_back.bmp" Luminous="1"/>

    <Macro Name="TableRow">
        l1 @1 > l1 @2 &lt;= and
        if{
            @2 @1 - sp10
            @4 @3 - sp11
            l11 l10 / sp20
            l1 @1 - sp21
            l21 l20 * @3 + sp0
            }
    </Macro>

    <Macro Name="TableEnd">
        @1 @2 >
        if{
            @3 sp0
            }
    </Macro>

    <Macro Name="Table1">
        <!--
   
        -->
        385 sp0   <!-- 385 = lower value to return -->
        @1 sp1   <!-- source value (A:Ambient Temperature, Celsius) -->
        @TableRow(-40,15,385,545)
        @TableRow(15,50,545,630)
        @TableEnd(@1,50,630)
        l0   <!-- Return value -->
    </Macro>



    <Macro Name="Table2">
        <!--

        N2 RPM %    EGT Celsius
        =========================
            11            20
            16            200
            22            400
            25            400
            30            540
            32            545
            54            285
            56            295
        -->

        20 sp0   <!-- 20 = lower value to return -->
        @1 sp1   <!-- source value (A:Eng3 N2 RPM, percent) -->

        <!-- TableRow meanings
        for each row:
        #1 parameter = lowest source value
        #2 parameter = greatest source value
        #3 parameter = return value for lowest source value
        #4 parameter = return value for greatest source value
        --> 
        <!-- TableEnd meaning
        #1 parameter = source value
        #2 parameter = greatest source value of the table
        #3 parameter = return value for greatest source value of the table
        --> 
        @TableRow(11,16,20,200)
        @TableRow(16,22,200,400)
        @TableRow(22,25,400,400)
        @TableRow(25,30,400,540)
        @TableRow(30,32,540,545)
        @TableRow(32,54,545,285)
        @TableRow(54,56,285,295)
        @TableEnd(@1,56,295)
        l0   <!-- Return value -->
    </Macro>


    <Element>
        <Select>
            <Value>
                <!-- 545 Celsius is peak temp at ISA -->
                @Table1((A:Ambient Temperature, Celsius)) 545 / (>L:EGT_per_AmbTemp_correction,number)
                (A:Eng3 N2 RPM, percent) 55 > (>L:Eng3 Stable,bool)             
            </Value>
        </Select>
    </Element>



    <Element>
      <Position X="448" Y="452"/>
      <Image Name="Needle_EGT.bmp" PointsTo="North" Luminous="1">
         <Axis X="145" Y="365"/>
      </Image>
      <Rotate>
         <Value Minimum="0" Maximum="800">
        (L:Eng3 Stable,bool)
        if{
            (A:General eng3 exhaust gas temperature, celsius) (L:LastEGT3,enum) &gt;
            if{ (A:ENG3 EXHAUST GAS TEMPERATURE, celsius) (L:temp adj3,number) - (L:E3_hotstart, number) - }
            els{ (L:LastEGT3,enum) }
            }
        els{
              (A:Ambient Temperature, Celsius) (A:General eng3 exhaust gas temperature, celsius) > (A:Eng3 N2 RPM, percent) 10 &lt; and
              if{ (A:Ambient Temperature, Celsius) }
              els{
                    @Table2((A:Eng3 N2 RPM, percent)) (L:EGT_per_AmbTemp_correction,number) * 0 max    
                  } 
                }
        d (>L:EGT3_read_out,number)
        </Value>    
         <Nonlinearity>
            <Item Value="0" X="111" Y="622"/>
            <Item Value="50" X="90" Y="570"/>
            <Item Value="200" X="98" Y="290"/>
            <Item Value="400" X="402" Y="87"/>
            <Item Value="600" X="754" Y="257"/>
            <Item Value="800" X="774" Y="629"/>
         </Nonlinearity>
        <Delay DegreesPerSecond="60"/>
      </Rotate>
   </Element>

   <Mouse>
    <Tooltip>Engine3 EGT: %((L:EGT3_read_out,number))%!03d!&#176;%c %</Tooltip>
   </Mouse>
</Gauge>

Bear in mind I cannot test anything, so please check for eventual typos.

Besides, there are some adjust variables that I don't have any reference on how they work, so you'll have to adapt the code taking those into account.

And the EGT table is for a spooling up engine. When shut and spooling down, EGT decreases differently, and should be properly modeled as well.

Hope this helps.

Tom
 
Last edited:
Many thanks Tom,
I'll test shortly. The var (L:LastEGT3,enum) is the variable for EGT ambient cooling after shutdown.
Ok Tom. I have done a couple of quick test runs. The gauges work but there are some anomalies. First the EGT gauge suddenly runs to 400c and stops dead. It's too abrupt. The EGT after reaching max drops back to around 300c then suddenly jumps back up to 400c+
The EGT is very slow to respond to full throttle. And when turning off the engine the EGT rises to top temperature before falling back to zero.
I've done a very quick video to illustrate what happens.
 
Last edited:
Volo,

Not bad for a first approach, uh?;)
Those anomalies are easy to fix. Try to understand how the code works and you should be able to do that.

Anyway let me know if you get stuck...

Tom
 
Hi Tom,
I have adjusted table2 to make the EGT temperature rise a bit smoother. But the fly in the ointment is (L:Eng3 Stable,bool) Every time that is set from 0 to 1 or 1 to 0 the EGT jumps by at least 100c before falling back to its original value. Not sure how to correct that as the EGT should remain unchanged at that point. Also when the engine is turned off the EGT jumps to max EGT before falling all the way back to zero. The els{ (L:LastEGT3,enum) } which is the ambient cooling var doesn't seem to activate. Also once the throttle is applied the EGT rises according to the start-up tables (which completely screws my P7 calculations) and not normally. Guidance required. :) Otherwise all works.

I've noticed a descrepancy between (A:General eng3 exhaust gas temperature, celsius) and d (>L:EGT3_read_out,number) that could account for the difference in EGT when (L:Eng3 Stable,bool) is triggered. Or at least be part of the problem.
 
Last edited:
Volo,
I'm busy now. Hold on and I'll be checking it.

Tom
Hi Tom,
Your time is much appreciated. This is a video update and shows the needle fluctuating when (L:Eng3 Stable,bool) moves from 0 to 1 and back to 0. When I click the ignition switch you can see the EGT go to max and then fall to zero.
 
Here you have an improved version:

Code:
<Gauge Name="TGT 3" Version="2.0">
   <Image Name="EGT_back.bmp" Luminous="1"/>

    <Macro Name="TableRow">
        l1 @1 > l1 @2 &lt;= and
        if{
            @2 @1 - sp10
            @4 @3 - sp11
            l11 l10 / sp20
            l1 @1 - sp21
            l21 l20 * @3 + sp0
            }
    </Macro>

    <Macro Name="TableEnd">
        @1 @2 >
        if{
            @3 sp0
            }
    </Macro>

    <Macro Name="Table1">
        <!--
  
        -->
        385 sp0   <!-- 385 = lower value to return -->
        @1 sp1   <!-- source value (A:Ambient Temperature, Celsius) -->
        @TableRow(-40,15,385,545)
        @TableRow(15,50,545,630)
        @TableEnd(@1,50,630)
        l0   <!-- Return value -->
    </Macro>



    <Macro Name="Table2">
        <!--

        N2 RPM %    EGT Celsius
        =========================
            11            20
            20            400
            25            400
            30            540
            32            545
            56            430
        -->

        20 sp0   <!-- 20 = lower value to return -->
        @1 sp1   <!-- source value (A:Eng3 N2 RPM, percent) -->

        <!-- TableRow meanings
        for each row:
        #1 parameter = lowest source value
        #2 parameter = greatest source value
        #3 parameter = return value for lowest source value
        #4 parameter = return value for greatest source value
        -->
        <!-- TableEnd meaning
        #1 parameter = source value
        #2 parameter = greatest source value of the table
        #3 parameter = return value for greatest source value of the table
        -->
        @TableRow(11,20,20,400)
        @TableRow(20,25,400,400)
        @TableRow(25,30,400,540)
        @TableRow(30,32,540,545)
        @TableRow(32,56,545,430)
        @TableEnd(@1,56,430)
        l0   <!-- Return value -->
    </Macro>


    <Element>
        <Select>
            <Value>
                <!-- 545 Celsius is peak temp at ISA -->
                @Table1((A:Ambient Temperature, Celsius)) 545 / (>L:EGT_per_AmbTemp_correction,number)
                (A:Eng3 N2 RPM, percent) 56 >= (A:ENG3 COMBUSTION,bool) and (>L:Eng3 Stable,bool)           
            </Value>
        </Select>
    </Element>



    <Element>
      <Position X="448" Y="452"/>
      <Image Name="Needle_EGT.bmp" PointsTo="North" Luminous="1">
         <Axis X="145" Y="365"/>
      </Image>
      <Rotate>
         <Value Minimum="0" Maximum="800">
            (L:Eng3 Stable,bool)
            if{
                (A:General eng3 exhaust gas temperature, celsius)
                }
            els{
                (A:Ambient Temperature, Celsius) (A:General eng3 exhaust gas temperature, celsius) > (A:Eng3 N2 RPM, percent) 10 &lt; and
                if{ (A:Ambient Temperature, Celsius) }
                els{
                    (A:ENG3 COMBUSTION,bool)
                    if{ @Table2((A:Eng3 N2 RPM, percent)) (L:EGT_per_AmbTemp_correction,number) * 0 max  }
                    els{
                        (A:General eng3 exhaust gas temperature, celsius) (L:LastEGT3,enum) >
                        if{ (A:ENG3 EXHAUST GAS TEMPERATURE, celsius) (L:temp adj3,number) - (L:E3_hotstart, number) - }
                        els{ (L:LastEGT3,enum) }                              
                        } 
                  }
            }
            d (>L:EGT3_read_out,number)
        </Value>   
         <Nonlinearity>
            <Item Value="0" X="111" Y="622"/>
            <Item Value="50" X="90" Y="570"/>
            <Item Value="200" X="98" Y="290"/>
            <Item Value="400" X="402" Y="87"/>
            <Item Value="600" X="754" Y="257"/>
            <Item Value="800" X="774" Y="629"/>
         </Nonlinearity>
        <Delay DegreesPerSecond="60"/>
      </Rotate>
   </Element>

   <Mouse>
    <Tooltip>Engine3 EGT: %((L:EGT3_read_out,number))%!03d!&#176;%c %</Tooltip>
   </Mouse>
</Gauge>

I've changed table values to coincide as much as possible with your N2 % spool rate. At N2 56% I consider the engine "stable" and from there Eng EGT Avar value is displayed. I've tried to match EGT Avar value at 56% with Table value at 56%, in 430 Celsius. You can play with that number for better accuracy.
When engine is shut, I use your LastEGT3 correction formula, which can be refined as well.

Tom
 
Back
Top