278 lines
16 KiB
Lua
278 lines
16 KiB
Lua
-- BeamData.lua by Egaltech s.r.l. 2022/02/06
|
|
-- Raccolta dati generali per Travi
|
|
|
|
EgtOutLog( ' PF1250-BeamData started')
|
|
|
|
-- Tabella per definizione modulo
|
|
local BeamData = {
|
|
RIGHT_LOAD = true, -- flag carico da destra
|
|
SIMUL_VIEW_DIR = 1, -- direzione di vista predefinita per la simulazione (1=NW, 2=SW, 3=NE, 4=SE)
|
|
MIN_WIDTH = 40, -- larghezza minima del grezzo
|
|
MIN_HEIGHT = 40, -- altezza minima del grezzo
|
|
MAX_WIDTH = 1250, -- larghezza massima del grezzo
|
|
MAX_HEIGHT = 300, -- altezza massima del grezzo
|
|
LEN_SHORT_PART = 1200, -- lunghezza massima pezzo piccolo
|
|
LEN_VERY_SHORT_PART = 800, -- lunghezza massima pezzo molto corto (molto probabile lo scarico a caduta)
|
|
MAX_RAW = 26000, -- 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.4, -- 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 = 1680, -- 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 = 185, -- larghezza massima taglio di testa o coda
|
|
MAX_DIM_HTCUT_HBEAM = 185, -- larghezza massima taglio di testa o coda con trave alta
|
|
MIN_DIM_HBEAM = 610, -- 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 = 25, -- riduzione profondità per affondamento verticale in taglio orizzontale
|
|
COLL_SIC = 5, -- distanza di sicurezza per collisioni
|
|
CUT_SIC = 28, -- 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
|
|
CUT_VZ_MIN = -0.484, -- componente limite in Z del versore di un taglio (-61deg)
|
|
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 = 3000, -- 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 = -1, -- dimensione codolo sostegno parti lasciate su contorno libero o archi
|
|
DIM_STRIP_SMALL = 2, -- 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 = 0, -- diametro foro per L20
|
|
MAX_TOOL_LEN_FOR_HOR_MACH = 600, -- 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 = 600, -- massima lunghezza utensile per poter eseguire lavorazioni (forature/svuotature) da dietro (faccia 4)
|
|
MIN_LEN_LAMELLO = 1000, -- lunghezza minima di fessura longitudinale per lavorazione tipo lamello (SideMillAsBlade)
|
|
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)
|
|
DOWN_HEAD = true, -- dichiarazione presenza seconda testa dal basso
|
|
DH_MAX_TOP = 370, -- quota massima raggiungibile dalla testa da sotto dal sotto del pezzo
|
|
KIOTP = 2, -- coefficiente moltiplicativo per attacco/uscita lama tangente anzichè perpendicolare
|
|
MAXDIAM_POCK_CORNER = 30, -- diametro massimo utensile ammesso per tasche con angoli interni
|
|
USE_LONGCUT = true, -- 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 = 5, -- accorciamento taglio di coda avanzato (minimo 1)
|
|
DOUBLE_HEAD_DOVETAIL = true, -- flag abilitazione lavorazione mortase a coda di rondine in doppio
|
|
DOUBLE_HEAD_MORTISE = true, -- flag abilitazione lavorazione mortase in doppio
|
|
DOUBLE_HEAD_DRILLING = true -- flag abilitazione forature in doppio
|
|
}
|
|
|
|
---------------------------------------------------------------------
|
|
-- Aggiornamento con dati da TechnoEssetre7
|
|
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250rl.data"
|
|
local sDataBeam = EgtGetCurrMachineDir().."\\Beam\\Ts3Data.lua"
|
|
if EgtExistsFile( sTs3Data) then
|
|
EgtCopyFile( sTs3Data, sDataBeam)
|
|
local sTs3DataOld = sTs3Data..'.old'
|
|
EgtEraseFile( sTs3DataOld)
|
|
EgtRenameFile( sTs3Data, sTs3DataOld)
|
|
end
|
|
if EgtExistsFile( sDataBeam) then
|
|
local Machine = dofile( sDataBeam)
|
|
if Machine then
|
|
if Machine.Offsets then
|
|
if Machine.Offsets.DOUBLE_HEAD_DOVETAIL then BeamData.DOUBLE_HEAD_DOVETAIL = ( Machine.Offsets.DOUBLE_HEAD_DOVETAIL == 1) end
|
|
if Machine.Offsets.DOUBLE_HEAD_POCKET then BeamData.DOUBLE_HEAD_MORTISE = ( Machine.Offsets.DOUBLE_HEAD_POCKET == 1) end
|
|
if Machine.Offsets.DOUBLE_HEAD_DRILLING then BeamData.DOUBLE_HEAD_DRILLING = ( Machine.Offsets.DOUBLE_HEAD_DRILLING == 1) 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
|
|
-- valori per calcolo massimo utensile caricabile testa sotto
|
|
if Machine.Offsets.PIVOT_T2 then Pivot_T2 = Machine.Offsets.PIVOT_T2 end
|
|
if Machine.Offsets.OFFSETZT2 then DeltaTabT2 = -Machine.Offsets.OFFSETZT2 - ( Pivot_T2 or 170) 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 GetBottomToolMaxTotLen( vtDir)
|
|
local ToolMaxLenH2 = 240
|
|
-- se definito distanza tra naso mandrino e filo tavola, calcolo massima dimensione utensile
|
|
if DeltaTabT2 then
|
|
ToolMaxLenH2 = EgtClamp( DeltaTabT2 - 40, 240, 280)
|
|
end
|
|
if not vtDir or vtDir:getZ() < -0.867 then
|
|
return ToolMaxLenH2
|
|
elseif vtDir:getZ() < -0.707 then
|
|
return ToolMaxLenH2
|
|
else
|
|
return 280
|
|
end
|
|
end
|
|
BeamData.GetBottomToolMaxTotLen = GetBottomToolMaxTotLen
|
|
|
|
---------------------------------------------------------------------
|
|
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' then
|
|
if sBlockedAxis == 'parallel' then
|
|
return 'A1=0'
|
|
elseif sBlockedAxis == 'perpendicular' then
|
|
return 'A1=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 GetSetupInfo( sHead)
|
|
local SetupInfo = {}
|
|
|
|
-- dati comuni
|
|
SetupInfo.bIsCSymmetric = true
|
|
SetupInfo.dCAxisEncumbrance = 180
|
|
SetupInfo.bToolOnAggregate = false
|
|
|
|
-- testa 5 assi da sopra
|
|
if sHead == 'H11' then
|
|
SetupInfo.bIsTopHead = true
|
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
|
SetupInfo.dMaxNegativeAngle = sin( -35)
|
|
-- lama su aggregato testa 5 assi da sopra
|
|
elseif sHead == 'H12' then
|
|
SetupInfo.bIsTopHead = true
|
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
|
SetupInfo.dMaxNegativeAngle = sin( -35)
|
|
-- seconda lama su aggregato testa 5 assi da sopra
|
|
elseif sHead == 'H16' then
|
|
SetupInfo.bIsTopHead = true
|
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
|
SetupInfo.dMaxNegativeAngle = sin( -35)
|
|
-- motosega
|
|
elseif sHead == 'H13' then
|
|
SetupInfo.bIsTopHead = true
|
|
SetupInfo.bIsBottomHead = not SetupInfo.bIsTopHead
|
|
SetupInfo.dMaxNegativeAngle = 0
|
|
-- testa 5 assi da sotto
|
|
elseif sHead == 'H21' then
|
|
SetupInfo.bIsBottomHead = true
|
|
SetupInfo.bIsTopHead = not SetupInfo.bIsBottomHead
|
|
SetupInfo.dMaxPositiveAngle = sin( 25)
|
|
-- lama su aggregato testa 5 assi da sotto
|
|
elseif sHead == 'H22' then
|
|
SetupInfo.bIsBottomHead = true
|
|
SetupInfo.bIsTopHead = not SetupInfo.bIsBottomHead
|
|
SetupInfo.dMaxPositiveAngle = sin( 25)
|
|
end
|
|
|
|
return SetupInfo
|
|
end
|
|
BeamData.GetSetupInfo = GetSetupInfo
|
|
|
|
---------------------------------------------------------------------
|
|
return BeamData
|