-- BeamData.lua by Egaltech s.r.l. 2021/11/10 -- Raccolta dati generali per Travi EgtOutLog( ' ONE-BeamData started') -- Tabella per definizione modulo local BeamData = { RIGHT_LOAD = false, -- flag carico da destra SIMUL_VIEW_DIR = 2, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE) ROT90 = false, -- flag abilitazione rotazione 90 gradi ROT180 = true, -- flag abilitazione rotazione 180 gradi MIN_WIDTH = 40, -- larghezza minima del grezzo MIN_HEIGHT = 40, -- altezza minima del grezzo MAX_WIDTH = 400, -- larghezza massima del grezzo MAX_HEIGHT = 800, -- altezza massima del grezzo LEN_SHORT_PART = 1200, -- lunghezza massima pezzo piccolo LEN_VERY_SHORT_PART = 700, -- lunghezza massima pezzo molto corto (molto probabile lo scarico a caduta) MAX_RAW = 30000, -- massima lunghezza grezzo (deve essere minore di LenTable - RAW_OFFSET) STD_RAW = 14000, -- lunghezza standard della barra di grezzo OVM_HEAD = 10, -- sovramateriale testa OVM_MID = 5.0, -- sovramateriale intermedio (spessore lama) MIN_JOIN_S = 100, -- minima presa pinza per pezzo piccolo MIN_JOIN_L = 450, -- minima presa pinza per pezzo grande MINRAW_S = 980, -- minimo grezzo in coda scaricabile per sezioni piccole MINRAW_L = 1570, -- minimo grezzo in coda scaricabile per sezioni grandi CHAR_EXTRA_DIST = 400, -- distanza aggiuntiva per minimizzare scambi di carrelli MAX_LEN_SCRAP = 150, -- massima lunghezza scarto di coda MAX_LEN_SCRAP_START = 150, -- massima lunghezza scarto di testa MAX_DIM_HTCUT = 175, -- larghezza massima taglio di testa o coda MAX_DIM_HTCUT_HBEAM = -145, -- larghezza massima taglio di testa o coda con trave alta MIN_DIM_HBEAM = 680, -- altezza minima di trave alta OVM_CHAIN_HBEAM = 8, -- sovramateriale per split con sega a catena MAX_DIM_DICE = 155, -- dimensione trasversale massima cubetto MAX_LEN_DICE = 400, -- lunghezza massima cubetto DECR_VERT_CUT = 20, -- riduzione profondità per affondamento verticale in taglio orizzontale COLL_SIC = 5, -- distanza di sicurezza per collisioni CUT_SIC = 40, -- distanza di sicurezza per tagli CUT_EXTRA = 5, -- affondamento extra standard per tagli di lama e fresature CUT_EXTRA_MIN = 2, -- affondamento extra ridotto per tagli di lama e fresature NZ_MINA = -0.6, -- 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.2, -- tolleranza tra diametro foro e diametro punta DRILL_VZ_MIN = - 0.51, -- componente limite in Z del versore di un foro DRILL_VX_MAX = 0.867, -- componente limite in X del versore di un foro sulle facce laterali MAX_ANGLE_DRILL_CUT = 15, -- delta angolo massimo tra foro e taglio che lo attraversa DRILL_OVERLAP = 5, -- sovrapposizione tra due mezze forature MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature MAX_DIST_HTFEA = 50.0, -- massima distanza di feature da testa o coda per essere considerata tale MAX_LEN_HTFEA = 2550.0, -- massima lunghezza di feature di testa o coda LONGCUT_ENDLEN = 1500, -- lunghezza lavoro estremi iniziale e finale LONGCUT_MAXLEN = 4000, -- lunghezza massima sezione di taglio longitudinale MAX_LEN_RIDGELAP_FROM_BOTTOM = 0, -- massima lunghezza ridgelap lavorabile da sotto MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM = 0, -- massima lunghezza ridgelap lavorabile da sotto con trave alta DIM_TO_CENTER_STRIP = 0, -- larghezza minima trave per inserimento codolo nel centro della trave; 0 = automatico DIM_STRIP = 3, -- dimensione codolo sostegno parti lasciate su contorno libero o archi DIM_STRIP_SMALL = 0.1, -- dimensione codolo piccolo (quando le parti sostenute sono sicuramente sulla parte sopra del pezzo) RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split VICE_MINH = 110, -- altezza minima della morsa OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare) USER_HOLE_DIAM = 14, -- diametro foro per L20 MAX_TOOL_LEN_FOR_HOR_MACH = 500, -- massima lunghezza ingombro per poter fare forature (fresature) oltre i 10 gradi dalla verticale DRILL_VZ_MIN_LONG_TOOL = 0.984, -- componente limite per lavorazioni con punta lunga MAX_TOOL_LEN_BACK_HOR_MACH = 500, -- massima lunghezza utensile per poter eseguire lavorazioni (forature/svuotature) da dietro (faccia 4) PRESS_ROLLER = true, -- dichiarazione presenza rulli pressori C_SIMM = true, -- dichiarazione simmetria mensola asse C C_SIMM_ENC = 180, -- ingombro semi-forcella in X da naso mandrino (compresa sicurezza) KIOTP = 6, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare MAXDIAM_POCK_CORNER = 31, -- diametro massimo utensile ammesso per tasche con angoli interni USE_LONGCUT = false, -- per i tagli longitudinali usare solo la lavorazione di lama LongCut PRECUT_HEAD = true, -- flag abilitazione pretaglio grezzo a zero in testa PRECUT_TAIL = true, -- flag abilitazione pretaglio grezzo a zero in coda ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con robabile caduta ADVANCE_TAIL_OFFS = 1, -- accorciamento taglio di coda avanzato (minimo 1) CLAMP5 = false -- presenza pinza speciale per pezzi piccoli } -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-ONE.data" local sData = EgtGetCurrMachineDir().."\\Beam\\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 if Machine.Offsets.CLAMP5 and Machine.Offsets.CLAMP5 >= 1 then BeamData.ADVANCE_TAIL_CUT = false BeamData.CLAMP5 = true end BeamData.MINRAW_S = max( BeamData.MINRAW_S, Machine.Offsets.MINRAW_S or BeamData.MINRAW_S) BeamData.MINRAW_L = max( BeamData.MINRAW_L, Machine.Offsets.MINRAW_L or BeamData.MINRAW_L) BeamData.CUT_EXTRA = Machine.Offsets.CUT_EXTRA or BeamData.CUT_EXTRA BeamData.CUT_EXTRA_MIN = Machine.Offsets.CUT_EXTRA_MIN or BeamData.CUT_EXTRA_MIN BeamData.DIM_STRIP_SMALL = Machine.Offsets.DIM_STRIP_SMALL or BeamData.DIM_STRIP_SMALL BeamData.DIM_TO_CENTER_STRIP = Machine.Offsets.DIM_TO_CENTER_STRIP or BeamData.DIM_TO_CENTER_STRIP BeamData.MAXDIAM_POCK_CORNER = Machine.Offsets.MAXDIAM_POCK_CORNER or BeamData.MAXDIAM_POCK_CORNER if Machine.Offsets.PRECUT_HEAD_DISABLE then BeamData.PRECUT_HEAD = ( Machine.Offsets.PRECUT_HEAD_DISABLE == 0) end if Machine.Offsets.PRECUT_TAIL_DISABLE then BeamData.PRECUT_TAIL = ( Machine.Offsets.PRECUT_TAIL_DISABLE == 0) end BeamData.LONGCUT_ENDLEN = Machine.Offsets.LONGCUT_ENDLEN or BeamData.LONGCUT_ENDLEN BeamData.LONGCUT_MAXLEN = Machine.Offsets.LONGCUT_MAXLEN or BeamData.LONGCUT_MAXLEN BeamData.ADVANCE_TAIL_OFFS = Machine.Offsets.ADVANCE_TAIL_OFFS or BeamData.ADVANCE_TAIL_OFFS BeamData.LEN_VERY_SHORT_PART = Machine.Offsets.LEN_VERY_SHORT_PART or BeamData.LEN_VERY_SHORT_PART BeamData.LEN_SHORT_PART = Machine.Offsets.LEN_SHORT_PART or BeamData.LEN_SHORT_PART BeamData.OVM_MID = Machine.Offsets.OVM_MID or BeamData.OVM_MID if Machine.Offsets.MAX_ANGLE_DRILL_CUT then BeamData.MAX_ANGLE_DRILL_CUT = EgtClamp( Machine.Offsets.MAX_ANGLE_DRILL_CUT, 1, 89) end if Machine.Offsets.ROT90 ~= nil then BeamData.ROT90 = ( Machine.Offsets.ROT90 == 1) end if Machine.Offsets.CUT_SIC then BeamData.CUT_SIC = EgtClamp( Machine.Offsets.CUT_SIC, 15, 50) end if Machine.Offsets.MIN_JOIN_S then BeamData.MIN_JOIN_S = EgtClamp( Machine.Offsets.MIN_JOIN_S, 80, 150) end if Machine.Offsets.MIN_JOIN_L then BeamData.MIN_JOIN_L = EgtClamp( Machine.Offsets.MIN_JOIN_L, 300, 450) end end if Machine.Trave then BeamData.MIN_WIDTH = Machine.Trave.XMIN or BeamData.MIN_WIDTH BeamData.MIN_HEIGHT = Machine.Trave.ZMIN or BeamData.MIN_HEIGHT BeamData.MAX_WIDTH = Machine.Trave.XMAX or BeamData.MAX_WIDTH BeamData.MAX_HEIGHT = Machine.Trave.ZMAX or BeamData.MAX_HEIGHT end if Machine.User then BeamData.OFFSET_DRILL_TENON = Machine.User.L040_OFFSET_P1 or BeamData.OFFSET_DRILL_TENON if Machine.User.OPTIMIZATIONS_ENABLE_SLICES_F5 == 1 then BeamData.MAX_LEN_SCRAP = Machine.User.OPTIMIZATIONS_LENGTH_SLICES or BeamData.MAX_LEN_SCRAP else BeamData.MAX_LEN_SCRAP = 100000 end if Machine.User.OPTIMIZATIONS_ENABLE_SLICES_F6 == 1 then BeamData.MAX_LEN_SCRAP_START = Machine.User.OPTIMIZATIONS_LENGTH_SLICES or BeamData.MAX_LEN_SCRAP_START else BeamData.MAX_LEN_SCRAP_START = 100000 end BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM end end end --------------------------------------------------------------------- local function GetMaxLenRidgeLapFromBottom( dHRaw) if dHRaw < BeamData.MIN_DIM_HBEAM then return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM + 0.01 else return BeamData.MAX_LEN_RIDGELAP_FROM_BOTTOM_HBEAM + 0.01 end end BeamData.GetMaxLenRidgeLapFromBottom = GetMaxLenRidgeLapFromBottom --------------------------------------------------------------------- local function GetSectionCoeff( dW, dH, dL) local SEZ_L = 80000 local SEZ_S = 20000 local LEN_SMALL = 2000 local dSez = dW * dH if dSez <= SEZ_S then return 0.0 elseif dSez < SEZ_L then if dL and dL < LEN_SMALL then dSez = max( 0.6 * dSez, SEZ_S) end local dCoeff = ( dSez - SEZ_S) / ( SEZ_L - SEZ_S) return dCoeff else return 1.0 end end --------------------------------------------------------------------- local function GetMinJoin( dW, dH, dL) local dCoeff = GetSectionCoeff( dW, dH, dL) return ( 1 - dCoeff) * BeamData.MIN_JOIN_S + dCoeff * BeamData.MIN_JOIN_L end BeamData.GetMinJoin = GetMinJoin --------------------------------------------------------------------- local function GetMinUnloadableRaw( dW, dH) local dCoeff = GetSectionCoeff( dW, dH) return ( 1 - dCoeff) * BeamData.MINRAW_S + dCoeff * BeamData.MINRAW_L end BeamData.GetMinUnloadableRaw = GetMinUnloadableRaw --------------------------------------------------------------------- local function GetBlockedAxis( sHead, nToolType, sBlockedAxis) -- lama if nToolType == MCH_TY.SAW_STD or nToolType == MCH_TY.SAW_FLAT then return '' -- sega a catena elseif nToolType == MCH_TY.MORTISE_STD then if sHead == 'H13' or sHead == 'H15' then if sBlockedAxis == 'parallel' then return 'A=0' elseif sBlockedAxis == 'perpendicular' then return 'A=-90' end else return '' end -- fresa elseif nToolType == MCH_TY.MILL_STD or nToolType == MCH_TY.MILL_NOTIP then return '' -- punta elseif nToolType == MCH_TY.DRILL_STD or nToolType == MCH_TY.DRILL_LONG then return '' else return '' end end BeamData.GetBlockedAxis = GetBlockedAxis --------------------------------------------------------------------- local function GetChainSawInitAngs( vtN, vtO, nInd) if abs( vtN:getY()) < 0.5 then return EgtIf( vtO:getY() > 0, 'C=180', 'C=0') else return EgtIf( vtN:getY() > 0, 'C=180', 'C=0') end end BeamData.GetChainSawInitAngs = GetChainSawInitAngs --------------------------------------------------------------------- local function GetSetupInfo( sHead) local SetupInfo = {} -- dati comuni SetupInfo.bIsCSymmetric = true SetupInfo.dCAxisEncumbrance = 180 SetupInfo.bToolOnAggregate = false -- testa 5 assi da sopra if sHead == 'H11' or sHead == 'H21' then SetupInfo.bIsTopHead = true SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead SetupInfo.dMaxNegativeAngle = sin( -45) -- lama su testa 5 assi da sopra elseif sHead == 'H12' or sHead == 'H22' then SetupInfo.bIsTopHead = true SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead SetupInfo.dMaxNegativeAngle = sin( -45) -- motosega 1 elseif sHead == 'H13' or sHead == 'H23' then SetupInfo.bIsTopHead = true SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead SetupInfo.dMaxNegativeAngle = 0 -- motosega 2 elseif sHead == 'H15' then SetupInfo.bIsBottomHead = true SetupInfo.bIsTopHead = not SetupInfo.bIsBottomHead SetupInfo.dMaxPositiveAngle = 0 end return SetupInfo end BeamData.GetSetupInfo = GetSetupInfo --------------------------------------------------------------------- return BeamData