diff --git a/CMS_CORE_Application/Form1.cs b/CMS_CORE_Application/Form1.cs index d27a8fd..e28ebdc 100644 --- a/CMS_CORE_Application/Form1.cs +++ b/CMS_CORE_Application/Form1.cs @@ -7,6 +7,7 @@ using CMS_CORE_Library.Siemens; using System; using System.Collections.Generic; using System.Diagnostics; +using System.Globalization; using System.Linq; using System.Threading; using System.Windows.Forms; @@ -132,8 +133,18 @@ namespace CMS_CORE_Application List ax = new List(); cmsError = N.AXES_RAxesNames(1, ref ax); + ICollection info = new List(); + cmsError = N.NC_GetAvailableLanguages(ref info); + + cmsError = N.NC_WLanguage(new CultureInfo("it")); + if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); } + + + cmsError = N.NC_WLanguage(new CultureInfo("en")); + if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); } + sw.Stop(); - Console.WriteLine(sw.ElapsedMilliseconds); + Console.WriteLine(sw.ElapsedMilliseconds); ////////////////////////////////////////////////////////////// END TEST if (!this.IsDisposed && this.InvokeRequired) @@ -202,7 +213,7 @@ namespace CMS_CORE_Application if (NCType == "Osai") return new Nc_Osai(NCIp, NCPort, 500); if (NCType == "Fanuc") - return new Nc_Fanuc(NCIp, NCPort, 500); + return new Nc_Fanuc(NCIp, NCPort, 2000); return null; } diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs index 6c6e127..d4f1bc4 100644 --- a/CMS_CORE_Library/Demo/Nc_Demo.cs +++ b/CMS_CORE_Library/Demo/Nc_Demo.cs @@ -102,6 +102,11 @@ namespace CMS_CORE_Library.Demo } } + public override CmsError NC_GetAvailableLanguages(ref ICollection languages) + { + return NO_ERROR; + } + #endregion Contructor & global methods /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs index 41214fe..e71b481 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -205,6 +205,31 @@ namespace CMS_CORE_Library.Fanuc } } + public override CmsError NC_GetAvailableLanguages(ref ICollection languages) + { + try + { + foreach(string file in Directory.GetFiles(PLC_MESSAGE_PATH)) + { + string fileName = Path.GetFileNameWithoutExtension(file); + + var lang = CultureInfo + .GetCultures(CultureTypes.NeutralCultures) + .Where(ci => string.Equals(ci.ThreeLetterISOLanguageName, fileName.Split('_')[1], StringComparison.OrdinalIgnoreCase)) + .FirstOrDefault(); + + if(lang != null) + languages.Add(lang); + } + } + catch (Exception ex) + { + return ManageException(ex); + } + + return NO_ERROR; + } + #endregion Contructor & global methods /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -227,7 +252,7 @@ namespace CMS_CORE_Library.Fanuc // Set the NC Language public override CmsError NC_WLanguage(CultureInfo Language) { - // set but 7 to TRUE + // set bit 7 to TRUE byte langToWrite = (byte)(ConvertToNCLanguage(Language, out bool isSpecial) | 128); // write the byte @@ -235,12 +260,30 @@ namespace CMS_CORE_Library.Fanuc if (cmsError.IsError()) return cmsError; + // Set reset bit + bool b = false; + int n = 50; + do + { + // Wait before read + Thread.Sleep(100); + + cmsError = MEM_RWBoolean(R, 0, MEMORY_TYPE.Fanuc_F, 545, 0, ref b); + // Decrement + n--; + } while (!b && n > 0); + + b = false; + cmsError = MEM_RWBoolean(W, 0, PARAM_LING_FANUC_W.MemType, PARAM_LING_FANUC_W.Address, 7, ref b); + if (cmsError.IsError()) + return cmsError; + // Write if the selected language is special cmsError = MEM_RWBoolean(W, 0, SPECIAL_LANGUAGE_BIT.MemType, SPECIAL_LANGUAGE_BIT.Address, SPECIAL_LANGUAGE_BIT.SubAddress, ref isSpecial); if (cmsError.IsError()) return cmsError; - return NO_ERROR; + } // Get the NC Serial Number @@ -266,6 +309,7 @@ namespace CMS_CORE_Library.Fanuc SWV = Cnc_SftVersion; + return NO_ERROR; } @@ -1816,7 +1860,7 @@ namespace CMS_CORE_Library.Fanuc if (nReturn != 0) return GetNcError(nReturn); - //If an axis goes out from Process Clear the List + // If an axis goes out from Process Clear the List if (Axes.Count > NumAxes) Axes.Clear(); @@ -2063,71 +2107,79 @@ namespace CMS_CORE_Library.Fanuc short nReturn = Focas1.cnc_exaxisname(nLibHandle[process - 1], 0, ref numAxesRead, sOdbExAxisName); if (nReturn != 0) return GetNcError(nReturn); + + short[] types = new short[]{ 0, 1, 2, 3 }; + + ODBAXDT axisData = new ODBAXDT(); + nReturn = Focas1.cnc_rdaxisdata(nLibHandle[process - 1], 1, types, 4, ref numAxesRead, axisData); + if (nReturn != 0) + return GetNcError(nReturn); + // Parse data if (numAxesRead >= 1) - axesData.Add(new AxisModel() { Id = 1, Name = sOdbExAxisName.axname1, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 1, Name = sOdbExAxisName.axname1, IsSelectable = false, Type = axisData.data1.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 2) - axesData.Add(new AxisModel() { Id = 2, Name = sOdbExAxisName.axname2, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 2, Name = sOdbExAxisName.axname2, IsSelectable = false, Type = axisData.data2.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 3) - axesData.Add(new AxisModel() { Id = 3, Name = sOdbExAxisName.axname3, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 3, Name = sOdbExAxisName.axname3, IsSelectable = false, Type = axisData.data3.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 4) - axesData.Add(new AxisModel() { Id = 4, Name = sOdbExAxisName.axname4, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 4, Name = sOdbExAxisName.axname4, IsSelectable = false, Type = axisData.data4.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 5) - axesData.Add(new AxisModel() { Id = 5, Name = sOdbExAxisName.axname5, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 5, Name = sOdbExAxisName.axname5, IsSelectable = false, Type = axisData.data5.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 6) - axesData.Add(new AxisModel() { Id = 6, Name = sOdbExAxisName.axname6, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 6, Name = sOdbExAxisName.axname6, IsSelectable = false, Type = axisData.data6.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 7) - axesData.Add(new AxisModel() { Id = 7, Name = sOdbExAxisName.axname7, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 7, Name = sOdbExAxisName.axname7, IsSelectable = false, Type = axisData.data7.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 8) - axesData.Add(new AxisModel() { Id = 8, Name = sOdbExAxisName.axname8, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 8, Name = sOdbExAxisName.axname8, IsSelectable = false, Type = axisData.data8.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 9) - axesData.Add(new AxisModel() { Id = 9, Name = sOdbExAxisName.axname9, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 9, Name = sOdbExAxisName.axname9, IsSelectable = false, Type = axisData.data9.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 10) - axesData.Add(new AxisModel() { Id = 10, Name = sOdbExAxisName.axname10, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 10, Name = sOdbExAxisName.axname10, IsSelectable = false, Type = axisData.data10.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 11) - axesData.Add(new AxisModel() { Id = 11, Name = sOdbExAxisName.axname11, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 11, Name = sOdbExAxisName.axname11, IsSelectable = false, Type = axisData.data11.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 12) - axesData.Add(new AxisModel() { Id = 12, Name = sOdbExAxisName.axname12, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 12, Name = sOdbExAxisName.axname12, IsSelectable = false, Type = axisData.data12.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 13) - axesData.Add(new AxisModel() { Id = 13, Name = sOdbExAxisName.axname13, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 13, Name = sOdbExAxisName.axname13, IsSelectable = false, Type = axisData.data13.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 14) - axesData.Add(new AxisModel() { Id = 14, Name = sOdbExAxisName.axname14, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 14, Name = sOdbExAxisName.axname14, IsSelectable = false, Type = axisData.data14.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 15) - axesData.Add(new AxisModel() { Id = 15, Name = sOdbExAxisName.axname15, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 15, Name = sOdbExAxisName.axname15, IsSelectable = false, Type = axisData.data15.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 16) - axesData.Add(new AxisModel() { Id = 16, Name = sOdbExAxisName.axname16, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 16, Name = sOdbExAxisName.axname16, IsSelectable = false, Type = axisData.data16.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 17) - axesData.Add(new AxisModel() { Id = 17, Name = sOdbExAxisName.axname17, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 17, Name = sOdbExAxisName.axname17, IsSelectable = false, Type = axisData.data17.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 18) - axesData.Add(new AxisModel() { Id = 18, Name = sOdbExAxisName.axname18, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 18, Name = sOdbExAxisName.axname18, IsSelectable = false, Type = axisData.data18.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 19) - axesData.Add(new AxisModel() { Id = 19, Name = sOdbExAxisName.axname19, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 19, Name = sOdbExAxisName.axname19, IsSelectable = false, Type = axisData.data19.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 20) - axesData.Add(new AxisModel() { Id = 20, Name = sOdbExAxisName.axname20, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 20, Name = sOdbExAxisName.axname20, IsSelectable = false, Type = axisData.data20.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 21) - axesData.Add(new AxisModel() { Id = 21, Name = sOdbExAxisName.axname21, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 21, Name = sOdbExAxisName.axname21, IsSelectable = false, Type = axisData.data21.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 22) - axesData.Add(new AxisModel() { Id = 22, Name = sOdbExAxisName.axname22, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 22, Name = sOdbExAxisName.axname22, IsSelectable = false, Type = axisData.data22.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 23) - axesData.Add(new AxisModel() { Id = 23, Name = sOdbExAxisName.axname23, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 23, Name = sOdbExAxisName.axname23, IsSelectable = false, Type = axisData.data23.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 24) - axesData.Add(new AxisModel() { Id = 24, Name = sOdbExAxisName.axname24, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 24, Name = sOdbExAxisName.axname24, IsSelectable = false, Type = axisData.data24.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 25) - axesData.Add(new AxisModel() { Id = 25, Name = sOdbExAxisName.axname25, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 25, Name = sOdbExAxisName.axname25, IsSelectable = false, Type = axisData.data25.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 26) - axesData.Add(new AxisModel() { Id = 26, Name = sOdbExAxisName.axname26, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 26, Name = sOdbExAxisName.axname26, IsSelectable = false, Type = axisData.data26.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 27) - axesData.Add(new AxisModel() { Id = 27, Name = sOdbExAxisName.axname27, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 27, Name = sOdbExAxisName.axname27, IsSelectable = false, Type = axisData.data27.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 28) - axesData.Add(new AxisModel() { Id = 28, Name = sOdbExAxisName.axname28, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 28, Name = sOdbExAxisName.axname28, IsSelectable = false, Type = axisData.data28.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 29) - axesData.Add(new AxisModel() { Id = 29, Name = sOdbExAxisName.axname29, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 29, Name = sOdbExAxisName.axname29, IsSelectable = false, Type = axisData.data29.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 30) - axesData.Add(new AxisModel() { Id = 30, Name = sOdbExAxisName.axname30, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 30, Name = sOdbExAxisName.axname30, IsSelectable = false, Type = axisData.data30.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 31) - axesData.Add(new AxisModel() { Id = 31, Name = sOdbExAxisName.axname31, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 31, Name = sOdbExAxisName.axname31, IsSelectable = false, Type = axisData.data31.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); if (numAxesRead >= 32) - axesData.Add(new AxisModel() { Id = 32, Name = sOdbExAxisName.axname32, IsSelectable = false }); + axesData.Add(new AxisModel() { Id = 32, Name = sOdbExAxisName.axname32, IsSelectable = false, Type = axisData.data32.unit == 2 ? AXIS_TYPE.ROTATING : AXIS_TYPE.LINEAR }); axesData = axesData.Where(x => x.Name != "\f").ToList(); diff --git a/CMS_CORE_Library/Nc.cs b/CMS_CORE_Library/Nc.cs index 521b409..be157c8 100644 --- a/CMS_CORE_Library/Nc.cs +++ b/CMS_CORE_Library/Nc.cs @@ -271,6 +271,8 @@ namespace CMS_CORE_Library public abstract CmsError NC_GetTranslatedPlcMessages(string language, ref Dictionary messages); + public abstract CmsError NC_GetAvailableLanguages(ref ICollection languages); + /** * * Set the screen page visible of the NC diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index 8e3f894..da07ccc 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -195,6 +195,11 @@ namespace CMS_CORE_Library.Osai } } + public override CmsError NC_GetAvailableLanguages(ref ICollection languages) + { + return NO_ERROR; + } + #endregion Contructor & global methods /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs index 746d8b2..0794d6c 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -72,9 +72,8 @@ namespace CMS_CORE_Library.Siemens private static uint SiemensLanguage; private static string UnitOfMeasure; - // Alarms Handler + // Alarms data private AlarmSvc SiemensAlmSvc = null; - private Alarm[] SiemensAlarms; // Tool table listeners @@ -441,6 +440,25 @@ namespace CMS_CORE_Library.Siemens } } + public override CmsError NC_GetAvailableLanguages(ref ICollection languages) + { + try + { + foreach (string file in Directory.GetFiles(PLC_MESSAGES_FILE_PATH)) + { + string fileName = Path.GetFileNameWithoutExtension(file); + + languages.Add(CultureInfo.CreateSpecificCulture(fileName.Split('_')[1])); + } + } + catch (Exception ex) + { + return ManageException(ex); + } + + return NO_ERROR; + } + #endregion Contructor & global methods ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////