-- Descrizione macchina Essetre-90480014 by Egalware s.r.l. 2024/09/20 -- Macchina Wall. require( 'EmtGenerator') EgtEnableDebug( false) PP_VER = '2.6i1' PP_NVER = '2.6.9.1' -- Parametri macchina NumericalControl = 'NUM' -- NUM o TPA MinY = 0.0 MaxY = 15320.0 MinX1 = -4820.0 MaxX1 = 0.0 ParkTSpecX1 = -4200 MinZ1 = -1320.0 MaxZ1 = 0.0 MinB1 = -135.0 MaxB1 = 135.0 MinC1 = -275.0 MaxC1 = 275.0 MillOffs = 170.0 ChSawLen = 90.0 MinX2 = -5570.0 MaxX2 = -750.0 MinZ2 = -1000.0 MaxZ2 = 0.0 MinB2 = 0.0 MaxB2 = 90.0 MinC2 = -275.0 MaxC2 = 275.0 SawDeltaX = 348.0 SawDeltaY = 0.0 SawDeltaZ = -292.0 SawOffs = 154.0 Nail11DeltaX = 362.0 Nail11DeltaY = -135.0 Nail11DeltaZ = -10.0 Orig2DeltaX = 0 Orig2DeltaY = -3500 Orig2DeltaZ = 0 Orig3DeltaX = 21120 Orig3DeltaY = 0 Orig3DeltaZ = 0 Orig4DeltaX = 21120 Orig4DeltaY = -3500 Orig4DeltaZ = 0 DimTabX = 13920.0 DimTabY = 3500.0 DeltaTabX = 900.0 DeltaTabY = -1030.0 - DimTabY -- -4530.0 DeltaTabZ = -1118.0 CoeffVM = 0.5 -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90480014_MW.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 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.OFFSET_ZERO3_Y then DimTabX = - MchOffs.OFFSET_ZERO3_Y end if MchOffs.OFFSET_ZERO2_X then DimTabY = - MchOffs.OFFSET_ZERO2_X end if MchOffs.ZERO_Y_MILL then DeltaTabX = - MchOffs.ZERO_Y_MILL end if MchOffs.ZERO_X_MILL then DeltaTabY = ( MchOffs.ZERO_X_MILL - DimTabY) end DeltaTabZ = MchOffs.ZERO_Z_MILL or 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 if MchOffs.ZERO_Y_MILL and MchOffs.ZERO_NAIL11_Y then Nail11DeltaX = - ( MchOffs.ZERO_Y_MILL - MchOffs.ZERO_NAIL11_Y) end if MchOffs.ZERO_X_MILL and MchOffs.ZERO_NAIL11_X then Nail11DeltaY = ( MchOffs.ZERO_X_MILL - MchOffs.ZERO_NAIL11_X) end if MchOffs.ZERO_Z_MILL and MchOffs.ZERO_NAIL11_Z then Nail11DeltaZ = ( MchOffs.ZERO_Z_MILL - MchOffs.ZERO_NAIL11_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 end end -- Spostamenti della lama rispetto al disegno local SawOffsX = SawDeltaX - 348.0 local SawOffsY = SawDeltaY - 0.0 local SawOffsZ = SawDeltaZ + 292.0 -- Spostamenti delle chiodatrici rispetto al disegno local Nail11OffsX = Nail11DeltaX - 362.0 local Nail11OffsY = Nail11DeltaY + 135.0 local Nail11OffsZ = Nail11DeltaZ + 10.0 EmtGeneral { File='Essetre-90480014_MW.nge', Offset = Vector3d( -540.0, -2780.00, -1837.0), AxisMaxAdjust = 250, ExitMaxAdjust = 250, Special = 'Essetre-WALL.mlse', Processor = 'Essetre-WALL.mlpe'} local BaseId = EmtBase { Name = 'Base', Geo='BASE/GEO', Aux={'BASE/LOAD', 'BASE/MOD01', 'BASE/MOD02', 'BASE/MOD03', 'BASE/MOD04', 'BASE/MOD05', 'BASE/MOD06', 'BASE/COLLISION'}} local vtMove = Vector3d( DeltaTabX - 900.0, DeltaTabY + 4530.0, DeltaTabZ + 1118) EgtMove( BaseId, vtMove, GDB_RT.GLOB) -- Tavola EmtTable { Name = 'Tab', Parent = 'Base', Type = MCH_TT.FLAT, Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), Scale = {DimTabX/13920, DimTabY/3500, 1}, Geo = 'TABLE/GEO'} -- Traversa EmtAxis { Name = 'Y', Parent = 'Base', Invert = true, Type = MCH_AT.LINEAR, Dir = X_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinY, MaxY}, Home = 0, Geo = 'Y_AXIS/GEO', Aux = {'Y_AXIS/SOLID', 'Y_AXIS/TC', 'Y_AXIS/COLLISION'}} -- Testa 1 per frese EmtAxis { Name = 'X1', Parent = 'Y', Token = 'X', Type = MCH_AT.LINEAR, Dir = Y_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinX1, MaxX1}, Home = MaxX1, Geo = 'X1_AXIS/GEO', Aux = {'X1_AXIS/SOLID', 'X1_AXIS/COLLISION'}} 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', 'Z1_AXIS/H11_FIXED'}} -- Chiodatrice local H11Id = EmtHead { Name = 'H11', Parent = 'Z1', 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) 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 EmtAxis { Name = 'A1', Parent = 'B1', Token = '**', Type = MCH_AT.ROTARY, Dir = Z_AX(), Pos = Point3d( 0, 0, 0), Stroke = { 0, 270}, Home = 180, Geo = 'A1_AXIS/GEO'} local H3Id = EmtHead { Name = 'H3', Parent = 'A1', HSet = 'H1', Type = MCH_HT.STD, Pos = Point3d( 0, 0, -ChSawLen), TDir = Y_AX(), ADir = Z_AX(), Rot1W = 0.1, SolCh = MCH_SCC.ADIR_NEAR, OthColl = {'B1/SOLID', 'C1/SOLID'}, Geo = 'H3_HEAD/GEO'} EgtSetInfo( H3Id, 'ZSAFEDELTA', 120) -- Testa per Lama local X2Id = EmtAxis { Name = 'X2', Parent = 'Y', Token = 'X', Type = MCH_AT.LINEAR, Dir = Y_AX(), Pos = Point3d( 0, 0, 0), Stroke = {MinX2, MaxX2}, Home = MinX2, 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 ptTcA = Point3d( -240.26,-383.0,-326.8) EmtTcPos { Name = 'T1', Parent = 'Y', Pos = ptTcA, TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA1'} EmtTcPos { Name = 'T2', Parent = 'Y', Pos = ptTcA - 120 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA2'} EmtTcPos { Name = 'T3', Parent = 'Y', Pos = ptTcA - 240 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA3'} EmtTcPos { Name = 'T4', Parent = 'Y', Pos = ptTcA - 360 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA4'} EmtTcPos { Name = 'T5', Parent = 'Y', Pos = ptTcA - 480 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA5'} EmtTcPos { Name = 'T6', Parent = 'Y', Pos = ptTcA - 600 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA6'} EmtTcPos { Name = 'T7', Parent = 'Y', Pos = ptTcA - 720 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA7'} EmtTcPos { Name = 'T8', Parent = 'Y', Pos = ptTcA - 840 * Z_AX(), TDir = -Y_AX(), ADir = X_AX(), Geo = 'Y_AXIS/TA8'} EmtTcPos { Name = 'T101', Parent = 'Y', Pos = Point3d(-468.0,-1047.4,-250.8), TDir = X_AX(), ADir = Z_AX(), Geo = 'Y_AXIS/TC1'} --------------------------------------------------------------------- -- 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() -- posizione slitta chiodatrice local dPos = EgtIf( EMC.HEAD == 'H11', 0, 580) MoveGroup( EgtGetFirstNameInGroup( H11Id, 'SOLID'), Z_AX(), dPos, true) MoveGroup( EgtGetFirstNameInGroup( H11Id, 'T1'), Z_AX(), dPos, true) -- se sega a catena if EMC.HEAD == 'H3' then -- gestione 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)) local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS) local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT)) EgtMove( ExitId, vtMove) -- gestione assi local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) local CSawPosA = EgtGetVal( sVal, 'A1', 'd') or 180 EmtModifyAxisHome( 'X1', ParkTSpecX1) EmtModifyAxisHome( 'Z1', GetChainSawZHomeFromVirtualAxis( CSawPosA)) EmtModifyAxisStroke( 'C1', { MinC1, MaxC1}) EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( CSawPosA)) EmtModifyAxisStroke( 'B1', { MinB1, MaxB1}) -- se utensile di grande diametro su testa fresa elseif EMC.HEAD == 'H1' and EMC.TOTDIAM > 400 then EmtModifyAxisHome( 'X1', MaxX1) EmtModifyAxisHome( 'Z1', MaxZ1) EmtModifyAxisStroke( 'C1', { -180.1, 0.1}) EmtModifyAxisHome( 'C1', 0) EmtModifyAxisStroke( 'B1', { -90.1, 0.1}) -- altri casi su testa fresa elseif EMC.HEAD == 'H1' or EMC.HEAD == 'H11' then EmtModifyAxisHome( 'X1', MaxX1) EmtModifyAxisHome( 'Z1', MaxZ1) EmtModifyAxisStroke( 'C1', { MinC1, MaxC1}) EmtModifyAxisHome( 'C1', 0) EmtModifyAxisStroke( 'B1', { MinB1, MaxB1}) end end --------------------------------------------------------------------- -- Funzione che calcola la posizione Home di Z per la sega a catena dal valore dell'asse virtuale function GetChainSawZHomeFromVirtualAxis( dPosA) -- quota fissa return -125 end --------------------------------------------------------------------- -- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale function GetChainSawCHomeFromVirtualAxis( dPosA) -- se A=180 -> T104 -> HomeC = -90 if abs( dPosA - 180) < 0.1 then return -90 -- altrimenti A=90 -> T101 -> HomeC = 0 else return 0 end end --------------------------------------------------------------------- -- Funzione per resettare tutte le attivazioni della macchina function OnResetMachine() EmtUnlinkAllRawPartsFromGroups() EmtUnlinkAllFixturesFromGroups() EMC = { HEAD='H1', TOTDIAM=0} OnSetHead() -- 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) end