From b888c542b68e38ae67fc790946b21952c8254e0a Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Wed, 9 Mar 2022 20:00:52 +0100 Subject: [PATCH] Update SIM --- MachineSim/MachineSim.csproj | 19 +++++----- MachineSim/Program.cs | 68 ++++++++++++++++++++++++++---------- MachineSim/Simulator.cs | 15 +++++--- 3 files changed, 72 insertions(+), 30 deletions(-) diff --git a/MachineSim/MachineSim.csproj b/MachineSim/MachineSim.csproj index c4d5316..515763c 100644 --- a/MachineSim/MachineSim.csproj +++ b/MachineSim/MachineSim.csproj @@ -21,28 +21,31 @@ - + Always - + Always - + Always - + Always - + Always - + Always - + Always - + + Always + + Always diff --git a/MachineSim/Program.cs b/MachineSim/Program.cs index 35a41d6..0a1a834 100644 --- a/MachineSim/Program.cs +++ b/MachineSim/Program.cs @@ -1,6 +1,8 @@ // See https://aka.ms/new-console-template for more information using MachineSim; +using MP.MONO.Core.CONF; using MP.MONO.Core.DTO; +using MP.MONO.Data; using MP.MONO.Data.Controllers; using Newtonsoft.Json; using StackExchange.Redis; @@ -9,6 +11,8 @@ string lineSep = "------------------------------------------------------"; string redisConf = "127.0.0.1:6379"; Random rand = new Random(); +List? statusList = new List(); +List? modeList = new List(); Console.WriteLine(lineSep); Console.WriteLine($"Starting Machine SIM - redis server on {redisConf}!"); @@ -22,8 +26,12 @@ ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(redisConf); ISubscriber sub = redis.GetSubscriber(); IDatabase? redisDb = redis.GetDatabase(); + // imposto parametri simulatore -var currSimGen = new Simulator(Directory.GetCurrentDirectory()); +string confPath = Path.Combine(Directory.GetCurrentDirectory(), "conf"); +// salvo configurazioni in redis +setupConf(); +var currSimGen = new Simulator(confPath, modeList.Count, statusList.Count); // avvio tutti i thread... Thread threadStatus = new Thread(simStatus); @@ -47,19 +55,40 @@ threadEvHistory.Start(); threadActLog.Start(); /// -/// Hash Redis contenente i dati MP di una specifico TYPE (es StatusMacchina, StateMachineIngressi, ...) +/// Setup e salvataggio redis delle conf (es modi/stati) /// -/// -/// -string mHash(string dataType) +void setupConf() { - return $"MAPO-MONO:{dataType}"; + // leggo e salvo conf stati + string fullPath = Path.Combine(confPath, "ConfStatus.json"); + if (File.Exists(fullPath)) + { + var rawData = File.ReadAllText(fullPath); + if (!string.IsNullOrEmpty(rawData)) + { + List? statusList = JsonConvert.DeserializeObject>(rawData); + // salvo in redis! + redisDb.StringSetAsync(Utils.mHash("Conf:Status"), JsonConvert.SerializeObject(statusList)); + } + } + // leggo e salvo conf modi + fullPath = Path.Combine(confPath, "ConfMode.json"); + if (File.Exists(fullPath)) + { + var rawData = File.ReadAllText(fullPath); + if (!string.IsNullOrEmpty(rawData)) + { + var localObj = JsonConvert.DeserializeObject>(rawData); + // salvo in redis! + redisDb.StringSetAsync(Utils.mHash("Conf:Mode"), JsonConvert.SerializeObject(localObj)); + } + } } void saveAndSendMessage(string memKey, string value, string notifyChannel, string message) { // effettuo la scrittura nell'area di memoria indicata - redisDb.StringSetAsync(memKey, value); ; + redisDb.StringSetAsync(memKey, value); //redis.GetDatabase().SetAdd(memKey, value); //redis.GetDatabase().StringSetAsync(memKey, value); @@ -67,6 +96,7 @@ void saveAndSendMessage(string memKey, string value, string notifyChannel, strin sub.Publish(notifyChannel, message); Console.WriteLine($"[{notifyChannel}] key: {memKey} | val: {value} | message: {message}"); } + void simAlarms() { int minPeriod = 3000; @@ -88,11 +118,12 @@ void simAlarms() } string rawData = JsonConvert.SerializeObject(activeAlarms); // decodifico allarme e lo trasformo in List di allarmi attivi... - saveAndSendMessage(mHash("Machine:Alarms:Current"), rawData, "allarms", rawData); + saveAndSendMessage(Utils.mHash("Machine:Alarms:Current"), rawData, "allarms", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); } while (true); } + void simParameters() { int minPeriod = 250; @@ -102,22 +133,23 @@ void simParameters() { var newParams = currSimGen.getParameters(); string rawData = JsonConvert.SerializeObject(newParams); - saveAndSendMessage(mHash("Machine:Parameters:Current"), rawData, "parameters", rawData); + saveAndSendMessage(Utils.mHash("Machine:Parameters:Current"), rawData, "parameters", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); } while (true); } + void simStatus() { - int minPeriod = 2000; - int maxPeriod = 3000; + int minPeriod = 1000; + int maxPeriod = 5000; do { // recupero uno stato simulato var newStatus = currSimGen.getStatus(); string rawData = JsonConvert.SerializeObject(newStatus); - saveAndSendMessage(mHash("Machine:Status:Current"), rawData, "status", rawData); + saveAndSendMessage(Utils.mHash("Machine:Status:Current"), rawData, "status", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); @@ -134,7 +166,7 @@ void simProd() // recupero uno stato simulato var newStatus = currSimGen.getProd(); string rawData = JsonConvert.SerializeObject(newStatus); - saveAndSendMessage(mHash("Machine:Production:Current"), rawData, "production", rawData); + saveAndSendMessage(Utils.mHash("Machine:Production:Current"), rawData, "production", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); @@ -151,7 +183,7 @@ void simMachStat() // recupero uno stato simulato var newVal = currSimGen.getProdStats(); string rawData = JsonConvert.SerializeObject(newVal); - saveAndSendMessage(mHash("Machine:MachStats:Current"), rawData, "machstats", rawData); + saveAndSendMessage(Utils.mHash("Machine:MachStats:Current"), rawData, "machstats", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); @@ -168,7 +200,7 @@ void simMaint() // recupero uno stato simulato var newVal = currSimGen.getMaint(); string rawData = JsonConvert.SerializeObject(newVal); - saveAndSendMessage(mHash("Machine:Maintenance:Current"), rawData, "maintenance", rawData); + saveAndSendMessage(Utils.mHash("Machine:Maintenance:Current"), rawData, "maintenance", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); @@ -185,7 +217,7 @@ void simTools() // recupero uno stato simulato var newVal = currSimGen.getTools(); string rawData = JsonConvert.SerializeObject(newVal); - saveAndSendMessage(mHash("Machine:Tools:Current"), rawData, "tools", rawData); + saveAndSendMessage(Utils.mHash("Machine:Tools:Current"), rawData, "tools", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); @@ -202,7 +234,7 @@ void simEvents() // recupero uno stato simulato var newVal = currSimGen.getEvents(); string rawData = JsonConvert.SerializeObject(newVal); - saveAndSendMessage(mHash("Machine:Events:Current"), rawData, "events", rawData); + saveAndSendMessage(Utils.mHash("Machine:Events:Current"), rawData, "events", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); @@ -219,7 +251,7 @@ void simActivityLog() // recupero uno stato simulato var newVal = currSimGen.getActLog(); string rawData = JsonConvert.SerializeObject(newVal); - saveAndSendMessage(mHash("Machine:ActivityLog:Current"), rawData, "activitylog", rawData); + saveAndSendMessage(Utils.mHash("Machine:ActivityLog:Current"), rawData, "activitylog", rawData); // attesa random Thread.Sleep(rand.Next(minPeriod, maxPeriod)); diff --git a/MachineSim/Simulator.cs b/MachineSim/Simulator.cs index fe0b150..6c167e2 100644 --- a/MachineSim/Simulator.cs +++ b/MachineSim/Simulator.cs @@ -25,9 +25,14 @@ namespace MachineSim #region Public Constructors - public Simulator(string _basePath) + protected int numMode { get; set; } = 1; + protected int numStatus { get; set; } = 1; + + public Simulator(string _basePath, int nMode, int nStatus) { basePath = _basePath; + numMode = nMode; + numStatus = nStatus; setupConfig(); } @@ -240,7 +245,7 @@ namespace MachineSim /// public MachineDTO getStatus() { - int maxRun = 5; + int maxRun = 7; int maxExe = 7; MachineDTO currMachDto = new MachineDTO() @@ -249,8 +254,10 @@ namespace MachineSim Model = "SIM Machine", Name = "DEMO 01", SerNumber = "2022-0001", - Mode = $"{(Enums.MachRunMode)rand.Next(0, maxRun)}", - Status = $"{(Enums.MachExeStatus)rand.Next(0, maxExe)}" + ModeId = rand.Next(0, maxRun), + StatusId = rand.Next(0, maxExe) + //Mode = $"{(Enums.MachRunMode)rand.Next(0, maxRun)}", + //Status = $"{(Enums.MachExeStatus)rand.Next(0, maxExe)}" }; return currMachDto;