private void Timer_Tick(object sender, EventArgs e)
        {
            if (this.maquinas.Count > 0 && this.operario != null)
            {
                Turno    turno  = HorarioTurnos.CalcularTurnoAFecha(DateTime.Now);
                DateTime inicio = DateTime.Now;
                DateTime fin    = DateTime.Now;
                HorarioTurnos.CalcularHorarioTurno(turno, DateTime.Now, out inicio, out fin);
                int      maxPulsos  = 0;
                Maquinas maxMaquina = null;
                foreach (var maquina in this.maquinas)
                {
                    int cont = maquina.Pulsos.Where(x => x.IdOperario == operario.Id &&
                                                    (inicio <= x.FechaLocal && x.FechaLocal <= fin)).Count();
                    if (cont > maxPulsos)

                    {
                        maxPulsos  = cont;
                        maxMaquina = maquina;
                    }
                }

                Vueltas = maxPulsos;
            }
            else
            {
                Vueltas = 0;
            }
            Notifica("Vueltas");
        }
        public PrensaGenericaControl(Maquinas maquina, Operarios op)
        {
            InitializeComponent();
            this.DataContext            = this;
            this.Maquina                = maquina;
            this.Maquina.OperarioACargo = op;
            this.MinHeight              = 30;
            Grid.SetRow(this, (int)maquina.Top);
            Grid.SetColumn(this, (int)maquina.Left);
            Maquina.OnParesConsumidos          += Maquina_OnParesConsumidos;
            Maquina.OnInfoEjecucionActualizada += Maquina_OnInfoEjecucionActualizada;
            Maquina.OnModoCambiado             += Maquina_OnModoCambiado;
            Maquina.OnFichajeMaquina           += Maquina_OnFichajeMaquina;
            this.PreviewMouseUp += PrensaLayout_PreviewMouseUp;

            this.timerCalentamiento          = new DispatcherTimer();
            this.timerCalentamiento.Interval = new TimeSpan(0, 0, 0, 0, 400);
            this.timerCalentamiento.Tick    += TimerCalentamiento_Tick;;
            this.timerInactividad            = new DispatcherTimer();
            this.timerInactividad.Interval   = new TimeSpan(0, 10, 0);
            this.timerInactividad.Tick      += TimerInactividad_Tick;
            this.timerLimiteCaja             = new DispatcherTimer();
            this.timerLimiteCaja.Interval    = new TimeSpan(0, 0, 30);
            this.timerLimiteCaja.Tick       += TimerLimiteCaja_Tick;

            this.timerLimiteCaja.Start();
            this.timerInactividad.Start();

            this.PreviewMouseDown += PrensaGenericaControl_PreviewMouseUp;


            try
            {
                BackgroundWorker            bwActualizarCola = new BackgroundWorker();
                List <MaquinasColasTrabajo> cola             = new List <MaquinasColasTrabajo>();
                Maquinas maquinaDb = null;
                List <MaquinasRegistrosDatos> paquetesHistorico = new List <MaquinasRegistrosDatos>();
                DateTime ahora = DateTime.Now;
                Turno    turno = HorarioTurnos.CalcularTurnoAFecha(ahora);
                DateTime fechaInicio;
                DateTime fechaFin;
                HorarioTurnos.CalcularHorarioTurno(turno, ahora, out fechaInicio, out fechaFin);

                maquina.Pulsos.Clear();

                bwActualizarCola.DoWork += (se, ev) =>
                {
                    maquinaDb         = daoPuesto.ObtenerMaquinaConColaTrabajo(maquina.ID);
                    paquetesHistorico = daoTarea.ObtenerHistoricoParesOperario(op.Id, maquina.IpAutomata, maquina.Posicion, fechaInicio, fechaFin);
                };
                bwActualizarCola.RunWorkerCompleted += (se, ev) =>
                {
                    cola = maquinaDb.MaquinasColasTrabajo.ToList();
                    this.Maquina.IpAutomata     = maquinaDb.IpAutomata;
                    this.Maquina.Posicion       = maquinaDb.Posicion;
                    this.Maquina.PosicionGlobal = maquinaDb.PosicionGlobal;

                    this.topicNormal                          = new Topic(string.Format("/{0}/plc/{1}/normal", maquina.Tipo, maquina.IpAutomata), (byte)2, this.Maquina.Nombre);
                    this.topicCalentar                        = new Topic(string.Format("/{0}/plc/{1}/calentar", maquina.Tipo, maquina.IpAutomata), (byte)1, this.Maquina.Nombre);
                    this.topicAsociarTarea                    = new Topic(string.Format("/{0}/plc/{1}/asociarTarea", maquina.Tipo, maquina.IpAutomata), (byte)1, this.Maquina.Nombre);
                    this.topicNormal.OnMensajeRecibido       += TopicNormal_OnMensajeRecibido;
                    this.topicCalentar.OnMensajeRecibido     += TopicCalentar_OnMensajeRecibido;
                    this.topicAsociarTarea.OnMensajeRecibido += TopicAsociarTarea_OnMensajeRecibido;

                    maquina.AsignarColaTrabajo(cola);

                    ClienteMqtt.Suscribir(this.topicNormal);
                    ClienteMqtt.Suscribir(this.topicCalentar);
                    ClienteMqtt.Suscribir(this.topicAsociarTarea);

                    foreach (var paquete in paquetesHistorico.Where(x => x.PiezaIntroducida))
                    {
                        Maquina.Pulsos.Add(new PulsoMaquina
                        {
                            CodigoEtiqueta = paquete.CodigoEtiqueta,
                            Control        = daoTarea.BuscarControlGuardado(paquete.IdOperacion, Maquina.IdTipo ?? 0),
                            Ciclo          = paquete.Ciclo,
                            Fecha          = paquete.FechaCreacion,
                            Pares          = paquete.Pares,
                            PosicionGlobal = Maquina.PosicionGlobal ?? 0,
                            IdOperario     = paquete.IdOperario,
                        });
                    }
                    Notifica("Maquina");
                    Loader.Visibility         = Visibility.Collapsed;
                    PanelPrincipal.Visibility = Visibility.Visible;
                };

                bwActualizarCola.RunWorkerAsync();
            }
            catch (Exception ex)
            {
                new Log().Escribir(ex);
            }
        }