diff --git a/CVCncLib/testSam.dll b/CVCncLib/testSam.dll index 39494fd1..aa2adc36 100644 Binary files a/CVCncLib/testSam.dll and b/CVCncLib/testSam.dll differ diff --git a/IOB-WIN/AdapterForm.cs b/IOB-WIN/AdapterForm.cs index 04a9296e..c7d2efeb 100644 --- a/IOB-WIN/AdapterForm.cs +++ b/IOB-WIN/AdapterForm.cs @@ -510,7 +510,7 @@ namespace IOB_WIN cpuType = fIni.ReadString("CNC", "CPUTYPE", ""), rack = (short)fIni.ReadInteger("CNC", "RACK", 0), slot = (short)fIni.ReadInteger("CNC", "SLOT", 0), - serverData = new serverMapo(fIni.ReadString("SERVER", "MPIP", "::1"), fIni.ReadString("SERVER", "MPURL", "/"), fIni.ReadString("SERVER", "CMDBASE", "/"), fIni.ReadString("SERVER", "CMDFLOG", "/"), fIni.ReadString("SERVER", "CMDALIVE", "/"), fIni.ReadString("SERVER", "CMDENABLED", "/"), fIni.ReadString("SERVER", "CMDREBO", "/")), + serverData = new serverMapo(fIni.ReadString("SERVER", "MPIP", "::1"), fIni.ReadString("SERVER", "MPURL", "/"), fIni.ReadString("SERVER", "CMDBASE", "/"), fIni.ReadString("SERVER", "CMDFLOG", "/"), fIni.ReadString("SERVER", "CMDALIVE", "/"), fIni.ReadString("SERVER", "CMDENABLED", "/"), fIni.ReadString("SERVER", "CMDREBO", "/"), fIni.ReadString("SERVER", "CMD_ODL_STARTED", "/IOB/getCurrOdlStart/")), MAX_COUNTER_BLINK = Convert.ToInt32(fIni.ReadString("BLINK", "MAX_COUNTER_BLINK", "1")), BLINK_FILT = Convert.ToInt32(fIni.ReadString("BLINK", "BLINK_FILT", "0")) }; diff --git a/IOB-WIN/DATA/CONF/SIMUL_03.ini b/IOB-WIN/DATA/CONF/SIMUL_03.ini index 992d6779..35b6707c 100644 --- a/IOB-WIN/DATA/CONF/SIMUL_03.ini +++ b/IOB-WIN/DATA/CONF/SIMUL_03.ini @@ -18,6 +18,7 @@ CMDBASE=/IOB/input/ CMDFLOG=/IOB/flog/ CMDALIVE=/IOB CMDENABLED=/IOB/enabled/ +CMD_ODL_STARTED=/IOB/getCurrOdlStart/ CMDADV1=?valore= CMDREBO=/sendReboot.aspx?idxMacchina= diff --git a/IOB-WIN/IobConfiguration.cs b/IOB-WIN/IobConfiguration.cs index c8653751..45247e3a 100644 --- a/IOB-WIN/IobConfiguration.cs +++ b/IOB-WIN/IobConfiguration.cs @@ -95,7 +95,7 @@ namespace IOB_WIN rack = 0; slot = 0; tipoIob = tipoAdapter.SIMULA; - serverData = new serverMapo("127.0.0.1", "/", "/IOB/input/", "/IOB/flog/", "/IOB", "/IOB/enabled/", "/sendReboot.aspx?idxMacchina="); + serverData = new serverMapo("127.0.0.1", "/", "/IOB/input/", "/IOB/flog/", "/IOB", "/IOB/enabled/", "/sendReboot.aspx?idxMacchina=", "/IOB/getCurrOdlStart/"); MAX_COUNTER_BLINK = 10; BLINK_FILT = 0; optPar = new Dictionary(); @@ -129,6 +129,10 @@ namespace IOB_WIN /// public string CMDENABLED = ""; /// + /// comando base x check avvio ODL + /// + public string CMD_ODL_STARTED = ""; + /// /// comando base x comando reboot /// public string CMDREBO = ""; @@ -141,9 +145,9 @@ namespace IOB_WIN /// Comando x invio LOG per FLUSSO generico /// Comando x check alive /// Comando x check abilitato - /// Comando x parametri opz /// Comando x reboot - public serverMapo(string MPIP_, string MPURL_, string CMDBASE_, string CMDFLOG_, string CMDALIVE_, string CMDENABLED_, string CMDREBO_) + /// Comando x check data avvio ODL + public serverMapo(string MPIP_, string MPURL_ = "/MP/IO", string CMDBASE_ = "/IOB/input/", string CMDFLOG_ = "/IOB/flog/", string CMDALIVE_ = "IOB", string CMDENABLED_ = "/IOB/enabled/", string CMDREBO_ = "/sendReboot.aspx?idxMacchina=", string CMD_ODL_STARTED_ = "/IOB/getCurrOdlStart/") { MPIP = MPIP_.Replace("http://", ""); // tolgo http... MPURL = MPURL_; @@ -152,6 +156,7 @@ namespace IOB_WIN CMDALIVE = CMDALIVE_; CMDENABLED = CMDENABLED_; CMDREBO = CMDREBO_; + CMD_ODL_STARTED = CMD_ODL_STARTED_; } } diff --git a/IOB-WIN/IobGeneric.cs b/IOB-WIN/IobGeneric.cs index ef7dc86a..1b838466 100644 --- a/IOB-WIN/IobGeneric.cs +++ b/IOB-WIN/IobGeneric.cs @@ -754,6 +754,8 @@ namespace IOB_WIN { processOtherCounters(); processProgram(); + // verifico se devo gestire cambio ODL in modo automatico + processAutoOdl(); } else if (ciclo == gatherCycle.VLF) { @@ -766,8 +768,6 @@ namespace IOB_WIN } // recupero dati SETUP (sysinfo) e li invio/mostro se variati... processSysInfo(); - // verifico se devo gestire cambio ODL in modo automatico - processAutoOdl(); // checkLogDir x shrink! checkShrinkDir(); // eventuale log! @@ -1452,7 +1452,7 @@ namespace IOB_WIN } } /// - /// URL per check alive... + /// URL per check se abilitato... /// public string urlIobEnabled { @@ -1462,6 +1462,16 @@ namespace IOB_WIN } } /// + /// URL per recupero inizio ODL... + /// + public string urlInizioOdlIob + { + get + { + return string.Format(@"http://{0}{1}{2}{3}", cIobConf.serverData.MPIP, cIobConf.serverData.MPURL, cIobConf.serverData.CMD_ODL_STARTED, cIobConf.codIOB); + } + } + /// /// URL per segnalazione reboot... /// public string urlReboot @@ -2104,7 +2114,7 @@ namespace IOB_WIN /// /// Verifica e processing x gestione ODL automatica /// - private void processAutoOdl() + private bool processAutoOdl() { bool fatto = false; if (getOptPar("AUTO_CHANGE_ODL") != "") @@ -2127,61 +2137,53 @@ namespace IOB_WIN // controllo parametri validi if (minOdlDurHours > 0 && minPlcIdelMin > 0) { - // !!!FIXME leggo da IOB se ci sia scadenza programmata in REDIS - bool scadOdlProgr = false; // !!!FIXME recuperare da MP/IO - // verifico se ci sia PROGRAMMATA la scadenza automatica ODL, in tal caso confronto con data-ora attuali... - if (scadOdlProgr) - { - // recupero scadenza - DateTime scadenzaOdl = adesso.AddDays(1); // !!!FIXME recuperare da MP/IO - // verifico se periodo sia scaduto - if (scadenzaOdl <= adesso) - { - // controllo SE sono fermo (spento o in manuale) per il periodo minimo richiesto... - int idlePeriod = 0; // !!!FIXME recuperare da MP/IO coem conteggio durata STATUS, ma solo SE non sono in running... - if (idlePeriod >= minPlcIdelMin) - { - // invio chiamata URL x reset ODL - fatto = true; // !!!FIXME fare chiamando MP/IO e controllare risultato + // leggo da server inizio ODL + DateTime inizioOdl = DateTime.Now; + string rawDataInizio = callUrl(urlInizioOdlIob); + DateTime.TryParse(rawDataInizio, out inizioOdl); - /*************************************************** - * Descrizione procedura (OK X SIMULATORI...) - * - * - chiamata su MP/IO - * - verifica che su DB sia abilitato AUTO ODL - * - il server inserisce un evento fine prod HW 1 minuto prima e inizio setup HW - * - viene duplicato e chiuso ODL corrente - * - viene fatto partire ODL nuovo ADESSO - * - num pezzi come ODL precedente (o da media 3 ODL precedenti) - * - conferme pezzi & co... gestione NULL (NON SERVONO si tratta di impianti SENZA gestione vera ODL) - * - reset contapezzi PLC locale... - * - * - * - * DA VALUTARE (x macchine tipo linea con + impianti... es valvital) SE - * - creare una gestione ALTERNATIVA sul server che preveda impianto LEADER e impianti follower (RIGIDAMENTE CONFIGURATI) - * - ogni volta che si fa setup LEADER --> si ripete su impianti FOLLOWER (eventi!!!) - * - viene fatto reset contapezzi sui follower (+ altre operazioni opzionali, ES imposstazione nome commessa, quantità, articolo...) - * - viene fatto reset + nuovo ODL (con stessi articoli e quantità) su follower, SENZA avere gestione x ODL di un codice esterno (quindi registra TUTTO ma NON RITORNERA' dati non avendo link verso esterno) - * - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO - * - ***************************************************/ - } - } - } - else + //verifico se sia scaduto... + if (inizioOdl.AddHours(minOdlDurHours) < adesso) { - // chiedo a server data-ora inizio ODL corrente - DateTime odlStarted = DateTime.Now; // !!!FIXME recuperare da MP/IO - // imposto scadenza (periodo ) - DateTime odlPrevEnd = odlStarted.AddHours(minOdlDurHours); - // salvo su MP/IO - // !!!FIXME!!! fare!!! + // controllo SE sono fermo (spento o in manuale) per il periodo minimo richiesto... + + + + int idlePeriod = 0; // !!!FIXME recuperare da MP/IO coem conteggio durata STATUS, ma solo SE non sono in running... + if (idlePeriod >= minPlcIdelMin) + { + // invio chiamata URL x reset ODL + fatto = true; // !!!FIXME fare chiamando MP/IO e controllare risultato + + /*************************************************** + * Descrizione procedura (OK X SIMULATORI...) + * + * - chiamata su MP/IO + * - verifica che su DB sia abilitato AUTO ODL + * - il server inserisce un evento fine prod HW 1 minuto prima e inizio setup HW + * - viene duplicato e chiuso ODL corrente + * - viene fatto partire ODL nuovo ADESSO + * - num pezzi come ODL precedente (o da media 3 ODL precedenti) + * - conferme pezzi & co... gestione NULL (NON SERVONO si tratta di impianti SENZA gestione vera ODL) + * - reset contapezzi PLC locale... + * + * + * + * DA VALUTARE (x macchine tipo linea con + impianti... es valvital) SE + * - creare una gestione ALTERNATIVA sul server che preveda impianto LEADER e impianti follower (RIGIDAMENTE CONFIGURATI) + * - ogni volta che si fa setup LEADER --> si ripete su impianti FOLLOWER (eventi!!!) + * - viene fatto reset contapezzi sui follower (+ altre operazioni opzionali, ES imposstazione nome commessa, quantità, articolo...) + * - viene fatto reset + nuovo ODL (con stessi articoli e quantità) su follower, SENZA avere gestione x ODL di un codice esterno (quindi registra TUTTO ma NON RITORNERA' dati non avendo link verso esterno) + * - serve NUOVA TABELLA delle macchine LEADER | FOLLOWER (1:n) e gestione da MP/IO + * + ***************************************************/ + } } } } } } + return fatto; } /// /// Processo lettura dati sysinfo