/* * SCENARIO 2: * Quando una risorsa viene messa in setup, inviamo in macchina * i dati del prossimo ordine da lavorare prendendolo da quelli pianificati * dallo schedulatore. * * NB: quando c'è un MES, il setup deve essere gestito sul MES e non su PowerMES * in autonomia. Lo stato setup viene acquisito da PowerMES attraverso le funzionalità * di "sincronizza stato risorse" * */ /// <summary> /// Gestione evento di cambio stato risorsa /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ResourcesHandler_ResourceGlobalStateChanged(object sender, ResourceGlobalStateEventArgs e) { if (e.Resource.Name == "RISORSA_CON_SCHEDULATORE" && e.NewState == ResourceGlobalState.SetupMode) { var plannedWorkOrders = this.GetResourceNicimWorkPlanItems(e.Resource); if (plannedWorkOrders.Count == 0) { return; } /* * carico gli ordini pianificati tenendo conto solo di ordini singoli (non cuciti) * e delle bolle madri se cuciti: in genere non è necessario gestire tutte le bolle figlie. * Il tutto ordinato per la priorità di schedulazione */ var nextWorkOrder = plannedWorkOrders.Where(o => o.StitchingRelation != StitchingRelationType.Child) .OrderByDescending(o => o.PhasePriority) .First(); Debug.WriteLine($"ORDINE: {nextWorkOrder.Order} FASE: {nextWorkOrder.Phase} ARTICOLO: {nextWorkOrder.PartNumber} QTA: {nextWorkOrder.PlannedQuantity}"); //TODO: invio dati in macchina tramite PowerDevice o altro mezzo } }
/* * SCENARIO * Ipotizziamo di dover inviare ad una macchina tramite PowerDevice * l'ordine di lavoro e la quantità prevista nel momento in cui * viene messa in setup, ma solo se la macchina NON è in marcia * (solo come esempio di lettura indirizzi) */ /// <summary> /// Gestione evento di cambio stato risorsa /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ResourcesHandler_ResourceGlobalStateChanged(object sender, ResourceGlobalStateEventArgs e) { if (e.Resource.Name == TEST_RESOURCE_NAME && e.NewState == ResourceGlobalState.SetupMode) { /* * TODO: carichiamo i dati da scrivere */ var orderValue = $"WO{DateTime.Now.Minute}"; var qtyValue = DateTime.Now.Millisecond; this.WriteValuesOnPowerDevice(e.Resource, orderValue, qtyValue); } }