diff --git a/IOB-WIN-FANUC/DATA/CONF/MAIN.ini b/IOB-WIN-FANUC/DATA/CONF/MAIN.ini index 1d21585c..f621315d 100644 --- a/IOB-WIN-FANUC/DATA/CONF/MAIN.ini +++ b/IOB-WIN-FANUC/DATA/CONF/MAIN.ini @@ -33,5 +33,4 @@ CLI_INST=SteamWareSim ;STARTLIST=3001 STARTLIST=SIMUL_01 - - +MAXCNC=10 diff --git a/IOB-WIN-FORM/AdapterForm.cs b/IOB-WIN-FORM/AdapterForm.cs index 336486cc..3663366b 100644 --- a/IOB-WIN-FORM/AdapterForm.cs +++ b/IOB-WIN-FORM/AdapterForm.cs @@ -1338,15 +1338,16 @@ namespace IOB_WIN_FORM /// private CancellationTokenSource _ctsMachine; - /// - /// Cancellation tocken x processi verso server - /// - private CancellationTokenSource _ctsServer; /// /// Cancellation tocken x processi verso Redis /// private CancellationTokenSource _ctsRedis; + /// + /// Cancellation tocken x processi verso server + /// + private CancellationTokenSource _ctsServer; + /// /// Ritardo per errori (extra nei cicli) /// @@ -2132,6 +2133,86 @@ namespace IOB_WIN_FORM } } + /// + /// Metodo x gestione I/O Redis (status IOB) + /// + /// + /// + private async Task RedisWorkerLoopAsync(CancellationToken token) + { + while (!token.IsCancellationRequested) + { + try + { + if (iobObj != null) + { + // 1. Estrazione dati dalle code (operazione logica) + long alQueueLen = iobObj.QHelp.QueueAlarm.Count; + long evQueueLen = iobObj.QHelp.QueueIN.Count; + long flQueueLen = iobObj.QHelp.QueueFLog.Count; + long msQueueLen = iobObj.QHelp.QueueMessages.Count; + long rtrQueueLen = iobObj.QHelp.QueueRawTransf.Count; + long ulQueueLen = iobObj.QHelp.QueueULog.Count; + + var setPar = new Dictionary + { + { "IP", iobObj.IOBConfFull.Device.Connect.IpAddr }, + { "PORT", iobObj.IOBConfFull.Device.Connect.Port } + }; + + IobWinStatus currIobStatus = new IobWinStatus() + { + CodIob = iobObj.IOBConfFull.General.FilenameIOB, + IobType = $"{iobObj.IOBConfFull.General.IobType}", + queueAlLen = alQueueLen, + queueEvLen = evQueueLen, + queueFlLen = flQueueLen, + queueMsLen = msQueueLen, + queueRawTransfLen = rtrQueueLen, + queueUlLen = ulQueueLen, + counterIOB = iobObj.contapezziIOB, + counterMAC = iobObj.contapezziPLC, + lastUpdate = lastIobStatus.lastUpdate > iobObj.DtHelp.lastWatchDog ? lastIobStatus.lastUpdate : iobObj.DtHelp.lastWatchDog, + online = utils.IOB_Online, + lastDataIn = iobObj.DtHelp.lastReadPLC, + lastDataOut = iobObj.DtHelp.lastIobOnline, + setupParams = setPar, + freeNotes = $"{iobObj.IOBConfFull.General.FilenameIOB} | DT ultimo avvio: {iobObj.DtHelp.AvvioAdp}" + }; + + // 2. Logica di salvataggio su REDIS (Rete -> Thread di background!) + if (!currIobStatus.Equals(lastIobStatus)) + { + currIobStatus.lastUpdate = DateTime.Now; + iobObj.redisMan.iobStatus = currIobStatus; + lastIobStatus = currIobStatus; + } + + if (lastSrvStatus.online != utils.MPIO_Online) + { + ServerMpStatus currSrvStatus = iobObj.redisMan.servStatus; + currSrvStatus.online = utils.MPIO_Online; + currSrvStatus.lastUpdate = DateTime.Now; + iobObj.redisMan.servStatus = currSrvStatus; + lastSrvStatus = currSrvStatus; + } + } + } + catch (Exception exc) + { + lgError($"Eccezione nel background gather: {exc}"); + } + + // Calcolo del delay dinamico tra standard e suspended da Timers.MsHF + int currentDelay = _isSuspended ? IOBConfFull.General.Timers.MsMF : IOBConfFull.General.Timers.MsHF; + + // in ogni caso max 15 sec di attesa... + currentDelay = currentDelay > 15000 ? 15000 : currentDelay; + + await Task.Delay(currentDelay, token); + } + } + private void refreshFormData() { // verifica se mostrare update @@ -2191,7 +2272,7 @@ namespace IOB_WIN_FORM // salvo su redis e in obj corrente iobObj.redisMan.servStatus = currSrvStatus; lastSrvStatus = currSrvStatus; - } + } #endif } @@ -2383,7 +2464,6 @@ namespace IOB_WIN_FORM lgInfo("--- WORKER REDIS AVVIATO ---"); } - // avvio altro thread di comunicazione server... // 1. Controllo se è già in esecuzione if (_workerTask != null && !_workerTask.IsCompleted) @@ -2464,101 +2544,6 @@ namespace IOB_WIN_FORM checkAssignSize(); } - /// - /// Metodo x gestione I/O Redis (status IOB) - /// - /// - /// - private async Task RedisWorkerLoopAsync(CancellationToken token) - { - while (!token.IsCancellationRequested) - { - try - { - if (iobObj != null) - { - // 1. Estrazione dati dalle code (operazione logica) - long alQueueLen = iobObj.QHelp.QueueAlarm.Count; - long evQueueLen = iobObj.QHelp.QueueIN.Count; - long flQueueLen = iobObj.QHelp.QueueFLog.Count; - long msQueueLen = iobObj.QHelp.QueueMessages.Count; - long rtrQueueLen = iobObj.QHelp.QueueRawTransf.Count; - long ulQueueLen = iobObj.QHelp.QueueULog.Count; - - var setPar = new Dictionary - { - { "IP", iobObj.IOBConfFull.Device.Connect.IpAddr }, - { "PORT", iobObj.IOBConfFull.Device.Connect.Port } - }; - - IobWinStatus currIobStatus = new IobWinStatus() - { - CodIob = iobObj.IOBConfFull.General.FilenameIOB, - IobType = $"{iobObj.IOBConfFull.General.IobType}", - queueAlLen = alQueueLen, - queueEvLen = evQueueLen, - queueFlLen = flQueueLen, - queueMsLen = msQueueLen, - queueRawTransfLen = rtrQueueLen, - queueUlLen = ulQueueLen, - counterIOB = iobObj.contapezziIOB, - counterMAC = iobObj.contapezziPLC, - lastUpdate = lastIobStatus.lastUpdate > iobObj.DtHelp.lastWatchDog ? lastIobStatus.lastUpdate : iobObj.DtHelp.lastWatchDog, - online = utils.IOB_Online, - lastDataIn = iobObj.DtHelp.lastReadPLC, - lastDataOut = iobObj.DtHelp.lastIobOnline, - setupParams = setPar, - freeNotes = $"{iobObj.IOBConfFull.General.FilenameIOB} | DT ultimo avvio: {iobObj.DtHelp.AvvioAdp}" - }; - - // 2. Logica di salvataggio su REDIS (Rete -> Thread di background!) - if (!currIobStatus.Equals(lastIobStatus)) - { - currIobStatus.lastUpdate = DateTime.Now; - iobObj.redisMan.iobStatus = currIobStatus; - lastIobStatus = currIobStatus; - } - - if (lastSrvStatus.online != utils.MPIO_Online) - { - ServerMpStatus currSrvStatus = iobObj.redisMan.servStatus; - currSrvStatus.online = utils.MPIO_Online; - currSrvStatus.lastUpdate = DateTime.Now; - iobObj.redisMan.servStatus = currSrvStatus; - lastSrvStatus = currSrvStatus; - } - - // 3. Prepariamo i dati per la UI e li salviamo in modo thread-safe - lock (_statusLock) - { - _latestSnapshotForUI = currIobStatus; - _cachedCounterIob = $"pz MES {iobObj.contapezziIOB}"; - _cachedCounterMac = $"pz PLC {iobObj.contapezziPLC}"; - } - } - } - catch (Exception exc) - { - lgError($"Eccezione nel background gather: {exc}"); - } - - // Frequenza di aggiornamento Redis/Code (es. ogni 1 secondo) - // Rilascia la CPU senza fare context switch distruttivi - await Task.Delay(1000, token); - } - } - - // Oggetto per il lock thread-safe - private readonly object _statusLock = new object(); - - // Questa variabile conterrà l'ultimo stato valido calcolato in background - private IobWinStatus _latestSnapshotForUI; - - // Stringhe pronte per la UI calcolate in background per evitare manipolazioni di stringhe sul thread UI - private string _cachedCounterIob = ""; - private string _cachedCounterMac = ""; - private string _cachedNote = ""; - /// /// Loop di gestione worker /// diff --git a/IOB-WIN-FTP/DATA/CONF/MAIN.ini b/IOB-WIN-FTP/DATA/CONF/MAIN.ini index d10acd09..ebc0bef6 100644 --- a/IOB-WIN-FTP/DATA/CONF/MAIN.ini +++ b/IOB-WIN-FTP/DATA/CONF/MAIN.ini @@ -20,5 +20,3 @@ CLI_INST=SteamWareSim STARTLIST=FTP_SONATEST MAXCNC=10 - - diff --git a/IOB-WIN-MTC/DATA/CONF/MAIN.ini b/IOB-WIN-MTC/DATA/CONF/MAIN.ini index b8e74cd4..4b123815 100644 --- a/IOB-WIN-MTC/DATA/CONF/MAIN.ini +++ b/IOB-WIN-MTC/DATA/CONF/MAIN.ini @@ -27,4 +27,3 @@ STARTLIST=3024 ;STARTLIST=LVF652 MAXCNC=10 - diff --git a/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini b/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini index a9d47506..72bea7db 100644 --- a/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini +++ b/IOB-WIN-OPC-UA/DATA/CONF/MAIN.ini @@ -34,4 +34,3 @@ STARTLIST=SIMUL_01 ;STARTLIST=3026 MAXCNC=10 - diff --git a/IOB-WIN-PING/DATA/CONF/MAIN.ini b/IOB-WIN-PING/DATA/CONF/MAIN.ini index 14fc4c91..01bdf429 100644 --- a/IOB-WIN-PING/DATA/CONF/MAIN.ini +++ b/IOB-WIN-PING/DATA/CONF/MAIN.ini @@ -20,4 +20,3 @@ STARTLIST=SIMUL_01 ;STARTLIST=3023-PING MAXCNC=10 - diff --git a/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini b/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini index 839e455b..41774edf 100644 --- a/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini +++ b/IOB-WIN-SIEMENS/DATA/CONF/MAIN.ini @@ -41,5 +41,4 @@ CLI_INST=SteamWareSim ;STARTLIST=SIMUL_01 STARTLIST=3010 - - +MAXCNC=10 diff --git a/IOB-WIN-WPS/DATA/CONF/MAIN.ini b/IOB-WIN-WPS/DATA/CONF/MAIN.ini index 87ce4112..a81dc4b2 100644 --- a/IOB-WIN-WPS/DATA/CONF/MAIN.ini +++ b/IOB-WIN-WPS/DATA/CONF/MAIN.ini @@ -23,5 +23,4 @@ STARTLIST=3018 ;STARTLIST=3019 ;STARTLIST=SIMUL_06 - - +MAXCNC=10