From cf310ab003425389982a100b36cd3bc3adf7aafa Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 21 Mar 2022 09:14:01 +0100 Subject: [PATCH] Aggiornamento gestioen DECODER x allarmi e check variazioni --- MP.MONO.DECODER/AlarmManager.cs | 39 ++++++++++++++------------------- MP.MONO.DECODER/Program.cs | 37 +++++++++++++++++++------------ 2 files changed, 40 insertions(+), 36 deletions(-) diff --git a/MP.MONO.DECODER/AlarmManager.cs b/MP.MONO.DECODER/AlarmManager.cs index eeea835..e9a901b 100644 --- a/MP.MONO.DECODER/AlarmManager.cs +++ b/MP.MONO.DECODER/AlarmManager.cs @@ -11,7 +11,6 @@ namespace MP.MONO.DECODER public class AlarmManager { protected List AlarmList = new List(); - List currAlarmStatus = new List(); protected static Lua state = new Lua(); protected static string luaPath = ""; public static string alarmStatus = ""; @@ -20,40 +19,34 @@ namespace MP.MONO.DECODER public AlarmManager() { - // !!!FIXME TODO - -#if false - // fare vero setup da file... x ora è fake - for (int i = 1; i < 16; i++) - { - AlarmList.Add($"Allarme{i:00}"); - } -#endif - currAlarmStatus.Add(0); - // preparo variabile x avvisare script che il modo è da NLua luaPath = Path.Combine(Directory.GetCurrentDirectory(), "lua", "AlarmDecoder.lua"); -#if FALSE - state["alarmList"] = AlarmList; - state["numAlarm"] = AlarmList.Count; -#endif +#if false state.DoString(" callMode = 'NLua' "); // initi 0/0 -#if false state.DoString(" lastVal = 0 "); state.DoString(" currVal = 0 "); #endif -#if true + state["callMode"] = "NLua"; state["lastVal"] = 0; state["currVal"] = 0; -#endif Log.Info("AlarmManager OK"); Console.WriteLine("AlarmManager OK"); } - public static List processData(string prefix, List alarmList, uint muteMask, uint disableMask, uint newStatus) + /// + /// Funzione chiamata LUA x calcolo status allarmi + /// + /// + /// + /// + /// + /// + /// + /// + public static List processData(string prefix, List alarmList, uint muteMask, uint disableMask, uint lastVal, ref uint currVal) { state["prefix"] = prefix; state["alarmList"] = alarmList; @@ -63,11 +56,13 @@ namespace MP.MONO.DECODER List answ = new List(); // invio dati aggiornati a LUA - state["currVal"] = newStatus; + state["lastVal"] = lastVal; + state["currVal"] = currVal; - // FIXME TODO!!! fare invio banco allarmi correnti (SE fossero + banchi da config) state.DoFile(luaPath); alarmStatus = state.GetString("alarmStatus"); + // recupero NUOVO valore (filtrato) attuale da salvare + currVal = (uint)state.GetNumber("lastVal"); bool.TryParse(state.GetString("valueChanged"), out valueChanged); if (valueChanged) { diff --git a/MP.MONO.DECODER/Program.cs b/MP.MONO.DECODER/Program.cs index 48a518b..9540b46 100644 --- a/MP.MONO.DECODER/Program.cs +++ b/MP.MONO.DECODER/Program.cs @@ -152,23 +152,32 @@ void AlarmValPipe_EA_NewMessage(object? sender, EventArgs e) var bankVal = alarmList.FirstOrDefault(x => x.Key == alarmData.memAddr); uint actVal = !string.IsNullOrEmpty(bankVal.Key) ? bankVal.Value : 0; // valutare se dividere in 2 da 16... FIXME TODO - var bankAlarmList = AlarmManager.processData(alarmData.memAddr, alarmData.messages, alarmData.silenceMask[0], alarmData.disableMask[0], actVal); - // aggiungo... - activeAlarmList.AddRange(bankAlarmList); - - AlarmLogModel newAlarm = new AlarmLogModel() + var bankAlarmList = AlarmManager.processData(alarmData.memAddr, alarmData.messages, alarmData.silenceMask[0], alarmData.disableMask[0], alarmData.alarmsState[0], ref actVal); + // salvo nuovo valore in oggetto... + if (alarmData.alarmsState[0] != actVal) { - MachineId = MachineId, - DtRif = DateTime.Now, - MemAddress = bankVal.Key, - Index = alarmData != null ? alarmData.index : 0, - Status = alarmData != null ? (uint)bankVal.Value & alarmData.silenceMask[0] & alarmData.disableMask[0] : (uint)bankVal.Value, - ValDecoded = bankAlarmList.Count > 0 ? string.Join(", ", bankAlarmList) : "All OK" - }; - alarmLogList.Add(newAlarm); + alarmData.alarmsState[0] = actVal; + // aggiungo... + activeAlarmList.AddRange(bankAlarmList); + + AlarmLogModel newAlarm = new AlarmLogModel() + { + MachineId = MachineId, + DtRif = DateTime.Now, + MemAddress = bankVal.Key, + Index = alarmData != null ? alarmData.index : 0, + Status = alarmData != null ? (uint)bankVal.Value & alarmData.silenceMask[0] & alarmData.disableMask[0] : (uint)bankVal.Value, + ValDecoded = bankAlarmList.Count > 0 ? string.Join(", ", bankAlarmList) : "All OK" + }; + alarmLogList.Add(newAlarm); + } } } - // serializzo... + + // salvo status aggiornato allarme... + redisDb.StringSet(Constants.ALARMS_SETT_KEY, JsonConvert.SerializeObject(currAlarmsConf)); + + // serializzo l'elenco allarmi... string serAlarms = "All OK"; if (activeAlarmList.Count > 0) {