Compare commits

...

20 Commits

Author SHA1 Message Date
andrea.villa 785e4490ea Gestione aggregato flottante completata 2025-01-23 15:52:58 +01:00
andrea.villa 971fcc0c07 Cambio nome parametro creazione utensile 2025-01-14 09:50:49 +01:00
andrea.villa db7cb8c1b1 - Gestione HCING/TCING da riportare nei prossimi common
- Piccola modifica ad aggregato flottante
2025-01-14 08:49:32 +01:00
andrea.villa 80fdaf23f4 Corretta simulazione del cambio utensile in caso di magazzino 2 2025-01-08 11:51:55 +01:00
andrea.villa b832df5767 Merge remote-tracking branch 'origin/master' into NewFloatingAggregate 2025-01-08 08:31:24 +01:00
andrea.villa 2b167ea927 Hotfix - Rimosso forzatura presenza aggregato per BlockHaus 2025-01-07 16:25:11 +01:00
andrea.villa deaac78103 Commit per cambio versione 2025-01-07 14:47:53 +01:00
andrea.villa 5f95d9821e Merge branch 'develop' 2025-01-07 14:47:06 +01:00
andrea.villa 8d7a29dd38 Allineamento con common ver. 2.7a1 2025-01-07 14:45:32 +01:00
andrea.villa 793fe00cc9 Prima versione aggregato flottante 2025-01-07 14:43:07 +01:00
Dario Sassi e3107c9c30 Essetre-FAST :
- piccola modifica a nuovo calcolo step per Vmill.
2024-12-30 13:28:34 +01:00
Dario Sassi 33e5254ba4 Essetre-FAST 2.6l2 :
- riportate modifiche per Vmill e lavorazioni 5assi.
2024-12-23 08:25:33 +01:00
andrea.villa 3aceb8783d Merge branch 'NewAggregateBlockHaus' into develop 2024-12-12 14:58:25 +01:00
andrea.villa dabb95858e Prima versione funzionante gestione aggregato tipo BlockHaus 2024-12-05 12:47:04 +01:00
andrea.villa 636ce9eb01 Allineamento con common ver. 2.6l1 2024-12-02 08:29:06 +01:00
andrea.villa 306bef076c Allineamento con common ver. 2.6k1 2024-11-12 08:26:27 +01:00
andrea.villa 9499cdb2c4 - Allineamento con Common ver. 2.6j10 2024-10-25 14:37:19 +02:00
andrea.villa a14a637ec1 - Allineamento con Common ver. 2.6j9 2024-10-22 11:21:41 +02:00
andrea.villa b1486a762e - Allineamento con Common ver. 2.6j8
- Aggiunto LEN_SHORT_PART tra i parametri configurabili da TS3
2024-10-21 08:46:47 +02:00
andrea.villa 0ce94917c4 Allineamento con Common ver. 2.6j7 2024-10-18 10:23:37 +02:00
16 changed files with 552 additions and 170 deletions
+3
View File
@@ -8,6 +8,7 @@ local BeamData = {
GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili) GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili)
RIGHT_LOAD = false, -- flag carico da destra RIGHT_LOAD = false, -- flag carico da destra
ROT90 = false, -- flag abilitazione rotazione 90 gradi ROT90 = false, -- flag abilitazione rotazione 90 gradi
ROT180 = true, -- flag abilitazione rotazione 180 gradi
NEWCLAMPING = false, -- flag abilitazione nuovo metodo riposizionamento carrelli NEWCLAMPING = false, -- flag abilitazione nuovo metodo riposizionamento carrelli
FASTCLAMPING= true, -- flag abilitazione riduzione numero riposizionamenti al carico e durante grande trascinamento FASTCLAMPING= true, -- flag abilitazione riduzione numero riposizionamenti al carico e durante grande trascinamento
MIN_WIDTH = 40, -- larghezza minima del grezzo MIN_WIDTH = 40, -- larghezza minima del grezzo
@@ -103,12 +104,14 @@ if EgtExistsFile( sData) then
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS
BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART
BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end
if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end
if Machine.Offsets.MIN_HEIGHT_ADDED_CUTS then BeamData.MIN_HEIGHT_ADDED_CUTS = min( Machine.Offsets.MIN_HEIGHT_ADDED_CUTS, BeamData.MIN_HEIGHT_ADDED_CUTS) end if Machine.Offsets.MIN_HEIGHT_ADDED_CUTS then BeamData.MIN_HEIGHT_ADDED_CUTS = min( Machine.Offsets.MIN_HEIGHT_ADDED_CUTS, BeamData.MIN_HEIGHT_ADDED_CUTS) end
if Machine.Offsets.NEWCLAMPING ~= nil then BeamData.NEWCLAMPING = ( Machine.Offsets.NEWCLAMPING == 1) end if Machine.Offsets.NEWCLAMPING ~= nil then BeamData.NEWCLAMPING = ( Machine.Offsets.NEWCLAMPING == 1) end
if Machine.Offsets.FASTCLAMPING ~= nil then BeamData.FASTCLAMPING = ( Machine.Offsets.FASTCLAMPING == 1) end if Machine.Offsets.FASTCLAMPING ~= nil then BeamData.FASTCLAMPING = ( Machine.Offsets.FASTCLAMPING == 1) end
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
if Machine.Offsets.ROT180 ~= nil then BeamData.ROT180 = ( Machine.Offsets.ROT180 == 1) end
end end
if Machine.Trave then if Machine.Trave then
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
+5 -2
View File
@@ -1532,7 +1532,10 @@ function MyAdjustLinearAxes()
if EMT.REFLOC then if EMT.REFLOC then
local vtE local vtE
if EMT.HEAD ~= 'H3' then -- su NUM aggregati non gestiti
if EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
EmtSetLastError( 1211, "Aggregates not managed")
elseif EMT.HEAD ~= 'H3' then
local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs)) local Len = EMT.TLEN + EgtIf( EMT.HEAD == 'H1', MillOffs, abs( SawOffs))
local LenRef = MillOffs local LenRef = MillOffs
vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef vtE = Vector3d( EMT.EXTR) * Len - Z_AX() * LenRef
@@ -1647,7 +1650,7 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function GetET( sHead, sTcPos, dAxR3) function GetET( sHead, sTcPos, dAxR3)
if sHead == 'H1' then if sHead == 'H1' or sHead == 'H5' or sHead == 'H6' or sHead == 'H7' then
return ' E'..sTcPos return ' E'..sTcPos
elseif sHead == 'H2' then elseif sHead == 'H2' then
return ' ET42' return ' ET42'
+15 -6
View File
@@ -145,7 +145,11 @@ function OnToolData()
local sPos = 'N2' .. tostring(nPos) local sPos = 'N2' .. tostring(nPos)
local sOut = 'L11=' .. EmtLenToString( EMT.SMAX, 3) .. ' L12=' .. EmtLenToString( AngTr1Offs, 1)..' G76H9998.1'..sPos..sPos local sOut = 'L11=' .. EmtLenToString( EMT.SMAX, 3) .. ' L12=' .. EmtLenToString( AngTr1Offs, 1)..' G76H9998.1'..sPos..sPos
EmtOutput( sOut) EmtOutput( sOut)
-- altro non previsto -- emissione dati sega a catena
elseif EMT.HEAD == 'H7' then
local sOut = 'L11='..EgtNumToString( EMT.SMAX, 0)..' L12='..EmtLenToString( ( 154.5), 1)..' G76H9998.1N121N121'
EmtOutput( sOut)
-- altro non previsto
end end
end end
@@ -693,7 +697,7 @@ function OnRapid()
if EMT.HEAD == 'H3' then if EMT.HEAD == 'H3' then
sEL = sEL..EmtLenToString( ( EMT.TDIST or ChSawLen), 3) sEL = sEL..EmtLenToString( ( EMT.TDIST or ChSawLen), 3)
-- se aggregato -- se aggregato
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
sEL = sEL..EmtLenToString( AngTr1Offs, 3) sEL = sEL..EmtLenToString( AngTr1Offs, 3)
-- se testa normale ( H1 or H2) -- se testa normale ( H1 or H2)
else else
@@ -705,7 +709,7 @@ function OnRapid()
if EMT.HEAD == 'H3' then if EMT.HEAD == 'H3' then
sER = sER..EmtLenToString( EMT.TLEN, 3) sER = sER..EmtLenToString( EMT.TLEN, 3)
-- se aggregato -- se aggregato
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
sER = sER..EmtLenToString( EMT.TLEN + AngTr1Len, 3) sER = sER..EmtLenToString( EMT.TLEN + AngTr1Len, 3)
-- se testa normale ( H1 or H2) -- se testa normale ( H1 or H2)
else else
@@ -1017,7 +1021,7 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnArc() function OnArc()
-- con aggregato non si possono fare archi. Deve essere tutto spezzato -- con aggregato non si possono fare archi. Deve essere tutto spezzato
if EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then if EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' then
EmtSetLastError( 1211, "With aggregate, the arcs must be splitted") EmtSetLastError( 1211, "With aggregate, the arcs must be splitted")
end end
@@ -1642,11 +1646,16 @@ function MyAdjustLinearAxes()
local LenRef = MillOffs local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtAux * LenAux - Z_AX() * LenRef vtE = vtAux * LenAux - Z_AX() * LenRef
elseif EMT.HEAD == 'H5' then elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
local LenAux = AngTr1Offs + MillOffs local LenAux = AngTr1Offs + MillOffs
local LenRef = MillOffs local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtAux * LenAux - Z_AX() * LenRef vtE = vtAux * LenAux - Z_AX() * LenRef
elseif EMT.HEAD == 'H7' then
local LenAux = AngTrBHOffs + MillOffs
local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtAux * LenAux - Z_AX() * LenRef
else else
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD) EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end end
@@ -1741,7 +1750,7 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function GetET( sHead, sTcPos, dAxR3) function GetET( sHead, sTcPos, dAxR3)
if sHead == 'H1' or sHead == 'H5' or sHead == 'H6' then if sHead == 'H1' or sHead == 'H5' or sHead == 'H6' or sHead == 'H7' then
return ' E'..sTcPos return ' E'..sTcPos
elseif sHead == 'H2' then elseif sHead == 'H2' then
return ' ET42' return ' ET42'
+15 -2
View File
@@ -151,7 +151,12 @@ function OnToolData()
local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) .. local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3) ' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
ParkLine( sOut) ParkLine( sOut)
-- altro non previsto -- emissione dati sega a catena
elseif EMT.HEAD == 'H7' then
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
ParkLine( sOut)
-- altro non previsto
else else
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD) EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end end
@@ -1640,12 +1645,18 @@ function MyAdjustLinearAxes()
local LenRef = MillOffs local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtAux * LenAux - Z_AX() * LenRef vtE = vtAux * LenAux - Z_AX() * LenRef
elseif EMT.HEAD == 'H5' then elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
local Len = EMT.TLEN + AngTr1Len local Len = EMT.TLEN + AngTr1Len
local LenAux = MillOffs + AngTr1Offs local LenAux = MillOffs + AngTr1Offs
local LenRef = MillOffs local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2) local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
elseif EMT.HEAD == 'H7' then
local Len = EMT.TLEN + AngTrBHLen
local LenAux = MillOffs + AngTrBHOffs
local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
else else
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD) EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end end
@@ -1682,6 +1693,8 @@ function AdjustToolKinematic()
return EgtIf( EMT.EXIT == 1, '11', '12') return EgtIf( EMT.EXIT == 1, '11', '12')
elseif EMT.HEAD == 'H6' then elseif EMT.HEAD == 'H6' then
return EgtIf( EMT.EXIT == 1, '21', '22') return EgtIf( EMT.EXIT == 1, '21', '22')
elseif EMT.HEAD == 'H7' then
return '31'
else else
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD) EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end end
+116 -32
View File
@@ -105,6 +105,7 @@ function OnSimulStart()
AddToCollisionCheck( 'B', 'COLLISION', EMT.COLLOBJ) AddToCollisionCheck( 'B', 'COLLISION', EMT.COLLOBJ)
AddToCollisionCheck( 'C', 'COLLISION', EMT.COLLOBJ) AddToCollisionCheck( 'C', 'COLLISION', EMT.COLLOBJ)
AddToCollisionCheck( 'H5', 'COLLISION', EMT.COLLOBJ) AddToCollisionCheck( 'H5', 'COLLISION', EMT.COLLOBJ)
AddToCollisionCheck( 'H6', 'COLLISION', EMT.COLLOBJ)
AddToolToCollisionCheck( 'H2', 1, EMT.COLLOBJ) AddToolToCollisionCheck( 'H2', 1, EMT.COLLOBJ)
AddToolHolderToCollisionCheck( 'H2', 1, EMT.COLLOBJ) AddToolHolderToCollisionCheck( 'H2', 1, EMT.COLLOBJ)
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4) DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
@@ -152,7 +153,8 @@ function OnSimulDispositionStarting()
EmtUnlinkAllRawPartsFromGroups() EmtUnlinkAllRawPartsFromGroups()
if EMT.PHASE > 1 then if EMT.PHASE > 1 then
if IsStartOrRestPhase( EMT.PHASE) then if IsStartOrRestPhase( EMT.PHASE) then
EgtSetAxisPos( 'T', LoadT) local ParkT = GetParkT()
EgtSetAxisPos( 'T', ParkT)
end end
end end
end end
@@ -211,20 +213,24 @@ function OnSimulDispositionStart()
end end
end end
-- determino la risoluzione dello Zmap -- determino la risoluzione dello Zmap
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
local dTol = 4.71 local dTol = 4.71
if dArea < CoeffVM * 0.15e6 then if EmtGetVMillStep then
dTol = 0.71 dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), 4.71)
elseif dArea < CoeffVM * 0.3e6 then else
dTol = 1.01 local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
elseif dArea < CoeffVM * 0.6e6 then if dArea < 0.075e6 then
dTol = 1.51 dTol = 0.71
elseif dArea < CoeffVM * 1.2e6 then elseif dArea < 0.15e6 then
dTol = 1.97 dTol = 1.01
elseif dArea < CoeffVM * 2.4e6 then elseif dArea < 0.3e6 then
dTol = 2.81 dTol = 1.51
elseif dArea < CoeffVM * 4.8e6 then elseif dArea < 0.6e6 then
dTol = 3.77 dTol = 1.97
elseif dArea < 1.2e6 then
dTol = 2.81
elseif dArea < 2.4e6 then
dTol = 3.77
end
end end
-- creo lo Zmap -- creo lo Zmap
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB) local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
@@ -358,6 +364,8 @@ function OnSimulDispositionStart()
EgtOutText( 'Barra non ruotata') EgtOutText( 'Barra non ruotata')
end end
end end
-- verifico posizione di carico
local ParkT = GetParkT()
-- indice primo grezzo della fase -- indice primo grezzo della fase
local nOrd = GetPhaseOrd( EMT.PHASE) local nOrd = GetPhaseOrd( EMT.PHASE)
-- ricerco vettore movimento per i successivi -- ricerco vettore movimento per i successivi
@@ -365,7 +373,7 @@ function OnSimulDispositionStart()
local nRawId = EgtGetFirstRawPart() local nRawId = EgtGetFirstRawPart()
while nRawId do while nRawId do
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0) vtMove = Vector3d( - ParkT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
break break
end end
nRawId = EgtGetNextRawPart( nRawId) nRawId = EgtGetNextRawPart( nRawId)
@@ -386,6 +394,8 @@ function OnSimulDispositionStart()
end end
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y -- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
else else
-- verifico posizione di carico
local ParkT = GetParkT()
-- indice primo grezzo della fase -- indice primo grezzo della fase
local nOrd = GetPhaseOrd( EMT.PHASE) local nOrd = GetPhaseOrd( EMT.PHASE)
-- ricerco vettore movimento per i successivi -- ricerco vettore movimento per i successivi
@@ -393,7 +403,7 @@ function OnSimulDispositionStart()
local nRawId = EgtGetFirstRawPart() local nRawId = EgtGetFirstRawPart()
while nRawId do while nRawId do
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0) vtMove = Vector3d( - ParkT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
break break
end end
nRawId = EgtGetNextRawPart( nRawId) nRawId = EgtGetNextRawPart( nRawId)
@@ -456,8 +466,10 @@ function OnSimulToolSelect( dPosA)
EMT.TOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM) EMT.TOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM)
-- se non è chiamato da altro script (non c'è parametro) -- se non è chiamato da altro script (non c'è parametro)
if not dPosA then if not dPosA then
-- se attivo Vmill -- se utensile non flottante, abilito per Vmill
SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL) if not EMT.TFLOAT then
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL)
end
-- se attivo Collision Check -- se attivo Collision Check
EMT.SAFEDIST = COLL_SAFE_DIST EMT.SAFEDIST = COLL_SAFE_DIST
if EMT.COLLOBJ then if EMT.COLLOBJ then
@@ -477,8 +489,8 @@ function OnSimulToolSelect( dPosA)
EMT.A1n = 'Y' EMT.A1n = 'Y'
EMT.A2n = 'V' EMT.A2n = 'V'
end end
-- carico utensile se non lama su sua testa o dummy -- carico utensile se non lama
if EMT.HEAD ~= 'H2' and EMT.HEAD ~= 'H4' then if EMT.HEAD ~= 'H2' then
-- se sega a catena, imposto subito angolo scelto per asse virtuale A -- se sega a catena, imposto subito angolo scelto per asse virtuale A
if EMT.HEAD == 'H3' then if EMT.HEAD == 'H3' then
if not dPosA then if not dPosA then
@@ -506,6 +518,9 @@ function OnSimulToolSelect( dPosA)
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0)) EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
end end
EgtSetAxisPos( 'B', 0) EgtSetAxisPos( 'B', 0)
-- se aggregato per fresa tipo blockhaus
elseif EMT.HEAD == 'H7' then
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
end end
-- se punta lunga -- se punta lunga
if EMT.TOTLEN > LONG_TOOL_MINLEN then if EMT.TOTLEN > LONG_TOOL_MINLEN then
@@ -514,6 +529,12 @@ function OnSimulToolSelect( dPosA)
EgtSetAxisPos( 'B', 0) EgtSetAxisPos( 'B', 0)
end end
end end
-- se TC 1
if GetTCSet( EMT.TCPOS) == 1 then
EgtSetAxisPos( 'B', 90)
else
EgtSetAxisPos( 'B', -90)
end
-- breve pausa -- breve pausa
EgtPause( 100) EgtPause( 100)
EgtOutText( '') EgtOutText( '')
@@ -529,9 +550,9 @@ function OnSimulToolDeselect()
-- se prossimo utensile non definito, è disposizione ed esco -- se prossimo utensile non definito, è disposizione ed esco
if EMT.NEXTTOOL == '' then return end if EMT.NEXTTOOL == '' then return end
-- se cambia uscita su rinvio non devo fare alcunché -- se cambia uscita su rinvio non devo fare alcunché
if EMT.HEAD == 'H5' and EMT.NEXTHEAD == 'H5' then return end if ( EMT.HEAD == 'H5' and EMT.NEXTHEAD == 'H5') or ( EMT.HEAD == 'H6' and EMT.NEXTHEAD == 'H6') then return end
-- se sega a catena o rinvio o punta lunga o utensile di grosso diametro, devo cambiare -- se sega a catena o rinvio o punta lunga o utensile di grosso diametro, devo cambiare
if EMT.HEAD == 'H3' or EMT.HEAD == 'H5' or ( EMT.HEAD == 'H1' and ( EMT.TOTLEN > LONG_TOOL_MINLEN or EMT.TOTDIAM > BIG_TOOL_DIAM)) then if EMT.HEAD == 'H3' or EMT.HEAD == 'H5' or EMT.HEAD == 'H6' or EMT.HEAD == 'H7' or ( EMT.HEAD == 'H1' and ( EMT.TOTLEN > LONG_TOOL_MINLEN or EMT.TOTDIAM > BIG_TOOL_DIAM)) then
EgtOutText( 'Tool change in progress...') EgtOutText( 'Tool change in progress...')
-- movimento scarico sega a catena -- movimento scarico sega a catena
if EMT.HEAD == 'H3' then if EMT.HEAD == 'H3' then
@@ -547,9 +568,13 @@ function OnSimulToolDeselect()
end end
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
-- movimento scarico rinvio -- movimento scarico rinvio
elseif EMT.HEAD == 'H5' then elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT) SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
-- movimento scarico aggregato BlockHaus
elseif EMT.HEAD == 'H7' then
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
-- movimento scarico punta lunga su T111 -- movimento scarico punta lunga su T111
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
-- se su cambio utensile T111 -- se su cambio utensile T111
@@ -559,7 +584,11 @@ function OnSimulToolDeselect()
-- altrimenti posizioni standard rastrelliera -- altrimenti posizioni standard rastrelliera
else else
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT) if GetTCSet( EMT.TCPOS) == 1 then
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
else
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
end
end end
-- movimento scarico utensile di grosso diametro (su T111) -- movimento scarico utensile di grosso diametro (su T111)
else else
@@ -573,24 +602,31 @@ function OnSimulToolDeselect()
-- nascondo utensile su testa e lo visualizzo su TcPos -- nascondo utensile su testa e lo visualizzo su TcPos
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN) EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
ShowToolInTcPos( EMT.TCPOS_1, true) ShowToolInTcPos( EMT.TCPOS_1, true)
-- movimento per carico utensile -- movimento per carico utensile
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' then if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' and EMT.NEXTHEAD ~= 'H6' then
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT) SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -90), MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
else else
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT) SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
end end
-- se segue lama, carico utensile di default -- se segue lama, carico utensile di default
if EMT.NEXTHEAD == 'H2' then if EMT.NEXTHEAD == 'H2' then
local sDefTool = GetDefaultToolName() local sDefTool = GetDefaultToolName()
EgtLoadTool( 'H1', 1, sDefTool)
EMT.TOOL_1 = sDefTool EMT.TOOL_1 = sDefTool
EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1) EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1)
-- se TC 1
if GetTCSet( EMT.TCPOS_1) == 1 then
EgtSetAxisPos( 'B', 90)
else
EgtSetAxisPos( 'B', -90)
end
EgtLoadTool( 'H1', 1, sDefTool)
-- lo nascondo sul portautensili -- lo nascondo sul portautensili
ShowToolInTcPos( EMT.TCPOS_1, false) ShowToolInTcPos( EMT.TCPOS_1, false)
end end
EgtOutText( '') EgtOutText( '')
-- deposito utensile se prossimo non lama su sua testa o dummy -- deposito utensile se prossimo non lama su sua testa
elseif EMT.NEXTHEAD ~= 'H2' and EMT.NEXTHEAD ~= 'H4' then elseif EMT.NEXTHEAD ~= 'H2' then
if EMT.NEXTTOOL ~= EMT.TOOL_1 then if EMT.NEXTTOOL ~= EMT.TOOL_1 then
EgtOutText( 'Tool change in progress...') EgtOutText( 'Tool change in progress...')
-- simulo movimento -- simulo movimento
@@ -600,7 +636,7 @@ function OnSimulToolDeselect()
EgtPause( 100) EgtPause( 100)
ShowToolInTcPos( EMT.TCPOS_1, true) ShowToolInTcPos( EMT.TCPOS_1, true)
-- se segue sega a catena -- se segue sega a catena
if EMT.NEXTHEAD == 'H3' or EMT.NEXTHEAD == 'H5' then if EMT.NEXTHEAD == 'H3' or EMT.NEXTHEAD == 'H5' or EMT.NEXTHEAD == 'H6' then
-- se non lama, nascondo l'utensile corrente -- se non lama, nascondo l'utensile corrente
if EMT.HEAD ~= 'H2' then if EMT.HEAD ~= 'H2' then
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF) EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
@@ -751,7 +787,6 @@ function OnSimulMoveStart()
EgtOutText( '') EgtOutText( '')
EMT.MCHFIRST = false EMT.MCHFIRST = false
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1) local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo -- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
if not EMT.LOAD and EMT.MOVE == 0 and EMT.HB > BeamHeightForFixRot and EMT.FLAG2 == 1 then if not EMT.LOAD and EMT.MOVE == 0 and EMT.HB > BeamHeightForFixRot and EMT.FLAG2 == 1 then
-- se motosega mi muovo a X di sicurezza per ruotare -- se motosega mi muovo a X di sicurezza per ruotare
@@ -761,20 +796,59 @@ function OnSimulMoveStart()
end end
EMT.POSTROT = nil EMT.POSTROT = nil
end end
-- se aggregato flottante su inizio attacco va compresso
if EMT.TFLOAT and not EMT.TFLOAT_CMP and EMT.MOVE == 1 and EgtGetName( EMT.MOVEID) == 'LI' then
-- recupero lunghezza
local dOffsL = - EgtGetMachiningParam( MCH_MP.OFFSL)
-- imposto compressione della parte flottante
SetFloatPos( EMT.HEAD, dOffsL)
-- imposto dati utensile in posizione compressa
EmtSetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL, 2, -dOffsL)
-- dichiaro che è compresso (assegnando Id entità di movimento)
EMT.TFLOAT_CMP = EMT.MOVEID
end
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulMoveEnd() function OnSimulMoveEnd()
-- se termine di passata con lama
if EMT.FLAG == 301 then if EMT.FLAG == 301 then
-- rimozione eventuali sfridi -- rimozione eventuali sfridi
ExecRemoveScraps() ExecRemoveScraps()
end end
-- se utensile flottante e movimento di compressione
if EMT.TFLOAT and EMT.MOVEID == EMT.TFLOAT_CMP then
-- verifico ci sia stata collisione tra ghiera flottante (portautensile e pezzo)
if not EMT.TFLOAT_TH_COMPR_COLL then
local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Floating Ring not compressed on approach'
EmtSetLastError( 1222, sErr)
EgtOutLog( 'Error : ' .. sErr, 1)
else
EgtOutLog( 'Floating Ring compressed on approach (MOVEID='..EgtNumToString( EMT.MOVEID)..')', 1)
end
EMT.TFLOAT_TH_COMPR_COLL = nil
end
-- se aggregato flottante su fine uscita va rilasciato
if EMT.TFLOAT and EMT.TFLOAT_CMP and EMT.MOVE == 1 and EgtGetName( EMT.MOVEID) == 'LO' and EgtGetName( EgtGetNext( EMT.MOVEID) or GDB_ID.NULL) ~= 'LO' then
-- reset compressione della parte flottante
SetFloatPos( EMT.HEAD, 0)
-- dichiaro che è rilasciato
EMT.TFLOAT_CMP = nil
end
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSimulCollision() function OnSimulCollision()
-- se prima collisione della lavorazione, la segnalo -- se prima collisione della lavorazione, la segnalo
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
-- speciale per utensile flottante (suo holder contro il grezzo)
if EMT.TFLOAT and EMT.TFLOAT_CMP and EMT.SIMCOBIND == 1002 and EMT.SIMVMID == EMT.VMILL[1] then
if EMT.MOVEID == EMT.TFLOAT_CMP then
EMT.TFLOAT_TH_COMPR_COLL = true
end
return
end
-- standard
local Class = '' local Class = ''
if EMT.SIMCOBIND == 1001 then if EMT.SIMCOBIND == 1001 then
Class = 'T_H1' Class = 'T_H1'
@@ -922,7 +996,7 @@ function ExecUnloading()
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId)) local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
EgtRelocate( vMillId, nLayId) EgtRelocate( vMillId, nLayId)
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 450, -450), 0) local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 450, -450), 0)
if EMT.FALL then vtMove = Vector3d( -500, 0, EgtIf( BD.RIGHT_LOAD, 750, -750)) end if EMT.FALL then vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 500, -500), -750) end
EgtMove( nLayId, vtMove, GDB_RT.GLOB) EgtMove( nLayId, vtMove, GDB_RT.GLOB)
EgtSetLevel( vMillId, GDB_LV.USER) EgtSetLevel( vMillId, GDB_LV.USER)
-- aggiungo gli spigoli -- aggiungo gli spigoli
@@ -1566,6 +1640,16 @@ function GetPhaseRot( nPhase)
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0) return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
end end
---------------------------------------------------------------------
function GetParkT()
local dTmp = EgtGetInfo( EMT.DISPID, 'TPOS', 'd') or EgtGetInfo( EMT.DISPID, 'TPARK', 'd')
if dTmp then
return dTmp
else
return LoadT
end
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- *** END GENERAL *** -- *** END GENERAL ***
--------------------------------------------------------------------- ---------------------------------------------------------------------
+82 -17
View File
@@ -7,6 +7,12 @@ EgtEnableDebug( false)
-- carico librerie -- carico librerie
local BD = require( 'BeamData') local BD = require( 'BeamData')
---------------------------------------------------------------------
-- *** Generic Machinings ***
---------------------------------------------------------------------
pcall( require, 'EmtGenMachining') -- si fa una require con PCALL perchè la libreria è opzionale
---------------------- OnSpecialMoveZup ----------------------------- ---------------------- OnSpecialMoveZup -----------------------------
--------------------------------------------------------------------- ---------------------------------------------------------------------
function OnSpecialMoveZup() function OnSpecialMoveZup()
@@ -33,9 +39,9 @@ local DeltaTol = DELTA_TOL_S
local DELTA_SIC = 1 local DELTA_SIC = 1
local AGG_LOAD = 50 local AGG_LOAD = 50
local MIN_JOIN_VV = EgtClamp( MinJoinVV or 75, 60, 150) local MIN_JOIN_VV = EgtClamp( MinJoinVV or 75, 60, 150)
local MIN_JOIN_SS = EgtClamp( MinJoinSS or 100, 80, 200) local MIN_JOIN_SS = EgtClamp( MinJoinSS or 100, 80, 275)
local MIN_JOIN_LS = EgtClamp( MinJoinLS or 290, 250, 400) local MIN_JOIN_LS = EgtClamp( MinJoinLS or 290, 250, 400)
local MIN_JOIN_SL = EgtClamp( MinJoinSL or 100, 80, 200) local MIN_JOIN_SL = EgtClamp( MinJoinSL or 100, 80, 400)
local MIN_JOIN_LL = EgtClamp( MinJoinLL or 400, 300, 600) local MIN_JOIN_LL = EgtClamp( MinJoinLL or 400, 300, 600)
local MinJoin = MIN_JOIN_SS local MinJoin = MIN_JOIN_SS
local MinOther = abs( MinY) + abs( MaxV) + MinJoin local MinOther = abs( MinY) + abs( MaxV) + MinJoin
@@ -368,6 +374,17 @@ function OnSpecialApplyDisposition()
EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0 EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0
EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0 EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0
-- correggo area non pinzabile in testa o coda in base alle info sulla lavorazione
local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
local dHCING = tonumber( EgtGetValInNotes( sNotes, 'HCING'))
if dHCING then
EMC.HCING = max( dHCING, -50)
end
local dTCING = tonumber( EgtGetValInNotes( sNotes, 'TCING'))
if dTCING then
EMC.TCING = max( dTCING, -50)
end
-- Devo scaricare il pezzo o il grezzo rimasto -- Devo scaricare il pezzo o il grezzo rimasto
-- Posizione trave -- Posizione trave
local dPosT local dPosT
@@ -511,6 +528,17 @@ function OnPostApplyMachining()
local bSplitting = ( sNotes:find( 'Split') ~= nil) local bSplitting = ( sNotes:find( 'Split') ~= nil)
local bPreCut = ( sNotes:find( 'Precut') ~= nil) local bPreCut = ( sNotes:find( 'Precut') ~= nil)
local bCutting = ( sNotes:find( 'Cut') ~= nil) local bCutting = ( sNotes:find( 'Cut') ~= nil)
-- correggo area non pinzabile in testa o coda in base alle info sulla lavorazione
local dHCING = tonumber( EgtGetValInNotes( sNotes, 'HCING'))
if dHCING then
EMC.HCING = max( dHCING, -50)
end
local dTCING = tonumber( EgtGetValInNotes( sNotes, 'TCING'))
if dTCING then
EMC.TCING = max( dTCING, -50)
end
local bUnload = IsEndPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE) local bUnload = IsEndPhase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE)
if bPreSplit or bPreCut then if bPreSplit or bPreCut then
EgtSetInfo( EMC.MCHID, 'IS_PRE', '1') EgtSetInfo( EMC.MCHID, 'IS_PRE', '1')
@@ -635,16 +663,29 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0 EMC.HCING = EgtGetInfo( nCurrRawId, 'HCING', 'd') or 0
EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0 EMC.TCING = EgtGetInfo( nCurrRawId, 'TCING', 'd') or 0
-- correggo area non pinzabile in testa o coda in base alle info sulla lavorazione
local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES)
local dHCING = tonumber( EgtGetValInNotes( sNotes, 'HCING'))
if dHCING then
EMC.HCING = max( dHCING, -50)
end
local dTCING = tonumber( EgtGetValInNotes( sNotes, 'TCING'))
if dTCING then
EMC.TCING = max( dTCING, -50)
end
-- Calcolo dell'ingombro della lavorazione -- Calcolo dell'ingombro della lavorazione
local dDistFront, dDistBack = SpecialCalcMachiningEncumbrance( EMC.MCHID, bPreCut) local dDistFront, dDistBack = SpecialCalcMachiningEncumbrance( EMC.MCHID, bPreCut)
if not dDistFront or not dDistBack then return end if not dDistFront or not dDistBack then return end
local dMaxLenLeft = 0
if bPreSplit or bSplitting then if bPreSplit or bSplitting then
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1) local dDistF, dDistB, dMaxLF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
dDistFront = min( dDistFront, dDistF) dDistFront = min( dDistFront, dDistF)
local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0 local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0
local dBackOther = b3Tot:getDimX() - b3Raw:getDimX() - MinOther - dNextHOVM local dBackOther = b3Tot:getDimX() - b3Raw:getDimX() - MinOther - dNextHOVM
EgtOutLog( 'DistBack='..EgtNumToString( dDistBack)..' OtherBack='..EgtNumToString( dBackOther), 3) EgtOutLog( 'DistBack='..EgtNumToString( dDistBack)..' OtherBack='..EgtNumToString( dBackOther), 3)
dDistBack = min( dDistBack, dBackOther) dDistBack = min( dDistBack, dBackOther)
if bSplitting then dMaxLenLeft = dMaxLF end
elseif bPreCut or bCutting then elseif bPreCut or bCutting then
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1) local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
dDistFront = min( dDistFront, dDistF) dDistFront = min( dDistFront, dDistF)
@@ -709,8 +750,9 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
return false return false
end end
-- eseguo la separazione ( standard o di pezzo ruotato) -- eseguo la separazione ( standard o di pezzo ruotato)
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1), 1)
if not IsMid2Phase( EMC.PHASE + 1) then if not IsMid2Phase( EMC.PHASE + 1) then
vCmd = SpecCalcSplit( b3Raw:getDimX()) vCmd = SpecCalcSplit( b3Raw:getDimX(), dMaxLenLeft)
else else
vCmd = SpecCalcSplitRot( b3Raw:getDimX()) vCmd = SpecCalcSplitRot( b3Raw:getDimX())
end end
@@ -823,6 +865,7 @@ function SpecialCalcPhaseEncumbrance( nPhase)
-- Deve essere la fase finale di lavorazione di un pezzo (già staccato dal resto della trave) -- Deve essere la fase finale di lavorazione di un pezzo (già staccato dal resto della trave)
local dDistFront = EMC.LB local dDistFront = EMC.LB
local dDistBack = EMC.LB local dDistBack = EMC.LB
local dMaxLenLeft = 0
-- Salvo lavorazione e utensile correnti, per ripristinarli alla fine -- Salvo lavorazione e utensile correnti, per ripristinarli alla fine
local nOrigMchId = EgtGetCurrMachining() local nOrigMchId = EgtGetCurrMachining()
local sOrigTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) local sOrigTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
@@ -847,6 +890,9 @@ function SpecialCalcPhaseEncumbrance( nPhase)
if dDistF and dDistB then if dDistF and dDistB then
dDistFront = min( dDistFront, dDistF) dDistFront = min( dDistFront, dDistF)
dDistBack = min( dDistBack, dDistB) dDistBack = min( dDistBack, dDistB)
local dMaxLenL = EMC.LR - dDistF
EgtOutLog( ' MaxLenLeft = ' .. EgtNumToString( dMaxLenL, 1), 3)
dMaxLenLeft = max( dMaxLenLeft, dMaxLenL)
end end
nMchId = EgtGetNextActiveOperation( nMchId) nMchId = EgtGetNextActiveOperation( nMchId)
end end
@@ -855,7 +901,7 @@ function SpecialCalcPhaseEncumbrance( nPhase)
if sOrigTool then EgtTdbSetCurrTool( sOrigTool) end if sOrigTool then EgtTdbSetCurrTool( sOrigTool) end
if sOrigTool and sOrigHead and nOrigExit then EgtSetCalcTool( sOrigTool, sOrigHead, nOrigExit) end if sOrigTool and sOrigHead and nOrigExit then EgtSetCalcTool( sOrigTool, sOrigHead, nOrigExit) end
-- Restituisco gli ingombri trovati -- Restituisco gli ingombri trovati
return dDistFront, dDistBack return dDistFront, dDistBack, dMaxLenLeft
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
@@ -1042,7 +1088,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
if vtArm:getX() > 0.259 then if vtArm:getX() > 0.259 then
dHeadFront = 510 dHeadFront = 510
else else
dHeadFront = EgtIf( vtTool:getZ() > 0.966, 160, 280) dHeadFront = EgtIf( vtTool:getZ() > 0.966, 170, 280)
end end
end end
-- per fresature longitudinali con utensile di fianco -- per fresature longitudinali con utensile di fianco
@@ -1329,10 +1375,17 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function SpecCalcSplit( dLenRaw) function SpecCalcSplit( dLenRaw, dMaxLenLeft)
local vCmd = {} local vCmd = {}
EgtOutLog( ' *[S]', 1) EgtOutLog( ' *[S]', 1)
table.insert( vCmd, { 0, EgtIf( EMC.VDELTA, 'Split', 'Fall')}) local bSplit = ( EMC.VDELTA ~= nil)
local ParkT = LoadT
if bSplit then
if dMaxLenLeft + 100 > LoadT then
ParkT = dMaxLenLeft + 300
end
end
table.insert( vCmd, { 0, EgtIf( bSplit, 'Split', 'Fall')})
-- determino i grezzi da agganciare al carrello Y (sono quelli presenti nella fase successiva dispari) -- determino i grezzi da agganciare al carrello Y (sono quelli presenti nella fase successiva dispari)
local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE) local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE)
local nRawId = EgtGetFirstRawPart() local nRawId = EgtGetFirstRawPart()
@@ -1344,20 +1397,26 @@ function SpecCalcSplit( dLenRaw)
end end
-- riporto il carrello Y al carico con il resto della trave -- riporto il carrello Y al carico con il resto della trave
local dLDelta = EMC.YDELTA - dLenRaw local dLDelta = EMC.YDELTA - dLenRaw
table.insert( vCmd, { 1, 'Y', LoadT + dLDelta}) table.insert( vCmd, { 1, 'Y', ParkT + dLDelta})
table.insert( vCmd, { 21, 0, EMC.VDELTA or 0}) table.insert( vCmd, { 21, 0, EMC.VDELTA or 0})
-- imposto subito Y non più attaccato al trave in lavoro -- imposto subito Y non più attaccato al trave in lavoro
EMC.YDELTA = nil EMC.YDELTA = nil
-- salvo posizione carrello Y in disposizione del pezzo dopo split -- salvo posizione carrello Y in disposizione del pezzo dopo split
local PostDispId = EgtGetPhaseDisposition( EMC.PHASE + 1) local PostDispId = EgtGetPhaseDisposition( EMC.PHASE + 1)
if PostDispId then if PostDispId then
EgtSetInfo( PostDispId, 'YPOS', LoadT + dLDelta) if not bSplit then
EgtSetInfo( PostDispId, 'TPOS', ParkT)
else
EgtRemoveInfo( PostDispId, 'TPOS')
EgtSetInfo( PostDispId, 'TPARK', ParkT)
end
EgtSetInfo( PostDispId, 'YPOS', ParkT + dLDelta)
end end
-- salvo posizione grezzo rimasto e posizione carrello Y nella disposizione iniziale del pezzo succ (prossima fase dispari) -- salvo posizione grezzo rimasto e posizione carrello Y nella disposizione iniziale del pezzo succ (prossima fase dispari)
local NextDispId = EgtGetPhaseDisposition( nNextOddPhase) local NextDispId = EgtGetPhaseDisposition( nNextOddPhase)
if NextDispId then if NextDispId then
EgtSetInfo( NextDispId, 'TPOS', LoadT) EgtSetInfo( NextDispId, 'TPOS', ParkT)
EgtSetInfo( NextDispId, 'YPOS', LoadT + dLDelta) EgtSetInfo( NextDispId, 'YPOS', ParkT + dLDelta)
end end
return vCmd return vCmd
end end
@@ -1544,6 +1603,14 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
local bZmaxOk = EnsureZmax( bZmaxOk, vCmd) local bZmaxOk = EnsureZmax( bZmaxOk, vCmd)
end end
-- ribadisco pinzaggio
if EMC.YDELTA then
table.insert( vCmd, { 11, 1})
end
if EMC.VDELTA then
table.insert( vCmd, { 12, 1})
end
-- reset contatore primo riposizionamento con compensazione lettura laser -- reset contatore primo riposizionamento con compensazione lettura laser
EMC.CNT = nil EMC.CNT = nil
@@ -1575,7 +1642,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- * deve effettivamente spostarsi -- * deve effettivamente spostarsi
-- * non si arriva da gestione passo del pellegrino -- * non si arriva da gestione passo del pellegrino
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente -- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
if ( dYDeltaI - dVDeltaF) >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and if ( dYDeltaI - dVDeltaF) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
( dVDeltaF - dVDeltaI > MinV - dVPosI + MyMinY - dYPosI) then ( dVDeltaF - dVDeltaI > MinV - dVPosI + MyMinY - dYPosI) then
table.insert( vCmd, { 0, 'Direct-V-Y'}) table.insert( vCmd, { 0, 'Direct-V-Y'})
-- se l'altra morsa non era in presa, vado a pinzare il pezzo -- se l'altra morsa non era in presa, vado a pinzare il pezzo
@@ -1654,7 +1721,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL then if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL then
table.insert( vCmd, { 11, 0}) table.insert( vCmd, { 11, 0})
dYPosA = max( MyMinY, dTPosI + dYDeltaF) dYPosA = max( MyMinY, dTPosI + dYDeltaF)
dTPosA = -( dYPosA + dVDeltaF) dTPosA = dYPosA - dYDeltaF
dVPosA = dTPosA + dVDeltaF dVPosA = dTPosA + dVDeltaF
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)}) table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
@@ -1680,7 +1747,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- * deve effettivamente spostarsi -- * deve effettivamente spostarsi
-- * non si arriva da gestione passo del pellegrino -- * non si arriva da gestione passo del pellegrino
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente -- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
elseif ( dYDeltaF - dVDeltaI) >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and elseif ( dYDeltaF - dVDeltaI) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
( dYDeltaF - dYDeltaI < MaxY - dYPosI + MaxV - dVPosI) then ( dYDeltaF - dYDeltaI < MaxY - dYPosI + MaxV - dVPosI) then
table.insert( vCmd, { 0, 'Direct-Y-V'}) table.insert( vCmd, { 0, 'Direct-Y-V'})
-- se l'altra morsa non era in presa, vado a pinzare il pezzo -- se l'altra morsa non era in presa, vado a pinzare il pezzo
@@ -1791,7 +1858,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- compatto al centro -- compatto al centro
if not EMC.YDELTA then if not EMC.YDELTA then
table.insert( vCmd, { 0, 'Compact Y'}) table.insert( vCmd, { 0, 'Compact Y'})
table.insert( vCmd, { 12, 1})
table.insert( vCmd, { 11, 0}) table.insert( vCmd, { 11, 0})
dTPosA = MaxV - dVDeltaI dTPosA = MaxV - dVDeltaI
dVPosA = MaxV dVPosA = MaxV
@@ -1804,7 +1870,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
end end
if not EMC.VDELTA then if not EMC.VDELTA then
table.insert( vCmd, { 0, 'Compact V'}) table.insert( vCmd, { 0, 'Compact V'})
table.insert( vCmd, { 11, 1})
table.insert( vCmd, { 12, 0}) table.insert( vCmd, { 12, 0})
dTPosA = MyMinY - dYDeltaI dTPosA = MyMinY - dYDeltaI
dVPosA = MaxV dVPosA = MaxV
+14 -3
View File
@@ -59,6 +59,7 @@ H5.1=AngTransm.nge
H5.2=AngTransm.nge H5.2=AngTransm.nge
H6.1=AngTransm.nge H6.1=AngTransm.nge
H6.2=AngTransm.nge H6.2=AngTransm.nge
H7.1=AngTransmBH.nge
[Machinings] [Machinings]
Drilling=1 Drilling=1
@@ -67,10 +68,14 @@ Milling=1
Pocketing=1 Pocketing=1
Mortising=1 Mortising=1
Chiseling=0 Chiseling=0
SawRoughing=0
SawFinishing=0
GenMachining=0 GenMachining=0
SurfFinishing=0 SurfRoughing=1
SurfFinishing=1
5AxMilling=1
[5AxMilling]
5AxScript1=5AxProject
5AxScript2=5AxPocketProject
[Machining] [Machining]
InitScript=InitMach.lua InitScript=InitMach.lua
@@ -88,6 +93,12 @@ H2=6615
H3=6616 H3=6616
; Angular transmission ; Angular transmission
H5=6603 H5=6603
; Angular transmission
H6=6603
; Angular transmission
H7=6617
; Floating Aggregate
H8=6619
[SetUp] [SetUp]
Default=Standard Default=Standard
+232 -77
View File
@@ -1,4 +1,4 @@
-- Descrizione macchina Essetre-FAST by EgalTech s.r.l. 2024/03/28 -- Descrizione macchina Essetre-FAST by EgalTech s.r.l. 2024/12/23
-- 2021/12/29 DS ver 2.3l4 Per NUM non va considerato MillOffs negli offset in Z. -- 2021/12/29 DS ver 2.3l4 Per NUM non va considerato MillOffs negli offset in Z.
-- 2022/01/27 DS ver 2.4a2 Modifiche per tagli testa/coda su pezzi alti. -- 2022/01/27 DS ver 2.4a2 Modifiche per tagli testa/coda su pezzi alti.
-- 2022/02/10 DS ver 2.4a3 Ridotto di 10mm pinzaggio con pezzi alti ma sottili. -- 2022/02/10 DS ver 2.4a3 Ridotto di 10mm pinzaggio con pezzi alti ma sottili.
@@ -22,10 +22,10 @@
------------------------------------- -------------------------------------
require( 'EmtGenerator') require( 'EmtGenerator')
EgtEnableDebug( false) EgtEnableDebug( true)
PP_VER = '2.6j7' PP_VER = '2.7a1'
PP_NVER = '2.6.10.7' PP_NVER = '2.7.1.1'
MIN_MACH_VER = '2.5k1' MIN_MACH_VER = '2.5k1'
MACH_NAME = 'Essetre-FAST' MACH_NAME = 'Essetre-FAST'
@@ -71,6 +71,8 @@ SawCOffs = 0
ChSawLen = 90.0 ChSawLen = 90.0
AngTr1Offs = 170 AngTr1Offs = 170
AngTr1Len = 150 AngTr1Len = 150
AngTrBHOffs = 154.5
AngTrBHLen = 90
TurnerOffs = 200.0 TurnerOffs = 200.0
DeltaTabY = 898.0 DeltaTabY = 898.0
DeltaTabZ = -1017.8 + MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4 DeltaTabZ = -1017.8 + MillOffs -- per TPA : -1013.3 + MillOffs -- per NUM : -838.4
@@ -85,9 +87,10 @@ SecondSupport = 0
SpecialBH = false SpecialBH = false
MaxUnloadLen = 0 MaxUnloadLen = 0
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500 BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
CoeffVM = 0.5
NewTopC = true NewTopC = true
SafeXRotAxes = 150 SafeXRotAxes = 150
AggreBlockHaus = true
SecondToolChanger = true
-- leggo e aggiorno con parametri da BeamData -- leggo e aggiorno con parametri da BeamData
if BD then if BD then
@@ -138,6 +141,8 @@ if EgtExistsFile( sData) then
AngTr1Len = Machine.Offsets.OFFSETX_RINV_1 or AngTr1Len AngTr1Len = Machine.Offsets.OFFSETX_RINV_1 or AngTr1Len
--if Machine.Offsets.OFFSETZ_RINV_2 then AngTr2Offs = Machine.Offsets.OFFSETZ_RINV_2 - EgtIf( NumericalControl == 'TPA', MillOffs, 0) end --if Machine.Offsets.OFFSETZ_RINV_2 then AngTr2Offs = Machine.Offsets.OFFSETZ_RINV_2 - EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
--AngTr2Len = Machine.Offsets.OFFSETX_RINV_2 or AngTr2Len --AngTr2Len = Machine.Offsets.OFFSETX_RINV_2 or AngTr2Len
if Machine.Offsets.OFFSETZ_RINV_BH then AngTrBHOffs = Machine.Offsets.OFFSETZ_RINV_BH - EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
AngTrBHLen = Machine.Offsets.OFFSETX_RINV_BH or AngTrBHLen
TurnerOffs = Machine.Offsets.OFFSETRIB or TurnerOffs TurnerOffs = Machine.Offsets.OFFSETRIB or TurnerOffs
if Machine.Offsets.OFFSETX then DeltaTabY = - Machine.Offsets.OFFSETX end if Machine.Offsets.OFFSETX then DeltaTabY = - Machine.Offsets.OFFSETX end
if Machine.Offsets.OFFSETZ then DeltaTabZ = Machine.Offsets.OFFSETZ + EgtIf( NumericalControl == 'TPA', MillOffs, 0) end if Machine.Offsets.OFFSETZ then DeltaTabZ = Machine.Offsets.OFFSETZ + EgtIf( NumericalControl == 'TPA', MillOffs, 0) end
@@ -153,11 +158,17 @@ if EgtExistsFile( sData) then
if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = Machine.Offsets.MIN_JOIN_SL end if Machine.Offsets.MIN_JOIN_SL then MinJoinSL = Machine.Offsets.MIN_JOIN_SL end
if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = Machine.Offsets.MIN_JOIN_LL end if Machine.Offsets.MIN_JOIN_LL then MinJoinLL = Machine.Offsets.MIN_JOIN_LL end
if Machine.Offsets.NEWTOPC then NewTopC = ( Machine.Offsets.NEWTOPC == 1) end if Machine.Offsets.NEWTOPC then NewTopC = ( Machine.Offsets.NEWTOPC == 1) end
if Machine.Offsets.AGGRE_BH then AggreBlockHaus = ( Machine.Offsets.AGGRE_BH == 1) end
if Machine.Offsets.SEC_TC then SecondToolChanger = ( Machine.Offsets.SEC_TC == 1) end
end end
end end
end end
if SpecialBH then SecondSupport = 0 end if SpecialBH then SecondSupport = 0 end
-- compongo i gruppi appartenenti alla base
local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}
if SecondToolChanger then table.insert( sBaseAux, 5, 'BASE/TC2') end
EmtGeneral { EmtGeneral {
File='Essetre-FAST.nge', File='Essetre-FAST.nge',
Offset = Vector3d( 0, 1150.16, -1500.0), Offset = Vector3d( 0, 1150.16, -1500.0),
@@ -171,7 +182,8 @@ EmtGeneral {
local BaseId = EmtBase { local BaseId = EmtBase {
Name = 'Base', Name = 'Base',
Geo='BASE/GEO', Geo='BASE/GEO',
Aux={'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}} Aux = sBaseAux}
local XId = EmtAxis { local XId = EmtAxis {
Name = 'X', Name = 'X',
Parent = 'Base', Parent = 'Base',
@@ -293,21 +305,21 @@ end
-- Eventuale rinvio angolare -- Eventuale rinvio angolare
if SecondSupport >= 3 then if SecondSupport >= 3 then
local H5Id = EmtHead { local H5Id = EmtHead {
Name = 'H5', Name = 'H5',
Parent = 'B', Parent = 'B',
HSet = 'H1', HSet = 'H1',
Type = MCH_HT.MULTI, Type = MCH_HT.MULTI,
ExitNbr = 2, ExitNbr = 2,
Pos1 = Point3d( 0, -AngTr1Len, -AngTr1Offs), Pos1 = Point3d( 0, -AngTr1Len, -AngTr1Offs),
TDir1 = Y_AX(), TDir1 = Y_AX(),
Pos2 = Point3d( 0, AngTr1Len, -AngTr1Offs), Pos2 = Point3d( 0, AngTr1Len, -AngTr1Offs),
TDir2 = -Y_AX(), TDir2 = -Y_AX(),
ADir = Z_AX(), ADir = Z_AX(),
Rot1W = 0.2, Rot1W = 0.2,
Rot2Stroke = { -120, 120}, Rot2Stroke = { -120, 120},
OthColl = { 'H2', 'B/SOLID', 'C/SOLID'}, OthColl = { 'H2', 'B/SOLID', 'C/SOLID'},
Geo = 'H5_HEAD/GEO', Geo = 'H5_HEAD/GEO',
Aux = {'H5_HEAD/SOLID', 'H5_HEAD/COLLISION'}} Aux = {'H5_HEAD/SOLID', 'H5_HEAD/COLLISION'}}
EgtSetInfo( H5Id, 'AGB_TYPE', 2) EgtSetInfo( H5Id, 'AGB_TYPE', 2)
EgtSetInfo( H5Id, 'AGB_DMAX', 240) EgtSetInfo( H5Id, 'AGB_DMAX', 240)
EgtSetInfo( H5Id, 'AGB_ENCH', 44) EgtSetInfo( H5Id, 'AGB_ENCH', 44)
@@ -315,6 +327,23 @@ if SecondSupport >= 3 then
EgtSetInfo( H5Id, 'AGB_MDIR', X_AX()) EgtSetInfo( H5Id, 'AGB_MDIR', X_AX())
EgtSetInfo( H5Id, 'ZMAXONROT', '1,15') EgtSetInfo( H5Id, 'ZMAXONROT', '1,15')
end end
-- Eventuale aggregato per lavorazioni BlockHaus
if AggreBlockHaus then
local H7Id = EmtHead {
Name = 'H7',
Parent = 'B',
HSet = 'H1',
Type = MCH_HT.STD,
Pos = Point3d( AngTrBHLen, 0, -AngTrBHOffs),
TDir = -X_AX(),
ADir = X_AX(),
Rot1W = 0.2,
SolCh = MCH_SCC.ADIR_NEAR,
OthColl = {'H2', 'B/SOLID', 'C/SOLID'},
Geo = 'H7_HEAD/GEO',
Aux = {'H7_HEAD/SOLID', 'H7_HEAD/COLLISION'}}
end
-- Morse -- Morse
local YId = EmtAxis { local YId = EmtAxis {
Name = 'Y', Name = 'Y',
@@ -445,22 +474,83 @@ EmtTcPos {
TDir = -X_AX(), TDir = -X_AX(),
ADir = -Y_AX(), ADir = -Y_AX(),
Geo = 'BASE/T10'} Geo = 'BASE/T10'}
EmtTcPos { if AggreBlockHaus then
Name = 'T11', local TcpSsId = EmtTcPos {
Parent = 'Base', Name = 'T11',
Pos = Point3d( 523.8, 88.0, -877.5),
TDir = -X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T11'}
if not SpecialBH then
EmtTcPos {
Name = 'T101',
Parent = 'Base', Parent = 'Base',
Pos = Point3d( -510.4, 113.2, -160.8), Pos = Point3d( 678.3, -1.963, -877.5),
TDir = X_AX(), TDir = Y_AX(),
ADir = Z_AX(), ADir = -X_AX(),
Geo = 'BASE/T101'} Geo = 'BASE/T121',
Aux = 'BASE/T121_HS'}
else else
EmtTcPos {
Name = 'T11',
Parent = 'Base',
Pos = Point3d( 523.8, 88.0, -877.5),
TDir = -X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T11'}
end
-- ToolChanger 2
if SecondToolChanger then
EmtTcPos {
Name = 'T21',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, 172.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T21'}
EmtTcPos {
Name = 'T22',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, 67.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T22'}
EmtTcPos {
Name = 'T23',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, -37.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T23'}
EmtTcPos {
Name = 'T24',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, -142.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T24'}
EmtTcPos {
Name = 'T25',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, -247.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T25'}
EmtTcPos {
Name = 'T26',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, -352.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T26'}
EmtTcPos {
Name = 'T27',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, -457.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T27'}
EmtTcPos {
Name = 'T28',
Parent = 'Base',
Pos = Point3d( -503.2, 88.0, -562.5),
TDir = X_AX(),
ADir = -Y_AX(),
Geo = 'BASE/T28'}
EmtTcPos { EmtTcPos {
Name = 'T101', Name = 'T101',
Parent = 'Base', Parent = 'Base',
@@ -468,48 +558,66 @@ else
TDir = X_AX(), TDir = X_AX(),
ADir = Z_AX(), ADir = Z_AX(),
Geo = 'BASE/T101S'} Geo = 'BASE/T101S'}
end else
if SecondSupport == 1 then if not SpecialBH then
-- supporto per punta EmtTcPos {
EmtTcPos { Name = 'T101',
Name = 'T111', Parent = 'Base',
Parent = 'Base', Pos = Point3d( -510.4, 113.2, -160.8),
Pos = Point3d( -510.4, 113.2, -329.8), TDir = X_AX(),
TDir = Z_AX(), ADir = Z_AX(),
ADir = X_AX(), Geo = 'BASE/T101'}
Geo = 'BASE/T111'} else
elseif SecondSupport == 2 then EmtTcPos {
-- supporto per mortasatrice Name = 'T101',
local TcpSsId = EmtTcPos { Parent = 'Base',
Name = 'T111', Pos = Point3d( -510.4, 113.2, -1160.8),
Parent = 'Base', TDir = X_AX(),
Pos = Point3d( -510.4, 113.2, -430.8), ADir = Z_AX(),
TDir = X_AX(), Geo = 'BASE/T101S'}
ADir = Z_AX(), end
Geo = 'BASE/T111M'} if SecondSupport == 1 then
EgtSetInfo( TcpSsId, 'Mortiser', true) -- supporto per punta
elseif SecondSupport == 3 then EmtTcPos {
-- supporto per rinvio angolare Name = 'T111',
local TcpSsId = EmtTcPos { Parent = 'Base',
Name = 'T91', Pos = Point3d( -510.4, 113.2, -329.8),
Parent = 'Base', TDir = Z_AX(),
ExitNbr = 2, ADir = X_AX(),
Pos1 = Point3d( -710.4-150, 113.2, -329.8-170), Geo = 'BASE/T111'}
TDir1 = X_AX(), elseif SecondSupport == 2 then
Pos2 = Point3d( -710.4+150, 113.2, -329.8-170), -- supporto per mortasatrice
TDir2 = -X_AX(), local TcpSsId = EmtTcPos {
ADir = Z_AX(), Name = 'T111',
Geo = 'BASE/T91', Parent = 'Base',
Aux = 'BASE/T91_HS'} Pos = Point3d( -510.4, 113.2, -430.8),
end TDir = X_AX(),
if SpecialBH then ADir = Z_AX(),
EmtTcPos { Geo = 'BASE/T111M'}
Name = 'T111', EgtSetInfo( TcpSsId, 'Mortiser', true)
Parent = 'Base', elseif SecondSupport == 3 then
Pos = Point3d( -810.4, 113.2, -329.8), -- supporto per rinvio angolare
TDir = Y_AX(), local TcpSsId = EmtTcPos {
ADir = X_AX(), Name = 'T91',
Geo = 'BASE/T111S'} Parent = 'Base',
ExitNbr = 2,
Pos1 = Point3d( -710.4-150, 113.2, -329.8-170),
TDir1 = X_AX(),
Pos2 = Point3d( -710.4+150, 113.2, -329.8-170),
TDir2 = -X_AX(),
ADir = Z_AX(),
Geo = 'BASE/T91',
Aux = 'BASE/T91_HS'}
end
if SpecialBH then
EmtTcPos {
Name = 'T111',
Parent = 'Base',
Pos = Point3d( -810.4, 113.2, -329.8),
TDir = Y_AX(),
ADir = X_AX(),
Geo = 'BASE/T111S'}
end
end end
-- Aggiusto posizioni geometriche -- Aggiusto posizioni geometriche
@@ -596,6 +704,52 @@ function GetPVLight()
return ( EgtGetInfo( PVLightId, 'On') == '1') return ( EgtGetInfo( PVLightId, 'On') == '1')
end end
---------------------------------------------------------------------
---------------------------- Cambio Utensile ------------------------
function GetTCSet( sTcPos)
-- TC 1
if sTcPos == 'T1' or sTcPos == 'T2' or sTcPos == 'T3' or sTcPos == 'T4' or sTcPos == 'T5' or
sTcPos == 'T6' or sTcPos == 'T7' or sTcPos == 'T8' or sTcPos == 'T9' or sTcPos == 'T10' or sTcPos == 'T11' then
return 1
-- TC 2
elseif sTcPos == 'T21' or sTcPos == 'T22' or sTcPos == 'T23' or sTcPos == 'T24' or
sTcPos == 'T25' or sTcPos == 'T26' or sTcPos == 'T27' or sTcPos == 'T28' then
return 2
end
end
---------------------------------------------------------------------
-- Funzione per impostare la posizione del rinvio flottante
function SetFloatPos( sHead, dPos)
-- recupero Id testa
local nHeadId = EgtGetHeadId( sHead)
if not nHeadId then return false end
-- se ci sono entità flottanti nel ToolHolder
local nRefId = EgtGetFirstNameInGroup( nHeadId, '_T1')
local vtTool = EgtFR( nRefId, GDB_ID.ROOT):getVersZ()
local nObjId = EgtGetFirstGroupInGroup( EgtGetFirstNameInGroup( nHeadId, 'T1'))
local FloatEntities = EgtGetInfoInGroup( nObjId, 'Float')
if FloatEntities and #FloatEntities > 0 then
-- il porta-utensile flottante non può comprimersi più di 10mm
if dPos > 10 then
local sErr = 'Floating Ring compressed more than 10mm'
EmtSetLastError( 1222, sErr)
EgtOutLog( 'Error : ' .. sErr, 1)
end
local dFloat = EgtGetInfo( FloatEntities[1], 'Float', 'd')
if abs( dPos - dFloat) > 10 * GEO.EPS_SMALL then
local vtMove = ( dPos - dFloat) * vtTool
-- sposto tutte le entità flottanti
for i = 1, #FloatEntities do
EgtMove( FloatEntities[i], vtMove, GDB_RT.GLOB)
EgtSetInfo( FloatEntities[i], 'Float', dPos)
end
end
return true
end
return false
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- Funzione per resettare tutte le attivazioni della macchina -- Funzione per resettare tutte le attivazioni della macchina
function OnResetMachine() function OnResetMachine()
@@ -603,6 +757,7 @@ function OnResetMachine()
EmtUnlinkAllFixturesFromGroups() EmtUnlinkAllFixturesFromGroups()
SetPYLight( false) SetPYLight( false)
SetPVLight( false) SetPVLight( false)
SetFloatPos( 'H1', 0)
-- nascondo Vmill -- nascondo Vmill
local nRawId = EgtGetFirstRawPart() local nRawId = EgtGetFirstRawPart()
while nRawId do while nRawId do
BIN
View File
Binary file not shown.
+9 -11
View File
@@ -25,13 +25,16 @@
[Chiseling] [Chiseling]
[SawRoughing]
[SawFinishing]
[GenMachining] [GenMachining]
0=l,LinTol,0.1
1=l,MaxLen,2 [SurfRoughing]
[SurfFinishing]
0=b,SkipMaxDown,1
[5AxMilling]
0=l,LinTol,0.01
1=l,MaxLen,10
2=s,Type,ZigZag 2=s,Type,ZigZag
3=d,SideAng,90 3=d,SideAng,90
4=l,Step,10 4=l,Step,10
@@ -43,8 +46,3 @@
10=l,LoOrth,0 10=l,LoOrth,0
11=l,LoElev,0 11=l,LoElev,0
12=b,DirFromGuide,1 12=b,DirFromGuide,1
[SurfRoughing]
[SurfFinishing]
0=b,SkipMaxDown,1
+26 -12
View File
@@ -24,7 +24,7 @@ local INVALIDPOS = ""
local POS = "Pos" local POS = "Pos"
-- Geom Set -- Geom Set
local GS = {} local GS = {{"H1", "H7", "H8"}}
-- Configurazione posizioni -- Configurazione posizioni
local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"}, local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
@@ -40,20 +40,34 @@ local PositionTable={{Pos = "Pos1", TcPos = "T1", Head = "H1", Group = "G1"},
{Pos = "Pos11", TcPos = "T11", Head = "H1", Group = "G1"}, {Pos = "Pos11", TcPos = "T11", Head = "H1", Group = "G1"},
{Pos = "Pos12", TcPos = "T42", Head = "H2", Group = "G1"}, {Pos = "Pos12", TcPos = "T42", Head = "H2", Group = "G1"},
{Pos = "Pos13", TcPos = "T101", Head = "H3", Group = "G2"}} {Pos = "Pos13", TcPos = "T101", Head = "H3", Group = "G2"}}
local SecSuppId = EgtGetTcPosId( 'T111')
if SecSuppId then local IsTC2Active = ( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'TC2') ~= nil)
local bMortiser = EgtGetInfo( SecSuppId, 'Mortiser', 'b') if IsTC2Active then
if bMortiser then local PositionTableTC2={{Pos = "Pos14", TcPos = "T21", Head = "H1", Group = "G3"},
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H3", Group = "G2"}) {Pos = "Pos15", TcPos = "T22", Head = "H1", Group = "G3"},
else {Pos = "Pos16", TcPos = "T23", Head = "H1", Group = "G3"},
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H1", Group = "G2"}) {Pos = "Pos17", TcPos = "T24", Head = "H1", Group = "G3"},
{Pos = "Pos18", TcPos = "T25", Head = "H1", Group = "G3"},
{Pos = "Pos19", TcPos = "T26", Head = "H1", Group = "G3"},
{Pos = "Pos20", TcPos = "T27", Head = "H1", Group = "G3"},
{Pos = "Pos21", TcPos = "T28", Head = "H1", Group = "G3"}}
EgtJoinTables( PositionTable, PositionTableTC2)
else
local SecSuppId = EgtGetTcPosId( 'T111')
if SecSuppId then
local bMortiser = EgtGetInfo( SecSuppId, 'Mortiser', 'b')
if bMortiser then
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H3", Group = "G2"})
else
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T111", Head = "H1", Group = "G2"})
end
end
if EgtGetHeadId( 'H5') then
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T91", Head = "H5", Group = "G2"})
end end
end end
if EgtGetHeadId( 'H5') then
table.insert( PositionTable, {Pos = "Pos14", TcPos = "T91", Head = "H5", Group = "G2"})
end
local UsePositionHead = true local UsePositionHead = false
local function IsInGeomSet( ToolHead, PosHead) local function IsInGeomSet( ToolHead, PosHead)
for GsIndex = 1, #GS do for GsIndex = 1, #GS do
Binary file not shown.
Binary file not shown.
+2
View File
@@ -27,6 +27,7 @@
2=d,SIDESTEP 2=d,SIDESTEP
3=d,SIDEDEPTH 3=d,SIDEDEPTH
4=s,DOUBLE 4=s,DOUBLE
5=dr,TOOL_OVERHANG
[MILL_NOTIP] [MILL_NOTIP]
0=th,TH, 0=th,TH,
@@ -34,6 +35,7 @@
2=d,SIDESTEP 2=d,SIDESTEP
3=d,SIDEDEPTH 3=d,SIDEDEPTH
4=s,DOUBLE 4=s,DOUBLE
5=dr,TOOL_OVERHANG
[MORTISE_STD] [MORTISE_STD]
0=b,MORTISE 0=b,MORTISE
+25
View File
@@ -1,5 +1,30 @@
==== Common_FAST Update Log ==== ==== Common_FAST Update Log ====
Versione 2.7a1 (07/01/2024)
- (MLDE-SIM-GEN) Nuovo aggregato 90° (H7) per fresa tipo BlockHaus. Ticket#2142
- (SIM-GEN) Aumentati limiti massimi di pinzaggio minimo
Versione 2.6l1 (02/12/2024)
- (SIM) Corretto movimento VMILL durante scarico pezzo piccolo a caduta
- (SIM-GEN) Per decidere posizione parcheggio barra dopo separazione, si considera lunghezza coda del pezzo in lavoro per evitare collisioni. Ticket#2168
Versione 2.6k1 (11/11/2024)
- (GEN) Aggiunta gestione aggregato a T per NUM
- (SIM) Tolta gestione testa dummy H4
- (SIM-GEN) Aggiustato parametro in calcolo ingombro lavorazione. Ticket#2163
Versione 2.6j10 (25/10/2024)
- (SIM-GEN) Miglioria 2.6j9. Si ribadisce pinza in presa sempre, all'inizio, in base a quella attiva
Versione 2.6j9 (22/10/2024)
- (SIM-GEN) Miglioria 2.6j6. Oltre al passo pellegrino si ribadisce anche quando è scambio diretto
Versione 2.6j8 (21/10/2024)
- (SIM-GEN) Corretto problema tolleranza aggiunto con versione 2.6j7
Versione 2.6j7 (18/10/2024)
- (SIM-GEN) In nuova disposizione carrelli, aggiunta tolleranza di 100 EPS quando si calcola minimo posizionamento
Versione 2.6j6 (17/10/2024) Versione 2.6j6 (17/10/2024)
- (GEN) Si ribadisce che la pinza era in presa, prima di cominciare con lo scambio del passo del pellegrino. Ticket#2121 - (GEN) Si ribadisce che la pinza era in presa, prima di cominciare con lo scambio del passo del pellegrino. Ticket#2121
+2 -2
View File
@@ -1,9 +1,9 @@
-- Version.lua by EgalWare s.r.l. 2024/03/28 -- Version.lua by EgalWare s.r.l. 2024/12/23
-- Gestione della versione dei file comuni post-processori macchine FAST e FASTrl di Essetre -- Gestione della versione dei file comuni post-processori macchine FAST e FASTrl di Essetre
local InfoCommon_STD_PP = { local InfoCommon_STD_PP = {
NAME = 'Common_FAST', -- nome script PP standard NAME = 'Common_FAST', -- nome script PP standard
VERSION = '2.6j6', -- versione script VERSION = '2.7a1', -- versione script
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
} }