'##############
'Brake Script
'##############

'Controls Brakes and includes air system (compressor)

'(c) 2007-2011 Rüdiger Hülsmann, Marcel Kuhnt

'Script Version: 1.0
'Omsi release: 1.0

'Needs:
'- Engine (for compressor)

'Revision History:
'- Rüdiger Hülsmann	11.05.2009	Last Change
'- Rüdiger Hülsmann	15.03.2010	Brake squeak
'- Marcel Kuhnt		15.04.2010	Pressure Calculation Stabilized
'- Rüdiger Hülsmann	06.11.2010	Automatic level control
'- Marcel Kuhnt		28.12.2010	Added wheel separated brake force variables
'- Rüdiger Hülsmann	01.01.2011	Added ABS function
'- Rüdiger Hülsmann	06.01.2011	separated brake force debugged (pipe diameter)
'- Rüdiger Hülsmann	23.01.2011	ABS relais sound
'- Rüdiger Hülsmann	31.01.2011	Random initial pressure, nonreturn valves for air suspension
'- Rüdiger Hülsmann	03.02.2011	Random squeak sound volume
'- Kyle Ortiz		03.07.2013	Adjust Air Drag Values
'- Kyle Ortiz		05.10.2013	Anti-rollback braking method
'--------------------------------------------------------------


{trigger:parking_brake_toggle}
	(L.L.bremse_feststell) ! (S.L.bremse_feststell) (S.L.bremse_feststell_sw)
	{if}
		(T.L.ev_bremse_feststell_ein)
	{else}
		(T.L.ev_bremse_feststell_aus)
	{endif}
{end}


{trigger:parking_brake_set}
	(L.L.bremse_feststell) !
	{if}
		(S.L.bremse_feststell)
		(T.L.ev_bremse_feststell_ein)
		1 (S.L.bremse_feststell_sw)
	{endif}
{end}

{trigger:parking_brake_release}
	(L.L.bremse_feststell)
	{if}
		! (S.L.bremse_feststell)
		(T.L.ev_bremse_feststell_aus)
		0 (S.L.bremse_feststell_sw)
	{endif}
{end}

{trigger:parking_brake_mouse_drag}
	(L.S.mouse_y) 200 / (L.L.bremse_feststell_sw) + (S.L.bremse_feststell_sw) s0
	l0 0 <
	{if}
		0 (S.L.bremse_feststell_sw)
	{endif}
	l0 1 >
	{if}
		1 (S.L.bremse_feststell_sw)
	{endif}
	l0 0.6 > (L.L.bremse_feststell) 0 = &&
	{if}
		1 (S.L.bremse_feststell)
		(T.L.ev_bremse_feststell_ein)
	{endif}
	l0 0.4 < (L.L.bremse_feststell) 1 = &&
	{if}
		0 (S.L.bremse_feststell)
		(T.L.ev_bremse_feststell_aus)
	{endif}

	1 (S.L.bremse_feststell_klinke)
{end}

{trigger:parking_brake_mouse_off}
	0 (S.L.bremse_feststell_klinke)
{end}



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

{macro:bremse_init}
	1 (S.L.bremse_feststell_sw) (S.L.bremse_feststell) (S.L.bremse_UeVentil_1) (S.L.bremse_UeVentil_2)

'	900000 (S.L.bremse_p_tank01) (S.L.bremse_p_tank02) (S.L.bremse_p_tank03) (S.L.bremse_p_tank04) (S.L.bremse_p_leitung01) (S.L.bremse_p_leitung02)


'Kreis 1 zufällig befüllen
	500000 random 400000 + (S.L.bremse_p_tank01) (S.L.bremse_p_leitung01) (S.L.bremse_p_leitung02) s0

'Kreis 2 in Abhängigkeit vom Druck in Kreis 1 befüllen: Wenn Druckausgleich vorhanden, dann p2=p1 ansonsten Zufallswert unterhalb des Sicherungsdrucks (5 bar)
	(C.L.bremse_UeVentil_1_schliessdruck) >
	{if}
		l0 (S.L.bremse_p_tank02)
	{else}
		300000 random 300000 + (S.L.bremse_p_tank02)
	{endif}

'Kreis 3 zufällig befüllen, aber mindestens Druck wie in Kreis 
	500000 random 400000 + l0 max (S.L.bremse_p_tank03) s0

'Kreis 4 in Abhängigkeit vom Druck in Kreis 3 befüllen: Wenn Druckausgleich vorhanden, dann p4=p3 ansonsten Zufallswert unterhalb des Sicherungsdrucks (5 bar)
	(C.L.bremse_UeVentil_2_schliessdruck) >
	{if}
		l0 (S.L.bremse_p_tank04)
	{else}
		300000 random 300000 + (S.L.bremse_p_tank04) s0
	{endif}

'Setzen der Luftfederbalgdrücke

	300000 random 100000 + (S.L.bremse_p_balg_0_R) 
	300000 random 100000 + (S.L.bremse_p_balg_0_L)
	300000 random 100000 + (S.L.bremse_p_balg_1_R)
	300000 random 100000 + (S.L.bremse_p_balg_1_L)


