159 lines
5.4 KiB
C#
159 lines
5.4 KiB
C#
using CMS_CORE_Library.Models;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Web.Http;
|
|
using Thermo.Active.Model.DTOModels.Scada;
|
|
using Thermo.Active.NC;
|
|
using Thermo.Active.Utils;
|
|
using static CMS_CORE_Library.Models.DataStructures;
|
|
using static Thermo.Active.Config.ServerConfig;
|
|
using static Thermo.Active.Model.Constants;
|
|
|
|
namespace Thermo.Active.Controllers.WebApi
|
|
{
|
|
|
|
[RoutePrefix("api/scada")]
|
|
public class ScadaController : ApiController
|
|
{
|
|
/// <summary>
|
|
/// Oggetto adapter condiviso da WebAPI
|
|
/// </summary>
|
|
protected static NcAdapter ncAdapter = new NcAdapter();
|
|
|
|
[Route("list"), HttpGet]
|
|
public IHttpActionResult GetScadaList()
|
|
{
|
|
using (NcAdapter ncAdapter = new NcAdapter())
|
|
{
|
|
return Ok(ConfiguredScadaSchema);
|
|
}
|
|
}
|
|
|
|
[Route("subscribe/{scadaId:int}"), HttpGet]
|
|
public IHttpActionResult SubscribeScada(int scadaId)
|
|
{
|
|
// Find schema
|
|
ScadaSchemaModel selectedScadaSchema = ConfiguredScadaSchema
|
|
.Where(x => x.Id == scadaId)
|
|
.FirstOrDefault();
|
|
|
|
if (selectedScadaSchema == null)
|
|
return BadRequest();
|
|
|
|
ncAdapter.Connect();
|
|
// Read the selected scada data
|
|
CmsError libraryError = ncAdapter.ReadScadaData(selectedScadaSchema, out DTOScadaModel values);
|
|
if (libraryError.IsError())
|
|
return BadRequest(libraryError.localizationKey);
|
|
|
|
// Add to the subscriber list
|
|
SubscribedScada.Add(selectedScadaSchema);
|
|
|
|
return Ok(values);
|
|
}
|
|
|
|
[Route("unsubscribe/{scadaId:int}"), HttpGet]
|
|
public IHttpActionResult UnsubscribeScada(int scadaId)
|
|
{
|
|
// Find scada by id
|
|
ScadaSchemaModel scadaToRemove = SubscribedScada
|
|
.Where(x => x.Id == scadaId)
|
|
.FirstOrDefault();
|
|
|
|
if (scadaToRemove == null)
|
|
return BadRequest();
|
|
// Remove from the subiscriber list
|
|
SubscribedScada.Remove(scadaToRemove);
|
|
|
|
return Ok();
|
|
}
|
|
|
|
[Route("production"), HttpGet]
|
|
public IHttpActionResult GetProductionPageList()
|
|
{
|
|
ncAdapter.Connect();
|
|
CmsError libraryError = ncAdapter.ReadScadasData(ProductionScadaSchema, out List<DTOScadaModel> values);
|
|
if (libraryError.IsError())
|
|
return BadRequest(libraryError.localizationKey);
|
|
|
|
|
|
ScadaDataAndSchema data = new ScadaDataAndSchema()
|
|
{
|
|
schemes = ProductionScadaSchema,
|
|
values = values
|
|
};
|
|
|
|
return Ok(data);
|
|
}
|
|
|
|
[Route("write"), HttpPost]
|
|
public IHttpActionResult WriteScadaValue(int scadaId, SCADA_ELEMENT_TYPE elementType, int elementId, object value)
|
|
{
|
|
|
|
// Find scada in productions schemas
|
|
ScadaSchemaModel scada = ProductionScadaSchema.Where(x => x.Id == scadaId).FirstOrDefault();
|
|
if (scada == null)
|
|
{
|
|
// Find scada in configured schemas
|
|
scada = ConfiguredScadaSchema.Where(x => x.Id == scadaId).FirstOrDefault();
|
|
if (scada == null)
|
|
return NotFound();
|
|
}
|
|
|
|
string memIndex = "";
|
|
SCADA_MEM_TYPE memType = SCADA_MEM_TYPE.BOOL;
|
|
|
|
foreach (var layer in scada.Layers)
|
|
{
|
|
switch (elementType)
|
|
{
|
|
case SCADA_ELEMENT_TYPE.BUTTON:
|
|
{
|
|
// Find button
|
|
var button = layer.Buttons.Where(x => x.Id == elementId).FirstOrDefault();
|
|
if (button != null)
|
|
// Set index
|
|
memIndex = button.Status.MemClickIndex;
|
|
}
|
|
break;
|
|
case SCADA_ELEMENT_TYPE.IMAGE:
|
|
{
|
|
// Find button
|
|
var image = layer.Images.Where(x => x.Id == elementId).FirstOrDefault();
|
|
if (image != null)
|
|
memIndex = image.Status.MemClickIndex;
|
|
}
|
|
break;
|
|
case SCADA_ELEMENT_TYPE.INPUT:
|
|
{
|
|
// Find button
|
|
var input = layer.Inputs.Where(x => x.Id == elementId).FirstOrDefault();
|
|
if (input != null)
|
|
{
|
|
memIndex = input.Status.MemValueIndex;
|
|
memType = SupportFunctions.GetMemTypeFromString(input.Status.Type);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
ncAdapter.Connect();
|
|
if (memIndex == "")
|
|
return BadRequest(INCORRECT_PARAMETERS_ERROR.localizationKey);
|
|
|
|
CmsError libraryError = ncAdapter.WriteScada(memIndex, memType, value);
|
|
if (libraryError.IsError())
|
|
return BadRequest(libraryError.localizationKey);
|
|
|
|
return Ok();
|
|
}
|
|
|
|
public class ScadaDataAndSchema
|
|
{
|
|
public List<ScadaSchemaModel> schemes;
|
|
public List<DTOScadaModel> values;
|
|
}
|
|
}
|
|
}
|