'############## 'Engine Script '############## '(c) 23.03.2009 Rüdiger Hülsmann '(c) 09.08.2009 Marcel Kuhnt ' 2011-2013 edited for Hamburg bus by Darius Bode 'Script Version: 1.0 'Omsi release: 1.0 'Needs: '- Antrieb '- Heizung 'Revision History: '- Marcel Kuhnt 09.08.2009 Added Engine Failure '- Marcel Kuhnt 10.08.2009 Added Revision History '- Rüdiger Hülsmann 12.10.2009 Added possibility of idle speed control '- Rüdiger Hülsmann 11.05.2010 Added "E-Gas" function (throttle override by stop brake) '- Rüdiger Hülsmann 13.05.2010 Added engine temperature and cooling system '- Rüdiger Hülsmann 08.07.2010 Bugfix E-Gas '- Rüdiger Hülsmann 06.11.2010 Improved engine start and stop procedure '- Marcel Kuhnt 09.11.2010 refueling included '- Rüdiger Hülsmann 21.11.2010 thermostat short circuit '- Rüdiger Hülsmann 22.11.2010 engine coolable by fan heaters '- Rüdiger Hülsmann 24.12.2010 optional ASR (traction control) '- Rüdiger Hülsmann 29.12.2010 ASR debugged '- Rüdiger Hülsmann 01.01.2011 ASR debugged again '- Rüdiger Hülsmann 05.01.2011 20h-switch E-Gas '- Marcel Kuhnt 07.01.2011 writing tank_percent variable '- Rüdiger Hülsmann 10.01.2011 Internal throttle set to 0 during shutdown '- Rüdiger Hülsmann 23.01.2011 ASR relais sound '------------------------------------------------------------------------------------------ '---------------------- ' Trigger '---------------------- {trigger:veh_tank} (L.L.engine_tank_content) (L.S.Timegap) 3 * + 265 min (S.L.engine_tank_content) {end} {macro:engine_init} 65 200 random + (S.L.engine_tank_content) 1 3 random + 6 / (S.L.engine_ignitiondelay_random) (L.S.Time) 2 % 0.5 > (L.S.Day) 2 % 0.5 < && 0 4 random + 3 = && {if} 0 3600 random + (S.L.antrieb_EMR_failuretime) {endif} (L.S.Weather_Temperature) (S.L.engine_temperature) (S.L.engine_temperature_envir) 3 (S.L.engine_ignition) {end} {macro:engine_frame} (M.L.engine_acceleration) (M.L.engine_moment) 'EMR-Notlauf (L.L.cp_notloese_EMR) (L.L.Brake) 0.05 < && {if} 0.7 (S.L.engine_internal_throttle) {endif} (L.L.cp_notloese_EMR) (L.L.Brake) 0.05 > (L.L.cockpit_gang_sw) 0 = || && (L.L.antrieb_EMR_failure) (L.L.cp_notloese_EMR) ! && || {if} 0 (S.L.engine_internal_throttle) {endif} 'EMR-Ausfall zufaellig, bei Misshandlung und nach Kollisionsschaden (L.L.engine_temperature) 109 > (L.L.globaltimer) (L.L.antrieb_EMR_failuretime) > (L.L.antrieb_EMR_failuretime) 0 > && || {if} 1 (S.L.antrieb_EMR_failure) {else} 0 (S.L.antrieb_EMR_failure) {endif} 'Ignition delay based on temperature and additional random factor (L.L.engine_temperature) (F.L.engine_startspeed) (L.L.engine_ignitiondelay_random) + (S.L.engine_ignitionspeed) (L.L.engine_on) (L.L.engine_ignition) 1 = ! || {if} 0 (S.L.engine_ignitiontime_calc) {else} (L.L.globaltimer) (L.L.engine_ignitiontime) - (S.L.engine_ignitiontime_calc) {endif} (L.L.engine_ignition) 1 = {if} 1 (S.L.engine_ignitionsound) {endif} (L.L.engine_ignitionsound) 0 > (L.L.engine_on) && (L.L.engine_ignition) 1 = ! && {if} (L.L.engine_ignitionsound) (L.S.Timegap) 1.5 * - (S.L.engine_ignitionsound) {endif} (L.L.engine_ignition) 1 > {if} 0 (S.L.engine_ignitionsound) {endif} 'Infamous random ignition failure when bus is waiting while power switched on (L.L.elec_V_battery) 0.95 < (L.L.elec_busbar_main_sw) && (L.L.engine_ignition) 3 = && (L.L.cockpit_engineshutdowntime) 2 % 0.5 > && (L.S.Day) 2 % 0.5 > && {if} 1 (S.L.engine_ign_failure) {else} 0 (S.L.engine_ign_failure) {endif} 'Sound for bass sound (L.L.engine_n) (F.L.engine_bass_sound) (S.L.engine_bass_sound) 'Ignition control (0 running, 1 start, 2 shut down, 3 off) (L.L.engine_ignition) 1 = (L.L.elec_busbar_avail) && {if} (L.L.globaltimer) (L.L.engine_ignitiontime) (L.L.engine_ignitionspeed) + > {if} (L.L.globaltimer) (S.L.engine_starttime) 1 (S.L.engine_on) (S.L.engine_injection_on) 600 (S.L.engine_n) 0 (S.L.engine_ignition) 2 (S.L.cockpit_relaissound) {else} 300 (S.L.engine_n) {endif} {endif} (L.L.engine_ignition) 2 = {if} 0 (S.L.engine_injection_on) 1 (S.L.bremse_ABS_selftest) (L.L.globaltimer) (S.L.cockpit_engineshutdowntime) 3 (S.L.engine_ignition) (S.L.cockpit_relaissound) {endif} (L.L.engine_last_n) 100 >= (L.L.engine_n) 100 < && {if} (M.L.engine_stall) 0 (S.L.engine_on) 1 (S.L.lights_stromspar) {endif} (L.L.engine_n) (S.L.engine_last_n) (L.L.engine_n) 100 < (L.L.engine_injection_on) ! && {if} 0 (S.L.engine_n) {endif} (L.L.bremse_kompressor) (L.L.engine_on) && {if} 10 (S.L.engine_M_additional_load) {else} 0 (S.L.engine_M_additional_load) {endif} (M.L.engine_temperature) (M.L.engine_consumption) (L.L.cp_notloese_EMR) ! (L.L.antrieb_EMR_failure) ! && {if} (L.L.throttle) (S.L.engine_internal_throttle) {endif} ' Debug falls Motor abwuergt (L.L.engine_n) 100 < (L.L.engine_failure_general) || (L.L.engine_ignition) 1 < && {if} 0 (S.L.engine_injection_on) (S.L.engine_on) 1 (S.L.bremse_ABS_selftest) (L.L.globaltimer) (S.L.cockpit_engineshutdowntime) 3 (S.L.engine_ignition) (S.L.cockpit_relaissound) (M.L.engine_stall) {endif} ' Geschwindigkeitsbegrenzer und E-Gas (L.L.Velocity) (C.L.egb_vmax) > (L.L.elec_busbar_main_sw) && (L.L.antrieb_drehzahl) 2 < && (L.L.engine_injection_on) ! || (L.L.knickschutz_aktiv) (L.L.antrieb_getr_gangwahl) 0 = && || (L.L.bremse_halte) 1 = || {if} 0 (S.L.engine_internal_throttle) {else} (L.L.cp_notloese_EMR) ! (L.L.antrieb_EMR_failure) ! && {if} (L.L.throttle) (S.L.engine_internal_throttle) {endif} {endif} 'MCQ: calculating tank content percent and write into pre defined variable for publishing on red line: (L.L.engine_tank_content) 265 / (S.L.tank_percent) ' Motormanagement durch ASR-Eingriff, sofern vorhanden (C.L.engine_ASR) (L.L.engine_injection_on) && {if} (L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / abs (L.L.Wheel_RotationSpeed_0_L) (L.L.Wheel_RotationSpeed_0_R) + 2 / 10 + abs > (L.L.Wheel_RotationSpeed_1_L) 1 > && (L.L.Wheel_RotationSpeed_1_R) 1 > && (L.L.engine_internal_throttle) 0 > && {if} (L.L.engine_ASR_eingriff) ! {if} (T.L.ev_bremse_ABS_on) {endif} 1 (S.L.engine_ASR_eingriff) {endif} (L.L.Wheel_RotationSpeed_1_L) (L.L.Wheel_RotationSpeed_1_R) + 2 / abs (L.L.Wheel_RotationSpeed_0_L) (L.L.Wheel_RotationSpeed_0_R) + 2 / 8 + abs < {if} (L.L.engine_ASR_eingriff) {if} (T.L.ev_bremse_ABS_off) {endif} 0 (S.L.engine_ASR_eingriff) {endif} (L.L.engine_ASR_eingriff) {if} 0 (S.L.engine_internal_throttle) {endif} (L.L.cp_asroffsw_targeton) (L.L.Velocity) 15 < && {if} 0 (S.L.engine_ASR_eingriff) {endif} {endif} (M.L.engine_speedcontrol) {end} {macro:engine_moment} ' Reaktionszeit der Einspritzpumpe (L.L.engine_internal_throttle) (L.L.engine_throttle_injection) > {if} (L.L.engine_throttle_injection) (L.S.Timegap) 2 * + (L.L.engine_internal_throttle) min (S.L.engine_throttle_injection) {else} (L.L.engine_throttle_injection) (L.S.Timegap) 2 * - (L.L.engine_internal_throttle) max (S.L.engine_throttle_injection) {endif} (L.L.engine_injection_on) (L.L.engine_on) && {if} (L.L.engine_throttle_injection) s1 (L.L.engine_n) s0 (F.L.engine_M_maxThrottle) * 1 l1 - l0 (F.L.engine_M_minThrottle) * + (L.L.engine_M_restriction) * (S.L.engine_M) {else} (L.L.engine_n) 1 > {if} (C.L.engine_coldM) (S.L.engine_M) {else} 0 (S.L.engine_M) {endif} {endif} {end} {macro:engine_acceleration} ' Berechnung der Drehzahlbeschleunigung: (L.L.engine_M) (L.L.antrieb_getr_M_an) (L.L.engine_M_additional_load) + - (C.L.engine_J) / ' ... Berechnung der Motordrehzahl anhand der Drehzahlbeschleunigung: (L.S.Timegap) * 30 * pi / (L.L.engine_n) + (S.L.engine_n) {end} {macro:engine_consumption} ' =2*PI/60 (L.L.engine_M) 0 max (L.L.engine_n) * 0.10472 * s0 (L.L.engine_on) {if} l0 (C.L.engine_power_idle) + (S.L.engine_power) {else} l0 (S.L.engine_power) {endif} (L.L.engine_energytransfer) (L.L.engine_power) (L.S.Timegap) * 1000 / 3600 / + (S.L.engine_energytransfer) (L.L.engine_energy_used) (L.L.engine_power) (L.S.Timegap) * 1000 / 3600 / (L.L.engine_n) (F.L.engine_efficiency_rpm) (L.L.engine_throttle_injection) (F.L.engine_efficiency_throttle) / / s0 + (S.L.engine_energy_used) (L.L.engine_fuel_used) l0 (C.L.engine_fuel_value) / s1 + (S.L.engine_fuel_used) l1 (L.S.Timegap) / 3600 * (S.L.engine_consumption_h) (L.L.engine_tank_content) l1 - 0 max (S.L.engine_tank_content) 0 <= (L.L.engine_failure_general) || {if} 0 (S.L.engine_on) 1 (S.L.lights_stromspar) {endif} {end} {macro:engine_stall} (T.L.ev_engineshutdown) 0 (S.L.engine_on) 1 (S.L.lights_stromspar) {end} {macro:engine_speedcontrol} (L.L.engine_n) 400 > {if} (L.L.engine_n) (C.L.engine_governed_idle_RPM) < {if} (L.L.engine_additional_throttle) (L.S.Timegap) 1 * + 1 min (S.L.engine_additional_throttle) {else} (L.L.engine_additional_throttle) (L.S.Timegap) 2 * - 0 max (S.L.engine_additional_throttle) {endif} (L.L.engine_internal_throttle) (L.L.engine_additional_throttle) + 1 min 0 max (S.L.engine_internal_throttle) {else} 0 (S.L.engine_additional_throttle) {endif} 'Geschwindigkeitsbegrenzer (L.L.velocity) 82 > {if} (L.L.velocity) (F.L.max_speed) (L.L.throttle) * (S.L.engine_internal_throttle) {endif} {end} {macro:engine_temperature} (L.L.engine_power) (C.L.engine_Qrate_engine_factor) * (S.L.engine_Qrate_engine) (L.L.elec_busbar_main) (L.L.engine_on) && {if} (L.L.engine_temperature) (C.L.luefterthermostat_opn) > {if} 1 (S.L.engine_luefter) {else} (L.L.engine_temperature) (C.L.luefterthermostat_cls) < {if} 0 (S.L.engine_luefter) {endif} {endif} {else} 0 (S.L.engine_luefter) {endif} (L.L.engine_temperature) (C.L.kuehlerthermostat_opn) > {if} 1 (S.L.engine_thermostat_open) {else} (L.L.engine_temperature) (C.L.kuehlerthermostat_cls) < {if} 0 (S.L.engine_thermostat_open) {endif} {endif} ' -------------------------------------------------- ' Berechnung der Raten: (L.L.engine_temperature) (L.L.engine_temperature_envir) - (C.L.engine_Qrate_cooling_factor) * (S.L.engine_Qrate_cooling) (L.L.engine_temperature_envir) (L.S.Weather_Temperature) - (C.L.engine_Qrate_Veloc_factor_basic) (C.L.engine_Qrate_veloc_factor) (L.L.velocity) abs * + * (S.L.engine_Qrate_veloc) (L.L.engine_temperature) (L.S.Weather_Temperature) - (C.L.engine_Qrate_fan_factor) * (L.L.engine_n) * (S.L.engine_Qrate_fan) (L.L.engine_thermostat_open) {if} (L.L.engine_luefter) ! {if} ' Reduktion der Kühlwirkung durch nur leer mitdrehenden Lüfter (L.L.engine_Qrate_fan) 0.4 * (S.L.engine_Qrate_fan) {endif} {else} ' Nullwirkung des Lüfters durch Kühlwasserkurzschluss 0 (S.L.engine_Qrate_fan) {endif} ' -------------------------------------------------- ' Berechnung der Temperaturveränderungen: (L.L.engine_Qrate_engine) (L.L.engine_Qrate_cooling) - (L.L.engine_Qrate_fan) - (L.L.cabinair_Qrate_engine_fanheatcooling) - (C.L.engine_cvm_engine) / (L.S.Timegap) * (L.L.engine_temperature) + (S.L.engine_temperature) (L.L.engine_Qrate_cooling) (L.L.engine_Qrate_veloc) - (C.L.engine_cvm_envir) / (L.S.Timegap) * (L.L.engine_temperature_envir) + (S.L.engine_temperature_envir) '-------------------------------------------------- ' Kochendes Kühlwasser (L.L.engine_temperature) (F.L.kuehlwassersmoke) (S.L.engine_kuehlwasser_freq) {end}