SCRIPT GENERICO float ag_sig_senal_desv; float inhibir_PREA_en_APREC; float inhibir_PREA_en_APARA; float forzar_PREA_sig_PREA; float forzar_VLC_sig_VLC; float forzar_APARA_sig_APARA; float forzar_APREC_sig_APARA; float forzar_PARADA; float bloqueo_doscientos_VLC; float rebase_destellos; float reposo_aparada; float reposo_via_libre; float inhibir_VL_para_APREC; float inhibir_VL_para_VLC; float next_state_lib; float next_state; float info_ruta; float prev_state; float prev_state_prea; float APREC_RECON; float FALLO_SENAL; float marcador_via_desv; float cambioAspecto; float apagada; float estaApagada; float prev_state_sec; float vieneDeReposo; APREC_RECON = this_sig_lvar(1000); prev_state = state; prev_state_sec = state; if ( route_set() ) { store_lvar(100, 0); } else { store_lvar(100, 1); } marcador_via_desv = dist_multi_sig_mr_of_lr (SIGFN_M_V_DESV, SIGFN_NORMAL); if (marcador_via_desv ==# SIGASP_CLEAR_2) { store_lvar(100, 0); } ag_sig_senal_desv = next_sig_lvar(SIGFN_NORMAL, 100); inhibir_PREA_en_APREC = dist_multi_sig_mr_of_lr (SIGFN_I_PREA_SIG_APREC_A_VL, SIGFN_NORMAL); inhibir_PREA_en_APARA = dist_multi_sig_mr_of_lr (SIGFN_I_PREA_SIG_APARA_A_VL, SIGFN_NORMAL); forzar_PREA_sig_PREA = dist_multi_sig_mr_of_lr (SIGFN_F_PREA_SIG_PREA, SIGFN_NORMAL); forzar_VLC_sig_VLC = dist_multi_sig_mr_of_lr (SIGFN_F_VLC_SIG_VLC, SIGFN_NORMAL); forzar_APARA_sig_APARA = dist_multi_sig_mr_of_lr (SIGFN_F_APARA_SIG_APARA, SIGFN_NORMAL); forzar_APREC_sig_APARA = dist_multi_sig_mr_of_lr (SIGFN_F_APREC_SIG_APARA, SIGFN_NORMAL); forzar_PARADA = dist_multi_sig_mr_of_lr (SIGFN_F_PARADA, SIGFN_NORMAL); bloqueo_doscientos_VLC = dist_multi_sig_mr_of_lr (SIGFN_B_DOSCIENTOS, SIGFN_NORMAL); rebase_destellos = dist_multi_sig_mr_of_lr (SIGFN_R_DESTELLOS, SIGFN_NORMAL); reposo_aparada = hashead (1); reposo_via_libre = hashead (2); inhibir_VL_para_APREC = dist_multi_sig_mr_of_lr (SIGFN_I_VL_A_APREC, SIGFN_NORMAL); inhibir_VL_para_VLC = dist_multi_sig_mr_of_lr (SIGFN_I_VL_A_VLC, SIGFN_NORMAL); next_state_lib = dist_multi_sig_mr_of_lr (SIGFN_OLIBERACION, SIGFN_NORMAL); // STOP SI NO HAY next_state = next_sig_lr (SIGFN_NORMAL); info_ruta = dist_multi_sig_mr_of_lr (SIGFN_OPREANUNCIO, SIGFN_NORMAL); if (!enabled && block_state() ==# BLOCK_CLEAR) { store_lvar (700, 0); store_lvar (600, 1); if (reposo_aparada == 1) { state = SIGASP_APPROACH_1; } else if (reposo_via_libre == 1) { state = SIGASP_CLEAR_2; } else { state = SIGASP_STOP; } } else if (block_state() ==# BLOCK_JN_OBSTRUCTED) { state = SIGASP_STOP; } else if (TrainHasCallOn_Restricted()) { if (rebase_destellos ==# SIGASP_CLEAR_2) { state = SIGASP_RESTRICTING; } else { state = SIGASP_STOP_AND_PROCEED; } } else if (block_state() ==# BLOCK_OCCUPIED) { state = SIGASP_STOP; } else if (!route_set()) { prev_state_prea = state; if (forzar_PARADA ==# SIGASP_CLEAR_2) { state = SIGASP_STOP; } else if (next_state ==# SIGASP_STOP || next_state ==# SIGASP_STOP_AND_PROCEED || next_state ==# SIGASP_RESTRICTING) { state = SIGASP_APPROACH_1; } else if (next_state ==# SIGASP_APPROACH_1 && forzar_APARA_sig_APARA ==# SIGASP_CLEAR_2) { state = SIGASP_APPROACH_1; } else if (next_state ==# SIGASP_APPROACH_1 && forzar_APREC_sig_APARA ==# SIGASP_CLEAR_2 && APREC_RECON == 1) { state = SIGASP_APPROACH_2; } else if (ag_sig_senal_desv == 0 && APPROACH_CONTROL_SPEED(500, 0)) // si estamos parados se puede mostrar el aprec aunque vayamos a desviada { state = SIGASP_APPROACH_2; } else if (ag_sig_senal_desv == 0 && APREC_RECON == 1) { state = SIGASP_APPROACH_2; } else if (next_state ==# SIGASP_APPROACH_1 && info_ruta ==# SIGASP_APPROACH_1 && inhibir_PREA_en_APARA ==# SIGASP_STOP && APREC_RECON == 1) { state = SIGASP_APPROACH_3; } else if (next_state ==# SIGASP_APPROACH_2 && info_ruta ==# SIGASP_APPROACH_2 && inhibir_PREA_en_APREC ==# SIGASP_STOP && APREC_RECON == 1) { state = SIGASP_APPROACH_3; } else if (next_state ==# SIGASP_APPROACH_3 && info_ruta ==# SIGASP_STOP_AND_PROCEED && forzar_PREA_sig_PREA ==# SIGASP_CLEAR_2 && APREC_RECON == 1) { state = SIGASP_APPROACH_3; } else if (inhibir_VL_para_APREC ==# SIGASP_CLEAR_2 && APREC_RECON == 1) { state = SIGASP_APPROACH_2; } else { state = SIGASP_APPROACH_1; } if (prev_state_prea ==# SIGASP_APPROACH_3) { if (next_state ==# SIGASP_STOP || next_state ==# SIGASP_STOP_AND_PROCEED || next_state ==# SIGASP_RESTRICTING) { state = SIGASP_APPROACH_1; } else { state = SIGASP_APPROACH_3; } } } else { if (forzar_PARADA ==# SIGASP_CLEAR_2) { state = SIGASP_STOP; } else if (next_state ==# SIGASP_STOP || next_state ==# SIGASP_STOP_AND_PROCEED || next_state ==# SIGASP_RESTRICTING) { state = SIGASP_APPROACH_1; } else if (next_state ==# SIGASP_APPROACH_1 && forzar_APARA_sig_APARA ==# SIGASP_CLEAR_2) { state = SIGASP_APPROACH_1; } else if (ag_sig_senal_desv == 0) { state = SIGASP_APPROACH_2; } else if (next_state ==# SIGASP_APPROACH_1 && forzar_APREC_sig_APARA ==# SIGASP_CLEAR_2) { state = SIGASP_APPROACH_2; } else if (next_state ==# SIGASP_APPROACH_1 && info_ruta ==# SIGASP_APPROACH_1 && inhibir_PREA_en_APARA ==# SIGASP_STOP) { state = SIGASP_APPROACH_3; } else if (next_state ==# SIGASP_APPROACH_2 && info_ruta ==# SIGASP_APPROACH_2 && inhibir_PREA_en_APREC ==# SIGASP_STOP) { state = SIGASP_APPROACH_3; } else if (next_state ==# SIGASP_APPROACH_3 && info_ruta ==# SIGASP_STOP_AND_PROCEED && forzar_PREA_sig_PREA ==# SIGASP_CLEAR_2) { state = SIGASP_APPROACH_3; } else if (inhibir_VL_para_APREC ==# SIGASP_CLEAR_2) { state = SIGASP_APPROACH_2; } else if (inhibir_VL_para_VLC ==# SIGASP_CLEAR_2) { state = SIGASP_CLEAR_1; } else if (next_state ==# SIGASP_CLEAR_1 && forzar_VLC_sig_VLC ==# SIGASP_CLEAR_2) { state = SIGASP_CLEAR_1; } else if (bloqueo_doscientos_VLC ==# SIGASP_CLEAR_2) { if (next_state ==# SIGASP_APPROACH_1 || next_state ==# SIGASP_APPROACH_2 || next_state ==# SIGASP_APPROACH_3) { state = SIGASP_CLEAR_1; } else { state = SIGASP_CLEAR_2; } } else { state = SIGASP_CLEAR_2; } } if (next_state_lib ==# SIGASP_CLEAR_2) { if (next_state ==# SIGASP_STOP || next_state ==# SIGASP_STOP_AND_PROCEED || next_state ==# SIGASP_RESTRICTING) { state = SIGASP_STOP; } } if (state ==# SIGASP_APPROACH_2) { if (prev_state !=# state) { Activate_Timing_Trigger(); } if (Check_Timing_Trigger(10) && block_state() ==# BLOCK_CLEAR) { // Anuncio de precaucion reconocido next_sig_store_lvar(SIGFN_NORMAL, 1000, 1); } } if (next_state ==# SIGASP_STOP || next_state ==# SIGASP_STOP_AND_PROCEED || next_state ==# SIGASP_RESTRICTING) { next_sig_store_lvar(SIGFN_NORMAL, 1000, 0); } draw_state = def_draw_state (state);