diff --git a/CMS_CORE_Application/Form1.cs b/CMS_CORE_Application/Form1.cs index 4860215..108405b 100644 --- a/CMS_CORE_Application/Form1.cs +++ b/CMS_CORE_Application/Form1.cs @@ -142,6 +142,13 @@ namespace CMS_CORE_Application SelectedProcessData a = new SelectedProcessData(); N.PROC_RSelectedProcessData(1, ref a); + + long b = 23225061011986; + + N.PLC_WCandy(b); + b = 0; + N.PLC_RCandy(ref b); + sw.Stop(); Console.WriteLine("TEMPO PER FUNZIONE " + sw.ElapsedMilliseconds); diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs index 433e3fe..e8edfd7 100644 --- a/CMS_CORE_Library/Demo/Nc_Demo.cs +++ b/CMS_CORE_Library/Demo/Nc_Demo.cs @@ -1226,10 +1226,11 @@ namespace CMS_CORE_Library.Demo return NO_ERROR; } - public override CmsError PLC_WCandy(int value) + public override CmsError PLC_WCandy(long value1) { - int newVal = 0; + long newVal = 0; + int value = (int)value1; //Scrivo il dato CmsError cmsError = MEM_RWInteger(W, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref value); if (cmsError.IsError()) @@ -1250,8 +1251,9 @@ namespace CMS_CORE_Library.Demo } } - public override CmsError PLC_RCandy(ref int value) + public override CmsError PLC_RCandy(ref long value1) { + int value = (int)value1; CmsError cmsError = MEM_RWInteger(R, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref value); if (cmsError.IsError()) return cmsError; diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs index 7cf365d..23f056c 100644 --- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs +++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs @@ -1470,10 +1470,11 @@ namespace CMS_CORE_Library.Fanuc return NO_ERROR; } - public override CmsError PLC_WCandy(int value) + public override CmsError PLC_WCandy(long value1) { - int newVal = 0; + long newVal = 0; + int value = (int)value1; //Scrivo il dato CmsError cmsError = MEM_RWInteger(W, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref value); if (cmsError.IsError()) @@ -1493,8 +1494,9 @@ namespace CMS_CORE_Library.Fanuc } } - public override CmsError PLC_RCandy(ref int value) + public override CmsError PLC_RCandy(ref long value1) { + int value = (int)value1; CmsError cmsError = MEM_RWInteger(R, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref value); if (cmsError.IsError()) return cmsError; diff --git a/CMS_CORE_Library/Nc.cs b/CMS_CORE_Library/Nc.cs index c46ea13..b78b859 100644 --- a/CMS_CORE_Library/Nc.cs +++ b/CMS_CORE_Library/Nc.cs @@ -595,9 +595,9 @@ namespace CMS_CORE_Library public abstract CmsError PLC_WResetWorkedTimeMachine(uint time); - public abstract CmsError PLC_RCandy(ref int value); + public abstract CmsError PLC_RCandy(ref long value); - public abstract CmsError PLC_WCandy(int value); + public abstract CmsError PLC_WCandy(long value); public abstract CmsError PLC_RExpiredCandy(ref bool value); diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs index e069980..3b197b9 100644 --- a/CMS_CORE_Library/Osai/Nc_Osai.cs +++ b/CMS_CORE_Library/Osai/Nc_Osai.cs @@ -337,12 +337,13 @@ namespace CMS_CORE_Library.Osai MachNumber = mac.ToString(); // NEW METHOD TO READ MACHINE NUMBER - //List lists = new List(); - //cmsError = MEM_RWByteList(R, 0, MATR_MACCH_OSAI.MemType, 4330, 0, 4, ref lists); - //if (cmsError.IsError()) - // return cmsError; - //lists.Reverse(); - //MachNumber = Encoding.ASCII.GetString(lists.ToArray()); + List lists = new List(); + cmsError = MEM_RWByteList(R, 0, MATR_MACCH_OSAI.MemType, 4330, 0, 4, ref lists); + if (cmsError.IsError()) + return cmsError; + lists.Reverse(); + + MachNumber = Encoding.ASCII.GetString(lists.ToArray()); return NO_ERROR; } @@ -1582,35 +1583,53 @@ namespace CMS_CORE_Library.Osai return NO_ERROR; } - public override CmsError PLC_WCandy(int value) + public override CmsError PLC_WCandy(long value) { - int newVal = 0; - - //Scrivo il dato - CmsError cmsError = MEM_RWInteger(W, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref value); + // Long is formed by a integer + word + // Write Word + ushort word = (ushort)((value & 0xFFFF)); + CmsError cmsError = MEM_RWWord(W, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref word); if (cmsError.IsError()) return cmsError; + + int integer = (int)((value & 0xFFFFFFFF0000) >> 16); + // Write Integer (+1 is used because osai uses word) + cmsError = MEM_RWInteger(W, 0, CANDY_MEM.MemType, CANDY_MEM.Address + 1, ref integer); + if (cmsError.IsError()) + return cmsError; + + // Rieggo il dato + long newVal = 0; + cmsError = PLC_RCandy(ref newVal); + if (cmsError.IsError()) + return cmsError; + + // Se i 2 dati coincidono ritorno OK + if (value == newVal) + return NO_ERROR; else - { - //Leggo il dato - cmsError = PLC_RCandy(ref newVal); - if (cmsError.IsError()) - return cmsError; - - //Se i 2 dati coincidono ritorno OK - if (value == newVal) - return NO_ERROR; - else - return PLC_NOT_RUNNING_ERROR; - - } + return PLC_NOT_RUNNING_ERROR; } - public override CmsError PLC_RCandy(ref int value) + public override CmsError PLC_RCandy(ref long value) { - CmsError cmsError = MEM_RWInteger(R, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref value); + // Long is formed by a integer + word + + // Read first int + uint firtInt = (uint)value; + CmsError cmsError = MEM_RWDWord(R, 0, CANDY_MEM.MemType, CANDY_MEM.Address, ref firtInt); if (cmsError.IsError()) return cmsError; + + // Read word + ushort word = 0; + cmsError = MEM_RWWord(R, 0, CANDY_MEM.MemType, CANDY_MEM.Address + 2, ref word); + if (cmsError.IsError()) + return cmsError; + + // Build Long value + value = ((long)word << 32) + firtInt; + return NO_ERROR; } diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs index 6f8487c..148f7ab 100644 --- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs +++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs @@ -1856,10 +1856,11 @@ namespace CMS_CORE_Library.Siemens return NO_ERROR; } - public override CmsError PLC_WCandy(int value) + public override CmsError PLC_WCandy(long value1) { - int newVal = 0; + long newVal = 0; + int value = (int)value1; //Scrivo il dato CmsError cmsError = MEM_RWInteger(W, 0, CANDY_MEM.MemType, CANDY_MEM.Address, CANDY_MEM.SubAddress, ref value); if (cmsError.IsError()) @@ -1880,8 +1881,9 @@ namespace CMS_CORE_Library.Siemens } } - public override CmsError PLC_RCandy(ref int value) + public override CmsError PLC_RCandy(ref long value1) { + int value = (int)value1; CmsError cmsError = MEM_RWInteger(R, 0, CANDY_MEM.MemType, CANDY_MEM.Address, CANDY_MEM.SubAddress, ref value); if (cmsError.IsError()) return cmsError;