{init}
	(M.L.Doors_Init)

'E-Kupplungen aktivieren:

	1 (S.L.E-Kupplung_Front)
	1 (S.L.E-Kupplung_KK)

{end}

{frame}
	(M.L.Doors_Frame)


'#########################################
'	Spannungsversorgung und Abrissfunken:
'#########################################

'Prüfen, ob ein Spannungsabfall am Stromabnehmer vorliegt. Falls ja, dann Abrissfunke!

(L.L.Prev_volt_veh_R) (L.L.contactshoe_0_volt_veh) s0 - 800 / 0 max (S.L.Abrissfunke_R)
(L.L.Prev_volt_veh_L) (L.L.contactshoe_1_volt_veh) s1 - 800 / 0 max (S.L.Abrissfunke_L)

'Wenn das der letzte Kontakt war und eingeschaltet war, dann richtig doll!

(L.L.PrePrev_volt_veh_R) (L.L.CCR_800V) - 800 / 5 * 100 (L.L.Velocity) abs - 100 / * (L.L.CCR_THR_forward) (L.L.CCR_THR_back) || * (L.L.Abrissfunke_R) max (S.L.Abrissfunke_R)
(L.L.PrePrev_volt_veh_L) (L.L.CCR_800V) - 800 / 5 * 100 (L.L.Velocity) abs - 100 / * (L.L.CCR_THR_forward) (L.L.CCR_THR_back) || * (L.L.Abrissfunke_L) max (S.L.Abrissfunke_L)

'Alte Werte speichern:

(L.L.Prev_volt_veh_R) (S.L.PrePrev_volt_veh_R)
(L.L.Prev_volt_veh_L) (S.L.PrePrev_volt_veh_L)

l0 (S.L.Prev_volt_veh_R)
l1 (S.L.Prev_volt_veh_L)

'800-Volt-Leitung versorgen:

l0 l1 max (S.L.CCW_800V)



(L.L.Prev_thirdrail_index_R) (L.L.contactshoe_0_rail_index) = !
(L.L.Prev_thirdrail_index_L) (L.L.contactshoe_1_rail_index) = ! ||
{if}
	(L.L.Velocity) abs 45 >
	{if}
		"auflauf_schnell.wav"
	{else}
		"auflauf_langsam.wav"
	{endif}
	(T.F.ev_contactshoe)
{endif}

(L.L.contactshoe_0_rail_index) (S.L.Prev_thirdrail_index_R)
(L.L.contactshoe_1_rail_index) (S.L.Prev_thirdrail_index_L)

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

	(L.L.CCR_Bremse)
	(L.L.Velocity) 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) 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)


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

(L.L.CCR_Tueroeffnen_L)
(S.L.Debug_0)
(L.L.CCW_Tueroeffnen_L)
(S.L.Debug_1)
(L.L.CCR_Tueroeffnen_R)
(S.L.Debug_2)
(L.L.CCW_Tueroeffnen_R)
(S.L.Debug_3)
(L.L.CCR_Tuerschliessen)
(S.L.Debug_4)
(L.L.CCW_Tuerschliessen)
(S.L.Debug_5)


{end}

{trigger:railbond_0}
	(T.L.ev_railbond_a)
{end}

{trigger:railbond_1}
	(T.L.ev_railbond_a)
{end}

{trigger:railbond_2}
	(T.L.ev_railbond_b)
{end}

{trigger:railbond_3}
	(T.L.ev_railbond_b)
{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}


