private void AsignarTareaEjecucion(List <SP_BarquillaBuscarInformacionEnSeccion_Result> infoBarquillaSeccion, Maquinas maquina, string codigoEtiqueta) { if (infoBarquillaSeccion.Any()) { BusEventos.TareasCargando(); var idsOrden = infoBarquillaSeccion.Select(x => x.IdOrden); var idsOrdenDistinto = idsOrden.Distinct(); if (idsOrden.Count() != idsOrdenDistinto.Count()) { // multiOperacion BusEventos.TareasCargadas(); } else { var idsTareas = infoBarquillaSeccion.Select(x => x.IdTarea.Value).Distinct().ToList(); var control = BuscarControl(infoBarquillaSeccion.First().IdOperacion, maquina); // bd BackgroundWorker bwActualizarCola = new BackgroundWorker(); List <MaquinasColasTrabajo> cola = new List <MaquinasColasTrabajo>(); bwActualizarCola.DoWork += (se, ev) => { cola = Insert.ActualizarColaTrabajo(codigoEtiqueta, idsTareas, infoBarquillaSeccion.First().Agrupacion ?? 0, maquina.ID, Store.OperarioEjecucion.Id, infoBarquillaSeccion.Sum(x => x.Cantidad), infoBarquillaSeccion.First().Talla); }; bwActualizarCola.RunWorkerCompleted += (se, ev) => { maquina.AsignarColaTrabajo(cola); BusEventos.TareasCargadas(); }; bwActualizarCola.RunWorkerAsync(); // mqtt MqttAsociarBarquilla(infoBarquillaSeccion, maquina); } } }
private void TimerEventoFichaje_Tick(object sender, EventArgs e) { FichajeAsociacionEventArgs evento = null; try { if (colaEventosFichaje.Count == 0) { return; } evento = colaEventosFichaje.Dequeue(); if (evento != null) { //asociar Maquinas maquina = null; foreach (var pantalla in this.paginasModulos) { foreach (var m in pantalla.Maquinas) { if (m.CodigoEtiqueta == evento.CodigoMaquina) { maquina = m; break; } } } if (maquina != null) { var infoBarquillaSeccion = daoTarea.BuscarInformacionBarquilla(evento.CodigoBarquilla, maquina.CodSeccion); if (infoBarquillaSeccion.Any()) { // check por si hay fallo de barquilla duplicada var agrupacion = infoBarquillaSeccion.First().Agrupacion; var idOrden = infoBarquillaSeccion.First().IdOrden; var codigoBarquilla = infoBarquillaSeccion.First().CodigoEtiqueta; if (!infoBarquillaSeccion.All(x => x.Agrupacion == agrupacion && x.CodigoEtiqueta == codigoBarquilla)) { infoBarquillaSeccion.RemoveAll(x => x.Agrupacion != agrupacion || x.CodigoEtiqueta != codigoBarquilla); } // fin check var idsOrden = infoBarquillaSeccion.Select(x => x.IdOrden); var idsOrdenDistinto = idsOrden.Distinct(); if (idsOrden.Count() != idsOrdenDistinto.Count()) { // multiOperacion } else { var idsTareas = infoBarquillaSeccion.Select(x => x.IdTarea.Value).Distinct().ToList(); evento.Control = daoTarea.BuscarControlGuardado(infoBarquillaSeccion.First().IdOperacion, maquina.IdTipo ?? 0); // bd BackgroundWorker bwActualizarCola = new BackgroundWorker(); List <MaquinasColasTrabajo> cola = new List <MaquinasColasTrabajo>(); bwActualizarCola.DoWork += (se, ev) => { cola = daoPuesto.ActualizarColaTrabajo(evento.CodigoBarquilla, idsTareas, infoBarquillaSeccion.First().Agrupacion ?? 0, maquina.ID, maquina.OperarioACargo.Id, infoBarquillaSeccion.Sum(x => x.Cantidad)); Dictionary <int, int> idOrdenesOperaciones = new Dictionary <int, int>(); foreach (var info in infoBarquillaSeccion) { idOrdenesOperaciones.Add(info.IdOrden, info.IdOperacion); } daoBarquilla.Ubicar(idOrdenesOperaciones, maquina.CodSeccion, evento.CodigoBarquilla, maquina.CodUbicacion); }; bwActualizarCola.RunWorkerCompleted += (se, ev) => { maquina.AsignarColaTrabajo(cola); }; bwActualizarCola.RunWorkerAsync(); // mqtt MqttAsociarBarquilla(infoBarquillaSeccion, maquina); } } } } } catch (Exception ex) { //MessageBox.Show(ex.Message); colaEventosFichaje.Enqueue(evento); new Log().Escribir(ex); } }
private void Normal(string msg, string topicRecibido, Topic topic) { try { // recibo consumo ConsumoPrensa consumo = JsonConvert.DeserializeObject <ConsumoPrensa>(msg); if (consumo == null) { Log.Write(new Exception("Consumo recibido nulo " + msg)); return; } string tipoBancada = topicRecibido.Split('/')[topic.IndiceTipoBancada].Trim(); string ipPlc = topicRecibido.Split('/')[topic.IndiceIdTopic].Trim(); consumo.IpPlc = ipPlc; // busco la maquina Maquinas maquina = Store.Bancada.Maquinas.FirstOrDefault(x => x.IpAutomata == ipPlc && x.Posicion == consumo.Prensa); // si encuentro la maquina if (maquina != null) { // si la maquina no esta en modo normal if (maquina.Modo != ModoMaquina.Normal) { // la pongo en modo normal maquina.CambiarModo(ModoMaquina.Normal); } // si hay operario loggeado if (SesionManager.Sesion.Operario != null) { // pongo en marcha si no estaba la visibilidad del cuadrante de prima Dispatcher.Invoke(() => { this.primaActual.Visibility = Visibility.Visible; this.temporizador.Visibility = Visibility.Hidden; }); // reseteo el timer de actividad this.timerInactividad.Stop(); this.timerInactividad.Start(); // cargo informacion del consumo en la maquina por si acaso no estaba maquina.CargarInformacion(consumo); // añado el pulso a la maquina maquina.Pulsos.Add(new PulsoMaquina { CodigoEtiqueta = maquina.TrabajoEjecucion.CodigoEtiquetaFichada, // previamente busco el control en la tienda Control = BuscarControl(maquina.IdOperacion, maquina), Ciclo = consumo.SgCiclo, Fecha = consumo.HoraLocal, Pares = consumo.ParesUtillaje * consumo.NumMoldes, PosicionGlobal = maquina.PosicionGlobal ?? 0, IdOperario = SesionManager.Sesion.Operario.Id, }); // si lo hemos encontrado y ademas se introdujo una pieza if (maquina.TrabajoEjecucion != null) { if (consumo.PiezaIntroducida == 1) { // insertamos pieza bool insertados = maquina.InsertarPares(maquina.TrabajoEjecucion, consumo.NumMoldes * consumo.ParesUtillaje); } } else { //(background) recuperar cola y publicarla BackgroundWorker bw = new BackgroundWorker(); List <MaquinasColasTrabajo> colaTrabajo = new List <MaquinasColasTrabajo>(); bw.DoWork += (se, ev) => { colaTrabajo = SelectColaTrabajo.ObtenerColaTrabajoMaquinaPorId(maquina.ID); }; bw.RunWorkerCompleted += (se, ev) => { if (colaTrabajo.Count == 0) { ClienteMQTT.Publicar(string.Format("/moldeado/fallo/{0}", maquina.IpAutomata.PadLeft(3)), string.Format("El automata {0} con maquina {1} no tiene cola de trabajo", maquina.IpAutomata, maquina.Posicion), 1); } maquina.AsignarColaTrabajo(colaTrabajo); }; bw.RunWorkerAsync(); maquina.ErrorTareaSinEjecutar(); maquina.ParesConsumidos(); } } } } catch (Exception ex) { Log.Write(ex); } }
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); } }