diff --git a/CMS_CORE_Application/Form1.cs b/CMS_CORE_Application/Form1.cs index a7cc625..84f8b2e 100644 --- a/CMS_CORE_Application/Form1.cs +++ b/CMS_CORE_Application/Form1.cs @@ -136,23 +136,16 @@ namespace CMS_CORE_Application Stopwatch st = new Stopwatch(); sw.Restart(); - //cmsError = N.PROC_RActiveAlarms(1, ref ncAlarms); - //if (cmsError.IsError()) - //{ - // error = true; - // SetError(Lines, cmsError); - //} - MessageBox.Show("START"); - cmsError = N.AXES_RAxesNames(1, ref axes); - - TXTAlm.Text = "1\n" + String.Join(" ", axes.Select(x => x.Name.ToString() + "-" + x.Id.ToString() + "\n")); - - axes.Clear(); - cmsError = N.AXES_RAxesNames(2, ref axes); - - TXTMsg.Text = "2\n" + String.Join(" ", axes.Select(x => x.Name.ToString() + "-" + x.Id.ToString() + "\n")); - - MessageBox.Show("STOP"); + cmsError = N.PROC_RActiveAlarms(1, ref ncAlarms); + if (cmsError.IsError()) + { + error = true; + SetError(Lines, cmsError); + } + ActiveProgramDataModel active = new ActiveProgramDataModel(); + cmsError = N.FILES_RActiveProgramData(1, ref active); + InfoFile file = new InfoFile(); + cmsError = N.FILES_RGetFileInfo(active.Path, ref file); Console.WriteLine("ICON" + sw.ElapsedMilliseconds); sw.Stop(); @@ -231,8 +224,8 @@ namespace CMS_CORE_Application { TXTip.Enabled = true; TXTport.Enabled = true; - TXTip.Text = "192.168.139.1"; - // TXTip.Text = "10.69.36.33"; + // TXTip.Text = "192.168.139.1"; + TXTip.Text = "10.69.36.33"; TXTport.Text = "8193"; } else if (NcCombo.SelectedItem.ToString().Equals("Osai")) diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs index 132bcd9..80e819a 100644 --- a/CMS_CORE_Library/Demo/Nc_Demo.cs +++ b/CMS_CORE_Library/Demo/Nc_Demo.cs @@ -325,6 +325,11 @@ namespace CMS_CORE_Library.Demo #region PLC High-level data + public override CmsError PLC_RWManageWatchdog() + { + return NO_ERROR; + } + public override CmsError PLC_RActiveMessages(ref List alarms) { alarms.Clear(); diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs index 55d2bce..26cab4b 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -448,7 +448,34 @@ namespace CMS_CORE_Library.Fanuc #region PLC High-level data - //Get the PMC Messages + public override CmsError PLC_RWManageWatchdog() + { + bool plcWatchdog = false; + CmsError cmsError = MEM_RWBoolean(R, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + + if (plcWatchdog) + { + plcWatchdog = false; + cmsError = MEM_RWBoolean(W, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + + + cmsError = MEM_RWBoolean(R, 0, ACTIVE_WATCHDOG.MemType, ACTIVE_WATCHDOG.Address, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + } + else + { + return PLC_NOT_RUNNING_ERROR; + } + + return NO_ERROR; + } + + // Get PMC Messages public override CmsError PLC_RActiveMessages(ref List alarms) { alarms.Clear(); @@ -897,25 +924,25 @@ namespace CMS_CORE_Library.Fanuc // Add Alarm in List alarms.Clear(); if (count >= 1 && Messg.msg1.type != 15) - AddAlarmToList(Messg.msg1.alm_no, Messg.msg1.alm_msg.Substring(0, Messg.msg1.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList( Messg.msg1.alm_no, Messg.msg1.axis, Messg.msg1.alm_msg.Substring(0, Messg.msg1.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 2 && Messg.msg2.type != 15) - AddAlarmToList(Messg.msg2.alm_no, Messg.msg2.alm_msg.Substring(0, Messg.msg2.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg2.alm_no, Messg.msg2.axis, Messg.msg2.alm_msg.Substring(0, Messg.msg2.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 3 && Messg.msg3.type != 15) - AddAlarmToList(Messg.msg3.alm_no, Messg.msg3.alm_msg.Substring(0, Messg.msg3.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg3.alm_no, Messg.msg3.axis, Messg.msg3.alm_msg.Substring(0, Messg.msg3.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 4 && Messg.msg4.type != 15) - AddAlarmToList(Messg.msg4.alm_no, Messg.msg4.alm_msg.Substring(0, Messg.msg4.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg4.alm_no, Messg.msg4.axis, Messg.msg4.alm_msg.Substring(0, Messg.msg4.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 5 && Messg.msg5.type != 15) - AddAlarmToList(Messg.msg5.alm_no, Messg.msg5.alm_msg.Substring(0, Messg.msg5.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg5.alm_no, Messg.msg5.axis, Messg.msg5.alm_msg.Substring(0, Messg.msg5.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 6 && Messg.msg6.type != 15) - AddAlarmToList(Messg.msg6.alm_no, Messg.msg6.alm_msg.Substring(0, Messg.msg6.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg6.alm_no, Messg.msg6.axis, Messg.msg6.alm_msg.Substring(0, Messg.msg6.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 7 && Messg.msg7.type != 15) - AddAlarmToList(Messg.msg7.alm_no, Messg.msg7.alm_msg.Substring(0, Messg.msg7.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg7.alm_no, Messg.msg7.axis, Messg.msg7.alm_msg.Substring(0, Messg.msg7.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 8 && Messg.msg8.type != 15) - AddAlarmToList(Messg.msg8.alm_no, Messg.msg8.alm_msg.Substring(0, Messg.msg8.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg8.alm_no, Messg.msg8.axis, Messg.msg8.alm_msg.Substring(0, Messg.msg8.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 9 && Messg.msg9.type != 15) - AddAlarmToList(Messg.msg9.alm_no, Messg.msg9.alm_msg.Substring(0, Messg.msg9.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg9.alm_no, Messg.msg9.axis, Messg.msg9.alm_msg.Substring(0, Messg.msg9.msg_len), pathNumber, DateTime.Now, alarms); if (count >= 10 && Messg.msg10.type != 15) - AddAlarmToList(Messg.msg10.alm_no, Messg.msg10.alm_msg.Substring(0, Messg.msg10.msg_len), pathNumber, DateTime.Now, alarms); + AddAlarmToList(Messg.msg10.alm_no, Messg.msg10.axis, Messg.msg10.alm_msg.Substring(0, Messg.msg10.msg_len), pathNumber, DateTime.Now, alarms); return NO_ERROR; } @@ -1690,7 +1717,7 @@ namespace CMS_CORE_Library.Fanuc ActualEndIndex = ActualStartIndex + FANUC_MAXNVAR - 1; // Set the variables-numbers to iterate - ActualNumber = (ActualEndIndex - ActualStartIndex + 1); + ActualNumber = (ActualEndIndex - ActualStartIndex + 1); // Set the variables-number Fanuc FanucNumber = ActualNumber + 8; @@ -1838,7 +1865,7 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } - + // Write a Short-Value-List inside the NC. In writing-mode the field "Number" is not required public override CmsError MEM_RWShortList(bool bWrite, int Process, MEMORY_TYPE MemType, int MemIndex, int Number, ref List Value) { @@ -2186,7 +2213,31 @@ namespace CMS_CORE_Library.Fanuc public override CmsError FILES_RGetFileInfo(string path, ref InfoFile fileInfo) { + IDBPDFADIR funcInput = new IDBPDFADIR(); + ODBPDFADIR fileData = new ODBPDFADIR(); + ODBPDFNFIL fil = new ODBPDFNFIL(); + + // Setup input data + funcInput.path = path; + funcInput.type = 1; + funcInput.size_kind = 1; + funcInput.dummy = 0; + + short maxDir = 1; + funcInput.req_num = 1; // Update file index + // Read file data + short nReturn = Focas1.cnc_rdpdf_subdirn(nLibHandle[0], path, fil); + if (nReturn != 0) + return GetNcError(nReturn); + + // Add to list read data + fileInfo = new InfoFile() + { + AbsolutePath = path + fileData.d_f, + Name = fileData.d_f, + Content = new List() + }; return NO_ERROR; } @@ -2461,7 +2512,7 @@ namespace CMS_CORE_Library.Fanuc Id = x.Id, Type = ConvertToSiemensMagazineType(x.Type), Name = x.Id.ToString(), - LoadingIsActive = magazineStatus[x.Id], + LoadingIsActive = true,// magazineStatus[x.Id], MaxPositions = x.MaxPositions }).ToList(); @@ -2694,12 +2745,6 @@ namespace CMS_CORE_Library.Fanuc public override CmsError TOOLS_WOffset(short offsetId, OffsetModel offset) { - List offsets = new List() - { - new NcToolModel(){FamilyId = 88, OffsetId1 = 0, OffsetId2 = 0, OffsetId3 = 0, OffsetLength = 0, ResidualLife = 5, ResidualRevive = 2, ShankId = 66, Status = 1, ToolId = 33} - }; - TOOLS_WObjectInMemory(offsets, 12000, 1); - if (offsetId > MAX_OFFSET_NUM) return INCORRECT_PARAMETERS_ERROR; @@ -2729,17 +2774,79 @@ namespace CMS_CORE_Library.Fanuc public override CmsError TOOLS_WStartEditData() { + //Check if the NC is Connected + CmsError cmsError = CheckConnection(); + if (cmsError.IsError()) + return cmsError; + + ushort status = 0; + // Read tool manager status + cmsError = MEM_RWWord(R, 0, TOOL_MANAGER_STATUS.MemType, TOOL_MANAGER_STATUS.Address, ref status); + if (cmsError.IsError()) + return cmsError; + + bool[] bits = new bool[16]; + + // Convert int into to true/false array + bits = IntToBits(status); + // 1 = Non-editable tables, 2 = reading in progess + if (!bits[1] || bits[2]) + return MAGAZINE_BUSY_ERROR; + + // Write busy tool manager status + bool bitToWrite = true; + cmsError = MEM_RWBoolean(W, 0, TOOL_MANAGER_COMMAND.MemType, TOOL_MANAGER_COMMAND.Address, 1, ref bitToWrite); + if (cmsError.IsError()) + return cmsError; + + //cmsError = CreateBackup(); + //if (cmsError.IsError()) + // return cmsError; + return NO_ERROR; } public override CmsError TOOLS_WStopEditData() { + //Check if the NC is Connected + CmsError cmsError = CheckConnection(); + if (cmsError.IsError()) + return cmsError; + + //cmsError = DeleteBackup(); + //if (cmsError.IsError()) + // return cmsError; + + // Release tool manager status + bool bitToWrite = false; + cmsError = MEM_RWBoolean(W, 0, TOOL_MANAGER_COMMAND.MemType, TOOL_MANAGER_COMMAND.Address, 1, ref bitToWrite); + if (cmsError.IsError()) + return cmsError; + + //// Set reload command + //cmsError = PLC_WStrobe(TOOL_MANAGER_STATUS, TOOL_MANAGER_COMMAND, 1); + //if (cmsError.IsError()) + // return cmsError; + return NO_ERROR; } - public override CmsError TOOLS_WUpdateTools(List list) + public override CmsError TOOLS_WUpdateTools(List toolsList) { - return NO_ERROR; + foreach (NcToolModel tool in toolsList) + { + // Get the offset of the id in the memory + CmsError cmsError = TOOLS_RPositionId(tool.ToolId, TOOL_TABLE_INDEX.Address, out int offset); + if (cmsError.IsError()) + return cmsError; + + // Write object in memory + cmsError = TOOLS_WObjectInMemory(tool, TOOL_TABLE_INDEX.Address, offset); + if (cmsError.IsError()) + return cmsError; + } + + return NO_ERROR; } public override CmsError TOOLS_WUpdateFamilies(List familyList) @@ -2786,7 +2893,7 @@ namespace CMS_CORE_Library.Fanuc 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()) @@ -2798,11 +2905,58 @@ namespace CMS_CORE_Library.Fanuc public override CmsError TOOLS_WStartEditTooling(int magazineId) { + // Check if the NC is Connected + CmsError cmsError = CheckConnection(); + if (cmsError.IsError()) + return cmsError; + + // Read tool manager status + bool status = false; + cmsError = MEM_RWBoolean(R, 0, MAGAZINES_ENABLED_CMD.MemType, MAGAZINES_ENABLED_CMD.Address, magazineId - 1, ref status); + if (cmsError.IsError()) + return cmsError; + + // If magazine is busy + if (!status) + return MAGAZINE_BUSY_ERROR; + + // Write busy + bool bitToWrite = true; + cmsError = MEM_RWBoolean(W, 0, MAGAZINES_TOOLING_CMD.MemType, MAGAZINES_TOOLING_CMD.Address, magazineId - 1, ref bitToWrite); + if (cmsError.IsError()) + return cmsError; + + //// Create backup files + //cmsError = CreateBackup(); + //if (cmsError.IsError()) + // return cmsError; + return NO_ERROR; } public override CmsError TOOLS_WStopEditTooling(int magazineId) { + // Check if the NC is Connected + CmsError cmsError = CheckConnection(); + if (cmsError.IsError()) + return cmsError; + + // Set magazine as free + bool write = false; + cmsError = MEM_RWBoolean(W, 0, MAGAZINES_TOOLING_CMD.MemType, MAGAZINES_TOOLING_CMD.Address, magazineId - 1, ref write); + if (cmsError.IsError()) + return cmsError; + + //// Delete backup files + //cmsError = DeleteBackup(); + //if (cmsError.IsError()) + // return cmsError; + + // Set reload command + cmsError = PLC_WStrobe(TOOL_MANAGER_STATUS, TOOL_MANAGER_COMMAND, 1); + if (cmsError.IsError()) + return cmsError; + return NO_ERROR; } @@ -2823,16 +2977,34 @@ namespace CMS_CORE_Library.Fanuc public override CmsError TOOLS_RMagazineStatus(ref Dictionary magazineStatus) { + //Check if the NC is Connected + CmsError cmsError = CheckConnection(); + if (cmsError.IsError()) + return cmsError; + + // Read tool manager status + int status = 0; + cmsError = MEM_RWInteger(R, 0, MAGAZINES_ENABLED_CMD.MemType, MAGAZINES_ENABLED_CMD.Address, ref status); + if (cmsError.IsError()) + return cmsError; + + bool[] bits = IntToBits(status); + + for (int i = 0; i < bits.Length; i++) + { + magazineStatus.Add(i + 1, bits[i]); + } + return NO_ERROR; } - + private CmsError TOOLS_RPositionId(int id, int startIndex, out int offset) { offset = 0; // Read 300 bytes List ints = new List(); - CmsError cmsError = MEM_RWIntegerList(false, 0, Nc.MEMORY_TYPE.Fanuc_R, startIndex, 150, ref ints); + CmsError cmsError = MEM_RWIntegerList(false, 0, Nc.MEMORY_TYPE.Fanuc_D, startIndex, 150, ref ints); if (cmsError.IsError()) return cmsError; @@ -2842,6 +3014,15 @@ namespace CMS_CORE_Library.Fanuc // Find id offset = Array .FindIndex(bytes, x => x == id); + + // if not found, get last number + if(offset == -1) + { + offset = 0; + for (int i = 0; i < bytes.Count(); i++) + if (bytes[i] != 0) + offset = i + 1; + } return NO_ERROR; } @@ -2867,7 +3048,7 @@ namespace CMS_CORE_Library.Fanuc case 1: { byte b = Convert.ToByte(property.GetValue(item)); - cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, 0, ref b); + cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Fanuc_D, currentFieldIndex, 0, ref b); if (cmsError.IsError()) return cmsError; } @@ -2875,7 +3056,7 @@ namespace CMS_CORE_Library.Fanuc case 2: { ushort u = Convert.ToUInt16(property.GetValue(item)); - cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref u); + cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Fanuc_D, currentFieldIndex, ref u); if (cmsError.IsError()) return cmsError; } @@ -2883,7 +3064,7 @@ namespace CMS_CORE_Library.Fanuc case 4: { uint w = Convert.ToUInt32(property.GetValue(item)); - cmsError = MEM_RWDWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref w); + cmsError = MEM_RWDWord(W, 0, MEMORY_TYPE.Fanuc_D, currentFieldIndex, ref w); if (cmsError.IsError()) return cmsError; } @@ -3486,13 +3667,10 @@ namespace CMS_CORE_Library.Fanuc { continue; } - break; - default: { return GetNcError(nReturn); } - break; } } while ((nReturn == (short)Focas1.focas_ret.EW_OK || nReturn == (short)Focas1.focas_ret.EW_BUFFER) && !fileEnded); @@ -3506,7 +3684,7 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } - //Manage the Exception Launch + // Manage the Exception Launch private CmsError ManageException(Exception ex) { Connected = false; @@ -3566,6 +3744,9 @@ namespace CMS_CORE_Library.Fanuc internal static class MEMORY_ADDRESS { internal const int STARTING_ADDRESS = 50000; + + internal static MEMORY_CELL NC_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS, 1); + internal static MEMORY_CELL ACTIVE_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, STARTING_ADDRESS + 2, 1); internal static MEMORY_CELL FUNCTION_ACCESS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 50005, 8); internal static MEMORY_CELL PRE_POST_POWER_ON = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52573, 2); @@ -3608,17 +3789,17 @@ namespace CMS_CORE_Library.Fanuc internal static MEMORY_CELL HEADS_STROBE_DECREMENT = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52927, 4); // Tool manager areas - internal static MEMORY_CELL TOOL_MANAGER_COMMAND = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13000, 2); + internal static MEMORY_CELL TOOL_MANAGER_COMMAND = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53000, 2); - internal static MEMORY_CELL TOOL_MANAGER_STATUS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13001, 2); + internal static MEMORY_CELL TOOL_MANAGER_STATUS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53002, 2); - internal static MEMORY_CELL TOOL_MANAGER_OPTIONS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13002, 2); + internal static MEMORY_CELL TOOL_MANAGER_OPTIONS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53004, 2); - internal static MEMORY_CELL MAGAZINE_TYPES = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13062, 4); - internal static MEMORY_CELL MAGAZINE_POSITIONS_NUMBER = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13072, 4); + internal static MEMORY_CELL MAGAZINE_TYPES = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53062, 4); + internal static MEMORY_CELL MAGAZINE_POSITIONS_NUMBER = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53082, 4); - 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 MAGAZINES_ENABLED_CMD = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53102, 2); + internal static MEMORY_CELL MAGAZINES_TOOLING_CMD = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 53106, 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); @@ -3641,83 +3822,4 @@ namespace CMS_CORE_Library.Fanuc internal static MEMORY_CELL OPERATOR_INPUT_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 1); internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 1); } - - //internal static class MEMORY_ADDRESS - //{ - // internal const int STARTING_ADDRESS = 50000; - // internal static MEMORY_CELL FUNCTION_ACCESS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 50005, 8); - - // internal static MEMORY_CELL PRE_POST_POWER_ON = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12000, 2); - // internal static MEMORY_CELL PRE_POST_POWER_ON_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12002, 2); - // internal static MEMORY_CELL PRE_POST_POWER_ON_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12004, 2); - // internal static MEMORY_CELL PRE_POST_POWER_ON_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12006, 2); - - // internal static MEMORY_CELL AXIS_RESET_PROCEDURE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52607, 7, 1); - - // internal static MEMORY_CELL PROCESS_STATUS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12000, 0, 24); - // internal static MEMORY_CELL SELECTED_PROCESS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12000, 2, 24); - // internal static MEMORY_CELL SELECT_PROCESS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52605, 1); - - // internal static MEMORY_CELL COUNTERS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 0, 40); - - // internal static MEMORY_CELL SELECTED_AXIS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52624, 0, 1); - // internal static MEMORY_CELL SELECT_AXIS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52625, 1, 1); - - // internal static MEMORY_CELL NC_SOFTKEYS_VALUE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52608, 0, 4); - // internal static MEMORY_CELL NC_SOFTKEYS_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52612, 0, 4); - // internal static MEMORY_CELL NC_SOFT_KEYS_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52616, 4); - // internal static MEMORY_CELL NC_SOFT_KEYS_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52620, 4); - - // internal static MEMORY_CELL USER_SOFTKEYS_VALUE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52626, 0, 16); - // internal static MEMORY_CELL USER_SOFTKEYS_CLICKABLE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52642, 0, 16); - // internal static MEMORY_CELL USER_SOFT_KEYS_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52658, 16); - // internal static MEMORY_CELL USER_SOFT_KEYS_CLICKED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52674, 16); - - // internal static MEMORY_CELL ALARMS_STATUS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12000, 128); - // internal static MEMORY_CELL ALARMS_DATA = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 12128, 1024); - - // internal static MEMORY_CELL ALARM_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 2152, 128); - // internal static MEMORY_CELL ALARM_RESTORATION_STROBE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 2280, 128); - // internal static MEMORY_CELL ALARM_REFRESH_STROBE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 2408, 128); - - // internal static MEMORY_CELL HEADS_DATA = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52690, 240); - - // internal static MEMORY_CELL HEADS_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52921, 4); - // internal static MEMORY_CELL HEADS_STROBE_INCREMENT = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52924, 4); - // internal static MEMORY_CELL HEADS_STROBE_DECREMENT = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 52927, 4); - - // // Tool manager areas - // internal static MEMORY_CELL TOOL_MANAGER_COMMAND = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13000, 2); - - // internal static MEMORY_CELL TOOL_MANAGER_STATUS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13001, 2); - - // internal static MEMORY_CELL TOOL_MANAGER_OPTIONS = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13002, 2); - - // internal static MEMORY_CELL MAGAZINE_TYPES = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13062, 4); - // internal static MEMORY_CELL MAGAZINE_POSITIONS_NUMBER = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 13072, 4); - - // 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.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.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); - - // internal static MEMORY_CELL COUNTERS_DATA = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 64); - // internal static MEMORY_CELL COUNTERS_ACK = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 2); - // internal static MEMORY_CELL COUNTERS_STROBE = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 2); - - // internal static MEMORY_CELL OPERATOR_INPUT_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 1); - // internal static MEMORY_CELL MTCONNECT_DATA_NEEDED = new MEMORY_CELL(MEMORY_TYPE.Fanuc_R, 0, 1); - //} } \ No newline at end of file diff --git a/CMS_CORE_Library/Models/CmsError.cs b/CMS_CORE_Library/Models/CmsError.cs index 6df4c9c..5e41a04 100644 --- a/CMS_CORE_Library/Models/CmsError.cs +++ b/CMS_CORE_Library/Models/CmsError.cs @@ -54,6 +54,7 @@ MAGAZINE_OCCUPIED = 19, TOOL_IS_MOUNTED = 20, TOOL_AND_POSITION_NOT_MATCHING = 21, - FILE_NOT_FOUND = 22 + FILE_NOT_FOUND = 22, + PLC_NOT_RUNNING = 23 } } \ No newline at end of file diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs index 03c7464..0340602 100644 --- a/CMS_CORE_Library/Models/DataStructures.cs +++ b/CMS_CORE_Library/Models/DataStructures.cs @@ -361,7 +361,8 @@ namespace CMS_CORE_Library.Models public static CmsError MAGAZINE_BUSY_ERROR = new CmsError(CMS_ERROR_CODES.MAGAZINE_OCCUPIED, "error_magazine_occupied"); public static CmsError TOOL_IS_MOUNTED_ERROR = new CmsError(CMS_ERROR_CODES.TOOL_IS_MOUNTED, "error_tool_mounted"); public static CmsError TOOL_AND_POSITION_NOT_MATCHING_ERROR = new CmsError(CMS_ERROR_CODES.TOOL_IS_MOUNTED, "error_tool_and_position_not_matching"); - public static CmsError FILE_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.FILE_NOT_FOUND, "error_file_not_found"); + public static CmsError FILE_NOT_FOUND_ERROR = new CmsError(CMS_ERROR_CODES.FILE_NOT_FOUND, "error_file_not_found"); + public static CmsError PLC_NOT_RUNNING_ERROR = new CmsError(CMS_ERROR_CODES.PLC_NOT_RUNNING, "error_plc_not_running"); #endregion Cms Errors Codes diff --git a/CMS_CORE_Library/Models/NcToolModel.cs b/CMS_CORE_Library/Models/NcToolModel.cs index b82ca0e..8e26be6 100644 --- a/CMS_CORE_Library/Models/NcToolModel.cs +++ b/CMS_CORE_Library/Models/NcToolModel.cs @@ -30,9 +30,9 @@ namespace CMS_CORE_Library.Models public class NcShankModel { - public int ShankId { get; set; } + public ushort ShankId { get; set; } - public int Balluf { get; set; } + public ushort Balluf { get; set; } public byte MagazineId { get; set; } @@ -43,50 +43,31 @@ namespace CMS_CORE_Library.Models public class NcToolModel { - [FanucOrder(1)] - [OsaiOrder(1)] public short ToolId { get; set; } - [FanucOrder(2)] - [OsaiOrder(2)] public short FamilyId { get; set; } - [FanucOrder(3)] - [OsaiOrder(3)] public short ShankId { get; set; } - [FanucOrder(4)] - [OsaiOrder(4)] public byte Status { get; set; } - [FanucOrder(5)] - [OsaiOrder(5)] public short OffsetLength { get; set; } - [FanucOrder(6)] - [OsaiOrder(6)] public int ResidualLife { get; set; } - - [FanucOrder(7)] - [OsaiOrder(7)] - public uint ResidualRevive { get; set; } - [FanucOrder(8)] - [OsaiOrder(8)] public ushort OffsetId1 { get; set; } - [FanucOrder(9)] - [OsaiOrder(9)] public ushort OffsetId2 { get; set; } - [FanucOrder(10)] - [OsaiOrder(10)] public ushort OffsetId3 { get; set; } + + public uint ResidualRevive { get; set; } + } public class NcFamilyModel { - public int FamilyId { get; set; } + public ushort FamilyId { get; set; } public byte ToolType { get; set; } diff --git a/CMS_CORE_Library/Nc.cs b/CMS_CORE_Library/Nc.cs index 86b697c..0ec5303 100644 --- a/CMS_CORE_Library/Nc.cs +++ b/CMS_CORE_Library/Nc.cs @@ -362,6 +362,8 @@ namespace CMS_CORE_Library #region PLC High-level data (to override) + public abstract CmsError PLC_RWManageWatchdog(); + /** * * Read PMC active Messages @@ -1837,11 +1839,12 @@ namespace CMS_CORE_Library }); } - internal void AddAlarmToList(int id, string message, int process, DateTime dateTime, List alarms) + internal void AddAlarmToList(int id, short axisId, string message, int process, DateTime dateTime, List alarms) { + alarms.Add(new AlarmModel() { - Id = (uint)id, + Id = Convert.ToUInt32((id & 0xffff) | (axisId << 24)), Message = message, IsWarning = false, Process = process, diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index a63ceea..4e05820 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -415,6 +415,31 @@ namespace CMS_CORE_Library.Osai #region PLC High-level data //Get the PLC Active Alarms + + public override CmsError PLC_RWManageWatchdog() + { + bool plcWatchdog = false; + CmsError cmsError = MEM_RWBoolean(R, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + + if (plcWatchdog) + { + plcWatchdog = false; + cmsError = MEM_RWBoolean(W, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + + + cmsError = MEM_RWBoolean(R, 0, ACTIVE_WATCHDOG.MemType, ACTIVE_WATCHDOG.Address, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + } + + return NO_ERROR; + } + + public override CmsError PLC_RActiveMessages(ref List alarms) { try @@ -2600,8 +2625,8 @@ namespace CMS_CORE_Library.Osai return MAGAZINE_BUSY_ERROR; // Write busy tool manager status - bool write = true; - cmsError = MEM_RWBoolean(W, 0, TOOL_MANAGER_COMMAND.MemType, TOOL_MANAGER_COMMAND.Address, 1, ref write); + bool bitToWrite = true; + cmsError = MEM_RWBoolean(W, 0, TOOL_MANAGER_COMMAND.MemType, TOOL_MANAGER_COMMAND.Address, 1, ref bitToWrite); if (cmsError.IsError()) return cmsError; @@ -2624,8 +2649,8 @@ namespace CMS_CORE_Library.Osai return cmsError; // Release tool manager status - bool write = false; - cmsError = MEM_RWBoolean(W, 0, TOOL_MANAGER_COMMAND.MemType, TOOL_MANAGER_COMMAND.Address, 1, ref write); + bool bitToWrite = false; + cmsError = MEM_RWBoolean(W, 0, TOOL_MANAGER_COMMAND.MemType, TOOL_MANAGER_COMMAND.Address, 1, ref bitToWrite); if (cmsError.IsError()) return cmsError; @@ -2677,8 +2702,8 @@ namespace CMS_CORE_Library.Osai return MAGAZINE_BUSY_ERROR; // Write busy - bool write = true; - cmsError = MEM_RWBoolean(W, 0, MAGAZINES_TOOLING_CMD.MemType, MAGAZINES_TOOLING_CMD.Address, magazineId - 1, ref write); + bool bitToWrite = true; + cmsError = MEM_RWBoolean(W, 0, MAGAZINES_TOOLING_CMD.MemType, MAGAZINES_TOOLING_CMD.Address, magazineId - 1, ref bitToWrite); if (cmsError.IsError()) return cmsError; @@ -2692,7 +2717,7 @@ namespace CMS_CORE_Library.Osai public override CmsError TOOLS_WStopEditTooling(int magazineId) { - //Check if the NC is Connected + // Check if the NC is Connected CmsError cmsError = CheckConnection(); if (cmsError.IsError()) return cmsError; @@ -3077,8 +3102,8 @@ namespace CMS_CORE_Library.Osai .Select(x => x.Split(';')) .Select(x => new NcShankModel { - ShankId = int.Parse(x[0]), - Balluf = int.Parse(x[1]), + ShankId = ushort.Parse(x[0]), + Balluf = ushort.Parse(x[1]), MagazineId = byte.Parse(x[2]), PositionId = byte.Parse(x[3]), MagazinePositionType = byte.Parse(x[4]) @@ -3749,6 +3774,10 @@ namespace CMS_CORE_Library.Osai internal static class MEMORY_ADDRESS { internal const int STARTING_ADDRESS = 12000; + + internal static MEMORY_CELL NC_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, STARTING_ADDRESS, 1); + internal static MEMORY_CELL ACTIVE_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, STARTING_ADDRESS + 2, 1); + internal static MEMORY_CELL MATR_MACCH_OSAI = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 3403, 0, 1); internal static MEMORY_CELL FUNCTION_ACCESS = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, 12003, 8); diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs index ea57468..5948c9d 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -76,7 +76,7 @@ namespace CMS_CORE_Library.Siemens // Tool table listeners private static ToolMngmntSvc SiemensToolSvc = null; - + private static DataSvc MagazinePositionSvc = null; private static DataSvc MagazineActionsSvc = null; @@ -498,13 +498,13 @@ namespace CMS_CORE_Library.Siemens // Set the Nc Active Page of the NC public override CmsError NC_SetScreenVisible(SCREEN_PAGE screen) { - Console.WriteLine(Infrastructure.CurrentActiveArea); string area = ConvertStepToSiemensScreen(screen); if (string.IsNullOrEmpty(area)) return INCORRECT_PARAMETERS_ERROR; if (Infrastructure.CurrentActiveArea != area) Infrastructure.SwitchToArea(area); + return NO_ERROR; } @@ -514,6 +514,29 @@ namespace CMS_CORE_Library.Siemens #region PLC High-level data + public override CmsError PLC_RWManageWatchdog() + { + bool plcWatchdog = false; + CmsError cmsError = MEM_RWBoolean(R, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, NC_WATCHDOG.SubAddress, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + + if (plcWatchdog) + { + plcWatchdog = false; + cmsError = MEM_RWBoolean(W, 0, NC_WATCHDOG.MemType, NC_WATCHDOG.Address, NC_WATCHDOG.SubAddress, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + + plcWatchdog = true; + cmsError = MEM_RWBoolean(R, 0, ACTIVE_WATCHDOG.MemType, ACTIVE_WATCHDOG.Address, ACTIVE_WATCHDOG.SubAddress, 1, ref plcWatchdog); + if (cmsError.IsError()) + return cmsError; + } + + return NO_ERROR; + } + public override CmsError PLC_RActiveMessages(ref List alarms) { bool[] statusBits; @@ -1433,6 +1456,7 @@ namespace CMS_CORE_Library.Siemens { Dictionary axes = new Dictionary(); List axesConf = new List(); + CmsError cmsError = AXES_RAxesNames(channel, ref axesConf); foreach (var conf in axesConf) @@ -5235,6 +5259,9 @@ namespace CMS_CORE_Library.Siemens { internal const int TABLE = 258; + internal static MEMORY_CELL NC_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 0, 1); + internal static MEMORY_CELL ACTIVE_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2, 1); + internal static MEMORY_CELL FUNCTION_ACCESS = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 6, 8); internal static MEMORY_CELL PRE_POST_POWER_ON = new MEMORY_CELL(MEMORY_TYPE.Siemens_DB, TABLE, 2574, 2);