'Setzen der Bremszylinderdrücke	
	100000 (S.L.bremse_p_luft) (S.L.bremse_p_brzyl_VA) (S.L.bremse_p_brzyl_VA_R) (S.L.bremse_p_brzyl_VA_L) (S.L.bremse_p_brzyl_HA) (S.L.bremse_p_brzyl_HA_R) (S.L.bremse_p_brzyl_HA_L) (S.L.bremse_p_Brzyl_FBA) 


	0 (S.L.bremse_loesezischbereitschaft) (S.L.bremse_bremszischbereitschaft) (S.L.bremse_zieldruckdifferenz) 
	
	0 (L.L.bremse_loesezischzeit)
	
' Setzen des Initial-Hup/Quietschvolumes

	-2 (S.L.bremse_quietsch_volume)
{end}

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

{macro:bremse_frame}
	

'Bremskraftberechnung Vorderachse
'Rechte Seite
	(L.L.bremse_p_brzyl_VA_L) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * 0 max s0

'	Luftwiderstand:
	(L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 8.1396 0.55 0.6 * * * +
'	Gesamtbremskraft auf 4 Räder aufteilen
	4 /
	(S.L.Axle_Brakeforce_0_R)

'Linke Seite
	(L.L.bremse_p_brzyl_VA_L) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * 0 max s0

'	Luftwiderstand:
	(L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 8.1396 0.55 0.6 * * * +
'	Gesamtbremskraft auf 4 Räder aufteilen
	4 /
	(S.L.Axle_Brakeforce_0_L)


'Bremskraftberechnung Hinterachse
'Rechte Seite
	(L.L.bremse_p_brzyl_VA_L) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * 0 max s0

'	Luftwiderstand:
	(L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 8.1396 0.55 0.6 * * * +
'	Gesamtbremskraft auf 4 Räder aufteilen
	4 /
'	Feststellbremse obendrauf
	(L.L.bremse_p_Brzyl_FBA) (F.L.Bremskraft_FBA) 2 / + 
	(S.L.Axle_Brakeforce_1_R)

'Linke Seite
	(L.L.bremse_p_brzyl_VA_L) 100000 - 20000 - 850000 / (C.L.max_bremskraft) * 0 max s0

'	Luftwiderstand:
	(L.L.Velocity) 3.6 / (L.L.Velocity) 3.6 / * 8.1396 0.55 0.6 * * * +
'	Gesamtbremskraft auf 4 Räder aufteilen
	4 /
'	Feststellbremse obendrauf
	(L.L.bremse_p_Brzyl_FBA) (F.L.Bremskraft_FBA) 2 / + 
	(S.L.Axle_Brakeforce_1_L)



	(M.L.bremse_kompressor)
	
	(M.L.bremse_druckluftsound)

	(M.L.bremse_levelcontrol)


'	Setzen des Bremssollwertes (Pedalbetätigungen bis 0.1 bleiben unberücksichtigt => Rasten für Retarder)
	
	(L.L.Brake) 0.1 - 1.1 * s0 0 <
	{if}
		0 (S.L.bremse_luft)
	{else}
		l0 (S.L.bremse_luft)
	{endif}
{end}	

{end}

{macro:bremse_kompressor}

'	Berechnung des Massenstroms vom Kompressor in die Füllleitung zum Vierkreisschutzventil:

	(L.L.bremse_kompressor) 1 =
	{if}
		(L.L.engine_n) (L.S.Timegap) * 60 / (C.L.bremse_m_kompressor) * 
		(C.L.RT_Luft) * (C.L.bremse_V_leitung01) / (L.L.bremse_p_leitung01) + (S.L.bremse_p_leitung01)
	{endif}



'#################################################################
'	Vierkreisschutzventil

'	Berechnung der Querschnittsfläche der Überströmventile in Abhängigkeit der anliegenden Drücke von Bremskreis und Füllleitung:

	
	(C.L.bremse_UeVentil_1_oeffnungsdruck) (C.L.bremse_UeVentil_1_schliessdruck) - (C.L.bremse_UeVentil_1_schliessdruck) / (L.L.bremse_p_Tank01) * (L.L.bremse_p_leitung01) + (C.L.bremse_UeVentil_1_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_1)

	(C.L.bremse_UeVentil_2_oeffnungsdruck) (C.L.bremse_UeVentil_2_schliessdruck) - (C.L.bremse_UeVentil_2_schliessdruck) / (L.L.bremse_p_Tank02) * (L.L.bremse_p_leitung01) + (C.L.bremse_UeVentil_2_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_2)

	(C.L.bremse_UeVentil_3_oeffnungsdruck) (C.L.bremse_UeVentil_3_schliessdruck) - (C.L.bremse_UeVentil_3_schliessdruck) / (L.L.bremse_p_Tank03) * (L.L.bremse_p_leitung02) + (C.L.bremse_UeVentil_3_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_3)

	(C.L.bremse_UeVentil_4_oeffnungsdruck) (C.L.bremse_UeVentil_4_schliessdruck) - (C.L.bremse_UeVentil_4_schliessdruck) / (L.L.bremse_p_Tank04) * (L.L.bremse_p_leitung02) + (C.L.bremse_UeVentil_4_oeffnungsdruck) - 200000000000000 / 0 max sqrt (S.L.bremse_A_UeVentil_4)

'#################################################################
'	Testleck in Kreis 2 beim Betätigen des Warnblinkers:

'	(L.L.lights_sw_warnblinker)
'	{if}
'		(L.L.bremse_p_Tank02) s1
'		(L.L.bremse_p_luft) s2
'		(C.L.bremse_V_Tank02) s3
'		1000000 s4
'		(C.L.bremse_A_Leck) s5
'
'		(M.L.bremse_druckausgleich)
'
'		l1 (S.L.bremse_p_Tank02) 
'	{endif}
'
'	Testleck in Kreis 3 beim Betätigen der Hupe:
'
'	(L.L.cockpit_hupe)
'	{if}
'		(L.L.bremse_p_Tank03) s1
'		(L.L.bremse_p_luft) s2
'		(C.L.bremse_V_Tank03) s3
'		1000000 s4
'		(C.L.bremse_A_Leck) s5
'
'		(M.L.bremse_druckausgleich)
'
'		l1 (S.L.bremse_p_Tank03) 
'	{endif}

'#################################################################	
'Kreise 1+2
'#################################################################	

'	Druckausgleich in Bremskreis 1 und 2 bei geöffneten Überstromventilen 1 und 2:

	(L.L.bremse_A_UeVentil_1) 0 > (L.L.bremse_A_UeVentil_2) 0 > &&
	{if}
	
		(L.L.bremse_p_Tank01) s1
		(L.L.bremse_p_Tank02) s2
		(C.L.bremse_V_Tank01) s3
		(C.L.bremse_V_Tank02) s4
		(L.L.bremse_A_UeVentil_1) (L.L.bremse_A_UeVentil_2) min s5	
		
		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Tank01)
		l2 (S.L.bremse_p_Tank02)

	{endif}


'	Befüllen von Bremskreis 1, mit Rückschlagventil gesichert

	(L.L.bremse_A_UeVentil_1) 0 > (L.L.bremse_p_leitung01) (L.L.bremse_p_Tank01) > &&

	{if}

'		Druckausgleich Füllleitung - Bremskreis 1:
		
		(L.L.bremse_p_leitung01) s1
		(L.L.bremse_p_Tank01) s2
		(C.L.bremse_V_leitung01) s3
		(C.L.bremse_V_Tank01) s4
		(L.L.bremse_A_UeVentil_1) s5	
		
		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_leitung01) 
		l2 (S.L.bremse_p_Tank01) 


	{endif}	

'	Befüllen von Bremskreis 2, mit Rückschlagventil gesichert

	(L.L.bremse_A_UeVentil_2) 0 > (L.L.bremse_p_leitung01) (L.L.bremse_p_Tank02) > &&
	{if}

'		Druckausgleich Füllleitung - Bremskreis 2:

		(L.L.bremse_p_leitung01) s1
		(L.L.bremse_p_Tank02) s2
		(C.L.bremse_V_leitung01) s3
		(C.L.bremse_V_Tank02) s4
		(L.L.bremse_A_UeVentil_2) s5	
		
		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_leitung01)
		l2 (S.L.bremse_p_Tank02)
		

	{endif}

