commit 0c6f35297e436148c8531bbda6fdf941b05bf7ab Author: andrea.villa Date: Fri Feb 21 10:55:58 2025 +0100 Prima versione, di derivazione da Essetre-90580017 diff --git a/Essetre-90580015.ini b/Essetre-90580015.ini new file mode 100644 index 0000000..d59fa9b --- /dev/null +++ b/Essetre-90580015.ini @@ -0,0 +1,60 @@ +; Commento per evitare BOM con UTF-8 +[General] +Material=Beam + +[Tools] +Drillbit=1 +Sawblade=1 +Mill=1 +Mortise=1 +Chisel=0 +DrillMaker=MakeWoodDrill.lua +SawbladeMaker=MakeSawblade.lua +MillMaker=MakeWoodCylMill.lua +MortiseMaker=MakeMortise.lua +ChiselMaker=MakeChisel.lua +Active=1 + +[ToolHolder] +H1.1=Standard.nge +H1.1:MILL_NOTIP=MillNoTip.nge +H2.1= +H3.1=ChainSaw.nge + +[Machinings] +Drilling=1 +Sawing=1 +Milling=1 +Pocketing=1 +Mortising=1 +Chiseling=0 +SawRoughing=0 +SawFinishing=0 + +[Machining] +InitScript=InitMach.lua +ExitScript=ExitMach.lua + +[Disposition] +;InitScript=InitDisp.lua + +[Heads] +; 5 axis head +H1=6608 +; 5 axis saw +H2=6615 +; Chainsaw +H3=6616 +; Horizontal drill +H5=6621 + +[SetUp] +Default=Standard + +[Estimations] +Enable=1 +WinPlace=0,514,138,628,810 + +[VMill] +Enable=1 +Save=0 diff --git a/Essetre-90580015.mlde b/Essetre-90580015.mlde new file mode 100644 index 0000000..5744fb6 --- /dev/null +++ b/Essetre-90580015.mlde @@ -0,0 +1,387 @@ +-- Descrizione macchina Essetre-90580017 by EgalTech s.r.l. 2024/09/23 +-- Macchina Progress (parte Wall). +-- 2021/02/16 DS Aggiunto M05 in fondo al foro con punta orizzonatel lunga. +-- 2021/02/18 DS Aggiunta gestione pausa prima di pulitura spigoli previa rimozione sfridi. +-- 2021/06/08 DS Sistemati codici G speciali aggiungendo 30. +-- 2022/05/24 DS Piccole modifiche per allineare con ultime Wall. +-- 2022/09/26 DS ver 2.4i1 Aggiunti offset in Y e Z. +-- 2022/11/09 DS ver 2.4k1 Migliorata gestione distanza sega a catena da DB utensili. + +require( 'EmtGenerator') +EgtEnableDebug( false) + +PP_VER = '2.7b1' +PP_NVER = '2.7.2.1' + +-- Parametri macchina +NumericalControl = 'NUM' -- NUM o TPA +MinY = 0.0 +MaxY = 22000.0 +MinX1 = -7480.0 +MaxX1 = -2740.0 +MinZ1 = -1585.0 +MaxZ1 = 0.0 +MinB1 = -135.0 +MaxB1 = 135.0 +MinC1 = -275.0 +MaxC1 = 275.0 +MillOffs = 170.0 +ChSawLen = 91.0 +ParkChSawX1 = ( MinX1 + MaxX1) / 2 +ParkChSawZ1 = -250 +MinX2 = -8250.0 +MaxX2 = -3510.0 +MinZ2 = -1180.0 +MaxZ2 = 0.0 +MinB2 = 0.0 +MaxB2 = 90.0 +MinC2 = -275.0 +MaxC2 = 275.0 +SawDeltaX = 447.5 +SawDeltaY = 0.0 +SawDeltaZ = -112.0 +SawOffs = 163.5 +DimTabX = 17945.0 +DimTabY = 3500.0 +DeltaTabX = 2043 +DeltaTabY = -7017 +DeltaTabZ = -936.0 +CoeffVM = 0.75 + +-- Aggiornamento con dati da TechnoEssetre7 +local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90580017.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_X3 or MinX2 + MaxX2 = MchOffs.MAX_X3 or MaxX2 + MinZ2 = MchOffs.MIN_Z3 or MinZ2 + MaxZ2 = MchOffs.MAX_Z3 or MaxZ2 + MinB2 = MchOffs.MIN_B3 or MinB2 + MaxB2 = MchOffs.MAX_B3 or MaxB2 + MinC2 = MchOffs.MIN_C3 or MinC2 + MaxC2 = MchOffs.MAX_C3 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 + 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 + end +end + +-- Spostamenti della lama rispetto al disegno +local SawOffsX = SawDeltaX - 447.5 +local SawOffsY = SawDeltaY - 0 +local SawOffsZ = SawDeltaZ + 112.0 + +EmtGeneral { + File='Essetre-90580017.nge', + Offset = Vector3d( -540.35, -5820.00, -1847.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'}} + local vtMove = Vector3d( DeltaTabX - 2034, DeltaTabY + 7020, DeltaTabZ + 909) + EgtMove( EgtGetFirstNameInGroup( BaseId, 'SUBTABLE'), vtMove, GDB_RT.GLOB) +-- Tavola +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 = MinY, + Geo = 'Y_AXIS/GEO', + Aux = {'Y_AXIS/SOLID'}} + EgtMove( YId, vtMove, GDB_RT.GLOB) +EmtTable { + Name = 'Tab', + Parent = 'Y', + Type = MCH_TT.FLAT, + Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), + Geo = 'TABLE/GEO', + Aux = {'TABLE/SOLID', 'TABLE/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 = MaxX1, + 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 +EmtAxis { + Name = 'A1', + Parent = 'B1', + Token = '**', + Type = MCH_AT.ROTARY, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = { -90, 180}, + Home = 0, + 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', 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 = 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) +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) +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( -450.6,-7781.7,-135.0) +EmtTcPos { + Name = 'T31', + Parent = 'Base', + Pos = ptTC, + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T31'} +EmtTcPos { + Name = 'T32', + Parent = 'Base', + Pos = ptTC + 150 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T32'} +EmtTcPos { + Name = 'T33', + Parent = 'Base', + Pos = ptTC + 300 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T33'} +EmtTcPos { + Name = 'T34', + Parent = 'Base', + Pos = ptTC + 450 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T34'} +EmtTcPos { + Name = 'T35', + Parent = 'Base', + Pos = ptTC + 600 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T35'} +EmtTcPos { + Name = 'T36', + Parent = 'Base', + Pos = ptTC + 750 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T36'} +EmtTcPos { + Name = 'T37', + Parent = 'Base', + Pos = ptTC + 900 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T37'} +EmtTcPos { + Name = 'T38', + Parent = 'Base', + Pos = ptTC + 1050 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T38'} +EmtTcPos { + Name = 'T39', + Parent = 'Base', + Pos = ptTC + 1200 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'BASE/T39'} +EmtTcPos { + Name = 'T40', + Parent = 'Base', + Pos = ptTC + 1350 * Y_AX() - ChSawLen * Z_AX(), + TDir = -Y_AX(), + ADir = Z_AX(), + Geo = 'BASE/T40'} + +--------------------------------------------------------------------- +-- Funzioni richiamate per modificare i dati macchina in casi particolari +--function OnSetTable() +--end + +--------------------------------------------------------------------- +function OnSetHead() + if EMC.HEAD == 'H1' then + EmtModifyAxisHome( 'X1', MaxX1) + EmtModifyAxisHome( 'Z1', MaxZ1) + EmtModifyAxisHome( 'C1', 0) + elseif EMC.HEAD == 'H3' then + EmtModifyAxisHome( 'X1', ( MinX1 + MaxX1) / 2) + EmtModifyAxisHome( 'Z1', ParkChSawZ1) + EmtModifyAxisHome( 'C1', 0) + if EMC.DIST and abs( EMC.DIST) > 1 then + EmtModifyExitPosition( EMC.HEAD, EMC.EXIT, Point3d( 0, 0, -EMC.DIST)) + local vtMove = Point3d( 0, 0, -EMC.DIST) - 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) +end diff --git a/Essetre-90580015.nge b/Essetre-90580015.nge new file mode 100644 index 0000000..1c01456 Binary files /dev/null and b/Essetre-90580015.nge differ diff --git a/Essetre-WALL.NUM.mlpe b/Essetre-WALL.NUM.mlpe new file mode 100644 index 0000000..caebff5 --- /dev/null +++ b/Essetre-WALL.NUM.mlpe @@ -0,0 +1,577 @@ +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2022/11/09 +-- Con controllo numerico NUM + +-- Variabili di modulo +local MLE_INFO = 'Essetre-WALL.NUM.mlpe ver.'..PP_VER..' by EgalTech s.r.l.' +local TEST_USE = false + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +function OnStart() + EMT.USETO1 = false -- abilitazione uso origine tavola + EMT.MODAL = true -- abilitazione emissione modale + EMT.INCHES = false -- unità di misura mm/inches + EMT.NUM = false -- abilitazione numerazione linee + --EMT.Nt = 'N' -- token per la numerazione di linea + --EMT.LINENBR = 0 -- numero di linea + --EMT.LINEINC = 1 -- incremento numerazione linee + --EMT.Ft = 'F' -- token per feed + --EMT.St = 'S' -- token per speed + EMT.FMAXPINZE = 154000 -- feed massima pinze +end + +--------------------------------------------------------------------- +function OnEnd() + -- Ripristino fase iniziale come corrente + EgtSetCurrPhase( 1) +end + +--------------------------------------------------------------------- +function OnProgramStart() + -- Flag + local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or GDB_ID.NULL + EMT.LOAD90 = EgtGetInfo( BtlInfoId, 'LOAD90', 'i') or 0 + -- Intestazioni + if not TEST_USE then + EMT.PRODID = EgtGetInfo( BtlInfoId, 'PRODID', 'i') or 0 + EMT.PATTID = EgtGetInfo( BtlInfoId, 'PATTID', 'i') or 0 + EmtOutput( '%' .. tostring( EMT.PATTID) .. '.0') + else + EmtOutput( '%40.0') + end + if EMT.INFO then + EmtOutput( '('..EMT.INFO..')') + else + EmtOutput( '(Program Start)') + end + EmtOutput( '('.. MLE_INFO..')') + -- Parametri macchina + local sOut = 'G135'..' EA'..EgtNumToString( DeltaTabY - SawDeltaY + DimTabY, -2)..' EB'..EgtNumToString( -DeltaTabX - DimTabX + SawDeltaX, -2).. + ' EC'..EgtNumToString( DeltaTabZ - SawDeltaZ, -2)..' ED'..EgtNumToString( SawOffs, -2)..' EE'..EgtNumToString( 0, -2).. + ' EF'..EgtNumToString( DeltaTabY + DimTabY, -2)..' EG'..EgtNumToString( -DeltaTabX - DimTabX, -2).. + ' EH'..EgtNumToString( DeltaTabZ, -2)..' EI'..EgtNumToString( MillOffs, -2) + EmtOutput( '('..sOut..')') + -- Indice lavorazione + EMT.CNT = 0 + -- Non effettuate lavorazioni con sega a catena sul fianco + EMT.CSAWFIRST = true + -- Non effettuata pausa per rimozione sfridi + EMT.SCRAPFIRST = true + -- Cerco primo utensile su testa 1 + EMT.TOOL_1, EMT.TLEN_1 = FindFirstToolOnHead( 'H1') + -- Imposto uso origine 2 + EMT.ORIG = 2 +end + +--------------------------------------------------------------------- +function OnProgramEnd() + EmtOutput( '( *** Program End *** )') + EmitCount() + -- Dichiarazione conclusione pezzi + if EMT.PRODID then + local PartId = EgtGetFirstPartInRawPart( EMT.RAWID) + while PartId do + local CutId = EgtGetInfo( PartId, 'CUTID', 'i') or 0 + local sOut = 'G156 EA'..tostring( EMT.PRODID)..' EB'..tostring( EMT.PATTID)..' EC'..tostring( CutId)..' ED2' + EmtOutput( sOut) + PartId = EgtGetNextPartInRawPart( PartId) + end + end + -- Arresto mandrino + EmtOutput( 'M05 E80000=1') + -- Tipo di scarico + if not TEST_USE then + EmtOutput( 'M27') + else + EmtOutput( 'M27') + end + -- Se modalità test, termino il programma + if TEST_USE then + EmtOutput( 'M02') + end +end + +--------------------------------------------------------------------- +function OnToolData() + -- emissione dati utensile (esclusa lama e sega a catena) + if EMT.HEAD == 'H1' then + -- cerco posizione di attrezzaggio del primo utensile di lavorazione + if EMT.TOOL == EMT.TOOL_1 and EMT.TLEN_1 < 215.5 then + EMT.TCPOS_1 = EMT.TCPOS + end + -- emissione dati sega a catena + elseif EMT.HEAD == 'H3' then + ; + end +end + +--------------------------------------------------------------------- +function OnDispositionStart() + --EmtOutput( '(Disposition '..EMT.DISPIND..' = '..EMT.DISPID..')') + EMT.OPEISDISP = true +end + +--------------------------------------------------------------------- +function OnDispositionEnd() + -- Se prima disposizione + if EMT.PHASE == 1 then + -- Dimensioni grezzo + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + EmtOutput( 'E30050='..EgtNumToString( 1000 * b3Raw:getDimY(), 0).. + ' E30051='..EgtNumToString( 1000 * b3Raw:getDimX(), 0).. + ' E30052='..EgtNumToString( 1000 * b3Raw:getDimZ(), 0)) + -- Eventuale salto a lavorazione in corso + EmtOutput( 'G79 NE80000') + -- Lancio del carico + EmitCount() + EmtOutput( 'M26 L0='..EgtNumToString( EMT.ORIG, 0)) + -- Dichiarazione inizio lavorazione pezzi + if EMT.PRODID then + EmitCount() + local PartId = EgtGetFirstPartInRawPart( EMT.RAWID) + while PartId do + local CutId = EgtGetInfo( PartId, 'CUTID', 'i') or 0 + local sOut = 'G156 EA'..tostring( EMT.PRODID)..' EB'..tostring( EMT.PATTID)..' EC'..tostring( CutId)..' ED1' + EmtOutput( sOut) + PartId = EgtGetNextPartInRawPart( PartId) + end + end + end + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnTableData() +end + +--------------------------------------------------------------------- +function OnFixtureData() +end + +--------------------------------------------------------------------- +function OnRawMoveData() +end + +--------------------------------------------------------------------- +function OnToolSelect() + -- se utensile definito (non definito per disposizioni con movimento) + if EMT.TOOL ~= '' then + -- verifiche su utensile + local sTool = EgtTdbGetToolFromUUID( EgtGetMachiningParam( MCH_MP.TUUID) or "") + if sTool ~= EMT.TOOL then error( "Tool name mismatch") end + -- predefinite EMT.TCPOS EMT.HEAD EMT.EXIT + EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + EMT.TOOLSEL = EMT.TCPOS..' M06' + EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM) + EMT.TTOTDIAM = EgtTdbGetCurrToolParam( MCH_TP.TOTDIAM) + EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) + EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + if MCH_TP.DIST then EMT.TDIST = EgtTdbGetCurrToolParam( MCH_TP.DIST) end + if EMT.TDIST and abs( EMT.TDIST) < 0.1 then EMT.TDIST = nil end + end +end + +--------------------------------------------------------------------- +function OnToolDeselect() +end + +--------------------------------------------------------------------- +function OnMachiningStart() + --EMT.MCHLIBNAME = EgtGetMachiningParam( MCH_MP.NAME) + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam(MCH_MP.TYPE) + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true + -- primo posizionamento sempre in globale + EMT.REFLOC = nil + EMT.IPLGL = false +end + +--------------------------------------------------------------------- +function OnMachiningEnd() + EMT.PREVTOOL = EMT.TOOL +end + +--------------------------------------------------------------------- +function OnPathStart() + -- reset valori precedenti (per forzare emissione di tutti gli assi del 1° movimento) + EmtResetPrev() +end + +--------------------------------------------------------------------- +function OnPathEnd() + if not EMT.ZMAX then + EmtOutput( 'G133'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + end +end + +--------------------------------------------------------------------- +function OnRapid() + -- se primo movimento della lavorazione, gestione speciale + if EMT.MCHFIRST and not EMT.OPEISDISP then + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EmtOutput( '( *** '..EMT.MCHNAME..'/'..EMT.TOOL..' *** )') + EmitCount() + -- se lavorazione con sega a catena + if EMT.HEAD == 'H3' then + -- se prima lavorazione sui fianchi con sega a catena + if EMT.CSAWFIRST and string.sub( EMT.MCHNAME, 1, 5) == 'Csaw_' then + EMT.CSAWFIRST = false + -- pausa per rimozione sfridi + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + EmtOutput( 'G134 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF()) + -- pre-posizionamento + EmitCount() + EmtResetPrev() + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = GetEF() + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( ( EMT.TDIST or ChSawLen), 3) + local sER = ' ER' .. EmtLenToString( EMT.TLEN, 3) + local sOut = 'G131' .. EmtGetAxis( 'L3') + sOut = sOut .. sET .. sEU .. sEE .. sEF .. sEM .. sES .. sEL .. sER + EmtOutput( sOut) + end + -- altrimenti verifico se necessaria pausa + else + if EMT.SCRAPFIRST and EgtExistsInfo( EMT.MCHID, 'MOVE_AFTER') then + EMT.SCRAPFIRST = false + -- pausa per rimozione sfridi + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + EmtOutput( 'G134 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF()) + end + end + -- primo posizionamento + EmtResetPrev() + local sOut = 'G131' .. EmtGetAxis( 'L1') .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') .. + EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') + if EMT.HEAD == 'H1' then + sOut = sOut .. ' U' .. EmtLenToString( MinX2, 3) .. ' W0 V90 A0' + elseif EMT.HEAD == 'H2' then + sOut = sOut .. ' U' .. EmtLenToString( MaxX1, 3) .. ' W0 V0 A0' + elseif EMT.HEAD == 'H3' then + sOut = sOut .. ' U' .. EmtLenToString( MinX2, 3) .. ' W0 V90 A0' + else + EmtSetLastError( 1211, "Unknown Head : " .. EMT.HEAD) + end + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = GetEF() + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + sOut = sOut .. sET .. sEU .. sEE .. sEF .. sEM .. sES .. sEL .. sER + EmtOutput( sOut) + EMT.REFLOC = 0 + EMT.MCHFIRST = false + EMT.ZMAX = false + -- se standard + elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then + -- se necessario, impostazione riferimento locale + if EMT.REFLOC == 0 then + -- calcolo per piano generico + CalcInterpPlane() + EMT.REFLOC = 1 + -- trasformo i punti nel piano + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EMT.L1p = nil + EMT.L2p = nil + EMT.L3p = nil + EMT.R1p = nil + EMT.R2p = nil + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = ' EF20000' + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + EmtOutput( 'G132'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EmtGetAxis('R2')..EmtGetAxis('R1')..EMT.IPLGLSTR..sET..sEU..sEE..sEF..sEM..sES..sEL..sER) + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + else + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + end + -- se altrimenti risalita a Z max a fine lavorazione + elseif EMT.FLAG == 3 then + if EMT.REFLOC then + EMT.REFLOC = nil + EMT.IPLGL = false + EmtResetPrev() + -- dichiarazione fine lavorazione + EmtOutput( 'G133'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + local sOut = 'G131' .. EmtGetAxis( 'L3') .. EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. GetET() .. GetEU() .. GetEE() .. GetEF() + EmtOutput( sOut) + EMT.ZMAX = true + end + -- se altrimenti movimento in Home + elseif EMT.FLAG == 4 then + -- non previsto + -- altrimenti errore + else + error( "Unknown Rapid flag") + end + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnLinear() + -- se necessario, impostazione riferimento locale + if EMT.REFLOC == 0 then + -- calcolo per piano generico + CalcInterpPlane() + EMT.REFLOC = 1 + -- salvo posizione attuale + local OldL1 = EMT.L1 + local OldL2 = EMT.L2 + local OldL3 = EMT.L3 + local OldR1p = EMT.R1p + local OldR2p = EMT.R2p + -- imposto posizione precedente + EMT.L1 = EMT.L1o + EMT.L2 = EMT.L2o + EMT.L3 = EMT.L3o + EMT.R1p = nil + EMT.R2p = nil + -- trasformo i punti nel piano + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + local sET = GetET() + local sEU = GetEU() + local sEE = GetEE() + local sEF = ' EF20000' + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TLEN, ( EMT.TDIST or ChSawLen)), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + EmtOutput( 'G132'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EmtGetAxis('R2')..EmtGetAxis('R1')..EMT.IPLGLSTR..sET..sEU..sEE..sEF..sEM..sES..sEL..sER) + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + -- ripristino posizione attuale + EMT.L1 = OldL1 + EMT.L2 = OldL2 + EMT.L3 = OldL3 + EMT.R1p = OldR1p + EMT.R2p = OldR2p + end + + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + -- valori degli assi + local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + -- se nulla da emettere, esco + if string.len( sAxes) == 0 then + return + end + -- aggiungo feed + local sFeed = EmtGetFeed() + -- emetto linea + EmtOutput( "G1"..sAxes..sFeed) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnArc() + -- non modale su archi + local dPrevZ = EMT.L3p + EmtResetPrevLinear() + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + -- valori degli assi + local sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + -- se nulla da emettere, esco + if string.len( sAxes) == 0 then + return + end + -- valori delle coordinate del centro + EmtAdjustCenterAxes() + -- coordinate centro (per ora solo archi nel piano XY) + --local sCen = ' ' .. EMT.C1t .. EmtLenToString(EMT.C1,3) .. + -- ' ' .. EMT.C2t .. EmtLenToString(EMT.C2,3) + -- raggio + local sRad = ' ' .. EMT.RRt .. EmtLenToString(EMT.RR,3) + -- aggiungo feed + local sFeed = EmtGetFeed() + -- tipo arco + local sArc = 'G' .. EgtNumToString(EMT.MOVE,0) + -- se elica, aggiungo il pitch + local sPitch = '' + local dDeltaZ = EMT.L3 - dPrevZ + if abs( dDeltaZ) > GEO.EPS_SMALL then + local dPitch = dDeltaZ * 360.0 / abs( EMT.AC) + sPitch = ' K' .. EmtLenToString( dPitch, 3) + end + -- emetto arco + EmtOutput( sArc..sAxes..sRad..sPitch..sFeed) + + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function MyAdjustLinearAxes() + if EMT.REFLOC then + local vtDelta = V_NULL() + local vtE = V_NULL() + if EMT.HEAD == 'H1' then + local Len = EMT.TLEN + MillOffs + local LenRef = MillOffs + local vtTool = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtTool * Len - Z_AX() * LenRef + elseif EMT.HEAD == 'H2' then + vtDelta = -Vector3d( SawDeltaX, SawDeltaY, SawDeltaZ) + local Len = EMT.TLEN + SawOffs + local LenRef = SawOffs + local vtTool = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtTool * Len - Z_AX() * LenRef + elseif EMT.HEAD == 'H3' then + local Len = ( EMT.TDIST or ChSawLen) + MillOffs + local LenRef = MillOffs + local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtAux * Len - Z_AX() * LenRef + end + EMT.L1 = EMT.L1 - vtDelta:getX() - vtE:getX() + EMT.L2 = EMT.L2 - vtDelta:getY() - vtE:getY() + EMT.L3 = EMT.L3 - vtDelta:getZ() - DeltaTabZ - vtE:getZ() + end + + EmtAdjustLinearAxes() + + if not EMT.REFLOC then + EMT.L1 = - EMT.L1 + EMT.L1t = 'Y' + EMT.L2t = 'X' + else + EMT.L1t = 'X' + EMT.L2t = 'Y' + end +end + +--------------------------------------------------------------------- +function CalcInterpPlane() + -- origine del piano + local xS = EMT.START[1] + local yS = EMT.START[2] + local zS = 0 + local ptS = Point3d( xS, yS, zS) + -- calcolo per piano generico + local vtE + if EMT.HEAD ~= 'H3' then + vtE = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + else + vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + end + EMT.IPLGLFR = Frame3d( ptS, vtE) + --EmtOutput( 'IPLGLFR='..tostring(EMT.IPLGLFR)) + local _, dAngV, dAngO = SphericalFromVector( vtE) + local dAngO2 = EmtGetAngO2( EMT.IPLGLFR:getVersZ(), EMT.IPLGLFR:getVersX(), dAngV, dAngO) + dAngO = dAngO - 90 + while dAngO < 0 do + dAngO = dAngO + 360 + end + -- se rotazione solo attorno alla C allora si mette come rotazione finale + if abs( dAngV) < GEO.EPS_ANG_SMALL then + dAngO2 = dAngO2 + dAngO + while dAngO2 >= 360 do + dAngO2 = dAngO2 - 360 + end + dAngO = 0 + end + + local xOut = yS - DeltaTabY - DimTabY + local yOut = - ( xS - DeltaTabX) + local zOut = zS + if EMT.ORIG == 2 then + xOut = yS - DeltaTabY + yOut = - ( xS - DeltaTabX) + elseif EMT.ORIG == 3 then + xOut = yS - DeltaTabY - DimTabY + yOut = - ( xS - DeltaTabX - DimTabX) + elseif EMT.ORIG == 4 then + xOut = yS - DeltaTabY + yOut = - ( xS - DeltaTabX - DimTabX) + end + EMT.IPLGLSTR = ' EX'..EmtLenToString( xOut)..' EY'..EmtLenToString( yOut)..' EZ'..EmtLenToString( zOut).. + ' EA0'..' EB'..EgtNumToString( dAngV)..' EC'..EgtNumToString( dAngO)..' ED'..EgtNumToString( dAngO2) + EMT.IPLGL = true +end + +--------------------------------------------------------------------- +function GetET() + if EMT.HEAD == 'H1' or EMT.HEAD == 'H3' then + return ' ET2' + elseif EMT.HEAD == 'H2' then + return ' ET1' + end +end + +--------------------------------------------------------------------- +function GetEU() + local sEU + if EMT.HEAD == 'H1' then + sEU = ' EU'..string.sub( EMT.TCPOS, 2) + elseif EMT.HEAD == 'H2' then + sEU = ' EU0' + elseif EMT.HEAD == 'H3' then + if abs( EMT.R3 - 0) < 0.1 then + sEU = ' EU41' + elseif abs( EMT.R3 - 90) < 0.1 then + sEU = ' EU40' + else + EmtSetLastError( 1210, 'Chain saw orientation not allowed') + end + else + sEU = '' + end + return sEU +end + +--------------------------------------------------------------------- +function GetEE() + return ' EE' .. EgtNumToString( EMT.ORIG, 0) +end + +--------------------------------------------------------------------- +function GetEF() + return ' EF60000' +end + +--------------------------------------------------------------------- +function EmitCount() + EMT.CNT = EMT.CNT + 1 + EmtOutput( 'N'..tostring( EMT.CNT)..' E80000='..tostring( EMT.CNT)) +end + +--------------------------------------------------------------------- +-- *** END GENERATION *** +--------------------------------------------------------------------- diff --git a/Essetre-WALL.mlpe b/Essetre-WALL.mlpe new file mode 100644 index 0000000..f042bd5 --- /dev/null +++ b/Essetre-WALL.mlpe @@ -0,0 +1,925 @@ +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2021/06/18 +-- Funzioni generiche indipendenti dal controllo + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +local sBaseDir = EgtGetCurrMachineDir() +if NumericalControl == 'NUM' then + dofile( sBaseDir .. '\\Essetre-WALL.NUM.mlpe') +elseif NumericalControl == 'TPA' then + error( 'Numerical Control error : TPA not yet managed') + --dofile( sBaseDir .. 'Essetre-WALL.TPA.mlpe') +else + error( 'Numerical Control error : unkwnown type') +end + +--------------------------------------------------------------------- +-- *** SIMULATION *** +--------------------------------------------------------------------- +local SIM_LIN_STEP = 100 +local SIM_ROT_STEP = 30 +local COLL_SAFE_DIST = 2 + +--------------------------------------------------------------------- +function OnSimulStart() + -- Carico gli utensili sulle barre portautensili + local vTcPos = EgtGetAllTcPosNames() + if vTcPos then + for i = 1, #vTcPos do + local vTools = EgtGetToolsInCurrSetupPos( vTcPos[i]) + if vTools and vTools[1] then + EgtLoadTool( vTcPos[i], 1, vTools[1]) + ShowToolInTcPos( vTcPos[i], true) + end + end + end + -- Se reset o home, esco + if EMT.SIM1ST then return end + -- Non effettuate lavorazioni con sega a catena sul fianco + EMT.CSAWFIRST = true + -- Non effettuata pausa per rimozione sfridi + EMT.SCRAPFIRST = true + -- Creo o svuoto gruppo per copia finale degli oggetti virtual milling + local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') + if nVmGrpId then + EgtSetStatus( nVmGrpId, GDB_ST.ON) + EgtEmptyGroup( nVmGrpId) + else + nVmGrpId = EgtGroup( GDB_ID.ROOT) + EgtSetName( nVmGrpId, 'VMill') + EgtSetLevel( nVmGrpId, GDB_LV.TEMP) + end + -- Preparo lista oggetti da verificare per collisioni + EMT.COLLOBJ = {} + AddToCollisionCheck( 'B1', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'C1', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'B2', 'COLLISION', EMT.COLLOBJ) + AddToCollisionCheck( 'C2', 'COLLISION', EMT.COLLOBJ) + DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4) + -- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill) + EMT.MCODET = {} + EMT.MCODET[1] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetTableId( 'Tab'), 'COLLISION'), 'STM') + EMT.MCODET[2] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'TRAV') + EMT.MCODET[3] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'COL1') + EMT.MCODET[4] = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( EgtGetBaseId( 'Base'), 'COLLISION'), 'COL2') + -- Preparo lista collisioni vuota + EMT.COLLIDE = {} +end + +--------------------------------------------------------------------- +function OnSimulEnd() + if EMT.SCRAPFIRST then + EMT.SCRAPFIRST = false + ExecScrapRemove() + end + ExecUnloading() +end + +--------------------------------------------------------------------- +--function OnSimulDispositionStarting() +--end + +--------------------------------------------------------------------- +function OnSimulDispositionStart() + + EMT.OPEISDISP = true + + -- Se prima disposizione (dovrebbe essere l'unica) + if EMT.PHASE == 1 then + -- Determino dimensioni del grezzo + local nSolId = EgtGetFirstNameInGroup( EgtGetFirstRawPart() or GDB_ID.NULL, 'RawSolid') or GDB_ID.NULL + local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD) + EMT.LB = 0 + EMT.SB = 0 + EMT.HB = 0 + if b3Sol then + EMT.LB = b3Sol:getDimX() + EMT.SB = b3Sol:getDimY() + EMT.HB = b3Sol:getDimZ() + end + -- Carico primo utensile sulla testa 1 + local sTool = FindFirstToolOnHead( 'H1') + if sTool then + EMT.TOOL_1 = sTool + EgtLoadTool( 'H1', 1, EMT.TOOL_1) + EMT.TCPOS_1 = GetToolTcPos( EMT.TOOL_1) + ShowToolInTcPos( EMT.TCPOS_1, false) + else + EgtUnloadTool( 'H1', 1) + end + -- Imposto la corretta posizione Home della Testa 1 (dipende se attivo utensile o sega a catena) + local nH1Mod = EgtGetMode( EgtGetHeadId( 'H1')) + if nH1Mod == GDB_MD.STD then + EgtSetAxisPos( 'X1', MaxX1) + EgtSetAxisPos( 'Z1', MaxZ1) + else + EgtSetAxisPos( 'X1', ParkChSawX1) + EgtSetAxisPos( 'Z1', ParkChSawZ1) + end + end + + -- Nascondo tutte le lavorazioni + local nMchId = EgtGetFirstOperation() + while nMchId do + if EgtGetOperationType( nMchId) ~= MCH_OY.DISP then + EgtSetOperationStatus( nMchId, false) + end + nMchId = EgtGetNextOperation( nMchId) + end + + -- dati del grezzo e suo aggancio alla tavola + EMT.RAWID = EgtGetFirstRawPart() + local b3Raw = EgtGetRawPartBBox( EMT.RAWID or GDB_ID.NULL) + EmtLinkRawPartToGroup( EMT.RAWID, 'Tab') + + -- Se abilitato e trovato grezzo, creazione Zmap + if EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') and EMT.RAWID then + -- Se vero inizio, creo Zmap + if not EMT.SIM1ST then + -- elimino eventuale vecchio Zmap + EgtErase( EgtGetFirstNameInGroup( EMT.RAWID, 'VMill') or GDB_ID.NULL) + -- recupero il solido + local nSolId = EgtGetFirstNameInGroup( EMT.RAWID, 'RawSolid') + -- determino la risoluzione dello Zmap + local b3Sol = EgtGetBBoxGlob( nSolId, GDB_BB.STANDARD) + local dArea = b3Sol:getDimX() * b3Sol:getDimY() + b3Sol:getDimX() * b3Sol:getDimZ() + b3Sol:getDimY() * b3Sol:getDimZ() + local dTol = 6.13 + if dArea < CoeffVM * 6.0e6 then + dTol = 2.81 + elseif dArea < CoeffVM * 12.0e6 then + dTol = 3.77 + elseif dArea < CoeffVM * 24.0e6 then + dTol = 5.03 + end + -- creo lo Zmap + EMT.VMILL = EgtVolZmapBox( EMT.RAWID, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB) + if EMT.VMILL then + EgtSetName( EMT.VMILL, 'VMill') + EgtSetLevel( EMT.VMILL, GDB_LV.TEMP) + EgtSetColor( EMT.VMILL, EgtGetColor( nSolId), false) + -- nascondo le altre geometrie + local nId = EgtGetFirstInGroup( EMT.RAWID) + while nId do + if nId ~= EMT.VMILL then + EgtSetStatus( nId, GDB_ST.OFF) + end + nId = EgtGetNext( nId) + end + EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF) + -- imposto eventuale utensile corrente + SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL) + end + end + end + -- se vero inizio, assegno solidi per verifica collisione + if not EMT.SIM1ST then + EMT.CODET = {} + for i = 1, #EMT.MCODET do + EMT.CODET[i] = EMT.MCODET[i] + end + if EMT.VMILL then + table.insert( EMT.CODET, EMT.VMILL) + end + end +end + +--------------------------------------------------------------------- +function OnSimulDispositionEnd() + if EMT.UNLOADING or EMT.FALL then + EMT.UNLOADING = false + EMT.FALL = false + end + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnSimulToolSelect() + -- se utensile non definito, è disposizione ed esco + if EMT.TOOL == '' then return end + -- recupero dati utensile + EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + -- se lama su sua testa, verifico che l'altra sia dalla parte opposta + if EMT.HEAD == 'H2' then + EgtSetAxisPos( 'X1', MaxX1) + -- altrimenti carico utensile + else + -- se sega a catena, imposto subito angolo scelto per asse virtuale A + if EMT.HEAD == 'H3' then + -- recupero la lavorazione successiva + local NextMchId + if EMT.MCHID then + NextMchId = EgtGetNextActiveOperation( EMT.MCHID) + else + NextMchId = EgtGetFirstActiveOperation() + end + if EgtGetOperationType( NextMchId) == MCH_OY.DISP then + NextMchId = EgtGetNextActiveOperation( NextMchId) + end + EgtSetCurrMachining( NextMchId) + -- leggo e imposto il valore di A1 + local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) + local dPosA = EgtGetVal( sVal, 'A1', 'd') or 0 + EmtModifyAxisHome( 'A1', dPosA) + EgtResetAxisPos( 'A1') + EmtModifyAxisHome( 'C1', -dPosA) + EgtResetAxisPos( 'C1') + EgtSetAxisPos( 'X1', ParkChSawX1) + EgtSetAxisPos( 'Z1', ParkChSawZ1) + end + -- breve pausa + EgtPause( 100) + EgtOutText( '') + EMT.TOOL_1 = EMT.TOOL + EMT.TCPOS_1 = EMT.TCPOS + -- lo nascondo sul portautensili + ShowToolInTcPos( EMT.TCPOS, false) + end + -- se attivo Vmill + SetToolForVmill( EMT.TOOL, EMT.HEAD, EMT.EXIT, EMT.VMILL) + -- se attivo Collision Check + EMT.SAFEDIST = COLL_SAFE_DIST + if EMT.COLLOBJ then + AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, 1001) + AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, 1002) + for i, Coll in ipairs( EMT.COLLOBJ) do + EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3) + end + end +end + +--------------------------------------------------------------------- +function OnSimulToolDeselect() + -- porto la testa in home + if EMT.HEAD == 'H2' then + SimulMoveAxes( 'X2', MinX2, SIM_LIN_STEP, 'C2', EgtGetAxisHomePos( 'C2'), SIM_ROT_STEP, 'B2', EgtGetAxisHomePos( 'B2'), SIM_ROT_STEP) + elseif EMT.NEXTHEAD == 'H2' then + SimulMoveAxes( 'X1', MaxX1, SIM_LIN_STEP, 'C1', EgtGetAxisHomePos( 'C1'), SIM_ROT_STEP, 'B1', EgtGetAxisHomePos( 'B1'), SIM_ROT_STEP) + end + -- deposito utensile se non lama su sua testa + if EMT.NEXTHEAD ~= 'H2' then + if EMT.NEXTTOOL ~= EMT.TOOL_1 then + EgtOutText( 'Tool change in progress...') + -- simulo movimento + SimulMoveAxes( 'B1', 0, SIM_ROT_STEP, 'C1', 0, SIM_ROT_STEP) + SimulMoveAxis( 'X1', MinX1, SIM_LIN_STEP) + -- breve pausa + EgtPause( 100) + ShowToolInTcPos( EMT.TCPOS_1, true) + -- se segue sega a catena + if EMT.NEXTHEAD == 'H3' then + -- nascondo l'utensile corrente + EgtSetStatus( EgtGetHeadId( 'H1'), GDB_ST.OFF) + -- eseguo movimenti opportuni + SimulMoveAxis( 'X1', ParkChSawX1, SIM_LIN_STEP) + SimulMoveAxis( 'Z1', ParkChSawZ1, SIM_LIN_STEP) + end + else + EMT.TOOL_1 = nil + EMT.TCPOS_1 = nil + end + end +end + +--------------------------------------------------------------------- +function OnSimulMachiningStart() + -- recupero alcuni dati della lavorazione + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + local sNotes = EgtGetMachiningParam( MCH_MP.USERNOTES) + EMT.VMRS = false + -- recupero CUTID e TASKID della feature lavorata + local vId = EgtGetMachiningGeometry() + if vId and #vId > 0 and #vId[1] > 0 then + local nPartId = EgtGetParent( EgtGetParent( vId[1][1]) or GDB_ID.NULL) + EMT.CUTID = EgtGetInfo( nPartId or GDB_ID.NULL, 'CUTID', 'i') or 0 + EMT.TASKID = EgtGetInfo( vId[1][1], 'TASKID', 'i') or 0 ; + else + EMT.CUTID = 0 + EMT.TASKID = 0 + end + -- eventuale pausa per rimozione sfridi + if EMT.SCRAPFIRST then + if ( EMT.HEAD == 'H3' and string.sub( EMT.MCHNAME, 1, 5) == 'Csaw_') or EgtExistsInfo( EMT.MCHID, 'MOVE_AFTER') then + EMT.SCRAPFIRST = false + EgtOutText( 'Pause for Scrap Remove') + ParkForScrapRemove() + ExecScrapRemove() + EgtPause( 500) + EgtOutText( '') + end + end + -- non ancora iniziata la lavorazione + EMT.MCHFIRST = true +end + +--------------------------------------------------------------------- +function OnSimulMachiningEnd() + if EMT.UNLOADING or EMT.FALL then + EMT.UNLOADING = false + EMT.FALL = false + end +end + +--------------------------------------------------------------------- +--function OnSimulPathStart() +--end + +--------------------------------------------------------------------- +function OnSimulPathEnd() + -- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi + if EMT.VMILL and not EMT.OPEISDISP and EMT.VMRS then + EgtOutLog( 'OnSimulPathEnd', 5) + local nPart = EgtVolZmapPartCount( EMT.VMILL) + if nPart > 1 then + -- ricerca del pezzo con massimo volume + local nPartMax = 0 + local dVolMax = 0 + for i = 1, nPart do + local dVol = EgtVolZmapPartVolume( EMT.VMILL, i - 1) + if dVol > dVolMax then + dVolMax = dVol + nPartMax = i + end + end + -- eliminazione di tutti i pezzi piccoli + for i = nPart, 1, -1 do + if i ~= nPartMax then + local b3Vmill = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD) + if b3Vmill:getDimX() < 1200 then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + end + end + end + -- aggiorno visualizzazione + EgtDraw() + end + end +end + +--------------------------------------------------------------------- +function OnSimulPathStartAux() + --EgtOutLog( 'OnSimulPathStartAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + EgtOutLog( 'OnSimulPathStartAux', 5) + -- eseguo il comando + --ExecAuxCmd( EMT.AUX) +end + +--------------------------------------------------------------------- +function OnSimulPathEndAux() + --EgtOutLog( 'OnSimulPathEndAux - ' .. EgtNumToString( EMT.AUXIND, 0) .. ' - ' .. EMT.AUX) + EgtOutLog( 'OnSimulPathEndAux', 5) + -- eseguo il comando + --ExecAuxCmd( EMT.AUX) +end + +--------------------------------------------------------------------- +function OnSimulMoveStart() +end + +--------------------------------------------------------------------- +function OnSimulMoveEnd() +end + +--------------------------------------------------------------------- +function OnSimulCollision() + -- se prima collisione della lavorazione, la segnalo + if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then + local Class = '' + if EMT.SIMCOBIND == 1001 then + Class = 'T_H1' + elseif EMT.SIMCOBIND == 1002 then + Class = 'TH_H1' + else + Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl + end + table.insert( EMT.COLLIDE, { Mc = EMT.MCHNAME, Cl = Class, Vm = EMT.SIMVMID}) + EMT.LAST_MCHNAME_COLLIDE = EMT.MCHNAME + EMT.ERR = 1 + local sErr = 'CUTID='..tostring( EMT.CUTID)..'; TASKID='..tostring( EMT.TASKID)..'; Mach='..EMT.MCHNAME..'; Class='..Class..'; VMill='..EMT.SIMVMID + EmtSetLastError( 1221, sErr, true) + EgtOutLog( 'Collision : ' .. sErr, 1) + end +end + +--------------------------------------------------------------------- +function ParkForScrapRemove() + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + SimulMoveAxis( 'Z1', EgtGetAxisHomePos( 'Z1'), SIM_LIN_STEP) + SimulMoveAxis( 'Y', ParkY, SIM_LIN_STEP) +end + +--------------------------------------------------------------------- +function ExecScrapRemove() + if EMT.VMILL then + local nPart = EgtVolZmapPartCount( EMT.VMILL) + if nPart > 1 then + -- recupero i box dei pezzi + local vPrtBox = {} + local nPartId = EgtGetFirstPartInRawPart( EMT.RAWID) + while nPartId do + local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) + table.insert( vPrtBox, b3Part) + nPartId = EgtGetNextPartInRawPart( nPartId) + end + -- tengo solo le parti del Vmill che contengono almeno un box di un pezzo + for i = nPart, 1, -1 do + -- recupero il box della parte + local b3VmPart = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD) + -- lo ingrandisco per sicurezza + b3VmPart:expand( 100) + -- verifiche per parte da eliminare + local bToRemove = true + -- se box abbastanza grande, allora da verificare + local dVol = b3VmPart:getDimX() * b3VmPart:getDimY() * b3VmPart:getDimZ() + if dVol > 1e6 then + for j = 1, #vPrtBox do + local b3Part = vPrtBox[j] + if EnclosesXY( b3VmPart, b3Part) then + bToRemove = false + break + end + end + end + -- se richiesta eliminazione, la eseguo + if bToRemove then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + end + end + -- se sono rimaste più parti del numero di pezzi, devo fare ulteriori verifiche + local nRest = EgtVolZmapPartCount( EMT.VMILL) + if nRest > #vPrtBox then + -- recupero tutti i box delle parti + local vVmpBox = {} + for i = 1, nRest do + local b3VmPart = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD) + table.insert( vVmpBox, b3VmPart) + end + -- + local vVmpFlag = {} + for i = 1, #vPrtBox do + local b3Part = vPrtBox[i] + local nVmp + local dErr = 400 + for j = 1, nRest do + local b3VmPart = vVmpBox[j] + local dCurrErr = ( b3Part:getCenter() - b3VmPart:getCenter()):len() + + abs( b3Part:getDimX() - b3VmPart:getDimX()) + + abs( b3Part:getDimY() - b3VmPart:getDimY()) + + abs( b3Part:getDimZ() - b3VmPart:getDimZ()) + if dCurrErr < dErr then + nVmp = j + dErr = dCurrErr + end + end + if nVmp then + vVmpFlag[nVmp] = i + end + end + for i = nRest, 1, -1 do + if not vVmpFlag[i] then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + end + end + end + end + end +end + +--------------------------------------------------------------------- +function ExecUnloading() + if EMT.VMILL then + -- gruppo dei Vmill + local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill') + -- creo un nuovo layer e vi inserisco il nuovo pezzo + local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( EMT.VMILL)) + EgtRelocate( EMT.VMILL, nLayId) + EgtSetLevel( EMT.VMILL, GDB_LV.USER) + -- aggiungo gli spigoli + local nFirstId, nCount = EgtVolZmapGetEdges( EMT.VMILL, nLayId) + if nFirstId then + for nId = nFirstId, nFirstId + nCount - 1 do + EgtSetColor( nId, Color3d( 96, 96, 96)) + end + end + -- rilascio Vmill + EMT.VMILL = nil + -- aggiorno la visualizzazione + EgtDraw() + -- se finito + if EMT.PHASE == EgtGetPhaseCount() then + -- se impostato di salvare i Vmill, lo faccio + local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' + if EgtGetStringFromIni( 'VMill', 'Save', '', sMachIni) == '1' then + local sFile = EgtGetCurrFilePath() + if sFile then + local sDir, sName, sExt = EgtSplitPath( sFile) + if sExt and sExt:lower() == ".nge" then + sName = sName .. '_VM_' .. EgtGetMachGroupName( EgtGetCurrMachGroup()) + EgtSetLevel( nVmGrpId, GDB_LV.USER) + EgtSaveObjToFile( nVmGrpId, sDir .. sName .. '.Nge') + EgtSetLevel( nVmGrpId, GDB_LV.TEMP) + end + end + end + end + end +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)) +end + +--------------------------------------------------------------------- +function GetToolTcPos( sTool) + -- salvo stato iniziale + local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + -- recupero la posizione di cambio utensile dell'utensile indicato + local sTcPos + if EgtTdbSetCurrTool( sTool) then + sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS) + end + -- ripristino stato iniziale + if CurrTool then + EgtTdbSetCurrTool( CurrTool) + else + EgtTdbSetCurrTool( '') + end + -- restituisco risultato + return sTcPos +end + + +--------------------------------------------------------------------- +-- *** ESTIMATION T&L *** +--------------------------------------------------------------------- +local RAPID_X_FEED = 75000 -- mm/min +local RAPID_Y_FEED = 100000 -- mm/min +local RAPID_Z_FEED = 50000 -- mm/min +local RAPID_C_FEED = 15000 -- deg/min +local RAPID_B_FEED = 15000 -- deg/min +local RAPID_MIN_T = 0.1 -- s +local LOAD_T = 2 -- s +local CHAR_ONE_MOVE_T = 1 -- s +local ROTATION_T = 40 -- s +local SPLIT_T = 6 -- s +local UNLOAD_T = 4 -- s +local FALL_T = 2 -- s + +--------------------------------------------------------------------- +function OnEstimStart() + EMT.INCHES = not EgtUiUnitsAreMM() -- unità di misura mm/inches +end + +--------------------------------------------------------------------- +function OnEstimEnd() +end + +--------------------------------------------------------------------- +function OnEstimProgramStart() + -- imposto inizio movimenti da Home + EMT.L1 = EgtGetAxisHomePos( 'Y') + EMT.L2 = EgtGetAxisHomePos( 'X1') + EMT.L3 = EgtGetAxisHomePos( 'Z1') + EMT.R1 = EgtGetAxisHomePos( 'C1') + EMT.R2 = EgtGetAxisHomePos( 'B1') + -- aggiorno valori come precedenti + EmtUpdatePrev() + -- totalizzatori tempi e lunghezze + EMT.TOTCUTLEN = 0 + EMT.TOTCUTTIME = 0 + EMT.TOTEXTLEN = 0 + EMT.TOTEXTTIME = 0 + -- variabile per lunghezza taglio utensili + EMT.TOOLCUTLEN = {} + -- intestazioni + EmtTleStart( EMT.INFO) +end + +--------------------------------------------------------------------- +function OnEstimProgramEnd() + -- stampa dei totali delle lavorazioni + EmtTleAddTotal( EmtSecToHMS( EMT.TOTCUTTIME + EMT.TOTEXTTIME), EmtLenToMF( EMT.TOTCUTLEN)) + -- stampa dei totali degli utensili + for i = 1, #EMT.TOOLCUTLEN do + local TCL = EMT.TOOLCUTLEN[i] + EmtTleAddTool( TCL.Name, EmtLenToMF( TCL.Len)) + end + -- completo il file + local _, _, sExt = EgtSplitPath( EMT.FILE) + EmtTleEnd( sExt:sub( 2)) + -- salvo i dati principali nel progetto + EgtSetInfo( EgtGetCurrMachGroup(), 'Ttot', EgtNumToString( EMT.TOTCUTTIME + EMT.TOTEXTTIME, 0)) + EgtSetInfo( EgtGetCurrMachGroup(), 'Ltot', EgtNumToString( EMT.TOTCUTLEN, 0)) +end + +--------------------------------------------------------------------- +function OnEstimDispositionStart() + -- inizio disposizione + EMT.OPEISDISP = true + -- sulla prima fase dichiaro carico barra + if EMT.PHASE == 1 then + EMT.LOAD = true + else + EMT.LOAD = false + end +end + +--------------------------------------------------------------------- +function OnEstimDispositionEnd() + -- emetto dati in sospeso + if EMT.TLE_NAME then + EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ') + EMT.TLE_NAME = nil + EMT.TLE_TIME = nil + end + -- termine disposizione + EMT.OPEISDISP = false +end + +--------------------------------------------------------------------- +function OnEstimToolSelect() + -- reset indice utensile in tabella lunghezze + EMT.TCLIND = 0 + -- verifico che l'utensile sia definito + if #EMT.TOOL == 0 then return end + -- cerco l'utensile nella tabella + for i = 1, #EMT.TOOLCUTLEN do + if EMT.TOOLCUTLEN[i].Name == EMT.TOOL then + EMT.TCLIND = i + break + end + end + -- se non trovato, lo aggiungo + if EMT.TCLIND == 0 then + table.insert( EMT.TOOLCUTLEN, { Name = EMT.TOOL, Len = 0}) + EMT.TCLIND = #EMT.TOOLCUTLEN + end +end + +--------------------------------------------------------------------- +function OnEstimToolDeselect() +end + +--------------------------------------------------------------------- +function OnEstimMachiningStart() + EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) + EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) + EgtOutLog( 'Mach : ' .. EMT.MCHNAME, 5) + -- reset contatori di lavorazione + EMT.MCHCUTLEN = 0 + EMT.MCHCUTTIME = 0 + EMT.MCHEXTLEN = 0 + EMT.MCHEXTTIME = 0 +end + +--------------------------------------------------------------------- +function OnEstimMachiningEnd() + -- nel caso di foratura devo dimezzare la lunghezza di taglio perchè comprende anche l'uscita + if EMT.MCHTYPE == MCH_MY.DRILLING then + EMT.MCHCUTLEN = EMT.MCHCUTLEN / 2 + end + local sName = EgtGetName( EMT.MCHID) + EmtTleAddMachining( sName, EmtSecToHMS( EMT.MCHCUTTIME + EMT.MCHEXTTIME), EmtLenToMF( EMT.MCHCUTLEN), EMT.TOOL) + -- aggiorno totali e utensili + EMT.TOTCUTLEN = EMT.TOTCUTLEN + EMT.MCHCUTLEN + EMT.TOTCUTTIME = EMT.TOTCUTTIME + EMT.MCHCUTTIME + EMT.TOTEXTLEN = EMT.TOTEXTLEN + EMT.MCHEXTLEN + EMT.TOTEXTTIME = EMT.TOTEXTTIME + EMT.MCHEXTTIME + EMT.TOOLCUTLEN[EMT.TCLIND].Len = EMT.TOOLCUTLEN[EMT.TCLIND].Len + EMT.MCHCUTLEN + -- emetto dati in sospeso + if EMT.TLE_NAME then + EmtTleAddMachining( EMT.TLE_NAME, EmtSecToHMS( EMT.TLE_TIME), ' - ', ' - ') + EMT.TLE_NAME = nil + EMT.TLE_TIME = nil + end +end + +--------------------------------------------------------------------- +function OnEstimPathStart() + EMT.AUXTYPE = nil + EMT.MCHMOVEFIRST = true +end + +--------------------------------------------------------------------- +function OnEstimPathEnd() + EMT.AUXTYPE = nil +end + +--------------------------------------------------------------------- +function OnEstimPathStartAux() + -- se richiesto, preparo il carico barra + if EMT.LOAD then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = LOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Loading', EmtSecToHMS( dTime), ' - ', ' - ') + EMT.LOAD = false + end + -- se altrimenti carico dopo rotazione + elseif EMT.POSTROT then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = ROTATION_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Rotation', EmtSecToHMS( dTime), ' - ', ' - ') + EMT.POSTROT = false + end + -- altrimenti, spostamento carrelli + else + if EMT.AUXTOT > 2 and EMT.AUXIND == EMT.AUXTOT then + local dTime = ( EMT.AUXTOT - 2) * CHAR_ONE_MOVE_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EmtTleAddMachining( 'Charriots move', EmtSecToHMS( dTime), ' - ', ' - ') + end + end +end + +--------------------------------------------------------------------- +function OnEstimPathEndAux() + -- verifico tipo di emissione + if EMT.OPEISDISP then + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + else + EMT.AUXTYPE = 'R' + end + end + else + if not EMT.AUXTYPE then + local Cmd = EgtSplitString( EMT.AUX) + if Cmd[1] == '0' and Cmd[2] == 'Split' then + EMT.AUXTYPE = 'S' + elseif Cmd[1] == '0' and Cmd[2] == 'Unloading' then + EMT.AUXTYPE = 'U' + elseif Cmd[1] == '0' and Cmd[2] == 'Fall' then + EMT.AUXTYPE = 'F' + else + EMT.AUXTYPE = 'P' + end + end + end + -- per lo scarico della rimanenza + if EMT.AUXTYPE == 'R' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = LOAD_T + UNLOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Remnant unloading' + EMT.TLE_TIME = dTime + end + -- per lo split + elseif EMT.AUXTYPE == 'S' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = SPLIT_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Splitting' + EMT.TLE_TIME = dTime + end + -- per lo scarico + elseif EMT.AUXTYPE == 'U' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = UNLOAD_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Unloading' + EMT.TLE_TIME = dTime + end + -- per lo scarico a caduta + elseif EMT.AUXTYPE == 'F' then + if EMT.AUXIND == EMT.AUXTOT then + local dTime = FALL_T + EMT.TOTEXTTIME = EMT.TOTEXTTIME + dTime + EMT.TLE_NAME = 'Fall' + EMT.TLE_TIME = dTime + end + -- per la pre-rotazione + elseif EMT.AUXTYPE == 'P' then + ; -- calcolato come parte della rotazione + end +end + +--------------------------------------------------------------------- +function OnEstimRapid() + -- dati movimento + local dL1 = EMT.L1 - ( EMT.L1p or 0) + local dL2 = EMT.L2 - ( EMT.L2p or 0) + local dL3 = EMT.L3 - ( EMT.L3p or 0) + local dR1 = 0 + if EMT.R1 and EMT.R1p then dR1 = EMT.R1 - EMT.R1p end + local dR2 = 0 + if EMT.R2 and EMT.R2p then dR2 = EMT.R2 - EMT.R2p end + -- se primo posizionamento della lavorazione il movimento di L1 è già conteggiato in quello dei carrelli + if EMT.MCHMOVEFIRST then + EMT.MCHMOVEFIRST = false + dL1 = 0 + end + -- calcolo lunghezza + local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) + EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen + -- calcolo tempo + local dTime = RAPID_MIN_T + local dT1 = abs( dL1) / RAPID_X_FEED * 60 + if dT1 > dTime then dTime = dT1 end + local dT2 = abs( dL2) / RAPID_Y_FEED * 60 + if dT2 > dTime then dTime = dT2 end + local dT3 = abs( dL3) / RAPID_Z_FEED * 60 + if dT3 > dTime then dTime = dT3 end + local dT4 = abs( dR1) / RAPID_C_FEED * 60 + if dT4 > dTime then dTime = dT4 end + local dT5 = abs( dR2) / RAPID_B_FEED * 60 + if dT5 > dTime then dTime = dT5 end + EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime + EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnEstimLinear() + -- dati movimento + local dL1 = EMT.L1 - EMT.L1p + local dL2 = EMT.L2 - EMT.L2p + local dL3 = EMT.L3 - EMT.L3p + -- calcolo lunghezza + local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3) + EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen + -- calcolo tempo + local dTime = dLen / EMT.F * 60 + EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime + EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnEstimArc() + -- dati movimento + local dLxy = EMT.RR * abs( EMT.AC) * pi / 180 + local dLz = abs( ( Point3d( EMT.L1, EMT.L2, EMT.L3) - Point3d( EMT.L1p, EMT.L2p, EMT.L3p)) * Vector3d( EMT.EXTR)) + -- calcolo lunghezza + local dLen = sqrt( dLxy * dLxy + dLz * dLz) + EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen + -- calcolo tempo + local dTime = dLen / EMT.F * 60 + EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime + EgtOutLog( string.format( ' G2 Len=%.0f Time=%.2f', dLen, dTime), 5) + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +-- *** GENERAL *** +--------------------------------------------------------------------- +function FindFirstToolOnHead( sH1) + -- salvo stato iniziale + local CurrMachId = EgtGetCurrMachining() + local CurrTool = EgtTdbGetCurrToolParam( MCH_TP.NAME) + -- cerco lavorazione con utensile su testa indicata + local sTool, nTlen + local OpId = EgtGetFirstActiveOperation() + while OpId do + local nType = EgtGetOperationType( OpId) + if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then + if EgtSetCurrMachining( OpId) then + local sTest = EgtGetMachiningParam( MCH_MP.TOOL) + if EgtTdbSetCurrTool( sTest) then + local sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + if sHead and ( sHead == sH1) then + sTool = sTest + nTlen = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + break + end + end + end + end + OpId = EgtGetNextActiveOperation( OpId) + end + -- ripristino stato iniziale + if CurrMachId then + EgtSetCurrMachining( CurrMachId) + else + EgtResetCurrMachining() + end + if CurrTool then + EgtTdbSetCurrTool( CurrTool) + else + EgtTdbSetCurrTool( '') + end + -- restituisco risultato + return sTool, nTlen +end + +--------------------------------------------------------------------- +-- *** END GENERAL *** +--------------------------------------------------------------------- diff --git a/Essetre-WALL.mlse b/Essetre-WALL.mlse new file mode 100644 index 0000000..b5f88db --- /dev/null +++ b/Essetre-WALL.mlse @@ -0,0 +1,63 @@ +-- Special Operations macchina Essetre-WALL by EgalTech s.r.l. 2020/11/16 + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + +EgtOutLog ( '** Essetre-WALL.mlse '..PP_VER..' **', 1) + +--------------------------------------------------------------------- +function OnSpecialMoveZup() + + -- Inizializzazioni + EMC.MODIF = false + EMC.ERR = 1 + + -- Se fresa + if EMC.HEAD == 'H1' then + if EMC.L3 > -300 then + EMC.R1 = EgtGetAxisHomePos( 'C1') + EMC.R2 = EgtGetAxisHomePos( 'B1') + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2) + EMC.MODIF = true + end + -- se altrimenti sega a catena + elseif EMC.HEAD == 'H3' then + -- disabilito + do EMC.ERR = 0 return end + local L3New = EMC.L3 + local R1New = EMC.R1 + local R2New = EMC.R2 + if EMC.L3 > -300 then + L3New = min( EMC.L3, -250) + R1New = EgtGetAxisHomePos( 'C1') + R2New = EgtGetAxisHomePos( 'B1') + EMC.MODIF = true + end + if EMC.L2 > -1200 then + R1New = 180 + EMC.MODIF = true + elseif EMC.L2 < -4700 then + R1New = 0 + EMC.MODIF = true + end + if EMC.MODIF then + EMC.L3 = L3New + EMC.R1 = R1New + EMC.R2 = R2New + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2, EMC.R3) + end + -- se altrimenti lama + elseif EMC.HEAD == 'H2' then + if EMC.L3 > -200 then + EMC.R1 = EgtGetAxisHomePos( 'C2') + EMC.R2 = EgtGetAxisHomePos( 'B2') + EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2) + EMC.MODIF = true + end + -- altrimenti errore + else + error( "Unknown Head") + end + EMC.ERR = 0 +end diff --git a/Machinings/Machinings.data b/Machinings/Machinings.data new file mode 100644 index 0000000..57a9cd0 Binary files /dev/null and b/Machinings/Machinings.data differ diff --git a/Machinings/Machinings.data.bak b/Machinings/Machinings.data.bak new file mode 100644 index 0000000..0d5875f Binary files /dev/null and b/Machinings/Machinings.data.bak differ diff --git a/Scripts/ExitMach.lua b/Scripts/ExitMach.lua new file mode 100644 index 0000000..18f86ad --- /dev/null +++ b/Scripts/ExitMach.lua @@ -0,0 +1,36 @@ +-- 2018/11/21 17:30:00 +-- Machining Exit for Essetre-FAST machine + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-------------------------------------------------------------------------------- +-- *** Uscita da Lavorazioni *** + +-- Nascondo il pezzo così marcato e le geometrie aggiunte, visualizzo il Box +local function ProcessPart( PartId) + -- visualizzo il Box + EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.ON) +end + +-- Disabilito segnalazione modifica progetto +local bEnMod = EgtGetEnableModified() +EgtDisableModified() + +-- Processo i pezzi nella radice (già chiusi tutti i gruppi di lavoro) +local PartId = EgtGetFirstPart() +while PartId do + ProcessPart( PartId) + PartId = EgtGetNextPart( PartId) +end + +EgtZoom( SCE_ZM.ALL, false) + +-- Ripristino segnalazione modifica progetto +if bEnMod then + EgtEnableModified() +end + +MACH.ERR = 0 diff --git a/Scripts/InitMach.lua b/Scripts/InitMach.lua new file mode 100644 index 0000000..6ac761b --- /dev/null +++ b/Scripts/InitMach.lua @@ -0,0 +1,44 @@ +-- 2018/11/21 16:30:00 +-- Machining Init for Essetre-FAST machine + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-------------------------------------------------------------------------------- +-- *** Ingresso in Lavorazioni *** + +-- Rendo visibile il pezzo e le geometrie aggiunte, nascondo il Box +local function ProcessPart( PartId) + -- nascondo il Box + EgtSetStatus( EgtGetFirstNameInGroup( PartId, 'Box') or GDB_ID.NULL, GDB_ST.OFF) +end + +-- Disabilito segnalazione modifica progetto +local bEnMod = EgtGetEnableModified() +EgtDisableModified() + +-- Processo i pezzi nella radice +local PartId = EgtGetFirstPart() +while PartId do + ProcessPart( PartId) + PartId = EgtGetNextPart( PartId) +end + +-- Processo i pezzi già nei gruppi di lavoro (quando appena lanciata Process) +local GhostId = EgtGetFirstGhostPart() +while GhostId do + local PartId = EgtGetInfo( GhostId, GDB_SI.SOURCE, 'i') + if PartId then + ProcessPart( PartId) + end + GhostId = EgtGetNextGhostPart( GhostId) +end + +-- Ripristino segnalazione modifica progetto +if bEnMod then + EgtEnableModified() +end + +MACH.ERR = 0 diff --git a/Scripts/SetUp.lua b/Scripts/SetUp.lua new file mode 100644 index 0000000..3ef0de3 --- /dev/null +++ b/Scripts/SetUp.lua @@ -0,0 +1,199 @@ +-- 2020/11/13 +-- Gestione attrezzaggio per Essetre-FAST + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +-- Tavola di passaggio valori +local STU = {} +STU.TUUID = "" +STU.TCPOS = "" +STU.HEAD = "" +STU.GROUP = "" +STU.POS = "" +STU.EXIT = 0 +STU.INDEX = 0 +STU.HEAD1 = "" +STU.HEAD2 = "" +STU.ISVALID = false +STU.ERR = 0 +_G.STU = STU + +local INVALIDPOS = "" +local POS = "Pos" + +-- Geom Set +local GS = {} + +-- Configurazione posizioni +local PositionTable={{Pos = "Pos1", TcPos = "T31", Head = "H1", Group = "G1"}, + {Pos = "Pos2", TcPos = "T32", Head = "H1", Group = "G1"}, + {Pos = "Pos3", TcPos = "T33", Head = "H1", Group = "G1"}, + {Pos = "Pos4", TcPos = "T34", Head = "H1", Group = "G1"}, + {Pos = "Pos5", TcPos = "T35", Head = "H1", Group = "G1"}, + {Pos = "Pos6", TcPos = "T36", Head = "H1", Group = "G1"}, + {Pos = "Pos7", TcPos = "T37", Head = "H1", Group = "G1"}, + {Pos = "Pos8", TcPos = "T38", Head = "H1", Group = "G1"}, + {Pos = "Pos9", TcPos = "T39", Head = "H1", Group = "G1"}, + {Pos = "Pos10", TcPos = "T40", Head = "H3", Group = "G1"}, + {Pos = "Pos11", TcPos = "T42", Head = "H2", Group = "G2"}} + +local UsePositionHead = true + +local function IsInGeomSet( ToolHead, PosHead) + for GsIndex = 1, #GS do + local bToolHead = false + local bPosHead = false + for HIndex = 1, #GS[GsIndex] do + if GS[GsIndex][HIndex] == ToolHead then + bToolHead = true + elseif GS[GsIndex][HIndex] == PosHead then + bPosHead = true + end + if bToolHead and bPosHead then + return true + end + end + if bToolHead and bPosHead then + return true + end + end + return false +end + +function STU.IsCompatibleHeads() + STU.ISVALID = false + if IsInGeomSet(STU.HEAD1, STU.HEAD2) then + STU.ISVALID = true + else + STU.ISVALID = false + end +end + +function STU.GetValidHeadExitForPos() + -- se TUUID non valido restituisco errore + local ToolName = EgtTdbGetToolFromUUID( STU.TUUID) + if ToolName == nill then + STU.ERR = 1 + return + end + EgtTdbSetCurrTool( ToolName) + local CurrToolHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) + STU.EXIT = EgtTdbGetCurrToolParam( MCH_TP.EXIT) + -- recupero testa predefinita per la posizione corrente + local CurrPosHead + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + CurrPosHead = PositionTable[i].Head + break + end + end + -- verifico se la testa è quella della posizione predefinita + if CurrPosHead == CurrToolHead then + STU.HEAD = CurrToolHead + STU.ERR = 0 + return + -- verifico se la testa è compatibile con quella della posizione predefinita + elseif IsInGeomSet( CurrToolHead, CurrPosHead) then + if UsePositionHead then + STU.HEAD = CurrPosHead + STU.ERR = 0 + return + else + STU.HEAD = CurrToolHead + STU.ERR = 0 + return + end + -- la testa non è compatibile con quella della posizione predefinita + else + STU.HEAD = INVALIDPOS + STU.ERR = 0 + return + end +end + +function STU.IsValidTcPosFromHead() + STU.ISVALID = false + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + if PositionTable[i].Head == STU.HEAD then + STU.ISVALID = true + STU.ERR = 0 + return + elseif IsInGeomSet(PositionTable[i].Head, STU.HEAD) then + STU.ISVALID = true + STU.ERR = 0 + return + end + STU.ISVALID = false + STU.ERR = 0 + return + end + end +end + +function STU.GetTcPosHeadGroupFromPos() + for i = 1, #PositionTable do + if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then + STU.TCPOS = PositionTable[i].TcPos + STU.HEAD = PositionTable[i].Head + STU.GROUP = PositionTable[i].Group + STU.ERR = 0 + return + end + end + STU.TCPOS = INVALIDPOS + STU.HEAD = INVALIDPOS + STU.GROUP = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetPosFromTcPos() + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + STU.POS = PositionTable[i].Pos + STU.ERR = 0 + return + end + end + STU.POS = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetGroupFromTcPos() + for i = 1, #PositionTable do + if PositionTable[i].TcPos == STU.TCPOS then + STU.GROUP = PositionTable[i].Group + STU.ERR = 0 + return + end + end + STU.GROUP = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetHeadFromPos() + for i = 1, #PositionTable do + if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then + STU.HEAD = PositionTable[i].Head + STU.ERR = 0 + return + end + end + STU.HEAD = INVALIDPOS + STU.ERR = 1 +end + +function STU.GetTcPosFromPos() + for i = 1, #PositionTable do + if PositionTable[i].Pos == (POS .. tostring(STU.INDEX)) then + STU.TCPOS = PositionTable[i].TcPos + STU.ERR = 0 + return + end + end + STU.TCPOS = INVALIDPOS + STU.ERR = 1 +end diff --git a/SetUp/SetupImage.qqq.PNG b/SetUp/SetupImage.qqq.PNG new file mode 100644 index 0000000..a8d5b53 Binary files /dev/null and b/SetUp/SetupImage.qqq.PNG differ diff --git a/SetUp/Standard.stu b/SetUp/Standard.stu new file mode 100644 index 0000000..75331bf --- /dev/null +++ b/SetUp/Standard.stu @@ -0,0 +1,13 @@ +; Commento per evitare BOM con UTF-8 +[General] +Pos1=T31 +Pos2=T32 +Pos3=T33;H1;1/0A54F32E-C48D-45DB-8502-953CA94FD7A0/Fresa25x130 +Pos4=T34 +Pos5=T35;H1;1/95E39B11-BC2D-4170-A2BE-257C85176172/FresaTavolette56 +Pos6=T36 +Pos7=T37 +Pos8=T38 +Pos9=T39 +Pos10=T40;H3;1/A6CFDA65-DABB-441E-990A-776B5C24C2E4/ChainSaw +Pos11=T42;H2;1/FEEC2087-67CF-4840-AC67-D8C31EAB59BA/Lama_800 diff --git a/THolders/ChainSaw.nge b/THolders/ChainSaw.nge new file mode 100644 index 0000000..d29af27 Binary files /dev/null and b/THolders/ChainSaw.nge differ diff --git a/THolders/MillNoTip.nge b/THolders/MillNoTip.nge new file mode 100644 index 0000000..5b2fe8a Binary files /dev/null and b/THolders/MillNoTip.nge differ diff --git a/THolders/Saw.nge b/THolders/Saw.nge new file mode 100644 index 0000000..05161e2 Binary files /dev/null and b/THolders/Saw.nge differ diff --git a/THolders/Standard.nge b/THolders/Standard.nge new file mode 100644 index 0000000..23ee6c6 Binary files /dev/null and b/THolders/Standard.nge differ diff --git a/THolders/Standard_78.nge b/THolders/Standard_78.nge new file mode 100644 index 0000000..bb1e695 Binary files /dev/null and b/THolders/Standard_78.nge differ diff --git a/THolders/Standard_LC.nge b/THolders/Standard_LC.nge new file mode 100644 index 0000000..7d2b4c3 Binary files /dev/null and b/THolders/Standard_LC.nge differ diff --git a/Tools/0A54F32E-C48D-45DB-8502-953CA94FD7A0.nge b/Tools/0A54F32E-C48D-45DB-8502-953CA94FD7A0.nge new file mode 100644 index 0000000..e77ebe3 Binary files /dev/null and b/Tools/0A54F32E-C48D-45DB-8502-953CA94FD7A0.nge differ diff --git a/Tools/0BF297D4-7974-4A8C-B33D-D7DCC49A8A64.nge b/Tools/0BF297D4-7974-4A8C-B33D-D7DCC49A8A64.nge new file mode 100644 index 0000000..e3bf79f Binary files /dev/null and b/Tools/0BF297D4-7974-4A8C-B33D-D7DCC49A8A64.nge differ diff --git a/Tools/12CCCF7E-6E46-4253-8463-A5063A77D8F6.nge b/Tools/12CCCF7E-6E46-4253-8463-A5063A77D8F6.nge new file mode 100644 index 0000000..4bd4db7 Binary files /dev/null and b/Tools/12CCCF7E-6E46-4253-8463-A5063A77D8F6.nge differ diff --git a/Tools/19731AFF-35E8-4A4D-BEF5-1F077DF5C0FD.nge b/Tools/19731AFF-35E8-4A4D-BEF5-1F077DF5C0FD.nge new file mode 100644 index 0000000..8c8c8ba Binary files /dev/null and b/Tools/19731AFF-35E8-4A4D-BEF5-1F077DF5C0FD.nge differ diff --git a/Tools/8071E2FC-B181-45E9-9EF1-DA7906A95EF2.nge b/Tools/8071E2FC-B181-45E9-9EF1-DA7906A95EF2.nge new file mode 100644 index 0000000..d0bf77e Binary files /dev/null and b/Tools/8071E2FC-B181-45E9-9EF1-DA7906A95EF2.nge differ diff --git a/Tools/80CDA957-82FC-4ECA-ABE0-C412B519E4A7.nge b/Tools/80CDA957-82FC-4ECA-ABE0-C412B519E4A7.nge new file mode 100644 index 0000000..8494247 Binary files /dev/null and b/Tools/80CDA957-82FC-4ECA-ABE0-C412B519E4A7.nge differ diff --git a/Tools/89157C3F-9444-45CE-91B0-391C8AAD8693.nge b/Tools/89157C3F-9444-45CE-91B0-391C8AAD8693.nge new file mode 100644 index 0000000..191bb31 Binary files /dev/null and b/Tools/89157C3F-9444-45CE-91B0-391C8AAD8693.nge differ diff --git a/Tools/93EEE30A-BDB2-44C0-B081-3C1F2E42B338.nge b/Tools/93EEE30A-BDB2-44C0-B081-3C1F2E42B338.nge new file mode 100644 index 0000000..159badf Binary files /dev/null and b/Tools/93EEE30A-BDB2-44C0-B081-3C1F2E42B338.nge differ diff --git a/Tools/95E39B11-BC2D-4170-A2BE-257C85176172.nge b/Tools/95E39B11-BC2D-4170-A2BE-257C85176172.nge new file mode 100644 index 0000000..ed8cf3f Binary files /dev/null and b/Tools/95E39B11-BC2D-4170-A2BE-257C85176172.nge differ diff --git a/Tools/A6CFDA65-DABB-441E-990A-776B5C24C2E4.nge b/Tools/A6CFDA65-DABB-441E-990A-776B5C24C2E4.nge new file mode 100644 index 0000000..8692b4e Binary files /dev/null and b/Tools/A6CFDA65-DABB-441E-990A-776B5C24C2E4.nge differ diff --git a/Tools/E7F6A2BB-1F66-48B9-9561-496231C33403.nge b/Tools/E7F6A2BB-1F66-48B9-9561-496231C33403.nge new file mode 100644 index 0000000..c653ca3 Binary files /dev/null and b/Tools/E7F6A2BB-1F66-48B9-9561-496231C33403.nge differ diff --git a/Tools/FD3F0570-276C-42D0-8489-5D6016FAABF2.nge b/Tools/FD3F0570-276C-42D0-8489-5D6016FAABF2.nge new file mode 100644 index 0000000..5134424 Binary files /dev/null and b/Tools/FD3F0570-276C-42D0-8489-5D6016FAABF2.nge differ diff --git a/Tools/FEEC2087-67CF-4840-AC67-D8C31EAB59BA.nge b/Tools/FEEC2087-67CF-4840-AC67-D8C31EAB59BA.nge new file mode 100644 index 0000000..793c127 Binary files /dev/null and b/Tools/FEEC2087-67CF-4840-AC67-D8C31EAB59BA.nge differ diff --git a/Tools/Tools.data b/Tools/Tools.data new file mode 100644 index 0000000..dba1529 Binary files /dev/null and b/Tools/Tools.data differ diff --git a/Tools/Tools.data.bak b/Tools/Tools.data.bak new file mode 100644 index 0000000..f423668 Binary files /dev/null and b/Tools/Tools.data.bak differ diff --git a/Tools/penna.nge b/Tools/penna.nge new file mode 100644 index 0000000..d66ec80 Binary files /dev/null and b/Tools/penna.nge differ diff --git a/Wall/CutData.lua b/Wall/CutData.lua new file mode 100644 index 0000000..ea5c8c0 --- /dev/null +++ b/Wall/CutData.lua @@ -0,0 +1,10 @@ +-- CutData.lua by Egaltech s.r.l. 19/02/2025 09:28:32 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local CutData = { + { On = true, Name = 'TaglioLama', Type = 'Standard'} +} + +--------------------------------------------------------------------- +return CutData diff --git a/Wall/DrillData.lua b/Wall/DrillData.lua new file mode 100644 index 0000000..d0d95d6 --- /dev/null +++ b/Wall/DrillData.lua @@ -0,0 +1,15 @@ +-- DrillData.lua by Egaltech s.r.l. 17/02/2025 12:06:11 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local DrillData = { + { On = true, Name = 'DrillD12', Type = 'Drill'}, + { On = true, Name = 'DrillD16', Type = 'Drill'}, + { On = true, Name = 'DrillD18', Type = 'Drill'}, + { On = true, Name = 'DrillD20', Type = 'Drill'}, + { On = true, Name = 'DrillD22', Type = 'Drill'}, + { On = true, Name = 'DrillPockD25', Type = 'Pocket'} +} + +--------------------------------------------------------------------- +return DrillData diff --git a/Wall/MachiningTypes.ini b/Wall/MachiningTypes.ini new file mode 100644 index 0000000..84a9b4c --- /dev/null +++ b/Wall/MachiningTypes.ini @@ -0,0 +1,25 @@ +[Cut] +1=Standard + +[Drill] +1=Drill +2=Pocket + +[Milling] +1=FreeContour +2=Side +3=SideGroove +4=DtMortise +5=Mark +6=Text +7=CleanCorner60 +8=CleanCorner30 +9=SideMill + +[Pocketing] +1=Pocket +2=OpenPocket +3=Mortise + +[Sawing] +1=Sawing diff --git a/Wall/MillingData.lua b/Wall/MillingData.lua new file mode 100644 index 0000000..2fe024c --- /dev/null +++ b/Wall/MillingData.lua @@ -0,0 +1,16 @@ +-- MillingData.lua by Egaltech s.r.l. 19/02/2025 15:44:40 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local MillingData = { + { On = true, Name = 'Markieren', Type = 'Text'}, + { On = true, Name = 'Milling200x63', Type = 'Side'}, + { On = true, Name = 'Milling200x63_SideGroove', Type = 'SideMill'}, + { On = true, Name = 'Milling56', Type = 'SideMill'}, + { On = true, Name = 'Milling25x130', Type = 'FreeContour'}, + { On = true, Name = 'Clean60x40', Type = 'CleanCorner60'}, + { On = true, Name = 'Milling200x63_SideGroove', Type = 'SideGroove'} +} + +--------------------------------------------------------------------- +return MillingData diff --git a/Wall/PocketingData.lua b/Wall/PocketingData.lua new file mode 100644 index 0000000..aa43b35 --- /dev/null +++ b/Wall/PocketingData.lua @@ -0,0 +1,14 @@ +-- PocketingData.lua by Egaltech s.r.l. 19/02/2025 14:32:25 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local PocketingData = { + { On = true, Name = 'Svuot200x63', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot56', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot200x63', Type = 'Pocket'}, + { On = true, Name = 'Svuot56', Type = 'Pocket'}, + { On = true, Name = 'Svuot25x130', Type = 'Pocket'} +} + +--------------------------------------------------------------------- +return PocketingData diff --git a/Wall/SawingData.lua b/Wall/SawingData.lua new file mode 100644 index 0000000..7ef7340 --- /dev/null +++ b/Wall/SawingData.lua @@ -0,0 +1,10 @@ +-- SawingData.lua by Egaltech s.r.l. 18/02/2021 18:55:40 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local SawingData = { + { On = true, Name = 'TaglioCatena', Type = 'Sawing'} +} + +--------------------------------------------------------------------- +return SawingData diff --git a/Wall/Ts3Data.lua b/Wall/Ts3Data.lua new file mode 100644 index 0000000..a722177 --- /dev/null +++ b/Wall/Ts3Data.lua @@ -0,0 +1,87 @@ +-- C:\TechnoEssetre7\EgtData\Essetre-90580017.data + +local Offsets = { + MIN_X=-8100, + MAX_X=-2740, + MIN_Y=-25800, + MAX_Y=0, + MIN_Z=-1550, + MAX_Z=0, + MIN_B=-127, + MAX_B=127, + MIN_C=-275, + MAX_C=275, + ZERO_X_SAW=-4073.5, + ZERO_Y_SAW=-860.1, + ZERO_Z_SAW=-828.3, + PIVOT_SAW=164.1, + ZERO_X_MILL=-4073.4, + ZERO_Y_MILL=-1210.9, + ZERO_Z_MILL=-937, + PIVOT_MILL=170, + INTRULLI=495, + TYPEWORK=1, + OFFSET_ZERO2_X=-3500, + OFFSET_ZERO2_Y=0, + OFFSET_ZERO3_X=0, + OFFSET_ZERO3_Y=-19982, + OFFSET_ZERO4_X=-3500, + OFFSET_ZERO4_Y=-19982, + MIN_X3=-8710, + MAX_X3=-3650, + MIN_Z3=-1070, + MAX_Z3=0, + MIN_B3=0, + MAX_B3=90, + MIN_C3=-275, + MAX_C3=275, + Zzz=1 +} + +local Trave = { + XMIN=20, + XMAX=3500, + YMIN=50, + YMAX=18000, + ZMIN=1, + ZMAX=400, + Zzz=1 +} + +local User = { + NESTING_MATERIAL=1, + NESTING_TYPEEXTERNALOP=1, + NESTING_FROM_BTL=1, + SAFETY_DISTANCE_ZSAVE=40, + OPTIMIZATIONS_ENABLE_SLICES_F5=0, + OPTIMIZATIONS_ENABLE_SLICES_F6=0, + OPTIMIZATIONS_LENGTH_SLICES=150, + L056_ACTIVE_AS=1, + L055_ADD_P13=0, + L055_ACTIVE_AS=1, + L050_ADDDEPTH=0, + L060_PEN_F2=2, + L060_PEN_F1=2, + L138_TOLLERANZA=0, + L037_TOOL_WIDTH=0, + L032_LENGTH_MIN_DIV=900, + T055_ACTIVE_AS=1, + L040_ADD_P11=1, + L040_ADD_P11_PASS=0, + L040_OFFSET_P1=0, + L040_TYPEDRILLING=1, + L012_LIM=1, + L012_LENGTH_MIN_DIV=900, + L010_LIM=0, + L010_LENGTH_MIN_DIV=900, + L020_DIAM_HOLE=0, + L030_AUM_DIM=0, + L030_LENGTH_MIN_DIV=900, + T010_ALTCATENA=362, + T010_DISABLE_MILLING_AFTER_DIVISION=0, + L036_LENGTH_MIN_DIV=900, + Zzz=1 +} + +local Machine = { Offsets=Offsets, Trave=Trave, User=User} +return Machine diff --git a/Wall/WallData.lua b/Wall/WallData.lua new file mode 100644 index 0000000..f6954bf --- /dev/null +++ b/Wall/WallData.lua @@ -0,0 +1,76 @@ +-- WallData.lua by Egaltech s.r.l. 2021/09/26 +-- Raccolta dati generali per Pareti + +EgtOutLog( ' 90580017-WallData started', 1) + +-- Tabella per definizione modulo +local WallData = { + MIN_LENGTH = 100, -- lunghezza minima del grezzo + MIN_WIDTH = 100, -- larghezza minima del grezzo + MIN_HEIGHT = 10, -- altezza minima del grezzo + MAX_LENGTH = 18000, -- lunghezza massima del grezzo + MAX_WIDTH = 4900, -- larghezza massima del grezzo + MAX_HEIGHT = 400, -- altezza massima del grezzo + STD_RAW_LENGTH = 10000, -- lunghezza standard del grezzo + STD_RAW_WIDTH = 4000, -- larghezza standard del grezzo + OVM_HEAD = 60, -- sovramateriale testa + OVM_MID = 50, -- sovramateriale intermedio + COLL_SIC = 5, -- distanza di sicurezza per collisioni + CUT_SIC = 20, -- distanza di sicurezza per tagli + CUT_EXTRA = 0, -- affondamento extra standard per tagli di lama e fresature + CUT_EXTRA_MIN = 0, -- affondamento extra ridotto per tagli di lama e fresature + NZ_MINA = 0.5, -- componente limite in Z normale di una faccia (-30deg) + NZ_MINB = -0.4, -- componente limite in Z normale di un insieme di facce (-23deg) + DRILL_TOL = 0.5, -- tolleranza tra diametro foro e diametro punta + DRILL_VZ_MIN = 0.5, -- componente limite in Z del versore di un foro + DRILL_VX_MAX = 0.866, -- componente limite in X del versore di un foro sulle facce laterali + DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature + MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature + RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo + SIMUL_VIEW_DIR = 4, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE) + ORIG_CORNER = 'BL', -- angolo tavola per origine di battuta (BR (defualt), TR, BL, TL) + MAX_CLEAN_CRN30 = 60, -- massimo spessore per pulitura angolo con fresa 30deg + MIN_DIM_ALLOW_CLEAN = 200, -- apertura minima per lavorazione pulitura spigolo + MILL_MAX_DEPTH_AS_MAT = true, -- massimo affondamento frese uguale ad altezza tagliente (max materiale) + DELTA_Y = 0, -- allontanamento in Y dai riferimenti + DELTA_Z = 0 -- sollevamento dalla tavola +} + +local function GetChainSawBlockedAxis( nInd) + if nInd == 1 then + return 'A1=0' + else + return 'A1=90' + end +end +WallData.GetChainSawBlockedAxis = GetChainSawBlockedAxis + +-- Aggiornamento con dati da TechnoEssetre7 +local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90580017.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 then + if Machine.Trave then + WallData.MIN_LENGTH = Machine.Trave.YMIN or BeamData.MIN_LENGTH + WallData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH + WallData.MIN_HEIGHT = Machine.Trave.ZMIN or BeamData.MIN_HEIGHT + WallData.MAX_LENGTH = Machine.Trave.YMAX or BeamData.MAX_LENGTH + WallData.MAX_WIDTH = Machine.Trave.XMAX or BeamData.MAX_WIDTH + WallData.MAX_HEIGHT = Machine.Trave.ZMAX or BeamData.MAX_HEIGHT + end + if Machine.Offsets then + WallData.DELTA_Y = Machine.Offsets.DELTA_X or WallData.DELTA_Y + WallData.DELTA_Z = Machine.Offsets.DELTA_Z or WallData.DELTA_Z + end + end +end + +--------------------------------------------------------------------- +return WallData diff --git a/Wall/WallTableTemplate.ini b/Wall/WallTableTemplate.ini new file mode 100644 index 0000000..ccb02c1 --- /dev/null +++ b/Wall/WallTableTemplate.ini @@ -0,0 +1,9 @@ +-- %TABLE_NAME%.lua by Egaltech s.r.l. %DATE_TIME% +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local %TABLE_NAME% = { +} + +--------------------------------------------------------------------- +return %TABLE_NAME%