Compare commits

...

14 Commits

Author SHA1 Message Date
andrea.villa 0bc8997ae2 Merge remote-tracking branch 'origin/develop' 2024-02-29 08:26:55 +01:00
andrea.villa 408fb467d1 Gestione rimozione VMILL per tagli a cubetti a zig-zag 2024-02-29 08:26:39 +01:00
andrea.villa 7ce5c020fc Piccola correzione calcolo accelerazione pinze 2024-02-28 14:33:59 +01:00
andrea.villa 23a5b99a90 Gestione accelerazioni pinze in M115 ( solo per TPA) 2024-02-28 12:54:05 +01:00
andrea.villa 9acba47f91 Allineamento con common ver. 2.6c5 2024-02-28 12:07:32 +01:00
andrea.villa 3c327abd4d Merge branch 'master' into develop 2024-02-27 15:07:34 +01:00
andrea.villa 4709c55227 Allineamento con common ver. 2.6c4. Aggiunto parametro 'SafeXRotAxes' per rotazione motosega con pezzi alti 2024-02-27 15:06:44 +01:00
luca.mazzoleni b01a097fb2 Merge branch 'master' into develop 2024-02-27 12:12:15 +01:00
andrea.villa 672cc5ff90 Allineamento con common ver. 2.6c3 2024-02-23 11:58:21 +01:00
andrea.villa 5de2fd1b45 - Rimossa chiamata funzione EgtGetSourceDir
- Allineamento con common ver. 2.6c2
2024-02-23 10:47:04 +01:00
andrea.villa 264c78d8df 2.6c1 : Prima versione post-proc comune FAST e FASTrl 2024-02-23 10:22:56 +01:00
luca.mazzoleni 8e39bc08a8 update compile 2024-02-22 18:00:52 +01:00
luca.mazzoleni e3082d52c4 update compile 2024-02-22 17:51:22 +01:00
luca.mazzoleni 3810893c36 aggiunti file per compilazione 2024-02-22 11:01:45 +01:00
10 changed files with 432 additions and 221 deletions
+4 -2
View File
@@ -6,6 +6,7 @@ EgtOutLog( ' FAST-BeamData started', 1)
-- Tabella per definizione modulo
local BeamData = {
GO_FAST = 0, -- flag abilitazione modalità veloce (0=no, 1=carrelli, 2=anche cambio utensili)
RIGHT_LOAD = false, -- flag carico da destra
ROT90 = false, -- flag abilitazione rotazione 90 gradi
MIN_WIDTH = 40, -- larghezza minima del grezzo
MIN_HEIGHT = 40, -- altezza minima del grezzo
@@ -42,7 +43,7 @@ local BeamData = {
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
LONGCUT_ENDLEN = 600, -- lunghezza lavoro estremi iniziale e finale (std=600)
LONGCUT_MAXLEN = 1200, -- lunghezza massima sezione di taglio longitudinale (std=1200)
LONGCUT_MAXLEN = 1200, -- lunghezza massima sezione di taglio longitudinale
MAX_LEN_RIDGELAP_FROM_BOTTOM = 141, -- massima lunghezza ridgelap lavorabile da sotto
MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM = 96, -- massima lunghezza ridgelap lavorabile da sotto con trave alta
DIM_TO_CENTER_STRIP = 0, -- larghezza minima trave per inseriemento codolo nel centro del trave; 0 = automatico
@@ -51,6 +52,7 @@ local BeamData = {
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split
VICE_MINH = 110, -- altezza minima della morsa
VICE_MAXH = 370, -- altezza massima zona pinzaggio orizzontale
OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare)
USER_HOLE_DIAM = 0, -- diametro foro per L20
MAX_TOOL_LEN_FOR_HOR_MACH = 311, -- massima lunghezza utensile per poter fare forature (fresature) oltre i 10 gradi dalla verticale
@@ -70,7 +72,7 @@ local BeamData = {
-- Aggiornamento con dati da TechnoEssetre7
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-Fast.data"
local sData = EgtGetSourceDir().."\\Ts3Data.lua"
local sData = EgtGetCurrMachineDir().."\\Beam\\Ts3Data.lua"
if EgtExistsFile( sTs3Data) then
EgtCopyFile( sTs3Data, sData)
local sTs3DataOld = sTs3Data..'.old'
+50 -23
View File
@@ -1,21 +1,12 @@
-- Processore macchina Essetre-FAST by EgalTech s.r.l. 2023/10/18
-- Processore standard macchine FAST by EgalWare s.r.l. 2024/02/23
-- Con controllo numerico NUM
-- 2021/04/23 DS ver 2.3d3 Se non c'è BtlInfo cerco il gruppo di lavoro corrente.
-- 2021/07/21 DS ver 2.3g5 Modifiche varie da TPA.
-- 2021/07/23 DS ver 2.3g6 Corretta gestione LOAD90.
-- 2021/07/23 DS ver 2.3g7 Completamento allineamento con TPA.
-- 2021/07/27 DS ver 2.3g8 Corretto carico senza taglio di testa per salto G79 N9.
-- 2021/07/27 DS ver 2.3g9 Nome in testa a CN (%NNNN.0) da PATTID di BtlInfo.
-- 2021/07/29 DS ver 2.3g10 Con testa H2 (lama) non si emettono assi rotanti nel corso della lavorazione.
-- 2021/08/03 DS ver 2.3h2 Nei commenti le parentesi sono sostituite con il carattere -.
-- 2021/08/05 DS ver 2.3h4 Nel rapido se non bHeadFirst ritardo anche l'emissione di G101 a dopo G112.
-- 2021/11/17 DS ver 2.3k1 Correzioni di Nicola su rotazioni verificate da GCT.
-- 2021/12/28 DS ver 2.3l2 Correzioni a G101 (ora sempre con EE ed ET).
-- 2021/12/29 DS ver 2.3l3 Altre correzioni a G101 (se già in alto EE3 e sempre ES).
-- 2023/04/19 DS ver 2.5d1 Al carico dopo rotazione su linea con EA75 messo EB110 invece di 112.
-- carico librerie
local INFO_STD_PP = require( 'Version')
-- Variabili di modulo
local MLE_INFO = 'Essetre-FAST.NUM.mlpe ver.'..PP_VER..' by EgalTech s.r.l.'
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
local TEST_USE = false
---------------------------------------------------------------------
@@ -55,7 +46,8 @@ function OnProgramStart()
else
EmtOutput( '(Program Start)')
end
EmtOutput( '('.. MLE_INFO..')\n')
EmtOutput( '('.. CSP_INFO..')')
EmtOutput( '('.. MACHINE_INFO..')\n')
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
if TEST_USE then
EmtOutput( 'M28')
@@ -498,6 +490,7 @@ function OnMachiningEnd()
EMT.AUXTYPE = nil
EMT.U_STD = nil
EMT.PREVTOOL = EMT.TOOL
EMT.PREVHEAD = EMT.HEAD
end
---------------------------------------------------------------------
@@ -507,6 +500,11 @@ function OnPathStart()
-- primo posizionamento sempre in globale
EMT.REFLOC = nil
EMT.IPLGL = false
-- salvo precedenti rotanti
EMT.R1pp = EMT.R1p
EMT.R2pp = EMT.R2p
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev()
EMT.AUXCMD = {}
@@ -619,23 +617,52 @@ function OnRapid()
EMT.ZMAX = true
end
end
-- 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 EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001')
end
if not EMT.LOAD then
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
EmtOutput( '( *** ' .. sOut .. ' *** )')
end
-- primo posizionamento
EmtResetPrev()
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
-- ricavo i dati per la lavorazione
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
local sES = ' ES'..EgtNumToString( EMT.S, 0)
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
sOut = sOut .. ' EH1'
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
if EMT.HEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001')
end
EmtResetPrev()
-- se sono su pezzi alti e movimento da emettere, per sicurezza a Z massima
local MyZPos = EMT.L3
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
MyZPos = MyZHome
end
local sOut = 'G101' .. EmtGetAxis( 'L2') .. ' Z' .. EmtLenToString( MyZPos, 3) ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
-- faccio backup dati in caso mi servano per lavorazione successiva
EMT.PREVsEE = sEE ; EMT.PREVsEL = sEL ; EMT.PREVsER = sER ; EMT.PREVsET = sET ; EMT.PREVsES = sES
if EMT.LOAD or bHeadFirst then
sOut = sOut..' L0=0'
EmtOutput( sOut)
@@ -1,10 +1,12 @@
-- Processore macchina Essetre-FAST by EgalTech s.r.l. 2023/10/18
-- Processore standard macchine FAST by EgalWare s.r.l. 2024/02/23
-- Con controllo numerico NUM FlexiumPlus
-- 2022/09/20 DS ver 2.4i1 Prima versione.
-- 2023/04/19 DS ver 2.5d1 Al carico dopo rotazione su linea con EA75 messo EB110 invece di 112.
-- carico librerie
local INFO_STD_PP = require( 'Version')
-- Variabili di modulo
local MLE_INFO = 'Essetre-FAST.NUM_PLUS.mlpe ver.'..PP_VER..' by EgalTech s.r.l.'
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
local TEST_USE = false
---------------------------------------------------------------------
@@ -44,7 +46,8 @@ function OnProgramStart()
else
EmtOutput( '(Program Start)')
end
EmtOutput( '('.. MLE_INFO..')\n')
EmtOutput( '('.. CSP_INFO..')')
EmtOutput( '('.. MACHINE_INFO..')\n')
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
if TEST_USE then
EmtOutput( 'M28')
@@ -514,6 +517,7 @@ function OnMachiningEnd()
EMT.AUXTYPE = nil
EMT.U_STD = nil
EMT.PREVTOOL = EMT.TOOL
EMT.PREVHEAD = EMT.HEAD
EMT.PREVR3 = EMT.R3
end
@@ -524,6 +528,11 @@ function OnPathStart()
-- primo posizionamento sempre in globale
EMT.REFLOC = nil
EMT.IPLGL = false
-- salvo precedenti rotanti
EMT.R1pp = EMT.R1p
EMT.R2pp = EMT.R2p
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev()
EMT.AUXCMD = {}
@@ -637,23 +646,52 @@ function OnRapid()
EMT.PREVTOOL = EMT.TOOL
end
end
-- 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 EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
' B' .. EmtLenToString( EMT.R2pp, 3) .. ' C' .. EmtLenToString( EMT.R1pp, 3) ..
' EE' .. EgtIf( bZmax, '3', '4') .. EMT.PREVsEL .. EMT.PREVsER .. EMT.PREVsET .. EMT.PREVsES
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001')
end
if not EMT.LOAD then
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '-'), '%)', '-')
EmtOutput( '( *** ' .. sOut .. ' *** )')
end
-- primo posizionamento
EmtResetPrev()
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
-- ricavo i dati per la lavorazione
local sEE = ' EE' .. EgtIf( bZmax, '3', '4')
local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3)
local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3)
local sET = GetET( EMT.HEAD, EMT.TCPOS, EMT.R3)
local sES = ' ES'..EgtNumToString( EMT.S, 0)
local sOut = 'G101' .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
sOut = sOut .. ' EH1'
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
if EMT.HEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
local sEEPreMove = ' EE' .. EgtIf( bZmax, '3', '4')
local sOutPreMove = 'G101' .. ' X' .. EmtLenToString( -SafeXRotAxes, 3) .. ' Z' .. EmtLenToString( MyZHome, 3) ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
EmtOutput( sOutPreMove)
EmtOutput( 'G101 ET1001')
EmtOutput( 'G101 ET2001')
end
EmtResetPrev()
-- se sono su pezzi alti e movimento da emettere, per sicurezza a Z massima
local MyZPos = EMT.L3
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
MyZPos = MyZHome
end
local sOut = 'G101' .. EmtGetAxis( 'L2') .. ' Z' .. EmtLenToString( MyZPos, 3) ..
EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. sEE .. sEL .. sER .. sET .. sES
-- faccio backup dati in caso mi servano per lavorazione successiva
EMT.PREVsEE = sEE ; EMT.PREVsEL = sEL ; EMT.PREVsER = sER ; EMT.PREVsET = sET ; EMT.PREVsES = sES
if EMT.LOAD or bHeadFirst then
sOut = sOut .. ' L0=0'
if EMT.LOAD or #EMT.AUXSTR > 0 then
+90 -48
View File
@@ -1,29 +1,12 @@
-- Processore macchina Essetre-FAST by EgalTech s.r.l. 2023/10/18
-- Processore standard macchine FAST by EgalWare s.r.l. 2024/02/23
-- Con controllo numerico TPA
-- 2020/03/23 DS ver.2.2c3 Nei movimenti interpolati si usano 5 decimali, nei G24 6 decimali.
-- 2020/04/27 DS ver.2.2d3 Aggiunta gestione scarico speciale senza spostamento finale pezzo.
-- 2020/04/30 DS ver.2.2d5 Modifiche a scarico manuale.
-- 2020/05/19 DS ver.2.2e2 Modifiche per rotazione 90 gradi.
-- 2020/05/27 DS ver.2.2e6 Aggiunta gestione ordine posizionamento iniziale testa e carrelli quando non è Zmax.
-- 2020/06/10 DS ver.2.2f1 Aggiunta emissione di pezzo finito (M113..) dopo pezzo caduto (M155).
-- 2020/06/11 DS ver 2.2f2 Nel contenuto dei commenti si sostituiscono le parentesi tonde con le quadre.
-- 2020/09/03 DS ver 2.2i1 A M114 aggiunti P11 e P12. Modificato M102 P1=. Modificati commenti.
-- 2020/09/16 DS ver 2.2i2 OFFSETX e OFFSETZ da TS3v7 ora devono contenere tutto lo spiazzamento non più solo il delta dal nominale.
-- 2020/09/17 DS ver 2.2i3 Correzione per il segno di OFFSETX.
-- 2021/01/08 DS ver 2.3a1 M115 esteso con P6 e usato per ogni pezzo. Eliminati 0 inutili.
-- 2021/04/07 DS ver 2.3d2 Gestione risalita Zmax (M116) anche allo scarico.
-- 2021/04/23 DS ver 2.3d3 Se non c'è BtlInfo cerco il gruppo di lavoro corrente.
-- 2021/05/25 DS ver 2.3e3 Aggiunta gestione rapido con Flag=5.
-- 2021/06/04 DS ver 2.3f2 Gestione parametro P12=1 su M101 per ruotare in alto quando necessario.
-- 2021/07/21 DS ver 2.3g5 Si imposta LOAD90 su tutti i pezzi di una barra tramite M115. Aggiunto M29 prima di taglio di pezzo a caduta.
-- 2021/08/03 DS ver 2.3h3 Aggiunto arresto preciso negli angoli (G9) in fresature con utensili di piccolo diametro.
-- 2022/01/21 DS ver 2.4a1 In V07 si imposta nLoad90.
-- 2022/04/14 DS ver 2.4d2 Si programma G9 (arresto preciso) in fondo al foro.
-- 2023/03/20 DS ver 2.5c1 Modifiche a AdjustTcPos per utensile BH su T42 e lama su T111.
-- 2023/04/19 DS ver 2.5d1 Al carico dopo rotazione su linea con P4=75 messo P5=110 invece di 112.
-- carico librerie
local INFO_STD_PP = require( 'Version')
-- Variabili di modulo
local MLE_INFO = 'Essetre-FAST.TPA.mlpe ver.'..PP_VER..' by EgalTech s.r.l.'
local CSP_INFO = INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION..' by EgalWare s.r.l.'
local MACHINE_INFO = 'PP_VER ver.'..PP_VER
local TEST_USE = false
---------------------------------------------------------------------
@@ -61,7 +44,9 @@ function OnProgramStart()
else
ParkLine( '(Program Start)')
end
ParkLine( '('.. MLE_INFO..')')
ParkLine( '('.. CSP_INFO..')')
ParkLine( '('.. MACHINE_INFO..')')
-- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente)
if TEST_USE then
ParkLine( 'M199')
@@ -161,6 +146,9 @@ function OnToolData()
local sOut = 'M992 P1=' .. EgtNumToString( nPos, 0) .. ' P2=' .. EmtLenToString( EMT.TLEN, 3) .. ' P3=' .. EmtLenToString( EMT.TDIAM, 3) ..
' P4=' .. EmtLenToString( EMT.SMAX, 3) .. ' P5=' .. EmtLenToString( EMT.TTOTLEN, 3)
ParkLine( sOut)
-- altro non previsto
else
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end
end
@@ -218,19 +206,12 @@ function OnDispositionEnd()
local HTrave = EMT.HT
local STrave = EMT.ST
local HOverM = EMT.HOVM
-- calcolo dati pinze
local MinAccPinze = 0.3
local MaxAccPinze = 4
local KgMtCubo= 550 -- densità legno in Kg / metro cubo
local Massa = ( HTrave * STrave * LBarra * KgMtCubo ) / 1000000000
local FMaxPinze = EMT.FMAXPINZE
local ForzaAtrito = 700 / 2 -- Serve per regolare P32 (700 valore reale pistone)
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAtrito) / 1000)
if ( TempoAcc < MinAccPinze) then TempoAcc = MinAccPinze end
if ( TempoAcc > MaxAccPinze) then TempoAcc = MaxAccPinze end
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
local RidFeed = 100 / Massa * 100
if ( RidFeed > 100) then RidFeed = 100 end
local TempAccPinze, TempMinAccPinze, RidFeed = CalcDinamicaPinze( HTrave, STrave, LBarra)
local TempAccPinz1, TempMinAccPinz1, RidFeed1 = CalcDinamicaPinze( HTrave, STrave, LBarra - LTrave)
local TempAccPinz2, TempMinAccPinz2, RidFeed2 = CalcDinamicaPinze( HTrave, STrave, LTrave)
if IdTrave >= 0 then
local sPrt = '( *** Part '.. EgtNumToString( IdTrave, 0) ..' ***)'
local sOut = '( SN=' .. IdTrave .. ' LBarra=' .. EmtLenToString( LBarra, 3) .. ' L='..EmtLenToString( LTrave, 3) ..
@@ -259,7 +240,8 @@ function OnDispositionEnd()
-- se carico barra
if EMT.LOAD or EMT.RELOAD then
sOut = 'M115 P1=' .. EmtLenToString( LBarra, 2) .. ' P2=' .. EmtLenToString( HTrave, 2) .. ' P3=' .. EmtLenToString( STrave, 2) ..
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( LTrave, 2)
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( LTrave, 2) ..
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)
if EMT.LOAD then
ParkLine( sOut)
SetStartValue( 1, LBarra)
@@ -273,7 +255,8 @@ function OnDispositionEnd()
-- altrimenti recupero rimanenza
else
sOut = 'M115 P1=' .. EmtLenToString( LBarra, 2) .. ' P2=' .. EmtLenToString( HTrave, 2) .. ' P3=' .. EmtLenToString( STrave, 2) ..
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2)
' P4=' .. EmtLenToString( HOverM, 2) .. ' P5=' .. tostring( nLoad90) .. ' P6=' .. EmtLenToString( EgtIf( IdTrave >= 0, LTrave, LBarra), 2) ..
' P7=' .. EgtNumToString( TempAccPinze, 2) .. ' P8=' .. EgtNumToString( TempAccPinz2, 2) .. ' P9=' .. EgtNumToString( TempAccPinz1, 2)
EmtOutput( sOut)
EmtOutput( 'M112'..' P1='..EmtLenToString( LoadT, 3).. ' P5=1 P6='..EmtLenToString( EMT.YPOS, 3)..' P7='..EmtLenToString( ParkV, 3) ..' P9='..GetFmaxClamp())
-- aggiorno dati aggancio carrelli alla trave
@@ -432,7 +415,7 @@ function OnMachiningStart()
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES)
-- sistemazione speed
-- sistemazione speed (la speed della lama va moltiplicata per 6)
if EMT.HEAD == 'H2' then
EMT.S = EMT.S * 6
elseif EMT.HEAD == 'H5' and EMT.EXIT == 1 then
@@ -523,6 +506,8 @@ function OnMachiningEnd()
EMT.AUXTYPE = nil
EMT.U_STD = nil
EMT.PREVTOOL = EMT.TOOL
EMT.PREVHEAD = EMT.HEAD
EMT.PREVS = EMT.S
end
---------------------------------------------------------------------
@@ -533,6 +518,11 @@ function OnPathStart()
-- primo posizionamento sempre in globale
EMT.REFLOC = nil
EMT.IPLGL = false
-- salvo precedenti rotanti
EMT.R1pp = EMT.R1p
EMT.R2pp = EMT.R2p
-- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento)
EmtResetPrev()
EMT.AUXCMD = {}
@@ -648,20 +638,46 @@ function OnRapid()
EmitZmax()
end
end
-- 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 EMT.PREVHEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( MyZHome, 3) ..
' P4=' .. EgtNumToString( EMT.R2pp, 3) .. ' P5=' .. EgtNumToString( EMT.R1pp, 3) ..
' P6=' .. EgtNumToString( EMT.PREVTCPOS, 3) .. ' P7=' .. EgtNumToString( EMT.PREVS, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
EmtOutput( sOutPreMove)
EmtOutput( 'M101 P1=2')
EmtOutput( 'M101 P1=3')
end
if not EMT.LOAD then
local sOut = string.gsub( string.gsub( EMT.MCHNAME..'/'..EMT.TOOL, '%(', '['), '%)', ']')
EmtOutput( '( * ' .. sOut .. ' * )')
end
-- primo posizionamento
-- se carico motosega, ruoto in zona sicura prima di approcciare la lavorazione
if EMT.HEAD == 'H3' and EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
local sOutPreMove = 'M101 P1=1' .. ' P2=' .. EmtLenToString( -SafeXRotAxes, 3) .. ' P3=' .. EmtLenToString( MyZHome, 3) ..
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
EmtOutput( sOutPreMove)
EmtOutput( 'M101 P1=2')
EmtOutput( 'M101 P1=3')
end
-- resetto valori precedenti
EmtResetPrev()
local bZmax = ( #EMT.AUXSTR > 0 or EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( EMT.L3, 3) ..
local MyZPos = EMT.L3
-- se sono su pezzi alti e movimento da emettere, per sicurezza a Z massima
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
MyZPos = MyZHome
end
local sOut = 'M101 P1=1' .. ' P2=' .. EmtLenToString( EMT.L2, 3) .. ' P3=' .. EmtLenToString( MyZPos, 3) ..
' P4=' .. EgtNumToString( EMT.R2, 3) .. ' P5=' .. EgtNumToString( EMT.R1, 3) ..
' P6=' .. AdjustTcPos( false) .. ' P7=' .. EgtNumToString( EMT.S, 0) ..
' P8=0' .. ' P9=0' .. ' P10=' .. EgtIf( bZmax, '3', '4')
if EMT.ST > BeamHeightForFixRot and EMT.FLAG2 == 1 then
sOut = sOut .. ' P12=1'
end
if EMT.LOAD then
ParkLine( sOut)
else
@@ -960,6 +976,28 @@ function OnArc()
EmtUpdatePrev()
end
---------------------------------------------------------------------
function CalcDinamicaPinze( dH, dS, dL)
local MinTempoAcc = 0.3 -- [s]
local MaxTempoAcc = 4.0 -- [s]
local KgMtCubo= 550 -- densità legno [Kg / metro cubo]
local Massa = ( dH * dS * dL * KgMtCubo ) / 1e9 -- massa [Kg]
local FMaxPinze = EMT.FMAXPINZE -- Feed massima pinze [mm/min]
local ForzaAttrito = 350 * 9.8 * 0.2 -- Forza chiusura pinze [Kgf] * g * Coeff_Attrito -> [N]
local TempoAcc = ( ( Massa * FMaxPinze) / ( 60 * ForzaAttrito) / 1000)
if ( TempoAcc < MinTempoAcc) then TempoAcc = MinTempoAcc end
if ( TempoAcc > MaxTempoAcc) then TempoAcc = MaxTempoAcc end
local AccMaxPinze = FMaxPinze / ( 60 * MinTempoAcc)
local AccPinze = FMaxPinze / ( 60 * TempoAcc)
local RidFeed = 100 / Massa * 100
if RidFeed > 100 then
RidFeed = 100
elseif RidFeed < 10 then
RidFeed = 10
end
return TempoAcc * 1000, MinTempoAcc * 1000, RidFeed
end
---------------------------------------------------------------------
function CalcCharStatus( sCmd, bSkipPress)
-- aperto
@@ -1535,12 +1573,14 @@ function MyAdjustLinearAxes()
local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3)
vtE = vtAux * LenAux - Z_AX() * LenRef
else -- 'H5'
elseif EMT.HEAD == 'H5' then
local Len = EMT.TLEN + AngTr1Len
local LenAux = MillOffs + AngTr1Offs
local LenRef = MillOffs
local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2)
vtE = Vector3d( EMT.EXTR) * Len + vtAux * LenAux - Z_AX() * LenRef
else
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end
EMT.L1 = EMT.L1 - vtE:getX()
EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY()
@@ -1556,7 +1596,7 @@ function MyAdjustLinearAxes()
EMT.L3o = MyL3o
if not EMT.REFLOC then
EMT.L2 = - EMT.L2
EMT.L2 = -EMT.L2
EMT.L1t = 'Y'
EMT.L2t = 'X'
else
@@ -1576,7 +1616,7 @@ function AdjustToolKinematic()
elseif EMT.HEAD == 'H6' then
return EgtIf( EMT.EXIT == 1, '21', '22')
else
EmtSetLastError( 1211, 'Head not allowed')
EmtSetLastError( 1211, 'Head not allowed ' .. EMT.HEAD)
end
end
@@ -1623,6 +1663,8 @@ function AdjustTcPos( bLen3)
sPos = '0' .. sPos
end
end
-- salvo posizione
EMT.PREVTCPOS = sPos
return sPos
end
+126 -87
View File
@@ -1,34 +1,25 @@
-- Processore macchina Essetre-FAST by EgalTech s.r.l. 2023/01/23
-- Funzioni generiche indipendenti dal controllo
-- 2020/09/22 DS ver 2.2i4 Distanza di sicurezza per collisioni da 2 a 4mm (inoltre allontanata flangia lama e aggiunto cilindro asse Z)
-- 2020/09/26 DS ver 2.2i5 Gestione cambio presa sega a catena tra due lavorazioni successive.
-- 2020/10/06 DS ver 2.2j1 Punta lunga da togliere basata su sua lunhezza totale e non più su T111.
-- 2021/01/08 DS ver 2.3a1 Gestione utensile di default da posizione e non da nome.
-- 2021/01/24 DS ver 2.3a2 Correzione deposito sega a catena con ripresa della stessa per angola A diverso.
-- 2021/01/31 DS ver 2.3a3 Altre correzioni per sega a catena.
-- 2021/03/15 DS ver 2.3c2 Aggiunta gestione lama su testa H1 e verifica collisione relativa (COLLISION3).
-- 2021/06/28 DS ver 2.3f5 Correzioni per scarico punte lunghe con pezzi alti.
-- 2021/07/12 DS ver 2.3g2 Correzioni per verifica collisioni durante scarico utensili.
-- 2021/07/20 DS ver 2.3g4 Aggiunta gestione rinvio angolare H5 (previsto anche H6).
-- 2021/12/01 DS ver 2.3l1 Corrette stime tempi per rotazione pezzi.
-- Processore macchina Essetre-FAST by EgalWare s.r.l. 2024/02/23
-- Intestazioni
require( 'EmtGenerator')
EgtEnableDebug( false)
-- carico librerie
local BD = require( 'BeamData')
LONG_TOOL_MINLEN = 221
BIG_TOOL_DIAM = 300
---------------------------------------------------------------------
-- *** GENERATION ***
---------------------------------------------------------------------
local sBaseDir = EgtGetSourceDir()
local sBaseDir = EgtGetCurrMachineDir()
if NumericalControl == 'NUM' then
dofile( sBaseDir .. 'Essetre-FAST.NUM.mlpe')
dofile( sBaseDir .. '\\Common-FAST.NUM.mlpe')
elseif NumericalControl == 'TPA' then
dofile( sBaseDir .. 'Essetre-FAST.TPA.mlpe')
dofile( sBaseDir .. '\\Common-FAST.TPA.mlpe')
elseif NumericalControl == 'NUM_PLUS' then
dofile( sBaseDir .. 'Essetre-FAST.NUM_PLUS.mlpe')
dofile( sBaseDir .. '\\Common-FAST.NUM_PLUS.mlpe')
else
EmtSetLastError( 1201, 'Numerical Control error : unkwnown type')
end
@@ -38,6 +29,45 @@ end
---------------------------------------------------------------------
local COLL_SAFE_DIST = 3
---------------------------------------------------------------------
function OnSimulInit()
-- se macchina con carico destro, imposto offset direzioni di vista standard
if BD.RIGHT_LOAD then
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
if nOrigViewOffs ~= 2 then
EgtSetViewOrizzOffsStep( 2)
if dOrigViewAngV < 0.1 then
EgtSetView( SCE_VD.TOP, false)
elseif dOrigViewAngV > 179.9 then
EgtSetView( SCE_VD.BOTTOM, false)
else
local dViewAngH = dOrigViewAngH + EgtIf( dOrigViewAngH > 180, 2 * 90, 0)
EgtSetGenericView( dOrigViewAngV, dViewAngH, false)
end
end
end
end
---------------------------------------------------------------------
function OnSimulExit()
-- se macchina con carico destro, annullo offset direzioni di vista standard
if BD.RIGHT_LOAD then
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
if nOrigViewOffs == 2 then
EgtSetViewOrizzOffsStep( 0)
if dOrigViewAngV < 0.1 then
EgtSetView( SCE_VD.TOP, false)
elseif dOrigViewAngV > 179.9 then
EgtSetView( SCE_VD.BOTTOM, false)
else
EgtSetGenericView( dOrigViewAngV, dOrigViewAngH - 2 * 90, false)
end
end
end
end
---------------------------------------------------------------------
function OnSimulStart()
-- controllo versione programma
@@ -473,7 +503,7 @@ function OnSimulToolSelect( dPosA)
-- imposto il valore di A
EgtSetAxisPos( 'A', dPosA)
if abs( dPosA) < 0.1 then
EgtSetAxisPos( 'C', 0)
EgtSetAxisPos( 'C', EgtIf( BD.RIGHT_LOAD, 180, 0))
end
EgtSetAxisPos( 'B', 0)
end
@@ -503,39 +533,40 @@ function OnSimulToolDeselect()
-- se sega a catena o rinvio o punta lunga o utensile di grosso diametro, devo cambiare
if EMT.HEAD == 'H3' or EMT.HEAD == 'H5' or ( EMT.HEAD == 'H1' and ( EMT.TOTLEN > LONG_TOOL_MINLEN or EMT.TOTDIAM > BIG_TOOL_DIAM)) then
EgtOutText( 'Tool change in progress...')
local RapSimStep = 4 * EMT.SIMSTEP
local RapSimRotStep = RapSimStep / 10
local CollSimRotStep = min( RapSimRotStep, 5)
-- movimento scarico sega a catena
if EMT.HEAD == 'H3' then
-- se avevo motosega, torno in zona sicura senza ruotare assi rotanti
if EMT.HB > BeamHeightForFixRot then
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
end
local dPosA = EgtGetAxisPos( 'A')
if abs( dPosA) < 0.1 then
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', 0, CollSimRotStep)
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
else
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', -90, CollSimRotStep)
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
end
SimulMoveAxis( 'X', 0, RapSimStep)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
-- movimento scarico rinvio
elseif EMT.HEAD == 'H5' then
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', -90, CollSimRotStep)
SimulMoveAxis( 'X', 0, RapSimStep)
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
-- movimento scarico punta lunga su T111
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
-- se su cambio utensile T111
if EMT.TCPOS == 'T111' then
SimulMoveAxis( 'X', 0, RapSimStep)
SimulMoveAxes( 'B', 0, CollSimRotStep, 'C', 0, CollSimRotStep)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', 0, MCH_SIM_STEP.COLLROT)
-- altrimenti posizioni standard rastrelliera
else
SimulMoveAxis( 'X', 0, RapSimStep)
SimulMoveAxes( 'B', 90, CollSimRotStep, 'C', -90, CollSimRotStep)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
end
-- movimento scarico utensile di grosso diametro (su T111)
else
local dPosB = EgtGetAxisPos( 'B')
local dNewB = EgtIf( dPosB < 0, -90, 90)
SimulMoveAxes( 'B', dNewB, CollSimRotStep, 'C', 0, CollSimRotStep)
SimulMoveAxis( 'X', 0, RapSimStep)
SimulMoveAxes( 'B', dNewB, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 180, 0), MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
end
-- breve pausa
EgtPause( 100)
@@ -544,9 +575,9 @@ function OnSimulToolDeselect()
ShowToolInTcPos( EMT.TCPOS_1, true)
-- movimento per carico utensile
if EMT.NEXTHEAD ~= 'H3' and EMT.NEXTHEAD ~= 'H5' then
SimulMoveAxes( 'B', 90, RapSimRotStep, 'C', -90, RapSimRotStep)
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
else
SimulMoveAxes( 'B', 0, RapSimRotStep, 'C', -90, RapSimRotStep)
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
end
-- se segue lama, carico utensile di default
if EMT.NEXTHEAD == 'H2' then
@@ -562,12 +593,9 @@ function OnSimulToolDeselect()
elseif EMT.NEXTHEAD ~= 'H2' and EMT.NEXTHEAD ~= 'H4' then
if EMT.NEXTTOOL ~= EMT.TOOL_1 then
EgtOutText( 'Tool change in progress...')
local RapSimStep = 4 * EMT.SIMSTEP
local RapSimRotStep = RapSimStep / 10
local CollSimRotStep = min( RapSimRotStep, 10)
-- simulo movimento
SimulMoveAxes( 'B', 90, CollSimRotStep, 'C', -90, CollSimRotStep)
SimulMoveAxis( 'X', 0, RapSimStep)
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
-- breve pausa
EgtPause( 100)
ShowToolInTcPos( EMT.TCPOS_1, true)
@@ -578,7 +606,7 @@ function OnSimulToolDeselect()
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
end
-- eseguo movimento opportuno
SimulMoveAxes( 'B', 0, RapSimRotStep, 'C', -90, RapSimRotStep)
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.RAPROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.RAPROT)
-- se altrimenti lama su cambio utensile
elseif EMT.NEXTHEAD == 'H1' and SpecialBH and EMT.NEXTTCPOS == 'T111' then
-- se non lama, nascondo l'utensile corrente
@@ -586,7 +614,7 @@ function OnSimulToolDeselect()
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.OFF)
end
-- eseguo movimento opportuno
SimulMoveAxes( 'B', -90, RapSimRotStep, 'C', 0, RapSimRotStep)
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.RAPROT, 'C', 0, MCH_SIM_STEP.RAPROT)
end
else
EMT.TOOL_1 = nil
@@ -643,35 +671,8 @@ end
---------------------------------------------------------------------
function OnSimulPathEnd()
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then
EgtOutLog( 'OnSimulPathEnd', 5)
local vMillId = EMT.VMILL[1]
local nPart = EgtVolZmapPartCount( vMillId)
if nPart > 1 then
-- ricerca del pezzo con massimo volume
local nPartMax = 0
local dVolMax = 0
for i = 1, nPart do
local dVol = EgtVolZmapPartVolume( vMillId, i - 1)
if dVol > dVolMax then
dVolMax = dVol
nPartMax = i
end
end
-- eliminazione di tutti i pezzi piccoli
for i = nPart, 1, -1 do
if i ~= nPartMax then
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
if b3Vmill:getDimX() < 1200 then
EgtRemoveVolZmapPart( vMillId, i - 1)
end
end
end
-- aggiorno visualizzazione
EgtDraw()
end
end
-- rimozione eventuali sfridi
ExecRemoveScraps()
end
---------------------------------------------------------------------
@@ -749,17 +750,23 @@ function OnSimulMoveStart()
EgtOutText( '')
EMT.MCHFIRST = false
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
if not EMT.LOAD and EMT.MOVE == 0 and EMT.HB > BeamHeightForFixRot then
local RapSimStep = 4 * EMT.SIMSTEP
SimulMoveAxes( 'C', EMT.R1, RapSimStep/10, 'B', EMT.R2, RapSimStep/10)
if not EMT.LOAD and EMT.MOVE == 0 and EMT.HB > BeamHeightForFixRot and EMT.FLAG2 == 1 then
-- se motosega mi muovo a X di sicurezza per ruotare
if EMT.HEAD == 'H3'then
SimulMoveAxes( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID, 'C', EMT.R1, MCH_SIM_STEP.COLLROT, 'B', EMT.R2, MCH_SIM_STEP.COLLROT)
end
end
EMT.POSTROT = nil
end
end
---------------------------------------------------------------------
--function OnSimulMoveEnd()
--end
function OnSimulMoveEnd()
if EMT.FLAG == 301 then
-- rimozione eventuali sfridi
ExecRemoveScraps()
end
end
---------------------------------------------------------------------
function OnSimulCollision()
@@ -784,7 +791,6 @@ end
---------------------------------------------------------------------
function ExecAuxCmd( sCmd)
local RapSimStep = 4 * EMT.SIMSTEP
local Cmd = EgtSplitString( sCmd)
if Cmd[1] == '0' then
if Cmd[2] == 'Unloading' then
@@ -794,7 +800,7 @@ function ExecAuxCmd( sCmd)
end
EgtOutText( EgtIf( Cmd[3], Cmd[3], Cmd[2]))
elseif Cmd[1] == '1' then
if not SimulMoveAxis( Cmd[2], tonumber( Cmd[3]), RapSimStep) then
if not SimulMoveAxis( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID) then
if VerifyYVStroke( Cmd[2], tonumber( Cmd[3])) == nil then
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
end
@@ -808,8 +814,8 @@ function ExecAuxCmd( sCmd)
-- Verifico movimento carrello con trave agganciata
VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5])
-- Eseguo il movimento
local _, bOk, bOk2 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), RapSimStep,
Cmd[4], tonumber( Cmd[5]), RapSimStep)
local _, bOk, bOk2 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID)
if not ( bOk and bOk2) then
local nI = EgtIf( not bOk, 2, 4)
if VerifyYVStroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then
@@ -820,9 +826,9 @@ function ExecAuxCmd( sCmd)
-- Verifico movimento carrelli con trave agganciata
VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7])
-- Eseguo il movimento
local _, bOk, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), RapSimStep,
Cmd[4], tonumber( Cmd[5]), RapSimStep,
Cmd[6], tonumber( Cmd[7]), RapSimStep)
local _, bOk, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID)
if not ( bOk and bOk2 and bOk3) then
local nI = EgtIf( not bOk, 2, EgtIf( not bOk2, 4, 6))
if VerifyYVStroke( Cmd[nI], tonumber( Cmd[nI+1])) == nil then
@@ -834,14 +840,14 @@ function ExecAuxCmd( sCmd)
if Cmd[2] ~= '0' then
dPY = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
end
SimulMoveAxis( 'PY', dPY, RapSimStep)
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
SetPYLight( Cmd[2] ~= '0')
elseif Cmd[1] == '12' then
local dPV = MaxOpen
if Cmd[2] ~= '0' then
dPV = EgtIf( EMT.ROT == -1, EMT.HB, EMT.SB)
end
SimulMoveAxis( 'PV', dPV, RapSimStep)
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
SetPVLight( Cmd[2] ~= '0')
elseif Cmd[1] == '21' then
local nYDelta = tonumber( Cmd[2])
@@ -864,6 +870,39 @@ function ExecAuxCmd( sCmd)
end
end
---------------------------------------------------------------------
function ExecRemoveScraps()
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then
EgtOutLog( 'OnSimulPathEnd', 5)
local vMillId = EMT.VMILL[1]
local nPart = EgtVolZmapPartCount( vMillId)
if nPart > 1 then
-- ricerca del pezzo con massimo volume
local nPartMax = 0
local dVolMax = 0
for i = 1, nPart do
local dVol = EgtVolZmapPartVolume( vMillId, i - 1)
if dVol > dVolMax then
dVolMax = dVol
nPartMax = i
end
end
-- eliminazione di tutti i pezzi piccoli
for i = nPart, 1, -1 do
if i ~= nPartMax then
local b3Vmill = EgtVolZmapGetPartBBoxGlob( vMillId, i - 1, GDB_BB.STANDARD)
if b3Vmill:getDimX() < 1200 then
EgtRemoveVolZmapPart( vMillId, i - 1)
end
end
end
-- aggiorno visualizzazione
EgtDraw()
end
end
end
---------------------------------------------------------------------
function ExecUnloading()
if EMT.VMILL and #EMT.VMILL > 0 then
@@ -873,14 +912,14 @@ function ExecUnloading()
-- li sposto per lasciare spazio al nuovo pezzo
local nId = EgtGetFirstInGroup( nVmGrpId)
while nId do
EgtMove( nId, Vector3d( 0, -( EMT.SB + 50.0), 0), GDB_RT.GLOB)
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.SB + 50.0), -( EMT.SB + 50.0)), 0), GDB_RT.GLOB)
nId = EgtGetNext( nId)
end
-- creo un nuovo layer e vi inserisco il nuovo pezzo
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
EgtRelocate( vMillId, nLayId)
local vtMove = Vector3d( 0, -450, 0)
if EMT.FALL then vtMove = Vector3d( -500, 0, -750) end
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 450, -450), 0)
if EMT.FALL then vtMove = Vector3d( -500, 0, EgtIf( BD.RIGHT_LOAD, 750, -750)) end
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
EgtSetLevel( vMillId, GDB_LV.USER)
-- aggiungo gli spigoli
+8 -38
View File
@@ -1,42 +1,11 @@
-- Special Operations macchina Essetre-FAST by EgalTech s.r.l. 2023/12/14
-- 2020/05/15 DS ver.2.2e1 Correzione a SpecAdjustCarrC3 per bFixedDelta.
-- 2020/05/16 DS ver 2.2e2 Aggiunta gestione rotazione 90deg.
-- 2020/05/21 DS ver 2.2e3 Aggiunto a SpecAdjustCarrC3 parametro bFixedPos (per lavorazioni Split e Cut precedute da Pre).
-- 2020/05/26 DS ver 2.2e4 Nuova gestione dei pezzi a caduta.
-- 2020/05/27 DS ver 2.2e5 Corretto blocco pinza V su presplit e precut.
-- 2020/05/28 DS ver 2.2e7 Correzione per mancanza EMC.HOVM allo scarico.
-- 2020/06/18 DS ver 2.2f3 Aumento ingombro fresatura opposta a cerrello per evitare extracorsa.
-- 2020/07/02 DS ver 2.2g1 Correzione quota di presa al carico per casi senza tagli in testa e lavorazioni solo in coda.
-- 2020/09/03 DS ver 2.2i1 Correzione in Load dopo rotazione deve tener conto dell'ingombro delle lavorazioni in coda.
-- 2020/09/09 DS ver 2.2i2 Nel calcolo pinzaggi ora si tiene conto anche della larghezza della sezione della barra.
-- 2020/09/25 DS ver 2.2i5 Migliorato calcolo ingombro lama con testa opposta al carrello.
-- 2020/09/29 DS ver 2.2i6 Migliorato calcolo ingombro fresa su tagli longitudinali di fianco.
-- 2020/10/13 DS ver 2.2j2 Aggiunta gestione sezione molto piccola (Very Small) per presa minima. Corretta gestione ingombri con fori a 30 deg.
-- 2020/12/09 DS ver 2.2l1 Migliorato calcolo ingombro con lama verticale inclinata di +/-45deg rispetto a X.
-- 2021/01/24 DS ver 2.3a2 Migliorato controllo assi rotanti definiti con sega a catena per SpecialCalcMachiningEncumbrance.
-- 2021/02/02 DS ver 2.3b1 Migliorato calcolo ingombro tagli di lama quasi verticale angolata.
-- 2021/02/17 DS ver 2.3b2 Corretta B3Ys-xs1 per accentrare V e T bisogna sottrarre dExtraY che è negativo e non sommare.
-- 2021/04/02 DS ver 2.3d1 Corretto calcolo ingombro con lama per non andare in extracorsa con le pinze quando lavorazione vicino a Y0.
-- 2021/06/01 DS ver 2.3f1 Aggiunta segnalazione pezzo scaricato a caduta.
-- 2021/06/25 DS ver 2.3f5 Corretta segnalazione tipo di scarico del pezzo.
-- 2021/07/20 DS ver 2.3g4 Aggiunta gestione rinvio per lavorazioni da sotto.
-- 2021/08/02 DS ver 2.3h1 Per spessori piccoli ridotta tolleranza di presa (limiti _V).
-- 2021/10/12 DS ver 2.3j1 Lame standard (Lt > L) gestite come lame piatte (MCH_TY.SAW_STD e MCH_TY.SAW_FLAT).
-- 2021/10/12 DS ver 2.4c3 Corretti errori di scrittura nomi variabili alle linee 2714 (YDeltaTol) e 2717 (dCorsaYTr e dCorsaVr).
-- 2022/04/07 DS ver 2.4d1 Aumentato ingombro lavorazione per evitare extracorsa interno Y e V (da 260 a 280).
-- 2023/01/10 SM ver 2.5a1 Affinato calcolo ingombro lavorazione con fresa quasi verticale.
-- 2023/06/14 DS ver 2.5f1 Corretto calcolo dDistBack allo Split.
-- 2023/08/11 DS ver 2.5h1 Modifica calcolo ingombro per frese dirette circa come Y+/-.
-- Special Operations macchina Essetre-FAST by EgalWare s.r.l. 2024/02/23
-- Intestazioni
require( 'EmtGenerator')
EgtEnableDebug( false)
-- Carico i dati globali
local sBaseDir = EgtGetSourceDir()
local BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
EgtOutLog ( '** Essetre-FAST '..PP_VER..' **', 1)
-- carico librerie
local BD = require( 'BeamData')
---------------------- OnSpecialMoveZup -----------------------------
---------------------------------------------------------------------
@@ -49,8 +18,7 @@ function OnSpecialMoveZup()
-- se sega a catena
if EMC.HEAD == 'H3' then
end
end
@@ -995,7 +963,8 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
dHeadBack = EgtIf( EMC.CNT == 1, 180, 130)
end
-- per interferenza con triangolo di rinforzo sulla pinza Y
if vtTool:getZ() < 0.25 and vtTool:getX() < 0.10 and vtTool:getY() > 0 and vtArm:getX() < -0.707 then
if ( vtTool:getZ() < 0.25 and vtTool:getX() < 0.10 and vtTool:getY() > 0 and vtArm:getX() < -0.707 and not BD.RIGHT_LOAD) or
( vtTool:getZ() < 0.25 and vtTool:getX() < 0.10 and vtTool:getY() < 0 and vtArm:getX() < -0.707 and BD.RIGHT_LOAD)then
dHeadBack = dHeadBack + 90
end
end
@@ -1087,7 +1056,8 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
dHeadFront = 130
end
-- per interferenza con triangolo di rinforzo sulla pinza V
if vtTool:getZ() < 0.25 and vtTool:getX() > -0.10 and vtTool:getY() > 0 and vtArm:getX() > 0.707 then
if ( vtTool:getZ() < 0.25 and vtTool:getX() > -0.10 and vtTool:getY() > 0 and vtArm:getX() > 0.707 and not BD.RIGHT_LOAD) or
( vtTool:getZ() < 0.25 and vtTool:getX() > -0.10 and vtTool:getY() < 0 and vtArm:getX() > 0.707 and BD.RIGHT_LOAD) then
dHeadFront = dHeadFront + 90
end
end
+38
View File
@@ -0,0 +1,38 @@
REM Compilazione degli script macchina Egaltech 2024.02.22
REM Per togliere info di debug aggiungere flag -s prima del nome del file di input
REM Compilazione 32 bit e copia file da non compilare
@echo off
REM chiedo all'utente la versione da assegnare alla macchina da compilare
set /p "machineVersion=Inserisci versione: "
REM variabili per costruire i percorsi delle cartelle
set "machineName=Essetre-FAST"
set "deployFolder=C:\MachinesDeploy"
set "machinePath=%deployFolder%\%machineName%\"
set "fullPathSource=%deployFolder%\%machineName%\%machineVersion%\%machineName%"
set "fullPathZip=%deployFolder%\%machineName%\%machineVersion%"
REM elimino eventuale cartella esistente
rmdir /s /Q %fullPathZip%
REM copio i sorgenti nel percorso di destinazione
ROBOCOPY . %fullPathSource%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
REM copio i sorgenti nel percorso temporaneo per i compilati
ROBOCOPY . %fullPathSource%\bin\%machineName%\ /E /XF "Compile.bat" /XF ".gitignore" /XD ".git" /XF "UpdateLog.txt"
REM copio i file compilati nel percorso temporaneo per i compilati
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.mlpe Common-FAST.mlpe
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.mlse Common-FAST.mlse
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.NUM.mlpe Common-FAST.NUM.mlpe
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.NUM_PLUS.mlpe Common-FAST.NUM_PLUS.mlpe
\EgtProg\Dll32\luac54 -o %fullPathSource%\bin\%machineName%\Common-FAST.TPA.mlpe Common-FAST.TPA.mlpe
REM comprimo i file compilati in uno zip pronto per essere distribuito
tar.exe acvf %fullPathZip%\%machineName%.zip -C %fullPathSource%\bin\ %machineName%\*.*
REM elimino il percorso temporaneo
rmdir /s /Q %fullPathSource%\bin\
+32 -11
View File
@@ -34,13 +34,37 @@
-- 2024/01/19 DS ver 2.6a1 Piccola modifica per direzione preferenziale rinvio da sotto (per evitare di accedere dal lato della barra).
-- 2024/01/29 DS ver 2.6a2 In portautensili per mortasa e sega a catena aggiunti ingombri dello stesso.
-- 2024/02/09 LM ver 2.6b1 In BeamData aggiunta funzione GetBlockedAxis che sostituisce la GetChainSawBlockedAxis.
-- 2024/02/23 AV ver 2.6c1 Prima versione con post-processore common
-- Allineamento con common ver. 2.6c1
-- 2024/02/23 AV ver 2.6c2 Rimossa chiamata funzione EgtGetSourceDir
-- Allineamento con common ver. 2.6c2
-- 2024/02/23 AV ver 2.6c3 Allineamento con common ver. 2.6c3
-- 2024/02/27 AV ver 2.6c4 Allineamento con common ver. 2.6c4. Aggiunto parametro 'SafeXRotAxes' per rotazione motosega con pezzi alti
-- 2024/02/29 AV ver 2.6c5 Allineamento con common ver. 2.6c5
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '2.6b1'
PP_VER = '2.6c5'
MIN_MACH_VER = '2.5k1'
-- Carico i dati globali
local sMachDir = EgtGetCurrMachineDir()
-- Elimino direttori altre macchine e imposto direttorio macchina corrente per ricerca librerie
EgtRemoveBaseMachineDirFromPackagePath()
EgtAddToPackagePath( sMachDir .. '\\Beam\\?.lua')
EgtAddToPackagePath( sMachDir .. '\\?.lua')
local BD = require( 'BeamData')
local INFO_STD_PP = require( 'Version')
-- prendo la versione kernel minima necessaria più nuova tra macchina e script comuni
if INFO_STD_PP.MIN_MACH_VER_PP_COMMON > MIN_MACH_VER then
MIN_MACH_VER = INFO_STD_PP.MIN_MACH_VER_PP_COMMON
end
EgtOutLog ( '**PP_VER ver.'..PP_VER..'**'..INFO_STD_PP.NAME..' ver.'..INFO_STD_PP.VERSION, 1)
-- Parametri macchina
NumericalControl = 'TPA' -- NUM o TPA o NUM_PLUS
MinX = 0
@@ -83,19 +107,16 @@ MaxUnloadLen = 0
BeamHeightForFixRot = 9999 -- per abilitare assegnare 500
CoeffVM = 0.5
NewTopC = true
SafeXRotAxes = 150
-- Aggiornamento con dati da BeamData.lua
local sBeamData = EgtGetSourceDir().."\\Beam\\BeamData.lua"
if EgtExistsFile( sBeamData) then
local BD = dofile( sBeamData)
if BD then
BeamHeightForFixRot = BD.MAX_HEIGHT_ROT_B_ABOVE or BeamHeightForFixRot
end
-- leggo e aggiorno con parametri da BeamData
if BD then
BeamHeightForFixRot = BD.MAX_HEIGHT_ROT_B_ABOVE or BeamHeightForFixRot
end
-- Aggiornamento con dati da TechnoEssetre7
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-Fast.data"
local sData = EgtGetSourceDir().."\\Beam\\Ts3Data.lua"
local sData = sMachDir .. "\\Beam\\Ts3Data.lua"
if EgtExistsFile( sTs3Data) then
EgtCopyFile( sTs3Data, sData)
local sTs3DataOld = sTs3Data..'.old'
@@ -158,8 +179,8 @@ EmtGeneral {
ExitMaxAdjust = 30,
ExitMaxRotAdj = 0.5,
AngDeltaMinForHome = 165,
Special = 'Essetre-FAST.mlse',
Processor = 'Essetre-FAST.mlpe'}
Special = 'Common-FAST.mlse',
Processor = 'Common-FAST.mlpe'}
local BaseId = EmtBase {
Name = 'Base',
Geo='BASE/GEO',
+24
View File
@@ -0,0 +1,24 @@
==== Common_FAST Update Log ====
Versione 2.6c5 (29/02/2024)
- (GEN) Aggiunto comando di wait fine M101/G101 in caso di movimento in zona sicurezza per motosega
- (GEN) Gestione accelerazioni pinze in M115 ( solo per TPA)
- (SIM) Gestione rimozione VMILL per tagli a cubetti a zig-zag
Versione 2.6c4 (27/02/2024)
- (MLDE-SIM-GEN) Con pezzi molto alti '> BeamHeightForFixRot', aggiunto parametro 'SafeXRotAxes' per ruotare motosega in zona sicura lontano dal pezzo
- (SIM) Nelle funzioni movimentaizone assi, utilizzate costanti 'MCH_SIM_STEP'
Versione 2.6c3 (23/02/2024)
- (SIM) Corretta lettura parametro RIGHT_LOAD
- (SIM-GEN) Rimossa chiamata funzione EgtGetSourceDir rimasta in MLPE
Versione 2.6c2 (23/02/2024)
- (SIM-GEN) Rimossa chiamata funzione EgtGetSourceDir
Versione 2.6c1 (23/02/2024)
- (SIM-GEN) Prima versione post-proc comune FAST e FASTrl
- (SIM-GEN) "BeamData" caricato come libreria con 'require' anziché come file con 'dofile'
- (SIM) Aggiunta funzioni "OnSimulInit" e "OnSimulExit" per orientare vista corretta in caso di macchina con carico destro. N.B.= serve CAM5 2.6b4
- (SIM-GEN) In BeamData aggiunto flag per direzione carico RIGHT_LOAD
- (SIM-GEN) Aggiornamento 'Compile.bat' con nuovi nomi file
+10
View File
@@ -0,0 +1,10 @@
-- Version.lua by EgalWare s.r.l. 2024/02/23
-- Gestione della versione dei file comuni post-processori macchine FAST e FASTrl di Essetre
local InfoCommon_STD_PP = {
NAME = 'Common-FAST', -- nome script PP standard
VERSION = '2.6c5', -- versione script
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
}
return InfoCommon_STD_PP