'#################################################################	
'Kreise 3+4
'#################################################################	

'Füllen der Fülleitung für die Kreise 3+4 aus den Behältern 1 und 2 (jeweils dem mit dem höheren Druck), mit Rückschlagventil gesichert:


	(L.L.bremse_p_Tank01) (L.L.bremse_p_Tank02) > 
	{if}
		
		(L.L.bremse_p_Tank01) (L.L.bremse_p_leitung02) >
		{if}
'			Druckausgleich Bremskreis 1 - Füllleitung Kreis 3+4

			(L.L.bremse_p_Tank01) s1
			(L.L.bremse_p_leitung02) s2
			(C.L.bremse_V_Tank01) s3
			(C.L.bremse_V_leitung02) s4
			(C.L.bremse_A_Rueckschlagventil_1) s5	
		
			(M.L.bremse_druckausgleich)

			l1 (S.L.bremse_p_Tank01)
			l2 (S.L.bremse_p_leitung02)
		{endif}
	{else}	
		(L.L.bremse_p_Tank02) (L.L.bremse_p_leitung02) >
		{if}

'			Druckausgleich Bremskreis 2 - Füllleitung Kreis 3+4
		
			(L.L.bremse_p_Tank02) s1
			(L.L.bremse_p_leitung02) s2
			(C.L.bremse_V_Tank02) s3
			(C.L.bremse_V_leitung02) s4
			(C.L.bremse_A_Rueckschlagventil_1) s5	
		
			(M.L.bremse_druckausgleich)

			l1 (S.L.bremse_p_Tank02)
			l2 (S.L.bremse_p_leitung02)
		{endif}
	{endif}


	
'	Druckausgleich in Bremskreis 3 und 4 bei geöffneten Überstromventilen 3 und 4:

	(L.L.bremse_A_UeVentil_3) 0 > (L.L.bremse_A_UeVentil_4) 0 > &&
	{if}
	
		(L.L.bremse_p_Tank03) s1
		(L.L.bremse_p_Tank04) s2
		(C.L.bremse_V_Tank03) s3
		(C.L.bremse_V_Tank04) s4
		(L.L.bremse_A_UeVentil_3) (L.L.bremse_A_UeVentil_4) min s5	
		
		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Tank03)
		l2 (S.L.bremse_p_Tank04)

	{endif}



'	Befüllen von Bremskreis 3, mit Rückschlagventil gesichert

	(L.L.bremse_A_UeVentil_3) 0 > (L.L.bremse_p_leitung02) (L.L.bremse_p_Tank03) > &&

	{if}

