1 Commits

+28 -8
View File
@@ -20,6 +20,21 @@ pcall( require, 'EmtGenMachining') -- si fa una require con PCALL perchè la li
-----------------------------------------------------------------------------------------
function OnSpecialLink()
-- non gestite lame con rinvio offsettate. da testare sega a catena
local function GetZRotAx()
local ZSIC = 100 / cos( ClampFrontAngle)
local dToolRadius = EgtIf( EMC.HEAD == 'H1', EgtTdbGetCurrToolParam( MCH_TP.DIAM) / 2, EgtTdbGetCurrToolParam( MCH_TP.LEN))
local dToolLen = EgtIf( EMC.HEAD == 'H1', EgtTdbGetCurrToolParam( MCH_TP.LEN), ChSawLen)
local dRotCenter_ToolTip_Distance = dToolLen + MillOffs
-- calcolo massimo ingombro utensile rispetto al centro di rotazione del mandrino (in caso di lama o utensili con diametro grande)
local dMaxEncumbrance = sqrt( pow( dRotCenter_ToolTip_Distance, 2) + pow( dToolRadius, 2) )
-- calcolo delta Z minimo rispetto alla pinza chiusa (angolo) con utensile che ingombra dMaxEncumbrance
local dClampEncumbrance = ( dMaxEncumbrance / cos( ClampFrontAngle)) - ( MinX1 * tan( ClampFrontAngle)) + ClampSmallH
-- sottrazione mandrino e aggiunta sicurezza
local dZRotAx = ( dClampEncumbrance - MillOffs) + ZSIC
return dZRotAx
end
-- se fresa su testa 1
if EMC.HEAD == 'H1' then
-- se inizio lavorazione con prelievo utensile
@@ -31,17 +46,22 @@ function OnSpecialLink()
local nClId = EgtGetFirstNameInGroup( EMC.NEXTMCHID, 'CL') -- recupero Id del gruppo CL della lavorazione corrente
local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) -- Id del primo gruppo nella lavorazione (P1)
local dAuxMoveCount = EgtGetInfo( nPathId, 'AS#', 'd') or 0 -- numero di movimenti ausiliari
-- recupero quota massima di collegamento
local vtFinalAxLink = EmtGetFinalAxesPos( EMC.PREVMCHID, false) or { 0, 0, 0, 0, 0}
local vtInitAxLink = EmtGetInitialAxesPos( EMC.NEXTMCHID, false) or { 0, 0, 0, 0, 0}
-- se ci sono stati movimenti di pinze vado a una quota sicura
if dAuxMoveCount > 3 then
-- recupero quota massima di collegamento
local dZSecRotAx = 500
-- retrazione
EmtRemoveRise( EMC.PREVMCHID)
EmtAddRise( EMC.PREVMCHID, { EMC.L1p, EMC.L2p, dZSecRotAx, EMC.R1p, EMC.R2p}, 30, 3, 2, 'UniqueRise=1;')
-- approccio
EmtRemoveClimb( EMC.NEXTMCHID)
EmtAddClimb( EMC.NEXTMCHID, { EMC.L1, EMC.L2, dZSecRotAx, EMC.R1, EMC.R2}, 31, 2, 2, 'FirstClimb=1;')
EmtAddClimb( EMC.NEXTMCHID, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
local dZSecRotAx = GetZRotAx()
if vtFinalAxLink[3] < dZSecRotAx or vtInitAxLink[3] < dZSecRotAx then
-- retrazione
EmtRemoveRise( EMC.PREVMCHID)
EmtAddRise( EMC.PREVMCHID, { EMC.L1p, EMC.L2p, dZSecRotAx, EMC.R1p, EMC.R2p}, 30, 3, 2, 'UniqueRise=1;')
-- approccio
EmtRemoveClimb( EMC.NEXTMCHID)
EmtAddClimb( EMC.NEXTMCHID, { EMC.L1, EMC.L2, dZSecRotAx, EMC.R1, EMC.R2}, 31, 2, 2, 'FirstClimb=1;')
EmtAddClimb( EMC.NEXTMCHID, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
end
end
end
-- se motosega