diff --git a/Libs/CMS_CORE_Library.dll b/Libs/CMS_CORE_Library.dll index 7b3ae031..733a3283 100644 Binary files a/Libs/CMS_CORE_Library.dll and b/Libs/CMS_CORE_Library.dll differ diff --git a/Step.Core/ThreadsFunctions.cs b/Step.Core/ThreadsFunctions.cs index 5281e239..2dbb77ae 100644 --- a/Step.Core/ThreadsFunctions.cs +++ b/Step.Core/ThreadsFunctions.cs @@ -665,11 +665,14 @@ public static class ThreadsFunctions MessageServices.Current.Publish(NC_MAGAZINE_IS_ACTIVE, null, status); - libraryError = ncHandler.ReadAssistedToolingProcedure(out DTOAssistedToolingEndValueModel data); - if (libraryError.IsError()) - ManageLibraryError(libraryError); + if(NcConfig.NcVendor != NC_VENDOR.SIEMENS) + { + libraryError = ncHandler.ReadAssistedToolingProcedure(out DTOAssistedToolingEndValueModel data); + if (libraryError.IsError()) + ManageLibraryError(libraryError); - MessageServices.Current.Publish(ASSISTED_TOOLING_DATA, null, status); + MessageServices.Current.Publish(ASSISTED_TOOLING_DATA, null, data); + } } else RestoreConnection(); diff --git a/Step.Database/Controllers/NcToolManagerController.cs b/Step.Database/Controllers/NcToolManagerController.cs index dce0d27c..48e13ee5 100644 --- a/Step.Database/Controllers/NcToolManagerController.cs +++ b/Step.Database/Controllers/NcToolManagerController.cs @@ -146,6 +146,16 @@ namespace Step.Database.Controllers .ToList(); } + public DbNcShankModel FindShankByToolId(int toolId) + { + return dbCtx + .Tools + .Include("Shank") + .Where(x => x.ToolId == toolId && x.ShankId != null) + .Select(x => x.Shank) + .FirstOrDefault(); + } + public List GetShanks() { // Get shank from database diff --git a/Step.Model/DTOModels/ToolModels/DTOAssistedToolingModel.cs b/Step.Model/DTOModels/ToolModels/DTOAssistedToolingModel.cs index 65fd560e..5e82e535 100644 --- a/Step.Model/DTOModels/ToolModels/DTOAssistedToolingModel.cs +++ b/Step.Model/DTOModels/ToolModels/DTOAssistedToolingModel.cs @@ -12,9 +12,26 @@ namespace Step.Model.DTOModels.ToolModels public class DTOAssistedToolingEndValueModel : AssistedToolingModel { + public DTOAssistedToolingEndValueModel() + { + + } + + public DTOAssistedToolingEndValueModel(AssistedToolingModel data) + { + Action = data.Action; + IsActive = data.IsActive; + MagazineId = data.MagazineId; + PositionId = data.PositionId; + ToolId = data.ToolId; + } + public override bool Equals(object obj) { - var item = obj as DTOAssistedToolingEndValueModel; + DTOAssistedToolingEndValueModel item = obj as DTOAssistedToolingEndValueModel; + + if (item == null) + return false; if (IsActive != item.IsActive) return false; diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs index ce262909..8cd1ea90 100644 --- a/Step.NC/NcHandler.cs +++ b/Step.NC/NcHandler.cs @@ -1257,7 +1257,8 @@ namespace Step.NC Id = softKey.Id, Active = plcSoftKey.Active, Category = softKey.Category, - Visible = softKey.IsVisible + Visible = softKey.IsVisible, + Value = plcSoftKey.Value }); } } @@ -2042,7 +2043,7 @@ namespace Step.NC } // Update nc data - cmsError = UpdateNcShank(toolsManager); + cmsError = UpdateNcShanks(toolsManager); } ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive); @@ -2074,7 +2075,7 @@ namespace Step.NC } // Update nc data - cmsError = UpdateNcShank(toolsManager); + cmsError = UpdateNcShanks(toolsManager); } ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive); @@ -2084,7 +2085,7 @@ namespace Step.NC } } - private CmsError UpdateNcShank(NcToolManagerController toolsManager) + private CmsError UpdateNcShanks(NcToolManagerController toolsManager) { // Get mounted shanks List shanks = toolsManager @@ -2494,7 +2495,22 @@ namespace Step.NC if (cmsError.IsError()) return cmsError; - data = tmpData as DTOAssistedToolingEndValueModel; + data = new DTOAssistedToolingEndValueModel(tmpData); + + return cmsError; + } + + public CmsError TerminateAssistedProcedure(int magazineId) + { + CmsError cmsError = StartEditTooling(magazineId); + if (!cmsError.IsError()) + { + cmsError = StopEditTooling(magazineId); + if (cmsError.IsError()) + { + return numericalControl.PLC_WTerminateAssistedToolingProcedure(); + } + } return cmsError; } diff --git a/Step/Listeners/Database/SignalRDatabaseHandler.cs b/Step/Listeners/Database/SignalRDatabaseHandler.cs index 38f504ec..b6649e7b 100644 --- a/Step/Listeners/Database/SignalRDatabaseHandler.cs +++ b/Step/Listeners/Database/SignalRDatabaseHandler.cs @@ -1,4 +1,5 @@ -using Step.Database.Controllers; +using CMS_CORE_Library.Models; +using Step.Database.Controllers; using Step.Model.DatabaseModels; using Step.Model.DTOModels; using Step.Model.DTOModels.AlarmModels; @@ -226,12 +227,56 @@ namespace Step.Listeners.Database public static void ManageAssisedToolingProcedure(object assTool) { - AssistedToolingModel assToolingData = assTool as AssistedToolingModel; - if(assToolingData != null) + DTOAssistedToolingEndValueModel assToolingData = assTool as DTOAssistedToolingEndValueModel; + if(!LastToolingData.Equals(assToolingData)) { + LastToolingData = assToolingData; + if (assToolingData.IsActive) + { + using(NcToolManagerController toolManager = new NcToolManagerController()) + { + switch (assToolingData.Action) + { + case ASSISTED_TOOLING_ACTION.UNLOAD: + { + // Find shank loaded in the position + var shank = toolManager.FindShanksByPositions(assToolingData.MagazineId, assToolingData.PositionId); + if(shank != null) + { + // Unload Tool from magazine + var pos = toolManager.UnloadShankInMagazine((byte)assToolingData.MagazineId, (byte)assToolingData.PositionId, shank); + } + } + break; + case ASSISTED_TOOLING_ACTION.EXCHANGE: + { + // Find shank loaded in the position + var shankToUnload = toolManager.FindShanksByPositions(assToolingData.MagazineId, assToolingData.PositionId); + if (shankToUnload != null) + { + // Unload Tool from magazine + var pos = toolManager.UnloadShankInMagazine((byte)assToolingData.MagazineId, (byte)assToolingData.PositionId, shankToUnload); + } + // Find shank by toolId + var shankToLoad = toolManager.FindShankByToolId(assToolingData.ToolId); + if(shankToLoad != null) + { + // Load shank in magazine + var pos = toolManager.LoadShankInMagazine((byte)assToolingData.MagazineId, (byte)assToolingData.PositionId, shankToLoad); + } + } + break; + } + + using (NcHandler ncHandler = new NcHandler()) + { + ncHandler.Connect(); + ncHandler.TerminateAssistedProcedure(assToolingData.MagazineId); + } + } + } } - } } } \ No newline at end of file diff --git a/Step/Listeners/ListenersHandler.cs b/Step/Listeners/ListenersHandler.cs index dacff9ec..7c7eec9e 100644 --- a/Step/Listeners/ListenersHandler.cs +++ b/Step/Listeners/ListenersHandler.cs @@ -100,6 +100,10 @@ namespace Step.Listeners { SignalRDatabaseHandler.UpdateToolsData(a); })); + infos.Add(MessageServices.Current.Subscribe(ASSISTED_TOOLING_DATA, (a, b) => + { + SignalRDatabaseHandler.ManageAssisedToolingProcedure(a); + })); // Broadcast infos.Add(MessageServices.Current.Subscribe(BROADCAST_DATA, (a, b) => diff --git a/Step/Listeners/SignalRStaticObjects.cs b/Step/Listeners/SignalRStaticObjects.cs index 715a8b77..bdd0feaf 100644 --- a/Step/Listeners/SignalRStaticObjects.cs +++ b/Step/Listeners/SignalRStaticObjects.cs @@ -24,6 +24,7 @@ namespace Step.Listeners public static List LastPartProgramQueue = new List(); public static List LastM155Data = new List(); public static List LastScadaData = new List(); + public static DTOAssistedToolingEndValueModel LastToolingData = new DTOAssistedToolingEndValueModel(); public static bool LastIsNcConnected = false; }