Added API

WIP Thread
This commit is contained in:
Lucio Maranta
2018-12-20 13:18:06 +01:00
parent 4a27b1dba4
commit ebfbfd2d9e
9 changed files with 148 additions and 18 deletions
Binary file not shown.
+2 -2
View File
@@ -32,8 +32,8 @@ namespace Step.Config
public static AreasConfigModel JobEditorConfig;
public static List<ScadaSchemaModel> ProductionScada = new List<ScadaSchemaModel>();
public static List<ScadaSchemaModel> Scadas = new List<ScadaSchemaModel>();
public static List<ScadaSchemaModel> ProductionScadaSchema = new List<ScadaSchemaModel>();
public static List<ScadaSchemaModel> ConfiguredScadaSchema = new List<ScadaSchemaModel>();
public static List<string> MacrosConfig;
}
+2 -2
View File
@@ -197,9 +197,9 @@ namespace Step.Config
.ToArray();
if (schema.IsInProductionPage == true)
ProductionScada.Add(schema);
ProductionScadaSchema.Add(schema);
else
Scadas.Add(schema);
ConfiguredScadaSchema.Add(schema);
}
}
+40 -1
View File
@@ -2,6 +2,7 @@
using Step.Core;
using Step.Model.DTOModels;
using Step.Model.DTOModels.AlarmModels;
using Step.Model.DTOModels.Scada;
using Step.Model.DTOModels.ToolModels;
using Step.NC;
using System.Collections.Generic;
@@ -26,7 +27,6 @@ public static class ThreadsFunctions
private static long ReadToolDataTimer = 0, ReadToolDataTimes = 0;
private static long WatchdogTimer = 0, WatchdogTimes = 0;
private static Thread ConnThread;
#region Functions
@@ -715,6 +715,45 @@ public static class ThreadsFunctions
}
}
public static void ReadScadaData()
{
NcHandler ncHandler = new NcHandler();
Stopwatch sw = new Stopwatch();
try
{
// Try connection
CmsError libraryError = ncHandler.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
// Check if client is connected
if (ncHandler.numericalControl.NC_IsConnected())
{
// Get new data from PLC
libraryError = ncHandler.ReadScadaData(out List<DTOScadaModel> scadas);
if (libraryError.IsError())
ManageLibraryError(libraryError);
// MessageServices.Current.Publish(NC_MAGAZINE_IS_ACTIVE, null, status);
}
else
RestoreConnection();
sw.Stop();
// Wait
Thread.Sleep(CalcSleepTime(500 , (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
}
}
#endregion Functions
#region SupportFunctions
+2 -1
View File
@@ -24,7 +24,8 @@ namespace Step.Core
ThreadsFunctions.ReadActiveProgramData,
ThreadsFunctions.UpdateToolsData,
ThreadsFunctions.ReadNcMagazineActive,
ThreadsFunctions.ReadPartProgramQueueData
ThreadsFunctions.ReadPartProgramQueueData,
ThreadsFunctions.ReadScadaData
// ThreadsFunctions.ReadNcSoftKeysData,
};
@@ -195,8 +195,8 @@ namespace Step.Model.DTOModels.Scada
public class ScadaSchemaInputDataModel
{
[XmlElement("memVisibleIndex")]
public string MemVisibleIndex { get; set; }
[XmlElement("memEnabledIndex")]
public string MemEnabledIndex { get; set; }
[XmlElement("memValueIndex")]
public string MemValueIndex { get; set; }
+33 -10
View File
@@ -2378,13 +2378,13 @@ namespace Step.NC
#endregion Osai/Fanuc Tools
public CmsError ReadScadaData()
public CmsError ReadScadaData(out List<DTOScadaModel> scadas)
{
CmsError cmsError = NO_ERROR;
List <DTOScadaModel> scadas = new List<DTOScadaModel>();
scadas = new List<DTOScadaModel>();
DTOScadaModel scada = new DTOScadaModel();
foreach (var prodScada in ProductionScada)
foreach (var prodScada in ProductionScadaSchema)
{
scada = new DTOScadaModel()
{
@@ -2404,7 +2404,7 @@ namespace Step.NC
if(layer.Buttons.ElementAt(i) != null)
{
// Read enabled from PLC
cmsError = numericalControl.PLC_RScadaValue(layer.Buttons[i].Status.MemEnabledIndex, ref val);
cmsError = numericalControl.PLC_RScadaValue(layer.Buttons[i].Status.MemEnabledIndex, SCADA_MEM_TYPE.BOOL, ref val);
if (cmsError.IsError())
return cmsError;
// Populate & add new object into scada model
@@ -2419,7 +2419,7 @@ namespace Step.NC
if (layer.Images.ElementAt(i) != null)
{
// Read isVisible from PLC
cmsError = numericalControl.PLC_RScadaValue(layer.Images[i].Status.MemVisibleIndex, ref val);
cmsError = numericalControl.PLC_RScadaValue(layer.Images[i].Status.MemVisibleIndex, SCADA_MEM_TYPE.BOOL, ref val);
if (cmsError.IsError())
return cmsError;
// Populate & add new object into scada model
@@ -2434,7 +2434,7 @@ namespace Step.NC
if(layer.ProgressBars.ElementAt(i) != null)
{
// Read value from PLC
cmsError = numericalControl.PLC_RScadaValue(layer.ProgressBars[i].MemValueIndex, ref val);
cmsError = numericalControl.PLC_RScadaValue(layer.ProgressBars[i].MemValueIndex, SCADA_MEM_TYPE.BYTE, ref val);
if (cmsError.IsError())
return cmsError;
// Populate & add new object into scada model
@@ -2445,15 +2445,15 @@ namespace Step.NC
});
}
if (layer.Inputs.ElementAt(i) != null)
if (layer.Inputs.ElementAt(i) != null && layer.Inputs[i].Status.Action == "read")
{
// Read isVisible from PLC
cmsError = numericalControl.PLC_RScadaValue(layer.Inputs[i].Status.MemVisibleIndex, ref val);
cmsError = numericalControl.PLC_RScadaValue(layer.Inputs[i].Status.MemEnabledIndex, SCADA_MEM_TYPE.BOOL, ref val);
if (cmsError.IsError())
return cmsError;
return cmsError;
// Read value from PLC
cmsError = numericalControl.PLC_RScadaValue(layer.Inputs[i].Status.MemValueIndex, ref val2);
cmsError = numericalControl.PLC_RScadaValue(layer.Inputs[i].Status.MemValueIndex, GetMemTypeFromString(layer.Inputs[i].Status.Type), ref val2);
if (cmsError.IsError())
return cmsError;
@@ -2470,11 +2470,34 @@ namespace Step.NC
}
}
}
scadas.Add(scada);
}
return cmsError;
}
private SCADA_MEM_TYPE GetMemTypeFromString(string memType)
{
switch (memType)
{
case "BOOL":
return SCADA_MEM_TYPE.BOOL;
case "BYTE":
return SCADA_MEM_TYPE.BYTE;
case "WORD":
return SCADA_MEM_TYPE.WORD;
case "INT":
return SCADA_MEM_TYPE.INT;
default:
return SCADA_MEM_TYPE.BOOL;
}
}
//DTOScadaModel scada = new DTOScadaModel
//{
// Layers = prodScada.Layers.Select(x => new DTOScadaLayerModel()
@@ -0,0 +1,66 @@
using CMS_CORE_Library.Models;
using Step.Model.DTOModels.Scada;
using Step.NC;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using static Step.Config.ServerConfig;
namespace Step.Controllers.WebApi
{
[RoutePrefix("api/scada")]
public class ScadaController : ApiController
{
[Route("list")]
public IHttpActionResult GetScadaList()
{
using (NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
CmsError cmsError = ncHandler.ReadScadaData(out List<DTOScadaModel> values);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
ScadaDataAndSchema data = new ScadaDataAndSchema()
{
schemes = ConfiguredScadaSchema,
values = values
};
return Ok(data);
}
}
[Route("production/list")]
public IHttpActionResult GetProductionPageList()
{
using(NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
CmsError cmsError = ncHandler.ReadScadaData(out List<DTOScadaModel> values);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
ScadaDataAndSchema data = new ScadaDataAndSchema()
{
schemes = ProductionScadaSchema,
values = values
};
return Ok(data);
}
}
public class ScadaDataAndSchema
{
public List<ScadaSchemaModel> schemes;
public List<DTOScadaModel> values;
}
}
}
+1
View File
@@ -178,6 +178,7 @@
<Compile Include="Controllers\WebApi\ApiMaintenanceController.cs" />
<Compile Include="Controllers\WebApi\NcFileController.cs" />
<Compile Include="Controllers\WebApi\NcToolManagerController.cs" />
<Compile Include="Controllers\WebApi\ScadaController.cs" />
<Compile Include="Controllers\WebApi\SiemensToolManagerController.cs" />
<Compile Include="Controllers\WebApi\UserController.cs" />
<Compile Include="Controllers\WebApi\NcApiController.cs" />