From e0c1a97e87c24cb5deb0e15a6f818e8acc360eb0 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 28 Nov 2024 17:52:19 +0100 Subject: [PATCH] Prima bozza gestione aggregato foratore multiplo --- Beam/BeamData.lua | 3 +- Beam/MachiningTypes.ini | 1 + Common_PF1250.mlpe | 95 +++++++++++++++++++++++++++++++++---- Essetre-PF1500MAXrl-3T.mlde | 70 +++++++++++++++++++++++++-- Wall/MachiningTypes.ini | 1 + 5 files changed, 157 insertions(+), 13 deletions(-) diff --git a/Beam/BeamData.lua b/Beam/BeamData.lua index fc0df4a..1d79935 100644 --- a/Beam/BeamData.lua +++ b/Beam/BeamData.lua @@ -73,7 +73,8 @@ local BeamData = { ADVANCE_TAIL_OFFS = 5, -- accorciamento taglio di coda avanzato (minimo 1) DOUBLE_HEAD_DOVETAIL = true, -- flag abilitazione lavorazione mortase a coda di rondine in doppio DOUBLE_HEAD_MORTISE = true, -- flag abilitazione lavorazione mortase in doppio - DOUBLE_HEAD_DRILLING = true -- flag abilitazione forature in doppio + DOUBLE_HEAD_DRILLING = true, -- flag abilitazione forature in doppio + USE_MULTI_DRILL = false, -- flag abilitazione gruppo a forare } --------------------------------------------------------------------- diff --git a/Beam/MachiningTypes.ini b/Beam/MachiningTypes.ini index 5267cc1..d41f563 100644 --- a/Beam/MachiningTypes.ini +++ b/Beam/MachiningTypes.ini @@ -12,6 +12,7 @@ 4=Pocket_H2 5=Predrill 6=Predrill_H2 +7=MultiDrill [Milling] 1=Prof diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index 0b9dd13..fd1170f 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -483,6 +483,19 @@ function OnSimulToolSelect( dPosA) -- Imposto visualizzazione EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD) end + -- se aggregato foratura multipla, imposto subito angolo scelto per asse virtuale A + if EMT.HEAD == 'H14' then + -- valore dell'asse virtuale + dPosA = dPosA or GetNextMultiDrillVirtualAxis( EMT.MCHID) + -- imposto il valore di A + EgtSetAxisPos( 'A1', dPosA) + -- imposto home dell'asse C1 (A1=0 -> T121, A1=90 -> T124) + local MyParkCSawC1 = GetMultiDrillCHomeFromVirtualAxis( dPosA, EMT.TTOTLEN) + EmtModifyAxisHome( 'C1', MyParkCSawC1) + EgtSetAxisPos( 'C1', MyParkCSawC1) + -- Imposto visualizzazione + EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD) + end -- se lama su aggregato da sotto, imposto subito angolo scelto per asse virtuale A if EMT.HEAD == 'H22' then -- se c'era un altro utensile, imposto subito asse virtuale @@ -528,7 +541,7 @@ end --------------------------------------------------------------------- function OnSimulToolDeselect( dPrevA) -- se prossimo utensile non cambia e non è sega a catena o lama su rinvio da sotto, esco - if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end + if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and ( EMT.NEXTHEAD ~= 'H13' or EMT.NEXTHEAD ~= 'H14') and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end -- deposito utensile EgtOutText( 'Tool change in progress...') -- recupero il gruppo attuale e il successivo @@ -591,12 +604,23 @@ function OnSimulToolDeselect( dPrevA) end SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT) SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID) + -- deposito utensile aggregato foratore multiplo + elseif EMT.PREVHEAD_H1 == 'H14' then + -- simulo movimento + local ParkC1 = EgtGetAxisHomePos( 'C1') + if dPrevA then + ParkC1 = GetMultiDrillCHomeFromVirtualAxis( dPrevA) + end + -- simulo movimento + SimulMoveAxes( 'B1', ParkMultiDrillB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT) + SimulMoveAxis( 'X1', ParkMultiDrillX1, MCH_SIM_STEP.RAPID) -- deposito utensile seconda lama elseif EMT.PREVHEAD_H1 == 'H16' then -- simulo movimento SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT) SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID) end + -- breve pausa EgtPause( 100) -- visualizzo utensile su TcPos @@ -633,6 +657,11 @@ function OnSimulToolDeselect( dPrevA) -- simulo movimento SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT) SimulMoveAxes( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID, 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID) + -- prendo utensile sega a catena + elseif EMT.NEXTHEAD == 'H14' then + -- simulo movimento + SimulMoveAxes( 'B1', ParkMultiDrillB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT) + SimulMoveAxes( 'X1', ParkMultiDrillX1, MCH_SIM_STEP.RAPID, 'Z1', ParkMultiDrillZ1, MCH_SIM_STEP.RAPID) -- prendo utensile seconda lama elseif EMT.NEXTHEAD == 'H16' then -- simulo movimento @@ -656,8 +685,22 @@ end --------------------------------------------------------------------- function OnSimulMachiningStart() - -- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare - if EMT.HEAD == 'H13' and EMT.HEAD == EMT.PREVHEAD_H1 then + -- se lavorazione è con gruppo a forare, abilito le altre punte alla lavorazione del VMILL + if EMT.HEAD == 'H14' then + local OtherTools = EgtGetToolsInCurrSetupPos( 'T121') + if OtherTools and #OtherTools > 1 then + for i = 1, #OtherTools do + if OtherTools[i] ~= '' and OtherTools[i] ~= EMT.TOOL then + EmtAddToolForVmill( OtherTools[i], 'H14', i, EMT.VMILL) + -- dichiaro utensile per verifica collisioni + local nInd = 1011 + AddToolToCollisionObj( OtherTools[i], 'H14', i, nInd, true) + end + end + end + end + -- se lavorazione attuale e precedente con sega a catena o aggregato foratore multiplo e con angolo A diverso, devo scaricare e ricaricare + if ( EMT.HEAD == 'H13' or EMT.HEAD == 'H14') and EMT.HEAD == EMT.PREVHEAD_H1 then local dPrevA = EgtGetAxisPos( 'A1') local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) local dPosA = tonumber( sVal:sub( 4)) @@ -1972,11 +2015,20 @@ end --------------------------------------------------------------------- function ShowToolInTcPos( sTcPos, bShow) - -- recupero il gruppo dell'utensile - local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1') - if not TcExitId then return end - -- imposto lo stato di visualizzazione - EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) + -- recupero identificativo della posizione sul TC + local TcPosId = EgtGetTcPosId( sTcPos or '') + if not TcPosId then return end + -- ciclo sulle possibili uscite + for i = 1, 100 do + -- recupero il gruppo dell'utensile + local TcExitId = EgtGetFirstNameInGroup( TcPosId, 'T'..tostring( i)) + if not TcExitId then break end + -- imposto lo stato di visualizzazione + EgtSetStatus( TcExitId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) + end + -- recupero eventuale gruppo ausiliario da visualizzare/nascondere + local TcHSId = EgtGetFirstNameInGroup( TcPosId, sTcPos..'_HS') + if TcHSId then EgtSetStatus( TcHSId, EgtIf( bShow, GDB_ST.ON, GDB_ST.OFF)) end end --------------------------------------------------------------------- @@ -2503,6 +2555,33 @@ function GetNextChainSawingVirtualAxis( MchId) -- la imposto come lavorazione corrente EgtSetCurrMachining( NextMchId) -- recupero il valore dell'asse virtuale bloccato A + local dPosA = GetCurrMultiDrillVirtualAxis() + -- ripristino la lavorazione corrente + if MchId then + EgtSetCurrMachining( MchId) + end + return dPosA +end + +--------------------------------------------------------------------- +function GetNextMultiDrillVirtualAxis( MchId) + -- recupero la lavorazione successiva + local NextMchId + if MchId then + NextMchId = EgtGetNextActiveOperation( MchId) + else + NextMchId = EgtGetFirstActiveOperation() + end + while NextMchId and EgtGetOperationType( NextMchId) == MCH_OY.DISP do + NextMchId = EgtGetNextActiveOperation( NextMchId) + end + -- verifico sia un taglio con sega a catena + if EgtGetOperationType( NextMchId) ~= MCH_OY.DRILLING then + return nil + end + -- la imposto come lavorazione corrente + EgtSetCurrMachining( NextMchId) + -- recupero il valore dell'asse virtuale bloccato A local dPosA = GetCurrChainSawingVirtualAxis() -- ripristino la lavorazione corrente if MchId then diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 0b4eacf..ceee92d 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -97,10 +97,10 @@ ParkCSaw0Z1 = -400 ParkCSawC1 = -90 ParkCSaw0C1 = 0 ParkCSawB1 = 0 -MinLengthLongCSaw = 580 -- gestione speciale per motosega molto lunga. Lunghezza al di sopra della quale e' considerata motosega lunga -ParkLongCSawZ1 = -50 -- gestione speciale per motosega molto lunga. Parcheggio asse Z -ParkLongCSawC1 = 0 -- gestione speciale per motosega molto lunga. Parcheggio asse C -ParkLongCSawB1 = -90 -- gestione speciale per motosega molto lunga. Parcheggio asse B +MinLengthLongCSaw = 580 -- gestione speciale per motosega molto lunga. Lunghezza al di sopra della quale e' considerata motosega lunga +ParkLongCSawZ1 = -50 -- gestione speciale per motosega molto lunga. Parcheggio asse Z +ParkLongCSawC1 = 0 -- gestione speciale per motosega molto lunga. Parcheggio asse C +ParkLongCSawB1 = -90 -- gestione speciale per motosega molto lunga. Parcheggio asse B LongTool = 390 MinLongTc1C1 = -91 MaxLongTc1C1 = 91 @@ -110,6 +110,11 @@ MaxLongTc2C1 = -89 ParkLongTc2C1 = -180 ParkLongB1 = 0 MinZ1ToChangeH2 = -1400 +ParkMultiDrillX1 = ParkCSawX1 -- posizione parcheggio asse X per aggregato forature multiplo +ParkMultiDrillC1 = 0 -- posizione parcheggio asse C per aggregato forature multiplo +ParkMultiDrill0C1 = -90 -- posizione parcheggio asse C per aggregato forature multiplo +ParkMultiDrillB1 = 0 -- posizione parcheggio asse B per aggregato forature multiplo +ParkMultiDrillZ1 = 0 -- posizione parcheggio asse Z per aggregato forature multiplo MinZ3 = -1550 MaxZ3 = 0 MinX3 = 0 @@ -1153,6 +1158,17 @@ function OnSetHead() EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( CSawPosA, EMC.TOTLEN)) EmtModifyAxisHome( 'B1', EgtIf( EMC.TOTLEN < MinLengthLongCSaw, ParkCSawB1, ParkLongCSawB1)) EmtModifyAxisDirection( 'B1', X_AX()) + -- se testa H14 (aggregato forature multiplo) + elseif EMC.HEAD == 'H14' then + -- recupero il valore dell'asse virtuale bloccato A + local MultiDrillPosA = GetCurrMultiDrillVirtualAxis() + EmtModifyAxisHome( 'X1', ParkMultiDrillX1) + EmtModifyAxisHome( 'Z1', ParkMultiDrillZ1) + EmtModifyAxisStroke( 'Z1', {MinZ1, MaxZ1}) + EmtModifyAxisStroke( 'C1', {MinC1, MaxC1}) + EmtModifyAxisHome( 'C1', GetMultiDrillCHomeFromVirtualAxis( MultiDrillPosA, EMC.TOTLEN)) + EmtModifyAxisHome( 'B1', EgtIf( EMC.TOTLEN < MinLengthLongCSaw, ParkCSawB1, ParkLongCSawB1)) + EmtModifyAxisDirection( 'B1', X_AX()) -- se testa H16 ( seconda lama) elseif EMC.HEAD == 'H16' then EmtModifyAxisHome( 'X1', ParkTc2X1) @@ -1286,6 +1302,8 @@ function HeadIsChainSaw( sHead) return ( sHead == 'H13' or sHead == 'H15') end +--------------------------------------------------------------------- +--- FUNZIONI PER MOTOSEGA ------------------------------------------- --------------------------------------------------------------------- function GetCurrChainSawingVirtualAxis() -- recupero il valore dell'asse virtuale bloccato A @@ -1349,6 +1367,37 @@ function GetSawCHomeFromVirtualAxis( dPosA) end end +--------------------------------------------------------------------- +--- FUNZIONI PER AGGREGATO FORATORE MULTIPLO ------------------------ +--------------------------------------------------------------------- +--------------------------------------------------------------------- +function GetCurrMultiDrillVirtualAxis() + -- recupero il valore dell'asse virtuale bloccato A + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + if not sVal or sVal == '' then + if EMC then + sVal = EMC.BLOCKEDAXIS or 'A1=0' + else + sVal = 'A1=0' + end + end + local dPosA = tonumber( sVal:sub( 4)) or 0 + return dPosA +end + +--------------------------------------------------------------------- +-- Funzione che calcola l'angolo Home di C per l'aggregato foratore mutliplo dal valore dell'asse virtuale +--------------------------------------------------------------------- +function GetMultiDrillCHomeFromVirtualAxis( dPosA) + -- se A1=0 -> T121 -> HomeC = 0 + if abs( dPosA) < 0.1 then + return ParkMultiDrill0C1 + -- altrimenti A1=90 -> T124 -> HomeC = -90 + else + return ParkMultiDrillC1 + end +end + --------------------------------------------------------------------- -- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale function GetZExtra( sHead, dAngV) @@ -1378,6 +1427,19 @@ function GetZExtra( sHead, dAngV) else return 0 end + -- se aggregato foratore multiplo + elseif sHead == 'H14' then + if abs( dAngV) < 30.1 then + return 400 + elseif abs( dAngV) < 45.1 then + return 300 + elseif abs( dAngV) < 60.1 then + return 200 + elseif abs( dAngV) < 90.1 then + return 10 + else + return 0 + end -- altri casi else return 0 diff --git a/Wall/MachiningTypes.ini b/Wall/MachiningTypes.ini index 414615b..742a33f 100644 --- a/Wall/MachiningTypes.ini +++ b/Wall/MachiningTypes.ini @@ -4,6 +4,7 @@ [Drill] 1=Drill 2=Pocket +3=MultiDrill [Milling] 1=FreeContour