- ok sim tools (decrescenti)
- ok sim allarmi
This commit is contained in:
Samuele Locatelli
2022-07-05 17:14:05 +02:00
parent 0a1f92ae74
commit 3461efaf76
18 changed files with 100 additions and 173 deletions
+6 -103
View File
@@ -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();
+1 -1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -1 +1 @@
1.2.2207.515
1.2.2207.517
+1 -1
View File
@@ -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>
+1 -1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -1 +1 @@
1.2.2207.515
1.2.2207.517
+1 -1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -1 +1 @@
1.2.2207.515
1.2.2207.517
+1 -1
View File
@@ -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
View File
@@ -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;
}
+13 -13
View File
@@ -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"
}
]
+1 -1
View File
@@ -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 -1
View File
@@ -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
View File
@@ -1 +1 @@
1.2.2207.515
1.2.2207.517
+1 -1
View File
@@ -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>