diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs
index 352698e1..2f31858d 100644
--- a/MP-IO/Controllers/IOBController.cs
+++ b/MP-IO/Controllers/IOBController.cs
@@ -136,7 +136,7 @@ namespace MP_IO.Controllers
}
///
- /// Chiude PODL --> ODL x macchina:
+ /// Chiude PODL --> ODL x macchina:
///
/// GET: IOB/closePODL/SIMUL_03?idxPOdl=123
///
@@ -564,19 +564,15 @@ namespace MP_IO.Controllers
return DataLayerObj.AutoStartOdl(id, doConfirm, qtyFromLast, (int)roundStep, keyRichiesta);
}
- ///
- /// Avvia PODL indicato
+ /// Avvia PODL indicato
/// - se esistesse un ODL da altro PODL --> chiude
/// - se fosse già in essere ODL collegato --> lascia aperto
/// - se fosse chiuso ODL collegato --> duplica PODL e poi avvia nuovo ODL.
///
/// GET: IOB/forceStartPOdl/SIMUL_03?idxPODL=123&dtEve=20230323151100000&dtCurr=20230323221100000
- ///
- ///
- /// idx del PDL da avviare
- /// data-ora di avvio (opzionale)
- /// data-ora attuale (opzionale)
- /// Esito chiamata (OK/vuoto)
+ /// idx del PDL da
+ /// avviare data-ora di avvio (opzionale) data-ora attuale (opzionale) Esito chiamata (OK/vuoto)
public string forceStartPOdl(string id, int idxPODL, string dtEve = "", string dtCurr = "")
{
// attenzione! poiché nell'URL il carattere "#" viene filtrato ci aspettiamo il
@@ -981,7 +977,7 @@ namespace MP_IO.Controllers
///
/// GET: IOB/getLastDossArt/cod_articolo
///
- /// codice articolo, se vuoto --> non fa nulla
+ /// codice articolo, se vuoto --> non fa nulla
/// Json contenente lista oggetti DOSSIER serializzati
public string getLastDossArt(string id)
{
@@ -1016,7 +1012,7 @@ namespace MP_IO.Controllers
///
/// GET: IOB/getLastDossArt/cod_articolo
///
- /// codice articolo, se vuoto --> non fa nulla
+ /// codice articolo, se vuoto --> non fa nulla
/// Json contenente lista oggetti DOSSIER serializzati
public string getLastDossByMacc(string id)
{
diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs
index 8e520f82..8c56ab43 100644
--- a/MapoDb/DataLayer.cs
+++ b/MapoDb/DataLayer.cs
@@ -1661,11 +1661,11 @@ namespace MapoDb
}
///
- /// Effettua force Start PODL [CurrProdStatus = 1] se fosse già in essere ODL
- /// collegato --> lascia aperto [CurrProdStatus = 2] se esistesse un ODL da altro PODL x
- /// diverso articolo/fase --> chiude vecchio x poi far partire nuovo [CurrProdStatus = 3] se
- /// fosse chiuso ODL collegato --> duplica PODL e poi avvia nuovo ODL [CurrProdStatus = 4]
- /// se fosse già in essere ODL non collegato --> lascia aperto e collego
+ /// Effettua force Start PODL [CurrProdStatus = 1] se fosse già in essere ODL collegato
+ /// --> lascia aperto [CurrProdStatus = 2] se esistesse un ODL da altro PODL x diverso
+ /// articolo/fase --> chiude vecchio x poi far partire nuovo [CurrProdStatus = 3] se
+ /// fosse chiuso ODL collegato --> duplica PODL e poi avvia nuovo ODL [CurrProdStatus =
+ /// 4] se fosse già in essere ODL non collegato --> lascia aperto e collego
///
/// macchina
/// IDX PODL da processare
@@ -1678,7 +1678,7 @@ namespace MapoDb
string answ = "KO";
int CurrProdStatus = 0;
string sIdxODL = "";
- // Verifica se evento realtime oppure ho data specificata x processing @dtEve
+ // Verifica se evento realtime oppure ho data specificata x processing @dtEve
DateTime dtEvent = DateTime.Now;
bool rtimeProc = string.IsNullOrEmpty(dtEve);
if (!rtimeProc)
@@ -1805,7 +1805,9 @@ namespace MapoDb
}
// avvio PODL: creo nuovo ODL da promessa ed associo
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
- // fix (invio ) dati ODL alla ,acchina tramite IOB
+ // reseetto info PODL
+ resetPODLData(idxPODL);
+ // fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
answ = saveOdlData(idxMacchina, currODLData, reqPODLData);
@@ -1826,14 +1828,27 @@ namespace MapoDb
int newPODL = lastPodl != null ? lastPodl.idxPromessa : POdlRow.idxPromessa;
// avvio (nuovo) PODL
taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
- // fix (invio ) dati ODL alla ,acchina tramite IOB
+ // reseetto info PODL
+ resetPODLData(idxPODL);
+ // fix (invio ) dati ODL alla macchina tramite IOB
Thread.Sleep(200);
answ = saveOdlData(idxMacchina, currODLData, reqPODLData);
break;
case 4:
- // --> registro in PODL e non tocco ODL
+ // eventuale chiusura vecchio ODL, 5 sec prima...
+ if (currODLData.Count > 0)
+ {
+ doCloseCurrODL(idxMacchina, doConfirm, qtyConf, currODLData, dtEvent.AddSeconds(-2));
+ }
+ // avvio PODL: creo nuovo ODL da promessa ed associo
+ taODL.inizioSetupPromessa(idxPODL, MatrOpr, POdlRow.IdxMacchina, POdlRow.TCAssegnato, POdlRow.PzPallet, POdlRow.Note, dtEvent);
+ // reseetto info PODL
+ resetPODLData(idxPODL);
+ // fix (invio ) dati ODL alla macchina tramite IOB
+ Thread.Sleep(200);
+ answ = saveOdlData(idxMacchina, currODLData, reqPODLData);
break;
@@ -2427,59 +2442,6 @@ namespace MapoDb
}
return answ;
}
- ///
- /// Effettua calcolo data-ora di riferimento per il server a poartire da
- ///
- ///
- ///
- ///
- private DateTime getSrvDtEvent(string dtEve, string dtCurr)
- {
- DateTime dataOraEvento = DateTime.Now;
- // 2017.09.14 trimmo eventualmente lo zero finale dalle date SE supera i millisecondi...
- dtEve = dtEve.Length > 17 ? dtEve.Substring(0, 17) : dtEve;
- dtCurr = dtCurr.Length > 17 ? dtCurr.Substring(0, 17) : dtCurr;
- DateTime dtEvento, dtCorrente;
- // controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo
- // dataOraEvento corretto
- if (dtEve != dtCurr)
- {
- Int64 delta = 0;
- try
- {
- // se ho meno decimali x evento rispetto dtCorrente...
- if (dtEve.Length < dtCurr.Length)
- {
- dtEve = dtEve.PadRight(dtCurr.Length, '0');
- }
- delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
- // se meno di 60'000 ms ...
- if (delta < 59999)
- {
- dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
- }
- else
- {
- // in questo caso elimino i MS dalle stringhe e converto i datetime....
- CultureInfo provider = CultureInfo.InvariantCulture;
- string format = "yyyyMMddHHmmssfff";
- dtEvento = DateTime.ParseExact(dtEve, format, provider);
- dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
- Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
- dataOraEvento = dataOraEvento.AddTicks(-tiks);
- }
- }
- catch (Exception exc)
- {
- logger.lg.scriviLog($"getSrvDtEvent | Errore calcolo ms evento/ora corrente da device remoto:{Environment.NewLine}" +
- $"dtEve : {dtEve}{Environment.NewLine}" +
- $"dtCurr: {dtCurr}{Environment.NewLine}" +
- $"{exc}", tipoLog.EXCEPTION);
- }
- }
-
- return dataOraEvento;
- }
///
/// Processa input da IOB eventualmente registrando i segnali inviati
@@ -4481,6 +4443,60 @@ namespace MapoDb
SetAllCommandTimeouts(taComm, sqlLongCommandTimeout);
}
+ ///
+ /// Effettua calcolo data-ora di riferimento per il server a poartire da
+ ///
+ ///
+ ///
+ ///
+ private DateTime getSrvDtEvent(string dtEve, string dtCurr)
+ {
+ DateTime dataOraEvento = DateTime.Now;
+ // 2017.09.14 trimmo eventualmente lo zero finale dalle date SE supera i millisecondi...
+ dtEve = dtEve.Length > 17 ? dtEve.Substring(0, 17) : dtEve;
+ dtCurr = dtCurr.Length > 17 ? dtCurr.Substring(0, 17) : dtCurr;
+ DateTime dtEvento, dtCorrente;
+ // controllo: se ho valori dt x evento e orario DIVERSI per acquisitore IOB calcolo
+ // dataOraEvento corretto
+ if (dtEve != dtCurr)
+ {
+ Int64 delta = 0;
+ try
+ {
+ // se ho meno decimali x evento rispetto dtCorrente...
+ if (dtEve.Length < dtCurr.Length)
+ {
+ dtEve = dtEve.PadRight(dtCurr.Length, '0');
+ }
+ delta = Convert.ToInt64(dtCurr) - Convert.ToInt64(dtEve);
+ // se meno di 60'000 ms ...
+ if (delta < 59999)
+ {
+ dataOraEvento = dataOraEvento.AddMilliseconds(-delta);
+ }
+ else
+ {
+ // in questo caso elimino i MS dalle stringhe e converto i datetime....
+ CultureInfo provider = CultureInfo.InvariantCulture;
+ string format = "yyyyMMddHHmmssfff";
+ dtEvento = DateTime.ParseExact(dtEve, format, provider);
+ dtCorrente = DateTime.ParseExact(dtCurr, format, provider);
+ Int64 tiks = dtCorrente.Ticks - dtEvento.Ticks;
+ dataOraEvento = dataOraEvento.AddTicks(-tiks);
+ }
+ }
+ catch (Exception exc)
+ {
+ logger.lg.scriviLog($"getSrvDtEvent | Errore calcolo ms evento/ora corrente da device remoto:{Environment.NewLine}" +
+ $"dtEve : {dtEve}{Environment.NewLine}" +
+ $"dtCurr: {dtCurr}{Environment.NewLine}" +
+ $"{exc}", tipoLog.EXCEPTION);
+ }
+ }
+
+ return dataOraEvento;
+ }
+
///
/// Recupero dati stato prod da macchina...
///
@@ -4570,6 +4586,16 @@ namespace MapoDb
return newVal;
}
+ ///
+ /// Reset cache REDIS dati PODL
+ ///
+ ///
+ private void resetPODLData(int idxPODL)
+ {
+ string rKey = getPOdlRowHash(idxPODL);
+ memLayer.ML.setRSV(rKey, "", 1);
+ }
+
private string saveOdlData(string idxMacchina, DS_ProdTempi.ODLDataTable currODLData, DS_ProdTempi.PromesseODLDataTable reqPODLData)
{
string answ;