Fix SIM
- ok sim tools (decrescenti) - ok sim allarmi
This commit is contained in:
@@ -786,17 +786,18 @@ namespace MP.MONO.ADAPTER.OPC
|
||||
currItem.Value = rawDataVal;
|
||||
}
|
||||
logTrace($"R&S | ParamKList | {uuid} | {currItem.Value}");
|
||||
// parametri: inviati come DTO
|
||||
#if false
|
||||
|
||||
// genero un dictionary di valori stringa / double e lo serializzo...
|
||||
var dataDict = ParamStatus.ToDictionary(x => x.Title, x => x.Value);
|
||||
string payloadParams = JsonConvert.SerializeObject(dataDict);
|
||||
// invio
|
||||
saveAndSendMessage(Constants.PARAMS_ACT_KEY, Constants.PARAMS_RAW_QUEUE, payloadParams);
|
||||
#endif
|
||||
#if false
|
||||
// parametri: inviati come DTO
|
||||
string payloadParams = JsonConvert.SerializeObject(ParamStatus);
|
||||
// invio
|
||||
saveAndSendMessage(Constants.PARAMS_CURR_KEY, Constants.PARAMS_M_QUEUE, payloadParams);
|
||||
saveAndSendMessage(Constants.PARAMS_CURR_KEY, Constants.PARAMS_M_QUEUE, payloadParams);
|
||||
#endif
|
||||
}
|
||||
|
||||
// Allarmi
|
||||
@@ -1237,121 +1238,23 @@ namespace MP.MONO.ADAPTER.OPC
|
||||
/// </summary>
|
||||
private void setupGroupConf()
|
||||
{
|
||||
// leggo e salvo conf varie...
|
||||
|
||||
// ActLog
|
||||
#if false
|
||||
string fullPath = Path.Combine(configPath, "ActLog.json");
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
var rawData = File.ReadAllText(fullPath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
ActLogStatus = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
|
||||
// salvo in redis!
|
||||
redisDb.StringSetAsync(Constants.ACTLOG_CONF_KEY, JsonConvert.SerializeObject(ActLogStatus));
|
||||
// calcolo l'elenco dei cod univoci da gestire e lo salvo...
|
||||
ActLogKList = ActLogStatus.Select(x => x.ExtCode).ToList();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// leggo e salvo conf varie (dati x decodifica e gestione)
|
||||
|
||||
ActLogStatus = confManager.getActLog();
|
||||
ActLogKList = ActLogStatus.Select(x => x.ExtCode).ToList();
|
||||
|
||||
#if false
|
||||
fullPath = Path.Combine(configPath, "Tools.json");
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
var rawData = File.ReadAllText(fullPath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
ToolStatus = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
|
||||
// salvo in redis!
|
||||
redisDb.StringSetAsync(Constants.TOOLS_CONF_KEY, JsonConvert.SerializeObject(ToolStatus));
|
||||
// calcolo l'elenco dei cod univoci da gestire e lo salvo...
|
||||
ToolKList = ToolStatus.Select(x => x.ExtCode).ToList();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ToolStatus = confManager.getTools();
|
||||
ToolKList = ActLogStatus.Select(x => x.ExtCode).ToList();
|
||||
|
||||
#if false
|
||||
fullPath = Path.Combine(configPath, "Parameters.json");
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
var rawData = File.ReadAllText(fullPath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
ParamStatus = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
|
||||
// salvo in redis!
|
||||
redisDb.StringSetAsync(Constants.PARAMS_CONF_KEY, JsonConvert.SerializeObject(ParamStatus));
|
||||
// calcolo l'elenco dei cod univoci da gestire e lo salvo...
|
||||
ParamKList = ParamStatus.Select(x => x.ExtCode).ToList();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ParamStatus = confManager.getParamsConf();
|
||||
ParamKList = ParamStatus.Select(x => x.ExtCode).ToList();
|
||||
|
||||
|
||||
#if false
|
||||
fullPath = Path.Combine(configPath, "Alarms.json");
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
var rawData = File.ReadAllText(fullPath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
AlarmsStatus = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
|
||||
// salvo in redis!
|
||||
redisDb.StringSetAsync(Constants.ALARMS_ADAP_CONF_KEY, JsonConvert.SerializeObject(AlarmsStatus));
|
||||
// calcolo l'elenco dei cod univoci da gestire e lo salvo...
|
||||
AlarmsKList = AlarmsStatus.Select(x => x.ExtCode).ToList();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
AlarmsStatus = confManager.getAlarmsConf();
|
||||
AlarmsKList = AlarmsStatus.Select(x => x.ExtCode).ToList();
|
||||
|
||||
#if false
|
||||
fullPath = Path.Combine(configPath, "MPStatus.json");
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
var rawData = File.ReadAllText(fullPath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
MPStatus = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
|
||||
// salvo in redis!
|
||||
redisDb.StringSetAsync(Constants.MP_STATUS_CONF_KEY, JsonConvert.SerializeObject(MPStatus));
|
||||
// calcolo l'elenco dei cod univoci da gestire e lo salvo...
|
||||
MPKList = MPStatus.Select(x => x.ExtCode).ToList();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
MPStatus = confManager.getMPStatusConf();
|
||||
MPKList = MPStatus.Select(x => x.ExtCode).ToList();
|
||||
|
||||
#if false
|
||||
fullPath = Path.Combine(configPath, "Counters.json");
|
||||
if (File.Exists(fullPath))
|
||||
{
|
||||
var rawData = File.ReadAllText(fullPath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
CountStatus = JsonConvert.DeserializeObject<List<DisplayDataDTO>>(rawData);
|
||||
// salvo in redis!
|
||||
redisDb.StringSetAsync(Constants.CNT_STATUS_CONF_KEY, JsonConvert.SerializeObject(CountStatus));
|
||||
// calcolo l'elenco dei cod univoci da gestire e lo salvo...
|
||||
CountKList = CountStatus.Select(x => x.ExtCode).ToList();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
CountStatus = confManager.getCountersConf();
|
||||
CountKList = CountStatus.Select(x => x.ExtCode).ToList();
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86;x64</Platforms>
|
||||
<Version>1.2.2207.515</Version>
|
||||
<Version>1.2.2207.517</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2207.515</h4>
|
||||
<h4>Version: 1.2.2207.517</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2207.515
|
||||
1.2.2207.517
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2207.515</version>
|
||||
<version>1.2.2207.517</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.ANALYZER/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.ANALYZER/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<Platforms>AnyCPU;x86;x64</Platforms>
|
||||
<Version>1.2.2207.515</Version>
|
||||
<Version>1.2.2207.517</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2207.515</h4>
|
||||
<h4>Version: 1.2.2207.517</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2207.515
|
||||
1.2.2207.517
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2207.515</version>
|
||||
<version>1.2.2207.517</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.DECODER/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.DECODER/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2207.515</h4>
|
||||
<h4>Version: 1.2.2207.517</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2207.515
|
||||
1.2.2207.517
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2207.515</version>
|
||||
<version>1.2.2207.517</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.SIM/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.SIM/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
+66
-42
@@ -54,7 +54,7 @@ namespace MachineSim
|
||||
Order = i.Order,
|
||||
Title = i.Title,
|
||||
Type = i.Type,
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd),
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, 1),
|
||||
DisplFormat = i.DisplFormat
|
||||
}).ToList();
|
||||
|
||||
@@ -160,9 +160,8 @@ namespace MachineSim
|
||||
Order = i.Order,
|
||||
Title = i.Title,
|
||||
Type = i.Type,
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd),
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, 1),
|
||||
DisplFormat = i.DisplFormat
|
||||
//Value = $"{getNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd):N3}",
|
||||
}).ToList();
|
||||
|
||||
foreach (var item in answ)
|
||||
@@ -186,9 +185,8 @@ namespace MachineSim
|
||||
Order = i.Order,
|
||||
Title = i.Title,
|
||||
Type = i.Type,
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, i.IsBoolean, i.TrueRatio),
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, i.IsBoolean ? 2 : 1, i.TrueRatio),
|
||||
DisplFormat = i.DisplFormat
|
||||
//Value = $"{getNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd):N3}",
|
||||
}).ToList();
|
||||
|
||||
foreach (var item in answ)
|
||||
@@ -212,7 +210,7 @@ namespace MachineSim
|
||||
Order = i.Order,
|
||||
Title = i.Title,
|
||||
Type = i.Type,
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd),
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, 1),
|
||||
DisplFormat = i.DisplFormat,
|
||||
CssIcon = i.CssIcon,
|
||||
EnablePlot = i.EnablePlot,
|
||||
@@ -231,7 +229,7 @@ namespace MachineSim
|
||||
{
|
||||
Dictionary<string, double> answ = new Dictionary<string, double>();
|
||||
// genero a partire dall'elenco configurato da simulare...
|
||||
answ = currSimPar.ToDictionary(i => i.Title, i => simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd));
|
||||
answ = currSimPar.ToDictionary(i => i.Title, i => simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, 1));
|
||||
return answ;
|
||||
}
|
||||
|
||||
@@ -334,14 +332,19 @@ namespace MachineSim
|
||||
Order = i.Order,
|
||||
Title = i.Title,
|
||||
Type = i.Type,
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd),
|
||||
ValueNum = simNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd, 3),
|
||||
DisplFormat = i.DisplFormat
|
||||
//Value = $"{getNext(i.ValueNum, i.MinVal, i.MaxVal, i.SimMean, i.SimStd):N3}",
|
||||
}).ToList();
|
||||
|
||||
foreach (var item in answ)
|
||||
{
|
||||
item.Value = $"{item.ValueNum.ToString(item.DisplFormat)}";
|
||||
// aggiorno con ultimo valore simulato...
|
||||
var simItem = currSimTools.FirstOrDefault(x => x.Title == item.Title);
|
||||
if (simItem != null)
|
||||
{
|
||||
simItem.ValueNum = item.ValueNum;
|
||||
}
|
||||
}
|
||||
|
||||
return answ;
|
||||
@@ -361,46 +364,67 @@ namespace MachineSim
|
||||
/// <param name="MaxVal"></param>
|
||||
/// <param name="sMean"></param>
|
||||
/// <param name="sStd"></param>
|
||||
/// <param name="isBoolean"></param>
|
||||
/// <param name="trueRatio"></param>
|
||||
/// <param name="simMode">Modalità simulazione
|
||||
/// 1 = std, RandomWalk + trend periodico con memoria
|
||||
/// 2 = boolean
|
||||
/// 3 = trend secondo valore mean (crescente se >0, decrescente se <0)
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
public double simNext(double CurrVal, double MinVal, double MaxVal, double sMean, double sStd, bool isBoolean = false, double trueRatio = 0.5)
|
||||
public double simNext(double CurrVal, double MinVal, double MaxVal, double sMean, double sStd, int simMode = 1, double trueRatio = 0.5)
|
||||
{
|
||||
double innov = 0;
|
||||
double trend = 0;
|
||||
// se è boolean --> simulazione 0/1 rapida con % ratio indicata
|
||||
if (isBoolean)
|
||||
switch (simMode)
|
||||
{
|
||||
CurrVal = rand.Next(10000) <= trueRatio * 10000 ? 1 : 0;
|
||||
}
|
||||
// simulazione complessa con memoria
|
||||
else
|
||||
{
|
||||
// innovazione stocastica di base
|
||||
double innov = Normal.Sample(sMean, sStd);
|
||||
// innovazione deterministica:
|
||||
int resto = (DateTime.Now.Second % 10);
|
||||
double trend = 0;
|
||||
switch (resto)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
trend = sMean + 15 * sStd;
|
||||
break;
|
||||
case 2:
|
||||
CurrVal = rand.Next(10000) <= trueRatio * 10000 ? 1 : 0;
|
||||
break;
|
||||
case 3:
|
||||
innov = Normal.Sample(sMean, sStd);
|
||||
trend = rand.NextDouble() * 2 * sMean;
|
||||
double delta = innov + trend;
|
||||
// il delta deve essere dello stesso segno della media...
|
||||
if (delta * sMean < 0)
|
||||
{
|
||||
delta = delta * -1;
|
||||
}
|
||||
CurrVal += delta;
|
||||
// verifico estremi...
|
||||
CurrVal = CurrVal > MaxVal ? MinVal : CurrVal;
|
||||
CurrVal = CurrVal < MinVal ? MaxVal : CurrVal;
|
||||
break;
|
||||
case 1:
|
||||
default:
|
||||
// innovazione stocastica di base
|
||||
innov = Normal.Sample(sMean, sStd);
|
||||
int multFact = rand.Next(1, 6);
|
||||
// innovazione deterministica:
|
||||
int resto = (DateTime.Now.Second % 10);
|
||||
trend = 0;
|
||||
switch (resto)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
case 7:
|
||||
trend = sMean + multFact * sStd;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
case 6:
|
||||
case 7:
|
||||
trend = -(sMean + 15 * sStd);
|
||||
break;
|
||||
case 2:
|
||||
case 5:
|
||||
case 6:
|
||||
trend = -(sMean + multFact * sStd);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
CurrVal += innov + trend;
|
||||
// verifico estremi...
|
||||
CurrVal = CurrVal > MaxVal ? MaxVal : CurrVal;
|
||||
CurrVal = CurrVal < MinVal ? MinVal : CurrVal;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
CurrVal += innov + trend;
|
||||
// verifico estremi...
|
||||
CurrVal = CurrVal > MaxVal ? MaxVal : CurrVal;
|
||||
CurrVal = CurrVal < MinVal ? MinVal : CurrVal;
|
||||
break;
|
||||
}
|
||||
return CurrVal;
|
||||
}
|
||||
|
||||
@@ -3,22 +3,22 @@
|
||||
"Order": 0,
|
||||
"Type": "TOOL",
|
||||
"Title": "Tool 01 life",
|
||||
"Value": "1000",
|
||||
"ValueNum": 1000,
|
||||
"Value": "99",
|
||||
"ValueNum": 99,
|
||||
"MinVal": 0,
|
||||
"MaxVal": 2000,
|
||||
"SimMean": -1,
|
||||
"SimStd": 1,
|
||||
"MaxVal": 100,
|
||||
"SimMean": -1.5,
|
||||
"SimStd": 0.5,
|
||||
"DisplFormat": "N1"
|
||||
},
|
||||
{
|
||||
"Order": 1,
|
||||
"Type": "TOOL",
|
||||
"Title": "Tool 02 life",
|
||||
"Value": "800",
|
||||
"ValueNum": 800,
|
||||
"Value": "85",
|
||||
"ValueNum": 85,
|
||||
"MinVal": 0,
|
||||
"MaxVal": 2000,
|
||||
"MaxVal": 100,
|
||||
"SimMean": -1,
|
||||
"SimStd": 1,
|
||||
"DisplFormat": "N1"
|
||||
@@ -27,12 +27,12 @@
|
||||
"Order": 2,
|
||||
"Type": "TOOL",
|
||||
"Title": "Tool 03 life",
|
||||
"Value": "700",
|
||||
"ValueNum": 700,
|
||||
"Value": "70",
|
||||
"ValueNum": 70,
|
||||
"MinVal": 0,
|
||||
"MaxVal": 2000,
|
||||
"SimMean": -1,
|
||||
"SimStd": 1,
|
||||
"MaxVal": 100,
|
||||
"SimMean": -2.5,
|
||||
"SimStd": 2,
|
||||
"DisplFormat": "N1"
|
||||
}
|
||||
]
|
||||
@@ -5,7 +5,7 @@
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Platforms>AnyCPU;x86;x64</Platforms>
|
||||
<Version>1.2.2207.515</Version>
|
||||
<Version>1.2.2207.517</Version>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<body>
|
||||
<i>MAPO-MONO</i>
|
||||
<h4>Version: 1.2.2207.515</h4>
|
||||
<h4>Version: 1.2.2207.517</h4>
|
||||
<br /> Release Note:
|
||||
<ul>
|
||||
<li>
|
||||
|
||||
@@ -1 +1 @@
|
||||
1.2.2207.515
|
||||
1.2.2207.517
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<item>
|
||||
<version>1.2.2207.515</version>
|
||||
<version>1.2.2207.517</version>
|
||||
<url>http://nexus.steamware.net/repository/SWS/MP.MONO.UI/stable/LAST/MP.Mon.zip</url>
|
||||
<changelog>http://nexus.steamware.net/repository/SWS/MP.MONO.UI/stable/LAST/ChangeLog.html</changelog>
|
||||
<mandatory>false</mandatory>
|
||||
|
||||
Reference in New Issue
Block a user