Fix siemens Library

This commit is contained in:
Lucio Maranta
2018-05-28 16:00:04 +00:00
parent 7f6dcbbde3
commit 4664199426
5 changed files with 171 additions and 62 deletions
+4 -4
View File
@@ -210,7 +210,7 @@ namespace CMS_CORE_Application
SetError(Lines, cmsError);
}
// cmsError = N.TOOLS_WAddShank(ref newShank);
cmsError = N.TOOLS_WAddShank(ref newShank);
// cmsError = N.TOOLS_WDeleteShank(4);
//cmsError = N.TOOLS_WUpdateEdge(1, ref newEdge);
// List<MountedMultiToolModel> a = null;
@@ -234,11 +234,11 @@ namespace CMS_CORE_Application
//cmsError = N.TOOLS_RShanksData(ref shanks);
//cmsError = N.TOOLS_RFamilyData(ref famiies);
//cmsError = N.TOOLS_RMagazinePositions(ref positions);
cmsError = N.TOOLS_WAddTool(ref newTool);
// cmsError = N.TOOLS_WAddTool(ref newTool);
//ShankModel shank = new ShankModel();
newShank.Name = newShank.Name + "1";
cmsError = N.TOOLS_WAddShank(ref newShank);
// newShank.Name = newShank.Name + "1";
// cmsError = N.TOOLS_WAddShank(ref newShank);
//FamilyModel family = new FamilyModel
//{
// Name = "Da demo"
+2
View File
@@ -653,6 +653,8 @@ namespace CMS_CORE_Library
public int MaxMultitools;
public int MaxToolsPerMultitools;
public bool MultitoolOptionActive;
public List<MagazineModel> Magazines;
public List<FieldsConfiguration> ToolsConfiguration;
public FamiliesConfiguration FamiliesConfiguration;
+162 -55
View File
@@ -88,6 +88,9 @@ namespace CMS_CORE.Siemens
private static int MAX_MULTITOOLS_NUMBER;
private static int MAX_TOOLS_PER_MULTITOOL;
private static bool LIFE_OPTION_ACTIVE;
private static bool MULTITOOL_OPTION_ACTIVE;
private Alarm[] SiemensAlarms;
private static string PlcMessagesFilePath = "C:\\Program Files (x86)\\Siemens\\MotionControl\\oem\\sinumerik\\hmi\\lng\\";
@@ -97,13 +100,14 @@ namespace CMS_CORE.Siemens
// Tool table static data
private static List<SiemensToolModel> ToolTableData = new List<SiemensToolModel>();
private static List<PositionModel> MagazinePositionsData = new List<PositionModel>();
private static List<ShankModel> MultitoolsData = new List<ShankModel>();
private static List<PositionModel> MagazineMountedTools = new List<PositionModel>();
public static List<FamilyModel> FamiliesData = new List<FamilyModel>();
public static MagazineActionModel MagazineAction = new MagazineActionModel();
public static uint multitoolsNumber = 0;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#region Contructor & global methods
@@ -207,10 +211,20 @@ namespace CMS_CORE.Siemens
MAX_TOOLS_PER_MULTITOOL = (int)itemToRead.Value;
// Read file
string[] toolsStrings = ReadToolTableFile();
// Read options from NC
itemToRead = new Item("/NC/_N_NC_TEA_ACX/$MN_MM_TOOL_MANAGEMENT_MASK");
dataSvc.Read(itemToRead);
MULTITOOL_OPTION_ACTIVE = GetBitValue(Convert.ToInt32(itemToRead.Value), 11);
LIFE_OPTION_ACTIVE = GetBitValue(Convert.ToInt32(itemToRead.Value), 6);
// If not active remove fields from config
if (!LIFE_OPTION_ACTIVE)
RemoveLifeParamsFromConfig();
// Parse file
PopulateToolsTableFromFileStrings(toolsStrings);
// Setup magazine positions update listener
// Setup magazine positions listener
List<Item> magPosItems = new List<Item>();
foreach (var position in MagazinePositionsData)
{
@@ -221,6 +235,7 @@ namespace CMS_CORE.Siemens
SymbolicName = position.MagazineId + "_" + position.PositionId
});
}
// Subscribe
MagazinePositionSvc.Subscribe(MagazinePositionEnabled_OnChange, magPosItems.ToArray());
@@ -230,6 +245,42 @@ namespace CMS_CORE.Siemens
Path = "DB71.DBB0"
};
MagazineActionsSvc.Subscribe(MagazineAction_OnChange, magActionsItem);
DataSvc d = new DataSvc();
Item i = new Item() { Path = "/Tool/MTCatalogue/numMultiTools[u1]" };
d.Subscribe(MultitoolsNumber_OnChange, i);
}
private void MultitoolsNumber_OnChange(Guid guid, Item item, DataSvcStatus status)
{
// Check if an element has been deleted
if((uint)item.Value < multitoolsNumber)
{
// for each saved multitool
for (int i = 0; i < MultitoolsData.Count; i++)
{
try
{
// Check if exists
Item toolData = new Item(string.Format("/Tool/MT/multitoolMyPlace[u1, {0}]", MultitoolsData[i].Id));
DataSvc dataSvc = new DataSvc();
dataSvc.Read(toolData);
}
catch (Exception ex)
{
// Remove from list
MultitoolsData.RemoveAt(i);
}
}
}
// Update multitool counter
multitoolsNumber = (uint)item.Value;
}
private void RemoveLifeParamsFromConfig()
{
SiemensToolFieldsConfig.RemoveAll(x => x.Category == "life");
SiemensEdgesFieldsConfiguration.EdgeConfiguration.RemoveAll(x => x.Category == "life");
}
public override CmsError NC_GetTranslatedPlcMessages(string language, ref Dictionary<int, string> messages)
@@ -1819,12 +1870,15 @@ namespace CMS_CORE.Siemens
public override CmsError TOOLS_RConfiguration(ref ToolTableConfiguration config)
{
// Set limits
config.MaxTools = MAX_TOOL_NUMER;
config.MaxEdgesPerTools = MAX_EDGES_PER_TOOL;
config.MaxToolsPerFamily = MAX_TOOLS_PER_FAMILY;
config.MaxMultitools = MAX_MULTITOOLS_NUMBER;
config.MaxToolsPerMultitools = MAX_TOOLS_PER_MULTITOOL;
// Set options
config.MultitoolOptionActive = MULTITOOL_OPTION_ACTIVE;
// Set fields configurations
config.ToolsConfiguration = SiemensToolFieldsConfig;
config.FamiliesConfiguration = SiemensFamilyFieldsConfig;
config.ShanksConfiguration = SiemensShankFieldsConfig;
@@ -1977,8 +2031,6 @@ namespace CMS_CORE.Siemens
new Item() { Path = "/Tool/Data/toolplace_spec[" + tool.Id + "]", Value = tool.MagazinePositionType },
// TC_TP8
new Item() { Path = "/Tool/Data/toolStateL[" + tool.Id + "]", Value = array[0] },
// TC_TP9
new Item() { Path = "/Tool/Data/toolMon[" + tool.Id + "]", Value = (int)tool.LifeType, },
// TC_DP1
new Item() { Path = "/Tool/Compensation/edgeData[c" + tool.Id + ",1]", Value = tool.ToolType },
// TC_DP25
@@ -1989,6 +2041,9 @@ namespace CMS_CORE.Siemens
new Item() { Path = "/Tool/Data/toolMaxAcc[" + tool.Id + "]", Value = tool.MaxAcceleration }
};
if (LIFE_OPTION_ACTIVE) // TC_TP9
items.Add(new Item() { Path = "/Tool/Data/toolMon[" + tool.Id + "]", Value = (int)tool.LifeType });
dataSvc.Write(items.ToArray());
Item childId = new Item() { Path = "/Tool/Data/duploNo[" + tool.Id + "]" };
@@ -2061,6 +2116,7 @@ namespace CMS_CORE.Siemens
return INCORRECT_PARAMETERS_ERROR;
//if (shank.MaxChilds > MAX_TOOLS_PER_MULTITOOLS)
// return INCORRECT_PARAMETERS_ERROR;
try
{
if (shank.Name.Count() > 32)
@@ -2099,30 +2155,6 @@ namespace CMS_CORE.Siemens
return NO_ERROR;
}
public override CmsError TOOLS_WUpdatePosition(PositionModel position)
{
try
{
DataSvc dataSvc = new DataSvc();
int paramId = ((position.PositionId - 1) * 11) + 5;
// TC_MTP2
Item item = new Item()
{
Path = string.Format("/Tool/Magazine/placeData[c{0} , {1}]", position.MagazineId, paramId)
};
dataSvc.Read(item);
item.Value = SetBitValue(Convert.ToInt32(item.Value), position.Disabled, 1);
dataSvc.Write(item);
}
catch (Exception ex)
{
return ManageException(ex);
}
return NO_ERROR;
}
public override CmsError TOOLS_WUpdateShank(ref ShankModel shank)
{
try
@@ -2138,11 +2170,12 @@ namespace CMS_CORE.Siemens
// TC_MTP2
new Item("/Tool/MT/multitoolIdent[" + shank.Id + "]") { Value = shank.Name },
// TC_MTP3
new Item() { Path = "/Tool/MT/multitoolsize_left[" + shank.Id + "]", Value = shank.LeftSize },
new Item() { Path = "/Tool/MT/multitoolsize_left[" + shank.Id + "]", Value = shank.LeftSize == 0 ? 1 : shank.LeftSize },
// TC_MTP4
new Item() { Path = "/Tool/MT/multitoolsize_right[" + shank.Id + "]", Value = shank.RightSize },
new Item() { Path = "/Tool/MT/multitoolsize_right[" + shank.Id + "]", Value = shank.RightSize == 0 ? 1 : shank.RightSize },
// TC_TMP7
new Item() { Path = "/Tool/MT/multitoolplace_spec[" + shank.Id + "]", Value = shank.MagazinePositionType },
new Item() { Path = "/Tool/MT/multitoolplace_spec[" + shank.Id + "]", Value = shank.MagazinePositionType == 0 ? 1 : shank.MagazinePositionType },
// TC_MTP8
new Item() { Path = "/Tool/MT/multitoolStateL[" + shank.Id + "]", Value = array[0] }
};
@@ -2242,6 +2275,9 @@ namespace CMS_CORE.Siemens
if (tool.EdgesData.Count > MAX_EDGES_PER_TOOL)
return MAX_EDGES_PER_TOOL_REACHED_ERROR;
// Get next edge id
int nextEdgeId = tool.EdgesData.Count + 1;
try
{
// Create strings parameters
@@ -2254,6 +2290,12 @@ namespace CMS_CORE.Siemens
// Start NC add command
PiSvc pi = new PiSvc(piArgs);
pi.Start();
edge.Id = nextEdgeId;
CmsError cmsError = TOOLS_WUpdateEdge(toolId, ref edge);
if (cmsError.IsError())
return cmsError;
}
catch (Exception ex)
{
@@ -2278,30 +2320,41 @@ namespace CMS_CORE.Siemens
List<EdgeConfigModel> toolTypeConfig = toolEdgesConfig.EdgesConfig[tool.ToolType];
DataSvc dataSvc = new DataSvc();
List<Item> items = new List<Item>();
int edgeOffset = (edge.Id - 1) * 9;
switch (tool.LifeType)
{
case SIEMENS_LIFE_TYPE.TIME:
{
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeOffset + 1), Value = edge.PreAlmLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeOffset + 2), Value = edge.NominalLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeOffset + 5), Value = edge.ResidualLife });
}
break;
case SIEMENS_LIFE_TYPE.COUNT:
{
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeOffset + 3), Value = edge.PreAlmLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeOffset + 4), Value = edge.NominalLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeOffset + 6), Value = edge.ResidualLife });
}
break;
int edgeLifeOffset = (edge.Id - 1) * 9;
if (LIFE_OPTION_ACTIVE) // Check if life option is active
{
switch (tool.LifeType)
{
case SIEMENS_LIFE_TYPE.TIME:
{
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeLifeOffset + 1), Value = edge.PreAlmLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeLifeOffset + 2), Value = edge.NominalLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeLifeOffset + 5), Value = edge.ResidualLife });
}
break;
case SIEMENS_LIFE_TYPE.COUNT:
{
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeLifeOffset + 3), Value = edge.PreAlmLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeLifeOffset + 4), Value = edge.NominalLife });
items.Add(new Item() { Path = string.Format("/Tool/Supervision/data[c{0}, {1}]", tool.Id, edgeLifeOffset + 6), Value = edge.ResidualLife });
}
break;
}
}
// Edge params
int edgeParamsIndex = ((edge.Id - 1) * 35);
// Set edge id type
items.Add(new Item() { Path = string.Format("/Tool/Compensation/edgeData[c{0},{1}]", tool.Id, edgeParamsIndex + 1), Value = tool.ToolType });
// Set edge additional params, read by configuration
foreach (EdgeConfigModel conf in toolTypeConfig)
{
if (edge.EdgeAdditionalParams.ContainsKey(conf.Name))
{
items.Add(new Item() { Path = string.Format("/Tool/Compensation/edgeData[c{0}, {1}]", edge.Id, edgeOffset + conf.Number), Value = edge.EdgeAdditionalParams[conf.Name] });
items.Add(new Item() { Path = string.Format("/Tool/Compensation/edgeData[c{0}, {1}]", tool.Id, edgeParamsIndex + conf.Number), Value = edge.EdgeAdditionalParams[conf.Name] });
}
}
@@ -2468,6 +2521,31 @@ namespace CMS_CORE.Siemens
return NO_ERROR;
}
public override CmsError TOOLS_WUpdatePosition(PositionModel position)
{
try
{
DataSvc dataSvc = new DataSvc();
int paramId = ((position.PositionId - 1) * 11) + 5;
// TC_MTP2
Item item = new Item()
{
Path = string.Format("/Tool/Magazine/placeData[c{0} , {1}]", position.MagazineId, paramId)
};
dataSvc.Read(item);
item.Value = SetBitValue(Convert.ToInt32(item.Value), position.Disabled, 1);
dataSvc.Write(item);
}
catch (Exception ex)
{
return ManageException(ex);
}
return NO_ERROR;
}
public override CmsError TOOLS_RMagazineTools(int magazineId, ref List<PositionModel> magazinePos)
{
if (magazineId <= 0)
@@ -2529,7 +2607,7 @@ namespace CMS_CORE.Siemens
return NO_ERROR;
}
#endregion Tools functions
#endregion Tool Management
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3593,7 +3671,7 @@ namespace CMS_CORE.Siemens
if (tool != null)
// Remove
ToolTableData.Remove(tool);
else
else if (MULTITOOL_OPTION_ACTIVE)
{
// if tool not exist, find into shanks
ShankModel shank = MultitoolsData.SingleOrDefault(t => t.Id == toolInfo.tNo);
@@ -3622,7 +3700,7 @@ namespace CMS_CORE.Siemens
ToolTableData.Add(newTool);
AddOrUpdateFamilyChild(newTool.FamilyName);
}
else
else if (MULTITOOL_OPTION_ACTIVE)
{
ShankModel newMultitool = CreateMultitoolFromId((int)toolInfo.tNo, toolsStrings);
MultitoolsData.Add(newMultitool);
@@ -3646,11 +3724,11 @@ namespace CMS_CORE.Siemens
if (newTool != null)
ToolTableData[toolIndex] = newTool;
}
else
else if (MULTITOOL_OPTION_ACTIVE)
{
// Find if its a multitool
int multitoolIndex = MultitoolsData.FindIndex(t => t.Id == toolInfo.tNo);
if (multitoolIndex != -1)
{
// Create model with new data
@@ -3659,6 +3737,11 @@ namespace CMS_CORE.Siemens
if (newShank != null)
MultitoolsData[multitoolIndex] = newShank;
}
else
{
ShankModel newMultitool = CreateMultitoolFromId((int)toolInfo.tNo, toolsStrings);
MultitoolsData.Add(newMultitool);
}
}
}
break;
@@ -3738,6 +3821,30 @@ namespace CMS_CORE.Siemens
return Convert.ToInt32(item.Value);
}
private int GetLastEdgeId(int toolId)
{
// Get edgeIds ids
List<int> edgeIds = ToolTableData.Where(x => x.Id == toolId).FirstOrDefault()?.EdgesData.Select(x => x.Id).ToList();
// Sort tools ids array
edgeIds.Sort((x, y) => x.CompareTo(y));
if (edgeIds.Count == 0)
return 1;
for (int i = 0; i < edgeIds.Count - 1; i++)
{
// If next id is different than previus + 1, there is an empty space in the array of numbers
if (edgeIds[i] + 1 != edgeIds[i + 1])
{
// return new id
return edgeIds[i] + 1;
}
}
// If there isn't an empty space return max id + 1
return edgeIds[edgeIds.Count - 1] + 1;
}
private void AddOrUpdateFamilyChild(string familyName)
{
// Find family
@@ -136,7 +136,7 @@ namespace CMS_CORE_Library.Siemens
new EdgeConfigModel{ Name = "cuttingEdge", Path = "$TC_DP2[", Number = 2},
new EdgeConfigModel{ Name = "lenght", Path = "$TC_DP3[", Number = 3},
new EdgeConfigModel{ Name = "radius", Path = "$TC_DP6[", Number = 6},
new EdgeConfigModel{ Name = "Width", Path = "$TC_DP9[", Number = 9 },
new EdgeConfigModel{ Name = "width", Path = "$TC_DP9[", Number = 9 },
new EdgeConfigModel{ Name = "wearLenght", Path = "$TC_DP12[", Number = 12},
new EdgeConfigModel{ Name = "wearRadius", Path = "$TC_DP15[", Number = 15 },
new EdgeConfigModel{ Name = "teeth", Path = "$TC_DPNT[", Number = 34 }
@@ -148,7 +148,7 @@ namespace CMS_CORE_Library.Siemens
new EdgeConfigModel{ Name = "cuttingEdge", Path = "$TC_DP2[", Number = 2},
new EdgeConfigModel{ Name = "lenght", Path = "$TC_DP3[", Number = 3},
new EdgeConfigModel{ Name = "radius", Path = "$TC_DP6[", Number = 6},
new EdgeConfigModel{ Name = "Width", Path = "$TC_DP9[", Number = 9 },
new EdgeConfigModel{ Name = "width", Path = "$TC_DP9[", Number = 9 },
new EdgeConfigModel{ Name = "wearLenght", Path = "$TC_DP12[", Number = 12},
new EdgeConfigModel{ Name = "wearRadius", Path = "$TC_DP15[", Number = 15 },
new EdgeConfigModel{ Name = "teeth", Path = "$TC_DPNT[", Number = 34 }
+1 -1
View File
@@ -72,7 +72,7 @@ namespace CMS_CORE_Library
{
new FieldsConfiguration{Name = "id", Type = "int", SelectValues = null, Category = "general", ReadOnly = true },
new FieldsConfiguration{Name = "toolType", Type = "select", SelectValues = toolTypeList, Category = "general", ReadOnly = false},
new FieldsConfiguration{Name = "lifeType", Type = "select", SelectValues = toolLifeList, Category = "general", ReadOnly = false},
new FieldsConfiguration{Name = "lifeType", Type = "select", SelectValues = toolLifeList, Category = "life", ReadOnly = false},
new FieldsConfiguration{Name = "familyName", Type = "string", SelectValues = null, Category = "family", ReadOnly = false },
new FieldsConfiguration{Name = "childId", Type = "int", SelectValues = null, Category = "family", ReadOnly = true },
new FieldsConfiguration{Name = "isEnabled", Type = "boolean", SelectValues = null, Category = "state", ReadOnly = false},