From 56617c7c0177f02b3b2b372882e7d5dd05160147 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Sep 2021 17:18:32 +0200 Subject: [PATCH 1/2] Fix reinvio parametri aggiornati (da cosmap) --- IOB-WIN-NEXT/IobGeneric.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index 3d7e1ff2..66f83579 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -1860,6 +1860,10 @@ namespace IOB_WIN_NEXT // scrivo valore! lgInfo("Chiamate processMem2Write --> plcWriteParams"); plcWriteParams(updatedPar); + // invio su cloud parametri! + string rawData = JsonConvert.SerializeObject(updatedPar); + utils.callUrl($"{urlUpdateWriteParams}", rawData); + lgInfo("Notifica a server scrittura parametri"); } } @@ -2709,6 +2713,7 @@ namespace IOB_WIN_NEXT plcWriteParams(updatedPar); // invio su cloud parametri! string rawData = JsonConvert.SerializeObject(updatedPar); + lgInfo("Notifica a server scrittura parametri"); utils.callUrl($"{urlUpdateWriteParams}", rawData); } } @@ -3550,7 +3555,7 @@ namespace IOB_WIN_NEXT DateTime dtVeto = lastConnectTry.AddMilliseconds(waitRecMSec); if (DateTime.Now > dtVeto) { - lgInfo($"Retry Time Elapsed (waited for {waitRecMSec} ms)--> NOW tryConnect"); + lgInfo($"Veto Time Elapsed | lastConnectTry: {lastConnectTry} | waitRecMSec {waitRecMSec} ms) | NOW tryConnect"); lastConnectTry = DateTime.Now; tryConnect(); } From ef591845c9343934d4491769b7b42aad7695ab73 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 10 Sep 2021 17:18:45 +0200 Subject: [PATCH 2/2] check x ping flood simens (Cosmap ha problemi) --- IOB-WIN-NEXT/DATA/CONF/1032.ini | 2 + IOB-WIN-NEXT/IobSiemens.cs | 65 ++++++++++++++++++++++++--------- 2 files changed, 50 insertions(+), 17 deletions(-) diff --git a/IOB-WIN-NEXT/DATA/CONF/1032.ini b/IOB-WIN-NEXT/DATA/CONF/1032.ini index dccb3a66..0540f1d5 100644 --- a/IOB-WIN-NEXT/DATA/CONF/1032.ini +++ b/IOB-WIN-NEXT/DATA/CONF/1032.ini @@ -52,6 +52,8 @@ DISABLE_PZCOUNT=FALSE ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=0 MAX_SEND_PZC_BLOCK=100 +; gestione custom timer +timerIntMs=30 ; GEST DATI DYN ENABLE_DYN_DATA=TRUE FORCE_DYN_DATA=TRUE diff --git a/IOB-WIN-NEXT/IobSiemens.cs b/IOB-WIN-NEXT/IobSiemens.cs index 7eb01309..92a7d33e 100644 --- a/IOB-WIN-NEXT/IobSiemens.cs +++ b/IOB-WIN-NEXT/IobSiemens.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Net.NetworkInformation; +using System.Threading; namespace IOB_WIN_NEXT { @@ -28,6 +29,16 @@ namespace IOB_WIN_NEXT /// protected Plc currPLC; + /// + /// Ultimo controllo ping x evitare ping flood... + /// + protected DateTime lastPingConn = DateTime.Now.AddMinutes(-10); + + /// + /// Esito ultimo ping + /// + protected bool lastPingOk = false; + /// /// Lungh massima stringhe /// @@ -648,39 +659,59 @@ namespace IOB_WIN_NEXT protected bool testCncConn() { bool answ = false; - - IPStatus pingStatus = testPingMachine; - // se passa il ping faccio il resto... - if (pingStatus != IPStatus.Success) + // riduco i controlli ping.. li faccio solo ogni 5 ping period se precedente positivo... + DateTime adesso = DateTime.Now; + if (lastPingOk && adesso.Subtract(lastPingConn).TotalMilliseconds < 5 * parametri.pingMsTimeout) { - lgError($"Errore in testCncConn: reply Status | IP: {parametri.ipAdrr} | {pingStatus} | T.Out: {parametri.pingMsTimeout}ms"); + answ = lastPingOk; } else { - if (!currPLC.IsConnected) - { - currPLC.Open(); - } + IPStatus pingStatus = testPingMachine; - if (!currPLC.IsAvailable) + // se non ok riprovo 1 volta dopo attesa + if (pingStatus != IPStatus.Success) { - lgError(string.Format("PLC Siemens NON disponibile:{0} | {1}", currPLC.LastErrorCode, currPLC.LastErrorString)); - currPLC.ClearLastError(); + Thread.Sleep(2 * cIobConf.pingMsTimeout); + pingStatus = testPingMachine; } + // se non passa ancora errore! + if (pingStatus != IPStatus.Success) + { + lgError($"Errore in testCncConn | reply Status {pingStatus} | IP: {parametri.ipAdrr} | T.Out: {parametri.pingMsTimeout}ms"); + } + // se passa il ping faccio il resto... else { - if (!currPLC.IsConnected && !pingDisabled) + if (!currPLC.IsConnected) { - lgError(string.Format("PLC Siemens NON connesso:{0} | {1}", currPLC.LastErrorCode, currPLC.LastErrorString)); + currPLC.Open(); + } + + if (!currPLC.IsAvailable) + { + lgError($"PLC Siemens NON disponibile:{currPLC.LastErrorCode} | {currPLC.LastErrorString}"); currPLC.ClearLastError(); - parentForm.updateComStats("NO connection"); } else { - parentForm.updateComStats("Connection OK"); - answ = true; + if (!currPLC.IsConnected) + { + lgError($"PLC Siemens NON connesso:{currPLC.LastErrorCode} | {currPLC.LastErrorString}"); + currPLC.ClearLastError(); + parentForm.updateComStats("NO connection"); + } + else + { + // tutto ok + parentForm.updateComStats("Connection OK"); + answ = true; + } } } + // salvo stato ping + lastPingOk = answ; + lastPingConn = adesso; } return answ;