'		Druckausgleich Füllleitung - Bremskreis 1:
		
		(L.L.bremse_p_leitung02) s1
		(L.L.bremse_p_Tank03) s2
		(C.L.bremse_V_leitung02) s3
		(C.L.bremse_V_Tank03) s4
		(L.L.bremse_A_UeVentil_3) s5	
		
		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_leitung02) 
		l2 (S.L.bremse_p_Tank03) 


	{endif}	

'	Befüllen von Bremskreis 4, mit Rückschlagventil gesichert

	(L.L.bremse_A_UeVentil_4) 0 > (L.L.bremse_p_leitung02) (L.L.bremse_p_Tank04) > &&
	{if}

'		Druckausgleich Füllleitung - Bremskreis 2:

		(L.L.bremse_p_leitung02) s1
		(L.L.bremse_p_Tank04) s2
		(C.L.bremse_V_leitung02) s3
		(C.L.bremse_V_Tank04) s4
		(L.L.bremse_A_UeVentil_4) s5	
		
		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_leitung02)
		l2 (S.L.bremse_p_Tank04)
		

	{endif}
'#########################################################################


'	Haltestellenbremse
'	Setzen des Zieldruckes

	(L.L.bremse_halte)
	{if}
		(C.L.bremse_pmax_halte) (L.L.bremse_p_Tank01) min (S.L.bremse_zieldruck_halte)
	{else}
		100000 (S.L.bremse_zieldruck_halte)
	{endif}	


'	Setzen des Zieldrucks der Betriebsbremse für Kreis 1 (HA)

	(L.L.bremse_luft) (L.L.bremse_p_tank01) * 1.1 * 100000 + (S.L.bremse_zieldruck_BBA)


'	Setzen des Bremszylinderzieldruckes HA (Fuß- und Haltestellenbremse):
	
	(L.L.bremse_zieldruck_BBA) (L.L.bremse_zieldruck_halte) max (S.L.bremse_zieldruck_HA) (S.L.bremse_zieldruck_HA_R) (S.L.bremse_zieldruck_HA_L)

'	Setzen des Zustands des Wechselventils Fußbremse <> Haltestellenbremse
'	0 = Fußbremse, 1= Haltestellenbremse
	
	(L.L.bremse_zieldruck_BBA) (L.L.bremse_p_brzyl_HA) >
	{if}
		0 (S.L.bremse_wechselventil_HA)
	{endif}
	
		(L.L.bremse_zieldruck_halte) (L.L.bremse_zieldruck_BBA) >
	{if}
		1 (S.L.bremse_wechselventil_HA)
	{endif}



'	Setzen des Bremszylinderzieldruckes VA:
	
	(L.L.bremse_luft) (L.L.bremse_p_tank02) * 1.1 * 100000 +  (S.L.bremse_zieldruck_VA) (S.L.bremse_zieldruck_VA_R) (S.L.bremse_zieldruck_VA_L)


'	Setzen des Bremszylinderzieldruckes FBA (mit Überlastschutz)

'	detect rollback

	(L.L.velocity) -0.5 < (L.L.bremse_halte) ! &&
	{if}
		1 (S.L.bremse_hillassist)
	{endif}	


	(L.L.bremse_hillassist) (L.L.engine_M) 300 > &&
	{if}
		0 (S.L.bremse_hillassist)
	{endif}	

	1 (L.L.bremse_feststell_sw) - (L.L.bremse_hillassist) - (L.L.bremse_p_tank03) * 1.1 * 100000 + s1
	
	(L.L.bremse_zieldruck_HA) l1 max (S.L.bremse_zieldruck_FBA)



'	ABS-Regelung

'	Ist ABS überhaupt vorhanden und aktiv?


	(C.L.bremse_ABS) (L.L.elec_busbar_main) &&
	
	{if}
'		Berechnen der Referenzdrehzahl
'		Umrechnungsfaktor Geschwindigkeit (km/h) auf Raddrehzahl (1/min) = 5.64 bei Raddurchmesser 94cm

		(L.L.Velocity_Ground) 4.7376 * (S.L.bremse_ABS_referenzdrehzahl) s0

