-- Descrizione macchina Essetre-90580012 by EgalTech s.r.l. 2024/09/23 -- Macchina Progress (parte Wall). -- 2023/09/01 DS ver 2.5i1 Primo rilascio partendo da 90580017. -- 2023/09/05 DS ver 2.5i2 Sistemazioni varie. Sottratto circa 30 da G1xx. -- 2023/09/06 DS ver 2.5i3 Impostata origine 3. -- 2023/09/18 DS ver 2.5i4 Aggiunta gestione due tavole accoppiate. -- 2023/09/20 DS ver 2.5i5 Grezzi larghi fino a 3520. Rifatta lavorazione lama in DB per eliminare problema ultimo step. -- 2023/09/20 DS ver 2.5i6 Corretta gestione posizione seconda tavola. Corretto spostamento solidi collisione testa lama. -- 2024/02/09 AV ver 2.6b1 Forzato posizionamento pezzo sempre in origine 1 -- Aggiunto magazzino per trucioaltore 600x20mm -- Tavole azzerate a X negativo (per Essetre Y positivo) -- 2024/02/10 DS ver 2.6b2 Sistemazione estremi assi Y. -- Aumentato interasse tra le tavole quando accoppiate -- 2024/02/15 AV ver 2.6b3 Cambiato id motosega EU101->104 (Prima era EU41) -- Corretta posizione parcheggio in base al nuovo lato di carico -- 2024/10/04 AV ver 2.6j1 Modificato controllo collisione tavola. Ora permessi 10mm -- 2024/11/28 LM ver 2.6k1 In WallData aggiunto parametri MIN_Z_SAW e CUT_VZ_MIN require( 'EmtGenerator') EgtEnableDebug( false) PP_VER = '2.7h1' PP_NVER = '2.7.8.1' -- Parametri macchina NumericalControl = 'NUM' -- NUM o TPA MinY = 10000.0 MaxY = 35500.0 MinY2 = 0.0 MaxY2 = 25500.0 MinX1 = -5440.0 MaxX1 = -690.0 MinZ1 = -1345.0 MaxZ1 = 0.0 SafeZ1 = -800.0 MinB1 = -127.0 MaxB1 = 127.0 MinC1 = -275.0 MaxC1 = 275.0 MillOffs = 170.0 ChSawLen = 91.0 ParkChSawX1 = ( MinX1 + MaxX1) / 2 ParkChSawZ1 = -400 -- OLD: -250 ParkChSawC1 = 90 MinX2 = -4750.0 MaxX2 = 0.0 MinZ2 = -1155.0 MaxZ2 = 0.0 MinB2 = 0.0 MaxB2 = 90.0 MinC2 = -275.0 MaxC2 = 275.0 SawDeltaX = 104.5 SawDeltaY = 0.0 SawDeltaZ = -253.0 SawOffs = 154.0 DimTabX = 10000.0 DimTabY = 3500.0 DeltaTabX = 12207.5 DeltaTabY = -4789.3 DeltaTabZ = -1150.0 DimTab2X = 10000.0 DimTab2Y = 3500.0 DeltaTab2X = 12207.5 DeltaTab2Y = -4789.3 DeltaTab2Z = -1150.0 GantryTabs = 11000.0 OffsetTabs = 332 CoeffVM = 0.75 -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90580012.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.MAX_Y2 then MinY2 = -MchOffs.MAX_Y2 end if MchOffs.MIN_Y2 then MaxY2 = -MchOffs.MIN_Y2 end MinX1 = MchOffs.MIN_X or MinX1 MaxX1 = MchOffs.MAX_X or MaxX1 MinZ1 = MchOffs.MIN_Z or MinZ1 MaxZ1 = MchOffs.MAX_Z or MaxZ1 MinB1 = MchOffs.MIN_B or MinB1 MaxB1 = MchOffs.MAX_B or MaxB1 MinC1 = MchOffs.MIN_C or MinC1 MaxC1 = MchOffs.MAX_C or MaxC1 MinX2 = MchOffs.MIN_U or MinX2 MaxX2 = MchOffs.MAX_U or MaxX2 MinZ2 = MchOffs.MIN_W or MinZ2 MaxZ2 = MchOffs.MAX_W or MaxZ2 MinB2 = MchOffs.MIN_V or MinB2 MaxB2 = MchOffs.MAX_V or MaxB2 MinC2 = MchOffs.MIN_A or MinC2 MaxC2 = MchOffs.MAX_A or MaxC2 MillOffs = MchOffs.PIVOT_MILL or MillOffs SawOffs = MchOffs.PIVOT_SAW or SawOffs if MchOffs.ZERO_Y_MILL and MchOffs.OFFSET_ZERO2_Y then DeltaTabX = -MchOffs.ZERO_Y_MILL - MchOffs.OFFSET_ZERO2_Y end if MchOffs.ZERO_X_MILL and MchOffs.OFFSET_ZERO2_X then DeltaTabY = MchOffs.ZERO_X_MILL + MchOffs.OFFSET_ZERO2_X end DeltaTabZ = MchOffs.ZERO_Z_MILL or DeltaTabZ DeltaTab2X = DeltaTabX DeltaTab2Y = DeltaTabY DeltaTab2Z = DeltaTabZ if MchOffs.ZERO_Y_MILL and MchOffs.ZERO_Y_SAW then SawDeltaX = - ( MchOffs.ZERO_Y_MILL - MchOffs.ZERO_Y_SAW) end if MchOffs.ZERO_X_MILL and MchOffs.ZERO_X_SAW then SawDeltaY = ( MchOffs.ZERO_X_MILL - MchOffs.ZERO_X_SAW) end if MchOffs.ZERO_Z_MILL and MchOffs.ZERO_Z_SAW then SawDeltaZ = ( MchOffs.ZERO_Z_MILL - MchOffs.ZERO_Z_SAW) end GantryTabs = MchOffs.GANTRY_TABLES or GantryTabs end end -- Spostamenti della lama rispetto al disegno local SawOffsX = SawDeltaX - 104.5 local SawOffsY = SawDeltaY - 0 local SawOffsZ = SawDeltaZ + 253.0 EmtGeneral { File='Essetre-90580012.nge', Offset = Vector3d( -783.5, -5820.00, -1778.0), AxisMaxAdjust = 300, ExitMaxAdjust = 300, Special = 'Essetre-WALL.mlse', Processor = 'Essetre-WALL.mlpe'} local BaseId = EmtBase { Name = 'Base', Geo='BASE/GEO', Aux={'BASE/TRAVERSA', 'BASE/SUBTABLE', 'BASE/COLLISION', 'BASE/TC', 'BASE/TCR', 'BASE/TCR2'}} local vtMove = Vector3d( DeltaTabX - 12207.5, DeltaTabY + 4789.3, DeltaTabZ + 1150) EgtMove( EgtGetFirstNameInGroup( BaseId, 'SUBTABLE'), vtMove, GDB_RT.GLOB) -- Tavola 1 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 = MaxY, Geo = 'Y_AXIS/GEO', Aux = {'Y_AXIS/SOLID'}} EgtMove( YId, vtMove, GDB_RT.GLOB) local TabId = EmtTable { Name = 'Tab', Parent = 'Y', Type = MCH_TT.FLAT, Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), Geo = 'TABLE/GEO', Aux = {'TABLE/GEO2', 'TABLE/SOLID', 'TABLE/COLLISION'}} -- Tavola 2 local Y2Id = EmtAxis { Name = 'Y2', Parent = 'Base', Invert = true, Type = MCH_AT.LINEAR, Dir = -X_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinY2, MaxY2}, Home = MinY2, Geo = 'Y2_AXIS/GEO', Aux = {'Y2_AXIS/SOLID'}} EgtMove( Y2Id, vtMove, GDB_RT.GLOB) EmtTable { Name = 'Tab2', Parent = 'Y2', Type = MCH_TT.FLAT, Ref1 = Point3d( DeltaTab2X, DeltaTab2Y, DeltaTab2Z), Geo = 'TABLE2/GEO', Aux = {'TABLE2/SOLID', 'TABLE2/COLLISION'}} -- Testa per frese EmtAxis { Name = 'X1', Parent = 'Base', Token = 'X', Type = MCH_AT.LINEAR, Dir = Y_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinX1, MaxX1}, Home = MinX1, Geo = 'X1_AXIS/GEO', Aux = {'X1_AXIS/SOLID'}} EmtAxis { Name = 'Z1', Parent = 'X1', Token = 'Z', Type = MCH_AT.LINEAR, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinZ1, MaxZ1}, Home = 0, Geo = 'Z1_AXIS/GEO', Aux = {'Z1_AXIS/SOLID'}} EmtAxis { Name = 'C1', Parent = 'Z1', Token = 'C', Type = MCH_AT.ROTARY, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinC1, MaxC1}, Home = 0, Geo = 'C1_AXIS/GEO', Aux = {'C1_AXIS/SOLID', 'C1_AXIS/COLLISION'}} EmtAxis { Name = 'B1', Parent = 'C1', Token = 'B', Type = MCH_AT.ROTARY, Dir = -X_AX(), Pos = Point3d( 0, 0, MillOffs), Stroke = {MinB1, MaxB1}, Home = 0, Geo = 'B1_AXIS/GEO', Aux = {'B1_AXIS/SOLID', 'B1_AXIS/COLLISION'}} EmtHead { Name = 'H1', Parent = 'B1', HSet = 'H1', Type = MCH_HT.STD, Pos = Point3d( 0, 0, 0), TDir = Z_AX(), ADir = Y_AX(), Rot1W = 0.1, OthColl = {'B1/SOLID', 'C1/SOLID'}, Geo = 'H1_HEAD/GEO'} -- Sega a catena -- attenzione: gestita solo la home per la posizione 104, unica abilitata. Se si aggiungono altre posizioni, la home sarĂ  da modificare nella OnSetHead EmtAxis { Name = 'A1', Parent = 'B1', Token = '**', Type = MCH_AT.ROTARY, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = { -90, 180}, Home = 90, Geo = 'A1_AXIS/GEO'} local H3Id = EmtHead { Name = 'H3', Parent = 'A1', HSet = 'H1', Type = MCH_HT.STD, Pos = Point3d( 0, 0, -ChSawLen), TDir = X_AX(), ADir = Z_AX(), Rot1W = 0.1, SolCh = MCH_SCC.ADIR_NEAR, OthColl = {'B1/SOLID', 'C1/SOLID'}, Geo = 'H3_HEAD/GEO'} EgtSetInfo( H3Id, 'ZSAFEDELTA', 60) -- Testa per Lama local X2Id = EmtAxis { Name = 'X2', Parent = 'Base', Token = 'X', Type = MCH_AT.LINEAR, Dir = Y_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinX2, MaxX2}, Home = MaxX2, Geo = 'X2_AXIS/GEO', Aux = {'X2_AXIS/SOLID'}} EgtMove( EgtGetFirstNameInGroup( X2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, 0), GDB_RT.GLOB) local Z2Id = EmtAxis { Name = 'Z2', Parent = 'X2', Token = 'Z', Type = MCH_AT.LINEAR, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinZ2, MaxZ2}, Home = 0, Geo = 'Z2_AXIS/GEO', Aux = {'Z2_AXIS/SOLID'}} EgtMove( EgtGetFirstNameInGroup( Z2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) local C2Id = EmtAxis { Name = 'C2', Parent = 'Z2', Token = 'C', Type = MCH_AT.ROTARY, Dir = Z_AX(), Pos = Point3d( SawDeltaX, SawDeltaY, 0), Stroke = {MinC2, MaxC2}, Home = 0, Geo = 'C2_AXIS/GEO', Aux = {'C2_AXIS/SOLID', 'C2_AXIS/COLLISION'}} EgtMove( EgtGetFirstNameInGroup( C2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( C2Id, 'COLLISION'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) local B2Id = EmtAxis { Name = 'B2', Parent = 'C2', Token = 'B', Type = MCH_AT.ROTARY, Dir = -X_AX(), Pos = Point3d( SawDeltaX, SawDeltaY, SawDeltaZ + SawOffs), Stroke = {MinB2, MaxB2}, Home = 90, Geo = 'B2_AXIS/GEO', Aux = {'B2_AXIS/SOLID', 'B2_AXIS/COLLISION'}} EgtMove( EgtGetFirstNameInGroup( B2Id, 'SOLID'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( B2Id, 'COLLISION'), Vector3d( SawOffsX, SawOffsY, SawOffsZ), GDB_RT.GLOB) local H2Id = EmtHead { Name = 'H2', Parent = 'B2', HSet = 'H2', Type = MCH_HT.STD, Pos = Point3d( SawDeltaX, SawDeltaY, SawDeltaZ), TDir = Z_AX(), ADir = -Y_AX(), Rot1W = 0.2, OthColl = {'B2/SOLID', 'C2/SOLID'}, Geo = 'H2_HEAD/GEO'} -- ToolChanger local ptTC = Point3d( -616.3,-3892.7,-63.0) EmtTcPos { Name = 'T1', Parent = 'Base', Pos = ptTC, TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T1'} EmtTcPos { Name = 'T2', Parent = 'Base', Pos = ptTC + 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T2'} EmtTcPos { Name = 'T3', Parent = 'Base', Pos = ptTC + 2 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T3'} EmtTcPos { Name = 'T4', Parent = 'Base', Pos = ptTC + 3 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T4'} EmtTcPos { Name = 'T5', Parent = 'Base', Pos = ptTC + 4 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T5'} EmtTcPos { Name = 'T6', Parent = 'Base', Pos = ptTC + 5 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T6'} EmtTcPos { Name = 'T7', Parent = 'Base', Pos = ptTC + 6 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T7'} EmtTcPos { Name = 'T8', Parent = 'Base', Pos = ptTC + 7 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T8'} EmtTcPos { Name = 'T9', Parent = 'Base', Pos = ptTC + 8 * 102.5 * Y_AX(), TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T9'} local ptTCR = Point3d( -611.0,-5033.7,-197.0) EmtTcPos { Name = 'T101', Parent = 'Base', Pos = ptTCR - ChSawLen * Z_AX(), TDir = X_AX(), ADir = Z_AX(), Geo = 'BASE/T101'} local ptTCR2 = Point3d( -901.3,-4392.7,-79) EmtTcPos { Name = 'T201', Parent = 'Base', Pos = ptTCR2, TDir = Z_AX(), ADir = X_AX(), Geo = 'BASE/T201'} --------------------------------------------------------------------- -- Funzioni richiamate per modificare i dati macchina in casi particolari --function OnSetTable() --end --------------------------------------------------------------------- function OnSetHead() if EMC.HEAD == 'H1' then EmtModifyAxisHome( 'X1', MinX1) EmtModifyAxisHome( 'Z1', MaxZ1) EmtModifyAxisHome( 'C1', 0) elseif EMC.HEAD == 'H3' then EmtModifyAxisHome( 'X1', ParkChSawX1) EmtModifyAxisHome( 'Z1', ParkChSawZ1) EmtModifyAxisHome( 'C1', ParkChSawC1) 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 end --------------------------------------------------------------------- -- Funzione per resettare tutte le attivazioni della macchina function OnResetMachine() EmtUnlinkAllRawPartsFromGroups() EmtUnlinkAllFixturesFromGroups() -- nascondo Vmill local nRawId = EgtGetFirstRawPart() while nRawId do local nVmId = EgtGetFirstNameInGroup( nRawId, 'VMill') local nId = EgtGetFirstInGroup( nRawId) while nId do EgtSetStatus( nId, EgtIf( nId ~= nVmId, GDB_ST.ON, GDB_ST.OFF)) nId = EgtGetNext( nId) end nRawId = EgtGetNextRawPart( nRawId) end EgtSetStatus( EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') or GDB_ID.NULL, GDB_ST.OFF) -- visualizzo geometria ausiliaria tavola EgtSetStatus( EgtGetFirstNameInGroup( TabId, 'GEO2') or GDB_ID.NULL, GDB_ST.ON) end