Fanuc tool table improved
This commit is contained in:
@@ -73,81 +73,52 @@ namespace CMS_CORE_Application
|
||||
N = SetNcByType();
|
||||
|
||||
CmsError cmsError = N.NC_Connect();
|
||||
// cmsError = N.NC_RModelName(ref ModelName);
|
||||
//cmsError = N.NC_WLanguage(new System.Globalization.CultureInfo("it"));
|
||||
cmsError = N.NC_RModelName(ref ModelName);
|
||||
cmsError = N.NC_WLanguage(new System.Globalization.CultureInfo("it"));
|
||||
bool error = false;
|
||||
string serial = "";
|
||||
|
||||
while (true)
|
||||
{
|
||||
// cmsError = N.PROC_RMode(1, ref mode);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
/////////////////////////////////// Load basic data
|
||||
cmsError = N.PROC_RMode(1, ref mode);
|
||||
if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); }
|
||||
|
||||
//cmsError = N.PROC_RStatus(1, ref status);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
cmsError = N.PROC_RStatus(1, ref status);
|
||||
if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); }
|
||||
|
||||
//cmsError = N.PROC_RActiveAlarms(1, ref procAlarms);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
cmsError = N.PROC_RActiveAlarms(1, ref procAlarms);
|
||||
if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); }
|
||||
|
||||
//cmsError = N.NC_RActiveAlarms(ref ncAlarms);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
cmsError = N.NC_RActiveAlarms(ref ncAlarms);
|
||||
if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); }
|
||||
|
||||
//cmsError = N.PLC_RActiveMessages(ref plcMsg);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
cmsError = N.PLC_RActiveMessages(ref plcMsg);
|
||||
if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); }
|
||||
|
||||
//cmsError = N.NC_RDateTime(ref NcTime);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
cmsError = N.NC_RDateTime(ref NcTime);
|
||||
if (cmsError.IsError()) { error = true; SetError(Lines, cmsError); }
|
||||
|
||||
//cmsError = N.NC_RSerialNumber(ref serial);
|
||||
//if (cmsError.IsError())
|
||||
//{
|
||||
// error = true;
|
||||
// SetError(Lines, cmsError);
|
||||
//}
|
||||
cmsError = N.NC_RSerialNumber(ref serial);
|
||||
if (cmsError.IsError()){ error = true; SetError(Lines, cmsError); }
|
||||
List<AxisModel> axes = new List<AxisModel>();
|
||||
|
||||
//ToolTableConfiguration conf = new ToolTableConfiguration();
|
||||
// N.TOOLS_RConfiguration(ref conf);
|
||||
////////////// SPEED TEST
|
||||
|
||||
////////////////////////////////////////// TEST
|
||||
Stopwatch st = new Stopwatch();
|
||||
sw.Restart();
|
||||
|
||||
cmsError = N.FILES_WDeactivateProgram(1);
|
||||
|
||||
cmsError = N.PROC_RActiveAlarms(1, ref ncAlarms);
|
||||
if (cmsError.IsError())
|
||||
List<NcToolModel> obj = new List<NcToolModel>()
|
||||
{
|
||||
error = true;
|
||||
SetError(Lines, cmsError);
|
||||
}
|
||||
ActiveProgramDataModel active = new ActiveProgramDataModel();
|
||||
cmsError = N.FILES_RActiveProgramData(2, ref active);
|
||||
N.FILES_WDeactivateProgram(1);
|
||||
InfoFile file = new InfoFile();
|
||||
cmsError = N.FILES_RGetFileInfo(active.Path, ref file);
|
||||
new NcToolModel() { ToolId = 22, FamilyId = 1, OffsetId1 = 1, OffsetId2 = 2, OffsetId3 = 3, OffsetLength = 4, ResidualLife = 5, ResidualRevive = 6, ShankId = 7 },
|
||||
new NcToolModel() { ToolId = 23, FamilyId = 4, OffsetId1 = 1, OffsetId2 = 2, OffsetId3 = 3, OffsetLength = 4, ResidualLife = 8, ResidualRevive = 8, ShankId = 7 }
|
||||
};
|
||||
N.TOOLS_WUpdateTools(obj);
|
||||
|
||||
ActiveProgramDataModel active = new ActiveProgramDataModel();
|
||||
cmsError = N.FILES_RActiveProgramData(1, ref active);
|
||||
|
||||
Console.WriteLine("ICON" + sw.ElapsedMilliseconds);
|
||||
sw.Stop();
|
||||
|
||||
|
||||
+236
-110
@@ -42,6 +42,8 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
private const string PLC_MESSAGE_PATH = @"C:\CMS\FANUC\";
|
||||
|
||||
private const string BLANK_PART_PROGRAM_PATH = "//CNC_MEM/MTB1/BLANK";
|
||||
|
||||
// Const
|
||||
private const int TOOL_OFFSET = 300;
|
||||
|
||||
@@ -198,7 +200,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
#region High level methods
|
||||
|
||||
//Get the NC Language
|
||||
// Get the NC Language
|
||||
public override CmsError NC_RLanguage(ref CultureInfo Language)
|
||||
{
|
||||
// Read static data
|
||||
@@ -211,7 +213,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Set the NC Language
|
||||
// Set the NC Language
|
||||
public override CmsError NC_WLanguage(CultureInfo Language)
|
||||
{
|
||||
// set but 7 to TRUE
|
||||
@@ -226,7 +228,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the NC Serial Number
|
||||
// Get the NC Serial Number
|
||||
public override CmsError NC_RSerialNumber(ref string SN)
|
||||
{
|
||||
// Read static data
|
||||
@@ -239,7 +241,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the NC Software Version
|
||||
// Get the NC Software Version
|
||||
public override CmsError NC_RSoftwareVersion(ref string SWV)
|
||||
{
|
||||
// Read static data
|
||||
@@ -252,7 +254,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the NC model Name
|
||||
// Get the NC model Name
|
||||
public override CmsError NC_RModelName(ref string ModelName)
|
||||
{
|
||||
// Read static data
|
||||
@@ -265,7 +267,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the processes-count configurated
|
||||
// Get the processes-count configurated
|
||||
public override CmsError NC_RProcessesNum(ref ushort ProcNumber)
|
||||
{
|
||||
//Read static data
|
||||
@@ -278,7 +280,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the NC Time
|
||||
// Get the NC Time
|
||||
public override CmsError NC_RDateTime(ref DateTime ActualTime)
|
||||
{
|
||||
//Check if the NC is Connected
|
||||
@@ -314,7 +316,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the Machine Number
|
||||
// Get the Machine Number
|
||||
public override CmsError NC_RMachineNumber(ref string MachNumber)
|
||||
{
|
||||
ushort Value = 0;
|
||||
@@ -329,7 +331,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Get the NC Alarms
|
||||
// Get the NC Alarms
|
||||
public override CmsError NC_RActiveAlarms(ref List<AlarmModel> alarms)
|
||||
{
|
||||
//// Check if the NC is Connected
|
||||
@@ -409,7 +411,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
//Set the Nc Active Page of the NC
|
||||
// Set the Nc Active Page of the NC
|
||||
public override CmsError NC_SetScreenVisible(SCREEN_PAGE screen)
|
||||
{
|
||||
short actualPage, nReturn;
|
||||
@@ -2261,13 +2263,17 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
try
|
||||
{
|
||||
char[] filePath = new char[242];
|
||||
char[] filePath = new char[240];
|
||||
// Read main program data
|
||||
short nReturn = Focas1.cnc_pdf_rdmain(nLibHandle[processId - 1], filePath);
|
||||
if (nReturn != 0)
|
||||
return GetNcError(nReturn);
|
||||
|
||||
// Clean the read path
|
||||
string path = new string(filePath).TrimEnd('\0');
|
||||
// If program is CMS blank program, simulates that there are no progs
|
||||
if (path == BLANK_PART_PROGRAM_PATH)
|
||||
return NO_ERROR;
|
||||
|
||||
ushort length = 200;
|
||||
char[] text = new char[201];
|
||||
@@ -2292,7 +2298,41 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
public override CmsError FILES_WDeactivateProgram(int processId)
|
||||
{
|
||||
return FUNCTION_NOT_ALLOWED_ERROR;
|
||||
// Check if the NC is connected
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
try
|
||||
{
|
||||
// Select main data
|
||||
short nReturn = Focas1.cnc_pdf_slctmain(nLibHandle[processId - 1], BLANK_PART_PROGRAM_PATH);
|
||||
if (nReturn != 0)
|
||||
{
|
||||
// Check error type
|
||||
Focas1.ODBERR errorDetails = new Focas1.ODBERR();
|
||||
nReturn = Focas1.cnc_getdtailerr(nLibHandle[0], errorDetails);
|
||||
|
||||
// If file not exist then create it
|
||||
if (errorDetails.err_no == 2)
|
||||
{
|
||||
// Create File
|
||||
cmsError = WritePartProgramContent("//CNC_MEM/MTB1/", "%\n<BLANK>\n%");
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Deactivate again
|
||||
return FILES_WDeactivateProgram(processId);
|
||||
}
|
||||
else
|
||||
return GetNcError(nReturn);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return ManageException(ex);
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError FILES_UploadPartProgram(string localPath, string name, ref string newFilePath)
|
||||
@@ -2762,7 +2802,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
public override CmsError TOOLS_WStartEditData()
|
||||
{
|
||||
//Check if the NC is Connected
|
||||
// Check if the NC is Connected
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
@@ -2821,93 +2861,135 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
public override CmsError TOOLS_WUpdateTools(List<NcToolModel> toolsList)
|
||||
{
|
||||
Stopwatch st = new Stopwatch();
|
||||
st.Restart();
|
||||
|
||||
List<int> zeros = Enumerable.Repeat(0, TOOL_TABLE_INDEX.Size / 4).ToList();
|
||||
CmsError cmsError = MEM_RWIntegerList(W, 0, TOOL_TABLE_INDEX.MemType, TOOL_TABLE_INDEX.Address, TOOL_TABLE_INDEX.Size / 4, ref zeros);
|
||||
// Check if the NC is Connected
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
Console.WriteLine("Tempo: " + st.ElapsedMilliseconds);
|
||||
|
||||
foreach (NcToolModel tool in toolsList)
|
||||
{
|
||||
// Get the offset of the id in the memory
|
||||
cmsError = TOOLS_RPositionId(tool.ToolId, TOOL_TABLE_INDEX.Address, out int offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Create new values of the tools table
|
||||
List<int> newMemoryValues = TOOLS_CreateNewToolTableMemoryData(toolsList, TOOL_TABLE_INDEX);
|
||||
// Write in memory
|
||||
return MEM_RWIntegerList(W, 0, TOOL_TABLE_INDEX.MemType, TOOL_TABLE_INDEX.Address, newMemoryValues.Count(), ref newMemoryValues);
|
||||
|
||||
//List<int> zeros = Enumerable.Repeat(0, TOOL_TABLE_INDEX.Size / 4).ToList();
|
||||
//CmsError cmsError = MEM_RWIntegerList(W, 0, TOOL_TABLE_INDEX.MemType, TOOL_TABLE_INDEX.Address, TOOL_TABLE_INDEX.Size / 4, ref zeros);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
// Write object in memory
|
||||
cmsError = TOOLS_WObjectInMemory(tool, TOOL_TABLE_INDEX.Address, offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
//foreach (NcToolModel tool in toolsList)
|
||||
//{
|
||||
// // Get the offset of the id in the memory
|
||||
// cmsError = TOOLS_RPositionOfNextShortId(tool.ToolId, TOOL_TABLE_INDEX.Address, out int offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
return NO_ERROR;
|
||||
// // 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<NcFamilyModel> familyList)
|
||||
{
|
||||
List<int> zeros = Enumerable.Repeat(0, FAMILY_TABLE_INDEX.Size / 4).ToList();
|
||||
CmsError cmsError = MEM_RWIntegerList(W, 0, FAMILY_TABLE_INDEX.MemType, FAMILY_TABLE_INDEX.Address, FAMILY_TABLE_INDEX.Size / 4, ref zeros);
|
||||
// Check if the NC is Connected
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
foreach (NcFamilyModel fam in familyList)
|
||||
{
|
||||
// Get the offset of the id in the memory
|
||||
cmsError = TOOLS_RPositionId(fam.FamilyId, FAMILY_TABLE_INDEX.Address, out int offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Create new values of the family table
|
||||
List<int> newMemoryValues = TOOLS_CreateNewToolTableMemoryData(familyList, FAMILY_TABLE_INDEX);
|
||||
|
||||
// Write object in memory
|
||||
cmsError = TOOLS_WObjectInMemory(fam, FAMILY_TABLE_INDEX.Address, offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
return MEM_RWIntegerList(W, 0, FAMILY_TABLE_INDEX.MemType, FAMILY_TABLE_INDEX.Address, newMemoryValues.Count(), ref newMemoryValues);
|
||||
|
||||
return NO_ERROR;
|
||||
//List<int> zeros = Enumerable.Repeat(0, FAMILY_TABLE_INDEX.Size / 4).ToList();
|
||||
//CmsError cmsError = MEM_RWIntegerList(W, 0, FAMILY_TABLE_INDEX.MemType, FAMILY_TABLE_INDEX.Address, FAMILY_TABLE_INDEX.Size / 4, ref zeros);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
//foreach (NcFamilyModel fam in familyList)
|
||||
//{
|
||||
// // Get the offset of the id in the memory
|
||||
// cmsError = TOOLS_RPositionOfNextShortId(fam.FamilyId, FAMILY_TABLE_INDEX.Address, out int offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
// // Write object in memory
|
||||
// cmsError = TOOLS_WObjectInMemory(fam, FAMILY_TABLE_INDEX.Address, offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
//}
|
||||
|
||||
//return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError TOOLS_WUpdateShanks(List<NcShankModel> shankList)
|
||||
{
|
||||
List<int> zeros = Enumerable.Repeat(0, SHANK_TABLE_INDEX.Size / 4).ToList();
|
||||
CmsError cmsError = MEM_RWIntegerList(W, 0, SHANK_TABLE_INDEX.MemType, SHANK_TABLE_INDEX.Address, SHANK_TABLE_INDEX.Size / 4, ref zeros);
|
||||
// Check if the NC is Connected
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
foreach (NcShankModel shank in shankList)
|
||||
{
|
||||
// Get the offset of the id in the memory
|
||||
cmsError = TOOLS_RPositionId(shank.ShankId, SHANK_TABLE_INDEX.Address, out int offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Create new values of the shank table
|
||||
List<int> newMemoryValues = TOOLS_CreateNewToolTableMemoryData(shankList, SHANK_TABLE_INDEX);
|
||||
|
||||
// Write object in memory
|
||||
cmsError = TOOLS_WObjectInMemory(shank, SHANK_TABLE_INDEX.Address, offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
// Write in memory
|
||||
return MEM_RWIntegerList(W, 0, SHANK_TABLE_INDEX.MemType, SHANK_TABLE_INDEX.Address, newMemoryValues.Count(), ref newMemoryValues);
|
||||
|
||||
return NO_ERROR;
|
||||
//List<int> zeros = Enumerable.Repeat(0, SHANK_TABLE_INDEX.Size / 4).ToList();
|
||||
//CmsError cmsError = MEM_RWIntegerList(W, 0, SHANK_TABLE_INDEX.MemType, SHANK_TABLE_INDEX.Address, SHANK_TABLE_INDEX.Size / 4, ref zeros);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
//foreach (NcShankModel shank in shankList)
|
||||
//{
|
||||
// // Get the offset of the id in the memory
|
||||
// cmsError = TOOLS_RPositionOfNextShortId(shank.ShankId, SHANK_TABLE_INDEX.Address, out int offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
// // Write object in memory
|
||||
// cmsError = TOOLS_WObjectInMemory(shank, SHANK_TABLE_INDEX.Address, offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
//}
|
||||
|
||||
// return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError TOOLS_WUpdateMagazinePositions(List<NcMagazinePositionModel> magPosList)
|
||||
{
|
||||
foreach (NcMagazinePositionModel pos in magPosList)
|
||||
{
|
||||
// Get the offset of the id in the memory
|
||||
CmsError cmsError = TOOLS_RPositionId(pos.PositionId, SHANK_TABLE_INDEX.Address, out int offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Check if the NC is Connected
|
||||
CmsError cmsError = CheckConnection();
|
||||
if (cmsError.IsError())
|
||||
|
||||
// Write object in memory
|
||||
cmsError = TOOLS_WObjectInMemory(pos, SHANK_TABLE_INDEX.Address, offset);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
}
|
||||
return cmsError;
|
||||
// Create new values of the magazine positions table
|
||||
List<int> newMemoryValues = TOOLS_CreateNewToolTableMemoryData(magPosList, MAG_POS_TABLE_INDEX);
|
||||
// Write in memory
|
||||
return MEM_RWIntegerList(W, 0, MAG_POS_TABLE_INDEX.MemType, MAG_POS_TABLE_INDEX.Address, newMemoryValues.Count(), ref newMemoryValues);
|
||||
|
||||
//List<int> zeros = Enumerable.Repeat(0, SHANK_TABLE_INDEX.Size / 4).ToList();
|
||||
//CmsError cmsError = MEM_RWIntegerList(W, 0, MAG_POS_TABLE_INDEX.MemType, MAG_POS_TABLE_INDEX.Address, MAG_POS_TABLE_INDEX.Size / 4, ref zeros);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
//foreach (NcMagazinePositionModel pos in magPosList)
|
||||
//{
|
||||
// // Get the offset of the id in the memory
|
||||
// cmsError = TOOLS_RPositionOfNextByteId(pos.PositionId, MAG_POS_TABLE_INDEX.Address, out int offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
|
||||
return NO_ERROR;
|
||||
// // Write object in memory
|
||||
// cmsError = TOOLS_WObjectInMemory(pos, MAG_POS_TABLE_INDEX.Address, offset);
|
||||
// if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
//}
|
||||
|
||||
//return NO_ERROR;
|
||||
}
|
||||
|
||||
public override CmsError TOOLS_WStartEditTooling(int magazineId)
|
||||
@@ -3005,7 +3087,7 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
private CmsError TOOLS_RPositionId(int id, int startIndex, out int offset)
|
||||
private CmsError TOOLS_RPositionOfNextShortId(int id, int startIndex, out int offset)
|
||||
{
|
||||
offset = 0;
|
||||
|
||||
@@ -3015,25 +3097,47 @@ namespace CMS_CORE_Library.Fanuc
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
ushort[] bytes = new ushort[300];
|
||||
ushort[] shorts = new ushort[300];
|
||||
// Copy into ushorts
|
||||
Buffer.BlockCopy(ints.ToArray(), 0, bytes, 0, ints.Count * sizeof(ushort));
|
||||
Buffer.BlockCopy(ints.ToArray(), 0, shorts, 0, ints.Count * sizeof(ushort));
|
||||
// Find id
|
||||
offset = Array
|
||||
.FindIndex(bytes, x => x == id);
|
||||
.FindIndex(shorts, 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)
|
||||
for (int i = 0; i < shorts.Count(); i++)
|
||||
if (shorts[i] != 0)
|
||||
offset = i + 1;
|
||||
}
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
private CmsError TOOLS_RPositionOfNextByteId(int id, int startIndex, out int offset)
|
||||
{
|
||||
offset = 0;
|
||||
|
||||
// Read 300 bytes
|
||||
List<int> ints = new List<int>();
|
||||
CmsError cmsError = MEM_RWIntegerList(false, 0, Nc.MEMORY_TYPE.Fanuc_D, startIndex, 75, ref ints);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
|
||||
byte[] bytes = new byte[300];
|
||||
// Copy into ushorts
|
||||
Buffer.BlockCopy(ints.ToArray(), 0, bytes, 0, ints.Count * sizeof(ushort));
|
||||
|
||||
offset = 0;
|
||||
for (int i = 0; i < bytes.Count(); i++)
|
||||
if (bytes[i] != 0)
|
||||
offset = i + 1;
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
|
||||
private CmsError TOOLS_WObjectInMemory<T>(T item, int startTableIndex, int objOffset) where T : class
|
||||
{
|
||||
PropertyInfo[] properties = typeof(T).GetProperties();
|
||||
@@ -3090,12 +3194,13 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return cmsError;
|
||||
}
|
||||
|
||||
private CmsError TOOLS_WObjectsInMemory<T>(List<T> items, int startTableIndex) where T : class
|
||||
private List<int> TOOLS_CreateNewToolTableMemoryData<T>(List<T> items, MEMORY_CELL tableInfo) where T : class
|
||||
{
|
||||
PropertyInfo[] properties = typeof(T).GetProperties();
|
||||
|
||||
CmsError cmsError = NO_ERROR;
|
||||
int nextFieldIndex = startTableIndex;
|
||||
byte[] values = new byte[tableInfo.Size];
|
||||
|
||||
// Start from the begin of the table
|
||||
int nextFieldIndex = 0;
|
||||
// Index of the
|
||||
int objOffset = 0;
|
||||
|
||||
@@ -3109,36 +3214,51 @@ namespace CMS_CORE_Library.Fanuc
|
||||
// Add obj index to the parameter memory
|
||||
int currentFieldIndex = nextFieldIndex + objOffset * size;
|
||||
|
||||
// Write based on the size
|
||||
// Choose action based on the size
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
byte b = Convert.ToByte(property.GetValue(item));
|
||||
cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, 0, ref b);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
values[currentFieldIndex] = b;
|
||||
|
||||
// cmsError = MEM_RWByte(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, 0, ref b);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
{
|
||||
ushort u = Convert.ToUInt16(property.GetValue(item));
|
||||
cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref u);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
// Split ushort into 2 bytes
|
||||
byte[] bytesVal = NumberToByte(u);
|
||||
// Overwrite bytes with new values
|
||||
values[currentFieldIndex] = bytesVal[0];
|
||||
values[currentFieldIndex + 1] = bytesVal[1];
|
||||
|
||||
// cmsError = MEM_RWWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref u);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
{
|
||||
uint w = Convert.ToUInt32(property.GetValue(item));
|
||||
cmsError = MEM_RWDWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref w);
|
||||
if (cmsError.IsError())
|
||||
return cmsError;
|
||||
uint i = Convert.ToUInt32(property.GetValue(item));
|
||||
// Split uint into 4 bytes
|
||||
byte[] bytesVal = NumberToByte(i);
|
||||
// Overwrite bytes
|
||||
values[currentFieldIndex] = bytesVal[0];
|
||||
values[currentFieldIndex + 1] = bytesVal[1];
|
||||
values[currentFieldIndex + 2] = bytesVal[2];
|
||||
values[currentFieldIndex + 3] = bytesVal[3];
|
||||
|
||||
//cmsError = MEM_RWDWord(W, 0, MEMORY_TYPE.Fanuc_R, currentFieldIndex, ref w);
|
||||
//if (cmsError.IsError())
|
||||
// return cmsError;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -3149,9 +3269,12 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
// Increment offset
|
||||
objOffset++;
|
||||
|
||||
// Reset counters
|
||||
nextFieldIndex = 0;
|
||||
}
|
||||
|
||||
return cmsError;
|
||||
return ListOfByteToListOf<int>(values, BitConverter.ToInt32);
|
||||
}
|
||||
|
||||
private string GenerateCsvStringFromModel<T>(List<T> items) where T : class
|
||||
@@ -3613,23 +3736,20 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
// Start write
|
||||
nReturn = Focas1.cnc_dwnstart4(nLibHandle[0], 0, partProgramPath);
|
||||
if (nReturn != 0)
|
||||
return GetNcError(nReturn);
|
||||
|
||||
//Throw Exception if there's an error
|
||||
ErrorHandler(nReturn);
|
||||
|
||||
//int lenghtMax = fileData.Length;
|
||||
Thread.Sleep(1000);
|
||||
// int lenghtMax = fileData.Length;
|
||||
Thread.Sleep(500);
|
||||
int lenght = partProgramContent.Length;
|
||||
// Write program
|
||||
nReturn = Focas1.cnc_download4(nLibHandle[0], ref lenght, partProgramContent);
|
||||
|
||||
//Throw Exception if there's an error
|
||||
ErrorHandler(nReturn);
|
||||
if (nReturn != 0)
|
||||
return GetNcError(nReturn);
|
||||
|
||||
nReturn = Focas1.cnc_dwnend4(nLibHandle[0]);
|
||||
|
||||
//Throw Exception if there's an error
|
||||
ErrorHandler(nReturn);
|
||||
if (nReturn != 0)
|
||||
return GetNcError(nReturn);
|
||||
|
||||
return NO_ERROR;
|
||||
}
|
||||
@@ -3649,8 +3769,9 @@ namespace CMS_CORE_Library.Fanuc
|
||||
// Start read process
|
||||
nReturn = Focas1.cnc_upstart4(nLibHandle[0], 0, partProgramPath);
|
||||
|
||||
//Throw Exception if there's an error
|
||||
ErrorHandler(nReturn);
|
||||
// Return if there's an error
|
||||
if (nReturn != 0)
|
||||
return GetNcError(nReturn);
|
||||
|
||||
do
|
||||
{
|
||||
@@ -3685,12 +3806,18 @@ namespace CMS_CORE_Library.Fanuc
|
||||
return GetNcError(nReturn);
|
||||
}
|
||||
}
|
||||
|
||||
if (lenght <= 256)
|
||||
fileEnded = true;
|
||||
|
||||
} while ((nReturn == (short)Focas1.focas_ret.EW_OK || nReturn == (short)Focas1.focas_ret.EW_BUFFER) && !fileEnded);
|
||||
|
||||
// End read
|
||||
nReturn = Focas1.cnc_upend4(nLibHandle[0]);
|
||||
|
||||
ErrorHandler(nReturn);
|
||||
// Return if there's an error
|
||||
if (nReturn != 0)
|
||||
return GetNcError(nReturn);
|
||||
|
||||
partProgramContent = partProgramContent.Replace("\0", string.Empty);
|
||||
|
||||
@@ -3823,10 +3950,9 @@ namespace CMS_CORE_Library.Fanuc
|
||||
|
||||
// Tool table indexes
|
||||
internal static MEMORY_CELL TOOL_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_D, 35000, 6900);
|
||||
|
||||
internal static MEMORY_CELL FAMILY_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_D, 42000, 7500);
|
||||
internal static MEMORY_CELL SHANK_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_D, 49600, 2100);
|
||||
internal static MEMORY_CELL MAG_POS_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_D, 51800, 900);
|
||||
internal static MEMORY_CELL MAG_POS_TABLE_INDEX = new MEMORY_CELL(MEMORY_TYPE.Fanuc_D, 51800, 1200);
|
||||
|
||||
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);
|
||||
|
||||
@@ -36,9 +36,13 @@ namespace CMS_CORE_Library.Models
|
||||
|
||||
public byte MagazineId { get; set; }
|
||||
|
||||
public byte PositionId { get; set; }
|
||||
public ushort PositionId { get; set; }
|
||||
|
||||
public byte MagazinePositionType { get; set; }
|
||||
|
||||
public byte OriginMagazineId { get; set; }
|
||||
|
||||
public ushort OriginPositionId { get; set; }
|
||||
}
|
||||
|
||||
public class NcToolModel
|
||||
@@ -168,7 +172,7 @@ namespace CMS_CORE_Library.Models
|
||||
{
|
||||
public byte MagazineId { get; set; }
|
||||
|
||||
public byte PositionId { get; set; }
|
||||
public ushort PositionId { get; set; }
|
||||
|
||||
public byte Type { get; set; }
|
||||
|
||||
|
||||
@@ -3777,7 +3777,7 @@ namespace CMS_CORE_Library.Osai
|
||||
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 ACTIVE_WATCHDOG = new MEMORY_CELL(MEMORY_TYPE.Osai_MW, STARTING_ADDRESS + 1, 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);
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using static CMS_CORE_Library.Models.DataStructures;
|
||||
|
||||
namespace CMS_CORE_Library.Utils
|
||||
@@ -148,7 +149,7 @@ namespace CMS_CORE_Library.Utils
|
||||
return fileContent;
|
||||
}
|
||||
|
||||
// Get a substring from the beginning until the specified character
|
||||
// Get a substring from the beginning until the specified character -> defautl "["
|
||||
public static string GetUntilOrEmpty(string text, string stopAt = "[")
|
||||
{
|
||||
// Get string unti
|
||||
@@ -178,6 +179,7 @@ namespace CMS_CORE_Library.Utils
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
// Convert a byte into an array of bools
|
||||
public static bool[] ByteToBits(byte val)
|
||||
{
|
||||
return new BitArray(new byte[] { val })
|
||||
@@ -185,6 +187,21 @@ namespace CMS_CORE_Library.Utils
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
// Convert a byte into an array of bools
|
||||
public static byte[] NumberToByte(object val)
|
||||
{
|
||||
return BitConverter.GetBytes(Convert.ToInt32(val));
|
||||
}
|
||||
|
||||
public static List<T> ListOfByteToListOf<T>(byte[] array, Func<byte[], int, T> bitConverter)
|
||||
{
|
||||
var size = Marshal.SizeOf(typeof(T));
|
||||
return Enumerable.Range(0, array.Length / size)
|
||||
.Select(i => bitConverter(array, i * size))
|
||||
.ToList();
|
||||
}
|
||||
|
||||
|
||||
public static SIEMENS_MAGAZINE_TYPE ConvertToSiemensMagazineType(NC_MAGAZINE_TYPE type)
|
||||
{
|
||||
switch (type)
|
||||
|
||||
Reference in New Issue
Block a user