update decoder x gestione decodifica preliminare parametri (manca DB)

This commit is contained in:
Samuele Locatelli
2022-03-22 19:56:00 +01:00
parent 42f01f14af
commit 3cebac853b
+41 -56
View File
@@ -1,6 +1,7 @@
using Microsoft.Extensions.Configuration;
using MP.MONO.Core;
using MP.MONO.Core.CONF;
using MP.MONO.Core.DTO;
using MP.MONO.Data;
using MP.MONO.Data.Controllers;
using MP.MONO.Data.DbModels;
@@ -209,8 +210,10 @@ void AlarmsValPipe_EA_NewMessage(object? sender, EventArgs e)
}
}
}
catch
{ }
catch (Exception exc)
{
Log.Error($"Eccezione in AlarmsValPipe_EA_NewMessage:{Environment.NewLine}{exc}");
}
}
}
/// <summary>
@@ -253,77 +256,59 @@ void ParamsValPipe_EA_NewMessage(object? sender, EventArgs e)
#endif
// verifico codici ricevuti
var paramsList = JsonConvert.DeserializeObject<Dictionary<string, uint>>(currArgs.newMessage);
var paramsList = JsonConvert.DeserializeObject<Dictionary<string, double>>(currArgs.newMessage);
if (paramsList != null)
{
// variabili accessorie
List<string> activeAlarmList = new List<string>();
List<AlarmLogModel> alarmLogList = new List<AlarmLogModel>();
// rileggo da REDIS la conf attuale allarmi da area ALARMS_SETT_KEY, altrimenti uso quella letta inizialmente da conf base
List<BaseAlarmConf>? currAlarmsConf = new List<BaseAlarmConf>();
string rawData = redisDb.StringGet(Constants.ALARMS_SETT_KEY);
// se trovati uso questi...
// recupero elenco parametri salvati in redis...
List<DisplayDataDTO>? redisParamConf = new List<DisplayDataDTO>();
List<DisplayDataDTO> updatedParams = new List<DisplayDataDTO>();
string rawData = redisDb.StringGet(Constants.PARAMS_CONF_KEY);
if (!string.IsNullOrEmpty(rawData))
{
currAlarmsConf = JsonConvert.DeserializeObject<List<BaseAlarmConf>>(rawData);
}
// altrimenti uso quelli di default inizialmente letti
else
{
currAlarmsConf = alarmsConf;
}
if (currAlarmsConf != null)
{
// ciclo x ogni bank di allarmi configurato
foreach (var alarmData in currAlarmsConf)
redisParamConf = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
// se ho i parametri...
if (redisParamConf != null)
{
// recupero valore allarme
var bankVal = paramsList.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 = AlarmsManager.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)
// ciclo x ogni valore ricevuto da message service...
foreach (var item in paramsList)
{
alarmData.alarmsState[0] = actVal;
// aggiungo...
activeAlarmList.AddRange(bankAlarmList);
AlarmLogModel newAlarm = new AlarmLogModel()
// cerco il parametro corrispondente...
var currParam = redisParamConf.FirstOrDefault(x => x.Title == item.Key);
if (currParam != null)
{
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);
currParam.ValueNum = item.Value;
currParam.Value = $"{item.Value.ToString(currParam.DisplFormat)}";
// aggiungo a lista...
updatedParams.Add(currParam);
}
}
}
}
// salvo status aggiornato allarme...
redisDb.StringSet(Constants.ALARMS_SETT_KEY, JsonConvert.SerializeObject(currAlarmsConf));
//// salvo status aggiornato parametri...
//redisDb.StringSet(Constants.PARAMS_CURR_KEY, JsonConvert.SerializeObject(redisParamConf));
string updRawVal = JsonConvert.SerializeObject(redisParamConf);
// invio sulla message pipeline corretta TUTTI i parametri aggiornati serializzati
paramsPipe.saveAndSendMessage(Constants.PARAMS_CURR_KEY, updRawVal);
// serializzo l'elenco allarmi...
string serAlarms = "[]";
serAlarms = JsonConvert.SerializeObject(activeAlarmList);
// invio sulla message pipeline corretta TUTTI gli allarmi serializzati
alarmsPipe.saveAndSendMessage(Constants.ALARM_CURR_KEY, serAlarms);
if (dbController != null)
{
// salvo nel DB lo stato dei bank di allarme
foreach (var dbItem in alarmLogList)
{
_ = dbController.AlarmLogInsert(dbItem).Result;
}
// effettuo update in DB se ho
//// salvo nel DB lo stato dei bank di allarme
//foreach (var dbItem in alarmLogList)
//{
// _ = dbController.AlarmLogInsert(dbItem).Result;
//}
}
}
}
catch
{ }
catch (Exception exc)
{
Log.Error($"Eccezione in ParamsValPipe_EA_NewMessage:{Environment.NewLine}{exc}");
}
}
}