<!-- TO pitch controller -->
<Element>
<Select>
<Value>
(L:PhaseTO1,enum) 2 == (L:PhaseTO2,enum) 2 == || (L:gctoga, enum) 1 == && (A:PLANE ALTITUDE,feet) (A:AUTOPILOT ALTITUDE LOCK VAR,feet) - abs 250 > & (A:RADIO HEIGHT,feet) 6000 < & if{ (A:Airspeed select indicated or true, knots) (L:estimateT,enum) + 2 / 15 + (A:Autopilot airspeed hold var, knots) min (L:pitchspeed,enum) max (L:limspeed,enum) 10 + max (>L:pitchspeed,enum) } els{ (L:gctoga, enum) 1 == (A:PLANE ALT ABOVE GROUND,feet) 20 <= && if{ (L:BugV2,enum) int 0 + (L:limspeed,enum) 10 + max (L:pitchspeed,enum) != if{ (L:BugV2,enum) int 0 + (L:limspeed,enum) 10 + max (>L:pitchspeed,enum) } } els{ (L:PhaseTO1,enum) 2 < (L:PhaseTO2,enum) 2 < && (L:gctoga, enum) 1 == & (A:PLANE ALT ABOVE GROUND,feet) 40 > & (A:PLANE ALTITUDE,feet) (A:AUTOPILOT ALTITUDE LOCK VAR,feet) - abs 250 > & if{ (L:BugV2,enum) int 10 + (L:limspeed,enum) 10 + max (L:pitchspeed,enum) != if{ (L:BugV2,enum) int 10 + (L:limspeed,enum) 10 + max (>L:pitchspeed,enum) } } els{ (A:Autopilot airspeed hold var, knots) (L:limspeed,enum) 10 + max (L:pitchspeed,enum) != if{ (A:Autopilot airspeed hold var, knots) (L:limspeed,enum) 10 + max (>L:pitchspeed,enum) } } } }
(L:gctoga, enum) 1 == (L:CLMB,enum) 1 == || if{
(A:Autopilot airspeed hold, bool) if{ (>K:AP_PANEL_SPEED_OFF) }
(A:Autopilot mach hold, bool) if{ (>K:AP_PANEL_MACH_OFF) }
<!-- Initialize -->
(L:pitchinit,bool) ! if{
1 (>L:pitchinit,bool)
1 (>L:Kp, number)
0.6 (>L:Ki, number)
1 (>L:Kd, number)
100 (>L:Kx, number)
0.5 (>L:AP_IAS_LOOP_TIME, seconds)
0 (>L:AP_IAS_LAST_ERROR, knots)
0 (>L:AP_IAS_INTEGRAL, knots)
5 (>L:AP_IAS_INTEGRAL_MAX, knots)
500 (>L:AP_VS_STEP_MAX, knots)
}
<!-- Run -->
(A:AIRSPEED INDICATED, knots) 80 > (P:Absolute time,seconds) (L:trptimer, enum) - abs (L:AP_IAS_LOOP_TIME, knots) >= && if{
(P:Absolute time,seconds) (>L:trptimer, enum)
<!-- Data -->
(A:AIRSPEED INDICATED, knots) (L:estimateT,enum) 2 * + 3 / sp1
<!-- Calculate ERROR -->
l1 (L:pitchspeed,enum) - (>L:AP_IAS_ERROR, knots)
<!-- Calculate INTEGRAL -->
(L:AP_IAS_ERROR, knots) (L:AP_IAS_LOOP_TIME, knots) / (L:AP_IAS_INTEGRAL, knots) + (L:AP_IAS_INTEGRAL_MAX, knots) /-/ max (L:AP_IAS_INTEGRAL_MAX, knots) min (>L:AP_IAS_INTEGRAL, knots)
<!-- Calculate DERIVATIVE -->
(L:AP_IAS_ERROR, knots) (L:AP_IAS_LAST_ERROR, knots) - (L:AP_IAS_LOOP_TIME, knots) / (>L:AP_IAS_DERIVATIVE, knots)
<!-- Calculate OUTPUT -->
(L:AP_IAS_ERROR, knots) (L:Kp, number) * (L:AP_IAS_INTEGRAL, knots) (L:Ki, number) * + (L:AP_IAS_DERIVATIVE, knots) (L:Kd, number) * + (>L:AP_IAS_OUTOUT, knots)
(L:AP_IAS_OUTOUT, knots) abs 0.25 > (A:PLANE ALTITUDE,feet) (A:AUTOPILOT ALTITUDE LOCK VAR,feet) - abs 250 > && if{
(A:PLANE ALTITUDE,feet) (A:AUTOPILOT ALTITUDE LOCK VAR,feet) < if{
(L:CLMB,enum) 1 == if{ (A:PLANE ALTITUDE,feet) 15000 > if{ (L:VStarget,enum) 1000 + s3 } els{ (L:VStarget,enum) 1800 + s3 } } els{ (L:VStarget,enum) 2800 + s3 }
(A:Attitude indicator pitch degrees, degrees) /-/ (L:pitchlimit,enum) 2 - > if{ (A:Attitude indicator pitch degrees, degrees) /-/ (L:pitchlimit,enum) > if{ (A:VERTICAL SPEED, ft/min) (A:AUTOPILOT VERTICAL HOLD VAR,feet per minute) + 2 / 150 - l3 min s3 } els{ (A:VERTICAL SPEED, ft/min) (A:AUTOPILOT VERTICAL HOLD VAR,feet per minute) + 2 / l3 min s3 } }
l20 50 min 15 max 15 - 30 * /-/ 1800 + s4
l4 (A:PLANE ALTITUDE,feet) 0 max 36000 min 0.0333 * /-/ 1800 + int min l3 min 500 max s4
} els{ (A:RADIO HEIGHT,feet) 2450 min 2.1721 * 1180 + /-/ s4 -500 l4 max s3 }
l3 (>L:AP_VS_UPPER, knots)
l4 (>L:AP_VS_LOWER, knots)
<!-- Update VS using a max change of 900 and keeping within the limits set above -->
(A:VERTICAL SPEED, ft/min) (A:AUTOPILOT VERTICAL HOLD VAR,feet per minute) + 2 / (L:AP_IAS_OUTOUT, knots) (L:Kx, number) * (L:AP_VS_STEP_MAX, knots) min (L:AP_VS_STEP_MAX, knots) /-/ max + l3 min l4 max (>K:AP_VS_VAR_SET_ENGLISH)
} }
<!-- Update ERROR -->
(L:AP_IAS_ERROR, knots) (>L:AP_IAS_LAST_ERROR, knots)
}
} els{ (L:pitchinit,bool) if{ 0 (>L:pitchinit,bool) } }
</Value>
</Select>
</Element>