Mitigazione allarmi in getDynData

- implementato x modbus (cedax)
- veto invio cablato a 120 sec (no conf x allarmi x ora)
This commit is contained in:
Samuele Locatelli
2022-06-28 09:29:18 +02:00
parent 74bca84447
commit d037ecf346
2 changed files with 68 additions and 40 deletions
+63 -33
View File
@@ -1727,6 +1727,35 @@ namespace IOB_WIN_NEXT
return fatto;
}
/// <summary>
/// Effettua conversione da valore bitmap ai valori configurati x allarme
/// </summary>
/// <param name="memConf">Configurazione banco allarmi</param>
/// <param name="bState">BitState allarmi</param>
/// <returns></returns>
public string getAlarmState(BaseAlarmConf memConf, byte[] bState)
{
string valTransl = "";
List<string> descAttivi = new List<string>();
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;
}
/// <summary>
/// effettua recupero dati ed invio valori modificati...
/// </summary>
@@ -1910,35 +1939,6 @@ namespace IOB_WIN_NEXT
return valTransl;
}
/// <summary>
/// Effettua conversione da valore bitmap ai valori configurati x allarme
/// </summary>
/// <param name="memConf">Configurazione banco allarmi</param>
/// <param name="bState">BitState allarmi</param>
/// <returns></returns>
public string getAlarmState(BaseAlarmConf memConf, byte[] bState)
{
string valTransl = "";
List<string> descAttivi = new List<string>();
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;
}
/// <summary>
/// Recupera eventuali allarmi CNC...
/// </summary>
@@ -3034,11 +3034,41 @@ namespace IOB_WIN_NEXT
/// <summary>
/// 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
/// </summary>
/// <param name="outVal"></param>
/// <param name="valore"></param>
/// <param name="chiave"></param>
/// <param name="outVal">Array eventi da popolare</param>
/// <param name="valore">valore da salvare</param>
/// <param name="chiave">ID/chiave di riferimento</param>
/// <returns></returns>
public virtual void saveAlarmString(ref Dictionary<string, string> outVal, string valore, string chiave)
{
DateTime adesso = DateTime.Now;
//check obj preliminare
if (outVal == null)
{
outVal = new Dictionary<string, string>();
}
// 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;
}
}
/// <summary>
/// Effettua salvataggio in LUT del valore ricevuto (valori string)
/// - non serve calcolo medie o altro
/// - accoda in out val e basta
/// </summary>
/// <param name="outVal">Array eventi da popolare</param>
/// <param name="valore">valore da salvare</param>
/// <param name="chiave">ID/chiave di riferimento</param>
/// <returns></returns>
public virtual void saveValueString(ref Dictionary<string, string> outVal, string valore, string chiave)
{
+5 -7
View File
@@ -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);
}
}
}