CHT & EGT per cylinder

Help creating logic scripts for Air Manager Instruments

Moderators: russ, Ralph

Message
Author
JackZ
Posts: 2262
Joined: Mon Feb 22, 2016 1:02 pm

Re: CHT & EGT per cylinder

#11 Post by JackZ »

The only thing i can tell you is that the CHT difference is related among other parameters to the position of each cylinder relative to the airflow.
Nearly all the engines used in GA aircraft are flat four or six cylinders either from Continental or Lycoming, carbureted or fuel injected (not talking about the more exotic ones used in ultralights or VW conversions which is a different story)

The two frontmost cylinders usually run more cooler than the rearmost ones, since they catch only the airflow that enters the cowling and progresses to the back, while the back cylinders ( #1 & #2 iirc) are hotter since they also get hot air from the frontmost cylinders. A CHT difference between front and back cylinders of around 40-100F is not uncommon. And each engine has it's own "hotter" cylinder, due to slight mechanical differences in valves, springs, piping, etc...but you know that better than me.
As per EGT, it is commonly admitted to have a difference around 100F between the hottest and coldest cylinder for carbureted engines, and up to 150F for injected engines.
image.png
What I saw on your video seemed right to me, but I think that cyl or 4(6) should be hotter than the others, as these cylinder are the rearmost ones.

Jacques

[EDIT]: upon research, it seems that the numbering of the cylinder is different between Lycoming (frontmost are 1 & 2 counting towards the rear) and Continental (3(5) & 4(6) counting from the rear of the engine), the even numbers being on the left side!
image.png
Last edited by JackZ on Sat Nov 14, 2020 11:17 pm, edited 1 time in total.
My YouTube Chanel on the A320 (Real SOPs by an Airline Pilot IRL):
https://www.youtube.com/playlist?list=P ... 0Q6SBASRqJ

frumpy
Posts: 358
Joined: Sat Jan 30, 2016 12:01 pm

Re: CHT & EGT per cylinder

#12 Post by frumpy »

Why do you say it changes every second? It's a global random variable, it is set once the gauge starts and should stay the same during the
flight.
I'm not sure if I got you right. Can you describe more what you want to do? Which problems do you see?

User avatar
Keith Baxter
Posts: 4674
Joined: Wed Dec 20, 2017 11:00 am
Location: Botswana

Re: CHT & EGT per cylinder

#13 Post by Keith Baxter »

Hi,

Jacques thank you for that info. Every little bit helps it trying to get the the leaning simulation as close to the real thing as possable.

Frumpy. I will do a video tomorrow to demonstrate what I mean. Maybe it is the way I applied the code within the subscribe buss callback.
One of my concerns is that the delta peek between each cylinder is exactly the same value. There should be some difference.

I modded your code slightly to get what you see in the video. It is a good starting point and I will need to put some more thought into it.

Code: Select all

--Random Cylinder temperatures
math.randomseed(20)
dev = math.random(-8,8)
EGTdev = math.modf(dev*11)
CHTdev = math.modf(dev*8)

egt_cyl1 = tonumber(string.format("%.0f", egt[1])) 
egt_cyl2 = tonumber(string.format("%.0f", egt[1]-(EGTdev*2)))
egt_cyl3 = tonumber(string.format("%.0f", egt_cyl2+100))
egt_cyl4 = tonumber(string.format("%.0f", egt[1]+(EGTdev*2)))

cht_cyl1 = tonumber(string.format("%.0f", cht[1]))
cht_cyl2 = tonumber(string.format("%.0f", cht[1]-CHTdev))
cht_cyl3 = tonumber(string.format("%.0f", cht_cyl2+50))
cht_cyl4 = tonumber(string.format("%.0f", cht[1]+CHTdev))



Keith

EDIT:

Last edited by Keith Baxter on Sun Nov 15, 2020 4:44 am, edited 1 time in total.
AMD RYZEN 9 5950X CPU, Corsair H80I cooler, ASUS TUF GAMING B550-PLUS AMD Ryzen Mother Board,  32Gb ram Corsair Vengeance 3000Mh, MSI GTX960 4G graphics card 

User avatar
Sling
Posts: 5237
Joined: Mon Sep 11, 2017 2:37 pm
Contact:

Re: CHT & EGT per cylinder

#14 Post by Sling »

For what it’s worth I use a fixed offset in a similar fashion to the data Jacques posted. I think this is more realistic than pure random. However a constrained random element could also work.

Tony

User avatar
Keith Baxter
Posts: 4674
Joined: Wed Dec 20, 2017 11:00 am
Location: Botswana

Re: CHT & EGT per cylinder

#15 Post by Keith Baxter »

Tony,

Hmmm, Maybe I am over complicating it and should just do what you suggest.

But I am sure it will keep me awake at night wondering if I should do more.
Lets see how well I sleep. :lol:

Keith
AMD RYZEN 9 5950X CPU, Corsair H80I cooler, ASUS TUF GAMING B550-PLUS AMD Ryzen Mother Board,  32Gb ram Corsair Vengeance 3000Mh, MSI GTX960 4G graphics card 

frumpy
Posts: 358
Joined: Sat Jan 30, 2016 12:01 pm

Re: CHT & EGT per cylinder

#16 Post by frumpy »

Hi Keith,

try to make the random seed random by using os.time. If you take a constant, it won't be "random", but the same every
time the code is run. Also, make it global and put it in the variable definitions, rather than somewhere hidden in the loops.

I would make up a deviation for each cylinder, as cylinder 2 and 4 are the same in your code... which would make
some sense, if they are next to each other. I'll come up with some code in a few hours, but first the forest is calling for a walk :)

User avatar
Keith Baxter
Posts: 4674
Joined: Wed Dec 20, 2017 11:00 am
Location: Botswana

Re: CHT & EGT per cylinder

#17 Post by Keith Baxter »

Hi,

Did the bonanza g36 this morning. Reasonably happy with it. Note that the beechcraft temps are in °C where as the Cessna's are in °F. I will move on to the Barron g58 after the F1 GP. This one is a twin 6cyl and has some extra features , I think I can handle those.
ice_screenshot_20201115-113307.png
Keith
AMD RYZEN 9 5950X CPU, Corsair H80I cooler, ASUS TUF GAMING B550-PLUS AMD Ryzen Mother Board,  32Gb ram Corsair Vengeance 3000Mh, MSI GTX960 4G graphics card 

User avatar
Keith Baxter
Posts: 4674
Joined: Wed Dec 20, 2017 11:00 am
Location: Botswana

Re: CHT & EGT per cylinder

#18 Post by Keith Baxter »

frumpy wrote: Sun Nov 15, 2020 9:31 am Hi Keith,

try to make the random seed random by using os.time. If you take a constant, it won't be "random", but the same every
time the code is run. Also, make it global and put it in the variable definitions, rather than somewhere hidden in the loops.

I would make up a deviation for each cylinder, as cylinder 2 and 4 are the same in your code... which would make
some sense, if they are next to each other. I'll come up with some code in a few hours, but first the forest is calling for a walk :)
Hi Frumpy,

1) That is understood.