'		Übersteigt die Drehzahldifferenz einen kritischen Wret, dann den entsprechenden Bremszylinder entlüften
		
		l0 (L.L.Wheel_RotationSpeed_0_R) - 10 >
		(L.L.Velocity_Ground) 6 > &&
		{if}
			(L.L.bremse_ABS_eingriff_0R) !
			{if}
				(T.L.ev_bremse_ABS_0R_on)
			{endif}
			100000 (S.L.bremse_zieldruck_VA_R)
			1 (S.L.bremse_ABS_eingriff_0R)
		{else}
			(L.L.bremse_ABS_eingriff_0R) 
			{if}
				(T.L.ev_bremse_ABS_0R_off)
			{endif}
			0 (S.L.bremse_ABS_eingriff_0R)
		{endif}

		l0 (L.L.Wheel_RotationSpeed_0_L) - 10 >
		(L.L.Velocity_Ground) 6 > &&
		{if}
			(L.L.bremse_ABS_eingriff_0L) !
			{if}
				(T.L.ev_bremse_ABS_0L_on)
			{endif}
			100000 (S.L.bremse_zieldruck_VA_L)
			1 (S.L.bremse_ABS_eingriff_0L)
		{else}
			(L.L.bremse_ABS_eingriff_0L) 
			{if}
				(T.L.ev_bremse_ABS_0L_off)
			{endif}
			0 (S.L.bremse_ABS_eingriff_0L)
		{endif}

		l0 (L.L.Wheel_RotationSpeed_1_R) - 10 >
		(L.L.Velocity_Ground) 6 > &&
		{if}
			(L.L.bremse_ABS_eingriff_1R) !
			{if}
				(T.L.ev_bremse_ABS_1R_on)
			{endif}
			100000 (S.L.bremse_zieldruck_HA_R)
			1 (S.L.bremse_ABS_eingriff_1R)
		{else}
			(L.L.bremse_ABS_eingriff_1R) 
			{if}
				(T.L.ev_bremse_ABS_1R_off)
			{endif}
			0 (S.L.bremse_ABS_eingriff_1R)
		{endif}

		l0 (L.L.Wheel_RotationSpeed_1_L) - 10 >
		(L.L.Velocity_Ground) 6 > &&
		{if}
			(L.L.bremse_ABS_eingriff_1L) !
			{if}
				(T.L.ev_bremse_ABS_1L_on)
			{endif}
			100000 (S.L.bremse_zieldruck_HA_L)
			1 (S.L.bremse_ABS_eingriff_1L)
		{else}
			(L.L.bremse_ABS_eingriff_1L) 
			{if}
				(T.L.ev_bremse_ABS_1L_off)
			{endif}
			0 (S.L.bremse_ABS_eingriff_1L)
		{endif}

		(L.L.bremse_ABS_eingriff_0R)
		(L.L.bremse_ABS_eingriff_0L) ||
		(L.L.bremse_ABS_eingriff_1R) ||
		(L.L.bremse_ABS_eingriff_1L) ||
		(L.L.bremse_ABS_selftest) ||
		(S.L.bremse_ABS_eingriff)

	{else}
		0 (S.L.bremse_ABS_eingriff)

	{endif}

'	ABS-Selbsttest erfolgreich bei V>6km/h
	(L.L.velocity) 6 > (L.L.bremse_ABS_selftest) &&
	{if}
		0 (S.L.bremse_ABS_selftest)
	{endif}

'	a1) Hinterachse rechts

'	Ist geforderter Bremsdruck höher als der aktuelle?
	(L.L.bremse_zieldruck_HA_R) (L.L.bremse_p_brzyl_HA_R) > 
	{if}
		(L.L.bremse_zieldruck_HA_R) (L.L.bremse_p_brzyl_HA_R) - 20000000000 / (S.L.bremse_A_BrVentil_HA_R)

'		Berechnung des Massenstroms aus Behälter 1 zum Bremszylinder HA

		(L.L.bremse_p_Tank01) s1
		(L.L.bremse_p_Brzyl_HA_R) s2
		(C.L.bremse_V_tank01) s3
		(C.L.bremse_V_Brzyl_HA_R) s4

'		Ventilwahl abhängig von der Stellung des Wechselventils
		(L.L.bremse_wechselventil_HA)
		{if}
			(L.L.bremse_A_BrVentil_HA_R) 2 * s5
		{else}
			(L.L.bremse_A_BrVentil_HA_R) s5
		{endif}

		(M.L.bremse_druckausgleich)
		l1 (S.L.bremse_p_Tank01) 
		l2 (S.L.bremse_p_Brzyl_HA_R) 

	{else}
		(L.L.bremse_p_brzyl_HA_R) (L.L.bremse_zieldruck_HA_R) - sqrt 20000000 / (S.L.bremse_A_BrVentil_HA_R)

'		Berechnung des Massenstroms aus Bremszylinder HA ins Freie

		(L.L.bremse_p_Brzyl_HA_R) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_brzyl_HA_R) s3
		1 s4

'		Ventilwahl abhängig von der Stellung des Wechselventils
		(L.L.bremse_wechselventil_HA)
		{if}
			(L.L.bremse_A_BrVentil_HA_R) 2 * s5
		{else}
			(L.L.bremse_A_BrVentil_HA_R) s5
		{endif}

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Brzyl_HA_R) 
		
	{endif}

'	a2) Hinterachse links

'	Ist geforderter Bremsdruck höher als der aktuelle?
	(L.L.bremse_zieldruck_HA_L) (L.L.bremse_p_brzyl_HA_L) > 
	{if}
		(L.L.bremse_zieldruck_HA_L) (L.L.bremse_p_brzyl_HA_L) - 20000000000 / (S.L.bremse_A_BrVentil_HA_L)

'		Berechnung des Massenstroms aus Behälter 1 zum Bremszylinder HA

		(L.L.bremse_p_Tank01) s1
		(L.L.bremse_p_Brzyl_HA_L) s2
		(C.L.bremse_V_tank01) s3
		(C.L.bremse_V_Brzyl_HA_L) s4

'		Ventilwahl abhängig von der Stellung des Wechselventils
		(L.L.bremse_wechselventil_HA)
		{if}
			(L.L.bremse_A_BrVentil_HA_L) 2 * s5
		{else}
			(L.L.bremse_A_BrVentil_HA_L) s5
		{endif}

		(M.L.bremse_druckausgleich)
		l1 (S.L.bremse_p_Tank01) 
		l2 (S.L.bremse_p_Brzyl_HA_L) 

	{else}
		(L.L.bremse_p_brzyl_HA_L) (L.L.bremse_zieldruck_HA_L) - sqrt 20000000 / (S.L.bremse_A_BrVentil_HA_L)

