Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 806fd7eb2a | |||
| 41974c81b5 | |||
| cbaffa631e | |||
| 35ba94d30a | |||
| ef9c8cfb72 | |||
| 749606f943 | |||
| e1be6d1584 | |||
| 703e194ab8 | |||
| af73c15b3c | |||
| 25e11e25ed | |||
| 5318d4d686 | |||
| 5ee93e4461 | |||
| c8342f5b8d | |||
| 27c3aaf1f1 | |||
| 69d41c02b0 | |||
| f5b79d6f6d | |||
| 91414cf313 | |||
| 530b03c5d0 | |||
| 296f55042e | |||
| a858f6785d | |||
| 01435f40ea | |||
| 8c19fd7c7f | |||
| d75fd52179 |
Vendored
-8
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"Lua.diagnostics.globals": [
|
||||
"EmtRemoveClimb",
|
||||
"EmtAddClimb",
|
||||
"EmtRemoveRise",
|
||||
"EmtAddRise"
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -121,8 +121,8 @@ if EgtExistsFile( sData) then
|
||||
if Machine.Offsets.MAX_ANGLE_DRILL_CUT then BeamData.MAX_ANGLE_DRILL_CUT = EgtClamp( Machine.Offsets.MAX_ANGLE_DRILL_CUT, 1, 89) end
|
||||
if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end
|
||||
if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end
|
||||
if Machine.Offsets.MIN_JOIN_S then BeamData.MIN_JOIN_S = Machine.Offsets.MIN_JOIN_S end
|
||||
if Machine.Offsets.MIN_JOIN_L then BeamData.MIN_JOIN_L = Machine.Offsets.MIN_JOIN_L end
|
||||
if Machine.Offsets.MIN_JOIN_S then BeamData.MIN_JOIN_S = EgtClamp( Machine.Offsets.MIN_JOIN_S, 80, 150) end
|
||||
if Machine.Offsets.MIN_JOIN_L then BeamData.MIN_JOIN_L = EgtClamp( Machine.Offsets.MIN_JOIN_L, 300, 450) end
|
||||
end
|
||||
if Machine.Trave then
|
||||
BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH
|
||||
|
||||
+58
-15
@@ -315,7 +315,7 @@ function OnDispositionEnd()
|
||||
if #EMT.MDCHAR > 0 then
|
||||
MyOutputNoNum( '(PART UNLOAD)')
|
||||
-- movimento intermedio di apertura pinza-rulli per evitare di trovare delle collisioni
|
||||
EmitParkRoller( EMT.TPOS, false, false)
|
||||
EmitParkRoller( EMT.TPOS, false)
|
||||
for i = 1, #EMT.MDCHAR do
|
||||
EmitMoveDataChars( EMT.MDCHAR[i])
|
||||
if EMT.MDCHAR[i].V1 then EMT.V1POS = EMT.MDCHAR[i].V1 end
|
||||
@@ -530,7 +530,7 @@ function OnMachiningEnd()
|
||||
elseif EMT.AUXTYPE == 'U' then
|
||||
EmtOutput( '(PART UNLOAD)')
|
||||
-- movimento intermedio di apertura pinza-rulli per evitare di trovare delle collisioni
|
||||
EmitParkRoller( EMT.TPOS, false, false)
|
||||
EmitParkRoller( EMT.TPOS, false)
|
||||
EMT.V1POS = EMT.V1NEXTPOS
|
||||
EMT.V2POS = EMT.V2NEXTPOS
|
||||
elseif EMT.AUXTYPE == 'P' then
|
||||
@@ -599,7 +599,7 @@ function OnMachiningEnd()
|
||||
local sOut = 'G156 EA'..tostring( EMT.PRODID)..' EB'..tostring( EMT.PATTID)..' EC'..tostring( EMT.CUTID)..' ED2'
|
||||
EmtOutput( sOut)
|
||||
end
|
||||
elseif not EMT.PREROT then
|
||||
elseif not EMT.PREROT and not EMT.SPECSPLIT then
|
||||
EmtOutput( 'M77')
|
||||
end
|
||||
end
|
||||
@@ -862,6 +862,33 @@ function OnRapid()
|
||||
if EMT.MDCHAR[i].MovType ~= 1 then bOnlyCharY = false end
|
||||
end
|
||||
EMT.MDCHAR = {}
|
||||
|
||||
local bParkV = false
|
||||
|
||||
-- verifica se serve aprire i carrelli
|
||||
local bCondBase = EMT.MCHFIRST or EMT.MOVE == 0
|
||||
local bCondPosition = EMT.V1POS < EMT.V1NEXTPOS - 1 or
|
||||
EMT.V2POS > EMT.V2NEXTPOS + 1 or
|
||||
RollerParkingNeeded( EMT.HEAD, EMT.R1, EMT.R2, EMT.R1, EMT.R2)
|
||||
|
||||
if bCondBase and bCondPosition then
|
||||
bParkV = true
|
||||
end
|
||||
|
||||
local bNlhParkV = ( EMT.MOVE == 0 and ( EMT.FLAG2 == 1 or EMT.FLAG2 == 2))
|
||||
if bNlhParkV then
|
||||
bParkV = ( EMT.FLAG == 2 and bParkV) or ( not EMT.MCHSPLIT or bSplit)
|
||||
end
|
||||
|
||||
if bParkV or bNlhParkV then
|
||||
local bMchSplit = ( bNlhParkV and EMT.MCHSPLIT and bSplit)
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
if EMT.SPLIT_Y1DELTA and not EMT.MCHSPLIT then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
|
||||
local dPosT = EMT.TPOS or EMT.L1op
|
||||
EmitParkRoller( dPosT, bMchSplit, bAgg)
|
||||
end
|
||||
if EMT.SPLIT_Y1DELTA then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
|
||||
|
||||
EmitMoveStartChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
EmtOutput( '( *** '..EMT.MCHNAME..'/'..EMT.TOOL..' *** )')
|
||||
|
||||
@@ -927,6 +954,11 @@ function OnRapid()
|
||||
-- eventuale movimento carrelli
|
||||
for i = 1, #EMT.AUXCMD do
|
||||
ProcessPathStartAux( EMT.AUXCMD[i], i)
|
||||
-- se ultimo comando e lavorazione di split, sgancio il carro Y1
|
||||
if i == #EMT.AUXCMD and EMT.MCHSPLIT and not EMT.TO_SPECSPLIT and not EMT.TO_FALL then
|
||||
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
|
||||
EMT.Y1DELTA = nil
|
||||
end
|
||||
end
|
||||
EMT.AUXCMD = {}
|
||||
-- se Split lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
@@ -966,10 +998,13 @@ function OnRapid()
|
||||
end
|
||||
|
||||
if bParkV or bNlhParkV then
|
||||
local bMchSplit = bSplitMach
|
||||
local bMchSplit = ( bNlhParkV and EMT.MCHSPLIT and bSplit)
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
if EMT.SPLIT_Y1DELTA and not EMT.MCHSPLIT then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
|
||||
local dPosT = EMT.TPOS or EMT.L1op
|
||||
EmitParkRoller( dPosT, bMchSplit)
|
||||
EmitParkRoller( dPosT, bMchSplit, bAgg)
|
||||
end
|
||||
if EMT.SPLIT_Y1DELTA then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
|
||||
|
||||
-- se era stato lanciata la preselezione di un utensile, prima di muovere la testa asopetto che sia finito
|
||||
if EMT.START_PRESEL then
|
||||
@@ -1180,6 +1215,7 @@ function OnRapid()
|
||||
EMT.POSTROT = false
|
||||
EMT.RELOAD = false
|
||||
EMT.RELOAD2 = nil
|
||||
EMT.SPLIT_Y1DELTA = nil
|
||||
end
|
||||
|
||||
-- se taglio di coda senza residuo da scaricare, emetto M175 per accelerare il carico della barra successiva
|
||||
@@ -1193,6 +1229,14 @@ function OnRapid()
|
||||
-- calcolo per piano generico
|
||||
CalcInterpPlane()
|
||||
EMT.REFLOC = true
|
||||
-- salvo posizione attuale
|
||||
local OldL1 = EMT.L1
|
||||
local OldL2 = EMT.L2
|
||||
local OldL3 = EMT.L3
|
||||
-- imposto posizione precedente (non contiene l'offset in X per sovramateriale di testa EMT.X_OFF)
|
||||
EMT.L1 = EMT.L1o
|
||||
EMT.L2 = EMT.L2o
|
||||
EMT.L3 = EMT.L3o
|
||||
-- trasformo i punti nel piano
|
||||
MyAdjustLinearAxes()
|
||||
EmtAdjustRotaryAxes()
|
||||
@@ -1205,10 +1249,6 @@ function OnRapid()
|
||||
|
||||
EMT.PLANEACTIVE = true
|
||||
|
||||
-- annullo precedenti per forzare scrittura
|
||||
EMT.R1p = nil
|
||||
EMT.R2p = nil
|
||||
|
||||
-- emissione movimento
|
||||
local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..
|
||||
EmtGetAxis('R2')..EmtGetAxis('R1')
|
||||
@@ -2092,11 +2132,11 @@ function MyAdjustLinearAxes()
|
||||
local Len = EMT.TLEN + dAddLen + Mill2Offs
|
||||
local LenRef = Mill2Offs
|
||||
vtE = Vector3d( EMT.TDIR) * Len - Z_AX() * LenRef
|
||||
elseif EMT.HEAD == 'H13' then
|
||||
elseif EMT.HEAD == 'H13' or EMT.HEAD == 'H15' then
|
||||
local Len = ( EMT.TDIST or ChSawLen) + MillOffs
|
||||
local LenRef = MillOffs
|
||||
vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef
|
||||
elseif EMT.HEAD == 'H15' or EMT.HEAD == 'H23' then
|
||||
elseif EMT.HEAD == 'H23' then
|
||||
local Len = ( EMT.TDIST or ChSawLen) + Mill2Offs
|
||||
local LenRef = Mill2Offs
|
||||
vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef
|
||||
@@ -2358,14 +2398,14 @@ function EmitResetMachining( bNextTool)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
function EmitParkRoller( dPosT, bSplitCut, bAgg)
|
||||
-- se entrambe già parcheggiate, non devo fare alcunché
|
||||
if ( EMT.V1POS - ParkV1) > -0.1 and ( EMT.V2POS - ParkV2) < 0.1 then return end
|
||||
-- Assegno quote pinze correnti
|
||||
local dY1Delta = EgtIf( bUsePrevDelta, EMT.Y1PREVDELTA, EMT.Y1DELTA)
|
||||
local dY2Delta = EgtIf( bUsePrevDelta, EMT.Y2PREVDELTA, EMT.Y2DELTA)
|
||||
local dY1Delta = EMT.Y1DELTA
|
||||
local dY2Delta = EMT.Y2DELTA
|
||||
-- Parcheggi pinze
|
||||
local MyParkY1 = ParkY1 + AggLoad
|
||||
local MyParkY1 = ParkY1 + EgtIf( bAgg, AggLoad, 0)
|
||||
local MyParkY2 = ParkY2
|
||||
-- le parcheggio
|
||||
local MDChar = {}
|
||||
@@ -2438,6 +2478,9 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
MDChar.IniStatV2 = 3
|
||||
MDChar.MovType = MDChar.MovType | 2
|
||||
end
|
||||
if EMT.SPLIT_Y1DELTA and EMT.SPLIT_Y1DELTA + dPosT < MyParkY1 then
|
||||
MDChar.Y1 = MyParkY1
|
||||
end
|
||||
EmitMoveDataChars( MDChar)
|
||||
EmitMoveStartChars( MDChar.MovType)
|
||||
EmitMoveWaitChars( MDChar.MovType)
|
||||
|
||||
+84
-58
@@ -537,14 +537,6 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
end
|
||||
|
||||
-- se ho due teste, verifico che l'altra sia dalla parte opposta
|
||||
--if EgtGetHeadId( 'H21') then
|
||||
-- if nSetHead == 1 then
|
||||
-- EgtSetAxisPos( 'X2', MinX2)
|
||||
-- else
|
||||
-- EgtSetAxisPos( 'X1', MaxX1)
|
||||
-- end
|
||||
--end
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if HeadIsChainSaw( EMT.HEAD) then
|
||||
-- apro le paratie
|
||||
@@ -616,64 +608,77 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulToolDeselect( dPrevA)
|
||||
-- se utensile corrente è sega a catena, devo depositarla
|
||||
if HeadIsChainSaw( EMT.PREVHEAD_H1) then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
-- se non è chiamata per cambio angolo di presa della sega a catena
|
||||
if not dPrevA then
|
||||
local sTool, sHead, sTcPos = FindNextToolOnHeadSet( 1, false)
|
||||
function OnSimulToolDeselect( dPrevA, bLastRise)
|
||||
|
||||
-- se ToolDeselect chiamata da MLPE, bisogna scaricare perchè è ultimo movimento di rise e poi si cambia utensile
|
||||
if dPrevA then
|
||||
local dHeadSet = GetHeadSet( EMT.HEAD)
|
||||
-- se utensile corrente è sega a catena, devo depositarla
|
||||
if dHeadSet == 1 and HeadIsChainSaw( EMT.HEAD) then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
-- si cerca prossimo utensile
|
||||
local sTool, sHead, sTcPos, bCarrMove = FindNextToolOnHeadSet( 1, false)
|
||||
-- imposto correttamente i dati di testa
|
||||
local OrigEMC = EMC
|
||||
EMC = { HEAD = sHead, TOOL = sTool, TCPOS = sTcPos, TOTDIAM = 0}
|
||||
EMC = { HEAD = sHead or 'H11', TOOL = sTool, TCPOS = sTcPos, TOTDIAM = 0}
|
||||
OnSetHead()
|
||||
EMC = OrigEMC
|
||||
local dHomeX1 = EgtGetAxisHomePos( 'X1')
|
||||
local dHomeC1 = EgtGetAxisHomePos( 'C1')
|
||||
local dHomeB1 = EgtGetAxisHomePos( 'B1')
|
||||
-- se c'è prossimo utensile, oppure se non c'è e c'è un movimento carrelli
|
||||
if sTool or ( not sTool and bCarrMove) or not bLastRise then
|
||||
|
||||
-- cambio utensile
|
||||
EgtSetAxisPos( 'C1', dHomeC1)
|
||||
EgtSetAxisPos( 'B1', dHomeB1)
|
||||
EgtSetAxisPos( 'Z1', MaxZ1)
|
||||
SimulMoveAxis( 'X1', dHomeX1, MCH_SIM_STEP.RAPID)
|
||||
if sTcPos then
|
||||
LoadNextTool( 1, DefTcPos1)
|
||||
local dHomeX1 = EgtGetAxisHomePos( 'X1')
|
||||
local dHomeC1 = EgtGetAxisHomePos( 'C1')
|
||||
local dHomeB1 = EgtGetAxisHomePos( 'B1')
|
||||
|
||||
-- cambio utensile
|
||||
EgtSetAxisPos( 'C1', dHomeC1)
|
||||
EgtSetAxisPos( 'B1', dHomeB1)
|
||||
EgtSetAxisPos( 'Z1', MaxZ1)
|
||||
SimulMoveAxis( 'X1', dHomeX1, MCH_SIM_STEP.RAPID)
|
||||
if sTcPos then
|
||||
LoadNextTool( 1, sTcPos)
|
||||
end
|
||||
end
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
elseif HeadIsChainSaw( EMT.PREVHEAD_H2) then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H2, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
-- se non è chiamata per cambio angolo di presa della sega a catena
|
||||
if not dPrevA then
|
||||
-- cambio utensile
|
||||
EgtSetAxisPos( 'C2', ParkC2)
|
||||
EgtSetAxisPos( 'B2', ParkB2)
|
||||
EgtSetAxisPos( 'Z2', MaxZ2)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
local sTool, sHead, sTcPos = FindNextToolOnHeadSet( 2, false)
|
||||
elseif dHeadSet == 2 and HeadIsChainSaw( EMT.HEAD) then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H2, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
-- imposto correttamente i dati di testa
|
||||
local sTool, sHead, sTcPos, bCarrMove = FindNextToolOnHeadSet( 2, false)
|
||||
local OrigEMC = EMC
|
||||
EMC = { HEAD = sHead or 'H21', TOOL = sTool, TCPOS = sTcPos, TOTDIAM = 0}
|
||||
OnSetHead()
|
||||
EMC = OrigEMC
|
||||
if sTcPos then
|
||||
LoadNextTool( 2, DefTcPos2)
|
||||
-- se c'è prossimo utensile, oppure se non c'è e c'è un movimento carrelli
|
||||
if sTool or ( not sTool and bCarrMove) or not bLastRise then
|
||||
|
||||
local dHomeX2 = EgtGetAxisHomePos( 'X2')
|
||||
local dHomeC2 = EgtGetAxisHomePos( 'C2')
|
||||
local dHomeB2 = EgtGetAxisHomePos( 'B2')
|
||||
|
||||
-- cambio utensile
|
||||
EgtSetAxisPos( 'C2', dHomeC2)
|
||||
EgtSetAxisPos( 'B2', dHomeB2)
|
||||
EgtSetAxisPos( 'Z2', MaxZ2)
|
||||
SimulMoveAxis( 'X2', dHomeX2, MCH_SIM_STEP.RAPID)
|
||||
if sTcPos then
|
||||
LoadNextTool( 2, sTcPos)
|
||||
end
|
||||
end
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
EMT.CHSAW_OUT = nil
|
||||
|
||||
-- se utensile non cambia e non è sega a catena, esco
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and not HeadIsChainSaw( EMT.NEXTHEAD) then return end
|
||||
-- deposito utensile
|
||||
EgtOutText( 'Tool change in progress...')
|
||||
-- se prossimo utensile sega a catena, devo mettere in home testa 1 e depositare l'utensile sulla testa 2 o viceversa
|
||||
|
||||
local dHeadSet = GetHeadSet( EMT.PREVHEAD)
|
||||
|
||||
@@ -686,12 +691,14 @@ function OnSimulToolDeselect( dPrevA)
|
||||
'B2', EgtGetAxisHomePos( 'B2'), MCH_SIM_STEP.COLLROT, 'C2', EgtGetAxisHomePos( 'C2'), MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
|
||||
if dHeadSet == 1 then
|
||||
local dNextHeadSet = GetHeadSet( EMT.NEXTHEAD)
|
||||
|
||||
if dNextHeadSet == 1 then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H1, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
else
|
||||
elseif dNextHeadSet == 2 then
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H2, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
@@ -1226,7 +1233,7 @@ function OnSimulMoveEnd()
|
||||
local bLastRise = EgtGetInfo( EMT.MOVEID, 'LastRise', 'b')
|
||||
-- se ultimo rapido e motosega, si va in home
|
||||
if bLastRise and HeadIsChainSaw( EMT.HEAD) then
|
||||
OnSimulToolDeselect( EMT.R3)
|
||||
OnSimulToolDeselect( EMT.R3, true)
|
||||
EMT.CHSAW_OUT = true
|
||||
end
|
||||
end
|
||||
@@ -1435,6 +1442,13 @@ end
|
||||
function ExecMoveHome( bNearV)
|
||||
-- se richiesto, avvicino i rulli
|
||||
if bNearV then
|
||||
-- se ho motosega, devo scaricare
|
||||
if HeadIsChainSaw( EMT.HEAD) then
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
OnSimulToolDeselect( dPosA)
|
||||
EMT.CHSAW_OUT = true
|
||||
end
|
||||
-- sistemo i rulli
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
@@ -2622,7 +2636,7 @@ function FindNextToolOnHeadSet( nHSet, bFirst)
|
||||
local CurrMachId = EgtGetCurrMachining()
|
||||
local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||
-- cerco lavorazione con utensile su gruppo testa indicato
|
||||
local sTool, sHead, sTcPos
|
||||
local sTool, sHead, sTcPos, bCarrMove
|
||||
local OpId
|
||||
if bFirst then
|
||||
OpId = EgtGetFirstActiveOperation()
|
||||
@@ -2635,12 +2649,20 @@ function FindNextToolOnHeadSet( nHSet, bFirst)
|
||||
if EgtSetCurrMachining( OpId) then
|
||||
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||
if EgtTdbSetCurrTool( sNextTool) then
|
||||
local nClId = EgtGetFirstNameInGroup( OpId, '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
|
||||
if dAuxMoveCount > 3 then
|
||||
bCarrMove = true
|
||||
end
|
||||
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||
if GetHeadSet( sNextHead) == nHSet and EMT.TOOL ~= sNextTool then
|
||||
if not HeadIsChainSaw( sNextHead) then
|
||||
sHead = sNextHead
|
||||
sTool = sNextTool
|
||||
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||
if GetHeadSet( sNextHead) == nHSet then
|
||||
if CurrTool ~= sNextTool then
|
||||
if not HeadIsChainSaw( sNextHead) then
|
||||
sHead = sNextHead
|
||||
sTool = sNextTool
|
||||
sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||
end
|
||||
end
|
||||
break
|
||||
end
|
||||
@@ -2649,11 +2671,15 @@ function FindNextToolOnHeadSet( nHSet, bFirst)
|
||||
end
|
||||
OpId = EgtGetNextActiveOperation( OpId)
|
||||
end
|
||||
-- se non c'è un operazione, significa che è fine pezzo, quindi si forza movimento carrelli perchè avverrà uno scarico
|
||||
if not OpId then
|
||||
bCarrMove = true
|
||||
end
|
||||
-- ripristino stato iniziale
|
||||
EgtSetCurrMachining( CurrMachId or GDB_ID.NULL)
|
||||
EgtTdbSetCurrTool( CurrTool or '')
|
||||
-- restituisco risultato
|
||||
return sTool, sHead, sTcPos
|
||||
return sTool, sHead, sTcPos, bCarrMove
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
|
||||
+16
-22
@@ -279,11 +279,10 @@ function OnSpecialLink()
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p, EMC.R3}, 30, 2, 2, 'FirstClimb=1;')
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2p, EMC.R3}, 30, 2, 2)
|
||||
if abs( EMC.R3) < 0.1 then
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkCSaw0Z1, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2)
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkCSaw0Z1, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;')
|
||||
else
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2)
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;')
|
||||
end
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;')
|
||||
|
||||
-- se fine lavorazione con deposito utensile
|
||||
elseif EMC.LINKTYPE == 2 then
|
||||
@@ -320,6 +319,8 @@ function OnSpecialLink()
|
||||
else
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2, EMC.L3, EMC.R1, EMC.R2, EMC.R3}, 30, 3, 2, 'UniqueRise=1;')
|
||||
end
|
||||
-- altrimenti collegamento tra due lavorazioni (3)
|
||||
else
|
||||
end
|
||||
|
||||
-- se fresa su testa 2
|
||||
@@ -398,9 +399,12 @@ function OnSpecialLink()
|
||||
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;')
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2)
|
||||
-- se assi cambiano di molto
|
||||
if abs( EMC.R1 - EMC.R1p) > 10 or abs( EMC.R2 - EMC.R2p) > 90 then
|
||||
-- se asse B cambia di molto
|
||||
if abs( 0 - EMC.R2p) > 1 then
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, 0}, 30, 2, 2)
|
||||
end
|
||||
-- se assi cambiano di molto
|
||||
if abs( EMC.R1 - EMC.R1p) > 10 then
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, 0}, 30, 2, 2)
|
||||
end
|
||||
|
||||
@@ -415,26 +419,16 @@ function OnSpecialLink()
|
||||
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
|
||||
if abs( EMC.R1 - EMC.R1p) > 1 or abs( EMC.R2 - EMC.R2p) > 1 then
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;')
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, 0}, 30, 3, 2)
|
||||
-- se assi cambiano di molto
|
||||
if abs( EMC.R1 - EMC.R1p) > 10 then
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, 0}, 30, 3, 2)
|
||||
end
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2)
|
||||
else
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, EMC.R2p}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;')
|
||||
end
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2, 'LastRise=1;')
|
||||
|
||||
-- se fine lavorazione con deposito utensile
|
||||
elseif EMC.LINKTYPE == 2 then
|
||||
-- retrazione
|
||||
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
|
||||
if abs( EMC.R1 - EMC.R1p) > 1 or abs( EMC.R2 - EMC.R2p) > 1 then
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;')
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, 0}, 30, 3, 2)
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2)
|
||||
else
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, EMC.R2p}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', ''))
|
||||
end
|
||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2, 'LastRise=1;')
|
||||
|
||||
-- altrimenti collegamento tra due lavorazioni (3)
|
||||
else
|
||||
-- recupero quota massima di collegamento
|
||||
@@ -466,6 +460,7 @@ function OnSpecialLink()
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
|
||||
end
|
||||
end
|
||||
|
||||
-- se sega a catena su testa 2
|
||||
elseif EMC.HEAD == 'H23' then
|
||||
-- recupero se split da note utente di lavorazione precedente
|
||||
@@ -477,11 +472,10 @@ function OnSpecialLink()
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p, EMC.R3}, 30, 2, 2, 'FirstClimb=1;')
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2p, EMC.R3}, 30, 2, 2)
|
||||
if abs( EMC.R3) < 0.1 then
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkCSaw0Z1, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2)
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkCSaw0Z2, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;')
|
||||
else
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2)
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;')
|
||||
end
|
||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;')
|
||||
|
||||
-- se fine lavorazione con deposito utensile
|
||||
elseif EMC.LINKTYPE == 2 then
|
||||
|
||||
+5
-7
@@ -32,9 +32,9 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '3.1f1_RC5'
|
||||
PP_NVER = '3.1.6.1'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
PP_VER = '3.1g3'
|
||||
PP_NVER = '3.1.7.3'
|
||||
MIN_MACH_VER = '3.1f4'
|
||||
MACH_NAME = EgtGetCurrMachineName()
|
||||
|
||||
|
||||
@@ -938,9 +938,6 @@ function OnSetHead()
|
||||
-- aggiustamenti per distanza
|
||||
local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen)
|
||||
EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, Head2Z - dDist))
|
||||
local vtMove = Point3d( 0, 0, Head2Z - dDist) - Point3d( EMC.EXITPOS)
|
||||
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
|
||||
EgtMove( ExitId, vtMove)
|
||||
-- recupero valore asse A bloccato
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local CSawPosA = tonumber( sVal:sub( 3) or '')
|
||||
@@ -953,6 +950,7 @@ function OnSetHead()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-------------------------- Testa utilizzata -------------------------
|
||||
function GetHeadSet( sHead)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then
|
||||
return 1
|
||||
@@ -983,7 +981,7 @@ function GetHeadTCSet( sHead, sTcPos)
|
||||
-- testa 2 su CU prossimo a testa 2
|
||||
elseif sHead == 'H21' or sHead == 'H22' or sHead == 'H23' then
|
||||
return 'Head2_TC2'
|
||||
-- testa 2 su CU prossimo a testa 1 (non esiste una condfigurazione fatta in questo modo)
|
||||
-- testa 2 su CU prossimo a testa 1 (non esiste una configurazione fatta in questo modo)
|
||||
elseif nPos < 10 then
|
||||
return 'Head2_TC1'
|
||||
else
|
||||
|
||||
+30
-1
@@ -1,10 +1,39 @@
|
||||
==== Common_ONE-PF Update Log ====
|
||||
|
||||
Versione 3.1g3 (24/07/2026)
|
||||
- (SIM) Non si legge il nome utensile da tabella EMT, ma si utilizza quello corrente salvato in precedenza
|
||||
- (SIM) Corretta gestione scarico motosega in caso di cambio pinze dopo che utensile già caricato. In generazione era corretto perchè selezione utensile avviene già dopo posizionamento carrelli
|
||||
- (SIM-GEN) Migliorati movimenti lama e motosega. Ultimo punto climb motosega è in alto in quota parcheggio.
|
||||
- (GEN) Corretta scrittura piano lavorazione in caso di rotazione con pezzo con sovramateriale in testa. Ticket#3092
|
||||
|
||||
Versione 3.1g2 (07/07/2026)
|
||||
- (SIM) Corretta gestione cambio utensile con motosega
|
||||
|
||||
Versione 3.1g1 (07/07/2026)
|
||||
- (ALL) Prima versione con gestione nuovi link (no tastatore)
|
||||
- Gestione lavorazioni in doppio
|
||||
- Preselezione utensile gestibile da parametri TS3
|
||||
- Gestione Drilling e Pocketing NT
|
||||
|
||||
Versione 3.1f5 (26/06/2026)
|
||||
- (SIM-GEN) Se tasca con motosega in faccia sopra e pezzo alto, si ruota in sicurezza.
|
||||
|
||||
Versione 3.1f4 (17/06/2026)
|
||||
- (MLDE-GEN) Corretta preselezione in caso di testa in lavoro troppo vicina a quella che sta preselezionando. Da aggiungere in MLDE parametri 'Limit_T1_Presel_T2' e 'Limit_T2_Presel_T1'
|
||||
|
||||
Versione 3.1f3 (08/06/2026)
|
||||
- (GEN) M77 viene ora eseguita, prima era commentata.
|
||||
|
||||
Versione 3.1f2 (05/06/2026)
|
||||
- (MLDE-GEN) Aggiunti parametri di limite asse X per decidere se fare preselezione su altra testa. Serve modifica MLDE
|
||||
|
||||
Versione 3.1f1 (03/06/2026)
|
||||
- (NGE-MLDE-GEN-SIM) Versione unificata con predisposizione per gestione tastatori. Serve modificare anche la macchina, per ora gestione completa solo su PFrl.
|
||||
|
||||
Versione 3.1c2 (17/03/2026)
|
||||
- (SIM-GEN) Aggiunta OnSpecialApplyMachining per calcolare i carrelli da subito
|
||||
- Aggiungendo OnSpecialApplyMachining, ora la OnSpecialGetPrevMachiningOffset lavora correttamente. ATT: MIN_MACH -> 3.1b2
|
||||
|
||||
|
||||
Versione 3.1c1 (04/03/2026)
|
||||
- (GEN) Corretta chiamata di una variabile insesistente in caso di ONE
|
||||
- (SIM) Allineata simulazione a generazione
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||
VERSION = '3.1c2', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '3.1b2' -- versione minima kernel
|
||||
VERSION = '3.1g3', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '3.1f1' -- versione minima kernel
|
||||
}
|
||||
|
||||
return InfoCommon_STD_PP
|
||||
|
||||
Reference in New Issue
Block a user