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);
}
}
}