diff --git a/IOB-UT-NEXT/Config/Base/OdlDto.cs b/IOB-UT-NEXT/Config/Base/OdlDto.cs index 15d52058..88925f50 100644 --- a/IOB-UT-NEXT/Config/Base/OdlDto.cs +++ b/IOB-UT-NEXT/Config/Base/OdlDto.cs @@ -21,22 +21,23 @@ namespace IOB_UT_NEXT.Config.Base /// /// Modalità di esecuzione del cambio ODL automatico (tipicamente a tempo/simulazione su qty) + /// - TIME (default) /// - SIMUL /// - DAILY /// - ... /// - public string ChangeOdlMode { get; set; } = ""; + public string ChangeOdlMode { get; set; } = "TIME"; /// - /// Numero di ore di durata minima (ODL corrente) prima di eseguire una richiesta di cambio ODL automatico + /// Durata minima ODL in Ore (ODL corrente) prima di eseguire una richiesta di cambio ODL automatico /// - public int ChangeOdlHours { get; set; } = 24; + public int OdlDurationHours { get; set; } = 24; /// /// Durata minima in minuti dello stato idle prima di eseguire una richiesta di cambio ODL /// Serve ad evitare un cambio ODL mentre la amcchina è in RUN /// - public int ChangeOdlIdleMin { get; set; } = 0; + public int IdleStateMin { get; set; } = 0; /// /// Abilitazione cambio ODL in caso di Reset Contapezzi guardando parametri ResetCount Min/Max... @@ -56,8 +57,8 @@ namespace IOB_UT_NEXT.Config.Base #if false /// /// Parametri opzionali di configurazione cambio ODL, ad esempio - /// - ChangeOdlHours - /// - ChangeOdlIdleMin + /// - OdlDurationHours + /// - IdleStateMin /// - ResetMinCountPre /// - ResetMaxCountPost /// diff --git a/IOB-UT-NEXT/Config/IobConfTree.cs b/IOB-UT-NEXT/Config/IobConfTree.cs index dc5e018c..7a544b33 100644 --- a/IOB-UT-NEXT/Config/IobConfTree.cs +++ b/IOB-UT-NEXT/Config/IobConfTree.cs @@ -158,12 +158,14 @@ namespace IOB_UT_NEXT.Config { AutoChangeOdl = bool.Parse(fIni.ReadString("OPTPAR", "AUTO_CHANGE_ODL", "false")), ChangeOdlMode = fIni.ReadString("OPTPAR", "CHANGE_ODL_MODE", ""), - ChangeOdlHours = fIni.ReadInteger("OPTPAR", "CHANGE_ODL_HOURS", 24), - ChangeOdlIdleMin = fIni.ReadInteger("OPTPAR", "CHANGE_ODL_IDLE_MIN", 0), + OdlDurationHours = fIni.ReadInteger("OPTPAR", "CHANGE_ODL_HOURS", 24), + IdleStateMin = fIni.ReadInteger("OPTPAR", "CHANGE_ODL_IDLE_MIN", 0), // il change ODL al reset contapezzi può essere configurato in 2 modi: con chiave esplicita oppure con il CHANGE_ODL_MODE specifico... ChangeOnResetCount = bool.Parse(fIni.ReadString("OPTPAR", "CHANGE_PZCOUNT_RESET", "false")) || (fIni.ReadString("OPTPAR", "CHANGE_ODL_MODE", "") == "PZCOUNT_RESET"), - ResetCountMinPre = fIni.ReadInteger("OPTPAR", "RESET_COUNT_PRE", 100), - ResetCountMaxPost = fIni.ReadInteger("OPTPAR", "RESET_COUNT_POST", 1), + // gestione precedente: bastava 1 solo pezzo pre... + ResetCountMinPre = fIni.ReadInteger("OPTPAR", "RESET_COUNT_PRE", 1), + // e reset a zero... + ResetCountMaxPost = fIni.ReadInteger("OPTPAR", "RESET_COUNT_POST", 0), }; exclOptPar.Add("AUTO_CHANGE_ODL"); diff --git a/IOB-WIN-FORM/Iob/Generic.cs b/IOB-WIN-FORM/Iob/Generic.cs index 4ef4f559..bc53ec88 100644 --- a/IOB-WIN-FORM/Iob/Generic.cs +++ b/IOB-WIN-FORM/Iob/Generic.cs @@ -1890,9 +1890,10 @@ namespace IOB_WIN_FORM.Iob public void processAutoOdl() { bool fatto = false; - if (!string.IsNullOrEmpty(getOptPar("AUTO_CHANGE_ODL"))) + //if (!string.IsNullOrEmpty(getOptPar("AUTO_CHANGE_ODL"))) + if (IOBConfFull.Odl.AutoChangeOdl) { - lgTrace("Richiesta processAutoOdl"); + lgTrace("processAutoOdl | AutoChangeOdl abilitato"); // imposto il veto lettura contapezzi a 1 minuto x iniziare... dtVetoReadPzCount = DateTime.Now.AddMinutes(delayMinReadPzCount); string IOB_MULTI_CNAME = ""; @@ -1904,8 +1905,6 @@ namespace IOB_WIN_FORM.Iob IOB_MULTI_CNAME = getOptPar("IOB_MULTI_CNAME"); elencoMulti = IOB_MULTI_CNAME.Split(','); } - // controllo SIA abilitato... - bool doProc = false; DateTime adesso = DateTime.Now; DateTime inizioOdl = adesso; string rawDataInizio = ""; @@ -1915,18 +1914,14 @@ namespace IOB_WIN_FORM.Iob } else { - bool.TryParse(getOptPar("AUTO_CHANGE_ODL"), out doProc); - if (doProc) + bool callChangeODL = false; + switch (IOBConfFull.Odl.ChangeOdlMode) { - lgTrace("AUTO_CHANGE_ODL abilitato"); - bool callChangeODL = false; - - if (CHANGE_ODL_MODE == "PZCOUNT_RESET") - { + case "PZCOUNT_RESET": /* verifico se sia "armato" il reset cambio ODL, DEVO essere : - * - NON in produzione - * - contapezzi ACT < contapezzi LAST - * */ + * - NON in produzione + * - contapezzi ACT < contapezzi LAST + * */ lgTrace("processAutoOdl: caso PZCOUNT_RESET"); if ((!isRunning || forceResetInRun) && pzCountResetted) { @@ -1937,9 +1932,8 @@ namespace IOB_WIN_FORM.Iob { lgInfo($"isRunning: {isRunning} | pzCountResetted: {pzCountResetted} | forceResetInRun: {forceResetInRun} | contapezziIOB: {contapezziIOB} | contapezziPLC: {contapezziPLC}"); } - } - else if (CHANGE_ODL_MODE == "DAILY") - { + break; + case "DAILY": // verifico inizio ODL, se è data di oggi NON eseguo... if (currOdlStart().Date < adesso.Date) { @@ -1949,9 +1943,8 @@ namespace IOB_WIN_FORM.Iob string autoOdlRes = utils.callUrl(urlFixDailyOdl); fatto = autoOdlRes == "OK"; } - } - else if (CHANGE_ODL_MODE == "DAILY_CONF_PZ") - { + break; + case "DAILY_CONF_PZ": // verifico inizio ODL, se è data di oggi NON eseguo... if (currOdlStart().Date < adesso.Date) { @@ -1961,106 +1954,221 @@ namespace IOB_WIN_FORM.Iob string autoOdlRes = utils.callUrl(urlFixDailyOdlConfPzCount); fatto = autoOdlRes == "OK"; } - } - else if (CHANGE_ODL_MODE == "TIME" || CHANGE_ODL_MODE == "SIMUL") - { + break; + case "SIMUL": + case "TIME": // imposto x prox controllo veto a 1 min VetoProcessAutoOdl = adesso.AddMinutes(1); - // carico i parametri di configurazione x reset ODL... - string CHANGE_ODL_HOURS = getOptPar("CHANGE_ODL_HOURS"); - string CHANGE_ODL_IDLE_MIN = getOptPar("CHANGE_ODL_IDLE_MIN"); - if (!string.IsNullOrEmpty(CHANGE_ODL_HOURS) && !string.IsNullOrEmpty(CHANGE_ODL_IDLE_MIN)) + // controllo parametri validi + if (IOBConfFull.Odl.OdlDurationHours > 0 && IOBConfFull.Odl.IdleStateMin >= 0) { - int minOdlDurHours = -1; - int minPlcIdelMin = -1; - int.TryParse(CHANGE_ODL_HOURS, out minOdlDurHours); - int.TryParse(CHANGE_ODL_IDLE_MIN, out minPlcIdelMin); - // controllo parametri validi - if (minOdlDurHours > 0 && minPlcIdelMin >= 0) + // leggo da server inizio ODL... se non multi 1 solo... + inizioOdl = DateTime.Now; + rawDataInizio = ""; + if (!isMulti) { - // leggo da server inizio ODL... se non multi 1 solo... - inizioOdl = DateTime.Now; - rawDataInizio = ""; + rawDataInizio = callUrl(urlInizioOdlIob, false); + DateTime.TryParse(rawDataInizio, out inizioOdl); + } + else + { + DateTime tmpData = DateTime.Now; + // prendo il + vecchio... + foreach (var item in elencoMulti) + { + fullUrl = $"{urlInizioOdlIob}|{item}"; + rawDataInizio = callUrl(fullUrl, false); + DateTime.TryParse(rawDataInizio, out tmpData); + inizioOdl = (tmpData < inizioOdl) ? tmpData : inizioOdl; + } + } + // verifico se sia scaduto... + if (inizioOdl.AddHours(IOBConfFull.Odl.OdlDurationHours) < adesso) + { + string rawIdle = ""; + int idlePeriod = 0; if (!isMulti) { - rawDataInizio = callUrl(urlInizioOdlIob, false); - DateTime.TryParse(rawDataInizio, out inizioOdl); + // controllo SE sono fermo (spento o in manuale) per il + // periodo minimo richiesto... + rawIdle = callUrl(urlIdleTime, false); + int.TryParse(rawIdle, out idlePeriod); } else { - DateTime tmpData = DateTime.Now; - // prendo il + vecchio... + int tmpIdle = 0; + // prendo il + grande... foreach (var item in elencoMulti) { - fullUrl = $"{urlInizioOdlIob}|{item}"; - rawDataInizio = callUrl(fullUrl, false); - DateTime.TryParse(rawDataInizio, out tmpData); - inizioOdl = (tmpData < inizioOdl) ? tmpData : inizioOdl; + fullUrl = $"{urlIdleTime}|{item}"; + rawIdle = callUrl(fullUrl, false); + int.TryParse(rawIdle, out tmpIdle); + idlePeriod = tmpIdle > idlePeriod ? tmpIdle : idlePeriod; } } - // verifico se sia scaduto... - if (inizioOdl.AddHours(minOdlDurHours) < adesso) + if (idlePeriod >= IOBConfFull.Odl.IdleStateMin) { - string rawIdle = ""; - int idlePeriod = 0; - if (!isMulti) - { - // controllo SE sono fermo (spento o in manuale) per il - // periodo minimo richiesto... - rawIdle = callUrl(urlIdleTime, false); - int.TryParse(rawIdle, out idlePeriod); - } - else - { - int tmpIdle = 0; - // prendo il + grande... - foreach (var item in elencoMulti) - { - fullUrl = $"{urlIdleTime}|{item}"; - rawIdle = callUrl(fullUrl, false); - int.TryParse(rawIdle, out tmpIdle); - idlePeriod = tmpIdle > idlePeriod ? tmpIdle : idlePeriod; - } - } - if (idlePeriod >= minPlcIdelMin) - { - callChangeODL = true; - } - } - } - // se NON fosse scaduto MA è simulato esegue controllo sul num pezzi da - // fare, se sfora (RANDOM) > +(50...110)% --> cambia! - if (!callChangeODL && CHANGE_ODL_MODE == "SIMUL") - { - var rawCount = callUrl(urlGetNumPzCurrODL, false); - if (int.TryParse(rawCount, out var numPzReqOdl)) - { - int limitQty = (numPzReqOdl * rndGen.Next(150, 210)) / 100; - callChangeODL = contapezziPLC > limitQty; + callChangeODL = true; } } } - } + // se NON fosse scaduto MA è simulato esegue controllo sul num pezzi da + // fare, se sfora (RANDOM) > +(50...110)% --> cambia! + if (!callChangeODL && IOBConfFull.Odl.ChangeOdlMode == "SIMUL") + { + var rawCount = callUrl(urlGetNumPzCurrODL, false); + if (int.TryParse(rawCount, out var numPzReqOdl)) + { + int limitQty = (numPzReqOdl * rndGen.Next(150, 210)) / 100; + callChangeODL = contapezziPLC > limitQty; + } + } + break; + default: + break; + } - // vero processing... - if (callChangeODL) +#if false + if (IOBConfFull.Odl.ChangeOdlMode == "PZCOUNT_RESET") + { + /* verifico se sia "armato" il reset cambio ODL, DEVO essere : + * - NON in produzione + * - contapezzi ACT < contapezzi LAST + * */ + lgTrace("processAutoOdl: caso PZCOUNT_RESET"); + if ((!isRunning || forceResetInRun) && pzCountResetted) { - lgTrace("Chiamata: processAutoOdl --> forceSplitODL"); - fatto = forceSplitOdl(); - pzCountResetted = false; - lgInfo("Esecuzione processAutoOdl completata --> pzCountResetted = false"); + callChangeODL = true; + lgInfo("Attivato cambio ODL da PZCOUNT_RESET"); + } + else + { + lgInfo($"isRunning: {isRunning} | pzCountResetted: {pzCountResetted} | forceResetInRun: {forceResetInRun} | contapezziIOB: {contapezziIOB} | contapezziPLC: {contapezziPLC}"); } } - else + else if (IOBConfFull.Odl.ChangeOdlMode == "DAILY") { - lgTrace("AUTO_CHANGE_ODL DISABILITATO"); + // verifico inizio ODL, se è data di oggi NON eseguo... + if (currOdlStart().Date < adesso.Date) + { + // imposto x prox controllo veto a 10 min + VetoProcessAutoOdl = adesso.AddMinutes(10); + // chiamo stored x creare ODL giornalieri alla data... + string autoOdlRes = utils.callUrl(urlFixDailyOdl); + fatto = autoOdlRes == "OK"; + } + } + else if (IOBConfFull.Odl.ChangeOdlMode == "DAILY_CONF_PZ") + { + // verifico inizio ODL, se è data di oggi NON eseguo... + if (currOdlStart().Date < adesso.Date) + { + // imposto x prox controllo veto a 10 min + VetoProcessAutoOdl = adesso.AddMinutes(10); + // chiamo stored x creare ODL giornalieri alla data + conferma pezzi... + string autoOdlRes = utils.callUrl(urlFixDailyOdlConfPzCount); + fatto = autoOdlRes == "OK"; + } + } + else if (IOBConfFull.Odl.ChangeOdlMode == "TIME" || IOBConfFull.Odl.ChangeOdlMode == "SIMUL") + { + // imposto x prox controllo veto a 1 min + VetoProcessAutoOdl = adesso.AddMinutes(1); + // carico i parametri di configurazione x reset ODL... + string CHANGE_ODL_HOURS = getOptPar("CHANGE_ODL_HOURS"); + string CHANGE_ODL_IDLE_MIN = getOptPar("CHANGE_ODL_IDLE_MIN"); + if (!string.IsNullOrEmpty(CHANGE_ODL_HOURS) && !string.IsNullOrEmpty(CHANGE_ODL_IDLE_MIN)) + { + int minOdlDurHours = -1; + int minPlcIdelMin = -1; + int.TryParse(CHANGE_ODL_HOURS, out minOdlDurHours); + int.TryParse(CHANGE_ODL_IDLE_MIN, out minPlcIdelMin); + // controllo parametri validi + if (minOdlDurHours > 0 && minPlcIdelMin >= 0) + { + // leggo da server inizio ODL... se non multi 1 solo... + inizioOdl = DateTime.Now; + rawDataInizio = ""; + if (!isMulti) + { + rawDataInizio = callUrl(urlInizioOdlIob, false); + DateTime.TryParse(rawDataInizio, out inizioOdl); + } + else + { + DateTime tmpData = DateTime.Now; + // prendo il + vecchio... + foreach (var item in elencoMulti) + { + fullUrl = $"{urlInizioOdlIob}|{item}"; + rawDataInizio = callUrl(fullUrl, false); + DateTime.TryParse(rawDataInizio, out tmpData); + inizioOdl = (tmpData < inizioOdl) ? tmpData : inizioOdl; + } + } + // verifico se sia scaduto... + if (inizioOdl.AddHours(minOdlDurHours) < adesso) + { + string rawIdle = ""; + int idlePeriod = 0; + if (!isMulti) + { + // controllo SE sono fermo (spento o in manuale) per il + // periodo minimo richiesto... + rawIdle = callUrl(urlIdleTime, false); + int.TryParse(rawIdle, out idlePeriod); + } + else + { + int tmpIdle = 0; + // prendo il + grande... + foreach (var item in elencoMulti) + { + fullUrl = $"{urlIdleTime}|{item}"; + rawIdle = callUrl(fullUrl, false); + int.TryParse(rawIdle, out tmpIdle); + idlePeriod = tmpIdle > idlePeriod ? tmpIdle : idlePeriod; + } + } + if (idlePeriod >= minPlcIdelMin) + { + callChangeODL = true; + } + } + } + // se NON fosse scaduto MA è simulato esegue controllo sul num pezzi da + // fare, se sfora (RANDOM) > +(50...110)% --> cambia! + if (!callChangeODL && IOBConfFull.Odl.ChangeOdlMode == "SIMUL") + { + var rawCount = callUrl(urlGetNumPzCurrODL, false); + if (int.TryParse(rawCount, out var numPzReqOdl)) + { + int limitQty = (numPzReqOdl * rndGen.Next(150, 210)) / 100; + callChangeODL = contapezziPLC > limitQty; + } + } + } + } +#endif + + // vero processing... + if (callChangeODL) + { + lgTrace("Chiamata: processAutoOdl --> forceSplitODL"); + fatto = forceSplitOdl(); + pzCountResetted = false; + lgInfo("Esecuzione processAutoOdl completata --> pzCountResetted = false"); } } } + else + { + lgTrace("processAutoOdl | AutoChangeOdl DISABILITATO"); + } // loggo se ok + processing post opzionali if (fatto) { - lgInfo($"Effettuato processAutoOdl | mode: {CHANGE_ODL_MODE}"); + lgInfo($"Effettuato processAutoOdl | mode: {IOBConfFull.Odl.ChangeOdlMode}"); processAutoOdlExtraStep(); } } @@ -3546,10 +3654,12 @@ namespace IOB_WIN_FORM.Iob /// protected int B_previous = -1; +#if false /// /// Modalità cambio ODL /// - protected string CHANGE_ODL_MODE = ""; + protected string CHANGE_ODL_MODE = ""; +#endif /// /// Cod grupo IOB x creazione PODL al volo @@ -8264,12 +8374,14 @@ namespace IOB_WIN_FORM.Iob { bool.TryParse(getOptPar("ENABLE_SLOW_DATA"), out enableSlowData); } +#if false // modalità change ODL CHANGE_ODL_MODE = "TIME"; if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) { CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } + } +#endif if (!string.IsNullOrEmpty(getOptPar("ENABLE_MEM_REWRITE"))) { bool.TryParse(getOptPar("ENABLE_MEM_REWRITE"), out ENABLE_MEM_REWRITE); diff --git a/IOB-WIN-OPC-UA/DATA/CONF/TFT_RAMA_001.ini b/IOB-WIN-OPC-UA/DATA/CONF/TFT_RAMA_001.ini index 5da8bfa5..e84e5afc 100644 --- a/IOB-WIN-OPC-UA/DATA/CONF/TFT_RAMA_001.ini +++ b/IOB-WIN-OPC-UA/DATA/CONF/TFT_RAMA_001.ini @@ -50,6 +50,9 @@ BLINK_FILT=0 AUTO_CHANGE_ODL=TRUE ;CHANGE_ODL_MODE=PZCOUNT_RESET CHANGE_ODL_MODE=DAILY_CONF_PZ +CHANGE_PZCOUNT_RESET=TRUE +RESET_COUNT_PRE=100 +RESET_COUNT_POST=20 PZCOUNT_MODE=OPC DISABLE_PZCOUNT=FALSE ENABLE_SEND_PZC_BLOCK=TRUE diff --git a/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj b/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj index 4d0e12ee..d2a001d9 100644 --- a/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj +++ b/IOB-WIN-OPC-UA/IOB-WIN-OPC-UA.csproj @@ -245,9 +245,15 @@ Always - - - + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + Always diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs index 4cc2da3e..545db797 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUa.cs @@ -48,10 +48,6 @@ namespace IOB_WIN_OPC_UA.IobOpc int.TryParse(getOptPar("MAX_TRY_PING"), out maxTryPing); } - - - - // gestione data filtering... if (!string.IsNullOrEmpty(getOptPar("ENABLE_DATA_FILTER"))) { @@ -472,15 +468,30 @@ namespace IOB_WIN_OPC_UA.IobOpc { if (enablePzCountByApp) { - if (string.IsNullOrEmpty(opcUaParams.keyPartCount)) + bool hasReset = false; + string currPzCount = ""; + // modalità 1: verifico se ho condizioni di abilitazione del contapezzi + if (checkMultiCondition(opcUaParams.condCountEnabled) || opcUaParams.condCountEnabled.checkList.Count == 0) { - lgTrace("Gestione contapezzi: manca parametro per keyPartCount"); + lgTrace($"processContapezzi | check 01 | opcUaParams.keyPartCount: {opcUaParams.keyPartCount}"); + // cerco parametro contapezzi... + currPzCount = getDataItemValue(opcUaParams.keyPartCount); } else { + lgTrace("processContapezzi | check 01 | manca parametro per keyPartCount"); + } + + // modalità 2: verifico conf di keyPartCount + if (string.IsNullOrEmpty(opcUaParams.keyPartCount)) + { + lgTrace("processContapezzi | check 02 | check 022 | manca parametro per keyPartCount"); + } + else + { + lgTrace($"processContapezzi | check 02 | opcUaParams.keyPartCount: {opcUaParams.keyPartCount}"); // cerco parametro contapezzi... gest alternativa se è un parametro SPECIALE // (con "#") - string currPzCount = ""; if (opcUaParams.keyPartCount.Contains(opcUaParams.kvDelim)) { int iPos = opcUaParams.keyPartCount.IndexOf(opcUaParams.kvDelim); @@ -495,38 +506,58 @@ namespace IOB_WIN_OPC_UA.IobOpc currPzCount = getDataItemValue(opcUaParams.keyPartCount); } - // se ho un contapezzi... processo... - if (!string.IsNullOrEmpty(currPzCount)) + } + + // se ho un contapezzi... processo... + if (!string.IsNullOrEmpty(currPzCount)) + { + int newVal = -1; + bool fatto = Int32.TryParse(currPzCount, out newVal); + + if (fatto) { - int newVal = -1; - bool fatto = Int32.TryParse(currPzCount, out newVal); - - if (fatto) + // gestione decremento contapezzi: viene "messo via" solo SE c'è un + // effettivo decremento contapezzi... + if (newVal < contapezziPLC) { - // gestione decremento contapezzi: viene "messo via" solo SE c'è un - // effettivo decremento contapezzi... - if (newVal < contapezziPLC) - { - pzCountResetted = true; - // incremento contatore richiesta - countKeyRichiesta = countKeyRichiesta + 1; - // log - lgInfo("Contapezzi resettato (PLC) --> pzCountResetted = true"); - } + hasReset = true; + // incremento contatore richiesta + countKeyRichiesta = countKeyRichiesta + 1; + // log + lgInfo("Rilevato Reset Contapezzi PLC 01"); + } - // salvo nuovo valore contapezziPLC - contapezziPLC = newVal > -1 ? newVal : contapezziPLC; - } - else - { - lgError($"Errore in decodifica valore contapezzi, valore rilevato: {currPzCount}"); - } + // salvo nuovo valore contapezziPLC + contapezziPLC = newVal > -1 ? newVal : contapezziPLC; } else { - lgError("Errore in decodifica valore contapezzi, valore vuoto!"); + lgError($"Errore in decodifica valore contapezzi, valore rilevato: {currPzCount}"); } } + else + { + lgError($"Errore in decodifica valore contapezzi da {opcUaParams.keyPartCount} | valore vuoto!"); + } + + + // controllo comunque, se è ZERO il contapezzi, e sul server è maggiore il + // valore x ODL e NON abilitato il trigger reset --> abilito trigger... + if (!pzCountResetted && contapezziPLC <= IOBConfFull.Odl.ResetCountMaxPost && contapezziIOB >= IOBConfFull.Odl.ResetCountMinPre) + { + hasReset = true; + // incremento contatore richiesta + countKeyRichiesta = countKeyRichiesta + 1; + // log + lgInfo($"Rilevato Reset Contapezzi PLC 02 | PLC = {contapezziPLC} <= {IOBConfFull.Odl.ResetCountMaxPost} | IOB = {contapezziIOB} >= {IOBConfFull.Odl.ResetCountMinPre}) | pzCountResetted = true"); + } + + // 2025.03.05 calcolo condizione contapezzi con NUOVO CONF + if (IOBConfFull.Odl.ChangeOnResetCount) + { + pzCountResetted = hasReset; + lgInfo("Registrato trigger pzCountResetted"); + } } } diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaCMS.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaCMS.cs index 05c5a427..366b4189 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaCMS.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaCMS.cs @@ -23,13 +23,8 @@ namespace IOB_WIN_OPC_UA.IobOpc /// Configurazione (v 4.x) public OpcUaCMS(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } - - // impostazioni specifiche OpcUA SCM + // impostazioni specifiche OpcUA CMS/SCM + lgInfo("Start adapter OpcUaCMS"); } #endregion Public Constructors @@ -46,6 +41,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -92,7 +88,7 @@ namespace IOB_WIN_OPC_UA.IobOpc } } - if (CHANGE_ODL_MODE == "PZCOUNT_RESET") + if (IOBConfFull.Odl.ChangeOdlMode == "PZCOUNT_RESET") { // controllo comunque, se è ZERO il contapezzi, e sul server è maggiore il // valore x ODL e NON abilitato il trigger reset --> abilito trigger... @@ -103,10 +99,11 @@ namespace IOB_WIN_OPC_UA.IobOpc countKeyRichiesta = countKeyRichiesta + 1; // log lgInfo("Contapezzi resettato (PLC==0 e IOB>PLC) --> pzCountResetted = true"); - } + } } } } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwon.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwon.cs index 02328008..8cd30820 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwon.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwon.cs @@ -23,11 +23,7 @@ namespace IOB_WIN_OPC_UA.IobOpc /// Configurazione (v 4.x) public OpcUaEwon(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } + lgInfo("Start adapter OpcUaEwon"); sendKeyRichiesta = true; } @@ -45,6 +41,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -105,7 +102,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonAdige.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonAdige.cs index 7d7477b1..e6a4f870 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonAdige.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonAdige.cs @@ -22,12 +22,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaEwonAdige(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init Ewon versione Adige/BLM"); - - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; } diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonBLM.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonBLM.cs index 51f50499..59e37952 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonBLM.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonBLM.cs @@ -20,12 +20,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaEwonBLM(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init Ewon versione BLM (Mecart)"); - - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; } diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMecolpress.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMecolpress.cs index 26ff9056..88f782c8 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMecolpress.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMecolpress.cs @@ -22,12 +22,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaEwonMecolpress(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init Ewon versione Mecolpress (STEL)"); - - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; } diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMonti.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMonti.cs index 63270e0e..0ca973b5 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMonti.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaEwonMonti.cs @@ -23,11 +23,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaEwonMonti(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init Ewon versione Monti (Tenditalia)"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } // impostazioni specifiche Ewon di Monti forceResetInRun = true; sendKeyRichiesta = true; @@ -37,6 +32,7 @@ namespace IOB_WIN_OPC_UA.IobOpc #region Public Methods +#if false /// /// Effettua vero processing contapezzi /// @@ -97,7 +93,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif #endregion Public Methods diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaImas.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaImas.cs index e4ee2740..03f32d90 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaImas.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaImas.cs @@ -24,11 +24,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaImas(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init OpcUa IMAS"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; } @@ -46,6 +41,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -106,7 +102,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaKpw.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaKpw.cs index b367d4a8..09493a44 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaKpw.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaKpw.cs @@ -24,11 +24,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaKpw(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init OpcUa Kepware"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } // gestione restart OpcUa client... if (!string.IsNullOrEmpty(getOptPar("ENABLE_CLI_RESTART"))) { @@ -48,6 +43,7 @@ namespace IOB_WIN_OPC_UA.IobOpc +#if false /// /// Effettua vero processing contapezzi /// @@ -108,7 +104,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaKpwRama.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaKpwRama.cs index 0e1ac77e..eea60b6f 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaKpwRama.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaKpwRama.cs @@ -27,11 +27,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaKpwRama(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init OpcUa Kepware x RAMA"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } // gestione restart OpcUa client... if (!string.IsNullOrEmpty(getOptPar("ENABLE_CLI_RESTART"))) { diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaMBH.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaMBH.cs index f3b0b27d..0e6bb48b 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaMBH.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaMBH.cs @@ -24,11 +24,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaMBH(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init OpcUa MBH"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } // gestione restart OpcUa client... if (!string.IsNullOrEmpty(getOptPar("ENABLE_CLI_RESTART"))) { @@ -56,6 +51,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -116,7 +112,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaMBHCimolai.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaMBHCimolai.cs index b67f7758..e02eb0b1 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaMBHCimolai.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaMBHCimolai.cs @@ -27,11 +27,6 @@ namespace IOB_WIN_OPC_UA.IobOpc lgInfo("Init OpcUa MBH versione Cimolai (Baglietto)"); // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - lgInfo($"CHANGE_ODL_MODE: {CHANGE_ODL_MODE}"); - } if (!string.IsNullOrEmpty(getOptPar("VETO_SEND_SNAPSHOT"))) { string strVETO_SEND_SNAPSHOT = getOptPar("VETO_SEND_SNAPSHOT"); diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs index c3604dd4..88be07ad 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmron.cs @@ -23,12 +23,8 @@ namespace IOB_WIN_OPC_UA.IobOpc /// Configurazione (v 4.x) public OpcUaOmron(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; + lgInfo("Avvio OpcUaOmron"); } #endregion Public Constructors @@ -45,6 +41,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -105,7 +102,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronIcoel.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronIcoel.cs index 050d75df..1ce90fa3 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronIcoel.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaOmronIcoel.cs @@ -213,10 +213,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaOmronIcoel(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; doByteRead = true; lgInfo($"Avviato IobOpcUaOmronIcoel | encodeReadData: {doByteRead}"); diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs index 71213c58..24ab10d0 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemens.cs @@ -28,11 +28,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaSiemens(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init OpcUa Siemens"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } // gestione restart OpcUa client... if (!string.IsNullOrEmpty(getOptPar("ENABLE_CLI_RESTART"))) { @@ -114,6 +109,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -188,7 +184,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemensOMP.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemensOMP.cs index a764be2a..245b4b97 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemensOMP.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaSiemensOMP.cs @@ -21,14 +21,8 @@ namespace IOB_WIN_OPC_UA.IobOpc /// Configurazione (v 4.x) public OpcUaSiemensOMP(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { - lgInfo("Init OpcUa Siemens versione OMP (Cereria Finassi)"); - - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; + lgInfo("Init OpcUa Siemens versione OMP (Cereria Finassi)"); } #endregion Public Constructors diff --git a/IOB-WIN-OPC-UA/IobOpc/OpcUaUlma.cs b/IOB-WIN-OPC-UA/IobOpc/OpcUaUlma.cs index a11f1305..61986ea3 100644 --- a/IOB-WIN-OPC-UA/IobOpc/OpcUaUlma.cs +++ b/IOB-WIN-OPC-UA/IobOpc/OpcUaUlma.cs @@ -24,11 +24,6 @@ namespace IOB_WIN_OPC_UA.IobOpc public OpcUaUlma(AdapterFormNext caller, IobConfTree IobConfFull) : base(caller, IobConfFull) { lgInfo("Init OpcUa ULMA"); - // inizializzo classe base... - if (!string.IsNullOrEmpty(getOptPar("CHANGE_ODL_MODE"))) - { - CHANGE_ODL_MODE = getOptPar("CHANGE_ODL_MODE"); - } sendKeyRichiesta = true; } @@ -46,6 +41,7 @@ namespace IOB_WIN_OPC_UA.IobOpc return base.executeTasks(task2exe); } +#if false /// /// Effettua vero processing contapezzi /// @@ -106,7 +102,8 @@ namespace IOB_WIN_OPC_UA.IobOpc } } } - } + } +#endif /// /// Effettua reset del contapezzi, NON POSSIBILE in questa versione diff --git a/IOB-WIN-OPC-UA/postBuildTgt.bat b/IOB-WIN-OPC-UA/postBuildTgt.bat index 4b94843d..ec8d4bd3 100644 --- a/IOB-WIN-OPC-UA/postBuildTgt.bat +++ b/IOB-WIN-OPC-UA/postBuildTgt.bat @@ -43,8 +43,9 @@ REM IOBVPN4MACHINE REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-OPC-UA-DEB /MIR REM ROBOCOPY %2 \\10.51.90.5\Steamware\IOB-WIN-OPC-UA-DEB /MIR /log:RobocopyTransfer.log REM ROBOCOPY %2 Z:\IOB-WIN-OPC-UA-DEB /MIR -ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-OPC-UA-DEB /MIR +REM ROBOCOPY %2 \\10.51.90.9\Steamware\IOB-WIN-OPC-UA-DEB /MIR REM ROBOCOPY %2 \\10.51.90.10\Steamware\IOB-WIN-OPC-UA-DEB /MIR +ROBOCOPY %2 \\10.51.90.15\Steamware\IOB-WIN-OPC-UA-DEB /MIR goto END