From 020516dcacd456a91eb2ca6a282a22f873ecb0f2 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 27 Mar 2023 12:13:22 +0200 Subject: [PATCH] Fix reboot OPC-UA su mancato udpate info --- IOB-UT-NEXT/plcMemMapExt.cs | 4 ++-- IOB-WIN-NEXT/DATA/CONF/BAGLIETTO_CIMOLAI_01.ini | 1 + IOB-WIN-NEXT/IobOpcUa.cs | 17 ++++++++++++----- IOB-WIN-NEXT/IobOpcUaMBH.cs | 17 +++++++++++++++-- IOB-WIN-NEXT/IobOpcUaMBHCimolai.cs | 15 +++++++++++++-- 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/IOB-UT-NEXT/plcMemMapExt.cs b/IOB-UT-NEXT/plcMemMapExt.cs index 03ae4c07..43b39c9c 100644 --- a/IOB-UT-NEXT/plcMemMapExt.cs +++ b/IOB-UT-NEXT/plcMemMapExt.cs @@ -18,9 +18,9 @@ namespace IOB_UT_NEXT /// public Dictionary fileDecod { get; set; } = new Dictionary(); /// - /// Lista dei path attivi x gestioni IN/OUT varie + /// Lista dei percorsi filepath attivi x gestioni IN/OUT varie /// public Dictionary actPath { get; set; } = new Dictionary(); - + } } diff --git a/IOB-WIN-NEXT/DATA/CONF/BAGLIETTO_CIMOLAI_01.ini b/IOB-WIN-NEXT/DATA/CONF/BAGLIETTO_CIMOLAI_01.ini index 9cda4d7e..49d4672c 100644 --- a/IOB-WIN-NEXT/DATA/CONF/BAGLIETTO_CIMOLAI_01.ini +++ b/IOB-WIN-NEXT/DATA/CONF/BAGLIETTO_CIMOLAI_01.ini @@ -58,6 +58,7 @@ ENABLE_DYN_DATA=FALSE FORCE_DYN_DATA=TRUE ENABLE_DATA_FILTER=TRUE ENABLE_CLI_RESTART=TRUE +MAX_ELAPSED_TIME_SEC=120 MAX_TRY_PING=3 DISABLE_SEND_WDST=TRUE FTP_SERVER=192.168.60.234 diff --git a/IOB-WIN-NEXT/IobOpcUa.cs b/IOB-WIN-NEXT/IobOpcUa.cs index e6d9d136..71b5f083 100644 --- a/IOB-WIN-NEXT/IobOpcUa.cs +++ b/IOB-WIN-NEXT/IobOpcUa.cs @@ -99,12 +99,17 @@ namespace IOB_WIN_NEXT { bool.TryParse(getOptPar("ENABLE_CLI_RESTART"), out enableCliRestart); } + // init lastCurrentMaxElapsed + if (!string.IsNullOrEmpty(getOptPar("MAX_ELAPSED_TIME_SEC"))) + { + int.TryParse(getOptPar("MAX_ELAPSED_TIME_SEC"), out lastCurrentMaxElapsed); + } // init datetime counters DateTime adesso = DateTime.Now; lastPzCountSend = adesso; lastWarnODL = adesso; lastCurrent = adesso; - lgTrace($"Aggiornato IobOpcUa.lastCurrent: {lastCurrent}"); + lgTrace($"Aggiornato IobOpcUa.lastCurrent: {lastCurrent}"); // ora leggo il file di conf specifico.... string jsonFileName = getOptPar("OPC_PARAM_CONF"); if (!string.IsNullOrEmpty(jsonFileName)) @@ -256,7 +261,7 @@ namespace IOB_WIN_NEXT /// /// Periodo massimo (in sec) per letture dati RAW in mancanza di eventi /// - protected int lastCurrentMaxElapsed { get; set; } = 120; + protected int lastCurrentMaxElapsed = 120; /// /// Parametri specifici MTC @@ -1020,10 +1025,12 @@ namespace IOB_WIN_NEXT // bit 0 (poweron) imposto a 1 SE pingo + PowerOn=="ON"... bool powerOnOk = checkPing && hasPowerOn; - // controllo se sono poweroff e se non ho dati buoni da > lastCurrentMaxElapsed --> disconnetto - if (!powerOnOk && (adesso.Subtract(lastCurrent).TotalSeconds > lastCurrentMaxElapsed)) + //// controllo se sono poweroff e se non ho dati buoni da > lastCurrentMaxElapsed --> disconnetto + //if (!powerOnOk && (adesso.Subtract(lastCurrent).TotalSeconds > lastCurrentMaxElapsed)) + // controllo se non ho dati buoni da > lastCurrentMaxElapsed sec --> disconnetto + if (adesso.Subtract(lastCurrent).TotalSeconds > lastCurrentMaxElapsed) { - lgInfo("Timeout per mancata comunicazione --> disconnessione adapter OpcUa!"); + lgInfo($"Timeout per mancata comunicazione da oltre {lastCurrentMaxElapsed} sec --> disconnessione adapter OpcUa!"); tryDisconnect(); } diff --git a/IOB-WIN-NEXT/IobOpcUaMBH.cs b/IOB-WIN-NEXT/IobOpcUaMBH.cs index 08acf7ff..7031f4c2 100644 --- a/IOB-WIN-NEXT/IobOpcUaMBH.cs +++ b/IOB-WIN-NEXT/IobOpcUaMBH.cs @@ -25,6 +25,16 @@ namespace IOB_WIN_NEXT { CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); } + // gestione restart OpcUa client... + if (!string.IsNullOrEmpty(getOptPar("ENABLE_CLI_RESTART"))) + { + bool.TryParse(getOptPar("ENABLE_CLI_RESTART"), out enableCliRestart); + } + // init lastCurrentMaxElapsed + if (!string.IsNullOrEmpty(getOptPar("MAX_ELAPSED_TIME_SEC"))) + { + int.TryParse(getOptPar("MAX_ELAPSED_TIME_SEC"), out lastCurrentMaxElapsed); + } sendKeyRichiesta = true; } @@ -245,9 +255,12 @@ namespace IOB_WIN_NEXT lgTrace("WatchDog disabilitato"); } - // controllo se sono poweroff e se non ho dati buoni da > 2 minuti --> disconnetto - if (!powerOnOk && adesso.Subtract(lastCurrent).TotalMinutes > 2) + //// controllo se sono poweroff e se non ho dati buoni da > 2 minuti --> disconnetto + //if (!powerOnOk && adesso.Subtract(lastCurrent).TotalMinutes > 2) + // controllo se non ho dati buoni da > lastCurrentMaxElapsed sec --> disconnetto + if (adesso.Subtract(lastCurrent).TotalSeconds > lastCurrentMaxElapsed) { + lgInfo($"Timeout per mancata comunicazione da oltre {lastCurrentMaxElapsed} sec --> disconnessione adapter OpcUa!"); tryDisconnect(); } diff --git a/IOB-WIN-NEXT/IobOpcUaMBHCimolai.cs b/IOB-WIN-NEXT/IobOpcUaMBHCimolai.cs index 55d50ba3..8f41f1db 100644 --- a/IOB-WIN-NEXT/IobOpcUaMBHCimolai.cs +++ b/IOB-WIN-NEXT/IobOpcUaMBHCimolai.cs @@ -34,6 +34,16 @@ namespace IOB_WIN_NEXT int.TryParse(strVETO_SEND_SNAPSHOT, out VETO_SEND_SNAPSHOT); lgInfo($"VETO_SEND_SNAPSHOT: {VETO_SEND_SNAPSHOT}"); } + // gestione restart OpcUa client... + if (!string.IsNullOrEmpty(getOptPar("ENABLE_CLI_RESTART"))) + { + bool.TryParse(getOptPar("ENABLE_CLI_RESTART"), out enableCliRestart); + } + // init lastCurrentMaxElapsed + if (!string.IsNullOrEmpty(getOptPar("MAX_ELAPSED_TIME_SEC"))) + { + int.TryParse(getOptPar("MAX_ELAPSED_TIME_SEC"), out lastCurrentMaxElapsed); + } sendKeyRichiesta = true; @@ -453,9 +463,10 @@ namespace IOB_WIN_NEXT } } - // controllo se sono poweroff e se non ho dati buoni da > 2 minuti --> disconnetto - if (!powerOnOk && adesso.Subtract(lastCurrent).TotalMinutes > 2) + // controllo se non ho dati buoni da > lastCurrentMaxElapsed sec --> disconnetto + if (adesso.Subtract(lastCurrent).TotalSeconds > lastCurrentMaxElapsed) { + lgInfo($"Timeout per mancata comunicazione da oltre {lastCurrentMaxElapsed} sec --> disconnessione adapter OpcUa!"); tryDisconnect(); }