diff --git a/Libs/CMS_CORE_Library.dll b/Libs/CMS_CORE_Library.dll index 08754a86..b6b94c4c 100644 Binary files a/Libs/CMS_CORE_Library.dll and b/Libs/CMS_CORE_Library.dll differ diff --git a/Step.Database/Controllers/MaintenancesController.cs b/Step.Database/Controllers/MaintenancesController.cs index 8ddd96d8..509d4d83 100644 --- a/Step.Database/Controllers/MaintenancesController.cs +++ b/Step.Database/Controllers/MaintenancesController.cs @@ -37,7 +37,7 @@ namespace Step.Database.Controllers where m1.MaintenanceId == maintenances.MaintenanceId select m1.Date ).Max() - select maintenances) + select maintenances) .Include("Maintainer") .ToList(); @@ -362,11 +362,11 @@ namespace Step.Database.Controllers public bool CheckPassword(string password, string machineNumber, uint plcCounter, out int cw) { cw = -1; - if (String.IsNullOrEmpty(password)) + + if (!GetDataFromMaintenancePassword(password, out int pwdMachineNumber, out int pwdHours, out cw)) return false; - GetDataFromMaintenancePassword(password, out int pwdMachineNumber, out int pwdHours, out cw); - // Check machine number + // Check machine number if(machineNumber == pwdMachineNumber.ToString()) { // Convert plcCounter in hours and check if password is expired @@ -379,13 +379,19 @@ namespace Step.Database.Controllers return false; // Invalid Password } - private void GetDataFromMaintenancePassword(string password, out int number, out int hours, out int cw) + private bool GetDataFromMaintenancePassword(string password, out int number, out int hours, out int cw) { + number = -1; + hours = -1; + cw = -1; + + if (String.IsNullOrEmpty(password)) + return false; + string tmpPassword1 = "", tmpPassword3 = "", tmpPassword4 = "", tmpPassword5 = ""; - int controlNumber = 0; Hashtable htCifrario = new Hashtable { @@ -411,7 +417,10 @@ namespace Step.Database.Controllers } // Get control number - controlNumber = Convert.ToInt32(Right(tmpPassword5, 1)); + var stringCw = Right(tmpPassword5, 1); + if (!int.TryParse(stringCw, out int controlNumber)) + return false; + tmpPassword4 = tmpPassword5.Remove(tmpPassword5.Length - 1); // Create tmpPassoword3 @@ -437,6 +446,8 @@ namespace Step.Database.Controllers hours = Convert.ToInt32(tmpPassword1.Substring(0, 5), 16); // Convert from hexadecimal number = Convert.ToInt32(tmpPassword1.Substring(5, 4), 16); // Convert from hexadecimal cw = Convert.ToInt32(tmpPassword1.Substring(9, 2), 16); // Convert from hexadecimal + + return true; } private static string Right(string value, int size) diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs index f4ff43c7..469f2e99 100644 --- a/Step.NC/NcHandler.cs +++ b/Step.NC/NcHandler.cs @@ -21,7 +21,7 @@ using System.IO; using System.Linq; using static CMS_CORE_Library.Models.DataStructures; using static Step.Config.ServerConfig; -using static Step.Database.Controllers.QueueController; +using static Step.Database.Controllers.QueueController; using static Step.Model.Constants; namespace Step.NC @@ -32,18 +32,18 @@ namespace Step.NC public NcHandler() => // Choose NC - numericalControl = SetNumericalControl(); - + numericalControl = SetNumericalControl(); + public void Dispose() { if (NcConfig.NcVendor != NC_VENDOR.SIEMENS) numericalControl.NC_Disconnect(); } - + public void Disconnect() { numericalControl.NC_Disconnect(); - } + } public CmsError Connect() { @@ -71,7 +71,7 @@ namespace Step.NC case NC_VENDOR.OSAI: return new Nc_Osai(NcConfig.NcIpAddress, NcConfig.NcPort, 2000); } - return null; + return null; } #region File manager @@ -439,7 +439,7 @@ namespace Step.NC queueList = new List(); // Check if there is already a pp queue if (PartProgramQueue.ContainsKey(selectedProcess)) - // return INCORRECT_PARAMETERS_ERROR; + // return INCORRECT_PARAMETERS_ERROR; queueList = PartProgramQueue[selectedProcess]; return NO_ERROR; @@ -671,7 +671,7 @@ namespace Step.NC // Get date time DateTime dateTime = new DateTime(); - CmsError cmsError = numericalControl.NC_RDateTime(ref dateTime); + CmsError cmsError = numericalControl.NC_RDateTime(ref dateTime); if (cmsError.errorCode != 0) return cmsError; @@ -901,7 +901,6 @@ namespace Step.NC if (cmsError.IsError()) return cmsError; - //// Get selectedProcessData SelectedProcessData selectedData = new SelectedProcessData(); cmsError = numericalControl.PROC_RSelectedProcessData(processesData.SelectedProcess, ref selectedData); @@ -1388,7 +1387,7 @@ namespace Step.NC public CmsError GetM155Data(out List data) { data = new List(); - List ncData = new List(); + List ncData = new List(); CmsError cmsError = numericalControl.PLC_ROperatorInputIsNeeded(ref ncData); if (cmsError.IsError()) return cmsError; @@ -1406,10 +1405,10 @@ namespace Step.NC return NO_ERROR; } - public CmsError GetM154Data(out List data, out bool MTCStatus) + public CmsError GetM154Data(out List data, out bool MTCStatus) { MTCStatus = false; - data = new List(); + data = new List(); return numericalControl.PLC_RM154Data(ref data, ref MTCStatus); } @@ -1570,11 +1569,11 @@ namespace Step.NC if (!ToolManagerConfig.BallufOpt) categories.Add("balluf"); - + if (!ToolManagerConfig.ReviveOpt) categories.Add("revive"); - config.ToolsConfiguration = config.ToolsConfiguration.Where(x => !categories.Contains(x.Category)).ToList(); + config.ToolsConfiguration = config.ToolsConfiguration.Where(x => !categories.Contains(x.Category)).ToList(); // Remove categories from familyConfig config.FamiliesConfiguration.FamilyConfiguration = config.FamiliesConfiguration.FamilyConfiguration.Where(x => !categories.Contains(x.Category)).ToList(); @@ -1827,16 +1826,16 @@ namespace Step.NC CmsError cmsError = NO_ERROR; using (NcToolManagerController toolsManager = new NcToolManagerController()) { - using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction()) + using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction()) { // If option is active if (!ToolManagerConfig.FamilyOpt) { // Copy only family - DTONewNcFamilyModel newFamily = new DTONewNcFamilyModel(); + DTONewNcFamilyModel newFamily = new DTONewNcFamilyModel(); SupportFunctions.CopyProperties(dtoToolWithFamily, newFamily); // Update only family data - newFamily = (DTONcFamilyModel)toolsManager.UpdateFamily(dtoToolWithFamily.FamilyId, newFamily); + newFamily = (DTONcFamilyModel)toolsManager.UpdateFamily(dtoToolWithFamily.FamilyId, newFamily); // Update Nc families cmsError = UpdateNcFamily(toolsManager); @@ -1971,7 +1970,7 @@ namespace Step.NC { DbNcFamilyModel fam = toolsManager.FindFamily(tool.FamilyId); // Check if family is connected to other tools - if (fam != null && fam.Tools.Count() == 1) + if (fam != null && fam.Tools.Count() == 1) { toolsManager.DeleteFamily(fam.FamilyId); } @@ -2010,7 +2009,6 @@ namespace Step.NC } } - ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive); return cmsError; @@ -2151,13 +2149,13 @@ namespace Step.NC // If the relationship is 1:1 (tool:shank) i have to remove shanks manually // Tools are deleted thanks to foreign keys constraint List shanks = toolsManager.FindShanksByFamilyId(famId); - foreach(var shank in shanks) + foreach (var shank in shanks) { if (shank != null) toolsManager.DeleteNcShank(shank.ShankId); } } - + toolsManager.DeleteFamily(famId); // Update Nc families @@ -2426,7 +2424,7 @@ namespace Step.NC // Get shank occupied space toolsManager.GetShankMaxSpaceOccupied(shankToBeLoaded.ShankId, out int maxRight, out int maxLeft); - + // Check if tool can fit in the position considering other tools foreach (var mountedTool in magazineMountedTools) { @@ -2441,7 +2439,7 @@ namespace Step.NC decPosition = decPosition < positionId ? decPosition + magConfig.MaxPositions : decPosition; incPosition = incPosition > positionId ? incPosition - magConfig.MaxPositions : incPosition; } - + // Right check if (positionId < decPosition) { @@ -2496,23 +2494,31 @@ namespace Step.NC return cmsError; data = new DTOAssistedToolingEndValueModel(tmpData); - + return cmsError; } - public CmsError TerminateAssistedProcedure(int magazineId) + public CmsError TerminateAssistedProcedure(int magazineId, bool writeData) { - CmsError cmsError = StartEditTooling(magazineId); - if (!cmsError.IsError()) + if (writeData) { - cmsError = StopEditTooling(magazineId); + CmsError cmsError = StartEditTooling(magazineId); if (!cmsError.IsError()) { - return numericalControl.PLC_WTerminateAssistedToolingProcedure(); + // Write tool table new data + cmsError = StopEditTooling(magazineId); + if (!cmsError.IsError()) + { + // Close procedure + return numericalControl.PLC_WTerminateAssistedToolingProcedure(); + } } + return cmsError; + } + else + { + return numericalControl.PLC_WTerminateAssistedToolingProcedure(); } - - return cmsError; } #endregion Osai/Fanuc Tools @@ -2540,7 +2546,7 @@ namespace Step.NC alreadyReadScada.Add(schema.Id); } } - + return cmsError; } @@ -2576,7 +2582,7 @@ namespace Step.NC Enabled = Convert.ToBoolean(val) }); } - + if (layer.Images.ElementAtOrDefault(i) != null) { // Read isVisible from PLC @@ -2615,11 +2621,11 @@ namespace Step.NC SCADA_MEM_TYPE type = SupportFunctions.GetMemTypeFromString(layer.Inputs[i].Status.Type); // Read value from PLC cmsError = numericalControl.PLC_RScadaValue(layer.Inputs[i].Status.MemValueIndex, type, ref val2); - if (cmsError.IsError()) + if (cmsError.IsError()) return cmsError; // if type is real approximate to configurated decimal digits - if(type == SCADA_MEM_TYPE.REAL) + if (type == SCADA_MEM_TYPE.REAL) { double tmpVal = Math.Round(Convert.ToDouble(val2), layer.Inputs[i].Status.Round); val2 = tmpVal; @@ -2649,7 +2655,7 @@ namespace Step.NC if (layer.Images.Count() > max) max = layer.Images.Count(); - + if (layer.Inputs.Count() > max) max = layer.Inputs.Count(); @@ -2658,7 +2664,7 @@ namespace Step.NC return max; } - + //DTOScadaModel scada = new DTOScadaModel //{ // Layers = prodScada.Layers.Select(x => new DTOScadaLayerModel() diff --git a/Step/Controllers/WebApi/ApiMaintenanceController.cs b/Step/Controllers/WebApi/ApiMaintenanceController.cs index 109124d0..437e70df 100644 --- a/Step/Controllers/WebApi/ApiMaintenanceController.cs +++ b/Step/Controllers/WebApi/ApiMaintenanceController.cs @@ -186,12 +186,12 @@ namespace Step.Controllers.WebApi { bool passwordIsValid = maintenancesController.CheckPassword(password.Password, data.CmsMachineIdNumber, maintData.PlcCounter, out controlWord); if (!passwordIsValid) - return BadRequest(API_ERROR_KEYS.PASSWORD_IS_INVALID); - } + return BadRequest(API_ERROR_KEYS.PASSWORD_IS_INVALID); + } // Check if maintenance id - PerformedMaintenanceModel performed = maintenancesController.PerformeMaintenance(maintData.PlcCounter, maintenanceId, Convert.ToInt32(userId.Value), controlWord); + PerformedMaintenanceModel performed = maintenancesController.PerformeMaintenance(maintData.PlcCounter/60, maintenanceId, Convert.ToInt32(userId.Value), controlWord); if (performed == null) return NotFound(); diff --git a/Step/Listeners/Database/SignalRDatabaseHandler.cs b/Step/Listeners/Database/SignalRDatabaseHandler.cs index b6649e7b..c267ed19 100644 --- a/Step/Listeners/Database/SignalRDatabaseHandler.cs +++ b/Step/Listeners/Database/SignalRDatabaseHandler.cs @@ -1,5 +1,4 @@ -using CMS_CORE_Library.Models; -using Step.Database.Controllers; +using Step.Database.Controllers; using Step.Model.DatabaseModels; using Step.Model.DTOModels; using Step.Model.DTOModels.AlarmModels; @@ -29,7 +28,7 @@ namespace Step.Listeners.Database List dbTools = controller.FindTools(); if (dbTools.Count > 0) { - // Loop through new data + // Loop through new data foreach (var live in data.UpdatedLives) { // Find tool and update residual life @@ -81,21 +80,26 @@ namespace Step.Listeners.Database { case 1: return (byte)(oldValue | (1 << 0)); + case 2: return (byte)(oldValue | (1 << 1)); + case 3: return (byte)(oldValue | (1 << 2)); + case 9: return (byte)(oldValue & ~(1 << 0)); + case 10: return (byte)(oldValue & ~(1 << 1)); + case 11: return (byte)(oldValue & ~(1 << 2)); } return 0; } - + public static void UpdateQueue(object queue) { List newQueue = queue as List; @@ -118,7 +122,7 @@ namespace Step.Listeners.Database { // Intersect old alarms data with new data DTOAlarmsModel differences = LastAlarms.GetDifferences(alarms); - if(!AlmDifferences.Equals(differences)) + if (!AlmDifferences.Equals(differences)) { AlmDifferences = differences; @@ -228,12 +232,12 @@ namespace Step.Listeners.Database public static void ManageAssisedToolingProcedure(object assTool) { DTOAssistedToolingEndValueModel assToolingData = assTool as DTOAssistedToolingEndValueModel; - if(!LastToolingData.Equals(assToolingData)) + if (!LastToolingData.Equals(assToolingData)) { LastToolingData = assToolingData; if (assToolingData.IsActive) { - using(NcToolManagerController toolManager = new NcToolManagerController()) + using (NcToolManagerController toolManager = new NcToolManagerController()) { switch (assToolingData.Action) { @@ -241,13 +245,14 @@ namespace Step.Listeners.Database { // Find shank loaded in the position var shank = toolManager.FindShanksByPositions(assToolingData.MagazineId, assToolingData.PositionId); - if(shank != null) + 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 @@ -260,7 +265,7 @@ namespace Step.Listeners.Database // Find shank by toolId var shankToLoad = toolManager.FindShankByToolId(assToolingData.ToolId); - if(shankToLoad != null) + if (shankToLoad != null) { // Load shank in magazine var pos = toolManager.LoadShankInMagazine((byte)assToolingData.MagazineId, (byte)assToolingData.PositionId, shankToLoad); @@ -272,7 +277,10 @@ namespace Step.Listeners.Database using (NcHandler ncHandler = new NcHandler()) { ncHandler.Connect(); - ncHandler.TerminateAssistedProcedure(assToolingData.MagazineId); + // Close procedure + ncHandler.TerminateAssistedProcedure(assToolingData.MagazineId, + assToolingData.Action != ASSISTED_TOOLING_ACTION.NONE + ); } } } diff --git a/Step/wwwroot/src/app_modules/maintenance/components/maintenance-card.ts b/Step/wwwroot/src/app_modules/maintenance/components/maintenance-card.ts index 540756a1..549e981a 100644 --- a/Step/wwwroot/src/app_modules/maintenance/components/maintenance-card.ts +++ b/Step/wwwroot/src/app_modules/maintenance/components/maintenance-card.ts @@ -182,7 +182,7 @@ export default class MaintenanceCard extends Vue { if(m.createdByCms) { // if maintenance is created by cms open password modal ModalHelper.ShowMaintenancePassword(PasswordDialog, m, (data) => { - this.RunMaintenance(m) + this.RunMaintenance(m, data) }) } else { @@ -190,11 +190,13 @@ export default class MaintenanceCard extends Vue { ModalHelper.AskConfirm(this.$options.filters.localize("modal_confirm_title", "Richiesta di conferma"), this.$options.filters.localize("modal_confirm_perform_maintenance", "Sei sicuro di aver eseguito questa manutenzione?"), () => - this.RunMaintenance(m) + this.RunMaintenance(m, "") , null); } } - async RunMaintenance(m){ + async RunMaintenance(m, password){ + m.password = password + new MaintenanceService().RunMaintenance(m).then((performedMaint) => { if(performedMaint && performedMaint.id){ // Delete from Expired List diff --git a/Step/wwwroot/src/app_modules/maintenance/components/password-dialog.ts b/Step/wwwroot/src/app_modules/maintenance/components/password-dialog.ts index 069e09e7..8756cb72 100644 --- a/Step/wwwroot/src/app_modules/maintenance/components/password-dialog.ts +++ b/Step/wwwroot/src/app_modules/maintenance/components/password-dialog.ts @@ -25,7 +25,8 @@ export default class PasswordDialog extends Vue{ } confirmPassword() { let onConf = this.onConfirm() - onConf.call(this.value) + + onConf.call(this, this.value) this.close(); } diff --git a/Step/wwwroot/src/components/modals/ModalHelper.ts b/Step/wwwroot/src/components/modals/ModalHelper.ts index 2213c07e..d2eca6b3 100644 --- a/Step/wwwroot/src/components/modals/ModalHelper.ts +++ b/Step/wwwroot/src/components/modals/ModalHelper.ts @@ -58,7 +58,8 @@ export class ModalHelper { }; public static MaintenancePasswordData = { - maintenance: null + maintenance: null, + value: "" }; public static GetModalData() {