diff --git a/IOB-WIN-NEXT/App.config b/IOB-WIN-NEXT/App.config index a5dec4bb..8abdeb17 100644 --- a/IOB-WIN-NEXT/App.config +++ b/IOB-WIN-NEXT/App.config @@ -40,8 +40,8 @@ - - + + diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index ea38b7f2..3b677090 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -410,8 +410,10 @@ namespace IOB_WIN_NEXT /// NUm registri da leggere (max 120) private void readBlockHoldingReg(int startAddr, int numReg) { + bool allOk = false; if (currPLC.Connected) { + allOk = true; // fix massima lunghezza pacchetto if (numReg > 120) { @@ -450,6 +452,7 @@ namespace IOB_WIN_NEXT else { currReadErrors++; + allOk = false; lgError($"Impossibile copiare dati, array di origine troppo corto: rawData.lenght: {rawData.Length} | base addr richiesto i*2: {i * 2} | errori currReadErrors: {currReadErrors}"); } } @@ -458,26 +461,35 @@ namespace IOB_WIN_NEXT catch (Exception exc) { currReadErrors++; - lgError($"Eccezione in readBlockHoldingReg{Environment.NewLine}{exc}"); + allOk = false; + lgError($"Eccezione in readBlockHoldingReg | currReadErrors: {currReadErrors}{Environment.NewLine}{exc}"); } } else { - lgError("Attenzione, plc disconnesso..."); + lgError($"Attenzione, plc disconnesso... currReadErrors: {currReadErrors}"); tryDisconnect(); } - // se > max errori --> disconnetto - if (currReadErrors > maxReadErrors) + // se tutto ok --> riduco contatore errori di 1... + if (allOk) { - lgInfo("Superato limite errori Read --> tryDisconnect"); - currReadErrors = 0; - tryDisconnect(); + currReadErrors = currReadErrors >= 1 ? currReadErrors-- : 0; } else { - // altrimenti pausa forzata - Thread.Sleep(200); + // se > max errori --> disconnetto + if (currReadErrors > maxReadErrors) + { + lgInfo($"Superato limite errori Read ({currReadErrors}) --> tryDisconnect"); + currReadErrors = 0; + tryDisconnect(); + } + else + { + // altrimenti pausa forzata + Thread.Sleep(300); + } } }