private void Calentar(string msg, string topicRecibido, Topic topic) { try { ConsumoPrensa consumo = JsonConvert.DeserializeObject <ConsumoPrensa>(msg); if (consumo == null) { Log.Write(new Exception("Consumo recibido nulo " + msg)); } string tipoBancada = topicRecibido.Split('/')[topic.IndiceTipoBancada].Trim(); string ipPlc = topicRecibido.Split('/')[topic.IndiceIdTopic].Trim(); consumo.IpPlc = ipPlc; Maquinas maquina = Store.Bancada.Maquinas.FirstOrDefault(x => x.IpAutomata == ipPlc && x.Posicion == consumo.Prensa); if (maquina != null) { maquina.CargarInformacion(consumo); if (maquina.Modo != ModoMaquina.Calentamiento) { maquina.CambiarModo(ModoMaquina.Calentamiento); } } } catch (Exception ex) { Log.Write(ex); } }
private void TopicCalentar_OnMensajeRecibido(object sender, Entidades.Eventos.MqttMensajeRecibidoEventArgs e) { try { ConsumoPrensa consumo = JsonConvert.DeserializeObject <ConsumoPrensa>(e.Cuerpo); if (consumo.Prensa == this.Maquina.Posicion) { timerCalentamiento.Start(); } } catch (Exception ex) { new Log().Escribir(ex); } }
public void CargarInformacion(ConsumoPrensa consumo) { bool infoActualizada = false; if ( consumo.SgCiclo != this.SgCiclo || consumo.Tinf != this.Tinf || consumo.Tmed != this.Tmed || consumo.Tsup != this.Tsup) { infoActualizada = true; } this.SgCiclo = consumo.SgCiclo; this.NumMoldes = consumo.NumMoldes; this.Tinf = consumo.Tinf; this.Tmed = consumo.Tmed; this.Tsup = consumo.Tsup; this.SetInf = consumo.SetInf; this.SetMed = consumo.SetMed; this.SetSup = consumo.SetSup; int nuevosParesCiclo = consumo.NumMoldes * consumo.ParesUtillaje; if (this.ParesCiclo != nuevosParesCiclo) { this.ParesCiclo = nuevosParesCiclo; this.ColaTrabajoActualizada(); } else { this.ParesCiclo = nuevosParesCiclo; } this.InfoEjecucionActualizada(); Notifica(); }
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); } }
private void TopicNormal_OnMensajeRecibido(object sender, Entidades.Eventos.MqttMensajeRecibidoEventArgs e) { timerCalentamiento.Stop(); try { ConsumoPrensa consumo = JsonConvert.DeserializeObject <ConsumoPrensa>(e.Cuerpo); if (consumo == null) { new Log().Escribir("consumo nulo"); } if (consumo.Prensa != this.Maquina.Posicion) { return; } if (this.Maquina.Modo != Entidades.Enum.ModoMaquina.Normal) { this.Maquina.CambiarModo(Entidades.Enum.ModoMaquina.Normal); } this.Maquina.CargarInformacion(consumo); if (this.Maquina.TrabajoEjecucion != null) { this.Maquina.Pulsos.Add(new PulsoMaquina { PiezaIntroducida = consumo.PiezaIntroducida == 1, CodigoEtiqueta = this.Maquina.TrabajoEjecucion.CodigoEtiquetaFichada, Control = new OperacionesControles { IdTipoMaquina = 1, TiempoBaseEjecucion = 0.01, TiempoCambioBarquilla = 0.3, TiempoInicio = 0, TiempoUtillajeEjecucion = 0.1, }, Ciclo = consumo.SgCiclo, Fecha = DateTime.Now, IdOperario = Maquina.OperarioACargo.Id, PosicionGlobal = Maquina.PosicionGlobal ?? 0, Pares = (consumo.ParesUtillaje == 0?1:consumo.ParesUtillaje) * consumo.NumMoldes, }); if (consumo.PiezaIntroducida == 1) { this.Maquina.InsertarPares(this.Maquina.TrabajoEjecucion, consumo.NumMoldes * (consumo.ParesUtillaje == 0 ? 1 : consumo.ParesUtillaje)); } Notifica("Maquina"); } else { BackgroundWorker bw = new BackgroundWorker(); List <MaquinasColasTrabajo> colaTrabajo = new List <MaquinasColasTrabajo>(); bw.DoWork += (se, ev) => { colaTrabajo = daoPuesto.ObtenerColaTrabajoMaquina(this.Maquina.ID); }; bw.RunWorkerCompleted += (se, ev) => { if (colaTrabajo.Count == 0) { ClienteMqtt.Publicar(string.Format("/{0}/fallo/{1}", Maquina.Tipo, this.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(); } }catch (Exception ex) { new Log().Escribir(ex); } }