'##############
'Getriebe-Script
'##############

'ZF Friedrichshafen ZF Ecomat II/IV + EcoLife Getriebe

'(c) Based on the Voith Script 2008-2010 Rüdiger Hülsmann
'(c) 2016 Edit by Morphi

'----------------------
'	Init
'----------------------

{macro:antrieb_init}
	1 (S.L.antrieb_getr_gangwahl) (S.L.antrieb_getr_gangvorwahl)
	1 (S.L.antrieb_getr_aktugang) (S.L.antrieb_retarderstufe)	
'	1 (S.L.engine_M_Restriction) (S.L.engine_RPM_down) (S.L.antrieb_M_Restriction)
	0 (S.L.antrieb_wandler_moment) (S.L.wandler_lockup)
{end}

'----------------------
'	Frame
'----------------------

{macro:antrieb_frame}



' Transmission identification

	(C.L.gearbox_version) 1 =
	{if}
		1 (S.L.gearbox_identifier)
	{else}
		(C.L.gearbox_version) 2 =
		{if}
			0 (S.L.gearbox_identifier)
		{else}
			3 (S.L.gearbox_identifier)
		{endif}
	{endif}

'Calculate the output speed
	(L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / (C.L.antrieb_i_achse) * (S.L.antrieb_n_kardanwelle)

'Insert the drive stage

	(L.S.GetTime) (L.L.antrieb_getr_gangwahlzeitpunkt) - (C.L.antrieb_gangwahlzeit) >
	(L.L.antrieb_getr_gangvorwahl) (L.L.antrieb_getr_gangwahl) = ! &&
	(L.L.antrieb_failure_general) ! &&
	{if}
			
		(L.L.antrieb_getr_gangwahl) 1 =
		{if}
			(L.L.engine_on) 1 = 
			{if}
				(L.L.engine_n) (S.L.antrieb_rucksoundvol)
				(L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 + (S.L.antrieb_schaltmoment_soll)

				(L.L.antrieb_getr_gangvorwahl) 1 >
				{if}
					(L.L.velocity) 40 >
					{if}
						5 (S.L.antrieb_getr_aktugang)
						(T.L.ev_schaltruck)
					{else}
						(L.L.velocity) 30 >
						{if}
							4 (S.L.antrieb_getr_aktugang)
							(T.L.ev_schaltruck)
						{else}
							(L.L.velocity) 20 >
							{if}
								3 (S.L.antrieb_getr_aktugang)
								(T.L.ev_schaltruck)
							{else}
								(L.L.velocity) 10 >
								{if}
									2 (S.L.antrieb_getr_aktugang)
									(T.L.ev_schaltruck)
								{else}
									1 (S.L.antrieb_getr_aktugang)
									0 (S.L.antrieb_gear_engaged_timer) (S.L.wandler_lockup)
									(T.L.ev_schaltruck)
								{endif}
							{endif}
						{endif}
					{endif}
				{else}
					(L.L.velocity) 5 <
					{if}
						1 (S.L.antrieb_getr_aktugang)
						0 (S.L.antrieb_gear_engaged_timer) (S.L.wandler_lockup)
						(T.L.ev_schaltruck)
					{endif}
				{endif}
			{endif}
		{endif}	
		(L.L.antrieb_getr_gangvorwahl) (S.L.antrieb_getr_gangwahl)
	{endif}

'Get the gear out when neutral is requested

	(L.L.antrieb_getr_gangwahl) 1 = (L.L.engine_n) 200 < ||
	{if}
		0 (S.L.antrieb_getr_aktugang) (S.L.wandler_lockup)
	{endif}

'Prevent the reverse of 5 km / h

	(L.L.antrieb_getr_gangvorwahl) 0 =
	(L.L.velocity) 5 >= &&
	{if}
		1 (S.L.antrieb_getr_gangwahl)
	{endif}

'Check if gear changes - but only if gearbox is safe:

	(L.L.antrieb_failure_general) !
	{if}
		(M.L.antrieb_getr_chkNxtGear)
	{endif}

'Calculation of the current motor torque:

	(M.L.engine_moment)

	(L.L.throttle) 0 =
	{if}
		1000 (S.L.schaltzeit)
	{else}
		2000 (S.L.schaltzeit)
	{endif}


'Calculation of dynamic torque

	(L.L.antrieb_getr_fest) !
	{if}
		(L.L.antrieb_schaltmoment) (L.S.Timegap) (L.L.schaltzeit) * + (L.L.antrieb_schaltmoment_soll) min (S.L.antrieb_schaltmoment)
	{endif}

' Timer for switching delay

	(L.L.throttle) 0 >
	{if}
		(L.L.schalttimer) (L.S.Timegap) + 5 min (S.L.schalttimer)
	{else}
		0 (S.L.schalttimer)
	{endif}

	(L.L.schaltverzoegerung) (L.S.Timegap) + 5 min (S.L.schaltverzoegerung)
	(L.L.schaltverzoegerung_runter) (L.S.Timegap) + 5 min (S.L.schaltverzoegerung_runter)

' Clamp the lamella coupling if slipping

	(L.L.antrieb_getr_aktugang) 1 >=
	(L.L.throttle) 0.5 > &&
	(L.L.velocity) 5 > &&
	(L.L.M_Wheel) 100 < &&
	(L.L.antrieb_getr_fest) ! &&
	{if}
		(L.L.engine_n) (F.L.engine_M_maxThrottle) 200 + (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
	{endif}

' Timer for soundfading
	(L.L.antrieb_getr_aktugang) 1 =
	{if}
		(L.L.sound_fade_g1) (L.S.timegap) + 1 min (S.L.sound_fade_g1)
	{else}
		(L.L.sound_fade_g1) (L.S.timegap) 4 * - 0 max (S.L.sound_fade_g1)
	{endif}
	(L.L.antrieb_getr_aktugang) 2 =
	{if}
		(L.L.sound_fade_g2) (L.S.timegap) + 1 min (S.L.sound_fade_g2)
	{else}
		(L.L.sound_fade_g2) (L.S.timegap) 4 * - 0 max (S.L.sound_fade_g2)
	{endif}
	(L.L.antrieb_getr_aktugang) 3 =
	{if}
		(L.L.sound_fade_g3) (L.S.timegap) + 1 min (S.L.sound_fade_g3)
	{else}
		(L.L.sound_fade_g3) (L.S.timegap) 4 * - 0 max (S.L.sound_fade_g3)
	{endif}
	(L.L.antrieb_getr_aktugang) 4 =
	{if}
		(L.L.sound_fade_g4) (L.S.timegap) + 1 min (S.L.sound_fade_g4)
	{else}
		(L.L.sound_fade_g4) (L.S.timegap) 4 * - 0 max (S.L.sound_fade_g4)
	{endif}
	(L.L.antrieb_getr_aktugang) 5 =
	{if}
		(L.L.sound_fade_g5) (L.S.timegap) + 1 min (S.L.sound_fade_g5)
	{else}
		(L.L.sound_fade_g5) (L.S.timegap) 4 * - 0 max (S.L.sound_fade_g5)
	{endif}
	(L.L.antrieb_getr_aktugang) 6 =
	{if}
		(L.L.sound_fade_g6) (L.S.timegap) + 1 min (S.L.sound_fade_g6)
	{else}
		(L.L.sound_fade_g6) (L.S.timegap) 4 * - 0 max (S.L.sound_fade_g6)
	{endif}

'Torque lock
	(C.L.engine_drehmomentsperre) 1 =
	(L.L.antrieb_getr_aktugang) 0 > &&
	(L.L.throttle) 0.1 > &&
	(C.L.wandler_locked) 1 = &&
	(L.L.wandler_lockup) 1 = &&
	{if}
'	1. Gang Fest
		(L.L.antrieb_getr_aktugang) 1 =
		{if}
			(C.L.sperrwirkung_g1_fest) (L.L.torque_inc) + (S.L.engine_M_restriction)
		{endif}
'	2. Gang Fest
		(L.L.antrieb_getr_aktugang) 2 =
		{if}
			(C.L.sperrwirkung_g2_fest) (L.L.torque_inc) + (S.L.engine_M_restriction)
		{endif}
'	3. Gang Fest
		(L.L.antrieb_getr_aktugang) 3 =
		{if}
			(C.L.sperrwirkung_g3_fest) (L.L.torque_inc) + (S.L.engine_M_restriction)
		{endif}
'	4. Gang Fest
		(L.L.antrieb_getr_aktugang) 4 =
		{if}
			(C.L.sperrwirkung_g4_fest) (L.L.torque_inc) + (S.L.engine_M_restriction)
		{endif}
'	5. Gang Fest
		(L.L.antrieb_getr_aktugang) 5 =
		{if}
			(C.L.sperrwirkung_g5_fest) (L.L.torque_inc) + (S.L.engine_M_restriction)
		{endif}
'	6. Gang Fest
		(L.L.antrieb_getr_aktugang) 6 =
		{if}
			(C.L.sperrwirkung_g6_fest) (L.L.torque_inc) + (S.L.engine_M_restriction)
		{endif}
	{else}
		1 (S.L.engine_M_restriction)
	{endif}


'Converter lockup

	(L.L.wandler_lockup) 0 =
	{if}
		(C.L.wandler_lockmode) 0 =
		(C.L.wandler_lockmode) 2 = ||
		(L.L.throttle) (C.L.wandler_lockup) > &&
		{if}
			(L.L.antrieb_kickdown) !
			{if}
				(L.L.antrieb_getr_aktugang) 1 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					(L.L.antrieb_n_kardanwelle) (C.L.Wandler_lockup_spd1) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * >
					{if}
						1 (S.L.wandler_lockup)
						(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g1_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
						0 (S.L.schaltverzoegerung) (S.L.schalttimer)
						(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					{endif}
				{endif}
				(L.L.antrieb_getr_aktugang) 2 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					(L.L.antrieb_n_kardanwelle) (C.L.Wandler_lockup_spd2) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * >
					{if}
						1 (S.L.wandler_lockup)
						(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g2_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
						0 (S.L.schaltverzoegerung) (S.L.schalttimer)
						(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					{endif}
				{endif}
			{else}
				(L.L.antrieb_getr_aktugang) 1 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					(L.L.antrieb_n_kardanwelle) (C.L.Wandler_lockup_spdkd1) >
					{if}
						1 (S.L.wandler_lockup)
						(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g1_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
						0 (S.L.schaltverzoegerung) (S.L.schalttimer)
						(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					{endif}
				{endif}
				(L.L.antrieb_getr_aktugang) 2 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					(L.L.antrieb_n_kardanwelle) (C.L.Wandler_lockup_spdkd2) >
					{if}
						1 (S.L.wandler_lockup)
						(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g2_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
						0 (S.L.schaltverzoegerung) (S.L.schalttimer)
						(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					{endif}
				{endif}
			{endif}
		{endif}

		(C.L.wandler_lockmode) 1 =
		(L.L.throttle) (C.L.wandler_lockup) < ||
		{if}
			(L.L.antrieb_kickdown) !
			{if}
				(L.L.antrieb_getr_aktugang) 1 =
				{if}
					0 (S.L.wandler_lockup)
				{endif}
				(L.L.antrieb_getr_aktugang) 2 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					(L.L.antrieb_n_kardanwelle) (C.L.Wandler_lockup_spd2) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * >
					{if}
						1 (S.L.wandler_lockup)
						(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g2_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
						0 (S.L.schaltverzoegerung) (S.L.schalttimer)
						(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					{endif}
				{endif}
			{else}
				(L.L.antrieb_getr_aktugang) 1 =
				{if}
					0 (S.L.wandler_lockup)
				{endif}
				(L.L.antrieb_getr_aktugang) 2 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					(L.L.antrieb_n_kardanwelle) (C.L.Wandler_lockup_spdkd2) >
					{if}
						1 (S.L.wandler_lockup)
						(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g2_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
						0 (S.L.schaltverzoegerung) (S.L.schalttimer)
						(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					{endif}
				{endif}
			{endif}
		{endif}
				(L.L.antrieb_getr_aktugang) 3 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					1 (S.L.wandler_lockup)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g3_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
				{endif}
				(L.L.antrieb_getr_aktugang) 4 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					1 (S.L.wandler_lockup)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g4_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
				{endif}
				(L.L.antrieb_getr_aktugang) 5 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					1 (S.L.wandler_lockup)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g5_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
				{endif}
				(L.L.antrieb_getr_aktugang) 6 =
				(L.L.throttle) 0 > &&
				(L.L.schalttimer) 0.5 > &&
				{if}
					1 (S.L.wandler_lockup)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g6_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
				{endif}
	{endif}

'Shift point dynamics - the gearbox reacts differently to the pedal position

	(C.L.topodyn_enabled) 1 =
	{if}
		(L.L.Throttle) 0.85 >= (L.L.velocity) 70 < && (L.L.antrieb_getr_aktugang) 1 = && (L.L.antrieb_beschleunigung) 0.8 <= &&
		(L.L.Throttle) 0.85 >= (L.L.velocity) 70 < && (L.L.antrieb_getr_aktugang) 2 = && (L.L.antrieb_beschleunigung) 0.6 <= && ||
		(L.L.Throttle) 0.85 >= (L.L.velocity) 70 < && (L.L.antrieb_getr_aktugang) 3 = && (L.L.antrieb_beschleunigung) 0.4 <= && ||
		(L.L.Throttle) 0.85 >= (L.L.velocity) 70 < && (L.L.antrieb_getr_aktugang) 4 = && (L.L.antrieb_beschleunigung) 0.3 <= && ||
		(L.L.Throttle) 0.85 >= (L.L.velocity) 70 < && (L.L.antrieb_getr_aktugang) 5 = && (L.L.antrieb_beschleunigung) 0.2 <= && ||
		(L.L.Throttle) 0.85 >= (L.L.velocity) 70 < && (L.L.antrieb_getr_aktugang) 6 = && (L.L.antrieb_beschleunigung) 0.1 <= && ||
		(L.L.antrieb_M_restriction) 0.85 >= &&
		{if}
			(L.L.torque_inc) (L.S.Timegap) 10 / + 0.1 min (S.L.torque_inc)
			(L.L.topodyn_intervene_Timer) (L.S.Timegap) 2 * + 1 min (S.L.topodyn_intervene_Timer)
			1 =
			{if}
				1 (S.L.topodyn_active)
				1.1 (S.L.topodyn_factor)
			{endif}
		{else}
			(L.L.topodyn_intervene_Timer) (L.S.Timegap) 2 * - 0 max (S.L.topodyn_intervene_Timer)
			(L.L.torque_inc) (L.S.Timegap) 10 / - 0 max (S.L.torque_inc)
		{endif}
	{else}
		1 (S.L.topodyn_factor)
	{endif}

	(C.L.topodyn_enabled) 1 =
	{if}
		(L.L.antrieb_beschleunigung) 1.2 > (L.L.antrieb_getr_aktugang) 1 = &&
		(L.L.antrieb_beschleunigung) 1.0 > (L.L.antrieb_getr_aktugang) 2 = && ||
		(L.L.antrieb_beschleunigung) 0.8 > (L.L.antrieb_getr_aktugang) 3 = && ||
		(L.L.antrieb_beschleunigung) 0.6 > (L.L.antrieb_getr_aktugang) 4 = && ||
		(L.L.antrieb_beschleunigung) 0.4 > (L.L.antrieb_getr_aktugang) 5 = && ||
		(L.L.antrieb_beschleunigung) 0.2 > (L.L.antrieb_getr_aktugang) 6 = && ||
		(L.L.velocity) 90 > ||
		(L.L.throttle) 0 = ||
		{if}
			(L.L.topodyn_idle_Timer) (L.S.Timegap) 1 * + 1 min (S.L.topodyn_idle_Timer)
			1 =
			{if}
			0 (S.L.topodyn_active)
			1 (S.L.topodyn_factor)
			{endif}
		{else}
			(L.L.topodyn_idle_Timer) (L.S.Timegap) 2 * - 0 max (S.L.topodyn_idle_Timer)
		{endif}
	{endif}

	(L.L.throttle) 0.90 >
	(C.L.Getriebemodus) 2 = (L.L.throttle) 0.1 > && ||
	(C.L.Ecolife) 1 = (L.L.brake) 0 > && ||
	(L.L.topodyn_active) ||
	{if}
		(L.L.throttle_internb) (L.S.Timegap) 1 * + 1 min (S.L.throttle_internb)
		1 =
		{if}
			1.3 (L.L.topodyn_factor) * (S.L.shift_dynamics_high)
			(C.L.Ecolife) 1 =
			(L.L.brake) 0 > &&
			{if}
				(L.L.antrieb_getr_aktugang) 3 = !
				(L.L.antrieb_getr_aktugang) 2 = ! &&
				{if}
					1.5 (S.L.shift_dynamics_high)
				{else}
					1.2 (S.L.shift_dynamics_high)
				{endif}
				1 (S.L.schaltsperre)
			{endif}
		{endif}
	{else}
		(L.L.throttle_internb) (L.S.Timegap) 1 * - 0 max (S.L.throttle_internb)
		0 =
		(L.L.schaltsperre) ||
		{if}
			1 (S.L.shift_dynamics_high)
			0 (S.L.schaltsperre)
		{endif}
	{endif}

	(L.L.throttle) 0.1 > (L.L.throttle) 0.80 < &&
	(C.L.Getriebemodus) 1 = (L.L.throttle) 0.1 > && ||
	{if}
		(L.L.throttle_intern) (L.S.Timegap) 1 * + 1 min (S.L.throttle_intern)
		1 =
		{if}
			0.9 (S.L.shift_dynamics_low)
		{endif}
	{else}
		(L.L.throttle_intern) (L.S.Timegap) 1 * - 0 max (S.L.throttle_intern)
		0 =
		{if}
			1 (S.L.shift_dynamics_low)
		{endif}
	{endif}

	(L.L.antrieb_getr_gangwahl) 0 = !
	(L.L.antrieb_getr_aktugang) 0 = ! &&
	{if}
'	Determination of the setpoint value for the transducer torque

	(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (S.L.antrieb_getr_n_ab) (L.L.engine_n) / 1 min (S.L.antrieb_wandler_sollwert)

'	Smoothing the wall moment

	(L.L.antrieb_wandler_ny) (L.L.antrieb_wandler_sollwert) >
	{if}
		(L.L.antrieb_wandler_ny) (L.S.Timegap) 0.5 * - (L.L.antrieb_wandler_sollwert) max (S.L.antrieb_wandler_ny)
	{else}
		(L.L.antrieb_wandler_ny) (L.S.Timegap) 0.5 * + (L.L.antrieb_wandler_sollwert) min (S.L.antrieb_wandler_ny)
	{endif}
	{endif}

'Case distinction, whether or not gear transmits or transmits:

	(L.L.antrieb_getr_fest)
	{if}

'#################################################################################
'	Calculation of the acceleration of the drive train (at the motor flange)
'#################################################################################


		(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'	Calculation of the torque at the engine by inertia:

		(C.L.engine_J) * s0

'	Calculation of the torque transmitted by the drive train

		l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + s1


'	If the driving torque is too great or a gear change is engaged, the clutch slips through:

		l1 abs (L.L.antrieb_schaltmoment) > 
		(L.L.antrieb_getr_gangwahl) 1 <= || 
		(L.L.wandler_lockup) 0 = || 
		(C.L.wandler_locked) 0 = ||
		{if}
			0 (S.L.antrieb_getr_fest)
		{else}

'		Setting the moment

			l1 (S.L.antrieb_getr_M_an)


'		Calculation of the transmission output torque:

			(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (S.L.M_Wheel) (S.L.torque_limit)

'		The speed of the motor results from the transmission output shaft:

			(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (C.L.rpmgov) min (S.L.engine_n)		
		{endif}


		0 (S.L.antrieb_wandler_moment)

	{else}

'#################################################################################
'	Determine whether idle is...:
'#################################################################################

		(L.L.antrieb_getr_gangwahl) 1 = (L.L.antrieb_getr_aktugang) 0 = ||

		{if}

'		... Drive and geared drive torque are 0:
			0 (S.L.M_Wheel) (S.L.antrieb_getr_M_an)

			(M.L.engine_acceleration)
			0 (S.L.antrieb_wandler_moment) (S.L.antrieb_wandler_ny) (S.L.antrieb_wandler_sollwert)

'			When neutral is applied during braking
			(L.L.antrieb_getr_gangwahl) 1 =
			{if}
				0 (S.L.antrieb_retarder_wasrunning) (S.L.antrieb_gear_engaged_timer)
				0 (S.L.nbs_fade)
			{endif}

		{else}

'#################################################################################
'		Determine if a transducer is inserted ...:
'#################################################################################

			(L.L.wandler_lockup) 0 = 
			(C.L.wandler_locked) 0 = ||
			{if}
				(L.L.antrieb_wandler_moment) abs (L.L.antrieb_getr_M_an) abs >
				{if}
					(L.L.antrieb_wandler_moment) 0 >
					{if}
						(L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * + (S.L.antrieb_getr_M_an)
						(L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) <
						{if}
							(L.L.antrieb_wandler_moment) (L.L.antrieb_n_kardanwelle) (F.L.wandler_fluidrotation) (L.L.throttle) (F.L.wandler_throttle) * - (S.L.antrieb_getr_M_an)
						{endif}
					{else}
						(L.L.antrieb_getr_M_an) (C.L.antrieb_wandler_fillrate) (L.S.Timegap) * - (S.L.antrieb_getr_M_an)
						(L.L.antrieb_wandler_moment) (L.L.antrieb_getr_M_an) >
						{if}
							(L.L.antrieb_wandler_moment) (L.L.antrieb_n_kardanwelle) (F.L.wandler_fluidrotation) (L.L.throttle) (F.L.wandler_throttle) * - (S.L.antrieb_getr_M_an)
						{endif}
					{endif}
				{else}
					(L.L.antrieb_wandler_moment) (L.L.antrieb_n_kardanwelle) (F.L.wandler_fluidrotation) (L.L.throttle) (F.L.wandler_throttle) * - (S.L.antrieb_getr_M_an)
				{endif}
	
			
			

'#################################################################################
'			Converter reverse:
'#################################################################################

				(L.L.antrieb_getr_gangwahl) 0 =
				{if}
					(L.L.antrieb_n_kardanwelle) 2 * (S.L.antrieb_getr_n_ab) /-/ (L.L.engine_n) / (S.L.antrieb_wandler_ny)



							

'					Calculation of the motor drive torque

						(L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
						0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (S.L.antrieb_wandler_moment)


'					Calculation of the wheel output torque
		
						(L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_my) (L.L.antrieb_getr_M_an) * (C.L.antrieb_i_achse) * 0.9 * /-/ (C.L.gear_efficiency) * 
					 	(L.L.antrieb_n_kardanwelle) (F.L.antrieb_reverse_torque_reduction) *
						(S.L.M_Wheel)
					

'#################################################################################
'			Converter forward:	
'#################################################################################

				{else}
'					Calculation of motor driving torquess

					(L.L.engine_n) 2 * 3.14 * 60 / (L.L.engine_n) 2 * 3.14 * 60 / * s1
					0.0042 (L.L.antrieb_wandler_ny) (F.L.antrieb_wandler_lambda) * l1 * (L.L.engine_n) (F.L.antrieb_wandler_lowrpmsoftness) * (S.L.antrieb_wandler_moment)

'					Calculation of the wheel output torque

					(L.L.engine_M) (C.L.antrieb_i_achse) * (C.L.wandler_factor) * (C.L.gear_efficiency) * (L.L.velocity) (F.L.wandler_wirkungsgrad) * (L.L.engine_n) (F.L.antrieb_wandler_idleforce) (L.L.velocity) (F.L.wandler_idle_fadeout) * max (S.L.M_Wheel) (S.L.torque_limit)
				{endif}
		

'			Comparison of inputs and outputs:
				(L.L.M_Wheel) (L.L.n_Wheel) * 3.14 * 30000 / (S.L.antrieb_gesamtleistung)
				(L.L.antrieb_gesamtleistung) (L.L.antrieb_motorleistung) / (S.L.antrieb_eta)

	
				(M.L.engine_acceleration)
				

			



'#################################################################################
'			Otherwise, a normal gear is engaged:
'#################################################################################

			{else}


'			Calculation of the speed difference:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - s0



'			At this point, the different clutch torque may have to be used:

				l0 0 <
				{if}
					(L.L.antrieb_schaltmoment)
				{else}
					(L.L.antrieb_schaltmoment) /-/
				{endif}
				(S.L.antrieb_getr_M_an)
				(L.L.antrieb_getr_ratio) *
				(C.L.gear_efficiency) * (L.L.torque_limit) max (L.L.torque_limit) min (S.L.M_Wheel)

				(M.L.engine_acceleration)

'			Check whether the sign of the speed difference has reversed:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - l0 * 0 <= (L.L.engine_n) 560 > &&
				{if}
					(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'					Calculation of the torque at the engine by inertia:

					(C.L.engine_J) * s0

'					Calculation of the torque transmitted by the drive train

					l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + (S.L.antrieb_getr_M_an)


'					Calculation of the transmission output torque:

					(L.L.antrieb_getr_M_an) abs (L.L.antrieb_schaltmoment) abs <
					{if}
						(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (L.L.torque_limit) max (L.L.torque_limit) min (S.L.M_Wheel)
						1 (S.L.antrieb_getr_fest)
						(L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 + (S.L.antrieb_schaltmoment)
					{else}
						(L.L.antrieb_schaltmoment) /-/ (S.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (L.L.torque_limit) max (L.L.torque_limit) min (S.L.M_Wheel)
					{endif}
					


				{endif}

				0 (S.L.antrieb_wandler_moment)

			{endif}
		{endif}

	{endif}



'#################################################################################
' first gear calc
'#################################################################################

	(L.L.antrieb_getr_aktugang) 1 = (L.L.maxgear) 1 = && (L.L.velocity) 18 > &&
			{if}
				(C.L.antrieb_getr_ratio1) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - s0
				0 (S.L.engine_throttle_injection)



'			At this point, the different clutch torque may have to be used:

				l0 0 <
				{if}
					(L.L.antrieb_schaltmoment)
				{else}
					(L.L.antrieb_schaltmoment) /-/
				{endif}
				(S.L.antrieb_getr_M_an)
				(L.L.antrieb_getr_ratio) *
				(C.L.gear_efficiency) * (L.L.torque_limit) max (L.L.torque_limit) min (S.L.M_Wheel)

				(M.L.engine_acceleration)

'			Check whether the sign of the speed difference has reversed:

				(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (L.L.engine_n) - l0 * 0 <= (L.L.engine_n) 560 > &&
				{if}
					(L.L.antrieb_getr_ratio) (L.L.n_Wheel) * (S.L.engine_n)
					(L.L.n_Wheel) (L.L.antrieb_getr_ratio) * (L.L.engine_n) - 2 * pi * 60 / (L.S.Timegap) / 

'					Calculation of the torque at the engine by inertia:

					(C.L.engine_J) * s0

'					Calculation of the torque transmitted by the drive train

					l0 /-/ (L.L.engine_M) (L.L.engine_M_additional_load) - + (S.L.antrieb_getr_M_an)


'					Calculation of the transmission output torque:

					(L.L.antrieb_getr_M_an) abs (L.L.antrieb_schaltmoment) abs <
					{if}
						(L.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (L.L.torque_limit) max (L.L.torque_limit) min (S.L.M_Wheel)
						1 (S.L.antrieb_getr_fest)
						(L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 + (S.L.antrieb_schaltmoment)
					{else}
						(L.L.antrieb_schaltmoment) /-/ (S.L.antrieb_getr_M_an) (L.L.antrieb_getr_ratio) * (C.L.gear_efficiency) * (L.L.torque_limit) max (L.L.torque_limit) min (S.L.M_Wheel)
					{endif}

				{endif}
				0 (S.L.antrieb_wandler_moment)

			{endif}



'#################################################################################
'	Retarder
'#################################################################################
	(L.L.brake) 0.05 >
	(L.L.antrieb_retarder_sw_direkt) ||
	(L.L.antrieb_retarder_sw) ! &&
	(L.L.antrieb_getr_gangwahl) 1 > &&
	(L.L.Throttle) 0.1 < &&
	(L.L.velocity) 0.5 > &&
	(L.L.antrieb_failure_general) ! &&
	(L.L.bremse_ABS_eingriff) ! &&
	(L.L.schaltverzoegerung_runter) 0.1 > &&
	(L.L.vdv_error_retarder_active) ! &&
	{if}	
		0 (S.L.throttle_interne)
		(L.L.antrieb_retarder_time_elapsed) (L.S.Timegap) + (S.L.antrieb_retarder_time_elapsed)

		(L.L.antrieb_retarder_time_elapsed) (C.L.antrieb_retarder_startdelay) >
		{if}
			1 (S.L.antrieb_retarder)
		{endif}

		(L.L.brake) 0.1 <
		{if}
			1 (S.L.antrieb_retarderstufe)
		{else}
			2 (S.L.antrieb_retarderstufe)
		{endif}


' Turn off the retarder:

	{else}
		(L.L.antrieb_retarder)
		(L.L.brake) 0.05 > &&
		(L.L.schaltverzoegerung_runter) 0.1 < &&
		(L.L.velocity) 0.5 > &&
		{if}
			(T.L.ev_retarder_hiss)
		{endif}

		(L.L.velocity) 0.5 <=
		(L.L.throttle_interne) ! &&
		{if}
			(T.L.ev_retarder_disengage)
			1 (S.L.throttle_interne)
		{endif}
		(L.L.brake) 0.05 <=
		(L.L.velocity) 0.5 > &&
		(L.L.antrieb_retarder) &&
		{if}
			(T.L.ev_retarder_disengage)
		{endif}

		0 (S.L.antrieb_retarder) (S.L.antrieb_retarder_time_elapsed)
	{endif}
	
' Braking torque of the retarder:

	(L.L.antrieb_retarder) 1 =
	{if}
		(L.L.antrieb_retarderstufe) 1 =
		{if}
			(L.L.antrieb_n_kardanwelle) 29.3 / (F.L.retarder_stufe1) 0.7 * (C.L.antrieb_i_achse) /-/ * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel) 
		{else}
			(L.L.antrieb_retarderstufe) 2 =
			{if}
				(L.L.antrieb_retardermoment) (L.S.Timegap) 10000 * - s1
				(L.L.antrieb_n_kardanwelle) 29.3 / (F.L.retarder_stufe2) 0.7 * (C.L.antrieb_i_achse) /-/ * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * s2
				l1 l2 max (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)
			{else}
			(L.L.antrieb_retarderstufe) 3 =
			{if}	
				(L.L.antrieb_retardermoment) (L.S.Timegap) 10000 * - s1
				(L.L.antrieb_n_kardanwelle) 29.3 / (F.L.retarder_stufe3) 0.7 * (C.L.antrieb_i_achse) /-/ * (L.L.antrieb_retarder_time_elapsed) (F.L.retarder_fadein) * s2
				l1 l2 max (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)
			{endif}
			{endif}
		{endif}
	{else}
'		Unload the retarder brake
		(L.L.antrieb_retardermoment) (L.S.Timegap) 1000 * + 0 min (S.L.antrieb_retardermoment) (L.L.M_Wheel) + (S.L.M_Wheel)
		(L.L.antrieb_retarder_volume) (L.S.Timegap) - 0 max (S.L.antrieb_retarder_volume) s0
		l0 0 =
		{if}
			0 (S.L.antrieb_wendesatz)
		{endif}
	
	{endif}

'#################################################################################
'	Automatic neutral switching at standstill
'#################################################################################

	(L.L.antrieb_gear_engaged_timer) (L.S.Timegap) + (S.L.antrieb_gear_engaged_timer)
	
	(L.L.antrieb_n_kardanwelle) (C.L.antrieb_neutral_maxspeed) <
	(L.L.antrieb_getr_gangwahl) 1 > &&
	(L.L.antrieb_retarder) ! &&
	{if}
		(L.L.bremse_p_Brzyl_HA) (C.L.antrieb_neutral_brakepressure) >
		(L.L.bremse_feststell) ||
		{if}
			(L.L.antrieb_neutral_requested) !
			{if}
				1 (S.L.antrieb_neutral_requested)
				0 (S.L.antrieb_gear_engaged_timer) (S.L.antrieb_wandler_moment) (S.L.antrieb_wandler_ny) (S.L.antrieb_wandler_sollwert)
			{endif}
			
			(L.L.antrieb_neutral_requested)
			(L.L.antrieb_gear_engaged_timer) (C.L.antrieb_gear_engaged_mintime) >= &&
			{if}
				0 (S.L.antrieb_getr_aktugang) (S.L.antrieb_schaltmoment)
				(L.L.nbs_fade) (L.S.timegap) + (S.L.nbs_fade)
			{endif}

		{else}		
			1 (S.L.antrieb_getr_aktugang)
			0 (S.L.antrieb_neutral_requested) (S.L.antrieb_gear_engaged_timer)
			0 (S.L.nbs_fade)
		{endif}
	{endif}

'#################################################################################
'	Planetary gear set (Fjü-Sound)
'#################################################################################
	
	(L.L.antrieb_retarder)  
	(L.L.antrieb_getr_gangwahl) 0 = ||
	{if}
		1 (S.L.antrieb_wendesatz)
		(L.L.antrieb_retarder_volume) (L.S.Timegap) + 1 min (S.L.antrieb_retarder_volume)
'		Reset to 0 takes place at the fadeout of the retarder brake torque
	{endif}



'gear limiter
(L.L.antrieb_getr_aktugang) (L.L.maxgear) >
{if}
(L.L.maxgear) (S.L.antrieb_getr_aktugang)
{endif}




{end}



'#################################################################################
'	Determination of the switching speeds
'#################################################################################

{macro:antrieb_getr_chkNxtGear}

'	Highest gear: s0!

'	Delay of the kickdown circuit:



(C.L.kickdown_enable) 1 =
	{if}
		(L.L.throttle) 1 =
		{if}
			(L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 2 * + 1 min (S.L.antrieb_kickdown_stellglied)
			1 =
			{if}
				1 (S.L.antrieb_kickdown)
			{endif}
		{else}
			(L.L.antrieb_kickdown_stellglied) (L.S.Timegap) 1 * - 0 max (S.L.antrieb_kickdown_stellglied)
			0 =
			{if}
				0 (S.L.antrieb_kickdown)
			{endif}
		{endif}
	{endif}

'	Delay of the accelerator pedal-dependent switching threshold:

	
	(L.L.throttle) (L.L.antrieb_throttle_stellglied) >
	{if}
		(L.L.antrieb_throttle_stellglied) (L.S.Timegap) 1 * + (L.L.throttle) min (S.L.antrieb_throttle_stellglied)
	{else}
		(L.L.antrieb_throttle_stellglied) (L.S.Timegap) 0.5 * - (L.L.throttle) max (S.L.antrieb_throttle_stellglied)
	{endif}
	
'	Calculate the current acceleration:
	
	(L.L.Velocity) (L.L.antrieb_last_geschwindigkeit) - 3.6 / (L.S.Timegap) / (S.L.antrieb_beschleunigung)
	(L.L.Velocity) (S.L.antrieb_last_geschwindigkeit)



			(L.L.antrieb_getr_aktugang) s1
' 1.Gang
			1 =
			{if}
				(C.L.antrieb_getr_ratio1) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_kickdown)
				(C.L.Getriebemodus) 2 = ||
				{if}
					(C.L.antrieb_getr_autoSwUpkickdnSpd1) s3 s4
				{else}
					(C.L.wandler_lockmode) 1 =
					(L.L.throttle) (C.L.wandler_lockup) < ||
					{if}
						(C.L.antrieb_getr_autoSwUpMaxSpd1c) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3 s4
					{else}
						(C.L.antrieb_getr_autoSwUpMaxSpd1) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3 s4
					{endif}
				{endif}
		
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
				(L.L.schalttimer) 1 > &&
				(L.L.throttle) 0 > &&
				(L.L.antrieb_getr_gangwahl) 2 > &&
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					2 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g2_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)		
					
					(C.L.wandler_lockmode) 0 =
					(C.L.wandler_lockmode) 1 = ||
					(L.L.antrieb_kickdown) ||
					(L.L.throttle) (C.L.wandler_lockup) < (L.L.wandler_lockup) ! && ||
					(C.L.ecolife) ! &&
					{if}
						0 (S.L.wandler_lockup)
						(L.L.antrieb_kickdown)
						{if}
							(T.L.ev_gear_upshift2)
						{else}
							(T.L.ev_gear_upshift1)
						{endif}
					{else}
						(T.L.ev_gear_upshift2)
					{endif}
				{endif}

				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd1) <
				(L.L.schalttimer) 0.5 > (L.L.engine_n) (C.L.engine_governed_idle_RPM) 300 + < && (L.L.throttle) 0.85 >= && ||
				(L.L.wandler_lockup) &&
				{if}
					0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer) (S.L.wandler_lockup)
					(M.L.antrieb_getr_schaltmoment_runter) (S.L.antrieb_schaltmoment_soll)
				{endif}
			{endif}
' 2.Gang
			l1 2 =
			{if}
				(C.L.antrieb_getr_ratio2) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwUpkickdnSpd2) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwUpMaxSpd2) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3 s4
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
				(L.L.schalttimer) 1 > &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwUpkickdnSpd2) > (L.L.throttle) 0 = && ||
				(L.L.antrieb_getr_gangwahl) 3 > &&
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					3 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g3_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(T.L.ev_gear_upshift3)		
				{endif}

				(L.L.wandler_lockup) 1 =
				{if}
					(L.L.schalttimer) 0.5 > (L.L.engine_n) (C.L.engine_governed_idle_RPM) 300 + < && (L.L.throttle) 0.85 >= &&
					(L.L.schaltverzoegerung) 1 > &&
					(L.L.schaltverzoegerung_runter) 1 > &&
					(L.L.engine_n) (C.L.engine_governed_idle_RPM) < ||
					{if}
						(M.L.antrieb_getr_schaltmoment_runter) (S.L.antrieb_schaltmoment_soll)
						0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer) (S.L.wandler_lockup)
					{endif}
				{else}
					(L.L.velocity) 2 <
					(L.L.schaltverzoegerung) 1 > &&
					(L.L.schaltverzoegerung_runter) 1 > &&
					{if}
						1 (S.L.antrieb_getr_aktugang)
						(M.L.antrieb_getr_schaltmoment_runter) (S.L.antrieb_schaltmoment_soll)
						0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer) (S.L.wandler_lockup)
						(T.L.ev_gear_downshift3)
					{endif}
				{endif}
			{endif}
' 3.Gang
			l1 3 =
			{if}
				(C.L.antrieb_getr_ratio3) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwUpkickdnSpd3) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwUpMaxSpd3) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3 s4
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
				(L.L.schalttimer) 1 > &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwUpkickdnSpd3) > (L.L.throttle) 0 = && ||
				(L.L.antrieb_getr_gangwahl) 4 >= &&
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					4 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g4_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(T.L.ev_gear_upshift4)		
				{endif}
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwDnkickdnSpd3) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwDnMinSpd3) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s4
					(C.L.antrieb_getr_autoSwDnMaxSpd3) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_retarder_armed) ! &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd3) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * < ||
				(L.L.schaltverzoegerung) 1 > &&
				(L.L.schaltverzoegerung_runter) 1 > &&
				(L.L.engine_n) (C.L.engine_governed_idle_RPM) < ||
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					2 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment_runter) 5 / (S.L.antrieb_schaltmoment_soll)
					0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer)
					(T.L.ev_gear_downshift4)

					(C.L.Ecolife) 1 =
					(L.L.throttle) 0 = &&
					{if}
						1 (S.L.wandler_lockup)
					{else}
						0 (S.L.wandler_lockup)
					{endif}
				{endif}
			{endif}
' 4.Gang
			l1 4 =
			{if}
				(C.L.antrieb_getr_ratio4) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwUpkickdnSpd4) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwUpMaxSpd4) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3 s4
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
				(L.L.schalttimer) 1 > &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwUpkickdnSpd4) > (L.L.throttle) 0 = && ||
				(L.L.antrieb_getr_gangwahl) 4 >= &&
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					5 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g5_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(T.L.ev_gear_upshift5)	
				{endif}
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwDnkickdnSpd4) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwDnMinSpd4) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s4
					(C.L.antrieb_getr_autoSwDnMaxSpd4) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_retarder_armed) ! &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd4) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * < ||
				(L.L.schaltverzoegerung) 1 > &&
				(L.L.schaltverzoegerung_runter) 1 > &&
				(L.L.engine_n) (C.L.engine_governed_idle_RPM) < ||
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					3 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment_runter) (S.L.antrieb_schaltmoment_soll)
					0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer) 
					(T.L.ev_gear_downshift5)

					(L.L.throttle) 0 >
					{if}
						0 (S.L.wandler_lockup)
					{endif}
				{endif}
			{endif}
' 5.Gang
			l1 5 =
			{if}
				(C.L.antrieb_getr_ratio5) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwUpkickdnSpd5) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwUpMaxSpd5) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3 s4
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) < (L.L.antrieb_beschleunigung) 0 > &&
				(L.L.schalttimer) 1 > &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwUpkickdnSpd5) > (L.L.throttle) 0 = && ||
				(L.L.antrieb_getr_gangwahl) 4 >= &&
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					6 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment) (C.L.sperrwirkung_g6_fest) (L.L.torque_inc) + * (S.L.antrieb_schaltmoment_soll) (S.L.antrieb_schaltmoment)
					0 (S.L.schaltverzoegerung) (S.L.schalttimer)
					(T.L.ev_gear_upshift6)			
				{endif}
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwDnkickdnSpd5) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwDnMinSpd5) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s4
					(C.L.antrieb_getr_autoSwDnMaxSpd5) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) > (L.L.antrieb_retarder_armed) ! &&
				(L.L.antrieb_n_kardanwelle) (C.L.antrieb_getr_autoSwDnMinSpd5) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * < ||
				(L.L.schaltverzoegerung) 1 > &&
				(L.L.schaltverzoegerung_runter) 1 > &&
				(L.L.engine_n) (C.L.engine_governed_idle_RPM) < ||
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					4 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment_runter) (S.L.antrieb_schaltmoment_soll)
					0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer)
					(T.L.ev_gear_downshift6)

					(L.L.throttle) 0 >
					{if}
						0 (S.L.wandler_lockup)
					{endif}
				{endif}
			{endif}
