159 lines
5.3 KiB
C#
159 lines
5.3 KiB
C#
using MP.MONO.Core;
|
|
using MP.MONO.Core.DTO;
|
|
using MP.MONO.Data.DbModels;
|
|
using NLog;
|
|
using NLua;
|
|
|
|
namespace MP.MONO.DECODER
|
|
{
|
|
public class ParamsManager
|
|
{
|
|
#region Private Fields
|
|
|
|
/// <summary>
|
|
/// Dizionario dei valori accumulati sulle variabili
|
|
/// </summary>
|
|
private Dictionary<string, VCData> ParamsAccumulator = new Dictionary<string, VCData>();
|
|
|
|
#endregion Private Fields
|
|
|
|
#region Protected Fields
|
|
|
|
protected static Logger Log = LogManager.GetCurrentClassLogger();
|
|
protected static string luaPath = "";
|
|
protected static Lua state = new Lua();
|
|
protected List<string> AlarmList = new List<string>();
|
|
|
|
#endregion Protected Fields
|
|
|
|
#region Public Fields
|
|
|
|
public static string alarmStatus = "";
|
|
public static bool valueChanged = false;
|
|
|
|
#endregion Public Fields
|
|
|
|
#region Public Constructors
|
|
|
|
public ParamsManager()
|
|
{
|
|
// preparo variabile x avvisare script che il modo è da NLua
|
|
luaPath = Path.Combine(Directory.GetCurrentDirectory(), "lua", "ParamsDecoder.lua");
|
|
|
|
state["callMode"] = "NLua";
|
|
state["lastVal"] = 0;
|
|
state["currVal"] = 0;
|
|
|
|
Log.Info("ParamsManager OK");
|
|
Console.WriteLine("ParamsManager OK");
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#region Public Methods
|
|
|
|
/// <summary>
|
|
/// Funzione chiamata LUA x calcolo degli eventuali parametri con periodi "scaduti"
|
|
/// </summary>
|
|
/// <param name="paramsList"></param>
|
|
/// <param name="redisParamConf"></param>
|
|
/// <returns></returns>
|
|
public List<DataLogModel> processData(Dictionary<string, double> paramsList, List<DisplayDataDTO> redisParamConf)
|
|
{
|
|
List<DataLogModel> answ = new List<DataLogModel>();
|
|
DateTime adesso = DateTime.Now;
|
|
|
|
// vado ad "accumulare i dati" a quelli presenti...
|
|
foreach (var item in paramsList)
|
|
{
|
|
var currParam = redisParamConf.FirstOrDefault(x => x.Title == item.Key);
|
|
// cerco nelle variabili accomulatori...
|
|
if (!ParamsAccumulator.ContainsKey(item.Key))
|
|
{
|
|
if (currParam != null)
|
|
{
|
|
var dataList = new List<double>();
|
|
dataList.Add(item.Value);
|
|
VCData newSet = new VCData()
|
|
{
|
|
dataArray = dataList,
|
|
DTStart = adesso,
|
|
Funzione = currParam.VcFunc,
|
|
Period = currParam.SamplePeriod
|
|
};
|
|
// se non ci fosse creo
|
|
ParamsAccumulator.Add(item.Key, newSet);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// altrimenti aggiungo
|
|
ParamsAccumulator[item.Key].dataArray.Add(item.Value);
|
|
}
|
|
|
|
// effettuo verifiche scadenza
|
|
if (ParamsAccumulator.ContainsKey(item.Key))
|
|
{
|
|
if (ParamsAccumulator[item.Key].isElapsed)
|
|
{
|
|
// se scaduto --> mando a LUA x calcolo
|
|
|
|
// FIXME TODO
|
|
var calcVal = ParamsAccumulator[item.Key].dataArray.FirstOrDefault();
|
|
#if false
|
|
// processing LUA del calcolo dei dati "scaduti"
|
|
//state["prefix"] = prefix;
|
|
//state["alarmList"] = alarmList;
|
|
//state["numAlarm"] = alarmList.Count;
|
|
//state["muteMask"] = muteMask;
|
|
//state["disableMask"] = disableMask;
|
|
|
|
// invio dati aggiornati a LUA
|
|
state["lastVal"] = lastVal;
|
|
state["currVal"] = currVal;
|
|
|
|
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)
|
|
{
|
|
Log.Trace($"Changed: {valueChanged}");
|
|
Log.Trace(alarmStatus);
|
|
|
|
LuaTable tabActive = state.GetTable("alarmListActive");
|
|
List<string> activeList = new List<string>();
|
|
foreach (var allarme in tabActive.Values)
|
|
{
|
|
answ.Add($"{allarme}");
|
|
}
|
|
}
|
|
#endif
|
|
|
|
|
|
// aggiungo alla lista finale...
|
|
var dbRecord = new DataLogModel()
|
|
{
|
|
DtRif = adesso,
|
|
FluxType = item.Key,
|
|
MachineId = 1,
|
|
ValNum = calcVal,
|
|
ValStr = $"{calcVal:N3}"
|
|
|
|
};
|
|
answ.Add(dbRecord);
|
|
|
|
// elimino dai valori accumulati...
|
|
ParamsAccumulator.Remove(item.Key);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
return answ;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
}
|
|
} |