From 14ed50b58d6ca2ba2f020c513bec1121efaa03c5 Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Fri, 29 May 2020 11:42:47 +0200 Subject: [PATCH] WebApi method 4 params update --- Thermo.Active.Core/ThreadsFunctions.cs | 6 +- Thermo.Active.NC/NcAdapter.cs | 36 ++++++---- .../Controllers/WebApi/RecipeController.cs | 72 +++++++++++++++++-- 3 files changed, 92 insertions(+), 22 deletions(-) diff --git a/Thermo.Active.Core/ThreadsFunctions.cs b/Thermo.Active.Core/ThreadsFunctions.cs index 1329d902..cf558517 100644 --- a/Thermo.Active.Core/ThreadsFunctions.cs +++ b/Thermo.Active.Core/ThreadsFunctions.cs @@ -26,7 +26,7 @@ using Thermo.Active.Model.DTOModels.Recipe; public static class ThreadsFunctions { - public static int recipeRtCounter = 5; + public static int recipeRtCounter = 0; public static bool reconnectionIsRunning = false; private static ConcurrentDictionary Timers = new ConcurrentDictionary(); @@ -692,7 +692,7 @@ public static class ThreadsFunctions catch (ThreadAbortException) { ncAdapter.Dispose(); - } + } } public static void ReadRecipeData() { @@ -721,7 +721,7 @@ public static class ThreadsFunctions if (ncAdapter.numericalControl.NC_IsConnected()) { // Get new data from PLC - libraryError = ncAdapter.ReadRecipeData(onlyRt, out Dictionary currRecipe); + libraryError = ncAdapter.ReadRecipeData(onlyRt, false, out Dictionary currRecipe); if (libraryError.IsError()) ManageLibraryError(libraryError); diff --git a/Thermo.Active.NC/NcAdapter.cs b/Thermo.Active.NC/NcAdapter.cs index fb449fe6..0ec46fc0 100644 --- a/Thermo.Active.NC/NcAdapter.cs +++ b/Thermo.Active.NC/NcAdapter.cs @@ -1072,10 +1072,11 @@ namespace Thermo.Active.NC /// /// Vero metodo lettura ricetta da 2 aree memoria PLC /// - /// + /// Indica se aggiornare SOLO i dati RT + /// Indica se usare ultimi dati letti dal PLC senza effettiva lettura (via cache) /// /// - public CmsError ReadRecipeData(bool refreshOnlyRT, out Dictionary currentRecipe) + public CmsError ReadRecipeData(bool refreshOnlyRT, bool useLastRead, out Dictionary currentRecipe) { // init obj currentRecipe = new Dictionary(); @@ -1085,7 +1086,15 @@ namespace Thermo.Active.NC if (NcConfig.NcVendor == NC_VENDOR.S7NET) { Dictionary currPlcRecipe = new Dictionary(); - CmsError cmsError = numericalControl.PLC_RRecipeParamList(refreshOnlyRT, ref currPlcRecipe); + CmsError cmsError = NO_ERROR; + if(useLastRead) + { + cmsError = numericalControl.PLC_RRecipeLastParamList(ref currPlcRecipe); + } + else + { + cmsError = numericalControl.PLC_RRecipeParamList(refreshOnlyRT, ref currPlcRecipe); + } if (cmsError.IsError()) return cmsError; DTORecipeParam currParam = new DTORecipeParam(); @@ -1196,7 +1205,7 @@ namespace Thermo.Active.NC return NO_ERROR; } - + public CmsError ReadNcScada(ScadaSchemaModel scadaSchema, out DTOScadaModel scadaValue) { //ReadScadaDataSiemens(scadaSchema, out scadaValue); @@ -1560,7 +1569,14 @@ namespace Thermo.Active.NC RPRange currRange = new RPRange(); RPStatus currStatus = new RPStatus(); - if (simData) + if (!simData) + { + // gestione errore + cmsError = ReadRecipeData(false, true, out currRecipe); + if (cmsError.IsError()) + return cmsError; + } + else { // leggo l'intero array delle DB... QUI FAKE sulle DB configurate... List recipeConfig = RecipeConfig.Select(x => new DTORecipeConfigModel() @@ -1604,17 +1620,11 @@ namespace Thermo.Active.NC currRecipe.Add(item.Label, currParam); } } - else - { - // gestione errore - cmsError = ReadRecipeData(false, out currRecipe); - if (cmsError.IsError()) - return cmsError; - } // restituisco cod errore se trovato return cmsError; - } + } + /// /// Scrive tutti i parametri della ricetta indicati diff --git a/Thermo.Active/Controllers/WebApi/RecipeController.cs b/Thermo.Active/Controllers/WebApi/RecipeController.cs index 5b89d2e8..397e85bb 100644 --- a/Thermo.Active/Controllers/WebApi/RecipeController.cs +++ b/Thermo.Active/Controllers/WebApi/RecipeController.cs @@ -24,6 +24,11 @@ namespace Thermo.Active.Controllers.WebApi { using (NcAdapter ncAdapter = new NcAdapter()) { + // Try connection + CmsError libraryError = ncAdapter.Connect(); + if (libraryError.errorCode != 0) + return NotFound(); + CmsError cmsError = ncAdapter.GetRecipeOverview(out Dictionary currOverview); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); @@ -36,18 +41,69 @@ namespace Thermo.Active.Controllers.WebApi { using (NcAdapter ncAdapter = new NcAdapter()) { - CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary currentRecipe); + // Try connection + CmsError libraryError = ncAdapter.Connect(); + if (libraryError.errorCode != 0) + return NotFound(); + + CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary currRecipe); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); - return Ok(currentRecipe); + return Ok(currRecipe); + } + } + + + + [Route("update"), HttpPut] + public IHttpActionResult WriteParameters(Dictionary parametersList) + { + using (NcAdapter ncAdapter = new NcAdapter()) + { + // Try connection + CmsError libraryError = ncAdapter.Connect(); + + CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary prevRecipe); + if (cmsError.IsError()) + return BadRequest(cmsError.localizationKey); + + Dictionary updtRecipe = new Dictionary(); + + foreach (var item in parametersList) + { + if (prevRecipe.ContainsKey(item.Key)) + { + // aggiorno il valore HMI nel parametro + var currParam = prevRecipe[item.Key]; + currParam.SetpointHMI = item.Value; + // salvo (1 parametro, potrei fare N...) + updtRecipe.Add(item.Key, currParam); + } + } + + // scrivo sul PLC + ncAdapter.WriteRecipeParams(updtRecipe); + +#if true + // rileggo e restituisco... + cmsError = ncAdapter.ReadFullRecipe(out Dictionary actRecipe); + //cmsError = ncAdapter.ReadRecipeData(false, out Dictionary actRecipe); + if (cmsError.IsError()) + return BadRequest(cmsError.localizationKey); +#endif + + return Ok(actRecipe); } } #if false - [Route("param/{paramName:string}/value/{SetpointHMI:double}"), HttpPut] - //[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.THERMO_MANAGER, Action = ACTIONS.WRITE)] - public IHttpActionResult setParameter(string paramName, double SetpointHMI) + //[Route("param/{paramName:string}/value/{SetpointHMI:double}"), HttpPut] + ////[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.THERMO_MANAGER, Action = ACTIONS.WRITE)] + //public IHttpActionResult setParameter(string paramName, double SetpointHMI) + [Route("write"), HttpPost] + public IHttpActionResult WriteParameter(string paramName, double SetpointHMI) + { //using (UsersController usersController = new UsersController()) //{ @@ -70,6 +126,9 @@ namespace Thermo.Active.Controllers.WebApi //} using (NcAdapter ncAdapter = new NcAdapter()) { + // Try connection + CmsError libraryError = ncAdapter.Connect(); + CmsError cmsError = ncAdapter.ReadFullRecipe(out Dictionary prevRecipe); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); @@ -89,12 +148,13 @@ namespace Thermo.Active.Controllers.WebApi // rileggo e restituisco... cmsError = ncAdapter.ReadFullRecipe(out Dictionary actRecipe); + //cmsError = ncAdapter.ReadRecipeData(false, out Dictionary actRecipe); if (cmsError.IsError()) return BadRequest(cmsError.localizationKey); return Ok(actRecipe); } - } + } #endif } } \ No newline at end of file