2)That would be awesome. Thank you.

As you can see I am moving on to six cylinder and twin engines. On a new bird there should be very little difference between engine 1 & 2 but on older birds I suppose that is where the garmin stats and maintenance history is taken into account.

Sticky valves, engine ware etc, I would think would have to be considered. But as I said, perhaps I am trying to over engineer , and should just take a simplistic approach.

Keith
AMD RYZEN 9 5950X CPU, Corsair H80I cooler, ASUS TUF GAMING B550-PLUS AMD Ryzen Mother Board,  32Gb ram Corsair Vengeance 3000Mh, MSI GTX960 4G graphics card 

frumpy
Posts: 358
Joined: Sat Jan 30, 2016 12:01 pm

Re: CHT & EGT per cylinder

#19 Post by frumpy »

Lets say CHT is between 0 (engine off) and 800°C. Difference between hottest and coldest
cylinder is max. 40°C, which is 5%. Cyl1&2 are in front, 5&6 in the rear. CHT is between 0 and 260°C.

Taking your code, I am thinking of this:

--Random Cylinder temperatures
math.randomseed(os.time()) -- init random
dev = math.random(-8,8) -- global random value between -8 and 8
dev_cyl_row2 = math.random(1.010, 1.025) -- cylinder row 2 will be between 1 to 2.5% hotter than cylinder row 1 (if that does not work, try ((1010,1025)/1000) )
dev_cyl_row3 = math.random(1.010, 1.025) -- cylinder row 2 will be between 1 to 2.5% hotter than cylinder row 2

