Added api to modify offsets
And magazine signalR
This commit is contained in:
Binary file not shown.
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user