'		Berechnung des Massenstroms aus Bremszylinder HA ins Freie

		(L.L.bremse_p_Brzyl_HA_L) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_brzyl_HA_L) s3
		1 s4

'		Ventilwahl abhängig von der Stellung des Wechselventils
		(L.L.bremse_wechselventil_HA)
		{if}
			(L.L.bremse_A_BrVentil_HA_L) 2 * s5
		{else}
			(L.L.bremse_A_BrVentil_HA_L) s5
		{endif}

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Brzyl_HA_L) 
		
	{endif}

'	Bildung des Mittelwertes für weitere Berechnungen
	(L.L.bremse_p_Brzyl_HA_R) (L.L.bremse_p_Brzyl_HA_L) + 2 / (S.L.bremse_p_Brzyl_HA) 

'	b1) Vorderachse rechts
'	Ist geforderter Bremsdruck höher als der aktuelle?

	(L.L.bremse_zieldruck_VA_R) (L.L.bremse_p_brzyl_VA_R) >
	{if}
		(L.L.bremse_zieldruck_VA_R) (L.L.bremse_p_brzyl_VA_R) - 20000000000 / (S.L.bremse_A_BrVentil_VA_R)

'		Berechnung des Massenstroms aus Behälter 2 zum Bremszylinder VA

		(L.L.bremse_p_Tank02) s1
		(L.L.bremse_p_Brzyl_VA_R) s2
		(C.L.bremse_V_tank02) s3
		(C.L.bremse_V_Brzyl_VA_R) s4
		(L.L.bremse_A_BrVentil_VA_R) s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Tank02) 
		l2 (S.L.bremse_p_Brzyl_VA_R) 

	{else}
		(L.L.bremse_p_brzyl_VA_R) (L.L.bremse_zieldruck_VA_R) - sqrt 20000000 / (S.L.bremse_A_BrVentil_VA_R)

'		Berechnung des Massenstroms aus Bremszylinder VA ins Freie
	
		(L.L.bremse_p_Brzyl_VA_R) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_brzyl_VA_R) s3
		1000000 s4
		(L.L.bremse_A_BrVentil_VA_R) s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Brzyl_VA_R) 
		
	{endif}

'	b2) Vorderachse links
'	Ist geforderter Bremsdruck höher als der aktuelle?

	(L.L.bremse_zieldruck_VA_L) (L.L.bremse_p_brzyl_VA_L) >
	{if}
		(L.L.bremse_zieldruck_VA_L) (L.L.bremse_p_brzyl_VA_L) - 20000000000 / (S.L.bremse_A_BrVentil_VA_L)

'		Berechnung des Massenstroms aus Behälter 2 zum Bremszylinder VA

		(L.L.bremse_p_Tank02) s1
		(L.L.bremse_p_Brzyl_VA_L) s2
		(C.L.bremse_V_tank02) s3
		(C.L.bremse_V_Brzyl_VA_L) s4
		(L.L.bremse_A_BrVentil_VA_L) s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Tank02) 
		l2 (S.L.bremse_p_Brzyl_VA_L) 

	{else}
		(L.L.bremse_p_brzyl_VA_L) (L.L.bremse_zieldruck_VA_L) - sqrt 20000000 / (S.L.bremse_A_BrVentil_VA_L)

'		Berechnung des Massenstroms aus Bremszylinder VA ins Freie
	
		(L.L.bremse_p_Brzyl_VA_L) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_brzyl_VA_L) s3
		1000000 s4
		(L.L.bremse_A_BrVentil_VA_L) s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Brzyl_VA_L) 
		
	{endif}

'	Bildung des Mittelwertes für weitere Berechnungen
	(L.L.bremse_p_Brzyl_VA_R) (L.L.bremse_p_Brzyl_VA_L) + 2 / (S.L.bremse_p_Brzyl_VA) 

'	c) Federspeicherbremse
'	Ist geforderter Lösedruck höher als der aktuelle?

	(L.L.bremse_zieldruck_FBA) (L.L.bremse_p_brzyl_FBA) >
	{if}
		(L.L.bremse_zieldruck_FBA) (L.L.bremse_p_brzyl_FBA) - 10000000000 / (S.L.bremse_A_BrVentil_FBA)

'		Berechnung des Massenstroms aus Behälter 2 zum Bremszylinder FBA

		(L.L.bremse_p_Tank03) s1
		(L.L.bremse_p_Brzyl_FBA) s2
		(C.L.bremse_V_tank03) s3
		(C.L.bremse_V_Brzyl_FBA) s4
		(L.L.bremse_A_BrVentil_FBA) s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Tank03) 
		l2 (S.L.bremse_p_Brzyl_FBA) 

	{else}
		(L.L.bremse_p_brzyl_FBA) (L.L.bremse_zieldruck_FBA) - sqrt 10000000 / (S.L.bremse_A_BrVentil_FBA)

'		Berechnung des Massenstroms aus Bremszylinder FBA ins Freie
	
		(L.L.bremse_p_Brzyl_FBA) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_brzyl_FBA) s3
		1000000 s4
		(L.L.bremse_A_BrVentil_FBA) s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_Brzyl_FBA) 
		
	{endif}






