Added api to modify offsets

And magazine signalR
This commit is contained in:
Lucio Maranta
2018-08-29 17:02:51 +02:00
parent a54dd90472
commit 2e22f4db3d
10 changed files with 183 additions and 24 deletions
Binary file not shown.
+2 -2
View File
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<serverConfig>
<ncConfig>
<ncVendor>DEMO</ncVendor> <!-- NO_NC/DEMO/FANUC/SIEMENS/OSAI -->
<ncVendor>OSAI</ncVendor> <!-- NO_NC/DEMO/FANUC/SIEMENS/OSAI -->
<showNcHMI>true</showNcHMI>
<ncIpAddress>localhost</ncIpAddress>
<ncIpAddress>192.168.157.2</ncIpAddress>
<ncPort>8080</ncPort>
<machineModel>Ares 37 OF</machineModel>
</ncConfig>
+39 -1
View File
@@ -449,7 +449,7 @@ public static class ThreadsFunctions
try
{
// Try connection
CmsError libraryError = ncHandler.Connect();
CmsError libraryError = ncHandler.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
@@ -578,6 +578,44 @@ public static class ThreadsFunctions
}
}
public static void ReadNcMagazineActive()
{
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.GetNcMagazineStatus(out Dictionary<int, bool> status);
MessageServices.Current.Publish(NC_MAGAZINE_IS_ACTIVE, null, status);
}
else
TryNcConnection();
sw.Stop();
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
{
ncHandler.Dispose();
}
}
#endregion Nc functions threads
#region SupportFunctions
+2 -1
View File
@@ -22,7 +22,8 @@ namespace Step.Core
ThreadsFunctions.ReadHeadsData,
ThreadsFunctions.ReadAxesNamesData,
ThreadsFunctions.ReadActiveProgramData,
ThreadsFunctions.UpdateToolsData
ThreadsFunctions.UpdateToolsData,
ThreadsFunctions.ReadNcMagazineActive
// ThreadsFunctions.ReadNcSoftKeysData,
};
@@ -294,6 +294,29 @@ namespace Step.Database.Controllers
return tool;
}
public DbNcToolModel UpdateToolOffset(int toolId, int position, int offsetId)
{
DbNcToolModel tool = FindTool(toolId);
switch (position)
{
case 1:
tool.OffsetId1 = offsetId;
break;
case 2:
tool.OffsetId2 = offsetId;
break;
case 3:
tool.OffsetId3 = offsetId;
break;
}
// Save
dbCtx.SaveChanges();
return tool;
}
public void DeleteTool(int toolId)
{
DbNcToolModel tool = FindTool(toolId);
+1
View File
@@ -155,6 +155,7 @@ namespace Step.Model
public const string SEND_MAGAZINES_STATUS = "SEND_MAGAZINES_STATUS";
public const string SEND_ACTIVE_PROGRAM_DATA = "SEND_ACTIVE_PROGRAM_DATA";
public const string UPDATE_TOOLS_DATA = "UPDATE_TOOLS_DATA";
public const string NC_MAGAZINE_IS_ACTIVE = "UPDATE_NC_MAGAZINE_STATUS";
public const string BROADCAST_DATA = "BROADCAST_DATA";
+56 -1
View File
@@ -163,7 +163,7 @@ namespace Step.NC
if (cmsError.IsError())
return cmsError;
// Activate
return numericalControl.FILES_WSetActiveProgram(selectedProcess, newFilePath, ref programData);
return numericalControl.FILES_WSetActiveProgram(selectedProcess, newFilePath, ref programData);
}
#endregion File manager
@@ -1360,6 +1360,55 @@ namespace Step.NC
{
return numericalControl.TOOLS_WOffset(offsetId, offsetData);
}
public CmsError UpdateToolOffsetId(int toolId, int positionId, int offsetId, out DTONcToolModel toolWithOffsets)
{
toolWithOffsets = new DTONcToolModel();
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// Update database tool Tool
DbNcToolModel dbTool = toolsManager.UpdateToolOffset(toolId, positionId, offsetId);
// Populate updated tool with offset data
CmsError cmsError = GetToolData(dbTool, ref toolWithOffsets);
if (cmsError.IsError())
{
dbContextTransaction.Rollback();
return cmsError;
}
bool startIsActive = false;
// Check if tool is loaded into a shank
if (dbTool.ShankId != null)
{
// Check if shank is loaded into magazine
DbNcShankModel shank = toolsManager.FindShankWithTools(dbTool.ShankId.Value);
if (shank.MagazineId != null)
{
startIsActive = true;
// Create backup of data stored on the NC and block file accesses
cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
// Update tool
cmsError = UpdateNcTools(toolsManager);
}
}
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return NO_ERROR;
}
}
}
public CmsError DeleteNcTool(DbNcToolModel tool)
{
@@ -1844,6 +1893,12 @@ namespace Step.NC
return NO_ERROR;
}
public CmsError GetNcMagazineStatus(out Dictionary<int, bool> status)
{
status = new Dictionary<int, bool>();
return numericalControl.TOOLS_RMagazineStatus(ref status);
}
#endregion Osai/Fanuc Tools
}
}
@@ -233,6 +233,41 @@ namespace Step.Controllers.WebApi
#endregion Tools
#region Offsets
[Route("offset/{offsetId:int}"), HttpPut]
public IHttpActionResult UpdateOffset(short offsetId, OffsetModel offsetData)
{
using (NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
CmsError cmsError = ncHandler.UpdateOffset(offsetId, offsetData);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
offsetData.Id = offsetId;
return Ok(offsetData);
}
}
[Route("tool/{toolId:int}/position/{positionId:int}/offset/{offsetId:int}"), HttpPut]
public IHttpActionResult UpdateToolOffset(int toolId, int positionId, short offsetId)
{
using (NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
CmsError cmsError = ncHandler.UpdateToolOffsetId(toolId, positionId, offsetId, out DTONcToolModel tool);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
return Ok(tool);
}
}
#endregion
#region Shanks
[Route("shanks"), HttpGet]
@@ -673,21 +708,5 @@ namespace Step.Controllers.WebApi
return Ok();
}
}
[Route("offset/{offsetId:int}"), HttpPut]
public IHttpActionResult UpdateOffset(short offsetId, OffsetModel offsetData)
{
using (NcHandler ncHandler = new NcHandler())
{
ncHandler.Connect();
CmsError cmsError = ncHandler.UpdateOffset(offsetId, offsetData);
if (cmsError.IsError())
return BadRequest(cmsError.localizationKey);
offsetData.Id = offsetId;
return Ok(offsetData);
}
}
}
}
+11 -3
View File
@@ -75,15 +75,23 @@ namespace Step.Listeners
{
SignalRListener.SendActiveProgramData(a);
}));
infos.Add(MessageServices.Current.Subscribe(BROADCAST_DATA, (a, b) =>
infos.Add(MessageServices.Current.Subscribe(NC_MAGAZINE_IS_ACTIVE, (a, b) =>
{
SignalRListener.BroadcastData();
SignalRListener.SendNcMagazineIsActive(a);
}));
// Database
infos.Add(MessageServices.Current.Subscribe(UPDATE_TOOLS_DATA, (a, b) =>
{
SignalRDatabaseHandler.UpdateToolsData(a);
}));
// Broadcast
infos.Add(MessageServices.Current.Subscribe(BROADCAST_DATA, (a, b) =>
{
SignalRListener.BroadcastData();
}));
}
public static void Stop()
+14
View File
@@ -25,6 +25,7 @@ namespace Step.Listeners.SignalR
private static List<DTOAxisNameModel> LastAxesNamesData = new List<DTOAxisNameModel>();
private static DTOMagazineActionModel LastMagazineStatus = new DTOMagazineActionModel();
private static DTOActiveProgramDataModel LastProgramData = new DTOActiveProgramDataModel();
private static Dictionary<int, bool> LastNcMagazineIsActive = new Dictionary<int, bool>();
private static bool LastIsNcConnected = false;
@@ -212,6 +213,19 @@ namespace Step.Listeners.SignalR
context.Clients.Group("ncData").activeProgramData(programData);
}
}
public static void SendNcMagazineIsActive(object magazineActive)
{
Dictionary<int, bool> newStatus = magazineActive as Dictionary<int, bool>;
var context = GlobalHost.ConnectionManager.GetHubContext<NcHub>();
if (!LastNcMagazineIsActive.SequenceEqual(newStatus))
{
LastNcMagazineIsActive = newStatus;
context.Clients.Group("ncData").magazineIsActive(newStatus);
}
}
private volatile static object _broadcastlock = new Object();
public static void BroadcastData()