Files
activestep/Step.NC/NcToolTableAdapter.cs
2020-09-12 16:11:43 +02:00

937 lines
38 KiB
C#

using CMS_CORE_Library.Models;
using Step.Database.Controllers;
using Step.Model.DatabaseModels;
using Step.Model.DTOModels.ToolModels;
using Step.Utils;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using static CMS_CORE_Library.Models.DataStructures;
using static Step.Config.ServerConfig;
using static Step.Model.Constants;
namespace Step.NC
{
public class NcToolTableAdapter : NcAdapter
{
public CmsError GetToolsData(bool readOffsets, out List<DTONcToolModel> dtoTools)
{
dtoTools = new List<DTONcToolModel>();
CmsError cmsError = NO_ERROR;
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
List<DbNcToolModel> tools = toolsManager.FindToolsWithDependencies();
foreach (DbNcToolModel tool in tools)
{
DTONcToolModel dtoTool = (DTONcToolModel)tool;
if (readOffsets)
// Read offset
cmsError = GetToolOffsets(tool, ref dtoTool);
dtoTools.Add(dtoTool);
}
return cmsError;
}
}
public CmsError GetToolOffsets(DbNcToolModel tool, ref DTONcToolModel dtoTool)
{
// Copy basic data
dtoTool = (DTONcToolModel)tool;
OffsetModel offset = new OffsetModel();
CmsError cmsError = NO_ERROR;
if (tool.OffsetId1 != null && tool.OffsetId1 != 0)
{
// Read first offset data
cmsError = numericalControl.TOOLS_ROffset((short)tool.OffsetId1, ref offset);
if (cmsError.IsError())
return cmsError;
dtoTool.Offset1 = offset;
}
if (tool.OffsetId2 != null && tool.OffsetId2 != 0)
{
// Read second offset data
cmsError = numericalControl.TOOLS_ROffset((short)tool.OffsetId2, ref offset);
if (cmsError.IsError())
return cmsError;
dtoTool.Offset2 = offset;
}
if (tool.OffsetId3 != null && tool.OffsetId3 != 0)
{
// Read third offset data
cmsError = numericalControl.TOOLS_ROffset((short)tool.OffsetId3, ref offset);
if (cmsError.IsError())
return cmsError;
dtoTool.Offset3 = offset;
}
return cmsError;
}
public CmsError AddTool(DTONewNcToolModel tool, out DTONcToolModel dtoTool, short toolId)
{
dtoTool = new DTONcToolModel();
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
DbNcToolModel ncTool = toolsManager.AddTool(tool, toolId);
if (!ToolManagerConfig.OffsetOpt)
{
CmsError cmsError = UpdateToolOffsetId(ncTool.ToolId, 1, ncTool.ToolId, out DTONcToolModel toolWithOffset);
if (cmsError.IsError())
return cmsError;
ncTool.OffsetId1 = ncTool.ToolId;
}
GetToolOffsets(ncTool, ref dtoTool);
return NO_ERROR;
}
}
public CmsError UpdateTool(int toolId, DTONewNcToolModel newTool, out DTONcToolModel toolWithOffsets, DTONewNcToolWithFamilyModel dtoToolWithFamily)
{
toolWithOffsets = new DTONcToolModel();
CmsError cmsError = NO_ERROR;
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// If family option is not active, update family data
if (!ToolManagerConfig.FamilyOpt)
{
// Copy only family
DTONewNcFamilyModel newFamily = new DTONewNcFamilyModel();
SupportFunctions.CopyProperties(dtoToolWithFamily, newFamily);
// Update only family data
newFamily = (DTONcFamilyModel)toolsManager.UpdateFamily(dtoToolWithFamily.FamilyId, newFamily);
}
// Update database tool Tool
DbNcToolModel dbTool = toolsManager.UpdateTool(toolId, newTool);
// Populate updated tool with offset data
cmsError = GetToolOffsets(dbTool, ref toolWithOffsets);
if (cmsError.IsError())
{
dbContextTransaction.Rollback();
return cmsError;
}
bool startIsActive = false;
// Check if tool is loaded into a shank
if (dbTool.ShankId != null)
{
// Check if shank is loaded into magazine
DbNcShankModel shank = toolsManager.FindShankWithTools(dbTool.ShankId.Value);
if (shank.MagazineId != null)
{
startIsActive = true;
// Create backup of data stored on the NC and block memory/files accesses
cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
// If family option is not active, update NC data
//if (!ToolManagerConfig.FamilyOpt)
//{
// Update Nc families
cmsError = UpdateNcFamily(toolsManager);
if (cmsError.IsError())
ManageErrorAndTransaction(cmsError, dbContextTransaction, true);
//}
// Update tool
cmsError = UpdateNcTools(toolsManager);
}
}
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return NO_ERROR;
}
}
}
public CmsError UpdateNcTools(NcToolManagerController toolsManager = null)
{
if (toolsManager == null)
toolsManager = new NcToolManagerController();
List<NcShankModel> shanks = toolsManager
.FindShanks()
.Where(x => x.MagazineId != null)
.Select(x => (NcShankModel)x)
.ToList();
// Get tools
List<NcToolModel> tools = toolsManager
.FindTools()
.Select(x => (NcToolModel)x)
.Where(x => shanks.Any(y => y.ShankId == x.ShankId)) // Find only mounted tools
.ToList();
// Update tools
return numericalControl.TOOLS_WUpdateTools(tools);
}
public CmsError UpdateOffset(short offsetId, OffsetModel offsetData)
{
return numericalControl.TOOLS_WOffset(offsetId, ref offsetData);
}
public CmsError UpdateToolOffsetId(int toolId, int positionId, short offsetId, out DTONcToolModel toolWithOffsets)
{
toolWithOffsets = new DTONcToolModel();
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// Update database tool Tool
DbNcToolModel dbTool = toolsManager.UpdateToolOffset(toolId, positionId, offsetId);
// Populate updated tool with offset data
CmsError cmsError = GetToolOffsets(dbTool, ref toolWithOffsets);
if (cmsError.IsError())
{
dbContextTransaction.Rollback();
return cmsError;
}
bool startIsActive = false;
// Check if tool is loaded into a shank
if (dbTool.ShankId != null)
{
// Check if shank is loaded into magazine
DbNcShankModel shank = toolsManager.FindShankWithTools(dbTool.ShankId.Value);
if (shank.MagazineId != null)
{
startIsActive = true;
// Create backup of data stored on the NC and block file accesses
cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
// R tool
cmsError = UpdateNcTools(toolsManager);
}
}
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return NO_ERROR;
}
}
}
public CmsError DeleteNcTool(DbNcToolModel tool)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
if (!ToolManagerConfig.FamilyOpt)
{
DbNcFamilyModel fam = toolsManager.FindFamily(tool.FamilyId);
// Check if family is connected to other tools
if (fam != null && fam.Tools.Count() == 1)
{
toolsManager.DeleteFamily(fam.FamilyId);
}
}
DbNcShankModel shank = null;
if (!ToolManagerConfig.ShankOpt && tool.ShankId != null)
{
// If option is active find & delete tool shank
shank = toolsManager.FindShankWithTools(tool.ShankId.Value);
toolsManager.DeleteNcShank(shank.ShankId);
}
// Delete db tool
toolsManager.DeleteTool(tool.ToolId);
bool startIsActive = false;
CmsError cmsError = NO_ERROR;
if (tool.ShankId != null && shank != null)
{
if (shank.MagazineId != null)
{
startIsActive = true;
// Create backup of data stored on the NC and block file accesses
cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
// Update Nc data
cmsError = UpdateNcTools(toolsManager);
}
}
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
}
}
public CmsError UpdateShank(int shankId, DTONewNcShankModel dtoShank, out DTONcShankModel shank)
{
shank = new DTONcShankModel();
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
bool startIsActive = false;
CmsError cmsError = NO_ERROR;
// Update db data
shank = (DTONcShankModel)toolsManager.UpdateShank(shankId, dtoShank);
if (shank.MagazineId != null)
{
startIsActive = true;
// Create backup of data stored on the NC and block file accesses
cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
// Update nc data
cmsError = UpdateNcShanks(toolsManager);
}
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
}
}
public CmsError DeleteNcShank(int shankId)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
CmsError cmsError = NO_ERROR;
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// Delete database shank
DbNcShankModel deletedShank = toolsManager.DeleteNcShank(shankId);
bool startIsActive = false;
if (deletedShank.MagazineId != null)
{
startIsActive = true;
// Create backup of data stored on the NC and block file accesses
cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
// Update nc data
cmsError = UpdateNcShanks(toolsManager);
}
ManageErrorAndTransaction(cmsError, dbContextTransaction, startIsActive);
return cmsError;
}
}
}
private CmsError UpdateNcShanks(NcToolManagerController toolsManager)
{
// Get mounted shanks
List<NcShankModel> shanks = toolsManager
.FindShanks()
.Where(x => x.MagazineId != null)
.Select(x => (NcShankModel)x)
.ToList();
// Update nc data
return numericalControl.TOOLS_WUpdateShanks(shanks);
}
public DTONcFamilyModel AddFamily(DTONcFamilyModel family)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
return (DTONcFamilyModel)toolsManager.AddFamily(family);
}
}
public CmsError UpdateFamily(int familyId, DTONewNcFamilyModel family, out DTONcFamilyModel newFamily)
{
newFamily = new DTONcFamilyModel();
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// Update db family
newFamily = (DTONcFamilyModel)toolsManager.UpdateFamily(familyId, family);
// Create backup of data stored on the NC and block file accesses
CmsError cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, true);
return cmsError;
}
// Update Nc families
cmsError = UpdateNcFamily(toolsManager);
ManageErrorAndTransaction(cmsError, dbContextTransaction, true);
return cmsError;
}
}
}
public CmsError DeleteNcFamily(int famId)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (var dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// Create backup of data stored on the NC and block file accesses
CmsError cmsError = numericalControl.TOOLS_WStartEditData();
if (cmsError.IsError())
return cmsError;
// Check if shank opt is disabled
if (!ToolManagerConfig.ShankOpt)
{
// If the relationship is 1:1 (tool:shank) i have to remove shanks manually
// Tools are deleted thanks to foreign keys constraint
List<DbNcShankModel> shanks = toolsManager.FindShanksByFamilyId(famId);
foreach (var shank in shanks)
{
if (shank != null)
toolsManager.DeleteNcShank(shank.ShankId);
}
}
toolsManager.DeleteFamily(famId);
// Update Nc families
cmsError = UpdateNcFamily(toolsManager);
ManageErrorAndTransaction(cmsError, dbContextTransaction, true);
return cmsError;
}
}
}
private CmsError UpdateNcFamily(NcToolManagerController toolsManager)
{
// Get mounted shanks
List<NcShankModel> shanks = toolsManager
.FindShanks()
.Where(x => x.MagazineId != null)
.Select(x => (NcShankModel)x)
.ToList();
// Get tools
List<NcToolModel> tools = toolsManager
.FindTools()
.Select(x => (NcToolModel)x)
.Where(x => shanks.Any(y => y.ShankId == x.ShankId)) // Find only mounted tools
.ToList();
List<NcFamilyModel> families = toolsManager
.FindFamilies()
.Select(x => (NcFamilyModel)x)
.Where(x => tools.Any(y => y.FamilyId == x.FamilyId)) // Find only families of mounted tools
.ToList();
// Update nc families
return numericalControl.TOOLS_WUpdateFamilies(families);
}
public CmsError UpdateMagazinePosition(DbNcMagazinePositionModel dbPos, DTONcMagazinePositionModel dtoPos, out DTONcMagazinePositionModel magPos)
{
magPos = new DTONcMagazinePositionModel();
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
using (DbContextTransaction dbContextTransaction = toolsManager.dbCtx.Database.BeginTransaction())
{
// Create backup of data stored on the NC and block file accesses
CmsError cmsError = StartEditData();
if (cmsError.IsError())
{
ManageErrorAndTransaction(cmsError, dbContextTransaction, true);
return cmsError;
}
// Update database data
magPos = (DTONcMagazinePositionModel)toolsManager.UpdatePosition(dbPos, dtoPos);
// Get magazines positions
List<NcMagazinePositionModel> positions = toolsManager.FindMagazinesPositions()
.Select(x => (NcMagazinePositionModel)x)
.ToList();
// Update Nc data
cmsError = numericalControl.TOOLS_WUpdateMagazinePositions(positions);
ManageErrorAndTransaction(cmsError, dbContextTransaction, true);
return cmsError;
}
}
}
private void ManageErrorAndTransaction(CmsError cmsError, DbContextTransaction dbContextTransaction, bool ncStartIsActive)
{
// Check cmsError, manage transaction and if startIsActive = true manage Nc backup created with TOOLS_WStartEditData()
if (cmsError.IsError())
{
// Close transaction
dbContextTransaction.Rollback();
// Restore backup
if (ncStartIsActive)
numericalControl.TOOLS_WRestoreBackup();
}
else
{
// Close transaction
dbContextTransaction.Commit();
// Stop editing ncData
if (ncStartIsActive)
numericalControl.TOOLS_WStopEditData();
}
}
public DTONcShankModel LoadIntoShank(DbNcToolModel tool, short shankId)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
return toolsManager.LoadToolIntoShank(tool, shankId);
}
}
public DTONcShankModel UnloadFromShank(DbNcToolModel tool)
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
return toolsManager.UnloadToolFromShank(tool);
}
}
public CmsError SetupNcToolManager()
{
CmsError cmsError = UpdateMagazinePositionConf(out bool newDb);
if (cmsError.IsError())
return cmsError;
cmsError = WriteOption();
if (cmsError.IsError())
return cmsError;
using (NcToolManagerController toolManager = new NcToolManagerController())
{
// If database was empty read data from NC and update database
if (newDb)
{
List<NcToolModel> tools = new List<NcToolModel>();
List<NcFamilyModel> families = new List<NcFamilyModel>();
List<NcShankModel> shanks = new List<NcShankModel>();
// Read data from Nc memory
cmsError = numericalControl.TOOLS_RStoredData(ref tools, ref families, ref shanks);
if (cmsError.IsError())
return cmsError;
// Check if there are data
if (tools.Count() > 0 || families.Count() > 0 || shanks.Count() > 0)
{
// Populate import object
DTOExportToolTableModel exp = new DTOExportToolTableModel()
{
Tools = tools.Select(x => (DbNcToolModel)x).ToList(),
Families = families.Select(x =>
{
var fam = (DbNcFamilyModel)x;
fam.Name = "Fam" + fam.FamilyId.ToString();
return fam;
}).ToList(),
Shanks = shanks.Select(x => (DbNcShankModel)x).ToList()
};
// Import
toolManager.ImportData(exp);
}
}
List<DTONcToolModel> databaseTool = toolManager.GetTools();
bool exist = false;
if (databaseTool != null && databaseTool.Count() > 0)
// Check options consistency with database data
exist = databaseTool.Exists(x =>
(!ToolManagerConfig.FamilyOpt && x.FamilyId != x.Id) || // Check family
(!ToolManagerConfig.ShankOpt && x.ShankId != x.Id) || // Check shanks
(!ToolManagerConfig.OffsetOpt && x.OffsetId1 != x.Id && x.OffsetId2 != null && x.OffsetId3 != null) // Check offsets
);
if (exist)
return OPTION_NOT_CONSISTENT_ERROR;
// Check if there are blocked magazines, and release them
cmsError = RestoreTableLock();
if (cmsError.IsError())
return cmsError;
}
return NO_ERROR;
}
public CmsError UpdateMagazinePositionConf(out bool newDb)
{
newDb = false;
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
// Get database configured positions
List<DbNcMagazinePositionModel> dbPositions = toolsManager.FindMagazinesPositions();
if (dbPositions.Count <= 0)
{
// THe software is using a new database
newDb = true;
CmsError cmsError = GetMagazineConfiguration(out List<NcMagazineConfigModel> config);
if (cmsError.IsError())
return cmsError;
// Setup new positions list in order to be saved in the database
List<DbNcMagazinePositionModel> fromConfigPosition = new List<DbNcMagazinePositionModel>();
foreach (var conf in config)
{
for (byte i = 1; i <= conf.MaxPositions; i++)
{
// Create new position
fromConfigPosition.Add(new DbNcMagazinePositionModel()
{
MagazineId = conf.Id,
PositionId = i,
Disabled = false,
Type = 0
});
}
}
// Update database
toolsManager.SetupMagazinePositions(fromConfigPosition);
return cmsError;
}
return NO_ERROR;
}
}
public CmsError WriteOption()
{
ToolManagerOptionsModel options = new ToolManagerOptionsModel();
SupportFunctions.CopyProperties(ToolManagerConfig, options);
return numericalControl.TOOLS_WOptions(options);
}
public CmsError GetMagazineConfiguration(out List<NcMagazineConfigModel> config)
{
config = new List<NcMagazineConfigModel>();
// Read configuration
return numericalControl.TOOLS_RMagazineConfig(ref config);
}
public CmsError StartEditData()
{
return numericalControl.TOOLS_WStartEditData();
}
public CmsError StopEditData()
{
return numericalControl.TOOLS_WStopEditData();
}
public CmsError StartEditTooling(int magazineId)
{
return numericalControl.TOOLS_WStartEditTooling(magazineId);
}
public CmsError StopEditTooling(int magazineId)
{
CmsError cmsError = UpdateNcToolTable();
if (cmsError.IsError())
return cmsError;
return numericalControl.TOOLS_WStopEditTooling(magazineId);
}
public CmsError TerminateMovementProcedure(MOVEMENT_RESPONSE error)
{
return numericalControl.PLC_WTerminateMovementProcedure(error);
}
public CmsError UpdateNcToolTable()
{
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
// Get mounted shanks
List<NcShankModel> shanks = toolsManager
.FindShanks()
.Where(x => x.MagazineId != null)
.Select(x => (NcShankModel)x)
.ToList();
// Update shanks
CmsError cmsError = numericalControl.TOOLS_WUpdateShanks(shanks);
if (cmsError.IsError())
return cmsError;
// Get magazine positions
List<NcMagazinePositionModel> positions = toolsManager.FindMagazinesPositions()
.Select(x => (NcMagazinePositionModel)x)
.ToList();
// Update positions
cmsError = numericalControl.TOOLS_WUpdateMagazinePositions(positions);
if (cmsError.IsError())
return cmsError;
// Get tools
List<NcToolModel> tools = toolsManager
.FindTools()
.Select(x => (NcToolModel)x)
.Where(x => shanks.Any(y => y.ShankId == x.ShankId)) // Find only mounted tools
.ToList();
// Update tools
cmsError = numericalControl.TOOLS_WUpdateTools(tools);
if (cmsError.IsError())
return cmsError;
// Get families
List<NcFamilyModel> families = toolsManager
.FindFamilies()
.Select(x => (NcFamilyModel)x)
.Where(x => tools.Any(y => y.FamilyId == x.FamilyId)) // Find only families of mounted tools
.ToList();
// Update families
return numericalControl.TOOLS_WUpdateFamilies(families);
}
}
public CmsError GetUpdatedToolsData(out Dictionary<int, byte> updatedStatus, out Dictionary<int, uint> updatedLives)
{
updatedStatus = new Dictionary<int, byte>();
updatedLives = new Dictionary<int, uint>();
return numericalControl.TOOLS_RUpdatedToolsData(ref updatedStatus, ref updatedLives);
}
public CmsError CheckIfShankCanFit(int magazineId, int positionId, DbNcShankModel shankToBeLoaded)
{
CmsError cmsError = GetMagazineConfiguration(out List<NcMagazineConfigModel> magazinesConfig);
if (cmsError.IsError())
return cmsError;
NcMagazineConfigModel magConfig = magazinesConfig.FirstOrDefault(x => x.Id == magazineId);// Get only current magazine config
if (magConfig == null)
return INCORRECT_PARAMETERS_ERROR;
using (NcToolManagerController toolsManager = new NcToolManagerController())
{
List<DbNcToolModel> magazineMountedTools = toolsManager.GetMountedTools();
// Check if there is a tool already mounted the selected position (magazineId, positionId)
var toolAlreadyMounted = magazineMountedTools.FirstOrDefault(x => x.Shank.MagazineId == magazineId && x.Shank.PositionId == positionId);
if (toolAlreadyMounted != null)
return MAGAZINE_POSITION_OCCUPIED_ERROR;
// Get shank occupied space
toolsManager.GetShankMaxSpaceOccupied(shankToBeLoaded.ShankId, out int maxRight, out int maxLeft);
// Check if tool can fit in the position considering other tools
foreach (var mountedTool in magazineMountedTools)
{
// Check if is not the same position && if is different check if the position is on the same magazine
if (mountedTool.Shank.PositionId != positionId && mountedTool.Shank.MagazineId == magazineId)
{
int decPosition, incPosition;
decPosition = incPosition = mountedTool.Shank.PositionId.Value;
// if it is a circular magazine move position before ( for left case ) or after ( right case ) the location you want to mount the tool
if (magConfig.Type != NC_MAGAZINE_TYPE.BOX_MAGAZINE)
{
decPosition = decPosition < positionId ? decPosition + magConfig.MaxPositions : decPosition;
incPosition = incPosition > positionId ? incPosition - magConfig.MaxPositions : incPosition;
}
// Right check
if (positionId < decPosition)
{
if (!(magConfig.Type == NC_MAGAZINE_TYPE.BOX_MAGAZINE && mountedTool.Shank.PositionId == 1))
{
// Calculate left space occupied (with mounted shank)
double leftMounted = decPosition - (mountedTool.Family.LeftSize / 2.0);
// Calculate right space needed (with shank to be loaded)
double rightToBeMount = positionId + (maxRight / 2.0);
if (leftMounted < rightToBeMount)
return MAGAZINE_POSITION_OCCUPIED_ERROR;
}
}
// Left check
if (positionId > incPosition)
{
if (!(magConfig.Type == NC_MAGAZINE_TYPE.BOX_MAGAZINE && mountedTool.Shank.PositionId == magConfig.MaxPositions))
{
// Calculate right space occupied (with mounted shank)
double rightMounted = incPosition + (mountedTool.Family.RightSize / 2.0);
// Calculate left space needed (with shank to be loaded)
double leftToBeMounted = positionId - (maxLeft / 2.0);
if (rightMounted > leftToBeMounted)
return MAGAZINE_POSITION_OCCUPIED_ERROR;
}
}
}
}
}
return NO_ERROR;
}
public CmsError GetNcMagazineStatus(out Dictionary<int, bool> status)
{
status = new Dictionary<int, bool>();
return numericalControl.TOOLS_RMagazineStatus(ref status);
}
public CmsError StartAssistedToolingProcedure(ushort toolId, ushort familyId, ushort shankId, ushort magazineId, ushort positionId, ASSISTED_TOOLING_ACTION action)
{
return numericalControl.PLC_WAssistedToolingCmd(toolId, familyId, shankId, magazineId, positionId, action);
}
public CmsError ReadAssistedToolingProcedure(out DTOAssistedToolingEndValueModel data)
{
data = new DTOAssistedToolingEndValueModel();
AssistedToolingModel tmpData = new AssistedToolingModel();
CmsError cmsError = numericalControl.PLC_RAssistedToolingData(ref tmpData);
if (cmsError.IsError())
return cmsError;
data = new DTOAssistedToolingEndValueModel(tmpData);
return cmsError;
}
public CmsError ReadMovementBetweenMagazines(out DTOMovementBetweenMagazinesModel data)
{
data = new DTOMovementBetweenMagazinesModel();
MovementBetweenMagazinesModel movementData = new MovementBetweenMagazinesModel();
CmsError cmsError = numericalControl.PLC_RToolMovement(ref movementData);
if (cmsError.IsError())
return cmsError;
data = new DTOMovementBetweenMagazinesModel(movementData);
return cmsError;
}
public CmsError TerminateAssistedProcedure(int magazineId, bool writeData)
{
if (writeData)
{
CmsError cmsError = StartEditTooling(magazineId);
if (!cmsError.IsError())
{
// Write tool table new data
cmsError = StopEditTooling(magazineId);
if (!cmsError.IsError())
{
// Close procedure
return numericalControl.PLC_WTerminateAssistedToolingProcedure();
}
}
return cmsError;
}
else
{
return numericalControl.PLC_WTerminateAssistedToolingProcedure();
}
}
public CmsError GetSelfAdaptiveStep(out DTOSelfAdaptiveModel step)
{
step = new DTOSelfAdaptiveModel();
byte intStep = 0;
//Get the value
CmsError cmsError = numericalControl.TOOLS_RAdatpivePathStep(ref intStep);
step.Step = intStep;
return cmsError;
}
public CmsError SetSelfAdaptiveStep(DTOSelfAdaptiveModel step)
{
//Limit Value
if (step.Step > 100)
step.Step = 100;
if (step.Step < 0)
step.Step = 0;
//Set the value
return numericalControl.TOOLS_WAdatpivePathStep(step.Step);
}
public CmsError RestoreTableLock()
{
List<int> ids = new List<int>();
// check if there are magazines blocked by Active previously
CmsError cmsError = numericalControl.TOOLS_RMagazineBlock(ref ids);
if (cmsError.IsError())
return cmsError;
if (ids.Count() > 0)
{
// Update tables
cmsError = StopEditTooling(ids.FirstOrDefault());
if (cmsError.IsError())
return cmsError;
// Free magazines
return numericalControl.TOOLS_WFreeMagazines();
}
return NO_ERROR;
}
}
}