Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 536352b802 | |||
| 1484fb761b | |||
| 660209bdea | |||
| 3867f7b7ed | |||
| bc2388dd43 | |||
| 86d9b2ec3d | |||
| 2221224e9a | |||
| 0b7fefd0fd | |||
| 51e2180b15 |
@@ -609,6 +609,9 @@ function OnRapid()
|
||||
MyBackupAxes()
|
||||
-- se primo movimento della lavorazione, gestione speciale
|
||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||
-- primo posizionamento
|
||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
-- decido se muovere prima testa o carrelli (standard prima testa)
|
||||
local bHeadFirst = true
|
||||
local sLateG101
|
||||
@@ -641,9 +644,6 @@ function OnRapid()
|
||||
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
|
||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||
|
||||
-- primo posizionamento
|
||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
@@ -674,6 +674,10 @@ function OnRapid()
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
elseif EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
end
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
|
||||
@@ -657,6 +657,9 @@ function OnRapid()
|
||||
MyBackupAxes()
|
||||
-- se primo movimento della lavorazione, gestione speciale
|
||||
if EMT.MCHFIRST and not EMT.OPEISDISP then
|
||||
-- primo posizionamento
|
||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
-- decido se muovere prima testa o carrelli (standard prima testa)
|
||||
local bHeadFirst = true
|
||||
local sLateG101
|
||||
@@ -713,9 +716,6 @@ function OnRapid()
|
||||
|
||||
local sES = ' ES'..EgtNumToString( EMT.S, 0)
|
||||
|
||||
-- primo posizionamento
|
||||
local MyZHome = EgtGetAxisHomePos( 'Z')
|
||||
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
||||
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
|
||||
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
|
||||
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
@@ -746,6 +746,10 @@ function OnRapid()
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
elseif EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
EmtOutput( sOutPreMove)
|
||||
end
|
||||
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
|
||||
' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
|
||||
|
||||
@@ -704,6 +704,12 @@ function OnRapid()
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||
EmtOutput( sOutPreMove)
|
||||
elseif EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
|
||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
|
||||
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
|
||||
EmtOutput( sOutPreMove)
|
||||
end
|
||||
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
|
||||
' P4=' .. EgtNumToString( EMT.R2, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
|
||||
|
||||
+10
-4
@@ -553,8 +553,7 @@ function OnSimulToolSelect( dPosA)
|
||||
end
|
||||
EgtSetCurrMachining( NextMchId)
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
dPosA = tonumber( sVal:sub( 3))
|
||||
dPosA = GetCurrChainSawingVirtualAxis()
|
||||
else
|
||||
-- imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
@@ -721,8 +720,7 @@ function OnSimulMachiningStart()
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then
|
||||
local dPrevA = EgtGetAxisPos( 'A')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 3))
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
if abs( dPosA - dPrevA) > 1 then
|
||||
OnSimulToolDeselect()
|
||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||
@@ -1911,6 +1909,14 @@ function GetParkT()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetCurrChainSawingVirtualAxis()
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A=0'
|
||||
local dPosA = tonumber( sVal:sub( 3)) or 0
|
||||
return dPosA
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function CalcDinamicaPinze_TPA( dH, dS, dL)
|
||||
local MinTempoAcc = EMT.MINACC -- [ms] ~300
|
||||
|
||||
+53
-19
@@ -1536,9 +1536,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
dTPosF = MaxV - dVDeltaF
|
||||
end
|
||||
|
||||
-- se il pinzaggio deve essere invertito forzo entrata nei riposizionamenti
|
||||
-- altrimenti posizioni iniziali e finali sono coincidenti dato che la pinza non in presa viene posizionata alla distanza minima a quella in presa
|
||||
local bInvertClamping = not EMC.PILGRIMSTEP and EMC.YDELTA ~= EMC.YDELTANEXT and EMC.VDELTA ~= EMC.VDELTANEXT
|
||||
-- verifico che le morse non sono in posizione
|
||||
if abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or
|
||||
EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT then
|
||||
if ( abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL or abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL or bInvertClamping) and
|
||||
( EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT) then
|
||||
if #vCmd == 0 then
|
||||
table.insert( vCmd, { 0, 'Clamp repositioning'})
|
||||
-- risalita testa a Zmax
|
||||
@@ -1610,6 +1613,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- se spostamento verso il carico
|
||||
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
|
||||
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV
|
||||
-- se è FASTCLAMPING attivo, si suddivide il movimento
|
||||
elseif BD.FASTCLAMPING then
|
||||
-- se la trave si sposta dal carico verso lo scarico
|
||||
if dTPosI - dTPosF > 0 then
|
||||
dBeamMove = min( -( dTPosF - dTPosI), -( MyMinY - dYPosI), -( dVDeltaI - dVDeltaF))
|
||||
else
|
||||
dBeamMove = max( -( dTPosF - dTPosI), -( MyMinY - dYPosI))
|
||||
end
|
||||
dBeamMove = dBeamMove / 2
|
||||
-- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo)
|
||||
else
|
||||
;
|
||||
end
|
||||
|
||||
-- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare
|
||||
@@ -1684,6 +1699,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
|
||||
-- movimento terminato
|
||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||
EMC.YDELTA = EMC.YDELTANEXT
|
||||
EMC.VDELTA = EMC.VDELTANEXT
|
||||
|
||||
-- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE
|
||||
-- Y può andare in posizione direttamente se :
|
||||
@@ -1720,6 +1737,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- se spostamento verso il carico
|
||||
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
|
||||
dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY)
|
||||
-- se è FASTCLAMPING attivo, si suddivide il movimento
|
||||
elseif BD.FASTCLAMPING then
|
||||
-- se la trave si sposta dal carico verso lo scarico
|
||||
if dTPosI - dTPosF > 0 then
|
||||
dBeamMove = max( ( dTPosF - dTPosI), ( MinV - dVPosI), ( dYDeltaI - dYDeltaF))
|
||||
else
|
||||
dBeamMove = min( ( dTPosF - dTPosI), ( MaxV - dVPosI))
|
||||
end
|
||||
dBeamMove = dBeamMove / 2
|
||||
-- altrimenti la trave resta ferma e la pinza 1 va in presa (si limita lo scivolamento del pezzo)
|
||||
else
|
||||
;
|
||||
end
|
||||
|
||||
-- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare
|
||||
@@ -1793,6 +1822,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
end
|
||||
-- movimento terminato
|
||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||
EMC.YDELTA = EMC.YDELTANEXT
|
||||
EMC.VDELTA = EMC.VDELTANEXT
|
||||
|
||||
-- TERZO CASO -> PASSO DEL PELLEGRINO
|
||||
-- non è possibile fare scambio diretto.
|
||||
@@ -1841,6 +1872,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
dDeltaBeam = dTPosI - dTPosF
|
||||
|
||||
-- a questo punto entrambe le pinze sono in presa sul pezzo.
|
||||
-- trave si muove dal carico allo scarico
|
||||
-- Il trascinatore si decide in base alla direzione di movimento trave
|
||||
-- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima
|
||||
if dDeltaBeam > 0 then
|
||||
@@ -1883,18 +1915,20 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||
-- recupero una corsa massima e l'altra solo di quello che serve
|
||||
elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampY then
|
||||
elseif abs( dYDeltaI - dYDeltaF) > dMaxMovePilgrimStepSingleClampV then
|
||||
-- suddivido il movimento su entrambe le morse
|
||||
local dTotMove = ( dYDeltaF - dYDeltaI) / 2
|
||||
-- morsa Y arriva in posizione finale
|
||||
dYDeltaI = dYDeltaF
|
||||
dVPosA = MinV
|
||||
dTPosA = dTPosI - dVPosI + MinV
|
||||
dVPosA = MaxV - dTotMove
|
||||
dTPosA = dTPosI - dVPosI + MaxV - dTotMove
|
||||
dYPosA = dYDeltaF + dTPosA
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 11, CalcCharStatus( 'Y', dYDeltaF)})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
dYDeltaI = dYDeltaF
|
||||
dTPosI = dTPosA
|
||||
EMC.YDELTA = dYDeltaF
|
||||
EMC.VDELTA = dVDeltaI
|
||||
EMC.VDELTA = nil
|
||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||
-- non serve recuperare al massimo della corsa, suddivido movimento in due
|
||||
@@ -1928,9 +1962,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
end
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||
|
||||
-- aggiorno nuova posizione della morsa allo scarico dopo riposizionamento
|
||||
dVDeltaI = dVDeltaF
|
||||
EMC.YDELTA = EMC.YDELTANEXT
|
||||
EMC.VDELTA = EMC.VDELTANEXT
|
||||
end
|
||||
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
@@ -1989,17 +2022,19 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||
-- recupero una corsa massima e l'altra solo di quello che serve
|
||||
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampV then
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
dVDeltaI = dVDeltaF
|
||||
dYPosA = MaxY
|
||||
dTPosA = dTPosI + ( MaxY - dYPosI)
|
||||
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampY then
|
||||
-- suddivido il movimento su entrambe le morse
|
||||
local dTotMove = ( dVDeltaI - dVDeltaF) / 2
|
||||
-- morsa V arriva in posizione finale
|
||||
dYPosA = MinY + dTotMove
|
||||
dTPosA = dTPosI + ( MinY - dYPosI) + dTotMove
|
||||
dVPosA = dVDeltaF + dTPosA
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
dVDeltaI = dVDeltaF
|
||||
dTPosI = dTPosA
|
||||
EMC.YDELTA = dYDeltaI
|
||||
EMC.YDELTA = nil
|
||||
EMC.VDELTA = dVDeltaF
|
||||
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
|
||||
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
|
||||
@@ -2034,9 +2069,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
end
|
||||
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
|
||||
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
|
||||
|
||||
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento
|
||||
dYDeltaI = dYDeltaF
|
||||
EMC.YDELTA = EMC.YDELTANEXT
|
||||
EMC.VDELTA = EMC.VDELTANEXT
|
||||
end
|
||||
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
==== Common_FAST Update Log ====
|
||||
|
||||
Versione 3.1c1 (27/03/2026)
|
||||
- (SIM-GEN) FASTCLAMPING = true : si suddivide il movimento metà tirando e metà spingendo con altra pinza. Così si aumenta la velocità.
|
||||
- FASTCLAMPING = false : una pinza resta ferma e si fa il movimento tutto con una pinza. Così si limita lo scivolamento del pezzo.
|
||||
- (GEN) In caso di motosega prelevata, si ruota in home. Ticket#2866
|
||||
|
||||
Versione 3.1a2 (26/01/2026)
|
||||
- (GEN) Nella G101 il parametro EE era sempre a 4 perchè la variabile veniva settata dopo. Ticket#2796
|
||||
|
||||
Versione 3.1a1 (08/01/2026)
|
||||
- (SIM) Ottimizzata scrittura funzione ClampCheck post aggiornamento dll
|
||||
- (SIM) Corretto problema della funzione OnSimulDispositionStart in caso di fase finale.
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_FAST', -- nome script PP standard
|
||||
VERSION = '3.1a1', -- versione script
|
||||
VERSION = '3.1c1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user