示例#1
0
        /// <summary>
        /// Particiona el slot de backup utilizado en función del swap ejecutado.
        /// </summary>
        /// <param name="s">Swap ejecutado sobre el slot de backup en operación</param>
        private void DividirSlot(Swap s)
        {
            int tiempo_corte_swap;      //= s.Tramo_Ini_Emisor.TInicialRst + s.Minutos_Atraso_Reaccionario_Inicial;
            int tiempo_inicio_uso_swap; // = s.Tramo_Ini_Emisor.TFinProgMasTATramoPrevio;

            s.EstimarTiemposCorteBackup(out tiempo_corte_swap, out tiempo_inicio_uso_swap);
            SlotBackup slotUsado = BuscarSlot(s.TramoPreBackup.TInicialProg, s.TramoPostBackup.TFinalRst);

            if (slotUsado != null)
            {
                slotUsado.TipoUso      = TipoUsoBackup.Swap;
                slotUsado.TiempoIniUso = Math.Max(slotUsado.TiempoIniUso, Math.Min(slotUsado.TiempoFinPrg, tiempo_inicio_uso_swap));
                slotUsado.TiempoFinRst = Math.Min(Math.Max(tiempo_corte_swap, slotUsado.TiempoIniRst), slotUsado.TiempoFinPrg);
                tiempo_corte_swap      = slotUsado.TiempoFinRst;
                slotUsado.TiempoFinUso = slotUsado.TiempoFinRst;
                int tiempoFinNuevo = Math.Min(slotUsado.TiempoFinPrg, s.TiempoFinHolguraEnEmisor);
                if (tiempoFinNuevo - tiempo_corte_swap > 0)
                {
                    string matricula = null;
                    if (s.TipoUsoBackup == UsoBackup.FinEmisor)
                    {
                        matricula = s.IdAvionReceptor;
                    }
                    else
                    {
                        matricula = s.IdAvionEmisor;
                    }
                    SlotBackup nuevo_slot = new SlotBackup(this, tiempo_corte_swap, tiempoFinNuevo, Estacion, matricula);
                    _slots.Add(nuevo_slot);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Método para estimar el porcentaje de utilización de la matrícula inicial asignada a la unidad de backup, sin considerar útiles los T/A mínimos de los extremos.
        /// La utilización se estima como el porcentaje de minutos usados en la operación durante el tiempo programado para la unidad.
        /// </summary>
        /// <returns></returns>
        private double EstimarPorcentajeUtilizacionSlotMatriculaSinTA()
        {
            SlotBackup slotIni   = _slots[0];
            string     matricula = slotIni.Matricula;

            return(_estimar_utilizacion_slot(matricula, TiempoIniPrg, TiempoFinPrg, false) + ((slotIni.TipoUso == TipoUsoBackup.AOG) ? (0.0 + slotIni.TiempoFinUso - slotIni.TiempoIniUso) / (TiempoFinPrg - TiempoIniPrg + 0.0) : 0));
        }
示例#3
0
        /// <summary>
        /// Genera una copia de la unidad de backup
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            UnidadBackup bu = new UnidadBackup();

            bu._tramo_base = this._tramo_base;
            bu._slots      = new List <SlotBackup>();
            bu._swaps      = new Dictionary <string, Swap>();
            bu._t_fin_prg  = this._t_fin_prg;
            bu._t_fin_rst  = this._t_fin_prg;
            bu._t_ini_prg  = this._t_ini_prg;
            bu._t_ini_rst  = this._t_ini_prg;
            foreach (SlotBackup s in this._slots)
            {
                SlotBackup clonado = (SlotBackup)s.Clone();
                clonado.Contenedor = bu;
                bu._slots.Add(clonado);
            }
            return(bu);
        }
示例#4
0
        /// <summary>
        /// Constructor de una unidad de backup
        /// </summary>
        /// <param name="tramoBase">Objeto con la información del itinerario</param>
        /// <param name="fechaBase">Fecha inicial del itinerario</param>
        public UnidadBackup(TramoBase tramoBase, DateTime fechaBase)
        {
            this._tramo_base = tramoBase;
            int diasDesfaseSalida  = Convert.ToInt32((tramoBase.Fecha_Salida - fechaBase).TotalDays);
            int diasDesfaseLlegada = Convert.ToInt32((tramoBase.Fecha_Llegada - fechaBase).TotalDays);
            int horaSalidaNum      = Utilidades.ConvertirMinutosDesdeHoraString(tramoBase.Hora_Salida);
            int horaLlegadaNum     = Utilidades.ConvertirMinutosDesdeHoraString(tramoBase.Hora_Llegada);

            this._t_ini_prg = diasDesfaseSalida * 24 * 60 + horaSalidaNum;
            this._t_ini_rst = _t_ini_prg;
            this._t_fin_prg = diasDesfaseLlegada * 24 * 60 + horaLlegadaNum;
            this._t_fin_rst = _t_fin_prg;
            this._swaps     = new Dictionary <string, Swap>();
            this._slots     = new List <SlotBackup>();
            string matricula = tramoBase.Numero_Ac;
            string estacion  = tramoBase.Origen;
            //string key = tramoBase.Numero_Ac + "-" + _tiempo_ini_programado;
            SlotBackup slot_base = new SlotBackup(this, _t_ini_prg, _t_fin_prg, estacion, matricula);

            _slots.Add(slot_base);
        }
示例#5
0
        /// <summary>
        /// Genera una copia del slot
        /// </summary>
        /// <returns></returns>
        public object Clone()
        {
            SlotBackup s = new SlotBackup(null, this._t_ini_prg, this._t_fin_prg, this._estacion, this._matricula);

            return(s);
        }