diff --git a/CMS_CORE_Library/CMS_CORE_Library.csproj b/CMS_CORE_Library/CMS_CORE_Library.csproj
index 507b6c5..c993a90 100644
--- a/CMS_CORE_Library/CMS_CORE_Library.csproj
+++ b/CMS_CORE_Library/CMS_CORE_Library.csproj
@@ -103,8 +103,8 @@
False
libs\CndexLinkDotNet.dll
-
- ..\packages\S7netplus.0.4.0\lib\net452\S7.Net.dll
+
+ ..\..\cms_thermo_active\packages\S7netplus.0.7.0\lib\net452\S7.Net.dll
False
diff --git a/CMS_CORE_Library/Demo/Nc_Demo.cs b/CMS_CORE_Library/Demo/Nc_Demo.cs
index 9d15eff..f7f3924 100644
--- a/CMS_CORE_Library/Demo/Nc_Demo.cs
+++ b/CMS_CORE_Library/Demo/Nc_Demo.cs
@@ -27,6 +27,7 @@ namespace CMS_CORE_Library.Demo
private DemoEdgesConfiguration DemoEdgesConfiguration = new DemoEdgesConfiguration();
private const string PART_PROGRAM_FOLDER = "C:/CMS/Active/DEMO/part_program/";
private const string JOB_PROGRAM_FOLDER = PART_PROGRAM_FOLDER + "\\job\\";
+ private Random rand = new Random();
// Magazine config parameters
private List MagazineConfig = new List()
@@ -1142,6 +1143,12 @@ namespace CMS_CORE_Library.Demo
return NO_ERROR;
}
+ public override CmsError PROC_RFeed(ushort ProcNumber, ref float Feed)
+ {
+ Feed = Convert.ToSingle(rand.NextDouble() * 100);
+ return NO_ERROR;
+ }
+
private CmsError ResetStrobe(int bitId, int strobeByte, int ackByte, MEMORY_TYPE memType)
{
int n = 5;
@@ -1419,6 +1426,7 @@ namespace CMS_CORE_Library.Demo
// Populate response structure
processData.Type = bits[3] ? "AUX" : "WORK";
processData.CanLoadProgram = bits[6];
+ processData.IsInPieceWork = rand.NextDouble() > 0.5f;
// Choose process status
if (bits[4])
diff --git a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs
index f691abc..2fd1729 100644
--- a/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs
+++ b/CMS_CORE_Library/Fanuc/Nc_Fanuc.cs
@@ -1615,6 +1615,7 @@ namespace CMS_CORE_Library.Fanuc
// Get process part program data
public override CmsError PROC_RStatusAndData(ushort procNumber, ref ProcessDataModel processData)
{
+ Boolean Cut = false;
processData.Id = procNumber;
// Read part program name
CmsError cmsError = PROC_RSelectedPPName(procNumber, ref processData.PartProgramName);
@@ -1627,6 +1628,15 @@ namespace CMS_CORE_Library.Fanuc
if (cmsError.IsError())
return cmsError;
+ //Read CUT variable
+ byte CutRaw = 0;
+ int address = (1000 * (procNumber - 1)) + 2;
+ cmsError = MEM_RWByte(R, 0, MEMORY_TYPE.Fanuc_F, address, 0, ref CutRaw);
+ if (cmsError.IsError())
+ return cmsError;
+
+ Cut = (CutRaw & 0x40) == 0x40;
+
byte[] bytes = BitConverter.GetBytes(readValue);
// Convert Byte into true/false array
@@ -1640,6 +1650,7 @@ namespace CMS_CORE_Library.Fanuc
processData.IsSelected = bits[2];
processData.IsInAlarm = bits[3];
processData.CanLoadProgram = bits[4];
+ processData.IsInPieceWork = Cut;
// Choose process status
if (bytes[1] == 1)
@@ -2004,6 +2015,28 @@ namespace CMS_CORE_Library.Fanuc
return NO_ERROR;
}
+
+
+ public override CmsError PROC_RFeed(ushort ProcNumber, ref float Feed)
+ {
+ CmsError cmsError = CheckConnection();
+ if (cmsError.IsError())
+ return cmsError;
+
+ if (ProcNumber <= 0)
+ return PROC_NOT_FOUND_ERROR;
+
+
+ ODBACT feedRaw = new ODBACT();
+ short nReturn = Focas1.cnc_actf(nLibHandle[ProcNumber - 1], feedRaw);
+ // Check return value
+ if (nReturn != 0)
+ return GetNcError(nReturn);
+
+ Feed = feedRaw.data / 10.0f;
+ return NO_ERROR;
+ }
+
#endregion PROCESS (PATH) High-level data
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/CMS_CORE_Library/Models/DataStructures.cs b/CMS_CORE_Library/Models/DataStructures.cs
index d063401..e7c4506 100644
--- a/CMS_CORE_Library/Models/DataStructures.cs
+++ b/CMS_CORE_Library/Models/DataStructures.cs
@@ -285,6 +285,7 @@ namespace CMS_CORE_Library.Models
public bool Visible;
public ushort Reps;
public bool IsSelected;
+ public bool IsInPieceWork;
public bool CanLoadProgram;
}
diff --git a/CMS_CORE_Library/Nc.cs b/CMS_CORE_Library/Nc.cs
index 95e39b9..b0ee14a 100644
--- a/CMS_CORE_Library/Nc.cs
+++ b/CMS_CORE_Library/Nc.cs
@@ -775,6 +775,20 @@ namespace CMS_CORE_Library
public abstract CmsError PLC_WTerminateAssistedToolingProcedure();
+ /**
+ *
+ * Read the actual feed of the Process "ProcNumber"
+ *
+ * Compatibility: Fanuc | Osai | Demo | Siemens
+ *
+ *
+ * Returns an error when an internal or a library error occours
+ * Process number which the data refer
+ * Feed of the Process in mm/min
+ * */
+
+ public abstract CmsError PROC_RFeed(ushort ProcNumber, ref float Feed);
+
#endregion PROCESS (PATH, CHANNEL) data (to override)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/CMS_CORE_Library/Osai/Nc_Osai.cs b/CMS_CORE_Library/Osai/Nc_Osai.cs
index 71fced3..b46c011 100644
--- a/CMS_CORE_Library/Osai/Nc_Osai.cs
+++ b/CMS_CORE_Library/Osai/Nc_Osai.cs
@@ -1954,9 +1954,18 @@ namespace CMS_CORE_Library.Osai
cmsError = MEM_RWInteger(R, 0, PROCESS_STATUS.MemType, PROCESS_STATUS.Address + ((procNumber - 1) * 2), ref readValue);
if (cmsError.IsError())
return cmsError;
-
byte[] bytes = BitConverter.GetBytes(readValue);
+
+ // Read processes status from memory
+ int index = (20 * procNumber) + 2;
+ ushort readWord = 0;
+ bool isInPiece = false;
+ cmsError = MEM_RWWord(R, 0, MEMORY_TYPE.Osai_SW, PROCESS_STATUS.Address + ((procNumber - 1) * 2), ref readWord);
+ if (cmsError.IsError())
+ return cmsError;
+ isInPiece = (readWord & 0x1) != 0x1; //Bit 1
+
// Convert Byte into true/false array
BitArray bits = new BitArray(new byte[] { bytes[0] }); //1st byte -> 0 : Proccess type (AUX-WORK), 1: Process in alarm status, 2: Run, 3: Hold, 4: Read, 5: PartProgramVisible
@@ -1968,6 +1977,7 @@ namespace CMS_CORE_Library.Osai
processData.IsSelected = bits[2];
processData.IsInAlarm = bits[3];
processData.CanLoadProgram = bits[4];
+ processData.IsInPieceWork = isInPiece;
// Choose process status
if (bytes[1] == 1)
@@ -2095,6 +2105,17 @@ namespace CMS_CORE_Library.Osai
}
+
+ public override CmsError PROC_RFeed(ushort ProcNumber, ref float Feed)
+ {
+ ushort nReturn = OpenNC.GetNcInfo1((ushort)ProcNumber, out GETINFO1DATA info, out uint errorClass, out uint errorNum);
+ if (errorClass != 0 || errorNum != 0 || nReturn == 0)
+ return GetNCError(errorClass, errorNum);
+
+ Feed = Convert.ToSingle(info.realfeed);
+ return NO_ERROR;
+ }
+
#endregion PROCESS (PATH) High-level data
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/CMS_CORE_Library/Siemens/Nc_Siemens.cs b/CMS_CORE_Library/Siemens/Nc_Siemens.cs
index 8659339..2b9c222 100644
--- a/CMS_CORE_Library/Siemens/Nc_Siemens.cs
+++ b/CMS_CORE_Library/Siemens/Nc_Siemens.cs
@@ -2325,6 +2325,7 @@ namespace CMS_CORE_Library.Siemens
processData.IsSelected = bits[2];
processData.IsInAlarm = bits[3];
processData.CanLoadProgram = bits[4];
+ processData.IsInPieceWork = false;
// Choose process status
if (bytes[1] == 1)
@@ -2514,6 +2515,28 @@ namespace CMS_CORE_Library.Siemens
return NO_ERROR;
}
+
+
+ public override CmsError PROC_RFeed(ushort ProcNumber, ref float Feed)
+ {
+ if (ProcNumber <= 0)
+ return PROC_NOT_FOUND_ERROR;
+ try
+ {
+ Item item = new Item { Path = "/Channel/State/actFeedRateIpo[u" + ProcNumber + ", 1]" };
+ // Read data
+ DataSvc dataSvc = new DataSvc();
+ dataSvc.Read(item);
+ Feed = Convert.ToSingle(item.Value);
+ }
+ catch (Exception ex)
+ {
+ return ManageException(ex);
+ }
+
+ return NO_ERROR;
+ }
+
private CmsError PROC_ReadActiveLine(uint processId, ref string line)
{
try
diff --git a/CMS_CORE_Library/packages.config b/CMS_CORE_Library/packages.config
index ed7aa38..7d28004 100644
--- a/CMS_CORE_Library/packages.config
+++ b/CMS_CORE_Library/packages.config
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file