diff --git a/IOB-UT-NEXT/Config/Base/IobDto.cs b/IOB-UT-NEXT/Config/Base/IobDto.cs index 394e810b..4a6bab14 100644 --- a/IOB-UT-NEXT/Config/Base/IobDto.cs +++ b/IOB-UT-NEXT/Config/Base/IobDto.cs @@ -67,6 +67,11 @@ namespace IOB_UT_NEXT.Config.Base /// public double DelayReadPzCount { get; set; } = 0.5; + /// + /// Tempo di attesa (in minuti) x lettura contapezzi standard DOPO fase di setup (default 6 sec, da init 0.6 sec) + /// + public double DelayReadPzCountSetup { get; set; } = 0.1; + /// /// Disabilitazione invio DynData di WDST (WatchDogStateTransfer) /// diff --git a/IOB-UT-NEXT/Config/IobConfTree.cs b/IOB-UT-NEXT/Config/IobConfTree.cs index 23b8e0ba..b0d86f15 100644 --- a/IOB-UT-NEXT/Config/IobConfTree.cs +++ b/IOB-UT-NEXT/Config/IobConfTree.cs @@ -121,6 +121,7 @@ namespace IOB_UT_NEXT.Config CodIOB = fIni.ReadString("IOB", "IOB_NAME", codIob), CodGruppoIob = fIni.ReadString("OPTPAR", "CodGruppoIob", "ND-00"), DelayReadPzCount = Convert.ToDouble(fIni.ReadString("OPTPAR", "DELAY_READ_PZ_COUNT", "0")), + DelayReadPzCountSetup = Convert.ToDouble(fIni.ReadString("OPTPAR", "DELAY_READ_PZ_COUNT_SETUP", "0.01")), FileName = Path.GetFileName(iniFilePath), Customer = fIni.ReadString("TAGS", "Customer", "EgalWare"), EnabelPodlManFull = bool.Parse(fIni.ReadString("OPTPAR", "EnabelPodlManFull", "false")), diff --git a/IOB-UT-NEXT/Iob/BaseObj.cs b/IOB-UT-NEXT/Iob/BaseObj.cs index d877770e..0bedf4b2 100644 --- a/IOB-UT-NEXT/Iob/BaseObj.cs +++ b/IOB-UT-NEXT/Iob/BaseObj.cs @@ -298,6 +298,12 @@ namespace IOB_UT_NEXT.Iob /// public int vetoPingSec = 1; + /// + /// Veto specifico per la gestione (svuotamento) coda contapezzi (es in fase di attrezzaggio e reset lenti) + /// Tipicamente impostato a DelayReadPzCountSetup dopo attrezzaggio... + /// + public DateTime vetoQueuePzCount = DateTime.Now; + /// /// Imposta veto chiamata split (durante chiamata, per 60 sec) /// diff --git a/IOB-WIN-FORM/Iob/Generic.Protected.cs b/IOB-WIN-FORM/Iob/Generic.Protected.cs index f28a4c18..25ebbb59 100644 --- a/IOB-WIN-FORM/Iob/Generic.Protected.cs +++ b/IOB-WIN-FORM/Iob/Generic.Protected.cs @@ -5792,46 +5792,55 @@ namespace IOB_WIN_FORM.Iob private async Task SvuotaCodaContapezziAsync() { - // permetto al max 2 tentativi infruttuosi... - int maxTry = 2; - int oldContapezzi = contapezziIOB; - // SE HO gestione contapezzi... - if (!IOBConfFull.Device.EnabPzCount) + // verifico non sia impedita la gestione contapezzi (per evitare invio su macchine lente nel reset all'attrezzaggio) + if (DateTime.Now <= vetoQueuePzCount) { - lgDebug($"Contapezzi disabilitato da configuraizone: IOBConfFull.Device.EnabPzCount: {IOBConfFull.Device.EnabPzCount}"); + lgInfo($"Ciclo SvuotaCodaContapezziAsync DISABILITATO fino a {vetoQueuePzCount}"); } else { - // se ho contapezzi OLTRE limite... - while ((MPOnline) && (contapezziPLC > contapezziIOB + minSendPzCountBlock)) + + // permetto al max 2 tentativi infruttuosi... + int maxTry = 2; + int oldContapezzi = contapezziIOB; + // SE HO gestione contapezzi... + if (!IOBConfFull.Device.EnabPzCount) { - lgInfo($"Ciclo SvuotaCodaContapezziAsync --> contapezziPLC: {contapezziPLC} | contapezziIOB: {contapezziIOB}"); - if (!isMulti) + lgDebug($"Contapezzi disabilitato da configuraizone: IOBConfFull.Device.EnabPzCount: {IOBConfFull.Device.EnabPzCount}"); + } + else + { + // se ho contapezzi OLTRE limite... + while ((MPOnline) && (contapezziPLC > contapezziIOB + minSendPzCountBlock)) { - pzCntReload(true); + lgInfo($"Ciclo SvuotaCodaContapezziAsync --> contapezziPLC: {contapezziPLC} | contapezziIOB: {contapezziIOB}"); + if (!isMulti) + { + pzCntReload(true); + } + // provo invio + if (!isMulti) + { + trySendPzCountBlock(); + } + // verifica per evitare loop infinito invio fallito + if (oldContapezzi == contapezziIOB) + { + maxTry--; + } + else + { + maxTry = 2; + oldContapezzi = contapezziIOB; + } + // verifico maxTry: se li ho esauriti esco! + if (maxTry <= 0) + { + return; + } + // aspetto x dare tempo calcolo + await Task.Delay(500); } - // provo invio - if (!isMulti) - { - trySendPzCountBlock(); - } - // verifica per evitare loop infinito invio fallito - if (oldContapezzi == contapezziIOB) - { - maxTry--; - } - else - { - maxTry = 2; - oldContapezzi = contapezziIOB; - } - // verifico maxTry: se li ho esauriti esco! - if (maxTry <= 0) - { - return; - } - // aspetto x dare tempo calcolo - await Task.Delay(500); } } } diff --git a/IOB-WIN-FORM/Iob/Generic.Public.cs b/IOB-WIN-FORM/Iob/Generic.Public.cs index afaba6a0..314f750d 100644 --- a/IOB-WIN-FORM/Iob/Generic.Public.cs +++ b/IOB-WIN-FORM/Iob/Generic.Public.cs @@ -1245,6 +1245,8 @@ namespace IOB_WIN_FORM.Iob { taskVal = $"NO DATA MEM, SET task: {iKey} --> {item.Value}"; } + // imposto reset gestione pzcount da parametri + vetoQueuePzCount = DateTime.Now.AddMinutes(IOBConfFull.General.DelayReadPzCountSetup); } else { diff --git a/IOB-WIN-OPC-UA/DATA/CONF/2014.ini b/IOB-WIN-OPC-UA/DATA/CONF/2014.ini index c96fd44d..6b95e324 100644 --- a/IOB-WIN-OPC-UA/DATA/CONF/2014.ini +++ b/IOB-WIN-OPC-UA/DATA/CONF/2014.ini @@ -75,6 +75,8 @@ VETO_SIG_IN=false BASE_SAMPLE_PERIOD=600 MAX_ELAPSED_TIME_SEC=900 DISABLE_SEND_WDST=TRUE +; ritardo rilettura pezzi post setup in minuti +DELAY_READ_PZ_COUNT_SETUP=0.5 ; conf parametri memoria READ/WRITE OPC_PARAM_CONF=2014.json diff --git a/IOB-WIN-OPC-UA/DATA/CONF/2014.json b/IOB-WIN-OPC-UA/DATA/CONF/2014.json index d984d590..0afccecb 100644 --- a/IOB-WIN-OPC-UA/DATA/CONF/2014.json +++ b/IOB-WIN-OPC-UA/DATA/CONF/2014.json @@ -360,7 +360,7 @@ "name": "OPC_actParts", "description": "Contapezzi", "func": "POINT", - "period": 6, + "period": 60, "tipoMem": "Int", "memAddr": "ns=2;s=/Channel/State/actParts", "index": 0, @@ -371,7 +371,7 @@ "description": "Ultimo TCiclo", "func": "POINT", "period": 60, - "tipoMem": "Int", + "tipoMem": "String", "memAddr": "ns=2;s=/Channel/State/oldProgNetTime", "index": 0, "size": 1 @@ -380,7 +380,7 @@ "name": "OPC_QUANTITA_PRODOTTA", "description": "QUANTITA PRODOTTA", "func": "MAX", - "period": 6, + "period": 60, "tipoMem": "Int", "memAddr": "ns=2;s=/NC/_N_CH_GD2_ACX/QUANTITA_PRODOTTA", "index": 0, diff --git a/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini b/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini index c0bfe4da..5b4d1fe7 100644 --- a/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini +++ b/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini @@ -28,8 +28,8 @@ CLI_INST=SteamWareSim ;STARTLIST=3026 ;STARTLIST=TFT_RAMA_001 ;STARTLIST=SIM_DP_01 -STARTLIST=1042 -;STARTLIST=2014 +;STARTLIST=1042 +STARTLIST=2014 ;STARTLIST=2015 ;STARTLIST=2016 diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs index d4814ee5..1203447e 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs @@ -113,6 +113,8 @@ namespace IOB_WIN_OPC_UA.IobOpc if (addResetPzCount) { + // imposto reset gestione pzcount da parametri + vetoQueuePzCount = DateTime.Now.AddMinutes(IOBConfFull.General.DelayReadPzCountSetup); // se รจ una doppia tavola aggiungo anche tag "processOtherInfo"... if (isMulti) {