diff --git a/Beam/BeamData.lua b/Beam/BeamData.lua index bffa4d1..ca4712d 100644 --- a/Beam/BeamData.lua +++ b/Beam/BeamData.lua @@ -68,13 +68,16 @@ local BeamData = { KIOTP = 5, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare MAXDIAM_POCK_CORNER = 31, -- diametro massimo utensile ammesso per tasche con angoli interni USE_LONGCUT = true, -- per i tagli longitudinali usare solo la lavorazione di lama LongCut - PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa - PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda + HEAD_DIM_FOR_BH = 125, -- dimensione di ingombro della testa per block haus + MAX_LEN_BH_FROM_BOTTOM = 210, -- massima lunghezza lavorabile da un lato di block haus da sotto + MAX_DIST_BH_FROM_BOTTOM = 600, -- massima distanza tra naso mandrino e sopra della trave senza collisione ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta ADVANCE_TAIL_OFFS = 10, -- accorciamento taglio di coda avanzato (minimo 1) DOUBLE_HEAD_DOVETAIL = false, -- flag abilitazione lavorazione mortase a coda di rondine in doppio DOUBLE_HEAD_MORTISE = false, -- flag abilitazione lavorazione mortase in doppio DOUBLE_HEAD_DRILLING = false, -- flag abilitazione forature in doppio + PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa + PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda CLAMP5 = false -- presenza pinza speciale per pezzi piccoli } @@ -99,6 +102,8 @@ if EgtExistsFile( sData) then if Machine.Offsets.DOUBLE_HEAD_DOVETAIL then BeamData.DOUBLE_HEAD_DOVETAIL = ( Machine.Offsets.DOUBLE_HEAD_DOVETAIL == 1) end if Machine.Offsets.DOUBLE_HEAD_MORTISE then BeamData.DOUBLE_HEAD_MORTISE = ( Machine.Offsets.DOUBLE_HEAD_MORTISE == 1) end if Machine.Offsets.DOUBLE_HEAD_DRILLING then BeamData.DOUBLE_HEAD_DRILLING = ( Machine.Offsets.DOUBLE_HEAD_DRILLING == 1) end + if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end + if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end BeamData.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S) BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L) BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA @@ -113,8 +118,6 @@ if EgtExistsFile( sData) then BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end - if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end - if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end end if Machine.Trave then BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH @@ -226,6 +229,7 @@ local function GetSetupInfo( sHead) SetupInfo.bIsCSymmetrical = true SetupInfo.dCAxisEncumbrance = 180 SetupInfo.bToolOnAggregate = false + SetupInfo.Head = {} -- testa 5 assi da sopra, dietro if sHead == 'H11' then diff --git a/Common_ONE-PF.NUM.mlpe b/Common_ONE-PF.NUM.mlpe index 656935f..854034b 100644 --- a/Common_ONE-PF.NUM.mlpe +++ b/Common_ONE-PF.NUM.mlpe @@ -129,6 +129,11 @@ function OnToolData() local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( EMT.TDIST or ChSawLen, 1) sOut = sOut .. EgtIf( EMT.TCPOS == 'T111', ' G76H9998.2N411N414', ' G76H9998.2N511N514') EmtOutput( '('..sOut..')') + -- emissione dati aggregato BlockHaus + elseif EMT.HEAD == 'H17' then + sPos = EgtIf( #EMT.TCPOS == 2, EMT.TCPOS:gsub( 'T', 'N30'), EMT.TCPOS:gsub( 'T', 'N3')) + local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( ( AngTrBHOffs), 1)..' G76H9998.2'..sPos..sPos + EmtOutput( '('..sOut..')') -- emissione dati utensile (esclusa sega a catena) else -- output info @@ -142,7 +147,6 @@ function OnToolData() if EMT.TCPOS == 'T201' then sPos = 'N411' else - sPos = EgtIf( #EMT.TCPOS == 2, EMT.TCPOS:gsub( 'T', 'N30'), EMT.TCPOS:gsub( 'T', 'N3')) end local sOut = 'L1='..EgtNumToString( EMT.SMAX, 0)..' L2='..EmtLenToString( dAddLen + EMT.TTOTLEN, 1)..' G76H9998.2'..sPos..sPos @@ -1242,7 +1246,7 @@ function OnRapid() else --EmtOutput( string.format( 'V1Pos=%.3f V2Pos=%.3f', EMT.V1POS, EMT.V2POS)) local bToPresel = true - if not EMT.RELOAD and not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then + if not EMT.ZMAX and #EMT.AUXCMD > 0 and EMT.TO_ZMAX then -- allontanamento o eventuale preselezione successiva testa differente if not EMT.DOU_TYPE then PreselectNextDiffHead( EMT.MCHID, EMT.HEAD) @@ -1920,24 +1924,6 @@ function OnArc() EmtUpdatePrev() end ---------------------------------------------------------------------- -function CalcDinamicaPinze( dH, dS, dL) - local KgMtCubo= WoodDensity or 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) - local AccMaxPinze = EMT.MAXACC - local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC) - local RidFeed = 100 / Massa * 100 - if RidFeed > 100 then - RidFeed = 100 - elseif RidFeed < 10 then - RidFeed = 10 - end - return AccPinze, AccMaxPinze, RidFeed -end - --------------------------------------------------------------------- function CalcCharStatusN( sCmd) -- aperto @@ -2650,10 +2636,15 @@ function MyAdjustLinearAxes() local Len = ( EMT.TDIST or ChSawLen) + Mill2Offs local LenRef = Mill2Offs vtE = Vector3d( EMT.ADIR) * Len - Z_AX() * LenRef + elseif EMT.HEAD == 'H17' then + local LenAux = AngTrBHOffs + MillOffs + local LenRef = MillOffs + local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtAux * LenAux - Z_AX() * LenRef else EmtSetLastError( 1211, 'Head not defined ' .. ( EMT.HEAD or '')) end - if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H15' or EMT.HEAD == 'H19' then + if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H15' or sHead == 'H17' or EMT.HEAD == 'H19' then EMT.L1 = EMT.L1 - vtE:getX() EMT.L2 = EMT.L2 - DeltaTabY - vtE:getY() EMT.L3 = EMT.L3 - DeltaTabZ - vtE:getZ() @@ -2766,6 +2757,9 @@ function GetToolRadLen() -- se sega a catena elseif HeadIsChainSaw( EMT.HEAD) then return EMT.TLEN, ( EMT.TDIST or ChSawLen) + -- se aggregato BlockHaus + elseif EMT.HEAD == 'H17' then + return EMT.TDIAM / 2, AngTrBHOffs end end @@ -3281,7 +3275,7 @@ function PreselectNextDiffHead( nMchId, sHead) EmitMoveStartHead( 1) EmitMoveWaitHead( 1) end - -- Emetto preselezione (non ammessa per sega a catena H13 e H23) + -- Emetto preselezione (non ammessa per sega a catena H13 e H23 e aggregato BlockHaus H17) if sNextHead == 'H11' then EmitMoveDataHead( 1, { X=-ParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos)}) EmitMoveStartHead( 1) @@ -3360,7 +3354,7 @@ function EmitTestProgramStart() EmtOutput( 'M12 $START PER SVINCOLO TESTE') EmtOutput( '(SVINCOLO TESTA 1)') EmitMoveDataHead( 1, {Z=ParkZ1-100, TPos=0}) - if Progress then + if Progress or SecondToolChanger then EmtOutput( 'IF E80001<=10 THEN') EmitMoveDataHead( 1, {C=ParkC1, TPos=0}) EmitMoveDataHead( 1, {Z=-150, B=ParkB1, TPos=0}) diff --git a/Common_ONE-PF.mlpe b/Common_ONE-PF.mlpe index dc70c9a..6c4ad93 100644 --- a/Common_ONE-PF.mlpe +++ b/Common_ONE-PF.mlpe @@ -134,7 +134,7 @@ function OnSimulStart() end -- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF - if Progress or Mortiser or EgtGetHeadId( 'H21') then + if Progress or Mortiser or EgtGetHeadId( 'H21') or SecondToolChanger then table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'}) end -- gruppo MORTISER si attiva solo se PF con BIT mortiser attivo @@ -769,7 +769,7 @@ function OnSimulToolDeselect( dPrevA) SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT) SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID) -- deposito utensile lama - elseif EMT.PREVHEAD_H1 == 'H12' then + elseif EMT.PREVHEAD_H1 == 'H12' or EMT.PREVHEAD_H1 == 'H17' then -- simulo movimento SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT) SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID) @@ -837,12 +837,12 @@ function OnSimulToolDeselect( dPrevA) -- nascondo l'utensile sulla testa EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN) -- prendo utensile fresa o lama - if EMT.NEXTHEAD == 'H11' or EMT.NEXTHEAD == 'H12' then + if EMT.NEXTHEAD == 'H11' or EMT.NEXTHEAD == 'H12' or EMT.NEXTHEAD == 'H17' then local MyParkX1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1) local MyParkB1 = ParkB1 local MyParkC1 = ParkC1 -- se ho due teste oppure è progress, significa che ho CU verticale - if EgtGetHeadId('H21') or Progress then + if EgtGetHeadId('H21') or Progress or SecondToolChanger then MyParkB1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkB1, ParkFrnB1) MyParkC1 = EgtIf( GetHeadTCSet( EMT.NEXTHEAD, EMT.NEXTTCPOS) == 'Head1_TC1', ParkC1, ParkFrnC1) -- altrimenti su one CU speciale motosega-utensile lungo @@ -1212,7 +1212,7 @@ function OnSimulMoveStart() else if GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC2' then -- se movimento iniziale da Zmax con lama o fresa - if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then + if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H17' then if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then --EgtOutBox( 'Flag 2,1', 'Info Rapid') local bMoveZbeforeX = false @@ -1860,6 +1860,8 @@ function ExecMoveZmax( bMchSplit, btoXHome) if btoXHome then EgtUnloadTool( EMT.HEAD, 1) ShowToolInTcPos( EMT.TCPOS, true) + -- nascondo l'utensile sulla testa + EgtSetMode( EgtGetHeadId( EMT.HEAD or '') or GDB_ID.NULL, GDB_MD.HIDDEN) EMT.PREVTOOL_H1 = nil EMT.PREVHEAD_H1 = nil EMT.PREVTCPOS_H1 = nil @@ -2383,11 +2385,17 @@ end --------------------------------------------------------------------- function ShowToolInTcPos( sTcPos, bShow) + -- recupero identificativo della posizione sul TC + local TcPosId = EgtGetTcPosId( sTcPos or '') + if not TcPosId then return end -- recupero il gruppo dell'utensile - local TcExitId = EgtGetFirstNameInGroup( EgtGetTcPosId( sTcPos or '') or GDB_ID.NULL, 'T1') + local TcExitId = EgtGetFirstNameInGroup( TcPosId 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 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 --------------------------------------------------------------------- @@ -2408,7 +2416,7 @@ function LoadNextTool( nHSet, sTcPosDef, bFirst) if vTools and vTools[1] and #(vTools[1]) > 0 then sTool = vTools[1] sTcPos = sTcPosDef - if Progress then + if Progress or SecondToolChanger then sHead = EgtIf( sTcPos == 'T11', 'H12', 'H11') elseif nHSet == 1 then sHead = EgtIf( sTcPos == 'T1', 'H12', 'H11') @@ -2473,6 +2481,9 @@ local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s --------------------------------------------------------------------- function OnEstimStart() EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches + EMT.FMAXPINZE = EgtClamp( MaxFeedPinze or 102000, 20000, 102000) -- feed massima pinze + EMT.MAXACC = MaxAcc or ( EMT.FMAXPINZE / ( 60 * 0.3)) -- accelerazione massima pinze + EMT.MINACC = MinAcc or ( EMT.FMAXPINZE / ( 60 * 4)) -- accelerazione minima pinze end --------------------------------------------------------------------- @@ -2558,6 +2569,15 @@ function OnEstimDispositionEnd() EMT.OPEISDISP = false end +--------------------------------------------------------------------- +function OnEstimRawMoveData() + -- se start del pezzo + if IsStartOrRestPhase( EMT.PHASE) then + EMT.SPLIT = false + end + OnRawMoveData() +end + --------------------------------------------------------------------- function OnEstimToolSelect() -- reset indice utensile in tabella lunghezze @@ -2614,6 +2634,12 @@ function OnEstimMachiningEnd() EMT.TLE_NAME = nil EMT.TLE_TIME = nil end + + EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or '' + EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil) + if EMT.MCHSPLIT then + EMT.SPLIT = true + end end --------------------------------------------------------------------- @@ -2739,11 +2765,11 @@ function OnEstimRapid() EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen -- calcolo tempo local dTime = RAPID_MIN_T - local dT1 = abs( dL1) / RAPID_X_FEED * 60 + local dT1 = CalcMoveTime( abs( dL1), RAPID_X_FEED, EMT.SPLIT) if dT1 > dTime then dTime = dT1 end - local dT2 = abs( dL2) / RAPID_Y_FEED * 60 + local dT2 = CalcMoveTime( abs( dL2), EMT.FMAXPINZE, EMT.SPLIT) if dT2 > dTime then dTime = dT2 end - local dT3 = abs( dL3) / RAPID_Z_FEED * 60 + local dT3 = CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT) if dT3 > dTime then dTime = dT3 end local dT4 = abs( dR1) / RAPID_C_FEED * 60 if dT4 > dTime then dTime = dT4 end @@ -2765,7 +2791,7 @@ function OnEstimLinear() local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen -- calcolo tempo - local dTime = dLen / EMT.F * 60 + local dTime = CalcMoveTime( dLen, EMT.F, EMT.SPLIT) EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5) -- aggiorno valori come precedenti @@ -3019,7 +3045,7 @@ end --------------------------------------------------------------------- function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2) - if sHead == 'H11' or sHead == 'H12' or HeadIsChainSaw( sHead) then + if sHead == 'H11' or sHead == 'H12' or sHead == 'H17' or HeadIsChainSaw( sHead) then return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1)) elseif sHead == 'H21' or sHead == 'H22' or HeadIsChainSaw( sHead) then return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1)) @@ -3037,5 +3063,38 @@ function GetCmdAxMove( Cmd, sAx) end end +--------------------------------------------------------------------- +function CalcDinamicaPinze( dH, dS, dL) + local KgMtCubo= WoodDensity or 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) + local AccMaxPinze = EMT.MAXACC + local AccPinze = EgtClamp( FMaxPinze / ( 60 * TempoAcc), EMT.MINACC, EMT.MAXACC) + local RidFeed = 100 / Massa * 100 + if RidFeed > 100 then + RidFeed = 100 + elseif RidFeed < 10 then + RidFeed = 10 + end + return AccPinze, AccMaxPinze, RidFeed +end + +--------------------------------------------------------------------- +function CalcMoveTime( dPathLen, dFeed, bIsSplitted) + local dTime + local dFeedInSec = dFeed / 60 + local dTempoAcc, _, _ = CalcDinamicaPinze( EMT.HB, EMT.SB, EgtIf( bIsSplitted, EMT.LT, EMT.LB)) + dTempoAcc = dTempoAcc / 1000 + -- se si raggiunge la velocità massima + if dPathLen >= dFeedInSec * dTempoAcc then + dTime = dTempoAcc * 2 + ( ( dPathLen - dFeedInSec * dTempoAcc) / dFeedInSec) + else + dTime = 2 * sqrt( (dPathLen * dTempoAcc) / dFeedInSec) + end + return dTime +end + --------------------------------------------------------------------- -- *** END GENERAL *** diff --git a/Common_ONE-PF.mlse b/Common_ONE-PF.mlse index 3cd6752..99f56d5 100644 --- a/Common_ONE-PF.mlse +++ b/Common_ONE-PF.mlse @@ -13,6 +13,31 @@ require( 'EmtGenMachining') -- Carico libreria local BD = require( 'BeamData') +--------------------------------------------------------------------- +-- *** Generic Machinings *** +--------------------------------------------------------------------- +require( 'EmtGenMachining') + +--------------------------------------------------------------------- +-- *** Special GetPrevMachiningOffset *** +--------------------------------------------------------------------- +----------------------------------------------------------------------------------------- +function OnSpecialGetPrevMachiningOffset() + -- default + EMC.ERR = 0 + EMC.PREVOFFSX = 0 + -- se c'è cambio di fase tra le lavorazioni (quindi la precedente è l'ultima della sua fase e la corrente la prima) + if EMC.PREVPHASE ~= EMC.CURRPHASE then + -- se la fase corrente è di inizio lavorazione di nuova trave + if IsStartOrRestPhase( EMC.CURRPHASE) then + -- recupero la posizione finale della lavorazione precedente + local vPrevAx = EmtGetFinalAxesPos( EMC.PREVMCHID) + -- la X (L1) di questa corrisponde alla posizione iniziale della nuova trave, se ne deduce l'offset + EMC.PREVOFFSX = ParkV1 - vPrevAx[1] + end + end +end + ---------------------- OnSpecialGetMaxZ ----------------------------- --------------------------------------------------------------------- local function CalcExtraZ( vtTp, vtT, vMZ) @@ -78,7 +103,7 @@ function OnSpecialGetMaxZ() local vMZ = {{ Tz=0.85, Ez=390}, { Tz=0.5, Ez=280}, { Tz=-0.01, Ez=160}, { Tz=-0.5, Ez=1}, { Tz=-0.61, Ez=1}} EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ) end - elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC1' then + elseif ( EMC.HEAD == 'H12' or EMC.HEAD == 'H17') and sHead_TC == 'Head1_TC1' then if vtTp:getX() > 0.4 and vtT:getX() > 0.4 then if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) @@ -179,7 +204,7 @@ function OnSpecialMoveZup() if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' then ; -- se lama posizionata su CU prossimo a testa 1 - elseif EMC.HEAD == 'H12' and sHead_TC == 'Head1_TC1' then + elseif ( EMC.HEAD == 'H12' or EMC.HEAD == 'H17') and sHead_TC == 'Head1_TC1' then -- se inclinata oltre 90 gradi e interferisce con la trave if ( EMC.R2 > 87.9 and ( EMC.R1 < 15.0 or EMC.R1 > 180.0)) or ( EMC.R2 < -87.9 and ( EMC.R1 > -15.0 and EMC.R1 < 180.0)) then local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ())) diff --git a/Essetre-PFrl.ini b/Essetre-PFrl.ini index fede496..3a95efc 100644 --- a/Essetre-PFrl.ini +++ b/Essetre-PFrl.ini @@ -110,6 +110,7 @@ H11.1=Standard.nge H11.1:MILL_NOTIP=MillNoTip.nge H12.1=Saw.nge H13.1=ChainSaw.nge +H17.1=AngTransmBH.nge H21.1=Standard.nge H21.1:MILL_NOTIP=MillNoTip.nge H22.1=Saw.nge @@ -141,6 +142,8 @@ H11=6608 H12=6615 ; Chainsaw H13=6616 +; Angular transmission +H17=6617 ; Probe H19=6618 ; Second 5 axis head diff --git a/Essetre-PFrl.mlde b/Essetre-PFrl.mlde index 0a2734a..0707e63 100644 --- a/Essetre-PFrl.mlde +++ b/Essetre-PFrl.mlde @@ -44,8 +44,8 @@ require( 'EmtGenerator') EgtEnableDebug( true) -PP_VER = '2.7h2_DEV2_B' -PP_NVER = '2.7.8.2' +PP_VER = '2.7i1_DEV2_B' +PP_NVER = '2.7.9.1' MIN_MACH_VER = '2.7f3' MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio @@ -155,6 +155,8 @@ ParkB2 = -90 MinDeltaX1X2 = 650 MinDistToolX1X2 = 40 LimX2RotSaw = 800 +AngTrBHOffs = 154.5 +AngTrBHLen = 90 TurnerOffs = 120.0 AggLoad = 50 DeltaTabY = 1170.0 @@ -177,6 +179,7 @@ AutoRotMinLen = 0 EstimationRapidMultiplier = 1 ForceToCloseRollersGate = false Probe = nil +AggreBlockHaus = false -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PFrl.data" @@ -258,12 +261,12 @@ if EgtExistsFile( sData) then if Machine.Offsets.SAWOFFSZ then SawOffsZ = Machine.Offsets.SAWOFFSZ end if Machine.Offsets.SAW2OFFSX then Saw2OffsX = Machine.Offsets.SAW2OFFSX end if Machine.Offsets.SAW2OFFSZ then Saw2OffsZ = Machine.Offsets.SAW2OFFSZ end + if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end + if Machine.Offsets.DEFTCPOS2 then DefTcPos2 = ( 'T' .. Machine.Offsets.DEFTCPOS2) end if Machine.Offsets.NOULOAD then MaxUnloadLen = Machine.Offsets.NOULOAD end if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end if Machine.Offsets.MINACC then MinAcc = Machine.Offsets.MINACC end - if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end - if Machine.Offsets.DEFTCPOS2 then DefTcPos2 = ( 'T' .. Machine.Offsets.DEFTCPOS2) end if Machine.Offsets.COEFF_STIMATEMPI and Machine.Offsets.COEFF_STIMATEMPI > 0 then EstimationRapidMultiplier = Machine.Offsets.COEFF_STIMATEMPI end if Machine.Offsets.MAXFEEDPINZE then MaxFeedPinze = Machine.Offsets.MAXFEEDPINZE end if Machine.Offsets.MAXACC then MaxAcc = Machine.Offsets.MAXACC end @@ -271,6 +274,9 @@ if EgtExistsFile( sData) then if Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO then ForceToCloseRollersGate = Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO == 1 end if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end if Machine.Offsets.PROBE then Probe = Machine.Offsets.PROBE end -- Tastatore su entrembe le teste. 1 = solo testa 1, 2 = solo testa 2, 3 = entrambe le teste + if Machine.Offsets.AGGRE_BH then AggreBlockHaus = ( Machine.Offsets.AGGRE_BH == 1) end + AngTrBHOffs = Machine.Offsets.OFFSETZ_RINV_BH or AngTrBHOffs + AngTrBHLen = Machine.Offsets.OFFSETX_RINV_BH or AngTrBHLen if Machine.Offsets.MAX_BACK_CLAMP_5 then MaxBackClamp5 = Machine.Offsets.MAX_BACK_CLAMP_5 end -- aggiustamenti MinY1 = MinV1 + MinDeltaYV @@ -430,6 +436,24 @@ local H13Id = EmtHead { Geo = 'H13_HEAD/GEO'} EgtSetInfo( H13Id, 'ZSAFEDELTA', '60') EgtSetInfo( H13Id, 'ZMAXONROT', '1,80') + +-- Eventuale aggregato per lavorazioni BlockHaus +if AggreBlockHaus then + local H17Id = EmtHead { + Name = 'H17', + Parent = 'B1', + HSet = 'H11', + Type = MCH_HT.STD, + Pos = Point3d( -AngTrBHLen, 0, -AngTrBHOffs), + TDir = X_AX(), + ADir = Z_AX(), + Rot1W = 0.2, + SolCh = MCH_SCC.ADIR_NEAR, + OthColl = {'H2', 'B/SOLID', 'C/SOLID'}, + Geo = 'H17_HEAD/GEO', + Aux = {'H17_HEAD/SOLID', 'H17_HEAD/COLLISION'}} +end + -- *** Testa 2 *** local X2Id = EmtAxis { Name = 'X2', @@ -691,6 +715,7 @@ EmtTable { Parent = 'T', Type = MCH_TT.FLAT, Ref1 = Point3d( -DimTabX, DeltaTabY, DeltaTabZ), + Coll = 'Base/BELT', Geo = 'TABLE/GEO', Aux = 'TABLE/SOLID'} -- *** ToolChanger *** @@ -745,13 +770,24 @@ EmtTcPos { TDir = -Y_AX(), ADir = -X_AX(), Geo = 'BASE/T8'} -EmtTcPos { +if AggreBlockHaus then + local TcpSsId = EmtTcPos { + Name = 'T9', + Parent = 'Base', + Pos = ptTc1 + 8 * vtDt1 + Vector3d( -AngTrBHLen, AngTrBHOffs, 0), + TDir = X_AX(), + ADir = -Y_AX(), + Geo = 'BASE/T9_BH', + Aux = 'BASE/T9_HS'} +else + EmtTcPos { Name = 'T9', Parent = 'Base', Pos = ptTc1 + 8 * vtDt1, TDir = -Y_AX(), ADir = -X_AX(), Geo = 'BASE/T9'} +end EmtTcPos { Name = 'T10', Parent = 'Base', @@ -861,6 +897,10 @@ EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC3') or GDB_ID.NULL, vtMovB, GDB_RT.G if Mortiser then EgtMove( EgtGetFirstNameInGroup( BaseId, 'TC4') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB) end +-- sposto geometria aggiuntiva agrgegato BlockHaus +if AggreBlockHaus then + EgtMove( EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( BaseId, 'T9'), 'T9_HS') or GDB_ID.NULL, vtMovB, GDB_RT.GLOB) +end EgtMove( EgtGetFirstNameInGroup( X1Id, 'SOLID'), vtMovB, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( X1Id, 'COLLISION'), vtMovB, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), vtMovB, GDB_RT.GLOB) @@ -908,7 +948,7 @@ function OnSetHead() EmtModifyAxisHome( 'B1', ParkB1) EmtModifyAxisDirection( 'B1', X_AX()) -- se testa H12 (lama) - elseif EMC.HEAD == 'H12' then + elseif EMC.HEAD == 'H12' or EMC.HEAD == 'H17' then EmtModifyAxisHome( 'X1', ParkX1) EmtModifyAxisHome( 'Z1', ParkZ1) EmtModifyAxisHome( 'C1', ParkC1) @@ -950,7 +990,7 @@ end --------------------------------------------------------------------- function GetHeadSet( sHead) - if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' then + if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then return 1 elseif sHead == 'H19' then return 11 @@ -968,7 +1008,7 @@ end function GetHeadTCSet( sHead, sTcPos) local nPos = tonumber( string.sub( sTcPos, 2)) or 0 -- testa 1 - if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' then + if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H15' or sHead == 'H17' then -- testa 1 su CU prossimo a testa 2 if nPos > 10 then return 'Head1_TC2' @@ -1080,7 +1120,7 @@ end --------------------------------------------------------------------- -- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale function GetZExtra( sHead, dAngV) - if sHead == 'H11' or sHead == 'H21' then + if sHead == 'H11' or sHead == 'H21' or sHead == 'H17' then if abs( dAngV) < 30.1 then return 400 elseif abs( dAngV) < 45.1 then diff --git a/Scripts/SetUp.lua b/Scripts/SetUp.lua index b8d691e..46e6dff 100644 --- a/Scripts/SetUp.lua +++ b/Scripts/SetUp.lua @@ -30,6 +30,7 @@ local GS = {} -- Configurazione posizioni (con o senza TC2) local PositionTable = {} local SecondSaw = ( EgtGetHeadId( 'H22') ~= nil) +local AggreBH = ( EgtGetHeadId( 'H17') ~= nil) local ProbeFirstHead = ( EgtGetHeadId( 'H19') ~= nil) local ProbeSecondHead = ( EgtGetHeadId( 'H29') ~= nil) if SecondSaw then @@ -40,7 +41,7 @@ if SecondSaw then {Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"}, {Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"}, {Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"}, - {Pos = "Pos8", TcPos = "T9", Head = "H11", Group = "G1"}, + {Pos = "Pos8", TcPos = "T9", Head = EgtIf( AggreBH, "H17", "H11"), Group = "G1"}, {Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"}, {Pos = "Pos10", TcPos = "T11", Head = "H22", Group = "G3"}, {Pos = "Pos11", TcPos = "T13", Head = "H21", Group = "G3"}, @@ -63,7 +64,7 @@ else {Pos = "Pos5", TcPos = "T6", Head = "H11", Group = "G1"}, {Pos = "Pos6", TcPos = "T7", Head = "H11", Group = "G1"}, {Pos = "Pos7", TcPos = "T8", Head = "H11", Group = "G1"}, - {Pos = "Pos8", TcPos = "T9", Head = "H11", Group = "G1"}, + {Pos = "Pos8", TcPos = "T9", Head = EgtIf( AggreBH, "H17", "H11"), Group = "G1"}, {Pos = "Pos9", TcPos = "T10", Head = "H11", Group = "G1"}, {Pos = "Pos10", TcPos = "T11", Head = "H21", Group = "G3"}, {Pos = "Pos11", TcPos = "T12", Head = "H21", Group = "G3"}, diff --git a/THolders/AngTransmBH.nge b/THolders/AngTransmBH.nge new file mode 100644 index 0000000..ef9fe96 Binary files /dev/null and b/THolders/AngTransmBH.nge differ diff --git a/UpdateLog.txt b/UpdateLog.txt index c93552c..e9f59cd 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,12 @@ ==== Common_ONE-PF Update Log ==== +Versione 2.7i1 (10/09/2025) +- (SIM-GEN) Piccole correzioni per gestire secondo TC su ONE. Ticket#2563 +- (SIM-GEN) Gestione aggregato BH completato. Ticket#2482 +- (EST) Stima tempi considerando accelerazioni +- (SIM-GEN) Se fase start o restart, si aggiorna la posizione in X dell'asse per calcolare il link corretto +- (GEN) Piccola correzione risalita ZMAX dopo RELOAD del pezzo. Generazione allineata a simulazione. + Versione 2.7h2 (28/08/2025) - (GEN) Migliorata gestione spegnimento utensile e disattivazione piano - (SIM-GEN) Corretto nome variabile e altre piccole modifiche per Progress diff --git a/Version.lua b/Version.lua index 524820c..a266915 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_ONE-PF', -- nome script PP standard - VERSION = '2.7h2', -- versione script + VERSION = '2.7i1', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel }