Files
cms_thermo_active/Step/Controllers/WebApi/ScadaController.cs
T
Lucio Maranta 56a32c54e7 VERSION 1.2.1
Fix scada
Removed axes unit measure
Fix axes round number
Fix bug on alarm history
Fix software version date
REMOVED possibility to load tools with tool type != "generic" on "generic" magazine position
2019-07-22 16:53:38 +02:00

168 lines
5.8 KiB
C#

using CMS_CORE_Library.Models;
using Step.Model.DTOModels.Scada;
using Step.NC;
using Step.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using static CMS_CORE_Library.Models.DataStructures;
using static Step.Config.ServerConfig;
using static Step.Model.Constants;
namespace Step.Controllers.WebApi
{
[RoutePrefix("api/scada")]
public class ScadaController : ApiController
{
[Route("list"), HttpGet]
public IHttpActionResult GetScadaList()
{
using (NcHandler ncHandler = new NcHandler())
{
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();
using (NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
// Read the selected scada data
CmsError cmsError = ncHandler.ReadScadaData(selectedScadaSchema, out DTOScadaModel values);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
// Add to the subscriber list
SubscribedScada.Add(selectedScadaSchema);
return Ok(values);
}
}
[Route("unsubscribe/{scadaId:int}"), HttpGet]
public IHttpActionResult UnsubscribeScada(int scadaId)
{
using (NcHandler ncHandler = new NcHandler())
{
// 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()
{
using(NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
CmsError cmsError = ncHandler.ReadScadasData(ProductionScadaSchema, out List<DTOScadaModel> values);
if (cmsError.IsError())
return BadRequest(cmsError.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;
}
}
using (NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
if (memIndex == "")
return BadRequest(INCORRECT_PARAMETERS_ERROR.localizationKey);
CmsError cmsError = ncHandler.WriteScada(memIndex, memType, value);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
}
return Ok();
}
public class ScadaDataAndSchema
{
public List<ScadaSchemaModel> schemes;
public List<DTOScadaModel> values;
}
}
}