diff --git a/IOB-WIN-NEXT/IobGeneric.cs b/IOB-WIN-NEXT/IobGeneric.cs index d62bd989..f5964dc2 100644 --- a/IOB-WIN-NEXT/IobGeneric.cs +++ b/IOB-WIN-NEXT/IobGeneric.cs @@ -1727,6 +1727,35 @@ namespace IOB_WIN_NEXT return fatto; } + /// + /// Effettua conversione da valore bitmap ai valori configurati x allarme + /// + /// Configurazione banco allarmi + /// BitState allarmi + /// + public string getAlarmState(BaseAlarmConf memConf, byte[] bState) + { + string valTransl = ""; + List descAttivi = new List(); + BitArray bitAttivi = new BitArray(bState); + bool[] bitStati = new bool[bitAttivi.Count]; + bitAttivi.CopyTo(bitStati, 0); + // cerco bit attivi + int idx = 0; + foreach (var item in bitStati) + { + if (item && memConf.messages.Count > idx) + { + string currState = memConf.messages[idx]; + descAttivi.Add(currState); + } + idx++; + } + // combino string + valTransl = string.Join(",", descAttivi); + return valTransl; + } + /// /// effettua recupero dati ed invio valori modificati... /// @@ -1910,35 +1939,6 @@ namespace IOB_WIN_NEXT return valTransl; } - /// - /// Effettua conversione da valore bitmap ai valori configurati x allarme - /// - /// Configurazione banco allarmi - /// BitState allarmi - /// - public string getAlarmState(BaseAlarmConf memConf, byte[] bState) - { - string valTransl = ""; - List descAttivi = new List(); - BitArray bitAttivi = new BitArray(bState); - bool[] bitStati = new bool[bitAttivi.Count]; - bitAttivi.CopyTo(bitStati, 0); - // cerco bit attivi - int idx = 0; - foreach (var item in bitStati) - { - if (item && memConf.messages.Count > idx) - { - string currState = memConf.messages[idx]; - descAttivi.Add(currState); - } - idx++; - } - // combino string - valTransl = string.Join(",", descAttivi); - return valTransl; - } - /// /// Recupera eventuali allarmi CNC... /// @@ -3034,11 +3034,41 @@ namespace IOB_WIN_NEXT /// /// Effettua salvataggio in LUT del valore ricevuto (valori string) /// - non serve calcolo medie o altro - /// - aggoda in out val e basta + /// - accoda in out val e basta /// - /// - /// - /// + /// Array eventi da popolare + /// valore da salvare + /// ID/chiave di riferimento + /// + public virtual void saveAlarmString(ref Dictionary outVal, string valore, string chiave) + { + DateTime adesso = DateTime.Now; + //check obj preliminare + if (outVal == null) + { + outVal = new Dictionary(); + } + // default invio: blindato a 120 sec (rivedere da conf?) + int vetoSendAlarms = 120; + // verifico se sia scaduto OVVERO variato rispetto a prima oppure oltre tempo + bool scaduto = !LastTSSSend.ContainsKey(chiave) || (LastTSSSend[chiave].AddSeconds(vetoSendAlarms) < adesso); + bool cambiato = !LastTSS.ContainsKey(chiave) || !LastTSS[chiave].Equals(valore); + if (scaduto || cambiato) + { + outVal.Add(chiave, valore); + LastTSS[chiave] = valore; + LastTSSSend[chiave] = adesso; + } + } + + /// + /// Effettua salvataggio in LUT del valore ricevuto (valori string) + /// - non serve calcolo medie o altro + /// - accoda in out val e basta + /// + /// Array eventi da popolare + /// valore da salvare + /// ID/chiave di riferimento /// public virtual void saveValueString(ref Dictionary outVal, string valore, string chiave) { diff --git a/IOB-WIN-NEXT/IobModbusTCP.cs b/IOB-WIN-NEXT/IobModbusTCP.cs index 12f10664..b805c553 100644 --- a/IOB-WIN-NEXT/IobModbusTCP.cs +++ b/IOB-WIN-NEXT/IobModbusTCP.cs @@ -248,17 +248,15 @@ namespace IOB_WIN_NEXT { if (hasAlarms) { + string bankVal = ""; foreach (var item in alarmMaps) { + bankVal = ""; var currState = currAlarmsState(item); // calcolo vettore stringa degli allarmi... - string bankVal = getAlarmState(item, currState); - // se !=null --> accodo - if (!string.IsNullOrEmpty(bankVal)) - { - // accodo al dictionary our - outVal.Add(item.description, bankVal); - } + bankVal = getAlarmState(item, currState); + bankVal = string.IsNullOrEmpty(bankVal) ? "OK":bankVal; + saveAlarmString(ref outVal, bankVal, item.description); } } }