Compare commits

...

35 Commits

Author SHA1 Message Date
daniele.nicoli d8cd917aaf Merge remote-tracking branch 'origin/master' into develop 2026-04-24 11:30:18 +02:00
andrea.villa ba63901305 Allineamento con common ver. 3.1d2 2026-04-22 16:29:17 +02:00
daniele.nicoli 507e75121f Merge branch 'master' into develop 2026-04-22 13:08:39 +02:00
andrea.villa 6d937b7e88 Allineamento a common ver. 3.1d1 2026-04-14 15:15:46 +02:00
andrea.villa 656982ca9c Allineamento con common ver. 3.1c2 2026-03-30 18:33:39 +02:00
andrea.villa d3c62ee5a9 Merge branch 'develop' 2026-03-27 15:24:52 +01:00
andrea.villa 89e2c495d1 Allineamento con common ver. 3.1c1
Cambio versione per rilascio a cliente
2026-03-27 15:24:34 +01:00
andrea.villa a58ed6015f Merge branch 'NewClampRepos' into develop 2026-03-27 14:44:40 +01:00
andrea.villa f4f94827d5 Modifiche a funzione riposizionemanto carrelli 2026-03-27 14:43:32 +01:00
daniele.nicoli 948df5b056 Aggiunta funzione calcolo Home C per ChainSaw da valore A. Funziona con Common post 26/03/2026. Ticket#2866 2026-03-26 15:35:54 +01:00
daniele.nicoli 16510ed17f Merge branch 'master' into develop 2026-03-26 15:33:18 +01:00
andrea.villa 27bb16b3b7 Cambio nome variabili, per essere più chiaro quale è riferita alla paratia lato carico e quale allo scarico 2026-03-16 12:44:33 +01:00
andrea.villa 43166831e8 Merge branch 'develop' 2026-03-16 12:20:02 +01:00
andrea.villa c509cefe08 - Cambio versione per rilascio a cliente
- Cambio nome per distanza di collisione con paratie cabina
2026-03-16 12:19:49 +01:00
daniele.nicoli c520f90a5b Spostamento della faccia interna dei solidi di collisione dell'interno della cabina impostando la distanza da centro mandrino a carter nel TS3Data, sempre in positivo. Ticket#2852 2026-03-10 11:47:18 +01:00
andrea.villa 35d573cc20 Aggiunto info "PreviewShow" per anteprima utensile/testa nel MACH 2026-03-06 15:15:53 +01:00
andrea.villa 69054d2c90 Merge branch 'master' into develop 2026-03-06 15:15:06 +01:00
andrea.villa cddc5abcc1 Aggiunto in BeamData il parametro MAX_ANGLE_DRILL_CUT 2026-03-05 08:44:06 +01:00
andrea.villa 0324b24222 - Nuova strategia di pinzaggio attivo di default
- modificato distanza per collisione carro C a 403mm
- Lunghezza utensile lungo impostata a 218.5
2026-02-23 08:20:05 +01:00
andrea.villa a845258a81 Cambio versione per rilascio a cliente 2026-02-06 13:31:27 +01:00
andrea.villa 5486fab487 Merge branch 'develop' 2026-02-06 13:30:47 +01:00
Dario Sassi d2f093772d MachNotes modificato per nuovi parametri lavorazioni 5 assi. 2026-01-29 18:25:01 +01:00
daniele.nicoli a362c59c6f corretta visualizzazione elementi nel file nge 2026-01-28 08:59:49 +01:00
daniele.nicoli 69de0b9cc5 - Mosso nell' .nge il solido di collisione tra utensile e asse C superiore per essere portato al livello del solido reale.
- Implementati nell' .mlde un nuovo parametro (DistRotCenterBToTopC), reso impostabile LONG_TOOL_MINLEN e il movimento del solido di collisione sopracitato e della faccia della flangia dell'asse C superiore per regolare l'ingombro per ogni macchina. I parametri sono impostabili da Ts3Data.lua.
2026-01-27 17:09:17 +01:00
daniele.nicoli dc14d46bbc Merge branch 'master' into develop 2026-01-27 09:41:49 +01:00
andrea.villa c4270df480 Allineamento a common ver. 3.1a2 2026-01-26 15:57:20 +01:00
andrea.villa 096d04f640 - Nome macchina ricavato con funzione EGT dedicata
- HOTFIX: DeltaTol spostato in MLDE
2026-01-08 12:36:07 +01:00
andrea.villa 2d8d5a38a6 Merge branch 'develop' 2026-01-08 08:47:57 +01:00
andrea.villa 4fcf50951b Allineamento a common ver. 3.1a1 2026-01-08 08:47:48 +01:00
daniele.nicoli 4b2827f2cd Merge branch 'master' into develop 2026-01-07 10:44:33 +01:00
andrea.villa 29dddf0d52 Rimosse funzioni riportare da PF1250 2025-12-23 08:16:22 +01:00
andrea.villa 45148ee0c5 Merge remote-tracking branch 'origin/develop' 2025-12-22 10:10:01 +01:00
andrea.villa bc7fa48823 Cambio versione per rilascio a cliente 2025-12-22 10:09:22 +01:00
andrea.villa 05ebbc9221 Merge branch 'CheckPinzaggioVMILL' into develop 2025-12-22 10:08:42 +01:00
andrea.villa a909f2460c Corretto disegno porta utensile 2025-12-11 09:05:30 +01:00
12 changed files with 326 additions and 212 deletions
+4 -28
View File
@@ -9,8 +9,8 @@ local BeamData = {
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 ROT180 = true, -- flag abilitazione rotazione 180 gradi
NEWCLAMPING = false, -- flag abilitazione nuovo metodo riposizionamento carrelli NEWCLAMPING = true, -- flag abilitazione nuovo metodo riposizionamento carrelli
FASTCLAMPING= true, -- flag abilitazione riduzione numero riposizionamenti al carico e durante grande trascinamento FASTCLAMPING= false, -- 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
MIN_HEIGHT = 40, -- altezza minima del grezzo MIN_HEIGHT = 40, -- altezza minima del grezzo
MAX_WIDTH = 240, -- larghezza massima del grezzo MAX_WIDTH = 240, -- larghezza massima del grezzo
@@ -23,8 +23,6 @@ local BeamData = {
STD_RAW = 14000, -- lunghezza standard della barra di grezzo STD_RAW = 14000, -- lunghezza standard della barra di grezzo
OVM_HEAD = 10, -- sovramateriale testa OVM_HEAD = 10, -- sovramateriale testa
OVM_MID = 5.4, -- sovramateriale intermedio (spessore lama) OVM_MID = 5.4, -- sovramateriale intermedio (spessore lama)
MIN_JOIN_S = 100, -- minima presa pinza per pezzo piccolo
MIN_JOIN_L = 450, -- minima presa pinza per pezzo grande
MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole
MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi
MAX_LEN_SCRAP = 270, -- massima lunghezza scarto di coda MAX_LEN_SCRAP = 270, -- massima lunghezza scarto di coda
@@ -44,6 +42,7 @@ local BeamData = {
DRILL_VZ_MIN = -0.51, -- componente limite in Z del versore di un foro DRILL_VZ_MIN = -0.51, -- componente limite in Z del versore di un foro
DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali
DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature
MAX_ANGLE_DRILL_CUT = 10, -- angolo massimo tra la foratura e il taglio che la attraversa
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale
MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda MAX_LEN_HTFEA = 2000.0, -- massima lunghezza di feature di testa o coda
@@ -107,6 +106,7 @@ if EgtExistsFile( sData) then
BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER
BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN
BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN
if Machine.Offsets.MAX_ANGLE_DRILL_CUT then BeamData.MAX_ANGLE_DRILL_CUT = EgtClamp( Machine.Offsets.MAX_ANGLE_DRILL_CUT, 1, 89) end
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 BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART
@@ -156,30 +156,6 @@ local function GetMaxLenRidgeLapFromBottom( dHRaw)
end end
BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom
---------------------------------------------------------------------
local function GetSectionCoeff( dW, dH, dL)
local SEZ_L = 80000
local SEZ_S = 20000
local LEN_SMALL = 2000
local dSez = dW * dH
if dSez <= SEZ_S then
return 0.0
elseif dSez < SEZ_L then
if dL and dL < LEN_SMALL then dSez = max( 0.6 * dSez, SEZ_S) end
local dCoeff = ( dSez - SEZ_S) / ( SEZ_L - SEZ_S)
return dCoeff
else
return 1.0
end
end
---------------------------------------------------------------------
local function GetMinUnloadableRaw( dW, dH)
local dCoeff = GetSectionCoeff( dW, dH)
return BeamData.MINRAW_S + dCoeff * ( BeamData.MINRAW_L - BeamData.MINRAW_S)
end
BeamData.GetMinUnloadableRaw = GetMinUnloadableRaw
--------------------------------------------------------------------- ---------------------------------------------------------------------
local function GetBlockedAxis( sHead, nToolType, sBlockedAxis) local function GetBlockedAxis( sHead, nToolType, sBlockedAxis)
-- lama -- lama
+30 -18
View File
@@ -510,6 +510,7 @@ function OnPathStart()
-- salvo precedenti rotanti -- salvo precedenti rotanti
EMT.R1pp = EMT.R1p EMT.R1pp = EMT.R1p
EMT.R2pp = EMT.R2p EMT.R2pp = EMT.R2p
EMT.R3pp = EMT.R3p
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento) -- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev() EmtResetPrev()
@@ -609,6 +610,9 @@ function OnRapid()
MyBackupAxes() MyBackupAxes()
-- se primo movimento della lavorazione, gestione speciale -- se primo movimento della lavorazione, gestione speciale
if EMT.MCHFIRST and not EMT.OPEISDISP then 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) -- decido se muovere prima testa o carrelli (standard prima testa)
local bHeadFirst = true local bHeadFirst = true
local sLateG101 local sLateG101
@@ -631,7 +635,7 @@ function OnRapid()
local bGoToHome = false local bGoToHome = false
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio -- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sET ~= EMT.PREVET or abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
bGoToHome = true bGoToHome = true
end end
@@ -641,17 +645,16 @@ function OnRapid()
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
local sES = ' ES'..EgtNumToString( EMT.S, 0) 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 -- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
-- se ho ancora motosega, si setta già asse C, altrimenti asse C per andare in home
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) .. ' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES ' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES ' B' .. EmtLenToString( 0, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001') EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001') EmtOutput( 'G101 ET2001')
@@ -663,20 +666,26 @@ function OnRapid()
end end
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione -- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
local 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)
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
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001')
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
elseif not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then ( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
local sOutPreMove local sOutPreMove
if EMT.HEAD == 'H3' and bGoToHome then if EMT.HEAD == 'H3' and bGoToHome then
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES ' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
EmtOutput( sOutPreMove)
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) EmtOutput( sOutPreMove)
end end
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. 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 ' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001') EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001') EmtOutput( 'G101 ET2001')
@@ -1339,7 +1348,7 @@ function PrepareUnload( sCmd)
table.insert( EMT.AUXCMD, sMsg) table.insert( EMT.AUXCMD, sMsg)
if Cmd[2] == 'V' then if Cmd[2] == 'V' then
-- se non è ultima fase c'è una barra sulla pinza Y (1) -- se non è ultima fase c'è una barra sulla pinza Y (1)
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '0', '1') local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '0', '1')
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp() local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
end end
@@ -1348,7 +1357,7 @@ function PrepareUnload( sCmd)
table.insert( EMT.AUXCMD, sMsg) table.insert( EMT.AUXCMD, sMsg)
if Cmd[4] == 'V' then if Cmd[4] == 'V' then
-- se non è ultima fase c'è una barra sulla pinza Y (1) -- se non è ultima fase c'è una barra sulla pinza Y (1)
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '111', '112') local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '111', '112')
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp() local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
EMT.U_STD = true EMT.U_STD = true
@@ -1508,10 +1517,13 @@ function PreparePostRotation( sCmd)
elseif nVDelta > 0 then elseif nVDelta > 0 then
EMT.YDELTA = nil EMT.YDELTA = nil
EMT.VDELTA = nVDelta EMT.VDELTA = nVDelta
end end
local sYLoad = ' Y'..EmtLenToString( LoadT) local sYLoad = ' Y'..EmtLenToString( LoadT)
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1' local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
-- setto parametri di pinzaggio reali
EMT.SA = ' EA110'
EMT.SE = ' EE1'
end end
end end
+31 -19
View File
@@ -558,6 +558,7 @@ function OnPathStart()
-- salvo precedenti rotanti -- salvo precedenti rotanti
EMT.R1pp = EMT.R1p EMT.R1pp = EMT.R1p
EMT.R2pp = EMT.R2p EMT.R2pp = EMT.R2p
EMT.R3pp = EMT.R3p
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento) -- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev() EmtResetPrev()
@@ -657,6 +658,9 @@ function OnRapid()
MyBackupAxes() MyBackupAxes()
-- se primo movimento della lavorazione, gestione speciale -- se primo movimento della lavorazione, gestione speciale
if EMT.MCHFIRST and not EMT.OPEISDISP then 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) -- decido se muovere prima testa o carrelli (standard prima testa)
local bHeadFirst = true local bHeadFirst = true
local sLateG101 local sLateG101
@@ -680,7 +684,7 @@ function OnRapid()
local bGoToHome = false local bGoToHome = false
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio -- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and sET == EMT.PREVET and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sET ~= EMT.PREVET or abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
bGoToHome = true bGoToHome = true
end end
@@ -713,18 +717,17 @@ function OnRapid()
local sES = ' ES'..EgtNumToString( EMT.S, 0) 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 -- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then if not EMT.LOAD and EMT.PREVHEAD == 'H3' and EMT.FLAG2 == 1 then
-- se ho ancora motosega, si setta già asse C, altrimenti asse C per andare in home
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) .. ' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES ' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES ' B' .. EmtLenToString( 0, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
EmtOutput( sOutPreMove) ' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001') EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001') EmtOutput( 'G101 ET2001')
end end
@@ -735,20 +738,26 @@ function OnRapid()
end end
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione -- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
local 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)
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
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001')
-- ruoto in zona sicura prima di approcciare la lavorazione
elseif not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then ( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
local sOutPreMove local sOutPreMove
if EMT.HEAD == 'H3' and bGoToHome then if EMT.HEAD == 'H3' and bGoToHome then
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1pp, 3) .. sEE .. sEL .. sER .. sET .. sES ' B' .. EgtNumToString( 0, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
EmtOutput( sOutPreMove)
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) EmtOutput( sOutPreMove)
end end
sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) .. 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 ' B' .. EgtNumToString( EMT.R2, 3) .. ' C' .. EgtNumToString( EMT.R1, 3) .. sEE .. sEL .. sER .. sET .. sES
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001') EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001') EmtOutput( 'G101 ET2001')
@@ -1426,7 +1435,7 @@ function PrepareUnload( sCmd)
table.insert( EMT.AUXCMD, sMsg) table.insert( EMT.AUXCMD, sMsg)
if Cmd[2] == 'V' then if Cmd[2] == 'V' then
-- se non è ultima fase c'è una barra sulla pinza Y (1) -- se non è ultima fase c'è una barra sulla pinza Y (1)
local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '0', '1') local sEE = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '0', '1')
local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp() local sOut = 'G111 '..Cmd[2]..Cmd[3]..' EC141 ED83 EE'..sEE..' EF'..GetFmaxClamp()
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
end end
@@ -1435,7 +1444,7 @@ function PrepareUnload( sCmd)
table.insert( EMT.AUXCMD, sMsg) table.insert( EMT.AUXCMD, sMsg)
if Cmd[4] == 'V' then if Cmd[4] == 'V' then
-- se non è ultima fase c'è una barra sulla pinza Y (1) -- se non è ultima fase c'è una barra sulla pinza Y (1)
local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount(), '111', '112') local sEAB = EgtIf( EMT.PHASE == EgtGetPhaseCount() or IsEnd2Phase( EMT.PHASE), '111', '112')
local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp() local sOut = 'G111 '..Cmd[4]..Cmd[5]..' EA'..sEAB..' EB'..sEAB..' EC142 ED141 EE2 EF'..GetFmaxClamp()
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
EMT.U_STD = true EMT.U_STD = true
@@ -1595,10 +1604,13 @@ function PreparePostRotation( sCmd)
elseif nVDelta > 0 then elseif nVDelta > 0 then
EMT.YDELTA = nil EMT.YDELTA = nil
EMT.VDELTA = nVDelta EMT.VDELTA = nVDelta
end end
local sYLoad = ' Y'..EmtLenToString( LoadT) local sYLoad = ' Y'..EmtLenToString( LoadT)
local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1' local sOut = 'G111'..sYLoad..' EA76'..EMT.SB..' EE0 EF'..EmtLenToString( EMT.FMAXPINZE,0)..' ET1'
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
-- setto parametri di pinzaggio reali
EMT.SA = ' EA110'
EMT.SE = ' EE1'
end end
end end
+41 -16
View File
@@ -525,6 +525,9 @@ function OnMachiningEnd()
EMT.PREVTOOL = EMT.TOOL EMT.PREVTOOL = EMT.TOOL
EMT.PREVHEAD = EMT.HEAD EMT.PREVHEAD = EMT.HEAD
EMT.PREVS = EMT.S EMT.PREVS = EMT.S
-- salvo posizione
EMT.PREVTCPOS = AdjustTcPos( false)
end end
--------------------------------------------------------------------- ---------------------------------------------------------------------
@@ -539,6 +542,7 @@ function OnPathStart()
-- salvo precedenti rotanti -- salvo precedenti rotanti
EMT.R1pp = EMT.R1p EMT.R1pp = EMT.R1p
EMT.R2pp = EMT.R2p EMT.R2pp = EMT.R2p
EMT.R3pp = EMT.R3p
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento) -- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev() EmtResetPrev()
@@ -659,9 +663,11 @@ function OnRapid()
end end
end end
local sTcPosReal = AdjustTcPos( false)
local bGoToHome = false local bGoToHome = false
-- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio -- se gli assi rotanti cambiano parecchio, con motosega si va in parcheggio
if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and EMT.TCPOS == EMT.PREVTCPOS and ( abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then if EMT.PREVHEAD == 'H3' and EMT.HEAD == 'H3' and ( sTcPosReal ~= EMT.PREVTCPOS or abs( EMT.R2pp - EMT.R2) > 25 or abs( EMT.R1pp - EMT.R1) > 25) then
bGoToHome = true bGoToHome = true
end end
@@ -676,9 +682,9 @@ function OnRapid()
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4') ' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) .. sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) .. ' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) .. ' P6=' .. EgtNumToString( EMT.PREVTCPOS, EMT.DECMACRO) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4') ' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
EmtOutput( sOutPreMove) EmtOutput( sOutPreMove)
EmtOutput( 'M101 P1=2') EmtOutput( 'M101 P1=2')
EmtOutput( 'M101 P1=3') EmtOutput( 'M101 P1=3')
@@ -690,15 +696,33 @@ function OnRapid()
end end
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione -- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
if not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
local 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')
if EMT.LOAD then
ParkLine( sOutPreMove)
else
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) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
if EMT.LOAD then
ParkLine( sOutPreMove)
ParkLine( 'M101 P1=2')
ParkLine( 'M101 P1=3')
else
EmtOutput( sOutPreMove)
EmtOutput( 'M101 P1=2')
EmtOutput( 'M101 P1=3')
end
elseif not EMT.LOAD and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TTOTLEN > 200)) and
( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then ( EMT.ST > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TTOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
local sOutPreMove local sOutPreMove
if EMT.HEAD == 'H3' and bGoToHome then if EMT.HEAD == 'H3' and bGoToHome then
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) ..
' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1pp, EMT.DECMACRO) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
EmtOutput( sOutPreMove)
sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, EMT.DECMACRO) .. ' P3=' .. EmtLenToString( MyZHome, EMT.DECMACRO) .. 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) .. ' P4=' .. EgtNumToString( 0, EMT.DECMACRO) .. ' P5=' .. EgtNumToString( EMT.R1, EMT.DECMACRO) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) .. ' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
@@ -1602,10 +1626,13 @@ function PreparePostRotation( sCmd)
elseif nVDelta > 0 then elseif nVDelta > 0 then
EMT.YDELTA = nil EMT.YDELTA = nil
EMT.VDELTA = nVDelta EMT.VDELTA = nVDelta
end end
local sYLoad = ' P2='..EmtLenToString( LoadT) local sYLoad = ' P2='..EmtLenToString( LoadT)
local sOut = 'M111 P1=11'..sYLoad..' P4=76'..EMT.SB..' P8=0 P9='..GetFmaxClamp() local sOut = 'M111 P1=11'..sYLoad..' P4=76'..EMT.SB..' P8=0 P9='..GetFmaxClamp()
table.insert( EMT.AUXSTR, sOut) table.insert( EMT.AUXSTR, sOut)
-- setto parametri di pinzaggio reali
EMT.SA = ' P4=110'
EMT.SE = ' P8=1'
end end
end end
@@ -1754,8 +1781,6 @@ function AdjustTcPos( bLen3)
sPos = '0' .. sPos sPos = '0' .. sPos
end end
end end
-- salvo posizione
EMT.PREVTCPOS = sPos
return sPos return sPos
end end
+48 -57
View File
@@ -464,11 +464,10 @@ function OnSimulDispositionStart()
EgtMove( nRawId, vtMove, GDB_RT.GLOB) EgtMove( nRawId, vtMove, GDB_RT.GLOB)
EmtLinkRawPartToGroup( nRawId, 'Y') EmtLinkRawPartToGroup( nRawId, 'Y')
end end
nRawId = nNextRawId
end end
--nRawId = nNextRawId nRawId = nNextRawId
EMT.LB = b3Bar:getDimX()
end end
EMT.LB = b3Bar:getDimX()
end end
-- Indicazione angolo rotazione pezzo -- Indicazione angolo rotazione pezzo
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0 EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
@@ -554,17 +553,15 @@ function OnSimulToolSelect( dPosA)
end end
EgtSetCurrMachining( NextMchId) EgtSetCurrMachining( NextMchId)
-- recupero il valore dell'asse virtuale bloccato A -- recupero il valore dell'asse virtuale bloccato A
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) dPosA = GetCurrChainSawingVirtualAxis()
dPosA = tonumber( sVal:sub( 3))
else else
-- imposto visualizzazione -- imposto visualizzazione
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD) EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
end end
-- imposto il valore di A -- imposto il valore di A
EgtSetAxisPos( 'A', dPosA) EgtSetAxisPos( 'A', dPosA)
if abs( dPosA) < 0.1 then local dHomeC = GetChainSawCHomeFromVirtualAxis( dPosA)
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0)) EgtSetAxisPos( 'C', dHomeC)
end
EgtSetAxisPos( 'B', 0) EgtSetAxisPos( 'B', 0)
-- se aggregato per fresa tipo blockhaus -- se aggregato per fresa tipo blockhaus
elseif EMT.HEAD == 'H7' then elseif EMT.HEAD == 'H7' then
@@ -609,12 +606,7 @@ function OnSimulToolDeselect()
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
-- raddrizzo asse B prima di ruotare il C -- raddrizzo asse B prima di ruotare il C
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
local dPosA = EgtGetAxisPos( 'A') SimulMoveAxis( 'C', 0, MCH_SIM_STEP.COLLROT)
if abs( dPosA) < 0.1 then
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
else
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.COLLROT)
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' or EMT.HEAD == 'H6' then elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
@@ -657,12 +649,7 @@ function OnSimulToolDeselect()
SimulMoveAxes( 'B', EgtIf( GetTCSet( EMT.TCPOS) == 1, 90, -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
if EMT.NEXTHEAD == 'H3' then if EMT.NEXTHEAD == 'H3' then
local dPosA = EgtGetAxisPos( 'A') SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', 0, MCH_SIM_STEP.RAPROT)
if abs( dPosA) < 0.1 then
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, 270), MCH_SIM_STEP.RAPROT)
else
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, -180, 0), MCH_SIM_STEP.COLLROT)
end
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
@@ -722,8 +709,7 @@ function OnSimulMachiningStart()
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare -- 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 if EMT.HEAD == 'H3' and EMT.HEAD == EMT.PREVHEAD then
local dPrevA = EgtGetAxisPos( 'A') local dPrevA = EgtGetAxisPos( 'A')
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) local dPosA = GetCurrChainSawingVirtualAxis()
local dPosA = tonumber( sVal:sub( 3))
if abs( dPosA - dPrevA) > 1 then if abs( dPosA - dPrevA) > 1 then
OnSimulToolDeselect() OnSimulToolDeselect()
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON) EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
@@ -854,10 +840,15 @@ function OnSimulMoveStart()
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.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) and if EMT.HEAD == 'H3' and EMT.PREVHEAD ~= 'H3' then
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
elseif not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) and
( EMT.HT > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then ( EMT.HT > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
-- se motosega mi muovo a X di sicurezza per ruotare, prima si raddrizza B e poi C in posizione -- se motosega mi muovo a X di sicurezza per ruotare, prima si raddrizza B e poi C in posizione
if EMT.HEAD == 'H3' or bGoToHome then if EMT.HEAD == 'H3' and bGoToHome then
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID) SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B', 0, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C', EMT.R1, MCH_SIM_STEP.COLLROT)
@@ -1100,16 +1091,17 @@ end
--------------------------------------------------------------------- ---------------------------------------------------------------------
function CheckClamping( sClampName) function CheckClamping( sClampName)
nIndexClamp = EgtGetAxisId( sClampName)
local idClampPath = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nIndexClamp, 'CLAMP_CHECK') or GDB_ID.NULL) local nClampId = EgtGetAxisId( sClampName) or GDB_ID.NULL
local b3ClampingArea = EgtGetBBoxGlob( idClampPath or GDB_ID.NULL, GDB_BB.STANDARD) local nClampPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nClampId, 'CLAMP_CHECK') or GDB_ID.NULL)
local b3ClampingArea = EgtGetBBoxGlob( nClampPathId or GDB_ID.NULL, GDB_BB.STANDARD)
-- se non trovo percorso area di clamping, esco subito -- se non trovo percorso area di clamping, esco subito
if not idClampPath or not EMT.VMILL or not ClampingCoeffMin then if not nClampPathId or not EMT.VMILL or not ClampingCoeffMin then
return return
end end
local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth) local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
local idCurveList = {} local vCurveListId = {}
local vtIntersPlane local vtIntersPlane
-- piano di interpolazione -- piano di interpolazione
if sIntersPlane == 'X' then if sIntersPlane == 'X' then
@@ -1128,44 +1120,35 @@ function CheckClamping( sClampName)
elseif sPosIntersPlane == 'MAX' then elseif sPosIntersPlane == 'MAX' then
ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane
end end
local nLoopId, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB)
local idLoop, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB) vCurveListId = EgtTableAdd( vCurveListId, nLoopId, nLoopCnt)
-- se c'è almeno una curva
if idLoop then
for j = 1, nLoopCnt do
local idLoopTemp = idLoop + j - 1
table.insert( idCurveList, idLoopTemp)
end
end
end end
return idCurveList
return vCurveListId
end end
local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth) local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth)
-- test piano frontale -- test piano frontale
local idCurveList = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth) local vCurveListId = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
-- si copia curva intersezione e curva pinza in gruppo di confronto -- si copia curva intersezione e curva pinza in gruppo di confronto
local idFlatSurf, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idCurveList) local nFlatSurfId, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, vCurveListId)
local idClampSurf = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idClampPath) local vFlatSurfId = EgtTableFill( nFlatSurfId, nFlatSurfCnt) or {}
local nClampSurfId = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, nClampPathId)
if idFlatSurf then local dTotalArea = 0
local dTotalArea = 0 local dTotalXLenght = 0
local dTotalXLenght = 0 for i = 1, #vFlatSurfId do
for k = 1, nFlatSurfCnt do local nTempSurfId = vFlatSurfId[i]
local idTempSurf = idFlatSurf + k - 1 EgtSurfFrIntersect( nTempSurfId, nClampSurfId)
EgtSurfFrIntersect( idTempSurf, idClampSurf) if nTempSurfId then
if idTempSurf then dTotalArea = dTotalArea + ceil( EgtSurfArea( nTempSurfId) or 0)
dTotalArea = dTotalArea + ceil( EgtSurfArea( idTempSurf) or 0) local b3BoxIntersectionBox = EgtGetBBoxGlob( nTempSurfId, GDB_BB.STANDARD)
local b3BoxIntersectionBox = EgtGetBBoxGlob( idTempSurf, GDB_BB.STANDARD) if b3BoxIntersectionBox then
if b3BoxIntersectionBox then dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
end
end end
end end
return dTotalArea, dTotalXLenght
end end
return 0 return dTotalArea, dTotalXLenght
end end
-- minima area considerata per un corretto pinzaggio -- minima area considerata per un corretto pinzaggio
@@ -1920,6 +1903,14 @@ function GetParkT()
end end
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) function CalcDinamicaPinze_TPA( dH, dS, dL)
local MinTempoAcc = EMT.MINACC -- [ms] ~300 local MinTempoAcc = EMT.MINACC -- [ms] ~300
+57 -24
View File
@@ -32,7 +32,6 @@ end
---------- OnSpecialApplyDisposition & OnPostApplyMachining --------- ---------- OnSpecialApplyDisposition & OnPostApplyMachining ---------
----------------------- Costanti ------------------------------------ ----------------------- Costanti ------------------------------------
local DELTA_TOL_FIXED = 50 local DELTA_TOL_FIXED = 50
local DeltaTol = 210
local DELTA_SIC = 1 local DELTA_SIC = 1
local AGG_LOAD = 50 local AGG_LOAD = 50
@@ -1537,9 +1536,12 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
dTPosF = MaxV - dVDeltaF dTPosF = MaxV - dVDeltaF
end 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 -- 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 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 ( EMC.YDELTA ~= EMC.YDELTANEXT or EMC.VDELTA ~= EMC.VDELTANEXT) then
if #vCmd == 0 then if #vCmd == 0 then
table.insert( vCmd, { 0, 'Clamp repositioning'}) table.insert( vCmd, { 0, 'Clamp repositioning'})
-- risalita testa a Zmax -- risalita testa a Zmax
@@ -1570,8 +1572,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI dMaxMovePilgrimStepSingleClampY = MaxY - dYPosI
dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI dMaxMovePilgrimStepSingleClampV = - MinV + dVPosI
else else
dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV dMaxMovePilgrimStepDoubleClamp = MaxY - MyMinY - MinV + MaxV
dMaxMovePilgrimStepSingleClampY = MaxY - MinY dMaxMovePilgrimStepSingleClampY = MaxY - MyMinY
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
end end
@@ -1611,6 +1613,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- se spostamento verso il carico -- se spostamento verso il carico
elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then elseif ( dVPosI + ( dVDeltaF - dVDeltaI)) > MaxV then
dBeamMove = dVPosI + ( dVDeltaF - dVDeltaI) - MaxV 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 end
-- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare -- se serve un grande spostamento e si sta pinzando poco. Y trascinatore pinza poco e V si sposta per prima per recuperare
@@ -1685,6 +1699,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- movimento terminato -- movimento terminato
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
EMC.YDELTA = EMC.YDELTANEXT
EMC.VDELTA = EMC.VDELTANEXT
-- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE -- SECONDO CASO -> SCAMBIO DIRETTO : Y IN POSIZIONE FINALE
-- Y può andare in posizione direttamente se : -- Y può andare in posizione direttamente se :
@@ -1721,6 +1737,18 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- se spostamento verso il carico -- se spostamento verso il carico
elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then elseif ( dYPosI + ( dYDeltaF - dYDeltaI)) > MaxY then
dBeamMove = -( dYPosI + ( dYDeltaF - dYDeltaI) - MaxY) 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 end
-- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare -- se serve un grande spostamento e si sta pinzando poco. V trascinatore pinza poco e Y si sposta per prima per recuperare
@@ -1794,6 +1822,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
end end
-- movimento terminato -- movimento terminato
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
EMC.YDELTA = EMC.YDELTANEXT
EMC.VDELTA = EMC.VDELTANEXT
-- TERZO CASO -> PASSO DEL PELLEGRINO -- TERZO CASO -> PASSO DEL PELLEGRINO
-- non è possibile fare scambio diretto. -- non è possibile fare scambio diretto.
@@ -1833,8 +1863,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
dTPosI = dTPosA dTPosI = dTPosA
dYPosI = dYPosA dYPosI = dYPosA
dVPosI = dVPosA dVPosI = dVPosA
dMaxMovePilgrimStepDoubleClamp = MaxY - MinY - MinV + MaxV dMaxMovePilgrimStepDoubleClamp = MaxY - MyMinY - MinV + MaxV
dMaxMovePilgrimStepSingleClampY = MaxY - MinY dMaxMovePilgrimStepSingleClampY = MaxY - MyMinY
dMaxMovePilgrimStepSingleClampV = - MinV + MaxV dMaxMovePilgrimStepSingleClampV = - MinV + MaxV
end end
@@ -1842,6 +1872,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
dDeltaBeam = dTPosI - dTPosF dDeltaBeam = dTPosI - dTPosF
-- a questo punto entrambe le pinze sono in presa sul pezzo. -- 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 -- Il trascinatore si decide in base alla direzione di movimento trave
-- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima -- trascino con morsa allo scarico. Obiettivo mandare Y in posizione per prima
if dDeltaBeam > 0 then if dDeltaBeam > 0 then
@@ -1884,18 +1915,20 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
-- recupero una corsa massima e l'altra solo di quello che serve -- 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 + dVDeltaF) / 2 + ( dYDeltaI + dVDeltaI) / 2) / 2
-- morsa Y arriva in posizione finale -- morsa Y arriva in posizione finale
dYDeltaI = dYDeltaF dVPosA = EgtClamp( MaxV - dTotMove, MaxV, MinV)
dVPosA = MinV dTPosA = dTPosI - dVPosI + dVPosA
dTPosA = dTPosI - dVPosI + MinV
dYPosA = dYDeltaF + dTPosA dYPosA = dYDeltaF + dTPosA
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)})
table.insert( vCmd, { 12, 0}) table.insert( vCmd, { 12, 0})
dYDeltaI = dYDeltaF
dTPosI = dTPosA dTPosI = dTPosA
EMC.YDELTA = dYDeltaF EMC.YDELTA = dYDeltaF
EMC.VDELTA = dVDeltaI EMC.VDELTA = nil
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
-- non serve recuperare al massimo della corsa, suddivido movimento in due -- non serve recuperare al massimo della corsa, suddivido movimento in due
@@ -1929,9 +1962,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
end end
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
EMC.YDELTA = EMC.YDELTANEXT
-- aggiorno nuova posizione della morsa allo scarico dopo riposizionamento EMC.VDELTA = EMC.VDELTANEXT
dVDeltaI = dVDeltaF
end end
-- imposto i nuovi parametri di aggancio -- imposto i nuovi parametri di aggancio
@@ -1990,17 +2022,19 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
-- recupero una corsa massima e l'altra solo di quello che serve -- recupero una corsa massima e l'altra solo di quello che serve
elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampV then elseif abs( dVDeltaI - dVDeltaF) > dMaxMovePilgrimStepSingleClampY then
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento -- suddivido il movimento su entrambe le morse
dVDeltaI = dVDeltaF local dTotMove = ( ( dYDeltaF + dVDeltaF) / 2 + ( dYDeltaI + dVDeltaI) / 2) / 2
dYPosA = MaxY -- morsa V arriva in posizione finale
dTPosA = dTPosI + ( MaxY - dYPosI) dYPosA = EgtClamp( MinY + dTotMove, MinY, MaxY)
dTPosA = dTPosI - dYPosI + dYPosA
dVPosA = dVDeltaF + dTPosA dVPosA = dVDeltaF + dTPosA
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)}) table.insert( vCmd, { 12, CalcCharStatus( 'V', dVDeltaF)})
table.insert( vCmd, { 11, 0}) table.insert( vCmd, { 11, 0})
dVDeltaI = dVDeltaF
dTPosI = dTPosA dTPosI = dTPosA
EMC.YDELTA = dYDeltaI EMC.YDELTA = nil
EMC.VDELTA = dVDeltaF EMC.VDELTA = dVDeltaF
-- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo -- mi serve riposizonare di nuovo, quindi richiamo funzione in modo ricorsivo
SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos) SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF, dVDeltaF, bFixedDelta, bFixedPos)
@@ -2035,9 +2069,8 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
end end
table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA}) table.insert( vCmd, { 3, 'Y', dYPosA , 'T', dTPosA, 'V', dVPosA})
dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF dTPosI, dYDeltaI, dVDeltaI = dTPosF, dYDeltaF, dVDeltaF
EMC.YDELTA = EMC.YDELTANEXT
-- aggiorno nuova posizione della morsa al carico dopo riposizionamento EMC.VDELTA = EMC.VDELTANEXT
dYDeltaI = dYDeltaF
end end
-- imposto i nuovi parametri di aggancio -- imposto i nuovi parametri di aggancio
+64 -32
View File
@@ -24,10 +24,10 @@
require( 'EmtGenerator') require( 'EmtGenerator')
EgtEnableDebug( false) EgtEnableDebug( false)
PP_VER = '2.7l4_DEV1' PP_VER = '3.1d2'
PP_NVER = '2.7.12.4' PP_NVER = '3.1.4.2'
MIN_MACH_VER = '2.7j1' MIN_MACH_VER = '2.7j1'
MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio MACH_NAME = EgtGetCurrMachineName()
-- Carico i dati globali -- Carico i dati globali
local sMachDir = EgtGetCurrMachineDir() local sMachDir = EgtGetCurrMachineDir()
@@ -46,7 +46,7 @@ end
EgtOutLog ( '** ' .. MACH_NAME..' '..PP_VER..' ** ( '..INFO_STD_PP.NAME..': '..INFO_STD_PP.VERSION..' - MinMach: '.. MIN_MACH_VER ..') **', 1) EgtOutLog ( '** ' .. MACH_NAME..' '..PP_VER..' ** ( '..INFO_STD_PP.NAME..': '..INFO_STD_PP.VERSION..' - MinMach: '.. MIN_MACH_VER ..') **', 1)
-- Parametri macchina -- Parametri macchina
NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
MinX = 0 MinX = 0
MaxX = 1350 MaxX = 1350
MinZ = -1350 MinZ = -1350
@@ -65,6 +65,7 @@ LoadT = 1454.2
UnloadT = -1700 UnloadT = -1700
MaxOpen = 305 MaxOpen = 305
MillOffs = 177.35 MillOffs = 177.35
DistRotCenterBToTopC = 403 -- distanza tra il centro di rotazione del mandrino B e la mensola C
SawOffs = -242.68 SawOffs = -242.68
SawBOffs = 0 SawBOffs = 0
SawCOffs = 0 SawCOffs = 0
@@ -75,7 +76,7 @@ AngTrBHOffs = 154.5
AngTrBHLen = 90 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
DimTabY = 400 DimTabY = 400
DimTabX = 34000 DimTabX = 34000
LenToPress = 900 LenToPress = 900
@@ -86,22 +87,24 @@ DefTcPos = 'T2'
SecondSupport = 0 SecondSupport = 0
SpecialBH = false SpecialBH = false
MaxUnloadLen = 0 MaxUnloadLen = 0
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500 BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
NewTopC = true NewTopC = true
SafeXRotAxes = 150 SafeXRotAxes = 150
AggreBlockHaus = false AggreBlockHaus = false
SecondToolChanger = false SecondToolChanger = false
EstimationRapidMultiplier = 1 EstimationRapidMultiplier = 1
DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa
ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data
MinJoinVV = 75 MinJoinVV = 75
MinJoinSS = 100 MinJoinSS = 100
MinJoinLS = 290 MinJoinLS = 290
MinJoinSL = 100 MinJoinSL = 100
MinJoinLL = 400 MinJoinLL = 400
DistHeadToCabinUnload = nil -- distanza tra la paratia al carico e la testa macchina (Y) in valore assoluto
DistHeadToCabinLoad = nil -- distanza tra la paratia allo scarico e la testa macchina (Y) in valore assoluto
-- costanti dimensioni utensili -- costanti dimensioni utensili
LONG_TOOL_MINLEN = 221 LONG_TOOL_MINLEN = 218.5
BIG_TOOL_DIAM = 300 BIG_TOOL_DIAM = 300
-- leggo e aggiorno con parametri da BeamData -- leggo e aggiorno con parametri da BeamData
@@ -178,6 +181,10 @@ if EgtExistsFile( sData) then
if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end
if Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE then BeamHeightForFixRot = Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE end if Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE then BeamHeightForFixRot = Machine.Offsets.MAX_HEIGHT_ROT_B_ABOVE end
if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end
if Machine.Offsets.DIST_ROT_CENTER_B_TO_TOP_C then DistRotCenterBToTopC = EgtClamp( Machine.Offsets.DIST_ROT_CENTER_B_TO_TOP_C, 395, 410) end
if Machine.Offsets.LONG_TOOL_MINLEN then LONG_TOOL_MINLEN = EgtClamp( Machine.Offsets.LONG_TOOL_MINLEN, 216, 226.1) end
if Machine.Offsets.DIST_HEAD_TO_CABIN_UNLOAD then DistHeadToCabinUnload = Machine.Offsets.DIST_HEAD_TO_CABIN_UNLOAD end
if Machine.Offsets.DIST_HEAD_TO_CABIN_LOAD then DistHeadToCabinLoad = Machine.Offsets.DIST_HEAD_TO_CABIN_LOAD end
end end
end end
end end
@@ -185,6 +192,7 @@ if SpecialBH then SecondSupport = 0 end
-- Aggiorno valori MinJoin -- Aggiorno valori MinJoin
MinJoin = MinJoinSS MinJoin = MinJoinSS
MinOther = abs( MinY) + abs( MaxV) + MinJoin MinOther = abs( MinY) + abs( MaxV) + MinJoin
DeltaTol = 210
-- compongo i gruppi appartenenti alla base -- compongo i gruppi appartenenti alla base
local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'} local sBaseAux = {'BASE/SOLID', 'BASE/TC', 'BASE/SIGN', 'BASE/COLLISION'}
@@ -204,7 +212,19 @@ local BaseId = EmtBase {
Name = 'Base', Name = 'Base',
Geo='BASE/GEO', Geo='BASE/GEO',
Aux = sBaseAux} Aux = sBaseAux}
-- Sposta la faccia interna alla cabina dei solidi di collisione se sono impostati nel TS3Data, valori positivi
if DistHeadToCabinLoad then
local nSide1Id = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), 'SIDE1')
local b3Collision = EgtGetBBox( nSide1Id, GDB_BB.STANDARD)
local vtMove = Vector3d( -abs( DistHeadToCabinLoad) - b3Collision:getMax()[1], 0, 0)
EgtSurfTmMoveFacet( nSide1Id, 3, vtMove, GDB_RT.GLOB)
end
if DistHeadToCabinUnload then
local nSide2Id = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'COLLISION'), 'SIDE2')
local b3Collision = EgtGetBBox( nSide2Id, GDB_BB.STANDARD)
local vtMove = Vector3d( abs( DistHeadToCabinUnload) - b3Collision:getMin()[1], 0, 0)
EgtSurfTmMoveFacet( nSide2Id, 3, vtMove, GDB_RT.GLOB)
end
local XId = EmtAxis { local XId = EmtAxis {
Name = 'X', Name = 'X',
Parent = 'Base', Parent = 'Base',
@@ -236,28 +256,28 @@ local CId = EmtAxis {
Home = 0, Home = 0,
Geo = 'C_AXIS/GEO', Geo = 'C_AXIS/GEO',
Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION', 'C_AXIS/COLLISION2'}} Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION', 'C_AXIS/COLLISION2'}}
if NewTopC then
local vtMove = Vector3d( 65,0,0) -- Imposto i vettori di movimento separatamente se sono presenti le variabili di riferimento
local SolidArmId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'ARM') local vtXMove = Vector3d( EgtIf( NewTopC, 65, 0), 0, 0)
if EgtSurfTmMoveFacet then -- si prende la minima distanza tra DistRotCenterBToTopC e LONG_TOOL_MINLEN + pivot (comunque distanza minima 403)
EgtSurfTmMoveFacet( SolidArmId, 11, vtMove, GDB_RT.GLOB) local dZMove = max( 403, min( ( MillOffs + LONG_TOOL_MINLEN + 5), DistRotCenterBToTopC)) - 400
else local vtZMove = Vector3d( 0, 0, dZMove)
EgtSurfTmMoveVertex( SolidArmId, 23, EgtSurfTmGetVertex( SolidArmId, 23, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB) -- Muove le facce in X e Z del solido principale
EgtSurfTmMoveVertex( SolidArmId, 25, EgtSurfTmGetVertex( SolidArmId, 25, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB) local SolidArmId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'SOLID'), 'ARM')
EgtSurfTmMoveVertex( SolidArmId, 35, EgtSurfTmGetVertex( SolidArmId, 35, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB) EgtSurfTmMoveFacet( SolidArmId, 14, vtZMove, GDB_RT.GLOB)
EgtSurfTmMoveVertex( SolidArmId, 36, EgtSurfTmGetVertex( SolidArmId, 36, GDB_RT.GLOB) + vtMove, GDB_RT.GLOB) EgtSurfTmMoveFacet( SolidArmId, 11, vtXMove, GDB_RT.GLOB)
end -- Muove il solido di collisione denominato "TOP" in X e muove la sua faccia inferiore per portarla al pari del solido principale
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP') local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP')
EgtMove( CollTopId, vtMove, GDB_RT.GLOB) EgtMove( CollTopId, vtXMove, GDB_RT.GLOB)
EgtSetName( CollTopId, 'BOX') EgtSurfTmMoveFacet( CollTopId, 4, vtZMove, GDB_RT.GLOB)
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i') EgtSetName( CollTopId, 'BOX')
EgtSetInfo( RefId, 'CollSkip', 'C_TOP') -- Imposta nel Frame di riferimento l'info "CollSkip"
else local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i')
local CollTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION'), 'TOP') EgtSetInfo( RefId, 'CollSkip', 'C_TOP')
EgtSetName( CollTopId, 'BOX') -- Muove il solido di collisione C_TOP
local RefId = CollTopId + EgtGetInfo( CollTopId, 'Frame', 'i') local CollUtTopId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( CId, 'COLLISION2'), 'C_TOP')
EgtSetInfo( RefId, 'CollSkip', 'C_TOP') EgtMove( CollUtTopId, vtZMove, GDB_RT.GLOB)
end
EmtAxis { EmtAxis {
Name = 'B', Name = 'B',
Parent = 'C', Parent = 'C',
@@ -705,6 +725,18 @@ function OnSetHead()
end end
end end
---------------------------------------------------------------------
-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale
function GetChainSawCHomeFromVirtualAxis( dPosA)
-- se A=0 -> T111 -> HomeC = 0
if abs( dPosA) < 0.1 then
return EgtIf( BD.RIGHT_LOAD, -180, 0)
-- altrimenti A=90 -> T114 -> HomeC = -90
else
return EgtIf( BD.RIGHT_LOAD, 90, 270)
end
end
--------------------------------------------------------------------- ---------------------------------------------------------------------
-- Funzione per impostare spia stato morsa carrello Y -- Funzione per impostare spia stato morsa carrello Y
function SetPYLight( bClosed) function SetPYLight( bClosed)
BIN
View File
Binary file not shown.
+26 -17
View File
@@ -20,6 +20,7 @@
2=d,OpenMinSafe,0 2=d,OpenMinSafe,0
3=d,OpenOutRaw,0 3=d,OpenOutRaw,0
4=l,MaxOptSize,0 4=l,MaxOptSize,0
5=b,AdjustFeed,1
[Mortising] [Mortising]
0=l,MaxElev,0 0=l,MaxElev,0
@@ -33,26 +34,34 @@
[GenMachining] [GenMachining]
[SurfRoughing] [SurfRoughing]
0=l,MaxElev,1000 0=l,MaxElev,0
1=b,PlaneZ,0 1=b,PlaneZ,0
2=i,Order,[0=ByPlane;1=ByDepth]
[SurfFinishing] [SurfFinishing]
0=b,SkipMaxDown,1 0=b,SkipMaxDown,1
1=i,OptimalType,[0=ZigZag;2=SpiralIn;3=SpiralOut]
2=d,SplitAngle,45
3=d,AngleTol,5
[5AxMilling] [5AxMilling]
0=l,LinTol,0.01 0=s,VtAuxDir,0,1,0
1=l,MaxLen,10 1=l,LinTol,0.01
2=s,Type,ZigZag 2=l,MaxLen,10
3=d,SideAng,90 3=i,ProjType,[0=MinDist;1=FixedDir;2=Guide]
4=l,Step,10 4=i,PocketType,[0=ZigZag;2=SpiralIn;3=SpiralOut]
5=d,AngIni,-90 5=d,PocketAng,0
6=d,AngFin,90 6=d,SideAng,90
7=l,LiTang,0 7=d,LeadAng,0
8=l,LiOrth,0 8=l,Step,10
9=l,LiElev,0 9=d,AngIni,-90
10=l,LoTang,0 10=d,AngFin,90
11=l,LoOrth,0 11=l,LiTang,0
12=l,LoElev,0 12=l,LiOrth,0
13=b,DirFromGuide,0 13=l,LiElev,0
14=b,SurfAvoid,0 14=l,LoTang,0
15=l,LoOrth,0
16=l,LoElev,0
17=b,DirFromGuide,0
18=b,SurfAvoid,0
19=d,SingConeAng,0.1
Binary file not shown.
+24
View File
@@ -1,5 +1,29 @@
==== Common_FAST Update Log ==== ==== Common_FAST Update Log ====
Versione 3.1d2 (22/04/2026)
- (GEN) Corretta generazione del PreparePostRotation (in tutti i CN) ora salva lo stato della pinza per lo spostamento successivo. Ticket#2933
- (SIM-GEN) Corretto pinzaggio in caso di passo del pellegrino con recupero completo di una sola pinza
Versione 3.1d1 (14/04/2026)
- (SIM-GEN) Aggiorna lo step totale del PilgrimStep e lo step Y con il valore di MyMinY, di modo che tenga conto del AGG_LOAD quando c'è. Ticket#2919
- (GEN) Per NUM, si lascia aperta la pinza di carico in caso di END2. TPA era già corretto. Ticket#2869
Versione 3.1c2 (30/03/2026)
- (SIM-GEN) Corretti moviemnti con motosega. Ora si ruota la C con B sempre a zero, anche alla posizione X di sicurezza. Ticket#2866
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.
- (MLDE-SIM-GEN) Variabile DeltaTol deve essere spostata in MLDE
Versione 2.7l3 (22/12/2025) Versione 2.7l3 (22/12/2025)
- (SIM) Eliminata MinJoin, utilizzata al suo posto funzione già esistente UpdateMinJoin nell'mlde - (SIM) Eliminata MinJoin, utilizzata al suo posto funzione già esistente UpdateMinJoin nell'mlde
- (SIM) Modificata formula calcolo Area minima - (SIM) Modificata formula calcolo Area minima
+1 -1
View File
@@ -3,7 +3,7 @@
local InfoCommon_STD_PP = { local InfoCommon_STD_PP = {
NAME = 'Common_FAST', -- nome script PP standard NAME = 'Common_FAST', -- nome script PP standard
VERSION = '2.7l3', -- versione script VERSION = '3.1d2', -- versione script
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
} }