' 6.Gang
			l1 6 =
			{if}
				(C.L.antrieb_getr_ratio6) (C.L.antrieb_i_achse) * (S.L.antrieb_getr_ratio)
				(L.L.antrieb_kickdown)
				{if}
					(C.L.antrieb_getr_autoSwDnkickdnSpd6) s3 s4
				{else}
					(C.L.antrieb_getr_autoSwDnMinSpd6) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s4
					(C.L.antrieb_getr_autoSwDnMaxSpd6) (L.L.shift_dynamics_high) * (L.L.shift_dynamics_low) * s3
				{endif}
				(M.L.antrieb_getr_chkCh) (L.L.antrieb_n_kardanwelle) >
				(L.L.schaltverzoegerung) 1 > &&
				(L.L.schaltverzoegerung_runter) 1 > &&
				(L.L.engine_n) (C.L.engine_governed_idle_RPM) < ||
				{if}
					(L.L.throttle) 0.6 max (S.L.antrieb_M_restriction)
					5 (S.L.antrieb_getr_aktugang)
					(M.L.antrieb_getr_schaltmoment_runter) (S.L.antrieb_schaltmoment_soll)
					0 (S.L.schaltverzoegerung_runter) (S.L.antrieb_schaltmoment) (S.L.schalttimer)
					(T.L.ev_gear_downshift7)

					(L.L.throttle) 0 >
					{if}
						0 (S.L.wandler_lockup)
					{endif}
				{endif}
			{endif}

'	Test methods: differential speed whistles

	(L.L.engine_n) (L.L.antrieb_n_kardanwelle) 2 * - (S.L.antrieb_n_differenz)

{end}

{macro:antrieb_getr_chkCh}
'	Calculation of the current peak threshold: (l3 = at full throttle, l4 = at zero throttle)
'	(L.L.antrieb_throttle_stellglied) s2 l3 * 1 l2 - l4 * +
	(L.L.antrieb_throttle_stellglied) 0 >
	{if}
		l3
	{else}
		l4
	{endif}
{end}

{macro:antrieb_getr_schaltmoment}
	(L.L.throttle) 0 >
	{if}
		(L.L.schaltverzoegerung) 2 >
		(L.L.schaltverzoegerung_runter) 1 > &&
		{if}
			(L.L.throttle) 0.3 max (L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 + *
		{else}
			(L.L.throttle) 0.3 max (L.L.antrieb_M_restriction) min (L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 + *
		{endif}
	{else}
		(L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 +
	{endif}
{end}

{macro:antrieb_getr_schaltmoment_runter}
	(L.L.engine_n) (C.L.torque_apex_at_RPM) min (F.L.engine_M_maxThrottle) 200 +
{end}