Files
cms_thermo_active/Thermo.Active/Controllers/WebApi/WarmersController.cs
T
2020-10-24 12:11:19 +02:00

381 lines
14 KiB
C#

using CMS_CORE_Library.Models;
using System;
using System.Collections.Generic;
using System.Web.Http;
using Thermo.Active.Config;
using Thermo.Active.Model.DTOModels.ThWarmers;
using Thermo.Active.NC;
using Thermo.Active.Utils;
using static Thermo.Active.Config.ServerConfig;
using static Thermo.Active.Model.Constants;
namespace Thermo.Active.Controllers.WebApi
{
[RoutePrefix("api/warmers")]
public class WarmersController : ApiController
{
#region Fields
/// <summary>
/// Oggetto adapter condiviso da WebAPI
/// </summary>
protected static NcAdapter ncAdapter = new NcAdapter();
#endregion Fields
#region Methods
/// <summary>
/// Cancel recipe modification (parameters: PLC --> HMI)
/// </summary>
/// <returns></returns>
[Route("cancel"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult CancelEdit()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | Recipe CancelEdit | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC il comando annula!
libraryError = ncAdapter.ConfirmRecipeData(false);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers CancelEdit error | ConfirmRecipeData | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI dei riscaldi...
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ReadWarmers | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// rileggo la ricetta
var currParams = new Dictionary<int, int>();
foreach (var item in currWarmers)
{
currParams.Add(item.Key, item.Value.SetpointHMI);
}
saveCurrentRecipeWarmers(currParams);
// ritorno solo fatto!
return Ok();
}
/// <summary>
/// Confirm recipe modification (parameters: HMI --> PLC)
/// </summary>
/// <returns></returns>
[Route("confirm"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult ConfirmEdit()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | Warmers ConfirmEdit | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC il comando conferma!
libraryError = ncAdapter.ConfirmRecipeData(true);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ConfirmRecipeData | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupero i dati LIVE dei parametri HMI dei riscaldi...
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers ConfirmEdit error | ReadWarmers | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// rileggo la ricetta
var currParams = new Dictionary<int, int>();
foreach (var item in currWarmers)
{
currParams.Add(item.Key, item.Value.SetpointHMI);
}
saveCurrentRecipeWarmers(currParams);
// ritorno solo fatto!
return Ok();
}
/// <summary>
/// Get area info (plate) for display on HMI
/// </summary>
/// <returns></returns>
[Route("area"), HttpGet]
public IHttpActionResult GetCurrentAreaPerc()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentAreaPerc | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// recupera aree % X / Y
libraryError = ncAdapter.GetWarmMaterialArea(out Dictionary<string, double> currAreaPerc);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetCurrentAreaPerc error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currAreaPerc);
}
/// <summary>
/// Current channels status
/// </summary>
/// <returns></returns>
[Route("channels"), HttpGet]
public IHttpActionResult GetCurrentWarmersChannels()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentWarmersChannels | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
libraryError = ncAdapter.ReadWarmers(false, out Dictionary<int, DTOWarmers> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetRecipeOverview error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currWarmers);
}
/// <summary>
/// Resistance setup info
/// </summary>
/// <returns></returns>
[Route("resistances"), HttpGet]
public IHttpActionResult GetCurrentWarmersResistances()
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | GetCurrentWarmersResistances | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
libraryError = ncAdapter.GetWarmersResistances(out Dictionary<int, Model.ConfigModels.RiskResistModel> currWarmers);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"GetCurrentWarmersResistances error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
return Ok(currWarmers);
}
/// <summary>
/// Force write risk setup + others warmers data (ex ThermoCam)
/// </summary>
/// <returns></returns>
[Route("setConfig"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult SetConfig()
{
// scrive configurazioni RISK
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | SetConfig | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC setup warmers
libraryError = ncAdapter.WriteRecipeWarmConfig();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"Warmers SetConfig error | WriteRecipeWarmConfig | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
/// <summary>
/// Write SetpointHMI (%)
/// </summary>
/// <param name="channelsLoad"></param>
/// <returns></returns>
[Route("update"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult WriteSetpoints(Dictionary<int, int> channelsLoad)
{
// scrive su CHp da ricetta oppure da override x parametri utente...
if (channelsLoad != null)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | WriteSetpoints | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC
libraryError = ncAdapter.WriteRecipeWarmChSetpHMI(channelsLoad);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"WriteSetpoints error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
else
{
return NotFound();
}
}
/// <summary>
/// Write Termocam Temperature Setpoint (°C)
/// </summary>
/// <param name="channelsTemp"></param>
/// <returns></returns>
[Route("updateTCamTemp"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult WriteTCamTempSet(Dictionary<int, double> channelsTemp)
{
// scrive su CHp da ricetta oppure da override x parametri utente...
if (channelsTemp != null)
{
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | WriteTCamTempSet | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC
libraryError = ncAdapter.WriteRecipeWarmChSetpThermoCam(channelsTemp);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"WriteTCamTempSet error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// ritorno solo fatto!
return Ok();
}
else
{
return NotFound();
}
}
/// <summary>
/// Write Termocam channels ENABLED
/// </summary>
/// <param name="channelsEnab"></param>
/// <returns></returns>
[Route("updateTCamEnab"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult WriteTCamEnab(Dictionary<int, bool> channelsEnab)
{
// scrive su CHp da ricetta oppure da override x parametri utente...
if (channelsEnab != null)
{
#if false
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | WriteThermocamSetpoints | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC
libraryError = ncAdapter.WriteRecipeWarmChSetpThermoCam(channelsAct);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"WriteThermocamSetpoints error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
#endif
// ritorno solo fatto!
return Ok();
}
else
{
return NotFound();
}
}
/// <summary>
/// Set/Unset ThermoCam mode
/// </summary>
/// <param name="enableTCam"></param>
/// <returns></returns>
[Route("setTCamOnOff"), HttpPut]
[WebApiAuthorize(FunctionAccess = FUNCTIONALITY_NAMES.RECIPE_MANAGER, Action = ACTIONS.READ)]
public IHttpActionResult SetTCamOnOff(bool enableTCam)
{
// scrive su CommandWord attivazione funzione ThermoCam
#if false
// Try connection
CmsError libraryError = ncAdapter.Connect();
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"NC Not connected! | WriteThermocamSetpoints | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
// scrivo sul PLC
libraryError = ncAdapter.WriteRecipeWarmChSetpThermoCam(channelsAct);
if (libraryError.IsError())
{
ThermoActiveLogger.LogError($"WriteThermocamSetpoints error | {libraryError.exception}");
return BadRequest(libraryError.localizationKey);
}
#endif
// ritorno solo fatto!
return Ok();
}
/// <summary>
/// Do actual recipe warmers setpoints FileSave
/// </summary>
/// <param name="chSetpoints"></param>
private static void saveCurrentRecipeWarmers(Dictionary<int, int> chSetpoints)
{
try
{
// ora salvo ANCHE i dati live...
NcAdapter.RecipeLiveData.ChannelSetpoints = chSetpoints;
// e salvo su disco
NcFileAdapter.SaveRecipeCurrent();
}
catch (Exception exc)
{
ThermoActiveLogger.LogError($"Warmers | SaveCurrentRecipeParams exception | {exc}");
}
}
#endregion Methods
}
}