diff --git a/IOB-WIN-FORM/Iob/Generic.cs b/IOB-WIN-FORM/Iob/Generic.cs index 13252306..973babc4 100644 --- a/IOB-WIN-FORM/Iob/Generic.cs +++ b/IOB-WIN-FORM/Iob/Generic.cs @@ -2984,10 +2984,12 @@ namespace IOB_WIN_FORM.Iob /// public void processDynData() { + // FixMe Todo: generalizzare parametri nell'obj? bool enableByApp = utils.CRB("enableDynData"); bool enableByIob = (getOptPar("ENABLE_DYN_DATA") == "TRUE"); bool forceSendByIob = (getOptPar("FORCE_DYN_DATA") == "TRUE"); bool disableDynData = (getOptPar("DISABLE_DYN_DATA") == "TRUE"); + bool copyDynToProd = (getOptPar("COPY_DYN2PROD_DATA") == "TRUE"); Dictionary currDynData = new Dictionary(); if (enableByApp || enableByIob) @@ -3065,6 +3067,19 @@ namespace IOB_WIN_FORM.Iob lgError(exc, "Eccezione in processDynData"); } } + // se configurato + if (copyDynToProd) + { + // ora popolo prod data dai dynData... + foreach (var item in currDynData) + { + // se presente nelle memorie write/read --> metto in curr data... + if (memMap.mMapWrite.ContainsKey(item.Key) && !string.IsNullOrEmpty(item.Value)) + { + upsertKey(item.Key, item.Value); + } + } + } } else { @@ -4568,6 +4583,11 @@ namespace IOB_WIN_FORM.Iob /// protected DateTime lastWarnODL; + /// + /// ultima data-ora invio parametri write x ribadire status + /// + protected DateTime lastWriteParamsUpsert = DateTime.Now; + /// /// Separatore linea (tipicamente x commenti) /// @@ -4666,6 +4686,11 @@ namespace IOB_WIN_FORM.Iob /// protected int vetoQueueIn = 1; + /// + /// Periodo di veto prima di invio nuova conferma dei valori write correnti, default ogni 5 min + /// + protected int vetoSendWriteUpsert = 5; + /// /// Periodo wathdog di default (2 sec se non specificato) /// @@ -6282,6 +6307,8 @@ namespace IOB_WIN_FORM.Iob currOut = $" | Parameter {item.uid} | {item.value} --> {item.reqValue}"; // sistemo valori item.value = item.reqValue; + // forzo variabile writeable + item.writable = true; lgInfo($"Richiesta update parametro {currOut}"); // salvo in lista da ritrasmettere updatedPar.Add(item); @@ -8313,7 +8340,9 @@ namespace IOB_WIN_FORM.Iob private void processMem2Write() { + DateTime adesso = DateTime.Now; List updatedPar = new List(); + List currWritePar = new List(); // ciclo tutti gli oggetti write x vedere se modificati... foreach (var item in currProdData) { @@ -8334,26 +8363,30 @@ namespace IOB_WIN_FORM.Iob needWrite = true; lastProdData.Add(item.Key, item.Value); } - // se devo scrivere --> riporto - if (needWrite) + if (memMap != null && memMap.mMapWrite.ContainsKey(item.Key)) { - if (memMap != null && memMap.mMapWrite.ContainsKey(item.Key)) + // preparo obj da scrivere + objItem newWrite = new objItem() + { + uid = item.Key, + name = item.Key, + description = memMap.mMapWrite[item.Key].description, + reqValue = item.Value, + value = item.Value, + lastRequest = adesso, + writable = true, + displOrdinal = memMap.mMapWrite[item.Key].displOrdinal + }; + + // se devo scrivere --> riporto + if (needWrite) { - // preparo obj da scrivere - objItem newWrite = new objItem() - { - uid = item.Key, - name = item.Key, - description = memMap.mMapWrite[item.Key].description, - //reqValue = memMap.mMapWrite[item.Key].value, - reqValue = item.Value, - value = item.Value, - lastRequest = DateTime.Now, - writable = true, - displOrdinal = memMap.mMapWrite[item.Key].displOrdinal - }; updatedPar.Add(newWrite); } + else + { + currWritePar.Add(newWrite); + } } } // se ho da scrivere... scrivo TUTTI! @@ -8363,10 +8396,20 @@ namespace IOB_WIN_FORM.Iob lgInfo($"Chiamata di plcWriteParams da processMem2Write: {updatedPar.Count} updatedPar"); plcWriteParams(ref updatedPar); // invio su cloud parametri! - string rawData = JsonConvert.SerializeObject(updatedPar); - utils.callUrl($"{urlUpdateWriteParams}", rawData); + utils.callUrl($"{urlUpdateWriteParams}", JsonConvert.SerializeObject(updatedPar)); lgInfo($"Notificato a server scrittura {updatedPar.Count} parametri"); } + else + { + // se scaduto tempo da ultimo invio... e ho valori + if (currWritePar.Count > 0 && (lastWriteParamsUpsert.AddMinutes(vetoSendWriteUpsert) < adesso)) + { + lastWriteParamsUpsert = adesso; + // invio su cloud parametri! + utils.callUrl($"{urlUpdateWriteParams}", JsonConvert.SerializeObject(currWritePar)); + lgInfo($"Reinviato a server stato {updatedPar.Count} parametri WRITE"); + } + } } /// diff --git a/IOB-WIN-MBUS/DATA/CONF/MAIN.ini b/IOB-WIN-MBUS/DATA/CONF/MAIN.ini index 1e042b4d..45e29ff6 100644 --- a/IOB-WIN-MBUS/DATA/CONF/MAIN.ini +++ b/IOB-WIN-MBUS/DATA/CONF/MAIN.ini @@ -22,8 +22,8 @@ CLI_INST=SteamWareSim ;NB: mettere copy always ai file di conf x fare test... ;STARTLIST=SIMUL_01 ;STARTLIST=WPS -;STARTLIST=PIZ10 -STARTLIST=Tend_FIMAT_01 +STARTLIST=PIZ09 +;STARTLIST=Tend_FIMAT_01 MAXCNC=10 \ No newline at end of file diff --git a/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini b/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini index b3e7d70b..8833bd00 100644 --- a/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini +++ b/IOB-WIN-MBUS/DATA/CONF/PIZ09.ini @@ -51,7 +51,7 @@ BLINK_FILT=0 [OPTPAR] ;PZCOUNT_MODE=STD.[PAR/MEM].info|BIT.indice -PZCOUNT_MODE=STD.DB85.DBRE16 +PZCOUNT_MODE=STD.Level DISABLE_PZCOUNT=TRUE ENABLE_SEND_PZC_BLOCK=TRUE MIN_SEND_PZC_BLOCK=0 diff --git a/IOB-WIN-MBUS/IOB-WIN-MBUS.csproj b/IOB-WIN-MBUS/IOB-WIN-MBUS.csproj index 3e3ba06a..7d8ea09a 100644 --- a/IOB-WIN-MBUS/IOB-WIN-MBUS.csproj +++ b/IOB-WIN-MBUS/IOB-WIN-MBUS.csproj @@ -242,10 +242,18 @@ - - - - + + Always + + + Always + + + Always + + + Always + diff --git a/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs b/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs index cfbe8586..aaa3bff1 100644 --- a/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs +++ b/IOB-WIN-MBUS/IobModbustTCP/ModbusTCP.cs @@ -299,6 +299,9 @@ namespace IOB_WIN_MBUS.IobModbusTCP return outVal; } + /// + /// Gestione contapezzi + /// public override void processContapezzi() { if ((enablePzCountByApp || enablePzCountByIob) && !(disablePzCountByIob))