commit d268322e5565a5f53f4e682d54b5c08805e7bf52 Author: luca.mazzoleni Date: Wed Sep 18 18:33:14 2024 +0200 primo commit diff --git a/Essetre-90480023_MW.ini b/Essetre-90480023_MW.ini new file mode 100644 index 0000000..4d28a7d --- /dev/null +++ b/Essetre-90480023_MW.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=SawOnH2.nge +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-90480023_MW.mlde b/Essetre-90480023_MW.mlde new file mode 100644 index 0000000..7edd174 --- /dev/null +++ b/Essetre-90480023_MW.mlde @@ -0,0 +1,489 @@ +-- Descrizione macchina Essetre-90480026 by EgalTech s.r.l. 2023/03/16 +-- Macchina Wall. + +require( 'EmtGenerator') +EgtEnableDebug( false) + +PP_VER = '2.5c5' + +-- Parametri macchina +NumericalControl = 'NUM' -- NUM o TPA +MinY = 0.0 +MaxY = 30000.0 +MinX1 = -5400.0 +MaxX1 = 100.0 +MinZ1 = -1570.0 +MaxZ1 = 0.0 +MinB1 = -127.0 +MaxB1 = 127.0 +MinC1 = -275.0 +MaxC1 = 275.0 +MillOffs = 202.0 +ChSawLen = 101.0 +MinX2 = -6080.0 +MaxX2 = -770.0 +MinZ2 = -1180.0 +MaxZ2 = 0.0 +MinB2 = 0.0 +MaxB2 = 90.0 +MinC2 = -275.0 +MaxC2 = 275.0 +MinX3 = 370 +MaxX3 = 2300 +HomeX3 = 2300 +MinZ3 = 0 +MaxZ3 = 500 +SawDeltaX = 347.5 +SawDeltaY = 0.0 +SawDeltaZ = -117.9 +SawOffs = 163.5 +NailDeltaX = 457.7 +NailDeltaY = 152.5 +NailDeltaZ = -499 +DrillDeltaX = -306.35 +DrillDeltaY = -1131.785 +DrillDeltaZ = -971.0 +DimTabX = 31200.0 +DimTabY = 3500.0 +DeltaTabX = 1019.6 +DeltaTabY = -1294.3 - DimTabY +DeltaTabZ = -1090.0 +CoeffVM = 0.75 + +-- Aggiornamento con dati da TechnoEssetre7 +local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90480023_MW.data" +local sData = EgtGetSourceDir().."\\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.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_Y_NAIL then NailDeltaX = - ( MchOffs.ZERO_Y_MILL - MchOffs.ZERO_Y_NAIL) end + if MchOffs.ZERO_X_MILL and MchOffs.ZERO_X_NAIL then NailDeltaY = ( MchOffs.ZERO_X_MILL - MchOffs.ZERO_X_NAIL) end + if MchOffs.ZERO_Z_MILL and MchOffs.ZERO_Z_NAIL then NailDeltaZ = ( MchOffs.ZERO_Z_MILL - MchOffs.ZERO_Z_NAIL) end + if MchOffs.ZERO_Y_MILL and MchOffs.ZERO_Y_DRILL then DrillDeltaX = - ( MchOffs.ZERO_Y_MILL - MchOffs.ZERO_Y_DRILL) end + if MchOffs.ZERO_X_MILL and MchOffs.ZERO_X_DRILL then DrillDeltaY = ( MchOffs.ZERO_X_MILL - MchOffs.ZERO_X_DRILL) end + if MchOffs.ZERO_Z_MILL and MchOffs.ZERO_Z_DRILL then DrillDeltaZ = ( MchOffs.ZERO_Z_MILL - MchOffs.ZERO_Z_DRILL) end + end +end + +-- Posizione media asse X +MidX1 = ( MinX1 + MaxX1) / 2 + +-- Spostamenti della lama rispetto al disegno +local SawOffsX = SawDeltaX - 347.5 +local SawOffsY = SawDeltaY - 0 +local SawOffsZ = SawDeltaZ + 117.9 + +-- Spostamenti del chiodatore rispetto al disegno +local NailOffsX = NailDeltaX - 383.8 +local NailOffsY = NailDeltaY - 170.0 +local NailOffsZ = NailDeltaZ - 37.0 + +-- Spostamenti del foratore rispetto al disegno +local DrillOffsX = DrillDeltaX + 306.35 +local DrillOffsY = DrillDeltaY + 1131.785 +local DrillOffsZ = DrillDeltaZ + 971.0 + + +EmtGeneral { + File='Essetre-90480023_MW.nge', + Offset = Vector3d( -640.35, -3620.00, -1710.0), + AxisMaxAdjust = 250, + ExitMaxAdjust = 250, + ExitMaxRotAdj = 91, + 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/MOD07', 'BASE/MOD08', 'BASE/MOD09', + 'BASE/MOD10', 'BASE/MOD11', 'BASE/MOD12', 'BASE/MOD13', 'BASE/REF', 'BASE/COLLISION'}} + local vtMove = Vector3d( DeltaTabX - 1019.6, DeltaTabY + 4794.3, DeltaTabZ + 1090) + EgtMove( BaseId, vtMove, GDB_RT.GLOB) +-- Tavola +EmtTable { + Name = 'Tab', + Parent = 'Base', + Type = MCH_TT.FLAT, + Ref1 = Point3d( DeltaTabX, DeltaTabY, DeltaTabZ), + Geo = 'TABLE/GEO'} +-- Traversa +local YId = EmtAxis { + Name = 'Y', + Parent = 'Base', + Invert = true, + Type = MCH_AT.LINEAR, + Dir = X_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinY, MaxY}, + Home = 0, + Geo = 'Y_AXIS/GEO', + Aux = {'Y_AXIS/SOLID', 'Y_AXIS/TC', 'Y_AXIS/DRILL_BASE', 'Y_AXIS/COLLISION'}} +EgtMove( EgtGetFirstNameInGroup( YId, 'DRILL_BASE'), Vector3d( DrillOffsX, DrillOffsY, DrillOffsZ), GDB_RT.GLOB) +-- Testa 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'}} +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'}} +-- Chiodatrice +local H14Id = EmtHead { + Name = 'H14', + Parent = 'Z1', + HSet = 'H14', + Type = MCH_HT.STD, + Pos = Point3d( NailDeltaX, NailDeltaY, NailDeltaZ), + TDir = Z_AX(), + Geo = 'H14_HEAD/GEO', + Aux = {'H14_HEAD/SOLID'}} + EgtMove( EgtGetFirstNameInGroup( H14Id, 'SOLID'), Vector3d( NailOffsX, NailOffsY, NailOffsZ), 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', 60) +-- 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'} +-- Foratore +local Z3Id = EmtAxis { + Name = 'Z3', + Parent = 'Y', + Token = 'Z', + Type = MCH_AT.LINEAR, + Dir = Z_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinZ3, MaxZ3}, + Home = 0, + Geo = 'Z3_AXIS/GEO', + Aux = {'Z3_AXIS/SOLID'}} +EgtMove( EgtGetFirstNameInGroup( Z3Id, 'SOLID'), Vector3d( DrillOffsX, DrillOffsY, DrillOffsZ), GDB_RT.GLOB) +local X3Id = EmtAxis { + Name = 'X3', + Parent = 'Z3', + Token = 'X', + Type = MCH_AT.LINEAR, + Dir = Y_AX(), + Pos = Point3d( 0, 0, 0), + Stroke = {MinX3, MaxX3}, + Home = HomeX3, + Geo = 'X3_AXIS/GEO', + Aux = {'X3_AXIS/SOLID'}} +EgtMove( EgtGetFirstNameInGroup( X3Id, 'SOLID'), Vector3d( DrillOffsX, DrillOffsY, DrillOffsZ), GDB_RT.GLOB) +local H5Id = EmtHead { + Name = 'H5', + Parent = 'X3', + HSet = 'H5', + Type = MCH_HT.STD, + Pos = Point3d( DrillDeltaX, DrillDeltaY, DrillDeltaZ), + TDir = Y_AX(), + Geo = 'H5_HEAD/GEO'} +EgtSetInfo( H5Id, 'ABOVE', '0') +-- ToolChanger +local ptTcB = Point3d( -494.6,-4556.6,14.0) +EmtTcPos { + Name = 'T1', + Parent = 'Y', + Pos = ptTcB, + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB1'} +EmtTcPos { + Name = 'T2', + Parent = 'Y', + Pos = ptTcB + 120 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB2'} +EmtTcPos { + Name = 'T3', + Parent = 'Y', + Pos = ptTcB + 240 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB3'} +EmtTcPos { + Name = 'T4', + Parent = 'Y', + Pos = ptTcB + 360 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB4'} +EmtTcPos { + Name = 'T5', + Parent = 'Y', + Pos = ptTcB + 480 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB5'} +EmtTcPos { + Name = 'T6', + Parent = 'Y', + Pos = ptTcB + 600 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB6'} +EmtTcPos { + Name = 'T7', + Parent = 'Y', + Pos = ptTcB + 720 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB7'} +EmtTcPos { + Name = 'T8', + Parent = 'Y', + Pos = ptTcB + 840 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB8'} +EmtTcPos { + Name = 'T9', + Parent = 'Y', + Pos = ptTcB + 960 * Y_AX(), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TB9'} +EmtTcPos { + Name = 'T101', + Parent = 'Y', + Pos = Point3d(-568.3,-1312.4,9-92.8), + TDir = X_AX(), + ADir = Z_AX(), + Geo = 'Y_AXIS/TC1'} +EmtTcPos { + Name = 'T201', + Parent = 'Y', + Pos = Point3d(-926.3,-1855.0,28), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TC2'} +EmtTcPos { + Name = 'T202', + Parent = 'Y', + Pos = Point3d(-926.3,-2555.0,28), + TDir = Z_AX(), + ADir = X_AX(), + Geo = 'Y_AXIS/TC3'} + +--------------------------------------------------------------------- +-- 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() + -- impostazioni assi + if EMC.HEAD == 'H1' then + EmtModifyAxisHome( 'X1', MaxX1) + EmtModifyAxisHome( 'Z1', MaxZ1) + EmtModifyAxisHome( 'C1', 0) + EmtModifyAxisHome( 'B1', 0) + elseif EMC.HEAD == 'H3' then + EmtModifyAxisHome( 'X1', MidX1) + EmtModifyAxisHome( 'Z1', -250) + EmtModifyAxisHome( 'C1', 90) + EmtModifyAxisHome( 'B1', 0) + elseif EMC.HEAD == 'H14' then + EmtModifyAxisHome( 'X1', MaxX1) + EmtModifyAxisHome( 'Z1', MaxZ1) + EmtModifyAxisHome( 'C1', 90) + EmtModifyAxisHome( 'B1', 90) + end + -- abilitazione/disabilitazione graffatrice + local dPos = EgtIf( EMC.HEAD == 'H14', 0, 680) + MoveGroup( EgtGetFirstNameInGroup( H14Id, 'SOLID'), Z_AX(), dPos, true) + MoveGroup( EgtGetFirstNameInGroup( H14Id, 'T1'), Z_AX(), dPos, true) +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-90480023_MW.nge b/Essetre-90480023_MW.nge new file mode 100644 index 0000000..b870247 Binary files /dev/null and b/Essetre-90480023_MW.nge differ diff --git a/Essetre-WALL.NUM.mlpe b/Essetre-WALL.NUM.mlpe new file mode 100644 index 0000000..8edcb66 --- /dev/null +++ b/Essetre-WALL.NUM.mlpe @@ -0,0 +1,742 @@ +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2023/03/14 +-- Con controllo numerico NUM +-- 2023/03/13 DS Prima versione. + +-- 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() + -- Info da gruppo BtlInfo (se mancano prova dal gruppo di lavoro corrente) + local BtlInfoId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'BtlInfo') or EgtGetCurrMachGroup() or GDB_ID.NULL + EMT.ORIG = EgtGetInfo( BtlInfoId, 'REFPOS', 'i') or 1 + 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 + end + if EMT.PATTID and EMT.PATTID > 0 then + 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..')') + -- Se modalità test vado in posizione sicura + if TEST_USE then + EmtOutput( 'G77 H9000 N1000 N2000') + end + -- Parametri macchina + local sOut = 'G114'..' EA'..EgtNumToString( DeltaTabY - SawDeltaY + DimTabY, -2)..' EB'..EgtNumToString( -DeltaTabX + SawDeltaX, -2).. + ' EC'..EgtNumToString( DeltaTabZ - SawDeltaZ, -2)..' ED'..EgtNumToString( SawOffs, -2)..' EE'..EgtNumToString( 0, -2).. + ' EF'..EgtNumToString( DeltaTabY + DimTabY, -2)..' EG'..EgtNumToString( -DeltaTabX, -2).. + ' EH'..EgtNumToString( DeltaTabZ, -2)..' EI'..EgtNumToString( MillOffs, -2).. + ' EL'..EgtNumToString( DeltaTabY - NailDeltaY + DimTabY, -2)..' EM'..EgtNumToString( -DeltaTabX + NailDeltaX, -2).. + ' EN'..EgtNumToString( DeltaTabZ - NailDeltaZ, -2)..' EO'..EgtNumToString( DeltaTabY - DrillDeltaY + DimTabY, -2).. + ' EP'..EgtNumToString( -DeltaTabX + DrillDeltaX, -2)..' EQ'..EgtNumToString( DeltaTabZ - DrillDeltaZ, -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') +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 = 'G126 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( '(M12 $PRESS START FOR CLEANING)') + EmtOutput( 'M27 E30057=0') + 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) + EMT.LP = b3Raw:getDimX() + EMT.HP = b3Raw:getDimY() + EMT.SP = b3Raw:getDimZ() + EmtOutput( 'E30050='..EgtNumToString( 1000 * EMT.HP, 0).. + ' E30051='..EgtNumToString( 1000 * EMT.LP, 0).. + ' E30052='..EgtNumToString( 1000 * EMT.SP, 0)) + -- Posizione cuffia + local dHCuff = b3Raw:getDimZ() + 32 + EmtOutput( 'E30039=' .. EgtNumToString( dHCuff * 1000, 0)) + -- Eventuale salto a lavorazione in corso + EmtOutput( 'G79 NE80000') + -- Lancio del carico + EmitCount() + if not TEST_USE then + EmtOutput( 'M26 E30054=' .. EgtIf( EMT.LOAD90 == 1, '5', '1')) + end + -- 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 = 'G126 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 EmtSetLastError( 1213, '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) + 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() + if not EMT.ZMAX and not IsNailingHead( EMT.HEAD) then + EmtOutput( 'G103'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + end + 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 IsNailingHead( EMT.HEAD) then + local dStep = GetValNotes( EgtGetMachiningParam( MCH_MP.USERNOTES), 'Par', 'd') or 100 + local dSafeZ = max( EgtGetMachiningParam( MCH_MP.STARTPOS), 10) or 20 + --local dSafeZ = EgtMdbGetGeneralParam( MCH_GP.SAFEZ) + local sEB = ' EB0' + if EMT.TO_ZMAX then + sEB = ' EB1' + EMT.TO_ZMAX = nil + end + EmtOutput( 'G124 X'..EmtLenToString( EMT.NAIL_START_L1, 3)..' Y'..EmtLenToString( EMT.NAIL_START_L2, 3)..' Z'..EmtLenToString( EMT.NAIL_START_L3, 3).. + ' B'..EmtLenToString( EMT.NAIL_END_L1, 3)..' C'..EmtLenToString( EMT.NAIL_END_L2, 3)..' EA'..EmtLenToString( dStep, 3)..' EB1'.. + ' W'..EmtLenToString( dSafeZ, 3)..EMT.NAIL_END) + 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 + -- eventuale pausa per rimozione sfridi + if EMT.SCRAPFIRST then + EMT.SCRAPFIRST = false + local b3Raw = EgtGetRawPartBBox( EMT.RAWID) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + EmtOutput( 'G104 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF()) + end + -- pre-posizionamento + EmitCount() + EmtResetPrev() + local sOut = 'G101' .. EmtGetAxis( 'R1') + local sET = GetET() + local sEU = GetEU() + local sEF = GetEF() + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sES = ' ES'..EgtNumToString( abs( EMT.S), 0) + local sEL = ' EL' .. EmtLenToString( ChSawLen, 3) + local sER = ' ER' .. EmtLenToString( EMT.TLEN, 3) + sOut = sOut .. sET .. sEU .. 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( 'G104 Y' .. EmtLenToString( ParkY, 3) .. ' ET1' .. GetEF()) + end + end + -- primo posizionamento + EmtResetPrev() + if EMT.HEAD ~= 'H5' then + local sOut = 'G101' .. EmtGetAxis( 'L1') .. EmtGetAxis( 'L2') .. EmtGetAxis( 'L3') .. + EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') + if EMT.HEAD == 'H1' or EMT.HEAD == 'H3' or EMT.HEAD == 'H14' then + sOut = sOut .. ' U' .. EmtLenToString( MinX2, 3) .. ' W0 V90 A0' + elseif EMT.HEAD == 'H2' then + sOut = sOut .. ' U' .. EmtLenToString( MaxX1, 3) .. ' W0 V0 A0' + else + EmtSetLastError( 1211, "Unknown Head : " .. EMT.HEAD) + end + local sET = GetET() + local sEU = GetEU() + 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, ChSawLen), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + sOut = sOut .. sET .. sEU .. sEF .. sEM .. sES .. sEL .. sER + if not IsNailingHead( EMT.HEAD) then + EmtOutput( sOut) + end + EMT.REFLOC = 0 + EMT.MCHFIRST = false + EMT.ZMAX = false + else -- H5 (foratore orizzontale) + -- rinvio l'emissione al prossimo movimento con Z del foro + EMT.FIRST_HDRILL = true + EMT.REFLOC = nil + EMT.MCHFIRST = false + end + -- se standard + elseif EMT.FLAG == 0 or EMT.FLAG == 1 or EMT.FLAG == 2 then + -- se prima emissione di foratura orizzontale + if EMT.FIRST_HDRILL then + EMT.FIRST_HDRILL = false + local sET = GetET() + local sEU = GetEU() + EMT.L1 = -EMT.L1 + local sOut = 'G101 X0' .. EmtGetAxis( 'L1') .. EmtGetAxis( 'L3')..' U0 V0 W0'..sET..sEU..' EF60000' + EmtOutput( sOut) + EMT.L1 = -EMT.L1 + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EmtResetPrev() + local sEF = ' EF20000' + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sX = ' X40' + local sEX = ' EX0' + sOut = 'G102' .. sX ..' Y0 Z0'..sEX..' EY'..EmtLenToString( EMT.L1)..' EZ'..EmtLenToString( EMT.L3) .. ' EA0 EB0 EC0 ED0' .. sET .. sEU .. sEM .. sEF + EmtOutput( sOut) + EMT.ZMAX = false + -- se necessario, impostazione riferimento locale + elseif 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 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, ChSawLen), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + if not IsNailingHead( EMT.HEAD) then + EmtOutput( 'G102'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EmtGetAxis('R2')..EmtGetAxis('R1')..EMT.IPLGLSTR..sET..sEU..sEF..sEM..sES..sEL..sER) + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + else + EMT.NAIL_START_L1 = EMT.L1 + EMT.NAIL_START_L2 = EMT.L2 + EMT.NAIL_START_L3 = EMT.L3 + EMT.NAIL_END_L1 = EMT.L1 + EMT.NAIL_END_L2 = EMT.L2 + EMT.NAIL_END = EMT.IPLGLSTR..sET..sEU..sEF..sEM..sES..sEL..sER + end + else + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + -- emissione movimento + if not IsNailingHead( EMT.HEAD) then + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + else + if EMT.L1 then EMT.NAIL_END_L1 = EMT.L1 end + if EMT.L2 then EMT.NAIL_END_L2 = EMT.L2 end + if EMT.L3 and EMT.L3 < EMT.NAIL_START_L3 then + EMT.NAIL_START_L3 = EMT.L3 + end + end + end + -- se altrimenti risalita a Z max a fine lavorazione + elseif EMT.FLAG == 3 then + if not IsNailingHead( EMT.HEAD) then + if EMT.REFLOC then + EMT.REFLOC = nil + EMT.IPLGL = false + EmtResetPrev() + -- dichiarazione fine lavorazione + EmtOutput( 'G103'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + local sOut = 'G101' .. EmtGetAxis( 'L3') .. EmtGetAxis( 'R2') .. EmtGetAxis( 'R1') .. GetET() .. GetEF() + EmtOutput( sOut) + EMT.ZMAX = true + elseif EMT.HEAD == 'H5' then + EmtResetPrev() + EmtOutput( 'G103'..GetET()..' E80000='..tostring( EMT.CNT + 1)) + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EMT.ZMAX = true + end + else + EMT.TO_ZMAX = true + end + -- se altrimenti movimento in Home + elseif EMT.FLAG == 4 then + -- non previsto + -- altrimenti errore + else + EmtSetLastError( 1214, 'Unknown Rapid flag') + end + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnLinear() + -- se prima emissione di foratura orizzontale + if EMT.FIRST_HDRILL then + EMT.FIRST_HDRILL = false + local sET = GetET() + local sEU = GetEU() + EMT.L1 = -EMT.L1 + local sOut = 'G101 X0' .. EmtGetAxis( 'L1') .. EmtGetAxis( 'L3')..' U0 V0 W0'..sET..sEU..' EF60000' + EmtOutput( sOut) + EMT.L1 = -EMT.L1 + -- salvo posizione attuale + local OldL1 = EMT.L1 + local OldL2 = EMT.L2 + local OldL3 = EMT.L3 + local OldR1p = EMT.R1p + local OldR2p = EMT.R2p + -- trasformo i punti + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + EmtResetPrev() + local sEF = ' EF20000' + local sEM = ' EM'..EgtIf( EMT.S > 0, '3', '4') + local sX = ' X40' + local sEX = ' EX0' + sOut = 'G102' .. sX ..' Y0 Z0'..sEX..' EY'..EmtLenToString( EMT.L1)..' EZ'..EmtLenToString( EMT.L3) .. ' EA0 EB0 EC0 ED0' .. sET .. sEU .. sEM .. sEF + EmtOutput( sOut) + -- ripristino posizione attuale + EMT.L1 = OldL1 + EMT.L2 = OldL2 + EMT.L3 = OldL3 + EMT.R1p = OldR1p + EMT.R2p = OldR2p + EMT.ZMAX = false + -- se necessario, impostazione riferimento locale + elseif 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 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, ChSawLen), 3) + local sER = ' ER' .. EmtLenToString( EgtIf( EMT.HEAD ~= 'H3', EMT.TDIAM / 2, EMT.TLEN), 3) + if not IsNailingHead( EMT.HEAD) then + EmtOutput( 'G102'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3')..EmtGetAxis('R2')..EmtGetAxis('R1')..EMT.IPLGLSTR..sET..sEU..sEF..sEM..sES..sEL..sER) + -- emissione movimento + local sOut = 'G0'..EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + EmtOutput( sOut) + else + EMT.NAIL_START_L1 = EMT.L1 + EMT.NAIL_START_L2 = EMT.L2 + EMT.NAIL_START_L3 = EMT.L3 + EMT.NAIL_END_L1 = EMT.L1 + EMT.NAIL_END_L2 = EMT.L2 + EMT.NAIL_END = EMT.IPLGLSTR..sET..sEU..sEF..sEM..sES..sEL..sER + end + -- ripristino posizione attuale + EMT.L1 = OldL1 + EMT.L2 = OldL2 + EMT.L3 = OldL3 + EMT.R1p = OldR1p + EMT.R2p = OldR2p + end + + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + if not IsNailingHead( EMT.HEAD) then + -- valori degli assi + local sAxes + if EMT.HEAD ~= 'H5' then + sAxes = EmtGetAxis('L1')..EmtGetAxis('L2')..EmtGetAxis('L3').. + EmtGetAxis('R2')..EmtGetAxis('R1') + else + sAxes = EmtGetAxis('L2') + end + -- se nulla da emettere, esco + if #sAxes == 0 then + return + end + -- aggiungo feed + local sFeed = EmtGetFeed() + -- emetto linea + EmtOutput( "G1"..sAxes..sFeed) + -- eventuale gestione fondo foro + if EMT.FLAG == 101 and EMT.HEAD == 'H5' then + EmtOutput( 'M155') + end + else + if EMT.L1 then EMT.NAIL_END_L1 = EMT.L1 end + if EMT.L2 then EMT.NAIL_END_L2 = EMT.L2 end + if EMT.L3 and EMT.L3 < EMT.NAIL_START_L3 then + EMT.NAIL_START_L3 = EMT.L3 + end + end + + -- aggiorno valori come precedenti + EmtUpdatePrev() +end + +--------------------------------------------------------------------- +function OnArc() + -- non modale su archi + local dPrevZ = EMT.L3p + EmtResetPrevLinear() + -- aggiustamento valori + MyAdjustLinearAxes() + EmtAdjustRotaryAxes() + + if not IsNailingHead( EMT.HEAD) then + -- 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) + else + -- Archi non previsti con chiodature + EmtSetLastError( 1212, 'Arcs non allowed with nailing') + end + + -- 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 = ChSawLen + MillOffs + local LenRef = MillOffs + local vtAux = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + vtE = vtAux * Len - Z_AX() * LenRef + elseif EMT.HEAD == 'H14' then + vtDelta = -Vector3d( NailDeltaX, NailDeltaY, NailDeltaZ) + vtE = Z_AX() * EMT.TLEN + 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() + elseif EMT.HEAD == 'H5' then + EMT.L1 = EMT.L1 - DeltaTabX + DrillDeltaX + EMT.L2 = EMT.L2 - DeltaTabY + DrillDeltaY - DimTabY - EMT.TLEN + EMT.L3 = EMT.L3 - DeltaTabZ + DrillDeltaZ + 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 = EgtIf( IsNailingHead( EMT.HEAD), EMT.SP, 0) + local ptS = Point3d( xS, yS, zS) + -- calcolo per piano generico + local vtE + if EMT.HEAD == 'H1' then + vtE = EgtGetCalcToolDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + elseif EMT.HEAD == 'H3' then + vtE = EgtGetCalcAuxDirFromAngles( EMT.R1, EMT.R2, EMT.R3) + else + vtE = Z_AX() + end + if EMT.HEAD == 'H1' or EMT.HEAD == 'H3' then + EMT.IPLGLFR = Frame3d( ptS, vtE) + else + EMT.IPLGLFR = Frame3d( ptS, Y_AX(), -X_AX(), Z_AX()) + end + --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 + -- A seconda del corner di riferimento scelto togliere o meno da EX DimTabY e da EY DimTabX (BL non li usa, TR li richiede entrambi) + local xOut = yS - DeltaTabY - DimTabY + local yOut = - ( xS - DeltaTabX) + local zOut = zS + 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' + elseif EMT.HEAD == 'H5' then + return ' ET3' + elseif EMT.HEAD == 'H14' 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 = ' EU104' + elseif abs( EMT.R3 - 270) < 0.1 then + sEU = ' EU101' + elseif abs( EMT.R3 - 180) < 0.1 then + sEU = ' EU102' + elseif abs( EMT.R3 - 90) < 0.1 then + sEU = ' EU103' + else + EmtSetLastError( 1210, 'Chain saw orientation not allowed') + end + else + sEU = ' EU0' + end + return sEU +end + +--------------------------------------------------------------------- +function GetEF() + return ' EF60000' +end + +--------------------------------------------------------------------- +function EmitCount() + EMT.CNT = EMT.CNT + 1 + EmtOutput( 'N'..tostring( EMT.CNT)..' E80000='..tostring( EMT.CNT)) +end + +--------------------------------------------------------------------- +function IsNailingHead( sHead) + return ( sHead == 'H14') +end + +--------------------------------------------------------------------- +function GetValNotes( sNotes, sKey, sType) + local vsChunk = EgtSplitString( sNotes or '', ';') + local dVal + for i = 1, #vsChunk do + local dTmp = EgtGetVal( vsChunk[i], sKey, sType) + if dTmp then dVal = dTmp end + end + return dVal +end + +--------------------------------------------------------------------- +-- *** END GENERATION *** +--------------------------------------------------------------------- diff --git a/Essetre-WALL.mlpe b/Essetre-WALL.mlpe new file mode 100644 index 0000000..9521123 --- /dev/null +++ b/Essetre-WALL.mlpe @@ -0,0 +1,1077 @@ +-- Processore macchina Essetre-WALL by EgalTech s.r.l. 2023/03/14 +-- Funzioni generiche indipendenti dal controllo + +-- Intestazioni +require( 'EmtGenerator') +EgtEnableDebug( false) + + +--------------------------------------------------------------------- +-- *** GENERATION *** +--------------------------------------------------------------------- +local sBaseDir = EgtGetSourceDir() +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 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 + AdjustTcPosForTool( vTcPos[i], vTools[1]) + 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 = {} + local McdData = { { Grp = 'Y', Sub = 'COLLISION', Name = 'TRAV'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'COL1'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'COL2'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'TC1'}, + { Grp = 'Y', Sub = 'COLLISION', Name = 'CHSAW'}, + { Grp = 'Base', Sub = 'COLLISION', Name = 'STM'}, + { Grp = 'Base', Sub = 'COLLISION', Name = 'REFS'}} + EgtOutLog( 'MCODET Objects :', 4) + local nMcdNullCnt = 0 + for i = 1, #McdData do + local nGrpId + if McdData[i].Grp == 'Base' then + nGrpId = EgtGetBaseId( 'Base') + else + nGrpId = EgtGetAxisId( McdData[i].Grp) + end + local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name) + if nId then + table.insert( EMT.MCODET, nId) + EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4) + else + nMcdNullCnt = nMcdNullCnt + 1 + EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4) + end + end + if nMcdNullCnt > 0 then + EgtOutLog( 'Warning : MCODET with one or more null Element(s) ') + end + -- 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 + + -- dati del grezzo + local nRawId = EgtGetFirstRawPart() + local b3Raw = EgtGetRawPartBBox( nRawId or GDB_ID.NULL) + + -- Se prima disposizione (dovrebbe essere l'unica) + if EMT.PHASE == 1 then + -- Assegno dimensioni del grezzo + EMT.LB = 0 + EMT.SB = 0 + EMT.HB = 0 + if b3Raw then + EMT.LB = b3Raw:getDimX() + EMT.SB = b3Raw:getDimY() + EMT.HB = b3Raw: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 + EMT.FIRST_TOOL = true + -- Se vero inizio, abilitato e trovato grezzo, creazione Zmap + if not EMT.SIM1ST and EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') and nRawId then + -- elimino eventuale vecchio Zmap + EgtErase( EgtGetFirstNameInGroup( nRawId, 'VMill') or GDB_ID.NULL) + -- determino la risoluzione dello Zmap + local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw: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 + -- verifico se grezzo ruotato + local refRaw = EgtGetGroupGlobFrame( nRawId) + local bRefXYZ = AreSameVectorApprox( refRaw:getVersX(), X_AX()) and AreSameVectorApprox( refRaw:getVersY(), Y_AX()) + -- creo lo Zmap + if bRefXYZ then + EMT.VMILL = EgtVolZmapBox( nRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB) + else + local nSolId = EgtGetFirstNameInGroup( nRawId, 'RawSolid') + EMT.VMILL = EgtVolZmapFromSurfTm( nRawId, nSolId, dTol, true) + end + if EMT.VMILL then + EgtSetName( EMT.VMILL, 'VMill') + EgtSetLevel( EMT.VMILL, GDB_LV.TEMP) + local nSolId = EgtGetFirstNameInGroup( nRawId, 'RawSolid') + EgtSetColor( EMT.VMILL, EgtGetColor( nSolId), false) + -- nascondo le altre geometrie + local nId = EgtGetFirstInGroup( nRawId) + 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 + -- 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 +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) + EMT.TOOLTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) + -- se lama su sua testa, verifico che l'altra sia dalla parte opposta + if EMT.HEAD == 'H2' then + EgtSetAxisPos( 'X1', MaxX1) + -- se altrimenti utensile su testa 1, lo carico + elseif EMT.HEAD == 'H1' or EMT.HEAD == 'H3' then + -- 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 + EgtSetAxisPos( 'A1', dPosA) + EmtModifyAxisHome( 'A1', dPosA) + EgtSetAxisPos( 'C1', 90) + end + -- breve pausa + EgtPause( 100) + EgtOutText( '') + EMT.TOOL_1 = EMT.TOOL + EMT.TCPOS_1 = EMT.TCPOS + -- lo nascondo sul portautensili + ShowToolInTcPos( EMT.TCPOS, false) + -- se altrimenti graffettatrice, tolgo utensile da testa e imposto opportunamente B e C + elseif EMT.HEAD == 'H14' then + -- nascondo utensile su testa e lo visualizzo su TcPos + EgtSetStatus( EgtGetHeadId( 'H1'), GDB_ST.OFF) + ShowToolInTcPos( EMT.TCPOS_1, true) + EMT.TOOL_1 = nil + EMT.TCPOS_1 = nil + -- imposto assi rotanti B90 C90 + EgtSetAxisPos( 'C1', 90) + EgtSetAxisPos( 'B1', 90) + 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 + local nInd = EgtIf( EMT.HEAD ~= 'H2', 1001, 1011) + AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd) + AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1) + 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() + -- Step di simulazione + local RapSimStep = 4 * EMT.SIMSTEP + local RapSimRotStep = RapSimStep / 10 + local CollSimRotStep = min( RapSimRotStep, 5) + -- porto la testa in home + if EMT.HEAD == 'H2' then + SimulMoveAxes( 'X2', MinX2, RapSimStep, 'C2', EgtGetAxisHomePos( 'C2'), CollSimRotStep, 'B2', EgtGetAxisHomePos( 'B2'), CollSimRotStep) + elseif EMT.NEXTHEAD == 'H2' then + local ParkX1 = EgtIf( EMT.HEAD == 'H3', ( MinX1 + MaxX1) / 2, MaxX1) + SimulMoveAxes( 'X1', ParkX1, RapSimStep, 'C1', EgtGetAxisHomePos( 'C1'), CollSimRotStep, 'B1', EgtGetAxisHomePos( 'B1'), CollSimRotStep) + end + -- se testa attuale è sega a catena devo depositarla + if EMT.HEAD == 'H3' then + ShowToolInTcPos( EMT.TCPOS_1, true) + EgtUnloadTool( 'H3', 1) + EMT.TOOL_1 = nil + EMT.TCPOS_1 = nil + end + -- deposito utensile se non lama su sua testa, graffatrice o foratore lungo + if ( EMT.NEXTHEAD == 'H1' or EMT.NEXTHEAD == 'H3') and ( EMT.HEAD == 'H1' or EMT.HEAD == 'H3') then + if EMT.NEXTTOOL ~= EMT.TOOL_1 then + EgtOutText( 'Tool change in progress...') + -- simulo movimento + SimulMoveAxes( 'B1', 0, CollSimRotStep, 'C1', 0, CollSimRotStep) + SimulMoveAxis( 'X1', MidX1, RapSimStep) + -- 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', MidX1, RapSimStep) + SimulMoveAxes( 'B1', 0, CollSimRotStep, 'C1', -90, CollSimRotStep) + 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() + -- se posizionamento prima di lavorazione con foratore orizzontale + if EMT.MOVE == 0 and EMT.FLAG == 2 and EMT.HEAD == 'H5' then + -- step di simulazione + local RapSimStep = 4 * EMT.SIMSTEP + -- porto gli assi Y e Z3 alla posizione finale + SimulMoveAxes( 'Y', EMT.L1, RapSimStep, 'Z3', EMT.L3, RapSimStep) + end +end + +--------------------------------------------------------------------- +function OnSimulMoveEnd() + -- se Zmax dopo fine lavorazione con foratore orizzontale + if EMT.MOVE == 0 and EMT.FLAG == 3 and EMT.HEAD == 'H5' then + -- step di simulazione + local RapSimStep = 4 * EMT.SIMSTEP + -- porto l'asse X3 in home + SimulMoveAxis( 'X3', HomeX3, RapSimStep) + end +end + +--------------------------------------------------------------------- +function OnSimulCollision() + -- se prima collisione della lavorazione, la segnalo + if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then + local Class = '' + if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 then + Class = 'T_'..EMT.HEAD + elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 then + Class = 'TH_'..EMT.HEAD + else + Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl + end + -- se foratura verticale ammetto discesa nel piano fino a 15 mm + if EMT.TOOLTYPE == MCH_TY.DRILL_STD and abs( EgtGetAxisPos( 'B1')) < 60.1 then + local PosZ = EgtGetAxisPos( 'Z1') + MillOffs - ( MillOffs + EMT.TOOLTOTLEN) * EMT.TDIR[3] + local DownZ = PosZ - DeltaTabZ + if DownZ > -15 then + EgtOutLog( 'Top Drill down table '..EgtNumToString( DownZ, 1), 1) + return + end + end + table.insert( EMT.COLLIDE, { Mc = EMT.MCHNAME, Cl = Class, Vm = EMT.SIMVMID}) + EMT.LAST_MCHNAME_COLLIDE = EMT.MCHNAME + EMT.ERR = 11 + 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() + -- Step di simulazione + local RapSimStep = 4 * EMT.SIMSTEP + -- Quota di parcheggio + local b3Raw = EgtGetRawPartBBox( EgtGetFirstRawPart() or GDB_ID.NULL) + local ParkY = min( -( b3Raw:getMin():getX() - 2000), -MinY) + --Eseguo + SimulMoveAxis( 'Z1', EgtGetAxisHomePos( 'Z1'), RapSimStep) + SimulMoveAxis( 'Y', ParkY, RapSimStep) +end + +--------------------------------------------------------------------- +function ExecScrapRemove() + -- Se non c'è virtual milling attivo, esco + if not EMT.VMILL then return end + -- Se non ci sono almeno due parti nel virtual milling, esco + local nVmPart = EgtVolZmapPartCount( EMT.VMILL) + if nVmPart < 2 then return end + -- Recupero box e area dei pezzi + local vPart = {} + local nPartId = EgtGetFirstPartInRawPart( EgtGetFirstRawPart() or GDB_ID.NULL) + while nPartId do + -- box e area + local b3Part = EgtGetBBoxGlob( EgtGetFirstNameInGroup( nPartId, 'Box') or GDB_ID.NULL, GDB_BB.STANDARD) + local dPartArea = b3Part:getDimX() * b3Part:getDimY() + -- box espanso + local b3PartExp = BBox3d( b3Part) + b3PartExp:Add( b3PartExp:getMin() - Vector3d( 10, 10, 0)) + b3PartExp:Add( b3PartExp:getMax() + Vector3d( 10, 10, 0)) + -- salvo i dati + table.insert( vPart, { Box = b3Part, BoxExp = b3PartExp, Area = dPartArea}) + -- passo al successivo + nPartId = EgtGetNextPartInRawPart( nPartId) + end + -- Recupero box e area delle parti di Vmill + local vVmPart = {} + for i = 1, nVmPart do + -- recupero il box e calcolo l'area della parte come Vmill + local b3VmPart = EgtVolZmapGetPartBBoxGlob( EMT.VMILL, i - 1, GDB_BB.STANDARD) + local dVmPartArea = EgtVolZmapPartVolume( EMT.VMILL, i - 1) / b3VmPart:getDimZ() + -- box espanso + local b3VmPartExp = BBox3d( b3VmPart) + b3VmPartExp:Add( b3VmPart:getMin() - Vector3d( 100, 100, 0)) + b3VmPartExp:Add( b3VmPart:getMax() + Vector3d( 100, 100, 0)) + -- salvo i dati + table.insert( vVmPart, { Box = b3VmPart, BoxExp = b3VmPartExp, Area = dVmPartArea}) + end + -- Tengo solo le parti del Vmill che contengono almeno un box di un pezzo o che interferiscono e sono abbastanza grandi + local nValidCnt = 0 + for i = #vVmPart, 1, -1 do + -- verifiche per parte da eliminare + local bToRemove = true + -- se area abbastanza grande, allora da verificare + if vVmPart[i].Area > 1e4 then + -- verifico se sono sicuramente valide (i due box si equivalgono entro la tolleranza) + for j = 1, #vPart do + if EnclosesXY( vVmPart[i].BoxExp, vPart[j].Box) and EnclosesXY( vPart[j].BoxExp, vVmPart[i].Box) then + bToRemove = false + vVmPart[i].Part = j + nValidCnt = nValidCnt + 1 + break + end + end + -- verifico se sono molto probabilmente valide + for j = 1, #vPart do + if bToRemove and ( OverlapsXY( vVmPart[i].Box, vPart[j].Box) and vVmPart[i].Area > 0.49 * vPart[j].Area) then + bToRemove = false + break + end + end + end + -- se richiesta eliminazione, la eseguo + if bToRemove then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + table.remove( vVmPart, i) + end + end + -- Se il numero delle parti sicuramente valide uguaglia il numero dei pezzi, elimino le altre ed ho finito + if nValidCnt == #vPart then + for i = #vVmPart, 1, -1 do + if not vVmPart[i].Part then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + table.remove( vVmPart, i) + end + end + return + end + -- Calcolo punti interni alle parti di Vmill non già dichiarate valide + for i = 1, #vVmPart do + if not vVmPart[i].Part then + local vtDir = VectorFromRotated( X_AX(), Z_AX(), -15.0) + local ptP = vVmPart[i].Box:getCenter() - vtDir * ( vVmPart[i].Box:getRadius() + 10) + local bOk, vIntType, vIntDist = EgtLineVolZmapInters( ptP, vtDir, EMT.VMILL, GDB_RT.GLOB) + if bOk then + for j = 1, #vIntType do + -- se la corrente entra ed esiste la successiva che esce + if vIntType[j] == GDB_SLT.IN and j + 1 <= #vIntType and vIntType[j + 1] == GDB_SLT.OUT then + local ptC = ptP + vtDir * (( vIntDist[j] + vIntDist[j + 1]) / 2) + local nPart = EgtVolZmapGetPartMinDist( EMT.VMILL, ptC, GDB_RT.GLOB) + if nPart == i - 1 then + if not vVmPart[i].Cen then + vVmPart[i].Cen = ptC + elseif not vVmPart[i].Cen2 then + vVmPart[i].Cen2 = ptC + else + vVmPart[i].Cen3 = ptC + break + end + end + end + end + end + end + end + -- Verifico le parti di Vmill non già dichiarate valide + for i = #vVmPart, 1, -1 do + if not vVmPart[i].Part then + local bToRemove = true + if vVmPart[i].Cen then + for j = 1, #vPart do + if EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen) then + bToRemove = false + break + elseif vVmPart[i].Cen2 and EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen2) then + bToRemove = false + break + elseif vVmPart[i].Cen3 and EnclosesPointXY( vPart[j].Box, vVmPart[i].Cen3) then + bToRemove = false + break + end + end + for k = 1, #vVmPart do + if k ~= i then + local vExpBox = BBox3d( vVmPart[k].Box) + -- lo espando in XY per sicurezza + vExpBox:Add( vExpBox:getMin() - Vector3d( 100, 100, 0)) + vExpBox:Add( vExpBox:getMax() + Vector3d( 100, 100, 0)) + -- verifico contenimento + if EnclosesXY( vExpBox, vVmPart[i].Box) then + bToRemove = true + break + end + end + end + end + -- se richiesta eliminazione, la eseguo + if bToRemove then + EgtRemoveVolZmapPart( EMT.VMILL, i - 1) + table.remove( vVmPart, i) + 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 AdjustTcPosForTool( sTcPos, sTool) + -- solo per posizione T101 + if sTcPos ~= 'T101' then return end + -- solo se presente utensile + if not sTool or not EgtTdbSetCurrTool( sTool) then return end + local bIsMill = ( EgtTdbGetCurrToolParam( MCH_TP.TYPE) ~= MCH_TF.MORTISE) + local TcpId = EgtGetTcPosId( sTcPos) + local GrpId = EgtGetFirstNameInGroup( TcpId, 'T1') + if GrpId and EgtGetType( GrpId) == GDB_TY.GROUP then + local frGrp = EgtGetGroupGlobFrame( GrpId) + if bIsMill then + if abs( frGrp:getVersZ():getZ()) < 0.5 then + EgtRotate( GrpId, frGrp:getOrigin(), Y_AX(), -90, GDB_RT.GLOB) + EgtMove( GrpId, Vector3d( 0, 0, 90), GDB_RT.GLOB) + end + else + if abs( frGrp:getVersZ():getZ()) > 0.5 then + EgtRotate( GrpId, frGrp:getOrigin(), Y_AX(), 90, GDB_RT.GLOB) + EgtMove( GrpId, Vector3d( 0, 0, -90), GDB_RT.GLOB) + 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..78790eb --- /dev/null +++ b/Essetre-WALL.mlse @@ -0,0 +1,67 @@ +-- Special Operations macchina Essetre-WALL by EgalTech s.r.l. 2023/03/14 + +-- 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 + 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 + -- se foratore orizzontale + elseif EMC.HEAD == 'H5' then + ; + -- se chiodatrice + elseif EMC.HEAD == 'H14' then + ; + -- 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..71da953 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..96cffbe 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..d55de91 --- /dev/null +++ b/Scripts/SetUp.lua @@ -0,0 +1,208 @@ +-- 2023/03/14 +-- Gestione attrezzaggio per Essetre-Wall con caso speciale fresa possibile anche su T101. + +-- 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 = "T1", Head = "H1", Group = "G1"}, + {Pos = "Pos2", TcPos = "T2", Head = "H1", Group = "G1"}, + {Pos = "Pos3", TcPos = "T3", Head = "H1", Group = "G1"}, + {Pos = "Pos4", TcPos = "T4", Head = "H1", Group = "G1"}, + {Pos = "Pos5", TcPos = "T5", Head = "H1", Group = "G1"}, + {Pos = "Pos6", TcPos = "T6", Head = "H1", Group = "G1"}, + {Pos = "Pos7", TcPos = "T7", Head = "H1", Group = "G1"}, + {Pos = "Pos8", TcPos = "T8", Head = "H1", Group = "G1"}, + {Pos = "Pos9", TcPos = "T9", Head = "H1", Group = "G1"}, + {Pos = "Pos10", TcPos = "T42", Head = "H2", Group = "G2"}, + {Pos = "Pos11", TcPos = "T101", Head = "H3", Group = "G2"}, + {Pos = "Pos12", TcPos = "T201", Head = "H1", Group = "G2"}, + {Pos = "Pos13", TcPos = "T202", Head = "H1", Group = "G2"}, + {Pos = "Pos14", TcPos = "T14", Head = "H14", Group = "G2"}, + {Pos = "Pos15", TcPos = "T301", Head = "H5", Group = "G3"}} + +local UsePositionHead = false + +local function IsInGeomSet( ToolHead, PosHead) + -- speciale per questa macchina + if ToolHead == 'H1' and PosHead == 'H3' then + return true + end + -- standard + 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( STU.HEAD, PositionTable[i].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/Standard.stu b/SetUp/Standard.stu new file mode 100644 index 0000000..37912a6 --- /dev/null +++ b/SetUp/Standard.stu @@ -0,0 +1,17 @@ +; Commento per evitare BOM con UTF-8 +[General] +Pos1=T1 +Pos2=T2;H1;1/0A54F32E-C48D-45DB-8502-953CA94FD7A0/NUTFRAESER_25x130 +Pos3=T3;H1;1/951FD4FC-EB64-44E3-97E0-348DBBD79C68/Smusso45 +Pos4=T4;H1;1/8A2B00DE-C8F3-4AE6-8C51-D9D6FAEC36F6/SPIRAL_FREASER_40x160 +Pos5=T5;H1;1/294F6AD8-E4BE-41BF-ACDA-A9F812413607/Smusso60 +Pos6=T6 +Pos7=T7;H1;1/E51AC36C-31A5-4C27-9517-E3E33AED5604/NUTFRAESER_80X305 +Pos8=T8;H1;1/23052E85-6EED-4FC8-89CF-92AA95F22D2A/NUTFRAESER_20x130 +Pos9=T9 +Pos10=T42;H2;1/6CB00A83-DDCD-49E6-A301-E1A0482615CA/Sageblatt_1000 +Pos11=T101;H1;1/89157C3F-9444-45CE-91B0-391C8AAD8693/WALZENFRAESER_200 +Pos12=T201;H1;1/3AC43952-CC00-44CC-AF54-9C27714C344D/WALZENFRAESER_350X60 +Pos13=T202;H1;1/EF2F6C56-D37D-4AF4-9C5E-8802CDF0F276/WALZENFRAESER_350X20 +Pos14=T14;H14;1/9580BE15-3B48-4903-BBED-F4F0912E0A28/14 +Pos15=T301;H5;1/988C8FE5-70C2-418A-B8EA-53476324D1ED/Bohrer_D35X1800 diff --git a/THolders/ChainSaw.nge b/THolders/ChainSaw.nge new file mode 100644 index 0000000..7ad3b00 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..a9856e0 Binary files /dev/null and b/THolders/MillNoTip.nge differ diff --git a/THolders/MillWeld_110_Con.nge b/THolders/MillWeld_110_Con.nge new file mode 100644 index 0000000..2339dc0 Binary files /dev/null and b/THolders/MillWeld_110_Con.nge differ diff --git a/THolders/MillWeld_110_Cyl.nge b/THolders/MillWeld_110_Cyl.nge new file mode 100644 index 0000000..0a601a2 Binary files /dev/null and b/THolders/MillWeld_110_Cyl.nge differ diff --git a/THolders/MillWeld_210_Cyl.nge b/THolders/MillWeld_210_Cyl.nge new file mode 100644 index 0000000..35876ed Binary files /dev/null and b/THolders/MillWeld_210_Cyl.nge differ diff --git a/THolders/MillWeld_80_Con.nge b/THolders/MillWeld_80_Con.nge new file mode 100644 index 0000000..5a19cf0 Binary files /dev/null and b/THolders/MillWeld_80_Con.nge differ diff --git a/THolders/SawOnH2.nge b/THolders/SawOnH2.nge new file mode 100644 index 0000000..ee48d7a Binary files /dev/null and b/THolders/SawOnH2.nge differ diff --git a/THolders/Standard.nge b/THolders/Standard.nge new file mode 100644 index 0000000..cf86275 Binary files /dev/null and b/THolders/Standard.nge differ diff --git a/THolders/Standard_103.nge b/THolders/Standard_103.nge new file mode 100644 index 0000000..90ecc64 Binary files /dev/null and b/THolders/Standard_103.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..11bef99 Binary files /dev/null and b/Tools/0A54F32E-C48D-45DB-8502-953CA94FD7A0.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..8f518c1 Binary files /dev/null and b/Tools/12CCCF7E-6E46-4253-8463-A5063A77D8F6.nge differ diff --git a/Tools/23052E85-6EED-4FC8-89CF-92AA95F22D2A.nge b/Tools/23052E85-6EED-4FC8-89CF-92AA95F22D2A.nge new file mode 100644 index 0000000..9bff575 Binary files /dev/null and b/Tools/23052E85-6EED-4FC8-89CF-92AA95F22D2A.nge differ diff --git a/Tools/294F6AD8-E4BE-41BF-ACDA-A9F812413607.nge b/Tools/294F6AD8-E4BE-41BF-ACDA-A9F812413607.nge new file mode 100644 index 0000000..85f3612 Binary files /dev/null and b/Tools/294F6AD8-E4BE-41BF-ACDA-A9F812413607.nge differ diff --git a/Tools/39932565-41D4-4489-81D0-38B9835221C4.nge b/Tools/39932565-41D4-4489-81D0-38B9835221C4.nge new file mode 100644 index 0000000..5487b5d Binary files /dev/null and b/Tools/39932565-41D4-4489-81D0-38B9835221C4.nge differ diff --git a/Tools/3AC43952-CC00-44CC-AF54-9C27714C344D.nge b/Tools/3AC43952-CC00-44CC-AF54-9C27714C344D.nge new file mode 100644 index 0000000..7ad4ecf Binary files /dev/null and b/Tools/3AC43952-CC00-44CC-AF54-9C27714C344D.nge differ diff --git a/Tools/6CB00A83-DDCD-49E6-A301-E1A0482615CA.nge b/Tools/6CB00A83-DDCD-49E6-A301-E1A0482615CA.nge new file mode 100644 index 0000000..631c1fa Binary files /dev/null and b/Tools/6CB00A83-DDCD-49E6-A301-E1A0482615CA.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..dd94dc1 Binary files /dev/null and b/Tools/89157C3F-9444-45CE-91B0-391C8AAD8693.nge differ diff --git a/Tools/8A2B00DE-C8F3-4AE6-8C51-D9D6FAEC36F6.nge b/Tools/8A2B00DE-C8F3-4AE6-8C51-D9D6FAEC36F6.nge new file mode 100644 index 0000000..8c3bbf0 Binary files /dev/null and b/Tools/8A2B00DE-C8F3-4AE6-8C51-D9D6FAEC36F6.nge differ diff --git a/Tools/93231EB4-750C-46C3-8E33-8047754B75A6.nge b/Tools/93231EB4-750C-46C3-8E33-8047754B75A6.nge new file mode 100644 index 0000000..194bf0e Binary files /dev/null and b/Tools/93231EB4-750C-46C3-8E33-8047754B75A6.nge differ diff --git a/Tools/951FD4FC-EB64-44E3-97E0-348DBBD79C68.nge b/Tools/951FD4FC-EB64-44E3-97E0-348DBBD79C68.nge new file mode 100644 index 0000000..307d8c3 Binary files /dev/null and b/Tools/951FD4FC-EB64-44E3-97E0-348DBBD79C68.nge differ diff --git a/Tools/9580BE15-3B48-4903-BBED-F4F0912E0A28.nge b/Tools/9580BE15-3B48-4903-BBED-F4F0912E0A28.nge new file mode 100644 index 0000000..fef6858 Binary files /dev/null and b/Tools/9580BE15-3B48-4903-BBED-F4F0912E0A28.nge differ diff --git a/Tools/988C8FE5-70C2-418A-B8EA-53476324D1ED.nge b/Tools/988C8FE5-70C2-418A-B8EA-53476324D1ED.nge new file mode 100644 index 0000000..9369777 Binary files /dev/null and b/Tools/988C8FE5-70C2-418A-B8EA-53476324D1ED.nge differ diff --git a/Tools/9BBDA1F9-8536-485C-83EA-7F5E80DD028C.nge b/Tools/9BBDA1F9-8536-485C-83EA-7F5E80DD028C.nge new file mode 100644 index 0000000..c7415c1 Binary files /dev/null and b/Tools/9BBDA1F9-8536-485C-83EA-7F5E80DD028C.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..f3edd63 Binary files /dev/null and b/Tools/A6CFDA65-DABB-441E-990A-776B5C24C2E4.nge differ diff --git a/Tools/AF6F796B-23C8-4A71-8FBD-8176A27DC715.nge b/Tools/AF6F796B-23C8-4A71-8FBD-8176A27DC715.nge new file mode 100644 index 0000000..4d833dc Binary files /dev/null and b/Tools/AF6F796B-23C8-4A71-8FBD-8176A27DC715.nge differ diff --git a/Tools/D160E7EA-7A45-438E-AB9D-0DF54E173C98.nge b/Tools/D160E7EA-7A45-438E-AB9D-0DF54E173C98.nge new file mode 100644 index 0000000..c2f9b43 Binary files /dev/null and b/Tools/D160E7EA-7A45-438E-AB9D-0DF54E173C98.nge differ diff --git a/Tools/DISCO-59895C4A-B303-471F-BBAA-368A79D50F5D.nge b/Tools/DISCO-59895C4A-B303-471F-BBAA-368A79D50F5D.nge new file mode 100644 index 0000000..b78270c Binary files /dev/null and b/Tools/DISCO-59895C4A-B303-471F-BBAA-368A79D50F5D.nge differ diff --git a/Tools/E4F6E66C-4CF2-4CE3-87AF-78305CEDE59A.nge b/Tools/E4F6E66C-4CF2-4CE3-87AF-78305CEDE59A.nge new file mode 100644 index 0000000..d2d321c Binary files /dev/null and b/Tools/E4F6E66C-4CF2-4CE3-87AF-78305CEDE59A.nge differ diff --git a/Tools/E51AC36C-31A5-4C27-9517-E3E33AED5604.nge b/Tools/E51AC36C-31A5-4C27-9517-E3E33AED5604.nge new file mode 100644 index 0000000..151cb2f Binary files /dev/null and b/Tools/E51AC36C-31A5-4C27-9517-E3E33AED5604.nge differ diff --git a/Tools/EF2F6C56-D37D-4AF4-9C5E-8802CDF0F276.nge b/Tools/EF2F6C56-D37D-4AF4-9C5E-8802CDF0F276.nge new file mode 100644 index 0000000..9469fcf Binary files /dev/null and b/Tools/EF2F6C56-D37D-4AF4-9C5E-8802CDF0F276.nge differ diff --git a/Tools/Tools.data b/Tools/Tools.data new file mode 100644 index 0000000..5ab6ad9 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..ac91924 Binary files /dev/null and b/Tools/Tools.data.bak differ diff --git a/Wall/CutData.lua b/Wall/CutData.lua new file mode 100644 index 0000000..e6bc43e --- /dev/null +++ b/Wall/CutData.lua @@ -0,0 +1,10 @@ +-- CutData.lua by Egaltech s.r.l. 16/02/2021 11:50:31 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local CutData = { + { On = true, Name = 'Cutting1000', Type = 'Standard'} +} + +--------------------------------------------------------------------- +return CutData diff --git a/Wall/DrillData.lua b/Wall/DrillData.lua new file mode 100644 index 0000000..08ae365 --- /dev/null +++ b/Wall/DrillData.lua @@ -0,0 +1,12 @@ +-- DrillData.lua by Egaltech s.r.l. 14/03/2023 09:56:29 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local DrillData = { + { On = true, Name = 'DrillD35', Type = 'Drill'}, + { On = true, Name = 'DrillPockD40', Type = 'Pocket'}, + { On = true, Name = 'DrillPockD25', Type = 'Pocket'} +} + +--------------------------------------------------------------------- +return DrillData diff --git a/Wall/MachiningTypes.ini b/Wall/MachiningTypes.ini new file mode 100644 index 0000000..442c32b --- /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=Nailing + +[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..dc5098a --- /dev/null +++ b/Wall/MillingData.lua @@ -0,0 +1,18 @@ +-- MillingData.lua by Egaltech s.r.l. 14/03/2023 20:41:48 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local MillingData = { + { On = true, Name = 'Spig30x40', Type = 'CleanCorner30'}, + { On = true, Name = 'Spig60x70', Type = 'CleanCorner60'}, + { On = false, Name = 'Milling200x63', Type = 'SideGroove'}, + { On = true, Name = 'Milling200x63', Type = 'Side'}, + { On = true, Name = 'SawM_480', Type = 'SideGroove'}, + { On = true, Name = 'Milling200x63', Type = 'FreeContour'}, + { On = true, Name = 'Milling62x67', Type = 'FreeContour'}, + { On = true, Name = 'Milling25x130', Type = 'FreeContour'}, + { On = true, Name = 'Nailing_14', Type = 'Nailing'} +} + +--------------------------------------------------------------------- +return MillingData diff --git a/Wall/PocketingData.lua b/Wall/PocketingData.lua new file mode 100644 index 0000000..22ddfde --- /dev/null +++ b/Wall/PocketingData.lua @@ -0,0 +1,14 @@ +-- PocketingData.lua by Egaltech s.r.l. 14/03/2023 20:12:19 +-- Gestione dati lavorazioni per Travi + +-- Tabella per definizione modulo +local PocketingData = { + { On = true, Name = 'Svuot200x63', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot62x67', Type = 'OpenPocket'}, + { On = true, Name = 'Svuot62x67', Type = 'Pocket'}, + { On = true, Name = 'Svuot20x50', 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..11a77e5 --- /dev/null +++ b/Wall/SawingData.lua @@ -0,0 +1,10 @@ +-- SawingData.lua by Egaltech s.r.l. 12/11/2020 17:56:03 +-- 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..4687ace --- /dev/null +++ b/Wall/Ts3Data.lua @@ -0,0 +1,235 @@ +-- C:\TechnoEssetre7\EgtData\Essetre-90480023_MW.data + +local Offsets = { + MIN_X=-5070, + MAX_X=0, + MIN_Y=-30000, + MAX_Y=0, + MIN_Z=-1350, + MAX_Z=0, + MIN_B=-135, + MAX_B=135, + MIN_C=-275, + MAX_C=275, + MIN_U=-5840, + MAX_U=-770, + MIN_W=-1220, + MAX_W=0, + MIN_V=0, + MAX_V=90, + MIN_A=-275, + MAX_A=275, + ZERO_X_SAW=-1273.5, + ZERO_Y_SAW=-788.6, + ZERO_Z_SAW=-1032.6, + PIVOT_SAW=163.5, + ZERO_X_MILL=-1278.2, + ZERO_Y_MILL=-1137.4, + ZERO_Z_MILL=-1115.3, + PIVOT_MILL=208, + INTRULLI=1200, + TYPEWORK=1, + ZERO_X_DRILL=-133, + ZERO_Y_DRILL=-1441, + ZERO_Z_DRILL=0, + ZERO_X_NAIL=-1445, + ZERO_Y_NAIL=-756, + ZERO_Z_NAIL=-1184.4, + DELTA_X=0, + DELTA_Y=0, + DELTA_Z=0, + Zzz=1 +} + +local Trave = { + XMIN=10, + XMAX=3500, + YMIN=50, + YMAX=30000, + ZMIN=1, + ZMAX=400, + Zzz=1 +} + +local User = { + VELOCITA_VELOCITARAPIDOFRESE=10000, + VELOCITA_VELOCITA_USCITA_LAMA=20000, + VELOCITA_FEED_ENTRY=5000, + VELOCITA_FEED_EXIT=20000, + NESTING_MATERIAL=1, + NESTING_TYPEEXTERNALOP=1, + NESTING_FROM_BTL=1, + NESTING_ORDINA=1, + NESTING_NOCOMPAT=0, + PROFILES_PROF_SMUSSO=5, + PAUSE_ACTIVE_PAUSE=0, + SAFETY_DISTANCE_ZSAVE=40, + OPTIMIZATIONS_ENABLE_SLICES_F5=0, + OPTIMIZATIONS_LENGTH_MAX_SCRAP_F5=799, + OPTIMIZATIONS_LENGTH_MAX_SCRAP_F5_P5=1350, + OPTIMIZATIONS_ENABLE_SLICES_F6=0, + OPTIMIZATIONS_LENGTH_SLICES=150, + OPTIMIZATIONS_SYMMETRIC_HEADS_PF=0, + OPTIMIZATIONS_RECOVERY_PRINT_ONLY=1, + L056_DISTSICUR=5, + L056_ENTRY_SPLINTER=10, + L056_ACTIVE_AS=1, + L055_ADD_P13=0, + L055_MODSAG=1, + L055_DISTSICUR=20, + L055_ENTRY_SPLINTER=20, + L055_TOLL_W=0, + L055_ACTIVE_AS=1, + L051_FORCE_P4=0, + L050_ATTIVA_CICLO_L050=0, + L050_FORCE_P4=0, + L050_ISOOUTSVUOTA=1, + L050_ADDDEPTH=0, + L050_DIAM_LUNG=1, + L050_USE2HEAD=0, + L053_ISOOUTSVUOTA=2, + L053_DIAM_LUNG=1, + L060_PEN_F2=2, + L060_PEN_F1=2, + L060_ORTHO_WRITER=0, + L060_ORTHO_WRITER_ADD_Y=0, + L060_DISABLE_L060=0, + L060_PEN_POSITION=0, + L101_MANUAL_POSITIONING=0, + L102_MANUAL_POSITIONING=0, + L103_MANUAL_POSITIONING=0, + L103_RID_SCALA_SMUSSO=5, + L103_ADD_WIDTH=0, + L103_ADD_WIDTH_CHAMFER=0, + L106_MANUAL_POSITIONING=0, + L106_RANGE=0, + L106_ADD_WIDTH=0, + L106_ASL=0, + L106_ASL_DEPTH=0, + L138_TOLLERANZA=0, + L052_ATTIVA_CICLO_MASCHIO=2, + L052_RIDLARGL052=0, + L052_REDUCTION=0, + L037_FEED_1=2000, + L037_FEED_2=4000, + L037_FEED_3=3000, + L037_MIN_LENGTH_ROT_AXE_A=130, + L037_TOOL_WIDTH=0, + L034_CHAMFER=0, + L034_FEED_CHAMFER=3000, + L034_PROF_AS=180, + L034_USE_SAW=19, + L034_LENGTH_MIN_DIV=900, + L032_ADD_P13=0, + L032_LENGTH_MIN_DIV=900, + T055_DISTSICURTENON=5, + T055_RIDP11=1, + T055_RIDLARGT055=0, + T055_ACTIVE_AS=1, + T055_ADDP15=0, + T050_REDUCTION=2, + T050_RIDLARGT050=0, + T050_RIDALTET050=0, + T050_FORCE_P4=0, + T050_ATTIVA_CICLO_MASCHIO=0, + T050_FEED_ENTRY=1500, + L040_ADD_P11=1, + L040_ADD_P11_PASS=0, + L040_OFFSET_P1=-1, + L040_OFFSET_P1_MAX_DISTANCE=0, + L040_2_DRILLINGS=0, + L040_TYPEDRILLING=1, + L040_USE2HEAD=0, + L017_ATTIVA_CICLO_MASCHIO=0, + L017_USAMORTASA_TURN=0, + L017_USAMORTASA=0, + L017_USE_SAW=0, + L017_GLOBAL_CUT=0, + L017_P7MAGG90=0, + L017_DIAM_LUNG=1, + L012_ENABLE_180=0, + L012_LIM=1, + L012_WORK_F1=0, + L012_MM_WORK_F1=0, + L012_LENGTH_MIN_DIV=900, + L012_USCITA_COMPLUVIO=0, + L012_ALT_MAX_LAMA=361, + L010_ENABLE_180=0, + L010_LIM=0, + L010_MM_SLICES=150, + L010_LONGITUDINAL_CYCLE=0, + L010_LENGTH_MIN_DIV=900, + L010_ALT_MAX_LAMA=361, + L016_CYCLE_ZPASS=0, + L016_USAMORTASA=0, + L016_LENGTH_MIN_DIV=2000, + L020_DIAM_HOLE=0, + L020_OFFSET_P1=0, + L020_MANUAL_POSITIONING=0, + L020_DIAM_HOLE_INV=0, + L020_DOUBLE_HOLE=1, + L020_ANTISCHEGGIA_LAMA=0, + L020_ALTMAXLAMA=360, + L030_NO_CAT_FIN=1, + L030_AUM_DIM=0, + L030_USE_ONLY_MILLER=0, + L030_PAUSE_PARETI=2, + L030_DELTA_PORTALE=500, + L030_ANTISCHEGGIA_FRESA=0, + L030_ANTISCHEGGIA_LAMA=0, + L030_ANTISCHEGGIA_LIMITE_MINIMO=0, + L030_USE_BIG_MILLER=1, + L030_MAX_HAUTEUR_OUTIL_203=350, + L030_MAX_LARGEUR_OUTIL_203=250, + L030_OFFSET_P1_OUTIL_203=0, + L030_SORMONTO_TASCA=0, + L030_ATTIVA_CICLO_FEMMINA=0, + L030_DISTANCE_FOR_TOOL_TYPE_4=135, + L030_USE_SAW_P4_12=16, + L030_LENGTH_MIN_DIV=900, + L030_OFFSETPIANOCATENA=15, + T010_TYPECUT=0, + T010_LENGHT_SLICES=400, + T010_ADD_EXIT_ORIZZ=26, + T010_ADD_EXIT=26, + T010_DISTSICURCUT=15, + T010_ADD_EXIT_DOLAMA=10, + T010_TRONCA_DOPPIA_PENDENZA=0, + T010_TRONCATURA_CON_G107=1, + T010_DISABILITA_TRONCATURA=0, + T010_DOUBLE_CUT_HALF=0, + T010_ALT_CAMBIO_TRONCATURA_FAST=360, + T010_NO_START_X=0, + T010_DIST_INF_HEAD=110, + T010_ADD_ENTRY_CUT=20, + T010_USACATENA=1, + T010_ALTCATENA=362, + T010_USA_TRUCIOLATORE=1, + T010_OFFSETPIANOCATENA=20, + T010_DISABLE_MILLING_AFTER_DIVISION=0, + T010_SAFETY_DISTANCE=5, + T010_ROT_C_SAW=700, + T010_FEED_ENTRY_SAW=4900, + T010_USASEMPRECATENA=0, + T010_T010ORIZZFINITURA=0, + T010_TAGLLAT=0, + P010_DEPTH=6, + P011_DISTSICURTENON=5, + P011_RIDLARGT055=0, + P011_RIDP11=2, + P011_ACTIVE_AS=1, + L038_ACTIVE_CUT=1, + L036_LENGTH_MIN_DIV=900, + T138_OFFSETTIMBERLAKE=0, + WUP_LAVSOLOEST=1, + T030_LENGTH_MIN_DIV=500, + T030_ANGMAXINF=15, + L013_LENGTH_MIN_DIV=2000, + P003_ALT_MAX_LAMA=440, + P003_OFFSETPIANOCATENA=0, + T080_ALTCATENA=399, + 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..4e31c7e --- /dev/null +++ b/Wall/WallData.lua @@ -0,0 +1,81 @@ +-- WallData.lua by Egaltech s.r.l. 2023/03/16 +-- Raccolta dati generali per Pareti + +EgtOutLog( ' 90480023_MW-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 = 3, -- 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 + HOR_DRILL_Y_SPLIT = -6000, -- quota di split dei fori orizzontali speciali lungo Y (quota di metà tavola) + HOR_DRILL_Y_TABLE = 3500, -- dimensione di riferimento tavola in Y per fori orizzontali speciali lungo Y + HOR_DRILL_YNEG_MAXMIN = -3994.3, -- massimo minimo in Y per fori da Y negativo + HOR_DRILL_LEN = 1500, -- lunghezza della punta per fori orizzontali speciali lungo Y + HOR_DRILL_DIAM = 35, -- diametro della punta per fori orizzontali speciali lungo Y + HOR_DRILL_5AX = false, -- abilita lavorazione dei fori orizzontali (default true) + MINRAWY_HOR_DRILL = 3500, -- dimensione y minima del grezzo per fori orizzontali in vista + MAX_CLEAN_CRN30 = 60, -- massimo spessore per pulitura angolo con fresa 30deg + MAX_CLEAN_CRN60 = 200, -- massimo spessore per pulitura angolo con fresa 70deg + MIN_DIM_ALLOW_CLEAN = 200, -- apertura minima per lavorazione pulitura spigolo + MILL_MAX_DEPTH_AS_MAT = false, -- massimo affondamento frese uguale ad altezza tagliente (max materiale) + MAXDIAM_POCK_CORNER= 81, -- diametro massimo utensile ammesso per tasche con angoli interni + CHECK_MIN_Z_SAW = true, -- controlla la quota minima della lama rispetto alla tavola (default true) + MIN_Z_SAW = -5, -- quota minima rispetto alla tavola (default 0) + RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo + DELTA_X = 0, -- offset in X dal corner di riferimento + DELTA_Y = 0, -- offset in Y dal corner di riferimento + DELTA_Z = 0, -- offset in Z dalla tavola + SIMUL_VIEW_DIR = 3, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE) + ORIG_CORNER = 'TL', -- angolo tavola per origine di battuta (BR (defualt), TR, BL, TL) + NESTING_CORNER = 'TL', -- angolo di origine del grezzo per posizionamento pezzi (BR (defualt), TR, BL, TL) +} + +-- Aggiornamento con dati da TechnoEssetre7 +local sTs3Data = EgtGetStringFromIni( 'Wall', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-90480026.data" +local sData = EgtGetSourceDir().."\\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.Offsets then + WallData.DELTA_X = Machine.Offsets.DELTA_Y or WallData.DELTA_X + WallData.DELTA_Y = Machine.Offsets.DELTA_X or WallData.DELTA_Y + WallData.DELTA_Z = Machine.Offsets.DELTA_Z or WallData.DELTA_Z + end + 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 + 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%