

{init}
	1 (S.L.Druckluft_Front) (S.L.Druckluft_Back) (S.L.Steuerkabel_Front) (S.L.Steuerkabel_Back)
	0.24 (S.L.engine_rel_n)

'	Variation für Motor-/Turboladerträgheit (für lustige Interferenz-Effekte bei Doppeltraktion)

	0.275 100 random 2000 / + (S.L.engine_const_revup)
	0.175 100 random 2000 / + (S.L.engine_const_revdown)

{end}

{frame}

'Einspeisen des Fahrbefehls in die Vielfachsteuerung:
'AI gibt nur 85%, bei der 218 muss aber bitteschön auch der AI-Tf auf Stufe 15 aufdrehen!

	(L.L.Throttle) s0
	(L.L.AI_Engine) 0.5 >
	{if}
		l0 0.85 / 1 min s0
	{endif}
	l0 (S.L.CCW_Throttle)

'Lesen des Fahrschalterwertes aus der Steuerleitung:
	(L.L.CCR_Throttle) (S.L.Regler)



'#########################################
'	Dieselmotor und Traktion:
'#########################################


'Dieselmotor



'Geschwindigkeitsabhängiges Hochschalten:

	(L.L.Abs_Velocity) 20 <
	{if}
		(L.L.Abs_Velocity) 7 <
		{if}
			(L.L.Regler) 0.4 min (S.L.Regler)
		{else}
			(L.L.Regler) 0.7 min (S.L.Regler)
		{endif}
	{endif}


'Lineares Auf- und Ablaufen der Einspritzpunpe

	(L.L.Regler) (L.L.Regler_injection) >
	{if}
		(L.L.Regler_injection) (L.S.Timegap) + (L.L.Regler) min (S.L.Regler_injection)
	{else}
		(L.L.Regler_injection) (L.S.Timegap) - (L.L.Regler) max (S.L.Regler_injection)
	{endif}

'Motorträgheit

	(L.L.Regler_injection) 0.76 * 0.24 + 1 min s0
	(L.L.engine_rel_n) s1
	(L.L.engine_const_revup) s2 
	(L.L.engine_const_revdown) s3
	(M.L.traegheit)
	(S.L.engine_rel_n) s0

	0.3 - 0.7 / 0 max (S.L.engine_traction)

'Richtungswender:
	(L.L.train_Me_reverse) -2 * 1 + s1

'Traktion
	(L.L.Bremse_Druck) 0.01 <
	{if}
		(L.L.Velocity) abs (F.L.ZV-Kennlinie) (L.L.engine_traction) * l1 * (S.L.M_Wheel)
	{else}
		0 (S.L.M_Wheel)
	{endif}

'#########################################
'	Bremskraft:
'#########################################

	(L.L.Brake)
	(S.L.CCW_Bremse)
	(L.L.CCR_Bremse)
	(L.L.Velocity) abs 4 / min s0
	(L.L.Bremshebel) >
	{if}
		l0 (S.L.Bremshebel)
	{endif}
	l0 0.01 <
	{if}
		0 (S.L.Bremshebel)
	{endif}

	(L.L.Bremshebel) s0
	(L.L.Bremse_Druck) s1
	1.0 s2
	0.5 s3
	(M.L.traegheit)
	(S.L.Bremse_Druck)
	l5 20 * 1 min (S.L.Bremse_Luftstrom) s0

	l0 0 >
	{if}
		1 (S.L.Bremse_ReleaseSound)
	{endif}
	l0 -0.1 <
	(L.L.Bremse_Druck) 0.01 > &&
	(L.L.Bremse_ReleaseSound) &&
	(L.L.Velocity) abs 5 < &&
	{if}
		(T.L.ev_bremseloesen)
		0 (S.L.Bremse_ReleaseSound)		
	{endif}

	(L.L.Bremse_Druck) (C.L.AI_F_brems_max) * (S.L.Brakeforce)


'#########################################
'	Rauch:
'#########################################

	(L.L.engine_rel_n) 1000 * 50 /  (S.L.fx_freq)
	(L.L.engine_rel_n) 1000 * 2500 / (L.L.Regler) 2 * * 3 + 2 * (S.L.fx_vel)
	(L.L.Regler) (L.L.engine_traction) - 0 max 0.05 + (S.L.fx_alpha)
	(L.L.Regler) 0.5 + 1.5 / 5 * (S.L.fx_leben)

'#########################################
' Falls Stationen, setze immer auf 0:
	(L.L.AI_Scheduled_AtStation) 0 <
	{if}
		0 (S.L.AI_Scheduled_AtStation)
	{endif}

'#########################################
'	Spitzen- und Schlusssignale:
'#########################################
'Prüfen, ob die Lok vorwärts oder rückwärts fährt:
	(L.L.train_Me_reverse)
	{if}
'		Lok fährt rückwärts
		(L.L.AI_Engine) 0.5 > (S.L.Lights_white_rear) 
		(L.L.train_frontcoupling) ! (S.L.Lights_red_front)
		0 (S.L.Lights_white_front) (S.L.Lights_red_rear)
	{else}
'		Lok fährt vorwärts
		(L.L.AI_Engine) 0.5 > (S.L.Lights_white_front) 
		(L.L.train_backcoupling) ! (S.L.Lights_red_rear)		
		0 (S.L.Lights_white_rear) (S.L.Lights_red_front)
	{endif}

'#########################################
'Setzen der Absolutgeschwindigkeit für Soundzwecke
'#########################################

	(L.L.Velocity) abs (S.L.Abs_Velocity)

'#########################################
'	Debug:
'#########################################

(L.L.Regler)
(S.L.Debug_0)
(L.L.engine_rel_n)
(S.L.Debug_1)
(L.L.engine_const_revup)
(S.L.Debug_2)
(L.L.engine_const_revdown)
(S.L.Debug_3)
(L.L.AI_Engine)
(S.L.Debug_4)

{end}


{macro:traegheit}

'Simuliert träges Verhalten (exponentiell)

'(c) Rüdiger Hülsmann, edited by Marcel Kuhnt

'Ladekonventionen:
'	Sollwert		l0
'	Istwert			l1
'	Konstante Anlauf	l2
'	Konstante Ablauf	l3

'Ausgabe:
'	neuer Istwert:		direkt
'	Ableitung:		l5

'Anlauf oder Auslauf?
	l0 l1 > 
	{if}
		l2 s4
	{else}
		l3 s4
	{endif}


'Sollwert:
	l0
'Istwert:
	l1
'Beschleunigung:
	- s4 * s5 (L.S.Timegap) *
'Addition zum Istwert:
	l1 + s1
{end}


