Exemple #1
0
        /*
         * 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
            }
        }
Exemple #2
0
        /*
         * 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);
            }
        }