diff --git a/IOB-UT-NEXT/Iob/BaseObj.cs b/IOB-UT-NEXT/Iob/BaseObj.cs index 8c2cdb1a..0c7cb245 100644 --- a/IOB-UT-NEXT/Iob/BaseObj.cs +++ b/IOB-UT-NEXT/Iob/BaseObj.cs @@ -209,44 +209,32 @@ namespace IOB_UT_NEXT.Iob /// public DataQueue QueueAlarm = new DataQueue("000", "QueueAlarm", false); - //public ConcurrentQueue QueueAlarm = new ConcurrentQueue(); - /// /// Oggetto della coda degli elementi letti di tipo FluxLog (e non ancora trasmessi) /// public DataQueue QueueFLog = new DataQueue("000", "QueueFLog", false); - //public ConcurrentQueue QueueFLog = new ConcurrentQueue(); - /// /// Oggetto della coda degli elementi letti (e non ancora trasmessi) /// public DataQueue QueueIN = new DataQueue("000", "QueueIN", false); - //public ConcurrentQueue QueueIN = new ConcurrentQueue(); - /// /// Coda valori MESSAGGI/EVENTI (da non sottocampionare come samples)... /// public DataQueue QueueMessages = new DataQueue("000", "QueueMessages", false); - //public ConcurrentQueue QueueMessages = new ConcurrentQueue(); - /// /// Oggetto della coda degli elementi di tipo RawTransf (e non ancora trasmessi) /// NB: sono salvati serializzati come stringhe /// public DataQueue QueueRawTransf = new DataQueue("000", "QueueRawTransf", false); - //public ConcurrentQueue QueueRawTransf = new ConcurrentQueue(); - /// /// Coda valori LOG UTENTE (da non sottocampionare come samples)... /// public DataQueue QueueULog = new DataQueue("000", "QueueULog", false); - //public ConcurrentQueue QueueULog = new ConcurrentQueue(); - /// /// alias booleano false = R /// @@ -524,6 +512,11 @@ namespace IOB_UT_NEXT.Iob /// protected DateTime lastLogStartup = DateTime.Today.AddHours(-1); + /// + /// Tempo minimo ammissibile di risposta (es x errori ModBus che risponde troppo in fretta) in millisec + /// + protected int minRespTimeMs = 5; + /// /// Veto per registrazione completa log di startup (minuti) /// @@ -596,7 +589,7 @@ namespace IOB_UT_NEXT.Iob } } } - catch(Exception exc) + catch (Exception exc) { lg.Error($"Eccezione in checkLogVeto: reset contatori VetoLog/VetoLogCount | message: {message}"); lg.Error($"Raised Exc:{Environment.NewLine}{exc}"); diff --git a/IOB-WIN-FORM/Iob/Generic.cs b/IOB-WIN-FORM/Iob/Generic.cs index c3cf731d..c513abf9 100644 --- a/IOB-WIN-FORM/Iob/Generic.cs +++ b/IOB-WIN-FORM/Iob/Generic.cs @@ -6003,6 +6003,11 @@ namespace IOB_WIN_FORM.Iob lgError("loadMemConf: parametro ENABLE_SEND_PZC_BLOCK non trovato, verificare anche MAX_SEND_PZC_BLOCK e MIN_SEND_PZC_BLOCK"); } lgInfo("loadMemConf.02"); + currPar = getOptPar("MIN_RESP_TIME_MS"); + if (!string.IsNullOrEmpty(currPar)) + { + int.TryParse(currPar, out minRespTimeMs); + } // gruppo macchina CodGruppoIob = getOptPar("CodGruppoIob"); diff --git a/IOB-WIN-MBUS/DATA/CONF/PIZ04.ini b/IOB-WIN-MBUS/DATA/CONF/PIZ04.ini index bec8b702..b41604df 100644 --- a/IOB-WIN-MBUS/DATA/CONF/PIZ04.ini +++ b/IOB-WIN-MBUS/DATA/CONF/PIZ04.ini @@ -62,6 +62,8 @@ FORCE_DYN_DATA=TRUE ; gestione delta minimo accettabile tra min/MAX DELTA_VAL=0.1 COPY_DYN2PROD_DATA =TRUE +;tempo minimo risposta perché sia valida +MIN_RESP_TIME_MS=10 ; clock base (da 10ms) timerIntMs=50 diff --git a/IOB-WIN-MBUS/DATA/CONF/PIZ05.ini b/IOB-WIN-MBUS/DATA/CONF/PIZ05.ini index 2362a521..be4a090f 100644 --- a/IOB-WIN-MBUS/DATA/CONF/PIZ05.ini +++ b/IOB-WIN-MBUS/DATA/CONF/PIZ05.ini @@ -62,6 +62,8 @@ FORCE_DYN_DATA=TRUE ; gestione delta minimo accettabile tra min/MAX DELTA_VAL=0.1 COPY_DYN2PROD_DATA =TRUE +;tempo minimo risposta perché sia valida +MIN_RESP_TIME_MS=10 ; clock base (da 10ms) timerIntMs=50 diff --git a/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini b/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini index 5f9834be..0dbce34d 100644 --- a/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini +++ b/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini @@ -62,6 +62,8 @@ FORCE_DYN_DATA=TRUE ; gestione delta minimo accettabile tra min/MAX DELTA_VAL=0.1 COPY_DYN2PROD_DATA =TRUE +;tempo minimo risposta perché sia valida +MIN_RESP_TIME_MS=10 ; clock base (da 10ms) timerIntMs=50 diff --git a/IOB-WIN-MBUS/DATA/CONF/PIZ10.ini b/IOB-WIN-MBUS/DATA/CONF/PIZ10.ini index e27b43ff..48dd9187 100644 --- a/IOB-WIN-MBUS/DATA/CONF/PIZ10.ini +++ b/IOB-WIN-MBUS/DATA/CONF/PIZ10.ini @@ -63,6 +63,8 @@ FORCE_DYN_DATA=TRUE ; gestione delta minimo accettabile tra min/MAX DELTA_VAL=0.1 COPY_DYN2PROD_DATA =TRUE +;tempo minimo risposta perché sia valida +MIN_RESP_TIME_MS=10 ; clock base (da 10ms) timerIntMs=50 diff --git a/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs b/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs index fa40940b..c29d7629 100644 --- a/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs +++ b/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs @@ -2081,21 +2081,24 @@ namespace IOB_WIN_MBUS.IobModbusTCP int memAddr = startAddr - baseAddr; rawData = currPLC.ReadHoldingRegisters(memAddr, numReg); stopwatch.Stop(); - lgTrace($"Lettura in blocco HoldingRegisters| startAddr: {startAddr} | numReg {numReg} | rawData.lenght: {rawData.Length} | {stopwatch.ElapsedMilliseconds}ms"); + lgTrace($"Lettura in blocco HoldingRegisters| startAddr: {startAddr} | numReg {numReg} | rawData.lenght: {rawData.Length} | {stopwatch.Elapsed.TotalMilliseconds}ms"); lastReadPLC = DateTime.Now; + // se risposta troppo rapida (< minRespTimeMs, tipicamente 5 msse non impostato in OptPar) indico NON ok e errori... + if (stopwatch.Elapsed.TotalMilliseconds < minRespTimeMs) + { + allOk = false; + currReadErrors += 10; + } // se leggo tutti zero --> indico +5 read error! bool allZero = (rawData.Where(x => x > 0).Count() == 0); if (allZero) { - currReadErrors += 3; + currReadErrors += 5; #if false allOk = false; #endif } // salvo in LUT la versione ESPLOSA 2 byte alla volta... -#if false - if (allOk && rawData.Length > 0) -#endif if (rawData.Length > 0) { for (int i = 0; i < rawData.Length / 2; i++) diff --git a/IOB-WIN-SIEMENS/DATA/CONF/PIZ03.ini b/IOB-WIN-SIEMENS/DATA/CONF/PIZ03.ini index 2edfc2a4..70a6de11 100644 --- a/IOB-WIN-SIEMENS/DATA/CONF/PIZ03.ini +++ b/IOB-WIN-SIEMENS/DATA/CONF/PIZ03.ini @@ -49,7 +49,7 @@ BLINK_FILT=0 [OPTPAR] ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB85.DBRE16 +PZCOUNT_MODE=STD.DB85.DBB16 DISABLE_PZCOUNT=FALSE ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=0 diff --git a/IOB-WIN-SIEMENS/DATA/CONF/PIZ08.ini b/IOB-WIN-SIEMENS/DATA/CONF/PIZ08.ini index e74abf17..89c332ba 100644 --- a/IOB-WIN-SIEMENS/DATA/CONF/PIZ08.ini +++ b/IOB-WIN-SIEMENS/DATA/CONF/PIZ08.ini @@ -48,7 +48,7 @@ BLINK_FILT=0 [OPTPAR] ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB85.DBRE16 +PZCOUNT_MODE=STD.DB85.DBB16 DISABLE_PZCOUNT=FALSE ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=0