'	Überströmventile im Vierkreisschutzventil:


	(L.L.bremse_p_Tank01) (C.L.bremse_UeVentil_1_schliessdruck) < (L.L.bremse_UeVentil_1) &&
	{if}
		0 (S.L.bremse_UeVentil_1)
	{endif}
	(L.L.bremse_p_leitung01) (C.L.bremse_UeVentil_1_oeffnungsdruck) > 
	{if}
		1 (S.L.bremse_UeVentil_1)
	{endif}


	(L.L.bremse_p_Tank02) (C.L.bremse_UeVentil_2_schliessdruck) < (L.L.bremse_UeVentil_2) &&
	{if}
		0 (S.L.bremse_UeVentil_2)
	{endif}	
	(L.L.bremse_p_leitung01) (C.L.bremse_UeVentil_2_oeffnungsdruck) > 
	{if}
		1 (S.L.bremse_UeVentil_2)
	{endif}




'	Ein- und Abschaltdrücke des Druckreglers:

	(L.L.bremse_p_leitung01) 950000 > (L.L.bremse_kompressor) 1 = &&
	{if}
		(T.L.ev_kompressor_aus)
		0 (S.L.bremse_kompressor)
	{endif}

	(L.L.bremse_p_leitung01) 800000 <  (L.L.bremse_kompressor) 0 = &&
	{if}
		(T.L.ev_kompressor_ein)
		1 (S.L.bremse_kompressor)
	{endif}


	
{end}



{macro:bremse_levelcontrol}

'	Federweg Neutralposition: -0.105

'Vorne rechts

	(C.L.bremse_level_setpoint) (L.L.Axle_Suspension_0_R) >
	{if}
'		Rückschlagventil der Luftfederung:
		(L.L.bremse_p_Tank04) (L.L.bremse_p_balg_0_R) >
		{if}
'			Berechnung des Massenstroms aus Behälter 4 zum Federbalg 0 R

			(L.L.bremse_p_Tank04) s1
			(L.L.bremse_p_balg_0_R) s2
			(C.L.bremse_V_tank04) s3
			(C.L.bremse_V_balg_0_R) s4
			(L.L.Axle_Suspension_0_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

			(M.L.bremse_druckausgleich)

			l1 (S.L.bremse_p_Tank04) 
			l2 (S.L.bremse_p_balg_0_R) 460000 / 0.5 max (S.L.Axle_Springfactor_0_R)
		{endif}
	{else}
'		Berechnung des Massenstroms aus Federbalg 0 R ins Freie

		(L.L.bremse_p_balg_0_R) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_balg_0_R) s3
		1000000 s4
		(L.L.Axle_Suspension_0_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_balg_0_R) 460000 / 0.5 max (S.L.Axle_Springfactor_0_R)
	{endif}

'Vorne links

	(C.L.bremse_level_setpoint) (L.L.Axle_Suspension_0_L) >
	{if}	
'		Rückschlagventil der Luftfederung:
		(L.L.bremse_p_Tank04) (L.L.bremse_p_balg_0_L) >
		{if}	
'			Berechnung des Massenstroms aus Behälter 4 zum Federbalg 0 L

			(L.L.bremse_p_Tank04) s1
			(L.L.bremse_p_balg_0_L) s2
			(C.L.bremse_V_tank04) s3
			(C.L.bremse_V_balg_0_L) s4
			(L.L.Axle_Suspension_0_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

			(M.L.bremse_druckausgleich)

			l1 (S.L.bremse_p_Tank04) 
			l2 (S.L.bremse_p_balg_0_L) 460000 / 0.5 max (S.L.Axle_Springfactor_0_L)
		{endif}
	{else}
'		Berechnung des Massenstroms aus Federbalg 0 L ins Freie

		(L.L.bremse_p_balg_0_L) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_balg_0_L) s3
		1000000 s4
		(L.L.Axle_Suspension_0_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_balg_0_L) 460000 / 0.5 max (S.L.Axle_Springfactor_0_L)
	{endif}


'Hinten rechts

	(C.L.bremse_level_setpoint) (L.L.Axle_Suspension_1_R) >
	{if}
'		Rückschlagventil der Luftfederung:
		(L.L.bremse_p_Tank04) (L.L.bremse_p_balg_1_R) >
		{if}
'			Berechnung des Massenstroms aus Behälter 4 zum Federbalg 1 R

			(L.L.bremse_p_Tank04) s1
			(L.L.bremse_p_balg_1_R) s2
			(C.L.bremse_V_tank04) s3
			(C.L.bremse_V_balg_1_R) s4
			(L.L.Axle_Suspension_1_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

			(M.L.bremse_druckausgleich)

			l1 (S.L.bremse_p_Tank04) 
			l2 (S.L.bremse_p_balg_1_R) 460000 / 0.5 max (S.L.Axle_Springfactor_1_R)
		{endif}
	{else}
'		Berechnung des Massenstroms aus Federbalg 0 R ins Freie

		(L.L.bremse_p_balg_1_R) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_balg_1_R) s3
		1000000 s4
		(L.L.Axle_Suspension_1_R) (C.L.bremse_level_setpoint) - 70000 / abs s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_balg_1_R) 460000 / 0.5 max (S.L.Axle_Springfactor_1_R)
	{endif}

'Vorne links

	(C.L.bremse_level_setpoint) (L.L.Axle_Suspension_1_L) >
	{if}	
'		Rückschlagventil der Luftfederung:
		(L.L.bremse_p_Tank04) (L.L.bremse_p_balg_1_L) >
		{if}	
