From 4bc228c1315905cc031f0cd2ea77877ddcce8ab2 Mon Sep 17 00:00:00 2001 From: Lucio Maranta Date: Wed, 31 Oct 2018 16:58:51 +0000 Subject: [PATCH] Fix Siemens library, removed SHANKS --- CMS_CORE_Application/Form1.cs | 13 +- CMS_CORE_Library/Fanuc/Nc_Fanuc.cs | 230 ++++++- CMS_CORE_Library/Models/DataStructures.cs | 1 + CMS_CORE_Library/Models/SiemensToolModels.cs | 2 +- CMS_CORE_Library/Osai/Nc_Osai.cs | 3 +- CMS_CORE_Library/Siemens/Nc_Siemens.cs | 604 +++++++++++++------ CMS_CORE_Library/ToolConfigurations.cs | 2 +- CMS_CORE_Library/Utils/Nc_Utils.cs | 28 +- 8 files changed, 652 insertions(+), 231 deletions(-) diff --git a/CMS_CORE_Application/Form1.cs b/CMS_CORE_Application/Form1.cs index ef69cb8..65df3ea 100644 --- a/CMS_CORE_Application/Form1.cs +++ b/CMS_CORE_Application/Form1.cs @@ -134,14 +134,8 @@ namespace CMS_CORE_Application ////////////// SPEED TEST Stopwatch st = new Stopwatch(); sw.Restart(); - - List b = new List(); - cmsError = N.PROC_RActiveAlarms(1, ref b); - cmsError = N.PROC_RActiveAlarms(2, ref b); - cmsError = N.PROC_RActiveAlarms(3, ref b); - cmsError = N.PROC_RActiveAlarms(4, ref b); - cmsError = N.PROC_RActiveAlarms(5, ref b); - cmsError = N.PROC_RActiveAlarms(6, ref b); + + cmsError = N.FILES_WDeactivateProgram(1); Console.WriteLine("ICON" + sw.ElapsedMilliseconds); sw.Stop(); @@ -246,7 +240,8 @@ namespace CMS_CORE_Application if (t != null) t.Abort(); - N.NC_Disconnect(); + if(N != null) + N.NC_Disconnect(); } private void Disconnect_Click(object sender, EventArgs e) diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs index 950a7e2..5e3213f 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -14,6 +14,7 @@ using static CMS_CORE_Library.Fanuc.MEMORY_ADDRESS; using static CMS_CORE_Library.Models.DataStructures; using static CMS_CORE_Library.Nc; using static CMS_CORE_Library.Utils.Nc_Utils; +using static CMS_CORE_Library.ToolConfigurations; using static Focas1; #pragma warning disable 1591 @@ -2203,7 +2204,7 @@ namespace CMS_CORE_Library.Fanuc public override CmsError FILES_WDeactivateProgram(int processId) { - return NO_ERROR; + return FUNCTION_NOT_ALLOWED_ERROR; } public override CmsError FILES_UploadPartProgram(string localPath, string name, ref string newFilePath) @@ -2211,6 +2212,7 @@ namespace CMS_CORE_Library.Fanuc // Open file FileStream fileStream = new FileStream(localPath + "\\" + name, FileMode.Open); newFilePath = NC_PROGRAM_UPLOAD_PATH + name; + // Transfer file on NC CmsError cmsError = FILES_WProgramFromFile(newFilePath, fileStream); if (cmsError.IsError()) @@ -2370,6 +2372,50 @@ namespace CMS_CORE_Library.Fanuc public override CmsError TOOLS_RConfiguration(ref ToolTableConfiguration config) { + // Set limits + config.MaxTools = NC_MAX_TOOL_NUMER; + config.MaxEdgesPerTools = NC_MAX_EDGES_PER_TOOL; + config.MaxToolsPerFamily = NC_MAX_TOOLS_PER_FAMILY; + config.MaxMultitools = NC_MAX_MULTITOOLS_NUMBER; + config.MaxToolsPerMultitools = NC_MAX_TOOLS_PER_MULTITOOL; + + // Set options + //config.MultitoolOptionActive = MULTITOOL_OPTION_ACTIVE; + //config.FamilyOptionActive = true; + //config.MagPositionOptionActive = true; + + // Set fields configurations + config.ToolsConfiguration = NcToolFieldsConfig; + config.FamiliesConfiguration = NcFamilyFieldsConfig; + config.ShanksConfiguration = NcShankFieldsConfig; + config.MagazinePosConfiguration = NcMagazinePosFieldsConfig; + config.EdgesConfiguration = NcOffsetFieldsConfiguration; + config.MagPositionOptionActive = true; + config.MaxOffsets = 10; + + // Setup magazine list + List conf = new List(); + CmsError cmsError = TOOLS_RMagazineConfig(ref conf); + if (cmsError.IsError()) + return cmsError; + + // Get magazine status + Dictionary magazineStatus = new Dictionary(); + cmsError = TOOLS_RMagazineStatus(ref magazineStatus); + if (cmsError.IsError()) + return cmsError; + + config.Magazines = conf.Select(x => new SiemensMagazineConfigModel() + { + Id = x.Id, + Type = ConvertToSiemensMagazineType(x.Type), + Name = x.Id.ToString(), + LoadingIsActive = magazineStatus[x.Id], + MaxPositions = x.MaxPositions + }).ToList(); + + config.EdgesConfiguration.EdgesAdditionalParamsConfiguration = new Dictionary>(); + return NO_ERROR; } @@ -2501,6 +2547,34 @@ namespace CMS_CORE_Library.Fanuc public override CmsError TOOLS_RMagazineConfig(ref List config) { + // Check if the NC is Connected + CmsError cmsError = CheckConnection(); + if (cmsError.IsError()) + return cmsError; + + // Read data -> 10 status, 10 magazine position numbers + List readShorts = new List(); + cmsError = MEM_RWWordList(R, 0, MAGAZINE_TYPES.MemType, MAGAZINE_TYPES.Address, 20, ref readShorts); + if (cmsError.IsError()) + return cmsError; + + List types = new List(); + // Convert into list o fbytes + types = readShorts.SelectMany(BitConverter.GetBytes).ToList(); + + config = new List(); + for (int i = 0; i < 10; i++) + { + // Check if there are positions + if (types[i + 20] > 0) + config.Add(new NcMagazineConfigModel() + { + Id = (byte)(i + 1), + MaxPositions = types[i + 20], + Type = (NC_MAGAZINE_TYPE)types[i] + }); + } + return NO_ERROR; } @@ -2617,18 +2691,57 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } - public override CmsError TOOLS_WUpdateFamilies(List list) + public override CmsError TOOLS_WUpdateFamilies(List familyList) { + foreach(NcFamilyModel fam in familyList) + { + // Get the offset of the id in the memory + CmsError cmsError = TOOLS_RPositionId(fam.FamilyId, FAMILY_TABLE_INDEX.Address, out int offset); + if (cmsError.IsError()) + return cmsError; + + // Write object in memory + cmsError = TOOLS_WObjectInMemory(fam, FAMILY_TABLE_INDEX.Address, offset); + if (cmsError.IsError()) + return cmsError; + } + return NO_ERROR; } - public override CmsError TOOLS_WUpdateShanks(List list) + public override CmsError TOOLS_WUpdateShanks(List shankList) { + foreach (NcShankModel shank in shankList) + { + // Get the offset of the id in the memory + CmsError cmsError = TOOLS_RPositionId(shank.ShankId, SHANK_TABLE_INDEX.Address, out int offset); + if (cmsError.IsError()) + return cmsError; + + // Write object in memory + cmsError = TOOLS_WObjectInMemory(shank, SHANK_TABLE_INDEX.Address, offset); + if (cmsError.IsError()) + return cmsError; + } + return NO_ERROR; } - public override CmsError TOOLS_WUpdateMagazinePositions(List list) + public override CmsError TOOLS_WUpdateMagazinePositions(List magPosList) { + foreach (NcMagazinePositionModel pos in magPosList) + { + // Get the offset of the id in the memory + CmsError cmsError = TOOLS_RPositionId(pos.PositionId, SHANK_TABLE_INDEX.Address, out int offset); + if (cmsError.IsError()) + return cmsError; + + // Write object in memory + cmsError = TOOLS_WObjectInMemory(pos, SHANK_TABLE_INDEX.Address, offset); + if (cmsError.IsError()) + return cmsError; + } + return NO_ERROR; } @@ -2662,9 +2775,9 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } - private CmsError TOOLS_RPositionId(int id, int startIndex, out int index) + private CmsError TOOLS_RPositionId(int id, int startIndex, out int offset) { - index = 0; + offset = 0; // Read 300 bytes List ints = new List(); @@ -2673,31 +2786,88 @@ namespace CMS_CORE_Library.Fanuc return cmsError; ushort[] bytes = new ushort[300]; + // Copy into ushorts Buffer.BlockCopy(ints.ToArray(), 0, bytes, 0, ints.Count * sizeof(ushort)); - - index = Array + // Find id + offset = Array .FindIndex(bytes, x => x == id); return NO_ERROR; } - public CmsError TOOLS_WObjectInMemory(List items, int tableIndex, int objIndex) where T : class + public CmsError TOOLS_WObjectInMemory(T item, int startTableIndex, int objOffset) where T : class { PropertyInfo[] properties = typeof(T).GetProperties(); CmsError cmsError = NO_ERROR; - int nextFieldIndex = tableIndex; + int nextFieldIndex = startTableIndex; + + foreach (PropertyInfo property in properties) + { + // Get the size of the property + int size = Marshal.SizeOf(property.PropertyType); + + // Add obj index to the parameter memory + int currentFieldIndex = nextFieldIndex + objOffset * size; + + // Write based on the size + switch (size) + { + case 1: + { + byte b = Convert.ToByte(property.GetValue(item)); + cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, 0, ref b); + if (cmsError.IsError()) + return cmsError; + } + break; + case 2: + { + ushort u = Convert.ToUInt16(property.GetValue(item)); + cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref u); + if (cmsError.IsError()) + return cmsError; + } + break; + case 4: + { + uint w = Convert.ToUInt32(property.GetValue(item)); + cmsError = MEM_RWDWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref w); + if (cmsError.IsError()) + return cmsError; + } + break; + default: + break; + } + + // Calculate the starting index of the next field + nextFieldIndex += size * TOOL_OFFSET; + } + + return cmsError; + } + + public CmsError TOOLS_WObjectsInMemory(List items, int startTableIndex) where T : class + { + PropertyInfo[] properties = typeof(T).GetProperties(); + + CmsError cmsError = NO_ERROR; + int nextFieldIndex = startTableIndex; + // Index of the + int objOffset = 0; foreach (T item in items) - { + { foreach (PropertyInfo property in properties) { + // Get the size of the property int size = Marshal.SizeOf(property.PropertyType); // Add obj index to the parameter memory - int currentFieldIndex = nextFieldIndex + objIndex * size; - - // Write + int currentFieldIndex = nextFieldIndex + objOffset * size; + + // Write based on the size switch (size) { case 1: @@ -2706,21 +2876,24 @@ namespace CMS_CORE_Library.Fanuc cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, 0, ref b); if (cmsError.IsError()) return cmsError; - } break; + } + break; case 2: { ushort u = Convert.ToUInt16(property.GetValue(item)); cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref u); if (cmsError.IsError()) return cmsError; - } break; + } + break; case 4: { uint w = Convert.ToUInt32(property.GetValue(item)); cmsError = MEM_RWDWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref w); if (cmsError.IsError()) return cmsError; - } break; + } + break; default: break; } @@ -2728,11 +2901,14 @@ namespace CMS_CORE_Library.Fanuc // Calculate the starting index of the next field nextFieldIndex += size * TOOL_OFFSET; } + + // Increment offset + objOffset++; } return cmsError; } - + private string GenerateCsvStringFromModel(List items) where T : class { var output = ""; @@ -3458,12 +3634,18 @@ namespace CMS_CORE_Library.Fanuc internal static MEMORY_CELL MAGAZINES_ENABLED_CMD = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13082, 2); internal static MEMORY_CELL MAGAZINES_TOOLING_CMD = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13084, 2); - internal static MEMORY_CELL TOOL_STATUS_UPDATED_CMD = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 13003, 2); - internal static MEMORY_CELL TOOL_LIFE_UPDATED_CMD = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 13005, 2); - internal static MEMORY_CELL TOOL_STATUS_UPDATED_ACK = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 13007, 2); - internal static MEMORY_CELL TOOL_LIFE_UPDATED_ACK = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 13009, 2); + internal static MEMORY_CELL TOOL_STATUS_UPDATED_CMD = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13003, 2); + internal static MEMORY_CELL TOOL_LIFE_UPDATED_CMD = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13005, 2); + internal static MEMORY_CELL TOOL_STATUS_UPDATED_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13007, 2); + internal static MEMORY_CELL TOOL_LIFE_UPDATED_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13009, 2); - internal static MEMORY_CELL TOOL_STATUS_UPDATED_DATA = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 13011, 10); - internal static MEMORY_CELL TOOL_LIFE_UPDATED_DATA = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 13022, 40); + internal static MEMORY_CELL TOOL_STATUS_UPDATED_DATA = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13011, 10); + internal static MEMORY_CELL TOOL_LIFE_UPDATED_DATA = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13022, 40); + + // Tool table indexes + internal static MEMORY_CELL TOOL_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 35000, 6900); + internal static MEMORY_CELL FAMILY_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 42000, 7500); + internal static MEMORY_CELL SHANK_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 49600, 2100); + internal static MEMORY_CELL MAG_POS_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 51800, 900); } } \ No newline at end of file diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs index ad46c79..fdfb8a2 100644 --- a/CMS_CORE_Library/Models/DataStructures.cs +++ b/CMS_CORE_Library/Models/DataStructures.cs @@ -307,6 +307,7 @@ namespace CMS_CORE_Library.Models PART_PROGRAM = 1, JOB = 2 } + public static IFormatProvider numberFormat = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone(); #region Cms Errors Codes diff --git a/CMS_CORE_Library/Models/SiemensToolModels.cs b/CMS_CORE_Library/Models/SiemensToolModels.cs index 41ae8ab..a8b477f 100644 --- a/CMS_CORE_Library/Models/SiemensToolModels.cs +++ b/CMS_CORE_Library/Models/SiemensToolModels.cs @@ -190,7 +190,7 @@ namespace CMS_CORE_Library.Models public class SiemensMagazineConfigModel { - public byte Id; + public short Id; public SIEMENS_MAGAZINE_TYPE Type; public int MaxPositions; public string Name; diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index 5307382..10dd4f7 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -2348,7 +2348,7 @@ namespace CMS_CORE_Library.Osai config.Magazines = conf.Select(x => new SiemensMagazineConfigModel() { Id = x.Id, - Type = (SIEMENS_MAGAZINE_TYPE)x.Type, + Type = ConvertToSiemensMagazineType(x.Type), Name = x.Id.ToString(), LoadingIsActive = magazineStatus[x.Id], MaxPositions = x.MaxPositions @@ -2503,6 +2503,7 @@ namespace CMS_CORE_Library.Osai config = new List(); for (int i = 0; i < 10; i++) { + // Check if there are positions if (types[i + 20] > 0) config.Add(new NcMagazineConfigModel() { diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs index 120cf7b..916f0af 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -3,6 +3,7 @@ using Siemens.Sinumerik.Operate.Services; using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; @@ -74,7 +75,7 @@ namespace CMS_CORE_Library.Siemens private Alarm[] SiemensAlarms; // Tool table listeners - private ToolMngmntSvc SiemensToolSvc = null; + private static ToolMngmntSvc SiemensToolSvc = null; private static DataSvc MagazinePositionSvc = null; private static DataSvc MagazineActionsSvc = null; @@ -309,15 +310,14 @@ namespace CMS_CORE_Library.Siemens .Select(x => new { Key = Convert.ToInt32(x.Element("source").Value.Split('/').FirstOrDefault()), - x.Element("translation").Value + Value = x.Element("translation").Value }); foreach (var message in messagesList) { + // If not contain key if (!messages.Keys.Contains(message.Key)) - { messages.Add(message.Key, message.Value); - } } return NO_ERROR; @@ -334,7 +334,7 @@ namespace CMS_CORE_Library.Siemens #region High level methods - //Get the processes-count configurated + // Get the processes-count configurated public override CmsError NC_RProcessesNum(ref ushort ProcNumber) { CmsError cmsError = ReadStaticNCData(); @@ -346,7 +346,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the NC model Name + // Get the NC model Name public override CmsError NC_RModelName(ref string ModelName) { CmsError cmsError = ReadStaticNCData(); @@ -358,7 +358,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the NC Software Version + // Get the NC Software Version public override CmsError NC_RSoftwareVersion(ref string SWV) { CmsError cmsError = ReadStaticNCData(); @@ -370,7 +370,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the NC Language + // Get the NC Language public override CmsError NC_RLanguage(ref CultureInfo Language) { CmsError cmsError = ReadStaticNCData(); @@ -382,7 +382,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Set the NC Language + // Set the NC Language public override CmsError NC_WLanguage(CultureInfo Language) { // write write the language @@ -391,19 +391,19 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the NC Serial number - public override CmsError NC_RSerialNumber(ref string SN) + // Get the NC Serial number + public override CmsError NC_RSerialNumber(ref string serialNumber) { CmsError cmsError = ReadStaticNCData(); if (cmsError.IsError()) return cmsError; - SN = Cnc_SeriesNum; + serialNumber = Cnc_SeriesNum; return NO_ERROR; } - //Get CMS Machine number + // Get CMS Machine number public override CmsError NC_RMachineNumber(ref string MachNumber) { CmsError cmsError = ReadStaticNCData(); @@ -415,7 +415,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the Date-Time of the NC + // Get the Date-Time of the NC public override CmsError NC_RDateTime(ref DateTime ActualTime) { //Check if the NC is Connected @@ -491,7 +491,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Set the Nc Active Page of the NC + // Set the Nc Active Page of the NC public override CmsError NC_SetScreenVisible(SCREEN_PAGE screen) { Console.WriteLine(Infrastructure.CurrentActiveArea); @@ -547,7 +547,7 @@ namespace CMS_CORE_Library.Siemens // return cmsError; // Convert integer array into bit array - statusBits = IntToBool(readValues.ToArray()); + statusBits = IntToBool(readValues.ToArray()); for (i = 0; i < ALARMS_STATUS.Size * 8; i++) { @@ -768,7 +768,7 @@ namespace CMS_CORE_Library.Siemens if (cmsError.IsError()) return cmsError; - + // Convert ints into an array of bools bool[] bits = IntToBool(readValues.ToArray()); // Convert array into structured data @@ -836,6 +836,7 @@ namespace CMS_CORE_Library.Siemens if (cmsError.IsError()) return cmsError; + // Convert into list of byte readValues = readInts.SelectMany(BitConverter.GetBytes).ToList(); // Parse and format read data @@ -962,7 +963,7 @@ namespace CMS_CORE_Library.Siemens #region PROCESS (PATH) High-level data - //Get the process Mode + // Get the process Mode public override CmsError PROC_RMode(ushort ProcNumber, ref PROC_MODE Mode) { //Check if the NC is Connected @@ -970,10 +971,10 @@ namespace CMS_CORE_Library.Siemens if (cmsError.IsError()) return cmsError; - //Try to get information + // Try to get information try { - //Setup variables + // Setup variables DataSvc Data = new DataSvc { Timeout = TimeoutConn, @@ -983,12 +984,12 @@ namespace CMS_CORE_Library.Siemens Item itemReadIncr = new Item(JOG_INCR_PATH + "[u" + ProcNumber + "]"); Item itemReadAdv = new Item(ADVANCED_JOG_PATH + "[u" + ProcNumber + "]"); - //Read Data + // Read Data Data.Read(itemRead); Data.Read(itemReadIncr); Data.Read(itemReadAdv); - //Save Data + // Save Data Mode = ConvertToSTEPMode((uint)itemRead.Value, (uint)itemReadIncr.Value, (uint)itemReadAdv.Value); } catch (Exception ex) @@ -999,18 +1000,18 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the process status + // Get the process status public override CmsError PROC_RStatus(ushort ProcNumber, ref PROC_STATUS Status) { - //Check if the NC is Connected + // Check if the NC is Connected CmsError cmsError = CheckConnection(); if (cmsError.IsError()) return cmsError; - //Try to get information + // Try to get information try { - //Setup variables + // Setup variables DataSvc Data = new DataSvc { Timeout = TimeoutConn, @@ -1018,10 +1019,10 @@ namespace CMS_CORE_Library.Siemens }; Item itemRead = new Item(NC_GENERIC_STATE_PATH + "[u" + ProcNumber + "]"); - //Read Data + // Read Data Data.Read(itemRead); - //Save Data + // Save Data Status = ConvertToSTEPStatus((uint)itemRead.Value); } catch (Exception ex) @@ -1032,19 +1033,19 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get PP Lines + // Get PP Lines public override CmsError PROC_RPPLines(ushort ProcNumber, ref List Lines) { - //Check if the NC is Connected + // Check if the NC is Connected CmsError cmsError = CheckConnection(); if (cmsError.IsError()) return cmsError; - String[] newLines; - //Try to get information + string[] newLines; + // Try to get information try { - //Setup variables + // Setup variables DataSvc Data = new DataSvc { Timeout = TimeoutConn, @@ -1052,18 +1053,18 @@ namespace CMS_CORE_Library.Siemens }; Item itemRead = new Item(ACT_PROG_LINES_PATH + "[u" + ProcNumber + "]"); - //Read Data + // Read Data Data.Read(itemRead); - //Save Data + // Save Data newLines = ((string)itemRead.Value).Replace("\r", string.Empty).Split('\n'); - //Setup the return values + // Setup the return values Lines.Clear(); foreach (string Line in newLines) Lines.Add(Line); - //Remove the first Line (the previous line) + // Remove the first Line (the previous line) if (Lines.Count > 0) Lines.RemoveAt(0); } @@ -1075,10 +1076,10 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get PP Name + // Get PP Name public override CmsError PROC_RSelectedPPName(ushort ProcNumber, ref string Name) { - //Check if the NC is Connected + // Check if the NC is Connected CmsError cmsError = CheckConnection(); if (cmsError.IsError()) return cmsError; @@ -1086,24 +1087,24 @@ namespace CMS_CORE_Library.Siemens string RetString; int LastUnderscore; - //Try to get information + // Try to get information try { - //Setup variables + // Setup variables DataSvc Data = new DataSvc { Timeout = TimeoutConn, PriorityFlag = SlPriority.highPriority }; Item itemRead = new Item(ACT_PROG_NAME_PATH + "[u" + ProcNumber + "]"); - //Read Data + // Read Data Data.Read(itemRead); - //Elaborate String + // Elaborate String RetString = ((string)itemRead.Value); RetString = RetString.Replace("_N_", ""); LastUnderscore = RetString.LastIndexOf("_"); if (LastUnderscore >= 0) RetString = RetString.Remove(LastUnderscore, 1).Insert(LastUnderscore, "."); - //Save Data + // Save Data Name = RetString; } catch (Exception ex) @@ -1114,7 +1115,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - //Get the process Active Alarms + // Get the process Active Alarms public override CmsError PROC_RActiveAlarms(ushort procNumber, ref List alarms) { alarms = SiemensAlarms @@ -1177,6 +1178,7 @@ namespace CMS_CORE_Library.Siemens for (int i = 0; i < PROCESS_NUMBER; i++) { + // Calculate bit address = ProcessBase + processId * 2 int memoryAddress = SELECTED_PROCESS.SubAddress + i * (2); // Read memory from plc cmsError = MEM_RWBoolean(R, 0, SELECTED_PROCESS.MemType, SELECTED_PROCESS.Address, memoryAddress, 2, ref readValue); @@ -1316,6 +1318,7 @@ namespace CMS_CORE_Library.Siemens if (cmsError.IsError()) return cmsError; int i = 0; + try { XDocument xmlAxesFile = XDocument.Load(AXES_FILE_PATH); @@ -1915,7 +1918,7 @@ namespace CMS_CORE_Library.Siemens // Preapare folder node Node fileNode = new Node(trimString); - if(fileNode != null) + if (fileNode != null) fileInfo = new InfoFile() { CreationDate = fileNode.Attributes.LastAccess, @@ -1935,7 +1938,6 @@ namespace CMS_CORE_Library.Siemens PreviewBase64 = FindImageBase64String(IMAGES_PATH, fileNode.Name), AbsolutePath = fileNode.LogicalPath }; - } catch (Exception ex) { @@ -1984,7 +1986,7 @@ namespace CMS_CORE_Library.Siemens { //Setup variables DataSvc dataSvc = new DataSvc(); - + // Read position and tool data List itemRead = new List() { @@ -2007,7 +2009,7 @@ namespace CMS_CORE_Library.Siemens .Value .ToString() .Split('\n') // Line separator - .Skip(1) // The actPartProgram read starting with the line before the current + .Skip(1) // The actPartProgram read starting with the line before the current .ToList(); programData = new ActiveProgramDataModel() @@ -2259,30 +2261,30 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - + #region Tools functions public override CmsError TOOLS_RToolsData(ref List toolTable) { - toolTable = new List( ToolTableData.Select(x => - { + toolTable = new List(ToolTableData.Select(x => + { // Find if is loaded in magazine MountedToolModel tool = MagazineMountedTools.Where(y => y.ToolId == x.Id).FirstOrDefault(); - if (tool != null) - { - x.MagazineId = tool.MagazineId; - x.PositionId = tool.PositionId; - } - else - { - x.MagazineId = 0; - x.PositionId = 0; - } + if (tool != null) + { + x.MagazineId = tool.MagazineId; + x.PositionId = tool.PositionId; + } + else + { + x.MagazineId = 0; + x.PositionId = 0; + } // Update multitool id x.MultitoolId = ToolIsInMultitool(x.Id); - return x; - }) + return x; + }) .ToList()); return NO_ERROR; } @@ -2483,7 +2485,7 @@ namespace CMS_CORE_Library.Siemens public override CmsError TOOLS_RShanksData(ref List shanksData) { return NO_ERROR; - + // *SHANK FIX* shanksData = MultitoolsData; foreach (ShankModel shank in shanksData) @@ -3408,7 +3410,7 @@ namespace CMS_CORE_Library.Siemens //Check if Siemens Environment is started private CmsError CheckSiemensEnv() { - if (String.IsNullOrEmpty(Environment.GetEnvironmentVariable(SinumerikEnvVar))) + if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(SinumerikEnvVar))) return SIEMENS_ENVIRONMENT_NOT_FOUND_ERROR; return NO_ERROR; } @@ -3480,7 +3482,7 @@ namespace CMS_CORE_Library.Siemens //Setup variables Cnc_name = GetName((uint)ItemNcType.Value); Cnc_SftVersion = Regex.Replace(((double)ItemNcVersion.Value).ToString(), ".{2}", "$0.").TrimEnd('.'); ; - Cnc_SeriesNum = ((String)ItemSerialNumber.Value); + Cnc_SeriesNum = ((string)ItemSerialNumber.Value); MaxChannelNo = (uint)ItemMaxChannelNo.Value; ConfChannelNo = (uint)ItemConfChannelNo.Value; @@ -3500,9 +3502,9 @@ namespace CMS_CORE_Library.Siemens } // Convert the internal Name var in Readable STEP Name - private String GetName(uint value) + private string GetName(uint value) { - String name = "Siemens "; + string name = "Siemens "; switch (value) { case 0: name += "840D pl"; break; @@ -3558,7 +3560,7 @@ namespace CMS_CORE_Library.Siemens } //Convert to Step Language - private String ConvertToNCLanguage(CultureInfo language) + private string ConvertToNCLanguage(CultureInfo language) { return language.ThreeLetterWindowsLanguageName; } @@ -3648,6 +3650,18 @@ namespace CMS_CORE_Library.Siemens #region Siemens Tool private functions + private string[] ReadToolTableFile() + { + // Create a configuration file + FileStream f = new FileStream(LOCALE_TOOL_FILE_PATH, FileMode.Create); + + // Read siemens configuration file + CmsError cmsError = FILES_RProgramToFile(NC_TOOL_FILE_PATH, f); + f.Close(); + + return File.ReadAllLines(LOCALE_TOOL_FILE_PATH); + } + private void MagazinePositionEnabled_OnChange(Guid guid, Item[] items, DataSvcStatus[] status) { // Parse each new item @@ -3672,7 +3686,7 @@ namespace CMS_CORE_Library.Siemens private void MagazineAction_OnChange(Guid guid, Item item, DataSvcStatus status) { - if (Int32.TryParse(item.Value.ToString(), out int action)) + if (int.TryParse(item.Value.ToString(), out int action)) switch (action) { case 1: @@ -3895,17 +3909,17 @@ namespace CMS_CORE_Library.Siemens case "$TC_TP8": { - // Get tool status + // Get tool status and read each bit int toolStatus = Convert.ToInt32(actualString.Split('=').LastOrDefault()); ToolTableData[toolIndex].IsActive = GetBitValue(toolStatus, 1); - ToolTableData[toolIndex].InFixedPlace = GetBitValue(toolStatus, 2); + ToolTableData[toolIndex].IsEnabled = GetBitValue(toolStatus, 2); ToolTableData[toolIndex].IsInhibited = GetBitValue(toolStatus, 3); ToolTableData[toolIndex].IsMeasured = GetBitValue(toolStatus, 4); - ToolTableData[toolIndex].InChangeTool = GetBitValue(toolStatus, 5); - ToolTableData[toolIndex].IsEnabled = GetBitValue(toolStatus, 6); - ToolTableData[toolIndex].IsInUse = GetBitValue(toolStatus, 7); - ToolTableData[toolIndex].PreAlarm = GetBitValue(toolStatus, 8); + ToolTableData[toolIndex].PreAlarm = GetBitValue(toolStatus, 5); + ToolTableData[toolIndex].InChangeTool = GetBitValue(toolStatus, 6); + ToolTableData[toolIndex].InFixedPlace = GetBitValue(toolStatus, 7); + ToolTableData[toolIndex].IsInUse = GetBitValue(toolStatus, 8); } break; @@ -3940,7 +3954,7 @@ namespace CMS_CORE_Library.Siemens ToolTableData[toolIndex].MaxAcceleration = Convert.ToDouble(actualString.Split('=').LastOrDefault(), numberFormat); break; - //case "$TC_MTPN": + //*SHANK FIX*case "$TC_MTPN": // { // // Insert new multitool // MultitoolsData.Add(new ShankModel() @@ -3995,7 +4009,7 @@ namespace CMS_CORE_Library.Siemens MagazineConfig.Add(new SiemensMagazineConfigModel() { - Id = (byte)firstId, + Id = (short)firstId, Type = (SIEMENS_MAGAZINE_TYPE)Convert.ToInt32(actualString.Split('=').LastOrDefault()), LoadingIsActive = active }); @@ -4185,7 +4199,7 @@ namespace CMS_CORE_Library.Siemens int index = MagazinePositionsData.FindIndex(x => x.PositionId == secondId && x.MagazineId == firstId); if (index >= 0) MagazinePositionsData[index].Type = Convert.ToInt32(actualString.Split('=').LastOrDefault()); - //MagazinePositionsData.Add(new PositionModel() + //*SHANK FIX*MagazinePositionsData.Add(new PositionModel() //{ // PositionId = secondId, // MagazineId = firstId, @@ -4212,7 +4226,7 @@ namespace CMS_CORE_Library.Siemens } break; - //case "$TC_MTPP6": + //*SHANK FIX*case "$TC_MTPP6": // { // // Find tool by id // int toolId = Convert.ToInt32(actualString.Split('=').LastOrDefault()); @@ -4241,102 +4255,330 @@ namespace CMS_CORE_Library.Siemens } } } - - private string[] ReadToolTableFile() - { - // Create a configuration file - FileStream f = new FileStream(LOCALE_TOOL_FILE_PATH, FileMode.Create); - // Read siemens configuration file - CmsError cmsError = FILES_RProgramToFile(NC_TOOL_FILE_PATH, f); - f.Close(); - return File.ReadAllLines(LOCALE_TOOL_FILE_PATH); - } - - // ------------- TODO IMPROVE - private SiemensToolModel CreateToolFromId(int toolId, string[] toolsStrings) + + private SiemensToolModel CreateToolFromId(int toolIdToGet, string[] toolsStrings) { SiemensEdgesConfiguration toolEdgesConfig = new SiemensEdgesConfiguration(); + SiemensToolModel outputTool = new SiemensToolModel(); + int lastSecondId = 0; + int edgeIndex = 0; - // Find tool status status - var toolStatusByte = toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_TP8[" + toolId)); - if (toolStatusByte == null) - return null; - - int toolStatus = Convert.ToInt32(toolStatusByte.Split('=').LastOrDefault()); - // Find basic info (rotation, cooling ...) - var toolInfo = Convert.ToInt32(toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_DP25[" + toolId)).Split('=').LastOrDefault()); - - // Get rotation data - ROTATION rotation = ROTATION.NONE; - if (GetBitValue(toolInfo, 9)) - rotation = ROTATION.CLOCKWHISE; - else if (GetBitValue(toolInfo, 10)) - rotation = ROTATION.COUNTERCLOCKWHISE; - - // Create tool model - SiemensToolModel toolValues = new SiemensToolModel() + // Foreach string + for (int i = 0; i < toolsStrings.Count(); i++) { - Id = toolId, - ChildId = Convert.ToInt32(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP1[" + toolId)).Split('=').LastOrDefault()), - FamilyName = toolsStrings.FirstOrDefault(x => x.Contains("$TC_TP2[" + toolId)).Split('=').LastOrDefault().Replace("\"", ""), - LeftSize = Convert.ToByte(toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_TP3[" + toolId)).Split('=').LastOrDefault()), - RightSize = Convert.ToByte(toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_TP4[" + toolId)).Split('=').LastOrDefault()), - MagazinePositionType = Convert.ToByte(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP7[" + toolId)).Split('=').LastOrDefault()), - Rotation = rotation, - MaxSpeed = Convert.ToDouble(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP_MAX_VELO[" + toolId)).Split('=').LastOrDefault(), numberFormat), - MaxAcceleration = Convert.ToDouble(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP_MAX_ACC[" + toolId)).Split('=').LastOrDefault(), numberFormat), - LifeType = (SIEMENS_LIFE_TYPE)Convert.ToInt32(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP9[" + toolId)).Split('=').LastOrDefault()), - Cooling1 = GetBitValue(toolInfo, 11), - Cooling2 = GetBitValue(toolInfo, 12), - IsActive = GetBitValue(toolStatus, 1), - InFixedPlace = GetBitValue(toolStatus, 2), - IsInhibited = GetBitValue(toolStatus, 3), - IsMeasured = GetBitValue(toolStatus, 4), - InChangeTool = GetBitValue(toolStatus, 5), - IsEnabled = GetBitValue(toolStatus, 6), - IsInUse = GetBitValue(toolStatus, 7), - PreAlarm = GetBitValue(toolStatus, 8), - EdgesData = new List() - }; + string actualString = toolsStrings[i]; // Get actual string data - // For each possible edges - for (int i = 1; i <= MAX_EDGES_PER_TOOL; i++) - { - // Find the type of the edges - var toolType = toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_DP1[" + toolId + "," + i)); - // If type doesn't exist than edges doesn't exist - if (toolType != null) + GetIdsFromSiemensToolString(actualString, out int firstId, out int secondId); // find ids from current string + + if (firstId != 0 && firstId == toolIdToGet) { - int toolTypeVal = Convert.ToInt32(toolType.Split('=').LastOrDefault()); - // Set Tool type by its first edge type - if (i == 1) - toolValues.ToolType = toolTypeVal; - - // Get tool type additional parameters - if (toolEdgesConfig.EdgesConfig.ContainsKey(toolTypeVal)) + if (secondId == 0) { - var toolTypeConfig = toolEdgesConfig.EdgesConfig[toolTypeVal]; - - // Create new edge data and set data - EdgeModel edgeData = SetUpEdgeData(toolsStrings, toolValues.LifeType, toolValues.Id, i); - - // For each dynamic parameter configured - foreach (var item in toolTypeConfig) + switch (GetUntilOrEmpty(actualString)) // Cut string until [ character { - edgeData.EdgeAdditionalParams.Add( - item.Name, - Convert.ToDouble(toolsStrings.FirstOrDefault(X => X.StartsWith(item.Path + toolId + "," + i)).Split('=').LastOrDefault(), numberFormat) - ); - } + case "$TC_TP1": + { + outputTool = new SiemensToolModel() + { + Id = firstId, + ChildId = Convert.ToInt32(actualString.Split('=').LastOrDefault()) + }; + } + break; - toolValues.EdgesData.Add(edgeData); + case "$TC_TP2": + { + string familyName = actualString.Split('=').LastOrDefault().Replace("\"", ""); + outputTool.FamilyName = familyName; + // Add new family with new tool + AddOrUpdateFamilyChild(familyName); + } + break; + + case "$TC_TP3": + outputTool.LeftSize = Convert.ToByte(actualString.Split('=').LastOrDefault()); + break; + + case "$TC_TP4": + outputTool.RightSize = Convert.ToByte(actualString.Split('=').LastOrDefault()); + break; + + case "$TC_TP7": + outputTool.MagazinePositionType = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + break; + + case "$TC_TP8": + { + // Get tool status and read each bit + int toolStatus = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + + outputTool.IsActive = GetBitValue(toolStatus, 1); + outputTool.IsEnabled = GetBitValue(toolStatus, 2); + outputTool.IsInhibited = GetBitValue(toolStatus, 3); + outputTool.IsMeasured = GetBitValue(toolStatus, 4); + outputTool.PreAlarm = GetBitValue(toolStatus, 5); + outputTool.InChangeTool = GetBitValue(toolStatus, 6); + outputTool.InFixedPlace = GetBitValue(toolStatus, 7); + outputTool.IsInUse = GetBitValue(toolStatus, 8); + } + break; + + case "$TC_TP9": + outputTool.LifeType = (SIEMENS_LIFE_TYPE)Convert.ToInt32(actualString.Split('=').LastOrDefault()); + break; + + case "$TC_TP25": + { + // Get tool general information + var toolInfo = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + + // Convert rotation data + ROTATION rotation = ROTATION.NONE; + if (GetBitValue(toolInfo, 9)) + rotation = ROTATION.CLOCKWHISE; + else if (GetBitValue(toolInfo, 10)) + rotation = ROTATION.COUNTERCLOCKWHISE; + // Set new data + + outputTool.Cooling1 = GetBitValue(toolInfo, 11); + outputTool.Cooling2 = GetBitValue(toolInfo, 12); + outputTool.Rotation = rotation; + } + break; + + case "$TC_TP_MAX_VELO": + outputTool.MaxSpeed = Convert.ToDouble(actualString.Split('=').LastOrDefault(), numberFormat); + break; + + case "$TC_TP_MAX_ACC": + outputTool.MaxAcceleration = Convert.ToDouble(actualString.Split('=').LastOrDefault(), numberFormat); + break; + } + } + else + { + // If secondId is changed, change current edge id + if (lastSecondId != secondId) + edgeIndex = outputTool.EdgesData.FindIndex(x => x.Id == secondId); + + switch (GetUntilOrEmpty(actualString)) + { + case "$TC_DP1": + { + if (secondId == 1) // Read tool type from first edge type + outputTool.ToolType = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + // Add new edge + outputTool.EdgesData.Add(new EdgeModel() { Id = secondId }); + edgeIndex = outputTool.EdgesData.Count - 1; // Update Index + } + break; + + case "$TC_MOP1": + { + if (outputTool.LifeType == SIEMENS_LIFE_TYPE.TIME) + { + outputTool + .EdgesData[edgeIndex] + .PreAlmLife = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + } + } + break; + + case "$TC_MOP2": + { + if (outputTool.LifeType == SIEMENS_LIFE_TYPE.TIME) + { + outputTool + .EdgesData[edgeIndex] + .ResidualLife = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + } + } + break; + + case "$TC_MOP11": + { + if (outputTool.LifeType == SIEMENS_LIFE_TYPE.TIME) + { + outputTool + .EdgesData[edgeIndex] + .NominalLife = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + } + } + break; + + case "$TC_MOP3": + { + if (outputTool.LifeType == SIEMENS_LIFE_TYPE.COUNT) + { + outputTool + .EdgesData[edgeIndex] + .PreAlmLife = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + } + } + break; + + case "$TC_MOP4": + { + if (outputTool.LifeType == SIEMENS_LIFE_TYPE.COUNT) + { + outputTool + .EdgesData[edgeIndex] + .ResidualLife = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + } + } + break; + + case "$TC_MOP13": + { + if (outputTool.LifeType == SIEMENS_LIFE_TYPE.COUNT) + { + outputTool + .EdgesData[edgeIndex] + .NominalLife = Convert.ToInt32(actualString.Split('=').LastOrDefault()); + } + } + break; + + case "$TC_DP2": + case "$TC_DP3": + case "$TC_DP4": + case "$TC_DP5": + case "$TC_DP6": + case "$TC_DP7": + case "$TC_DP8": + case "$TC_DP9": + case "$TC_DP10": + case "$TC_DP11": + case "$TC_DP12": + case "$TC_DP13": + case "$TC_DP14": + case "$TC_DP15": + case "$TC_DP16": + case "$TC_DP17": + case "$TC_DP21": + case "$TC_DP22": + case "$TC_DP23": + case "$TC_DP24": + case "$TC_DP25": + case "$TC_DPV": + case "$TC_DPV3": + case "$TC_DPV4": + case "$TC_DPV5": + case "$TC_DPNT": + { + // Clear tool + outputTool + .EdgesData[edgeIndex] + .EdgeAdditionalParams + .Clear(); + // Get tool type additional parameters + if (toolEdgesConfig.EdgesConfig.ContainsKey(outputTool.ToolType)) + { + // Find if actual param exist for the tool type + List toolTypeConfig = toolEdgesConfig.EdgesConfig[outputTool.ToolType]; + EdgeConfigModel paramConfig = toolTypeConfig + .Where(x => x.Path == (GetUntilOrEmpty(actualString) + "[")) + .FirstOrDefault(); + + // If Exist + if (paramConfig != null) + { + // Add additional param + outputTool + .EdgesData[edgeIndex] + .EdgeAdditionalParams + .Add(paramConfig.Name, Convert.ToDouble(actualString.Split('=').LastOrDefault(), numberFormat)); + } + } + } + break; + } } } } - return toolValues; + //SiemensEdgesConfiguration toolEdgesConfig = new SiemensEdgesConfiguration(); + + //// Find tool status status + //var toolStatusByte = toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_TP8[" + toolId)); + //if (toolStatusByte == null) + // return null; + + //int toolStatus = Convert.ToInt32(toolStatusByte.Split('=').LastOrDefault()); + //// Find basic info (rotation, cooling ...) + //var toolInfo = Convert.ToInt32(toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_DP25[" + toolId)).Split('=').LastOrDefault()); + + //// Get rotation data + //ROTATION rotation = ROTATION.NONE; + //if (GetBitValue(toolInfo, 9)) + // rotation = ROTATION.CLOCKWHISE; + //else if (GetBitValue(toolInfo, 10)) + // rotation = ROTATION.COUNTERCLOCKWHISE; + + //// Create tool model + //outputTool = new SiemensToolModel() + //{ + // Id = toolId, + // ChildId = Convert.ToInt32(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP1[" + toolId)).Split('=').LastOrDefault()), + // FamilyName = toolsStrings.FirstOrDefault(x => x.Contains("$TC_TP2[" + toolId)).Split('=').LastOrDefault().Replace("\"", ""), + // LeftSize = Convert.ToByte(toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_TP3[" + toolId)).Split('=').LastOrDefault()), + // RightSize = Convert.ToByte(toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_TP4[" + toolId)).Split('=').LastOrDefault()), + // MagazinePositionType = Convert.ToByte(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP7[" + toolId)).Split('=').LastOrDefault()), + // Rotation = rotation, + // MaxSpeed = Convert.ToDouble(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP_MAX_VELO[" + toolId)).Split('=').LastOrDefault(), numberFormat), + // MaxAcceleration = Convert.ToDouble(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP_MAX_ACC[" + toolId)).Split('=').LastOrDefault(), numberFormat), + // LifeType = (SIEMENS_LIFE_TYPE)Convert.ToInt32(toolsStrings.FirstOrDefault(x => x.StartsWith("$TC_TP9[" + toolId)).Split('=').LastOrDefault()), + // Cooling1 = GetBitValue(toolInfo, 11), + // Cooling2 = GetBitValue(toolInfo, 12), + // IsActive = GetBitValue(toolStatus, 1), + // InFixedPlace = GetBitValue(toolStatus, 2), + // IsInhibited = GetBitValue(toolStatus, 3), + // IsMeasured = GetBitValue(toolStatus, 4), + // InChangeTool = GetBitValue(toolStatus, 5), + // IsEnabled = GetBitValue(toolStatus, 6), + // IsInUse = GetBitValue(toolStatus, 7), + // PreAlarm = GetBitValue(toolStatus, 8), + // EdgesData = new List() + //}; + + //// For each possible edges + //for (int i = 1; i <= MAX_EDGES_PER_TOOL; i++) + //{ + // // Find the type of the edges + // var toolType = toolsStrings.FirstOrDefault(X => X.StartsWith("$TC_DP1[" + toolId + "," + i)); + // // If type doesn't exist than edges doesn't exist + // if (toolType != null) + // { + // int toolTypeVal = Convert.ToInt32(toolType.Split('=').LastOrDefault()); + // // Set Tool type by its first edge type + // if (i == 1) + // outputTool.ToolType = toolTypeVal; + + // // Get tool type additional parameters + // if (toolEdgesConfig.EdgesConfig.ContainsKey(toolTypeVal)) + // { + // var toolTypeConfig = toolEdgesConfig.EdgesConfig[toolTypeVal]; + + // // Create new edge data and set data + // EdgeModel edgeData = SetUpEdgeData(toolsStrings, outputTool.LifeType, outputTool.Id, i); + + // // For each dynamic parameter configured + // foreach (var item in toolTypeConfig) + // { + // edgeData.EdgeAdditionalParams.Add( + // item.Name, + // Convert.ToDouble(toolsStrings.FirstOrDefault(X => X.StartsWith(item.Path + toolId + "," + i)).Split('=').LastOrDefault(), numberFormat) + // ); + // } + + // outputTool.EdgesData.Add(edgeData); + // } + // } + //} + + return outputTool; } - + private EdgeModel SetUpEdgeData(string[] toolsString, SIEMENS_LIFE_TYPE lifeType, int toolId, int edgeId) { EdgeModel edgeData = new EdgeModel @@ -4377,20 +4619,10 @@ namespace CMS_CORE_Library.Siemens private void ToolMngmtSvcHandler(Guid guid, ToolInfo[] toolInfos) { - //try - //{ - // string[] toolsStrings = ReadToolTableFile(); - // PopulateToolsTableFromFileStrings(toolsStrings); - // For each new action for (int i = 0; i < toolInfos.Count(); i++) { // Choose behavior based on the actions ActionsHandler(toolInfos[i]); } - //} - //catch (Exception ex) - //{ - // Console.WriteLine(ex.Message); - //} } private void ActionsHandler(ToolInfo toolInfo) @@ -4413,7 +4645,7 @@ namespace CMS_CORE_Library.Siemens // Remove ToolTableData.Remove(tool); } - // else if (MULTITOOL_OPTION_ACTIVE) + //*SHANK FIX* else if (MULTITOOL_OPTION_ACTIVE) // { // // if tool not exist, find into shanks // ShankModel shank = MultitoolsData.FirstOrDefault(t => t.Id == toolInfo.tNo); @@ -4435,14 +4667,16 @@ namespace CMS_CORE_Library.Siemens case ToolAction.TOOL_CREATED: { string[] toolsStrings = ReadToolTableFile(); - + Stopwatch st = new Stopwatch(); + st.Start(); SiemensToolModel newTool = CreateToolFromId((int)toolInfo.tNo, toolsStrings); + Console.WriteLine(st.ElapsedMilliseconds); if (newTool != null) { ToolTableData.Add(newTool); AddOrUpdateFamilyChild(newTool.FamilyName); } - //else if (MULTITOOL_OPTION_ACTIVE) + //*SHANK FIX*else if (MULTITOOL_OPTION_ACTIVE) //{ // ShankModel newMultitool = CreateMultitoolFromId((int)toolInfo.tNo, toolsStrings); // MultitoolsData.Add(newMultitool); @@ -4454,19 +4688,24 @@ namespace CMS_CORE_Library.Siemens { string[] toolsStrings = ReadToolTableFile(); - // Fin edited toolIndex + // Find edited toolIndex int toolIndex = ToolTableData.FindIndex(t => t.Id == toolInfo.tNo); // If the id belongs to a tool if (toolIndex != -1) { + Stopwatch st = new Stopwatch(); + st.Start(); + // Get tool new data SiemensToolModel newTool = CreateToolFromId((int)toolInfo.tNo, toolsStrings); + Console.WriteLine(st.ElapsedMilliseconds); + // Replace the element if (newTool != null) ToolTableData[toolIndex] = newTool; } - //else if (MULTITOOL_OPTION_ACTIVE) + //*SHANK FIX*else if (MULTITOOL_OPTION_ACTIVE) //{ // // Find if its a multitool // int multitoolIndex = MultitoolsData.FindIndex(t => t.Id == toolInfo.tNo); @@ -4511,7 +4750,7 @@ namespace CMS_CORE_Library.Siemens MountToolToMagazineList((int)toolInfo.tNo, magazineId, positionId); // moved MULTITOOL handler, add when Siemens Library bugs have been fixed - //catch (Exception ex) + //*SHANK FIX*catch (Exception ex) //{ // int shankIdx = MultitoolsData.FindIndex(x => x.Id == toolInfo.tNo); // if (shankIdx < 0) @@ -4579,7 +4818,8 @@ namespace CMS_CORE_Library.Siemens return Convert.ToInt32(item.Value); - //// Get tool ids + // First implementation before the path was found + //Get tool ids //List toolIds = ToolTableData.Select(x => x.Id).ToList(); //// Sort tools ids array //toolIds.Sort((x, y) => x.CompareTo(y)); @@ -4661,7 +4901,7 @@ namespace CMS_CORE_Library.Siemens toolId = 0; edgeId = 0; - if (!String.IsNullOrWhiteSpace(text)) + if (!string.IsNullOrWhiteSpace(text)) { // Get indexes from string int startingData = text.IndexOf("[", StringComparison.Ordinal) + 1; @@ -4729,7 +4969,7 @@ namespace CMS_CORE_Library.Siemens return 0; } - + private CmsError CheckMultitoolData(ref ShankModel shank, bool isUpdate) { //Check if the NC is Connected diff --git a/CMS_CORE_Library/ToolConfigurations.cs b/CMS_CORE_Library/ToolConfigurations.cs index 808d593..99009d9 100644 --- a/CMS_CORE_Library/ToolConfigurations.cs +++ b/CMS_CORE_Library/ToolConfigurations.cs @@ -101,7 +101,7 @@ namespace CMS_CORE_Library new FieldsConfiguration{ Name = "inFixedPlace", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false, MinValue = 0, MaxValue = 0}, new FieldsConfiguration{ Name = "isMeasured", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false, MinValue = 0, MaxValue = 0}, new FieldsConfiguration{ Name = "inChangeTool", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false, MinValue = 0, MaxValue = 0}, - new FieldsConfiguration{ Name = "inUse", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false, MinValue = 0, MaxValue = 0}, + new FieldsConfiguration{ Name = "isInUse", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false, MinValue = 0, MaxValue = 0}, new FieldsConfiguration{ Name = "preAlarm", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false, MinValue = 0, MaxValue = 0}, new FieldsConfiguration{ Name = "cooling1", Type = "boolean", SelectValues = null, Category = "cooling", ReadOnly = false, MinValue = 0, MaxValue = 0}, new FieldsConfiguration{ Name = "cooling2", Type = "boolean", SelectValues = null, Category = "cooling" , ReadOnly = false, MinValue = 0, MaxValue = 0}, diff --git a/CMS_CORE_Library/Utils/Nc_Utils.cs b/CMS_CORE_Library/Utils/Nc_Utils.cs index ca370c0..599aa7e 100644 --- a/CMS_CORE_Library/Utils/Nc_Utils.cs +++ b/CMS_CORE_Library/Utils/Nc_Utils.cs @@ -156,7 +156,7 @@ namespace CMS_CORE_Library.Utils return fileContent; } - + // Get a substring from the beginning until the specified character public static string GetUntilOrEmpty(string text, string stopAt = "[") { // Get string unti @@ -185,29 +185,31 @@ namespace CMS_CORE_Library.Utils return ""; } - - public static IEnumerable DistinctBy (this IEnumerable source, Func keySelector) - { - HashSet seenKeys = new HashSet(); - foreach (TSource element in source) - { - if (seenKeys.Add(keySelector(element))) - { - yield return element; - } - } - } + // Convert one integer in array of bools public static bool[] IntToBool(int val) { return IntToBool(new int[] { val }); } + // Convert array of integers in an array of bools public static bool[] IntToBool(int[] val) { return new BitArray(val.ToArray()) .Cast() .ToArray(); } + + public static SIEMENS_MAGAZINE_TYPE ConvertToSiemensMagazineType(NC_MAGAZINE_TYPE type) + { + switch (type) + { + case NC_MAGAZINE_TYPE.CHAIN: return SIEMENS_MAGAZINE_TYPE.CHAIN; + case NC_MAGAZINE_TYPE.BOX_MAGAZINE: return SIEMENS_MAGAZINE_TYPE.BOX_MAGAZINE; + case NC_MAGAZINE_TYPE.DISK: return SIEMENS_MAGAZINE_TYPE.REVOLVER; + } + + return SIEMENS_MAGAZINE_TYPE.BOX_MAGAZINE; + } } } \ No newline at end of file