-- Descrizione macchina Essetre-WallXS0018 by EgalTech s.r.l. 2024/09/23 -- Macchina Wall. -- 2023/07/05 ver 2.5g1 DS Prima versione partende da WallXS0014. -- 2023/07/10 ver 2.5g2 DS Corretto aggiornamento Orig2 da dati TS3. -- 2023/09/07 ver 2.5i1 DS Gestione posizione ruotata per lama (T9 e T10). -- 2023/09/08 ver 2.5i2 DS Piccola modifica per usare direttamente le note utente dell'utensile se passate. -- 2023/09/11 ver 2.5i3 DS Modificato solido collisione per asse C per renderlo più vicino al reale. -- 2024/01/29 ver 2.6a1 In generazione dopo ogni G24 aggiunta scrittura M24 con gli stessi parametri. -- 2024/08/30 ver 2.6h1 Gestione sottopezzo per parete layer. Serve Wall 2.6i1. Se Wall antecedente, funziona alla vecchia, con pezzo e sottopezzo unico oggetto. -- Configurazione macchina in GIT -- 2024/09/03 ver 2.6i1 Corretta macro M104 con sintassi TPA -- 2024/09/24 ver 2.6i2 Corretta emissione quota parcheggio in M104 -- 2024/09/30 ver 2.6i3 Per VMILL, se area ricavata da Outline, si controlla se è molto simile ad area VMILL per considerare pezzo corretto require( 'EmtGenerator') EgtEnableDebug( false) PP_VER = '2.6k2' PP_NVER = '2.6.11.2' -- Parametri macchina NumericalControl = 'TPA' -- NUM o TPA MinY = 0.0 MaxY = 31000.0 ParkY = 16500.0 MinX = -5400.0 MaxX = 45.0 MinZ = -900.0 MaxZ = 0.0 MinB = -120.0 MaxB = 120.0 MinC = -360.0 MaxC = 360.0 MillOffs = 92.5 ChainSaw = 0 SawOffsX = 0.0 SawOffsY = 111.0 SawOffsZ = -150.0 ChSawLen = 90.0 Nail11 = 1 Nail11DeltaX = 330.0 Nail11DeltaY = 272.6 Nail11DeltaZ = -76.5 Nail12 = 1 Nail12DeltaX = 330.0 Nail12DeltaY = -272.6 Nail12DeltaZ = -76.5 Orig2DeltaX = 0 Orig2DeltaY = -3500 Orig2DeltaZ = 0 Orig3DeltaX = 12160 Orig3DeltaY = 0 Orig3DeltaZ = 0 Orig4DeltaX = 12160 Orig4DeltaY = -3500 Orig4DeltaZ = 0 Orig5DeltaX = 17620 Orig5DeltaY = 0 Orig5DeltaZ = 0 Orig6DeltaX = 17620 Orig6DeltaY = -3500 Orig6DeltaZ = 0 Orig7DeltaX = 28940 Orig7DeltaY = 0 Orig7DeltaZ = 0 Orig8DeltaX = 28940 Orig8DeltaY = -3500 Orig8DeltaZ = 0 DimTabX = 28940.0 DimTabY = 3500.0 DeltaTabX = 1040.0 DeltaTabY = -4580.0 DeltaTabZ = -705.0 + MillOffs -- -612.5 CoeffVM = 1.5 -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-Wall_XS0018.data" local sData = EgtGetCurrMachineDir().."\\Wall\\Ts3Data.lua" if EgtExistsFile( sTs3Data) then EgtCopyFile( sTs3Data, sData) local sTs3DataOld = sTs3Data..'.old' EgtEraseFile( sTs3DataOld) EgtRenameFile( sTs3Data, sTs3DataOld) end if EgtExistsFile( sData) then local Machine = dofile( sData) if Machine and Machine.Offsets then local MchOffs = Machine.Offsets NumericalControl = EgtIf( MchOffs.TIPO_CN ~= 1, 'NUM', 'TPA') if MchOffs.MAX_Y then MinY = -MchOffs.MAX_Y end if MchOffs.MIN_Y then MaxY = -MchOffs.MIN_Y end if MchOffs.PARK_Y then ParkY = EgtClamp( -MchOffs.PARK_Y, MinY, MaxY) end MinX = MchOffs.MIN_X or MinX MaxX = MchOffs.MAX_X or MaxX MinZ = MchOffs.MIN_Z or MinZ MaxZ = MchOffs.MAX_Z or MaxZ MinB = MchOffs.MIN_B or MinB MaxB = MchOffs.MAX_B or MaxB MinC = MchOffs.MIN_C or MinC MaxC = MchOffs.MAX_C or MaxC MillOffs = MchOffs.PIVOT or MillOffs if MchOffs.ZERO_Y then DeltaTabX = -MchOffs.ZERO_Y end if MchOffs.ZERO_X then DeltaTabY = MchOffs.ZERO_X - DimTabY end if MchOffs.ZERO_Z then DeltaTabZ = MchOffs.ZERO_Z + MillOffs end ChainSaw = ( MchOffs.CHAIN_SAW or 0) Nail11 = ( MchOffs.NAIL11 or 0) if Nail11 ~= 0 and MchOffs.ZERO_Y and MchOffs.ZERO_NAIL11_Y then Nail11DeltaX = - ( MchOffs.ZERO_Y - MchOffs.ZERO_NAIL11_Y) end if Nail11 ~= 0 and MchOffs.ZERO_X and MchOffs.ZERO_NAIL11_X then Nail11DeltaY = ( MchOffs.ZERO_X - MchOffs.ZERO_NAIL11_X) end if Nail11 ~= 0 and MchOffs.ZERO_Z and MchOffs.ZERO_NAIL11_Z then Nail11DeltaZ = ( MchOffs.ZERO_Z + MillOffs - MchOffs.ZERO_NAIL11_Z) end Nail12 = ( MchOffs.NAIL12 or 0) if Nail12 ~= 0 and MchOffs.ZERO_Y and MchOffs.ZERO_NAIL12_Y then Nail12DeltaX = - ( MchOffs.ZERO_Y - MchOffs.ZERO_NAIL12_Y) end if Nail12 ~= 0 and MchOffs.ZERO_X and MchOffs.ZERO_NAIL12_X then Nail12DeltaY = ( MchOffs.ZERO_X - MchOffs.ZERO_NAIL12_X) end if Nail12 ~= 0 and MchOffs.ZERO_Z and MchOffs.ZERO_NAIL12_Z then Nail12DeltaZ = ( MchOffs.ZERO_Z + MillOffs - MchOffs.ZERO_NAIL12_Z) end if MchOffs.OFFSET_ZERO2_Y then Orig2DeltaX = -MchOffs.OFFSET_ZERO2_Y end if MchOffs.OFFSET_ZERO2_X then Orig2DeltaY = MchOffs.OFFSET_ZERO2_X end if MchOffs.OFFSET_ZERO2_Z then Orig2DeltaZ = MchOffs.OFFSET_ZERO2_Z end if MchOffs.OFFSET_ZERO3_Y then Orig3DeltaX = -MchOffs.OFFSET_ZERO3_Y end if MchOffs.OFFSET_ZERO3_X then Orig3DeltaY = MchOffs.OFFSET_ZERO3_X end if MchOffs.OFFSET_ZERO3_Z then Orig3DeltaZ = MchOffs.OFFSET_ZERO3_Z end if MchOffs.OFFSET_ZERO4_Y then Orig4DeltaX = -MchOffs.OFFSET_ZERO4_Y end if MchOffs.OFFSET_ZERO4_X then Orig4DeltaY = MchOffs.OFFSET_ZERO4_X end if MchOffs.OFFSET_ZERO4_Z then Orig4DeltaZ = MchOffs.OFFSET_ZERO4_Z end if MchOffs.OFFSET_ZERO11_Y then Orig5DeltaX = -MchOffs.OFFSET_ZERO11_Y end if MchOffs.OFFSET_ZERO11_X then Orig5DeltaY = MchOffs.OFFSET_ZERO11_X end if MchOffs.OFFSET_ZERO11_Z then Orig5DeltaZ = MchOffs.OFFSET_ZERO11_Z end if MchOffs.OFFSET_ZERO12_Y then Orig6DeltaX = -MchOffs.OFFSET_ZERO12_Y end if MchOffs.OFFSET_ZERO12_X then Orig6DeltaY = MchOffs.OFFSET_ZERO12_X end if MchOffs.OFFSET_ZERO12_Z then Orig6DeltaZ = MchOffs.OFFSET_ZERO12_Z end if MchOffs.OFFSET_ZERO13_Y then Orig7DeltaX = -MchOffs.OFFSET_ZERO13_Y end if MchOffs.OFFSET_ZERO13_X then Orig7DeltaY = MchOffs.OFFSET_ZERO13_X end if MchOffs.OFFSET_ZERO13_Z then Orig7DeltaZ = MchOffs.OFFSET_ZERO13_Z end if MchOffs.OFFSET_ZERO14_Y then Orig8DeltaX = -MchOffs.OFFSET_ZERO14_Y end if MchOffs.OFFSET_ZERO14_X then Orig8DeltaY = MchOffs.OFFSET_ZERO14_X end if MchOffs.OFFSET_ZERO14_Z then Orig8DeltaZ = MchOffs.OFFSET_ZERO14_Z end DimTabX = Orig7DeltaX end end -- Spostamenti delle chiodatrici rispetto al disegno local Nail11OffsX = Nail11DeltaX - 330.0 local Nail11OffsY = Nail11DeltaY - 272.6 local Nail11OffsZ = Nail11DeltaZ + 76.5 local Nail12OffsX = Nail12DeltaX - 330.0 local Nail12OffsY = Nail12DeltaY + 272.6 local Nail12OffsZ = Nail12DeltaZ + 76.5 EmtGeneral { File='Essetre-WALL_XS0018.nge', Offset = Vector3d( 5420.0, -2830.0, -1408.5), AxisMaxAdjust = 3250, ExitMaxAdjust = 3250, Special = 'Essetre-WALL_XS.mlse', Processor = 'Essetre-WALL_XS.mlpe'} local BaseId = EmtBase { Name = 'Base', Geo='BASE/GEO', Aux={'BASE/TAB_PRE', 'BASE/TAB_1', 'BASE/TAB_MID', 'BASE/TAB_2', 'BASE/COLLISION'}} local vtMove = Vector3d( DeltaTabX - 1040.0, DeltaTabY + 4580.0, DeltaTabZ + 612.5) EgtMove( BaseId, vtMove, GDB_RT.GLOB) -- Tavola local TabId = EmtTable { Name = 'Tab', Parent = 'Base', Type = MCH_TT.FLAT, Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), Scale = {DimTabX/28940, DimTabY/3500, 1}, Geo = 'TABLE/GEO'} -- sposto le linee alla giusta quota EgtMove( EgtGetFirstNameInGroup( TabId, 'Mid'), Vector3d( Orig3DeltaX, 0, 0), GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( TabId, 'New'), Vector3d( Orig5DeltaX, 0, 0), GDB_RT.GLOB) -- sposto e scalo le tavole EgtScale( EgtGetFirstNameInGroup( BaseId, 'TAB_1'), Frame3d( Point3d( DeltaTabX, 0, 0)), ( Orig3DeltaX - 0) / ( 12160 - 0), 1, 1, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( BaseId, 'TAB_MID'), Vector3d( Orig3DeltaX - 12160, 0, 0), GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( BaseId, 'TAB_2'), Vector3d( Orig5DeltaX - 17620, 0, 0), GDB_RT.GLOB) EgtScale( EgtGetFirstNameInGroup( BaseId, 'TAB_2'), Frame3d( Point3d( DeltaTabX + Orig5DeltaX, 0, 0)), ( Orig7DeltaX - Orig5DeltaX) / ( 28940 - 17620), 1, 1, GDB_RT.GLOB) -- Traversa local YId = EmtAxis { Name = 'Y', Parent = 'Base', Invert = true, Type = MCH_AT.LINEAR, Dir = X_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinY, MaxY}, Home = ParkY, Geo = 'Y_AXIS/GEO', Aux = {'Y_AXIS/SOLID'}} -- Testa cambia utensili EmtAxis { Name = 'X', Parent = 'Y', Token = 'X', Type = MCH_AT.LINEAR, Dir = Y_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinX, MaxX}, Home = ( MinX + MaxX) / 2, Geo = 'X_AXIS/GEO', Aux = {'X_AXIS/SOLID'}} EmtAxis { Name = 'Z', Parent = 'X', Token = 'Z', Type = MCH_AT.LINEAR, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinZ, MaxZ}, Home = 0, Geo = 'Z_AXIS/GEO', Aux = {'Z_AXIS/SOLID'}} -- Chiodatrici local H11Id, H12Id if Nail11 ~= 0 then H11Id = EmtHead { Name = 'H11', Parent = 'Z', HSet = 'H11', Type = MCH_HT.STD, Pos = Point3d( Nail11DeltaX, Nail11DeltaY, Nail11DeltaZ), TDir = Z_AX(), Geo = 'H11_HEAD/GEO', Aux = {'H11_HEAD/SOLID'}} EgtMove( EgtGetFirstNameInGroup( H11Id, 'SOLID'), Vector3d( Nail11OffsX, Nail11OffsY, Nail11OffsZ), GDB_RT.GLOB) end if Nail12 ~= 0 then H12Id = EmtHead { Name = 'H12', Parent = 'Z', HSet = 'H12', Type = MCH_HT.STD, Pos = Point3d( Nail12DeltaX, Nail12DeltaY, Nail12DeltaZ), TDir = Z_AX(), Geo = 'H12_HEAD/GEO', Aux = {'H12_HEAD/SOLID'}} EgtMove( EgtGetFirstNameInGroup( H12Id, 'SOLID'), Vector3d( Nail12OffsX, Nail12OffsY, Nail12OffsZ), GDB_RT.GLOB) end -- Assi rotanti EmtAxis { Name = 'C', Parent = 'Z', Token = 'C', Type = MCH_AT.ROTARY, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinC, MaxC}, Home = 0, Geo = 'C_AXIS/GEO', Aux = {'C_AXIS/SOLID', 'C_AXIS/COLLISION'}} EmtAxis { Name = 'B', Parent = 'C', Token = 'B', Type = MCH_AT.ROTARY, Dir = -X_AX(), Pos = Point3d( 0, 0, MillOffs), Stroke = {MinB, MaxB}, Home = 0, Geo = 'B_AXIS/GEO', Aux = {'B_AXIS/SOLID', 'B_AXIS/COLLISION'}} -- Testa principale EmtHead { Name = 'H1', Parent = 'B', HSet = 'H1', Type = MCH_HT.STD, Pos = Point3d( 0, 0, 0), TDir = Z_AX(), ADir = Y_AX(), Rot1W = 0.1, OthColl = {'B/SOLID', 'C/SOLID'}, Geo = 'H1_HEAD/GEO'} -- Lama su aggregato EmtAxis { Name = 'A2', Parent = 'B', Token = '**', Type = MCH_AT.ROTARY, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = { -90, 0}, Home = 0, Geo = 'A2_AXIS/GEO'} local H2Id = EmtHead { Name = 'H2', Parent = 'A2', HSet = 'H1', Type = MCH_HT.STD, Pos = Point3d( SawOffsX, SawOffsY, SawOffsZ), TDir = Z_AX(), ADir = -Y_AX(), Rot1W = 0.1, OthColl = {'B/SOLID', 'C/SOLID'}, Geo = 'H2_HEAD/GEO'} EgtSetInfo( H2Id, 'Gearbox', 1) -- ToolChanger local ptTcC = Point3d( -288, 5, -533.5) local ptTc9 = Point3d( 0, -5630, -303.5) EmtTcPos { Name = 'T1', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 0), TDir = Z_AX(), ADir = -Y_AX(), Geo = 'Y_AXIS/T1'} EmtTcPos { Name = 'T2', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 45), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T2'} EmtTcPos { Name = 'T3', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 90), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T3'} EmtTcPos { Name = 'T4', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 135), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T4'} EmtTcPos { Name = 'T5', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 180), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T5'} EmtTcPos { Name = 'T6', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 225), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T6'} EmtTcPos { Name = 'T7', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 270), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T7'} EmtTcPos { Name = 'T8', Parent = 'Y', Pos = ptTcC + VectorFromPolar( 288, 315), TDir = Z_AX(), ADir = X_AX(), Geo = 'Y_AXIS/T8'} EmtTcPos { Name = 'T9', Parent = 'Y', Pos = ptTc9 + Vector3d( SawOffsX, -SawOffsY, SawOffsZ), TDir = Z_AX(), ADir = Y_AX(), Geo = 'Y_AXIS/T9'} --------------------------------------------------------------------- -- Funzioni richiamate per modificare i dati macchina in casi particolari --function OnSetTable() --end --------------------------------------------------------------------- local function MoveGroup( nGrpId, vtVers, dPos, bLoc) local dVal = EgtGetInfo( nGrpId or GDB_ID.NULL, 'Val') if not dVal then return end if abs( dPos - dVal) > GEO.EPS_SMALL then local nRT = EgtIf( bLoc, GDB_RT.LOC, GDB_RT.GLOB) EgtMove( nGrpId, ( dPos - dVal) * vtVers, nRT) EgtSetInfo( nGrpId, 'Val', dPos) end end --------------------------------------------------------------------- function OnSetHead() if H11Id then local dPos = EgtIf( EMC.HEAD == 'H11', 0, 650) MoveGroup( EgtGetFirstNameInGroup( H11Id, 'SOLID'), Z_AX(), dPos, true) MoveGroup( EgtGetFirstNameInGroup( H11Id, 'T1'), Z_AX(), dPos, true) end if H12Id then local dPos = EgtIf( EMC.HEAD == 'H12', 0, 650) MoveGroup( EgtGetFirstNameInGroup( H12Id, 'SOLID'), Z_AX(), dPos, true) MoveGroup( EgtGetFirstNameInGroup( H12Id, 'T1'), Z_AX(), dPos, true) end if EMC.HEAD == 'H11' or EMC.HEAD == 'H12' then EmtModifyAxisHome( 'B', 90) EgtResetAxisPos( 'B') else if EMC.HEAD == 'H2' then if not EMC.USERNOTES then local sCurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) if sCurrTool ~= EMC.TOOL then EgtTdbSetCurrTool( EMC.TOOL) EMC.USERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) EgtTdbSetCurrTool( sCurrTool) else EMC.USERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) end end local nPos = EgtGetValInNotes( EMC.USERNOTES, 'POS', 'i') if nPos == 2 then EmtModifyHeadAuxDirection( 'H2', X_AX()) EmtModifyAxisHome( 'A2', -90) EgtResetAxisPos( 'A2') EgtSetRotAxisBlock( 'A2', -90) else EmtModifyHeadAuxDirection( 'H2', -Y_AX()) EmtModifyAxisHome( 'A2', 0) EgtResetAxisPos( 'A2') EgtSetRotAxisBlock( 'A2', 0) end elseif EMC.HEAD == 'H3' then -- aggiustamenti per distanza da naso mandrino local dDist = EgtIf( EMC.DIST and abs( EMC.DIST) > 1, EMC.DIST, ChSawLen) EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -dDist)) if not EMC.VER or EMC.VER < '2.5h2' then local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS) local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT)) EgtMove( ExitId, vtMove) end end EmtModifyAxisHome( 'B', 0) end end --------------------------------------------------------------------- -- Funzione per resettare tutte le attivazioni della macchina function OnResetMachine() EmtUnlinkAllRawPartsFromGroups() EmtUnlinkAllFixturesFromGroups() EMC = { HEAD='H1'} OnSetHead() -- nascondo Vmill local nRawId = EgtGetFirstRawPart() while nRawId do local nId = EgtGetFirstInGroup( nRawId) while nId do if EgtGetInfo( nId, 'N', 's') == 'VMill' then EgtSetStatus( nId, GDB_ST.OFF) else EgtSetStatus( nId, GDB_ST.ON) end nId = EgtGetNext( nId) end nRawId = EgtGetNextRawPart( nRawId) end EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF) end