- Creazione lista MACHINING

- STR0002 adeguata a nuovo standard
- MachiningLib.AddNewMachining salva lavorazione in lista MACHINING
- MachiningLib.AddOperations inseriwsce effettivamente lavorazione
This commit is contained in:
andrea.villa
2024-06-07 17:01:16 +02:00
parent 67899a5835
commit cd1f892a6c
3 changed files with 187 additions and 164 deletions
+11 -4
View File
@@ -29,6 +29,7 @@ EgtMdbSave()
-------------------------------------------------------------------------------------------------------------
TOOLS = nil
STRATEGIES = nil
MACHININGS = nil
-------------------------------------------------------------------------------------------------------------
-- *** COSTANTI *** TODO -> DA SPOSTARE IN BEAMDATA???
@@ -825,7 +826,9 @@ end
-------------------------------------------------------------------------------------------------------------
-- esegue le strategie migliori che ha precedentemente scelto
local function ExecPieceFeatures( vProc, Part)
local function CalculateMachinings( vProc, Part)
local bAreAllApplyOk = true
MACHININGS = {}
-- applico le strategie scelte
for i = 1, #vProc do
-- processo tutte le feature attive applicando le lavorazioni
@@ -835,7 +838,7 @@ local function ExecPieceFeatures( vProc, Part)
local StrategyScriptName = Proc.ChosenStrategy.sStrategyId .. '\\' .. Proc.ChosenStrategy.sStrategyId
local StrategyScript = require( StrategyScriptName)
-- eseguo la strategia e si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati
Proc = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy.Parameters)
bAreAllApplyOk, _ = StrategyScript.Make( true, Proc, Part, Proc.ChosenStrategy.Parameters)
end
end
return vProc
@@ -959,13 +962,17 @@ end
vProc = OrderFeatures( vProc)
-- TODO da fare
-- esegue le strategie migliori che ha precedentemente scelto
ExecPieceFeatures( vProc, Part)
MACHININGS = {}
-- esegue le strategie migliori che ha precedentemente scelto e salva le lavorazioni nella lista globale
CalculateMachinings( vProc, Part)
-- TODO riordinare lavorazioni ottimizzando cambio utensile/spezzone ecc..., mantenendo dipendenze definite prima
-- ordino le lavorazioni
-- OrderMachining( vProc, Part)
-- aggiunge effettivamente le lavorazioni
MachiningLib.AddOperations( vProc, Part)
-- TODO da rimuovere o lasciare solo per debug
if EgtGetDebugLevel() >= 3 then
+162 -153
View File
@@ -291,192 +291,201 @@ function MachiningLib.FindChainSaw( Proc, ToolSearchParameters)
end
-------------------------------------------------------------------------------------------------------------
-- funzione per aggiungere una nuova lavorazione
-- TODO da fare
function MachiningLib.AddNewMachining( Proc, Machining)
local nErr
local sErr = ''
-- salva in lista globale la lavorazione appena calcolata
function MachiningLib.AddNewMachining( ProcToAdd, MachiningToAdd)
-- Controllo parametri obbligatori
if not Machining.nType or not Machining.nToolIndex or not Machining.Geometry or not Proc.id then
return false, sErr
if not MachiningToAdd.nType or not MachiningToAdd.nToolIndex or not MachiningToAdd.Geometry or not ProcToAdd.id then
return false
end
-- Drilling
if Machining.nType == MCH_MY.DRILLING then
Machining.sTypeName = 'Drill_'
if MachiningToAdd.nType == MCH_MY.DRILLING then
MachiningToAdd.sTypeName = 'Drill_'
-- Milling
elseif Machining.nType == MCH_MY.MILLING then
elseif MachiningToAdd.nType == MCH_MY.MILLING then
-- se utensile lama
if TOOLS[Machining.nToolIndex].sFamily == 'SAWBLADE' then
Machining.sTypeName = 'Cut_'
if TOOLS[MachiningToAdd.nToolIndex].sFamily == 'SAWBLADE' then
MachiningToAdd.sTypeName = 'Cut_'
else
Machining.sTypeName = 'Mill_'
MachiningToAdd.sTypeName = 'Mill_'
end
-- Pocketing
elseif Machining.nType == MCH_MY.POCKETING then
Machining.sTypeName = 'Pocket_'
elseif MachiningToAdd.nType == MCH_MY.POCKETING then
MachiningToAdd.sTypeName = 'Pocket_'
-- Mortising
elseif Machining.nType == MCH_MY.MORTISING then
Machining.sTypeName = 'ChSaw_'
elseif MachiningToAdd.nType == MCH_MY.MORTISING then
MachiningToAdd.sTypeName = 'ChSaw_'
end
-- se nome non definito, assegno alla lavorazioen un nome standard
if not Machining.sOperationName then
Machining.sOperationName = Machining.sTypeName .. ( EgtGetName( Proc.id) or tostring( Proc.id)) .. '_' .. tostring( Machining.idFaceToMachine)
if not MachiningToAdd.sOperationName then
MachiningToAdd.sOperationName = MachiningToAdd.sTypeName .. ( EgtGetName( ProcToAdd.id) or tostring( ProcToAdd.id)) .. '_' .. tostring( MachiningToAdd.idFaceToMachine)
end
if not Machining.sToolName then
Machining.sToolName = TOOLS[Machining.nToolIndex].sName
if not MachiningToAdd.sToolName then
MachiningToAdd.sToolName = TOOLS[MachiningToAdd.nToolIndex].sName
end
local MachiningAppo = {}
MachiningAppo.Proc = ProcToAdd
MachiningAppo.Machining = MachiningToAdd
table.insert( MACHININGS, MachiningAppo)
return true
end
-- creazione lavorazione
local nOperationId = EgtCreateMachining( Machining.sOperationName, Machining.nType, Machining.sToolName)
-------------------------------------------------------------------------------------------------------------
-- funzione per aggiungere una nuova lavorazione
function MachiningLib.AddOperations( vProc, Part)
local nErr
local sErr = ''
if nOperationId then
-- impostazione geometria
EgtSetMachiningGeometry( Machining.Geometry)
for i = 1, #MACHININGS do
-- creazione lavorazione
local nOperationId = EgtCreateMachining( MACHININGS[i].Machining.sOperationName, MACHININGS[i].Machining.nType, MACHININGS[i].Machining.sToolName)
-- impostazione parametri lavorazione
if Machining.sDepth then
EgtSetMachiningParam( MCH_MP.DEPTH_STR, Machining.sDepth)
end
if Machining.bInvert then
EgtSetMachiningParam( MCH_MP.INVERT, Machining.bInvert)
end
if Machining.nWorkside then
EgtSetMachiningParam( MCH_MP.WORKSIDE, Machining.nWorkside)
end
if Machining.nFaceuse then
EgtSetMachiningParam( MCH_MP.FACEUSE, Machining.nFaceuse)
end
if Machining.nSCC then
EgtSetMachiningParam( MCH_MP.SCC, Machining.nSCC)
end
if Machining.bToolInvert then
EgtSetMachiningParam( MCH_MP.TOOLINVERT, Machining.bToolInvert)
end
if Machining.sBlockedAxis then
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, Machining.sBlockedAxis)
end
if Machining.sInitialAngles then
EgtSetMachiningParam( MCH_MP.INITANGS, Machining.sInitialAngles)
end
if Machining.nHeadSide then
EgtSetMachiningParam( MCH_MP.HEADSIDE, Machining.nHeadSide)
end
if Machining.nSubType then
EgtSetMachiningParam( MCH_MP.SUBTYPE, Machining.nSubType)
end
if Machining.dOverlap then
EgtSetMachiningParam( MCH_MP.OVERL, Machining.dOverlap)
end
if nOperationId then
-- impostazione geometria
EgtSetMachiningGeometry( MACHININGS[i].Machining.Geometry)
-- step
if Machining.Steps then
if Machining.Steps.dStepType then
EgtSetMachiningParam( MCH_MP.STEPTYPE, Machining.Steps.dStepType)
-- impostazione parametri lavorazione
if MACHININGS[i].Machining.sDepth then
EgtSetMachiningParam( MCH_MP.DEPTH_STR, MACHININGS[i].Machining.sDepth)
end
if Machining.Steps.dStep then
EgtSetMachiningParam( MCH_MP.STEP, Machining.Steps.dStep)
if MACHININGS[i].Machining.bInvert then
EgtSetMachiningParam( MCH_MP.INVERT, MACHININGS[i].Machining.bInvert)
end
if Machining.Steps.dSideStep then
EgtSetMachiningParam( MCH_MP.SIDESTEP, Machining.Steps.dSideStep)
if MACHININGS[i].Machining.nWorkside then
EgtSetMachiningParam( MCH_MP.WORKSIDE, MACHININGS[i].Machining.nWorkside)
end
if MACHININGS[i].Machining.nFaceuse then
EgtSetMachiningParam( MCH_MP.FACEUSE, MACHININGS[i].Machining.nFaceuse)
end
if MACHININGS[i].Machining.nSCC then
EgtSetMachiningParam( MCH_MP.SCC, MACHININGS[i].Machining.nSCC)
end
if MACHININGS[i].Machining.bToolInvert then
EgtSetMachiningParam( MCH_MP.TOOLINVERT, MACHININGS[i].Machining.bToolInvert)
end
if MACHININGS[i].Machining.sBlockedAxis then
EgtSetMachiningParam( MCH_MP.BLOCKEDAXIS, MACHININGS[i].Machining.sBlockedAxis)
end
if MACHININGS[i].Machining.sInitialAngles then
EgtSetMachiningParam( MCH_MP.INITANGS, MACHININGS[i].Machining.sInitialAngles)
end
if MACHININGS[i].Machining.nHeadSide then
EgtSetMachiningParam( MCH_MP.HEADSIDE, MACHININGS[i].Machining.nHeadSide)
end
if MACHININGS[i].Machining.nSubType then
EgtSetMachiningParam( MCH_MP.SUBTYPE, MACHININGS[i].Machining.nSubType)
end
if MACHININGS[i].Machining.dOverlap then
EgtSetMachiningParam( MCH_MP.OVERL, MACHININGS[i].Machining.dOverlap)
end
end
if Machining.dStartPos then
EgtSetMachiningParam( MCH_MP.STARTPOS, Machining.dStartPos)
end
if Machining.dReturnPos then
EgtSetMachiningParam( MCH_MP.RETURNPOS, Machining.dReturnPos)
end
-- step
if MACHININGS[i].Machining.Steps then
if MACHININGS[i].Machining.Steps.dStepType then
EgtSetMachiningParam( MCH_MP.STEPTYPE, MACHININGS[i].Machining.Steps.dStepType)
end
if MACHININGS[i].Machining.Steps.dStep then
EgtSetMachiningParam( MCH_MP.STEP, MACHININGS[i].Machining.Steps.dStep)
end
if MACHININGS[i].Machining.Steps.dSideStep then
EgtSetMachiningParam( MCH_MP.SIDESTEP, MACHININGS[i].Machining.Steps.dSideStep)
end
end
if Machining.dRadialOffset then
EgtSetMachiningParam( MCH_MP.OFFSR, Machining.dRadialOffset)
end
if Machining.dLongitudinalOffset then
EgtSetMachiningParam( MCH_MP.OFFSL, Machining.dLongitudinalOffset)
end
if MACHININGS[i].Machining.dStartPos then
EgtSetMachiningParam( MCH_MP.STARTPOS, MACHININGS[i].Machining.dStartPos)
end
if MACHININGS[i].Machining.dReturnPos then
EgtSetMachiningParam( MCH_MP.RETURNPOS, MACHININGS[i].Machining.dReturnPos)
end
-- paraemtri attacco
if Machining.LeadIn then
if Machining.LeadIn.nType then
EgtSetMachiningParam( MCH_MP.LEADINTYPE, Machining.LeadIn.nType)
if MACHININGS[i].Machining.dRadialOffset then
EgtSetMachiningParam( MCH_MP.OFFSR, MACHININGS[i].Machining.dRadialOffset)
end
if Machining.LeadIn.dStartAddLength then
EgtSetMachiningParam( MCH_MP.STARTADDLEN, Machining.LeadIn.dStartAddLength)
if MACHININGS[i].Machining.dLongitudinalOffset then
EgtSetMachiningParam( MCH_MP.OFFSL, MACHININGS[i].Machining.dLongitudinalOffset)
end
if Machining.LeadIn.dTangentDistance then
EgtSetMachiningParam( MCH_MP.LITANG, Machining.LeadIn.dTangentDistance)
end
if Machining.LeadIn.dPerpDistance then
EgtSetMachiningParam( MCH_MP.LIPERP, Machining.LeadIn.dPerpDistance)
end
if Machining.LeadIn.dElevation then
EgtSetMachiningParam( MCH_MP.LIELEV, Machining.LeadIn.dElevation)
end
if Machining.LeadIn.dCompLength then
EgtSetMachiningParam( MCH_MP.LICOMPLEN, Machining.LeadIn.dCompLength)
end
end
-- parametri uscita
if Machining.LeadOut then
if Machining.LeadOut.nType then
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, Machining.LeadOut.nType)
end
if Machining.LeadOut.dEndAddLength then
EgtSetMachiningParam( MCH_MP.ENDADDLEN, Machining.LeadOut.dEndAddLength)
end
if Machining.LeadOut.dTangentDistance then
EgtSetMachiningParam( MCH_MP.LOTANG, Machining.LeadOut.dTangentDistance)
end
if Machining.LeadOut.dPerpDistance then
EgtSetMachiningParam( MCH_MP.LOPERP, Machining.LeadOut.dPerpDistance)
end
if Machining.LeadOut.dElevation then
EgtSetMachiningParam( MCH_MP.LOELEV, Machining.LeadOut.dElevation)
end
if Machining.LeadOut.dCompLength then
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, Machining.LeadOut.dCompLength)
end
end
if Machining.dStartSlowLen then
EgtSetMachiningParam( MCH_MP.STARTSLOWLEN, Machining.dStartSlowLen)
end
if Machining.dEndSlowLen then
EgtSetMachiningParam( MCH_MP.ENDSLOWLEN, Machining.dEndSlowLen)
end
if Machining.dThrouAddLen then
EgtSetMachiningParam( MCH_MP.THROUADDLEN, Machining.dThrouAddLen)
end
-- paraemtri attacco
if MACHININGS[i].Machining.LeadIn then
if MACHININGS[i].Machining.LeadIn.nType then
EgtSetMachiningParam( MCH_MP.LEADINTYPE, MACHININGS[i].Machining.LeadIn.nType)
end
if MACHININGS[i].Machining.LeadIn.dStartAddLength then
EgtSetMachiningParam( MCH_MP.STARTADDLEN, MACHININGS[i].Machining.LeadIn.dStartAddLength)
end
if MACHININGS[i].Machining.LeadIn.dTangentDistance then
EgtSetMachiningParam( MCH_MP.LITANG, MACHININGS[i].Machining.LeadIn.dTangentDistance)
end
if MACHININGS[i].Machining.LeadIn.dPerpDistance then
EgtSetMachiningParam( MCH_MP.LIPERP, MACHININGS[i].Machining.LeadIn.dPerpDistance)
end
if MACHININGS[i].Machining.LeadIn.dElevation then
EgtSetMachiningParam( MCH_MP.LIELEV, MACHININGS[i].Machining.LeadIn.dElevation)
end
if MACHININGS[i].Machining.LeadIn.dCompLength then
EgtSetMachiningParam( MCH_MP.LICOMPLEN, MACHININGS[i].Machining.LeadIn.dCompLength)
end
end
-- parametri uscita
if MACHININGS[i].Machining.LeadOut then
if MACHININGS[i].Machining.LeadOut.nType then
EgtSetMachiningParam( MCH_MP.LEADOUTTYPE, MACHININGS[i].Machining.LeadOut.nType)
end
if MACHININGS[i].Machining.LeadOut.dEndAddLength then
EgtSetMachiningParam( MCH_MP.ENDADDLEN, MACHININGS[i].Machining.LeadOut.dEndAddLength)
end
if MACHININGS[i].Machining.LeadOut.dTangentDistance then
EgtSetMachiningParam( MCH_MP.LOTANG, MACHININGS[i].Machining.LeadOut.dTangentDistance)
end
if MACHININGS[i].Machining.LeadOut.dPerpDistance then
EgtSetMachiningParam( MCH_MP.LOPERP, MACHININGS[i].Machining.LeadOut.dPerpDistance)
end
if MACHININGS[i].Machining.LeadOut.dElevation then
EgtSetMachiningParam( MCH_MP.LOELEV, MACHININGS[i].Machining.LeadOut.dElevation)
end
if MACHININGS[i].Machining.LeadOut.dCompLength then
EgtSetMachiningParam( MCH_MP.LOCOMPLEN, MACHININGS[i].Machining.LeadOut.dCompLength)
end
end
-- parametri da settare nelle note di sistema
-- TODO da decidere quali sono le note da salvare qui. Probabilmente tutte quelle relative all'ordine delle lavorazioni
local sSystemNotes = EgtGetMachiningParam( MCH_MP.SYSNOTES)
--if Machining.nMachiningOrder then
-- sSystemNotes = EgtSetValInNotes( sSystemNotes, 'MachiningOrder', Machining.nMachiningOrder)
--end
EgtSetMachiningParam( MCH_MP.SYSNOTES, sSystemNotes)
if MACHININGS[i].Machining.dStartSlowLen then
EgtSetMachiningParam( MCH_MP.STARTSLOWLEN, MACHININGS[i].Machining.dStartSlowLen)
end
if MACHININGS[i].Machining.dEndSlowLen then
EgtSetMachiningParam( MCH_MP.ENDSLOWLEN, MACHININGS[i].Machining.dEndSlowLen)
end
if MACHININGS[i].Machining.dThrouAddLen then
EgtSetMachiningParam( MCH_MP.THROUADDLEN, MACHININGS[i].Machining.dThrouAddLen)
end
-- parametri da settare nelle note utente
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
if Machining.dMaxElev then
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', Machining.dMaxElev)
end
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
-- parametri da settare nelle note di sistema
-- TODO da decidere quali sono le note da salvare qui. Probabilmente tutte quelle relative all'ordine delle lavorazioni
local sSystemNotes = EgtGetMachiningParam( MCH_MP.SYSNOTES)
--if MACHININGS[i].Machining.nMachiningOrder then
-- sSystemNotes = EgtSetValInNotes( sSystemNotes, 'MachiningOrder', MACHININGS[i].Machining.nMachiningOrder)
--end
EgtSetMachiningParam( MCH_MP.SYSNOTES, sSystemNotes)
local bIsApplyOk = MachiningLib.ApplyMachining( true, false)
if not bIsApplyOk then
nErr, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nOperationId, false)
-- parametri da settare nelle note utente
local sUserNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
if MACHININGS[i].Machining.dMaxElev then
sUserNotes = EgtSetValInNotes( sUserNotes, 'MaxElev', MACHININGS[i].Machining.dMaxElev)
end
EgtSetMachiningParam( MCH_MP.USERNOTES, sUserNotes)
local bIsApplyOk = MachiningLib.ApplyMachining( true, false)
if not bIsApplyOk then
nErr, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nOperationId, false)
return false, sErr
end
else
return false, sErr
end
else
return false, sErr
end
return true, sErr
end
return true, sErr
end
-------------------------------------------------------------------------------------------------------------
+14 -7
View File
@@ -91,7 +91,7 @@ local function GetBestPocketingStrategy( Proc)
ToolSearchParameters.dMaxToolDiameter = min( Strategy.Parameters.dMaxCornerRadius * 2, dFaceHeight, dFaceWidth)
-- cerco fresa che può anche non lavorare di testa
elseif Proc.Topology.sName == 'Groove-4-Blind' then
local dFaceWidth = Proc.MainFaces.BottomFaces[1].MainEdges.LongEdges[1].dLength
local dFaceWidth = Proc.MainFaces.BottomFaces[2].MainEdges.BottomEdge.dLength
ToolSearchParameters.sType = 'MILL_NOTIP'
ToolSearchParameters.dMaxToolDiameter = min( Strategy.Parameters.dMaxCornerRadius * 2, dFaceWidth)
elseif Proc.Topology.sName == 'Groove-3-Through' then
@@ -154,7 +154,14 @@ local function GetBestPocketingStrategy( Proc)
Milling = {}
Milling.bIsApplicable = false
if Proc.Topology.sName ~= 'Pocket-5-Blind' then
if Proc.Topology.sName == 'Groove-4-Blind' or Proc.Topology.sName == 'Groove-3-Blind' then
if Proc.Topology.sName == 'Groove-4-Blind' then
ToolSearchParameters.dElevation = Proc.MainFaces.BottomFaces[2].dElevation
ToolSearchParameters.vtToolDirection = Proc.MainFaces.BottomFaces[2].vtN
Milling.vtFaceNormal = Proc.MainFaces.BottomFaces[2].vtN
Milling.idFaceToMachine = Proc.MainFaces.BottomFaces[2].id
Milling.idProc = Proc.id
Milling.dElevation = Proc.MainFaces.BottomFaces[2].dElevation
elseif Proc.Topology.sName == 'Groove-3-Blind' then
ToolSearchParameters.dElevation = Proc.MainFaces.LongFaces[1].dElevation
ToolSearchParameters.vtToolDirection = Proc.MainFaces.LongFaces[1].vtN
Milling.vtFaceNormal = Proc.MainFaces.LongFaces[1].vtN
@@ -340,7 +347,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters)
return false, Strategy.Result
end
local bApplyMachiningOK = true
local bAreAllApplyOk = true
local ToolInfo = {}
local Pocketing = {}
Pocketing.Steps = {}
@@ -439,7 +446,7 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters)
_, vtNSplitFace = EgtSurfTmFacetCenter( vAddId[i], k - 1, GDB_ID.ROOT)
if vtNSplitFace and AreSameVectorApprox( vtNSplitFace, Strategy.Machining[j].vtFaceNormal) then
Pocketing.Geometry = {{ vAddId[i], k - 1}}
bApplyMachiningOK, Strategy.Result.sInfo = MachiningLib.AddNewMachining( Proc, Pocketing)
bAreAllApplyOk = MachiningLib.AddNewMachining( Proc, Pocketing)
break
end
end
@@ -462,15 +469,15 @@ function STR0002.Make( bAddMachining, Proc, Part, CustomParameters)
Pocketing.bToolInvert = true
end
Pocketing.Geometry = {{ Strategy.Machining[i].idProc, Strategy.Machining[i].idFaceToMachine}}
bApplyMachiningOK, Strategy.Result.sInfo = MachiningLib.AddNewMachining( Proc, Pocketing)
bAreAllApplyOk = MachiningLib.AddNewMachining( Proc, Pocketing)
end
end
end
else
bApplyMachiningOK = false
bAreAllApplyOk = false
end
return bApplyMachiningOK, Strategy.Result
return bAreAllApplyOk, Strategy.Result
end
-------------------------------------------------------------------------------------------------------------