diff --git a/IOB-WIN-NEXT/DATA/CONF/SIMUL_03.ini b/IOB-WIN-NEXT/DATA/CONF/SIMUL_03.ini index 1eebacfd..985d0380 100644 --- a/IOB-WIN-NEXT/DATA/CONF/SIMUL_03.ini +++ b/IOB-WIN-NEXT/DATA/CONF/SIMUL_03.ini @@ -58,6 +58,8 @@ SIM_RC=100|1 SIM_RS=200|1 ; indica simulazione dichiarazioni (note) utente SIM_DICH=300|1 +; indica matricola opr simulata +SIM_MATR_OPR=1 ; gestione DynData simulati ENABLE_DYN_DATA=TRUE diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index 679c8046..74b3a0d9 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -1069,6 +1069,11 @@ namespace IOB_WIN_NEXT /// public int counterFLog { get; set; } + /// + /// Contatore x invio dati UserLog + /// + public int counterULog { get; set; } + /// /// Contatore x invio dati SignalIN /// @@ -3284,6 +3289,28 @@ namespace IOB_WIN_NEXT } } + + + /// + /// Accumula in coda i valori USER LOG e logga... + /// + /// VALORE RAW (x display) + /// VALORE già processato con qEncodeULog(...) + public void accodaUserLog(string val, string encodedVal) + { + // mostro dati variati letti... + displayOtherData(val); + // accodo IN PRIMIS al FluxLog --> accodo (valore già formattato)! + QueueULog.Enqueue(encodedVal); + + // loggo! + lgInfo(string.Format("[QUEUE-USER-LOG] {0}", encodedVal)); + counterULog++; + if (counterULog > 9999) + { + counterFLog = 0; + } + } /// /// Accumula in coda i valori Flux Log e logga... /// @@ -4602,6 +4629,22 @@ namespace IOB_WIN_NEXT { } return answ; } + /// + /// Fornisce il valore di UserLog e valore in formato valido x messa in coda nel formato dtEve#flux#value#cont + /// Flusso dati (RC/RS/DI) + /// Valore da inviare + /// + public string qEncodeULog(string flusso, string valore) + { + string answ = ""; + try + { + answ = $"{DateTime.Now:yyyyMMddHHmmssfff}#{flusso}#{valore}#{counterULog}"; + } + catch + { } + return answ; + } /// /// Fornisce il valore di flusso e valore in formato valido x messa in coda nel formato dtEve#flux#value#cont @@ -5095,6 +5138,33 @@ namespace IOB_WIN_NEXT sendToMoonPro(urlType.FLog, currVal); } } + + // svuoto coda ULog + while (QueueULog.Count > 0) + { + List listaValori = new List(); + // se ho + di maxJsonData elementi --> invio un set di dati alla volta + if (QueueULog.Count > maxJsonData) + { + string currVal = ""; + // prendoi primi maxJsonDataValori + for (int i = 0; i < maxJsonData; i++) + { + QueueULog.TryDequeue(out currVal); + listaValori.Add(currVal); + } + sendDataBlock(urlType.ULog, listaValori); + } + else + { + // invio in blocco + listaValori = QueueULog.ToList(); + // invio + sendDataBlock(urlType.ULog, listaValori); + // svuoto! + QueueULog = new ConcurrentQueue(); + } + } } parentForm.displayTaskAndLog("[STOP] Stopping adapter..."); adpTryRestart = false; diff --git a/IOB-WIN-NEXT/IobSimula.cs b/IOB-WIN-NEXT/IobSimula.cs index 5323dc17..f00aa48e 100644 --- a/IOB-WIN-NEXT/IobSimula.cs +++ b/IOB-WIN-NEXT/IobSimula.cs @@ -60,7 +60,10 @@ namespace IOB_WIN_NEXT /// protected simPar simDich; - + /// + /// Matricola OPR simulato + /// + protected int matrOpr = 1; protected bool disableSimStatus = false; @@ -167,6 +170,7 @@ namespace IOB_WIN_NEXT simRC = setupSimPar("SIM_RC"); simRS = setupSimPar("SIM_RS"); simDich = setupSimPar("SIM_DICH"); + int.TryParse(getOptPar("SIM_MATR_OPR"), out matrOpr); } setParamPlc(); // ricarico da server i dati dei pezzi fatti... @@ -500,7 +504,10 @@ namespace IOB_WIN_NEXT // preparo record controlli... guasto se mi esce un secondo divisibile x 25 DateTime adesso = DateTime.Now; bool esitoOk = adesso.Second % 25 == 0 ? false : true; - + string note = esitoOk ? "" : $"SIM Controllo fallito alle {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; + string sVal = $"MatrOpr: {matrOpr} | Esito: {esitoOk} | note: {note}"; + // accodo x invio + accodaUserLog(sVal, qEncodeULog("RC", $"{esitoOk}|{note}")); // decremento duration simRC.duration--; // controllo se sia scaduta la duration... in quel caso reset... @@ -509,6 +516,39 @@ namespace IOB_WIN_NEXT simRC = setupSimPar("SIM_RC"); } } + if (simRS.wait <= 0) + { + // preparo record controlli... guasto se mi esce un secondo divisibile x 25 + DateTime adesso = DateTime.Now; + int causale = adesso.Second % 5; + string note = $"SIM Scarto alle {DateTime.Now:yyyy-MM-dd HH:mm:ss} | causale: {causale}"; + string sVal = $"MatrOpr: {matrOpr} | Causale: {causale} | note: {note}"; + // accodo x invio + accodaUserLog(sVal, qEncodeULog("RS", $"{causale:00}|{note}")); + // decremento duration + simRS.duration--; + // controllo se sia scaduta la duration... in quel caso reset... + if (simRS.duration <= 0) + { + simRS = setupSimPar("SIM_RS"); + } + } + if (simDich.wait <= 0) + { + // preparo record controlli... guasto se mi esce un secondo divisibile x 25 + DateTime adesso = DateTime.Now; + string note = $"SIM Nota automatica alle {DateTime.Now:yyyy-MM-dd HH:mm:ss}"; + string sVal = $"MatrOpr: {matrOpr} | nota: {note}"; + // accodo x invio + accodaUserLog(sVal, qEncodeULog("DI", $"{note}")); + // decremento duration + simDich.duration--; + // controllo se sia scaduta la duration... in quel caso reset... + if (simDich.duration <= 0) + { + simDich = setupSimPar("SIM_DICH"); + } + } // init obj display