egt_cyl1_1=tonumber(string.format("%.0f", egt[1]))
egt_cyl2_1=tonumber(string.format("%.0f", egt[1]+dev)) --cyl2 will be -8..8°C different from cyl1
egt_cyl3_1=tonumber(string.format("%.0f", egt[1]*dev_cyl_row2)) -- row 2 is 1 to 2.5% hotter
egt_cyl4_1=tonumber(string.format("%.0f", egt[1]*dev_cyl_row2+dev)) -- same with some offset
egt_cyl5_1=tonumber(string.format("%.0f", egt[1]*dev_cyl_row2*dev_cyl_row3)) -- row 3 is 1 to 2.5% hotter that row 2
egt_cyl6_1=tonumber(string.format("%.0f", egt[1]*dev_cyl_row2*dev_cyl_row3+dev)) -- same with some offset

You could copy the whole thing for engine 2 and add a random +-1% to it or make a identical "dev2" variable.


As for CHT, things are more complicated. In general you could take EGT/3, which would give you 266°C at max EGT.
But if you do so, CHT would change instantly on a cold engine with good combustion which is not realistic.
A timer would be possible. Also an "energy box" with an inflow of energy at a certain speed (OAT,throttle
setting, airspeed) and outflow of energy (OAT, cooling constant, airspeed) would be possible.... think of a watertank
which has a rising waterlevel (=temperature) and reaching a certain heigth a higher number of holes in the tank would take water off
(takes the heat away). There is probably a thermostat working, which has an inner and outer cooling system.
But it would be much much easier to let X-Plane do the work... what info is available from X-Plane?

JackZ
Posts: 2262
Joined: Mon Feb 22, 2016 1:02 pm

Re: CHT & EGT per cylinder

#20 Post by JackZ »

@frumpy
I think that for the purpose of simulation, it is probably best not to overengineer this.
Xplane has a global parameter for EGT and CHT for the whole engine, , so I would consider this data (which takes into account the load of the engine, the throttle position, the mixture position, maybe the density altitude,etc....) as the average temperature of the coolest cylinders (the closer one to the front, namely cylinder number 2 for Lycoming, or cylinder 4(6) for Continental ones.
But as long as we don't know what are the parameters taken into account by Xplane Engine model, it's only a best guess.

Another remark is that engine behaviour is not random: ie in a given condition, each expected cylinder/exhaust temperatures will always be the same.

Let's examine the following diagram.
image.png
One can see that the difference in temperatures between each cylinder is related to the Fuel Flow (itself related to the mixture):
- At full rich (between 14 and 16 GPH, but the values are for this engine), we have barely a difference between 3 cylinders EGT and the diff with the hotter one is around 20°F
- At rich of peak the difference is even narrower around 10°F
- at Lean of Peak the diff increase up to say 80°F, then slowly decrease till around 50°F, with an interesting switch between the #1 and #3 as the hotter cylinder.
I see an explanation like this: the rearward cylinder is becoming the hotter one (in the graph it's cyl #3), since as the mixture being leaner and leaner, there is less extra fuel available to cool down all the cylinders, hence the airflow cooling is more important, and as we already saw the rearward cylinders get air flow which has already been heated by the frontmost cylinder.

@Keith Baxter So if I were you, instead of using random values, i would simply consider the data returned by Xplane as the one of the coolest cylinder (the purple #3 one in the curve) and add a temperature offset that varies with the fuel flow, ranging around +40F for the hottest cylinder(the #1 frontmost for Lycoming) at full rich with a very small variation for the remaining two if you wish (say +8 and +12) from the Xplane EGT, to around -80°F when below the rich of peak for the same cylinder (that would then become the coldest) and around -40F & -50F for the remaining two) and you will be set.
Same logic applies to CHT, I don't have a curve for this unfortunately

Hope it's clear.

Jacques
My YouTube Chanel on the A320 (Real SOPs by an Airline Pilot IRL):
https://www.youtube.com/playlist?list=P ... 0Q6SBASRqJ

Post Reply