'			Berechnung des Massenstroms aus Behälter 4 zum Federbalg 1 L

			(L.L.bremse_p_Tank04) s1
			(L.L.bremse_p_balg_1_L) s2
			(C.L.bremse_V_tank04) s3
			(C.L.bremse_V_balg_1_L) s4
			(L.L.Axle_Suspension_1_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

			(M.L.bremse_druckausgleich)

			l1 (S.L.bremse_p_Tank04) 
			l2 (S.L.bremse_p_balg_1_L) 460000 / 0.5 max (S.L.Axle_Springfactor_1_L)
		{endif}
	{else}
'		Berechnung des Massenstroms aus Federbalg 0 L ins Freie

		(L.L.bremse_p_balg_1_L) s1
		(L.L.bremse_p_luft) s2
		(C.L.bremse_V_balg_1_L) s3
		1000000 s4
		(L.L.Axle_Suspension_1_L) (C.L.bremse_level_setpoint) - 70000 / abs s5

		(M.L.bremse_druckausgleich)

		l1 (S.L.bremse_p_balg_1_L) 460000 / 0.5 max (S.L.Axle_Springfactor_1_L)
	{endif}

'##################TESTKRAM####################################

'	(L.L.cockpit_hupe)
'	{if}
'		100000 (S.L.bremse_p_balg_0_R) (S.L.bremse_p_balg_0_L) (S.L.bremse_p_balg_1_R) (S.L.bremse_p_balg_1_L)
'	{endif}
'
'	(L.L.Axle_Springfactor_0_R) 10.97 * (S.L.gesamtmasse)

'##################/TESTKRAM####################################


{end}


{macro:bremse_druckausgleich}
	
'	l1	Druck im Behälter 1
'	l2	Druck im Behälter 2
'	l3	Volumen Behälter 1
'	l4	Volumen Behälter 2
'	l5	Querschnittsfläche Verbindungsleitung
'...
'	l6	temporäre Variable, die die maximale Zeitkonstante enthält

	l1 l2 + 2 / l1 l2 - s0 * (C.L.RT_Luft) / abs sqrt l0 sgn * l5 * (C.L.RT_Luft) * s0

	l1 l2 - 1 l3 / 1 l4 / + l0 * / s6

	(L.S.Timegap) l6 min   l0     * l4 / l2 + s2
	(L.S.Timegap) l6 min   l0 /-/ * l3 / l1 + s1
{end}

{macro:bremse_druckluftsound}

'	Setzen der Druckdifferenz zur entsprechenden Sounduntermalung:

	(L.L.bremse_zieldruck_VA) (L.L.bremse_p_brzyl_VA) - s1
	(L.L.bremse_wechselventil_HA) !
	{if}
		(L.L.bremse_zieldruck_HA) (L.L.bremse_p_brzyl_HA) - s2
	{else}
		0 s2
	{endif}
	l1 l2 min (S.L.bremse_zieldruckdifferenz)


	(L.L.bremse_p_brzyl_VA) (L.L.bremse_last_p_Brzyl) max s1
	(L.L.bremse_wechselventil_HA) !
	{if}
		(L.L.bremse_p_brzyl_HA) (L.L.bremse_last_p_brzyl) max s2
	{else}
		0 s2
	{endif}
	l1 l2 max (S.L.bremse_last_p_Brzyl)




	(L.L.bremse_zieldruckdifferenz) -40000 <
	{if}
		(L.L.bremse_loesezischbereitschaft) (L.L.bremse_loesezischzeit) 0.6 > &&
		{if}
			(L.L.bremse_last_p_Brzyl) (S.L.bremse_zischvolume)
			(T.L.ev_loesezischen)
			0 (S.L.bremse_loesezischzeit)
		{endif}
		0 (S.L.bremse_loesezischbereitschaft)
	{else}
		(L.L.bremse_loesezischbereitschaft) !
		{if}
			1 (S.L.bremse_loesezischbereitschaft)
			(L.L.bremse_p_brzyl_VA) s1
			(L.L.bremse_wechselventil_HA) !
			{if}
				(L.L.bremse_p_brzyl_HA) s2
			{endif}
				l1 l2 max (S.L.bremse_last_p_Brzyl)
		{endif}
'		Inkrementierung der vergangenen Zeit seit letztem Lösezischen:
		(L.L.bremse_loesezischzeit) (L.S.Timegap) + (S.L.bremse_loesezischzeit)
	{endif}


	(L.L.bremse_zieldruckdifferenz) 100000 >
	{if}
		(L.L.bremse_bremszischbereitschaft)
		{if}
			(T.L.ev_bremszischen)
		{endif}
		0 (S.L.bremse_bremszischbereitschaft)
	{else}
		1 (S.L.bremse_bremszischbereitschaft)
	{endif}


'	Bremshupen Hinterachse
'	Bestimmen der Gesamtlautstärke je nach Wagennummer:
	(L.L.bremse_quietsch_volume) -1.5 <
	{if}
		(L.$.number) $StrToFloat 1000 * sin (S.L.bremse_quietsch_volume)
	{endif}

'	Triggern des Sounds jach Radumdrehung:
	(L.L.Wheel_Rotation_1_R) 6.28318 / (L.L.Wheel_Rotation_1_R) 6.28318 / trunc - 0.5 > 
	{if}
		(L.L.bremse_hupsound) !
		{if}	
			(T.L.ev_bremse_hup)
			1 (S.L.bremse_hupsound)
		{endif}
	{else}
		0 (S.L.bremse_hupsound)
	{endif}


{end}