Allineamento con common ver. 2.6l1
This commit is contained in:
+117
-54
@@ -128,6 +128,8 @@ function OnToolData()
|
||||
dAddLen = -SawOffsZ
|
||||
elseif EMT.HEAD == 'H16' then
|
||||
dAddLen = -Saw2OffsZ
|
||||
elseif EMT.HEAD == 'H14' then
|
||||
dAddLen = 206 -- dimensione aggregato
|
||||
end
|
||||
local sOut = 'M992 P1=' .. EMT.TCPOS:gsub( 'T', '') .. ' P2=' .. EmtLenToString( dAddLen + EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
|
||||
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( dAddLen + EMT.TTOTLEN, 3)
|
||||
@@ -406,6 +408,13 @@ function OnMachiningStart()
|
||||
-- imposto home dell'asse C1 (A=0 -> T101, A=90 -> T104)
|
||||
local MyParkCSawC1 = GetChainSawCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
-- aggregato foratura multipla, aggiusto subito angolo scelto per asse virtuale A
|
||||
elseif EMT.HEAD == 'H14' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = GetCurrMultiDrillVirtualAxis()
|
||||
-- imposto home dell'asse C1 (A=0 -> T121, A=90 -> T124)
|
||||
local MyParkMultiDrillC1 = GetMultiDrillCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN)
|
||||
EmtModifyAxisHome( 'C1', MyParkMultiDrillC1)
|
||||
-- se lama su aggregato testa sotto, aggiusto subito angolo scelto per asse virtuale A
|
||||
elseif EMT.HEAD == 'H22' then
|
||||
-- valore dell'asse virtuale
|
||||
@@ -729,9 +738,12 @@ function OnRapid()
|
||||
local MyMaxZ1 = EgtGetAxisMax( 'Z1')
|
||||
-- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY))
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
-- se non è aggregato, posso preselezionare testa e andare in posizione
|
||||
if EMT.HEAD ~= 'H13' and EMT.HEAD ~= 'H14' then
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
-- se necessario allargo le cabine
|
||||
if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, EMT.R1, EMT.R2) or
|
||||
@@ -757,6 +769,9 @@ function OnRapid()
|
||||
-- se sega a catena
|
||||
if EMT.HEAD == 'H13' then
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, Z=HomeZ1, B=HomeR2, C=HomeR1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- aggregato foratore multiplo
|
||||
elseif EMT.HEAD == 'H14' then
|
||||
EmitMoveDataHead( 1, { X=-ParkMultiDrillX1, Z=HomeZ1, B=HomeR2, C=HomeR1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
-- utensili standard
|
||||
else
|
||||
-- utensili lunghi
|
||||
@@ -870,11 +885,12 @@ function OnRapid()
|
||||
else
|
||||
-- selezione testa (posso muovere X solo a Zmax)
|
||||
local MaxZ3 = EgtGetAxisMax( 'Z3')
|
||||
local MyParkX3 = EgtGetAxisHomePos( 'X3')
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MaxZ3, B=ParkB3, C=0, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=MyParkX3, Z=MaxZ3, B=ParkB3, C=ParkC3, S=Speed})
|
||||
else
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, Z=MaxZ3, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=MyParkX3, Z=MaxZ3, S=Speed})
|
||||
end
|
||||
EmitMoveStartHead( 3)
|
||||
EmitMoveWaitHead( 3)
|
||||
@@ -900,13 +916,15 @@ function OnRapid()
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
EmitMoveDataHead( 3, { X=SafeX3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, S=Speed})
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
if ( EMT.L3 - SafeZ3RotAxis) > 100 * GEO.EPS_SMALL then
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
-- muovo in posizione finale
|
||||
@@ -1241,13 +1259,15 @@ function OnRapid()
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
local B3Home = EgtGetAxisHomePos( 'B3')
|
||||
local C3Home = EgtGetAxisHomePos( 'C3')
|
||||
EmitMoveDataHead( 3, { X=SafeX3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, S=Speed})
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( C3Home - EMT.R1) > 1 or abs( B3Home - EMT.R2) > 1 then
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, S=Speed})
|
||||
EmitMoveDataHead( 3, { B=EMT.R2, C=EMT.R1, S=Speed})
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
if ( EMT.L3 - SafeZ3RotAxis) > 100 * GEO.EPS_SMALL then
|
||||
EmitMoveDataHead( 3, { Z=EMT.L3, S=Speed})
|
||||
end
|
||||
EmitMoveDataHead( 3, { X=EMT.L2, S=Speed})
|
||||
end
|
||||
end
|
||||
@@ -1402,7 +1422,9 @@ function OnRapid()
|
||||
local bSplitCut = ( EMT.MCHUSERNOTES:find( 'Split', 1, true) ~= nil)
|
||||
-- porto in home la testa corrente se lavorazione successiva sopra con testa diversa oppure se punta lunga
|
||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||
local bTopGoHome = ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||
-- ricavo prossimo utensile
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
local bTopGoHome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or ( nHSet ~= 2 and nNextTopHSet ~= 0 and nHSet ~= nNextTopHSet) or ( nHSet == 1 and EMT.TTOTLEN > LongTool)
|
||||
EmitZmax( true, true, EMT.R1p, EMT.R2p, bSplitCut, bTopGoHome, false)
|
||||
-- aggiorno quota finale trave dopo Zmax
|
||||
EMT.L1o = EMT.TPOS
|
||||
@@ -2285,30 +2307,53 @@ function AdjustTcPos( bLen3, sTcPos, dAxR3)
|
||||
end
|
||||
if sPos == '101' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '101'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '102'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '103'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '104'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
|
||||
-- controllo che il valore esista. Altrimenti è una testa senza asse ausiliario
|
||||
if dAxR3 then
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '101'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '102'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '103'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '104'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Tool T101 orientation not allowed')
|
||||
end
|
||||
end
|
||||
end
|
||||
if sPos == '111' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '111'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '112'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '113'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '114'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Chain saw orientation not allowed')
|
||||
-- controllo che il valore esista. Altrimenti è una testa senza asse ausiliario
|
||||
if dAxR3 then
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '111'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '112'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '113'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '114'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Tool T111 orientation not allowed')
|
||||
end
|
||||
end
|
||||
end
|
||||
if sPos == '121' then
|
||||
if not dAxR3 then dAxR3 = EMT.R3 end
|
||||
-- controllo che il valore esista. Altrimenti è una testa senza asse ausiliario
|
||||
if dAxR3 then
|
||||
if abs( dAxR3 - 0) < 0.1 then
|
||||
sPos = '121'
|
||||
elseif abs( dAxR3 - 270) < 0.1 then
|
||||
sPos = '122'
|
||||
elseif abs( dAxR3 - 180) < 0.1 then
|
||||
sPos = '123'
|
||||
elseif abs( dAxR3 - 90) < 0.1 then
|
||||
sPos = '124'
|
||||
else
|
||||
EmtSetLastError( 1210, 'Tool T121 orientation not allowed')
|
||||
end
|
||||
end
|
||||
end
|
||||
if sPos == '201' then
|
||||
@@ -2468,7 +2513,17 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome, bUsePrev
|
||||
-- salgo in Z sicurezza raddrizzando la B
|
||||
local dSafeZ1 = EgtIf( EMT.TTOTLEN < MinLengthLongCSaw, ParkCSawZ1, ParkLongCSawZ1)
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dHomeB1, Fmt=1})
|
||||
EmitMoveDataHead( 1, { X=-dHomeX1, C=dHomeC1, Fmt=1})
|
||||
-- lascio la motosega a parcheggio. In caso di utilizzo della testa 3, la motosega viene scaricata automaticamente dalla macro.
|
||||
EmitMoveDataHead( 1, { X=-ParkCSawX1, C=dHomeC1, Fmt=1})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
-- se ho degli aggregati e la prossima è la testa 3, scarico e prendo utensile di default
|
||||
local nNextTopHSet = GetNextTopHSet( EMT.MCHID)
|
||||
if IsHeadExisting( 3) and nNextTopHSet == 3 and ( EMT.TCPOS == 'T101' or EMT.TCPOS == 'T111' or EMT.TCPOS == 'T121') then
|
||||
-- lascio la motosega a parcheggio. In caso di utilizzo della testa 3, la motosega viene scaricata automaticamente dalla macro.
|
||||
local sDefToolToLoad = AdjustTcPos( false, DefTcPos1)
|
||||
EmitMoveDataHead( 1, { X=-ParkX1, TPos=sDefToolToLoad, Fmt=1})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
end
|
||||
@@ -2521,7 +2576,7 @@ function EmitZmax( bReset, bEnd, PrevR1, PrevR2, bSplitCut, bTopGoHome, bUsePrev
|
||||
end
|
||||
-- se non sono esattamente in home, devo ruotare in zona sicura
|
||||
if abs( dHomeC3 - PrevR1) > 1 or abs( dHomeB3 - PrevR2) > 1 then
|
||||
EmitMoveDataHead( 3, { X=SafeX3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { X=-SafeX3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { Z=SafeZ3RotAxis, Fmt=1})
|
||||
EmitMoveDataHead( 3, { B=dHomeB3, C=dHomeC3, Fmt=1})
|
||||
end
|
||||
@@ -2756,35 +2811,41 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
end
|
||||
-- altrimenti (testa 3)
|
||||
else
|
||||
-- se preselezione testa 1
|
||||
if nNextHSet == 1 then
|
||||
local nNextTc = GetTcForTopHeadTool( sNextTcPos) -- utensile da caricare
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1) -- utensile da depositare
|
||||
-- se devo lasciare o prelevare da TC1 oppure non so cosa c'è montato, non posso preselezionare
|
||||
if nNextTc == 1 or nPrevTc == 1 or nPrevTc == 0 then return
|
||||
-- TC su montante sinistro
|
||||
-- se è macchina a 3 teste con gruppo truciolatore 4 assi
|
||||
if EgtGetHeadId( 'H39') then
|
||||
-- se preselezione testa 1
|
||||
if nNextHSet == 1 then
|
||||
local nNextTc = GetTcForTopHeadTool( sNextTcPos) -- utensile da caricare
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1) -- utensile da depositare
|
||||
-- se devo lasciare o prelevare da TC1 oppure non so cosa c'è montato, non posso preselezionare
|
||||
if nNextTc == 1 or nPrevTc == 1 or nPrevTc == 0 then return
|
||||
-- TC su montante sinistro
|
||||
else
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
end
|
||||
-- se preselezione testa 2
|
||||
else
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
end
|
||||
-- se preselezione testa 2
|
||||
else
|
||||
-- se agregato lama speciale non preseleziono mai
|
||||
if sNextHead == 'H22' or EMT.PREVHEAD_H2 == 'H22' then return end
|
||||
-- se la Z di lavoro è più bassa del cambio utensili, verifico quota X (la nostra Y)
|
||||
if EMT.MAXMIN[3] < MinZ1ToChangeH2 then
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
-- se agregato lama speciale non preseleziono mai
|
||||
if sNextHead == 'H22' or EMT.PREVHEAD_H2 == 'H22' then return end
|
||||
-- se la Z di lavoro è più bassa del cambio utensili, verifico quota X (la nostra Y)
|
||||
if EMT.MAXMIN[3] < MinZ1ToChangeH2 then
|
||||
if BD.RIGHT_LOAD and EMT.MAXMAX[2] > ( DeltaTabY + MaxHoOpen + 200) then return end
|
||||
if not BD.RIGHT_LOAD and EMT.MAXMAX[2] > DeltaTabY then return end
|
||||
end
|
||||
end
|
||||
-- se gruppo lama dedicato, senza cambio utensile non si preseleziona mai
|
||||
elseif EgtGetHeadId( 'H38') then
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
-- faccio preselezione ( se sono arrivato qui, vuol dire che posso preselezionare)
|
||||
if nNextHSet == 1 then
|
||||
local dNextX
|
||||
-- se sto lavorando con testa 3 oppure utensile lungo, la testa 1 deve restare in home
|
||||
if nHSet == 3 or dNextTotLen > LongTool then
|
||||
dNextX = - EgtGetAxisHomePos( 'X1')
|
||||
-- se sto lavorando con testa 3, la testa 1 deve restare in home
|
||||
if nHSet == 3 then
|
||||
dNextX = EgtGetAxisHomePos( 'X1')
|
||||
-- altrimenti recupero quota X1 (nostro L2)
|
||||
else
|
||||
dNextX = GetStartMachiningXaxis( nNextMchId)
|
||||
@@ -2810,9 +2871,11 @@ function PreselectNextDiffHead( nMchId, sHead)
|
||||
EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, dNextX), B=ParkCSawB1, C=MyParkCSawC1, TPos=AdjustTcPos( false, sNextTcPos, dPosA), Fmt=2})
|
||||
EmitMoveStartHead( 1)
|
||||
end
|
||||
else
|
||||
elseif nNextHSet == 2 then
|
||||
EmitMoveDataHead( 2, { B=ParkB2, C=ParkC2, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2})
|
||||
EmitMoveStartHead( 2)
|
||||
else
|
||||
; -- non si preseleziona testa 3
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+140
-20
@@ -76,10 +76,12 @@ function OnSimulStart()
|
||||
if vTcPos then
|
||||
for i = 1, #vTcPos do
|
||||
local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i])
|
||||
if vTools and vTools[1] and #(vTools[1]) > 0 then
|
||||
EgtLoadTool( vTcPos[i], 1, vTools[1])
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
for j = 1, #( vTools or {}) do
|
||||
if vTools[j] ~= '' then
|
||||
EgtLoadTool( vTcPos[i], j, vTools[j])
|
||||
end
|
||||
end
|
||||
ShowToolInTcPos( vTcPos[i], true)
|
||||
end
|
||||
end
|
||||
-- Carico gli utensili iniziali o di default sulle due teste
|
||||
@@ -461,6 +463,8 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
if EMT.HEAD == 'H12' or EMT.HEAD == 'H16' then
|
||||
EgtSetAxisPos( 'Z1', MaxZ1Blade)
|
||||
else
|
||||
EgtSetAxisPos( 'Z1', MaxZ1)
|
||||
end
|
||||
EgtResetAxisPos( 'C1')
|
||||
EgtResetAxisPos( 'B1')
|
||||
@@ -470,6 +474,8 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' then
|
||||
-- se prima lavorazione con motosega, parto dalla sua posizione di parcheggio
|
||||
EgtSetAxisPos( 'X1', ParkCSawX1)
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextChainSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
@@ -481,6 +487,19 @@ function OnSimulToolSelect( dPosA)
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
end
|
||||
-- se aggregato foratura multipla, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H14' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextMultiDrillVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A1', dPosA)
|
||||
-- imposto home dell'asse C1 (A1=0 -> T121, A1=90 -> T124)
|
||||
local MyParkCSawC1 = GetMultiDrillCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
EgtSetAxisPos( 'C1', MyParkCSawC1)
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
end
|
||||
-- se lama su aggregato da sotto, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H22' then
|
||||
-- se c'era un altro utensile, imposto subito asse virtuale
|
||||
@@ -526,7 +545,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulToolDeselect( dPrevA)
|
||||
-- se prossimo utensile non cambia e non è sega a catena o lama su rinvio da sotto, esco
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and ( EMT.NEXTHEAD ~= 'H13' or EMT.NEXTHEAD ~= 'H14') and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end
|
||||
-- deposito utensile
|
||||
EgtOutText( 'Tool change in progress...')
|
||||
-- recupero il gruppo attuale e il successivo
|
||||
@@ -535,8 +554,9 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- se devo deselezionare testa 3, la mando a parcheggio
|
||||
if nSetHead == 3 then
|
||||
SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- per testa gruppo 2
|
||||
elseif nNextSetHead == 2 then
|
||||
if nNextSetHead == 2 then
|
||||
-- deposito lama su aggregato testa sotto
|
||||
if EMT.PREVHEAD_H2 == 'H22' then
|
||||
-- simulo movimento
|
||||
@@ -589,12 +609,23 @@ function OnSimulToolDeselect( dPrevA)
|
||||
end
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile aggregato foratore multiplo
|
||||
elseif EMT.PREVHEAD_H1 == 'H14' then
|
||||
-- simulo movimento
|
||||
local ParkC1 = EgtGetAxisHomePos( 'C1')
|
||||
if dPrevA then
|
||||
ParkC1 = GetMultiDrillCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkMultiDrillB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkMultiDrillX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile seconda lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- visualizzo utensile su TcPos
|
||||
@@ -602,14 +633,28 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN)
|
||||
end
|
||||
-- se passo da testa 1 a 3 o viceversa
|
||||
-- se passo da testa 1 a 3 scarico aggregato
|
||||
if nNextSetHead == 3 then
|
||||
-- deposito eventuale sega a catena
|
||||
if EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- deposito utensile prelevato da posizioni speciali
|
||||
if EMT.TCPOS == 'T101' or EMT.TCPOS == 'T111' or EMT.TCPOS == 'T121' 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)
|
||||
|
||||
local sTool, sTcPos, sHead
|
||||
local vTools = EgtGetToolsInCurrSetupPos( DefTcPos1)
|
||||
if vTools and vTools[1] then
|
||||
sTool = vTools[1]
|
||||
sTcPos = DefTcPos1
|
||||
sHead = GetAdjHeadFromTcPos( 1, sTcPos)
|
||||
end
|
||||
-- carico l'utensile
|
||||
EgtLoadTool( sHead, 1, sTool)
|
||||
ShowToolInTcPos( DefTcPos1, false)
|
||||
EMT.PREVTOOL_H1 = sTool
|
||||
EMT.PREVHEAD_H1 = sHead
|
||||
EMT.PREVTCPOS_H1 = DefTcPos1
|
||||
end
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
@@ -631,6 +676,11 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxes( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID, 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo aggregato multi drill
|
||||
elseif EMT.NEXTHEAD == 'H14' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkMultiDrillB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxes( 'X1', ParkMultiDrillX1, MCH_SIM_STEP.RAPID, 'Z1', ParkMultiDrillZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile seconda lama
|
||||
elseif EMT.NEXTHEAD == 'H16' then
|
||||
-- simulo movimento
|
||||
@@ -654,8 +704,22 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulMachiningStart()
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H13' and EMT.HEAD == EMT.PREVHEAD_H1 then
|
||||
-- se lavorazione è con gruppo a forare, abilito le altre punte alla lavorazione del VMILL
|
||||
if EMT.HEAD == 'H14' then
|
||||
local OtherTools = EgtGetToolsInCurrSetupPos( 'T121')
|
||||
if OtherTools and #OtherTools > 1 then
|
||||
for i = 1, #OtherTools do
|
||||
if OtherTools[i] ~= '' and OtherTools[i] ~= EMT.TOOL then
|
||||
EmtAddToolForVmill( OtherTools[i], 'H14', i, EMT.VMILL)
|
||||
-- dichiaro utensile per verifica collisioni
|
||||
local nInd = 1011
|
||||
AddToolToCollisionObj( OtherTools[i], 'H14', i, nInd, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- se lavorazione attuale e precedente con sega a catena o aggregato foratore multiplo e con angolo A diverso, devo scaricare e ricaricare
|
||||
if ( EMT.HEAD == 'H13' or EMT.HEAD == 'H14') and EMT.HEAD == EMT.PREVHEAD_H1 then
|
||||
local dPrevA = EgtGetAxisPos( 'A1')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 4))
|
||||
@@ -1078,7 +1142,9 @@ function OnSimulMoveStart()
|
||||
EMT.L3 = min( EMT.L3, SafeZ3RotAxis)
|
||||
SimulMoveAxis( 'Z3', SafeZ3RotAxis, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', EMT.R2, MCH_SIM_STEP.COLLROT, 'C3', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'Z3', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
if ( EMT.L3 - SafeZ3RotAxis) > 100 * GEO.EPS_SMALL then
|
||||
SimulMoveAxis( 'Z3', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'X3', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
@@ -1201,6 +1267,8 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulMoveEnd()
|
||||
-- gruppo della testa
|
||||
local nHSet = GetHeadSet( EMT.HEAD)
|
||||
-- rimozione eventuali sfridi
|
||||
if EMT.FLAG == 301 then
|
||||
ExecRemoveScraps()
|
||||
@@ -1245,8 +1313,12 @@ function OnSimulMoveEnd()
|
||||
if EMT.MOVE == 0 and EMT.FLAG == 3 then
|
||||
-- eventuale rimozione sfridi
|
||||
ExecRemoveScraps()
|
||||
-- ricavo prossimo utensile
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3)
|
||||
-- eseguo
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -1424,7 +1496,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveHome( bNearV, bMchSplit)
|
||||
-- risalita a Zmax
|
||||
ExecMoveZmax( bMchSplit)
|
||||
ExecMoveZmax( bMchSplit, true)
|
||||
-- se testa sotto e macchian a 3 teste e gruppo truciolatore a 4 assi
|
||||
if GetHeadSet( EMT.HEAD) == 2 and IsHeadExisting( 3) then
|
||||
if not SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) then
|
||||
@@ -1449,7 +1521,7 @@ function ExecMoveHome( bNearV, bMchSplit)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveZmax( bMchSplit)
|
||||
function ExecMoveZmax( bMchSplit, bGoToHome)
|
||||
-- set della testa
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- posizioni correnti degli assi testa
|
||||
@@ -1536,6 +1608,9 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxes( 'C3', HomeC, MCH_SIM_STEP.COLLROT, 'B3', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z3', MyMaxZ3, MCH_SIM_STEP.RAPID)
|
||||
if bGoToHome then
|
||||
SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
else
|
||||
EmtSetLastError( 1212, "HEAD not managed")
|
||||
end
|
||||
@@ -1970,11 +2045,20 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ShowToolInTcPos( sTcPos, bShow)
|
||||
-- recupero il gruppo dell'utensile
|
||||
local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1')
|
||||
if not TcExitId then return end
|
||||
-- imposto lo stato di visualizzazione
|
||||
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
|
||||
-- recupero identificativo della posizione sul TC
|
||||
local TcPosId = EgtGetTcPosId( sTcPos or '')
|
||||
if not TcPosId then return end
|
||||
-- ciclo sulle possibili uscite
|
||||
for i = 1, 100 do
|
||||
-- recupero il gruppo dell'utensile
|
||||
local TcExitId = EgtGetFirstNameInGroup( TcPosId, 'T'..tostring( i))
|
||||
if not TcExitId then break end
|
||||
-- imposto lo stato di visualizzazione
|
||||
EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF))
|
||||
end
|
||||
-- recupero eventuale gruppo ausiliario da visualizzare/nascondere
|
||||
local TcHSId = EgtGetFirstNameInGroup( TcPosId, sTcPos..'_HS')
|
||||
if TcHSId then EgtSetStatus( TcHSId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -1983,6 +2067,10 @@ function LoadFirstTool( nHSet, sTcPosDef)
|
||||
EgtUnloadTool( EgtIf( nHSet == 1, 'H11', 'H21'), 1)
|
||||
if GetHeadSetFromTcPos( sTcPosDef) ~= nHSet then return end
|
||||
local sTool, sHead, sTcPos, sTTotLen, sTotDiam, sBlockedAxis = FindFirstToolOnHeadSet( nHSet)
|
||||
-- se primo utensile motosega, non lo carico e visualizzo quello di default
|
||||
if sHead == 'H13' then
|
||||
sTool = nil
|
||||
end
|
||||
if not sTool then
|
||||
local vTools = EgtGetToolsInCurrSetupPos( sTcPosDef)
|
||||
if vTools and vTools[1] then
|
||||
@@ -2501,6 +2589,33 @@ function GetNextChainSawingVirtualAxis( MchId)
|
||||
-- la imposto come lavorazione corrente
|
||||
EgtSetCurrMachining( NextMchId)
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local dPosA = GetCurrMultiDrillVirtualAxis()
|
||||
-- ripristino la lavorazione corrente
|
||||
if MchId then
|
||||
EgtSetCurrMachining( MchId)
|
||||
end
|
||||
return dPosA
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetNextMultiDrillVirtualAxis( MchId)
|
||||
-- recupero la lavorazione successiva
|
||||
local NextMchId
|
||||
if MchId then
|
||||
NextMchId = EgtGetNextActiveOperation( MchId)
|
||||
else
|
||||
NextMchId = EgtGetFirstActiveOperation()
|
||||
end
|
||||
while NextMchId and EgtGetOperationType( NextMchId) == MCH_OY.DISP do
|
||||
NextMchId = EgtGetNextActiveOperation( NextMchId)
|
||||
end
|
||||
-- verifico sia un taglio con sega a catena
|
||||
if EgtGetOperationType( NextMchId) ~= MCH_OY.DRILLING then
|
||||
return nil
|
||||
end
|
||||
-- la imposto come lavorazione corrente
|
||||
EgtSetCurrMachining( NextMchId)
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
-- ripristino la lavorazione corrente
|
||||
if MchId then
|
||||
@@ -2555,6 +2670,11 @@ function GetStartMachiningXaxis( nMchId)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function IsLastPath( nPathId)
|
||||
return not EgtGetNext( nPathId)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
@@ -2562,7 +2682,7 @@ function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
elseif sHead == 'H38' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
return ( abs( dAng1 - dAng1p) > 1 or abs( dAng2 - dAng2p) > 1)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.6k4'
|
||||
PP_NVER = '2.6.11.4'
|
||||
PP_VER = '2.6l1'
|
||||
PP_NVER = '2.6.12.1'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
MACH_NAME = 'Essetre-PF1500rl'
|
||||
|
||||
|
||||
@@ -1,5 +1,18 @@
|
||||
==== Common_PF1250 Update Log ====
|
||||
|
||||
Versione 2.6l1 (13/12/2024)
|
||||
- (SIM) Gestione caricamento utensili in caso di testa con uscita multipla.
|
||||
- (SIM) Corretto errore di collisione per errata simulazione cambio utensile da lama a motosega.
|
||||
- (SIM-GEN) Corretta gestione in caso di prima lavorazione con motosega.
|
||||
- (GEN) Non si fa preselezione della testa 3
|
||||
- (GEN) Corretta emissione coordinata rotazione testa 3 in zona sicura
|
||||
- (SIM-GEN) A fine barra, testa 3 sempre in home
|
||||
- (GEN) Controllo esistenza terzo asse ausiliario
|
||||
- (GEN) Corretto primo movimento in X quando si parte con testa 3. Ticket#2216
|
||||
- (GEN) Se su testa 1 c'è un aggregato e si utilizzerà la testa 3, si pscarica aggregato e si prende utensile di default. Ticket#2222
|
||||
- (GEN) Durante utilizzo della testa 3, non si preselezionano altre teste. Ticket#2220
|
||||
- (SIM-GEN) Se lavorazione con testa dedicata lama e su testa 1 c'era aggregato, viene scaricato. Ticket#2216
|
||||
|
||||
Versione 2.6k3 (26/11/2024)
|
||||
- (GEN) Corretta modifica fatta in versione 2.6k2. Ticket#2183
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_PF1250', -- nome script PP standard
|
||||
VERSION = '2.6k3', -- versione script
|
||||
VERSION = '2.6l1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user