diff --git a/CMS_CORE_Application/Form1.cs b/CMS_CORE_Application/Form1.cs index 6a26e35..98fcc06 100644 --- a/CMS_CORE_Application/Form1.cs +++ b/CMS_CORE_Application/Form1.cs @@ -104,8 +104,10 @@ namespace CMS_CORE_Application if (cmsError.IsError()){ error = true; SetError(Lines, cmsError); } Dictionary dictionary = new Dictionary(); cmsError = N.NC_GetTranslatedPlcMessages("it", ref dictionary); - List axes = new List(); - + List b = new List(); + + N.PLC_ROperatorInputIsNeeded(ref b); + ////////////////////////////////////////// TEST Stopwatch st = new Stopwatch(); sw.Restart(); diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs index 8085be7..7dbeaf1 100644 --- a/CMS_CORE_Library/Demo/Nc_Demo.cs +++ b/CMS_CORE_Library/Demo/Nc_Demo.cs @@ -319,7 +319,6 @@ namespace CMS_CORE_Library.Demo return NO_ERROR; } - // Get NC unit of measure public override CmsError NC_RUnitOfMeasure(ref string unitOfMeasure) { @@ -855,8 +854,7 @@ namespace CMS_CORE_Library.Demo { return NO_ERROR; } - - + public override CmsError PLC_RScadaValue(string memIndex, SCADA_MEM_TYPE memType, ref object value) { string[] index = memIndex.Split('.'); diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs index 1cab62b..26def80 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -830,15 +830,36 @@ namespace CMS_CORE_Library.Fanuc return cmsError; bool[] bits = ByteToBits(val); - uint i = 0; - value = bits - .Select(x => new M155InputIsNeededModel() + uint processId = 1; + foreach(bool bit in bits) + { + if (bit) { - Process = i++, - IsNeeded = x - }) - .ToList(); + string actualLine = ""; + // Read active program line + cmsError = PROC_ReadActiveLine(processId, ref actualLine); + if (cmsError.IsError()) + return cmsError; + // Extract parameters + string[] parameters = ExtractM155ParametersFromNcCodeLine(actualLine); + byte i = 0; + // Populate buttons + Dictionary buttons = parameters.Skip(1)?.ToDictionary(x => i++, x => x); + + // Create output model + value.Add(new M155InputIsNeededModel() + { + Process = processId, + IsNeeded = bit, + Message = parameters[0] ?? "", + Type = parameters.Count() > 1 ? M155_TYPE.MULTIPLE_BUTTONS : M155_TYPE.REAL, // if there aren't buttons is a simple request + Buttons = buttons + }); + } + + processId++; + } return NO_ERROR; } @@ -1196,6 +1217,17 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } + private CmsError PROC_ReadActiveLine(uint processId, ref string line) + { + uint lineL = 1; + uint txtL = 50; + short nReturn = Focas1.cnc_rdprogline2(nLibHandle[(int)processId - 1], 0, 1, line, ref lineL, ref txtL); + if (nReturn != 0) + return GetNcError(nReturn); + + return NO_ERROR; + } + #endregion PROCESS (PATH) High-level data /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index b61e197..2a6a33c 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -3115,7 +3115,7 @@ namespace CMS_CORE_Library.Osai // Read 20 bit of status, read 20 bit of tool life List readInt = new List(); - cmsError = MEM_RWIntegerList(R, 0, TOOL_STATUS_UPDATED_CMD.MemType, TOOL_STATUS_UPDATED_CMD.Address, 2, ref readInt); + cmsError = MEM_RWIntegerList(R, 0, TOOL_STATUS_UPDATED_CMD.MemType, TOOL_STATUS_UPDATED_CMD.Address, 3, ref readInt); if (cmsError.IsError()) return cmsError; @@ -3130,11 +3130,11 @@ namespace CMS_CORE_Library.Osai for (int i = 0; i < bits.Length; i++) { - if (bits[i]) + if (i < 32 && i > 62 && bits[i]) { int bitIndex = i; - if (i >= 32) // 32 status bit and 32 lives bit - bitIndex -= 32; + if (i >= 64) // 32 status bit and 32 lives bit + bitIndex -= 64; // First tool id + actual head index int headIndex = (HEADS_DATA.Address + 2) + (bitIndex * 5); @@ -3160,7 +3160,7 @@ namespace CMS_CORE_Library.Osai else { // Read new life value - int lifeIndex = TOOL_LIFE_UPDATED_DATA.Address + ((i - 32) * 2); // Index = starting address + (headIndex * 2) -> because Osai uses 16bit format + int lifeIndex = TOOL_LIFE_UPDATED_DATA.Address + (bitIndex * 2); // Index = starting address + (headIndex * 2) -> because Osai uses 16bit format cmsError = MEM_RWDWord(R, 0, TOOL_LIFE_UPDATED_DATA.MemType, lifeIndex, ref life); if (cmsError.IsError()) return cmsError; @@ -3171,8 +3171,8 @@ namespace CMS_CORE_Library.Osai // Setup ack/strobe indexes // if i > (32) + 15 then index = next word - strobeByteIndex = i > 47 ? TOOL_LIFE_UPDATED_CMD.Address + 1 : TOOL_LIFE_UPDATED_CMD.Address; - ackByteIndex = i > 47 ? TOOL_LIFE_UPDATED_ACK.Address + 1 : TOOL_LIFE_UPDATED_CMD.Address; + strobeByteIndex = i > 69 ? TOOL_LIFE_UPDATED_CMD.Address + 1 : TOOL_LIFE_UPDATED_CMD.Address; + ackByteIndex = i > 69 ? TOOL_LIFE_UPDATED_ACK.Address + 1 : TOOL_LIFE_UPDATED_CMD.Address; } // Manage ack and strobe diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs index a6ef024..4f3638c 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -1054,7 +1054,7 @@ namespace CMS_CORE_Library.Siemens if (bit) { // Read active program line - cmsError = ReadActiveLine(processId, ref actualLine); + cmsError = PROC_ReadActiveLine(processId, ref actualLine); if (cmsError.IsError()) return cmsError; @@ -1096,6 +1096,8 @@ namespace CMS_CORE_Library.Siemens dataSvc.Write(item); + + return PLC_WStrobe(M155_INPUT_ACK, M155_INPUT_STROBE,(uint)process); } catch (Exception ex) @@ -1120,7 +1122,7 @@ namespace CMS_CORE_Library.Siemens foreach (bool bit in bits) { // Read active program line - cmsError = ReadActiveLine(processId, ref tmpStr); + cmsError = PROC_ReadActiveLine(processId, ref tmpStr); if (cmsError.IsError()) return cmsError; @@ -1196,30 +1198,7 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - - private CmsError ReadActiveLine(uint path, ref string line) - { - try - { - Item item = new Item(); - if (path == 0) - item.Path = "/Channel/ProgramInfo/actBlock[u1,1]"; // Default - else - item.Path = "/Channel/ProgramInfo/actBlock[u" + path + ",1]"; - - DataSvc dataSvc = new DataSvc(); - dataSvc.Read(item); - - line = item.Value.ToString(); - } - catch (Exception ex) - { - return ManageException(ex); - } - - return NO_ERROR; - } - + private CmsError PLC_WStrobe(MEMORY_CELL ackCell, MEMORY_CELL strobeCell, uint id) { CmsError cmsError; @@ -1567,6 +1546,29 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } + + private CmsError PROC_ReadActiveLine(uint processId, ref string line) + { + try + { + Item item = new Item(); + if (processId == 0) + item.Path = "/Channel/ProgramInfo/actBlock[u1,1]"; // Default + else + item.Path = "/Channel/ProgramInfo/actBlock[u" + processId + ",1]"; + + DataSvc dataSvc = new DataSvc(); + dataSvc.Read(item); + + line = item.Value.ToString(); + } + catch (Exception ex) + { + return ManageException(ex); + } + + return NO_ERROR; + } #endregion PROCESS (PATH) High-level data @@ -2264,6 +2266,7 @@ namespace CMS_CORE_Library.Siemens public override CmsError FILES_RGetFileList(string path, ref List files) { + string[] rootFolders = { "WKS.DIR", "MPF.DIR", "SPF.DIR" }; try { string tmpPath = FormatPath(path); @@ -2277,18 +2280,46 @@ namespace CMS_CORE_Library.Siemens // Go through the array of file nodes foreach (Node element in nodeArray) { - if (element.AccessRights.List == AccessLevel.KEY_0) + PreviewFileModel file = new PreviewFileModel(); + if(path == "\\\\") { - var file = new PreviewFileModel() + if (rootFolders.Contains(element.Name)) + { + file = new PreviewFileModel() + { + Path = path + "\\" + element.Name, + IsDirectory = element.IsDirNode, + Name = element.Name, + AbsolutePath = element.LogicalPath + }; + files.Add(file); + } + } + else + { + file = new PreviewFileModel() { Path = path + "\\" + element.Name, IsDirectory = element.IsDirNode, Name = element.Name, AbsolutePath = element.LogicalPath }; - files.Add(file); } + + // ACCESS LEVEL CHECK (REMOVED TEMPORARILY) + //if (element.AccessRights.List == AccessLevel.KEY_0) + //{ + // var file = new PreviewFileModel() + // { + // Path = path + "\\" + element.Name, + // IsDirectory = element.IsDirNode, + // Name = element.Name, + // AbsolutePath = element.LogicalPath + // }; + + // files.Add(file); + //} } } catch (Exception ex)