- aggiunto BeamDataNew

This commit is contained in:
luca.mazzoleni
2025-12-11 18:58:12 +01:00
parent 28756e324e
commit b94fcaf731
4 changed files with 12216 additions and 2 deletions
+11936
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -59,7 +59,7 @@ local BeamData = {
MAXDIAM_POCK_CORNER = 30, -- diametro massimo utensile ammesso per tasche con angoli interni
ADVANCE_TAIL_CUT = true, -- per spostare prima del taglio di separazione il taglio di coda su pezzi corti con probabile caduta
ADVANCE_TAIL_OFFS = 5, -- accorciamento taglio di coda avanzato (minimo 1)
STRATEGIES_CONFIG_FILE = 'Std1.json'
STRATEGIES_CONFIG_FILE = 'Std2.json'
}
-- Aggiornamento con dati da B&W
+278
View File
@@ -0,0 +1,278 @@
-- BeamData.lua by Egalware s.r.l. 2025/12/03
-- Raccolta dati generali per Travi
EgtOutLog( ' KAIROS-BeamData started', 1)
-- Tabella per definizione modulo
local BeamData = {
RIGHT_LOAD = false, -- flag carico da destra
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 = 250, -- larghezza massima del grezzo
MAX_HEIGHT = 620, -- altezza massima del grezzo
MAX_WIDTH2 = 250, -- seconda larghezza massima del grezzo
MAX_HEIGHT2 = 620, -- altezza massima per seconda larghezza massima del grezzo
LEN_SHORT_PART = 1200, -- RENAME lunghezza massima pezzo corto
LEN_VERY_SHORT_PART = 400, -- RENAME 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.4, -- sovramateriale intermedio (spessore lama)
MINRAW_S = 750, -- minimo grezzo in coda scaricabile per sezioni piccole
MINRAW_L = 1070, -- minimo grezzo in coda scaricabile per sezioni grandi
MAX_DIM_HTCUT = 130, -- SOLO DICE larghezza massima taglio di testa o coda
MIN_DIM_HBEAM = 621, -- SOLO DICE altezza minima di trave alta
MAX_DIM_DICE = 110, -- dimensione trasversale massima cubetto
MAX_LEN_DICE = 400, -- SOLO DICE lunghezza massima cubetto
COLL_SIC = 5, -- distanza di sicurezza per collisioni
CUT_SIC = 20, -- distanza di sicurezza per tagli
CUT_EXTRA = 5, -- affondamento extra standard per tagli di lama e fresature
CUT_EXTRA_MIN = 1, -- affondamento extra ridotto per tagli di lama e fresature
MILL_OVERLAP = 5, -- sovrapposizione tra due mezze fresature
LONGCUT_ENDLEN = 600, -- RENAME??lunghezza lavoro estremi iniziale e finale (std=600)
LONGCUT_MAXLEN = 1200, -- RENAME??lunghezza massima sezione di taglio longitudinale
DIM_STRIP = -1, -- dimensione codolo sostegno parti lasciate su contorno libero o archi (-1 = da Q...)
DIM_STRIP_SMALL = 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
VICE_MAXH = 370, -- altezza massima zona pinzaggio orizzontale
USER_HOLE_DIAM = 0, -- diametro foro per L20
}
-- costanti riportate da mlde non necessarie per automatismo (sostituire con GetParameters o simile)
local MldeParameters = {}
MldeParameters.NumericalControl = 'SIEMENS' -- NUM o TPA o NUM_PLUS
MldeParameters.MinY = -823
MldeParameters.MaxY = 520
MldeParameters.MinZ = -298
MldeParameters.MaxZ = 915
MldeParameters.MillOffs = 211.0
MldeParameters.DeltaTabY = 0
MldeParameters.DeltaTabZ = 0
-- Aggiornamento con dati macchina personalizzati
-- TODO sostituire con GetParameters o simile
local sData = EgtGetSourceDir().."EbwData.lua"
if EgtExistsFile( sData) then
local Machine = dofile( sData)
if Machine then
if Machine.Offsets then
if Machine.Offsets.TIPO_CN == 0 then
NumericalControl = 'SIEMENS'
end
if Machine.Offsets.MAX_Y then MldeParameters.MinY = - Machine.Offsets.MAX_Y end
if Machine.Offsets.MIN_Y then MldeParameters.MaxY = - Machine.Offsets.MIN_Y end
if Machine.Offsets.MIN_Z then MldeParameters.MinZ = Machine.Offsets.MIN_Z end
if Machine.Offsets.MAX_Z then MldeParameters.MaxZ = Machine.Offsets.MAX_Z end
if Machine.Offsets.MILL_PIVOT then MldeParameters.MillOffs = - Machine.Offsets.MILL_PIVOT end
if Machine.Offsets.TAB_OFFSET_Y then MldeParameters.DeltaTabY = Machine.Offsets.TAB_OFFSET_Y end
if Machine.Offsets.TAB_OFFSET_Z then MldeParameters.DeltaTabZ = Machine.Offsets.TAB_OFFSET_Z end
end
if Machine.Trave then
BeamData.MIN_WIDTH = Machine.Trave.YMIN or BeamData.MIN_WIDTH
BeamData.MIN_HEIGHT = Machine.Trave.ZMIN or BeamData.MIN_HEIGHT
BeamData.MAX_WIDTH = Machine.Trave.YMAX or BeamData.MAX_WIDTH
BeamData.MAX_HEIGHT = Machine.Trave.ZMAX or BeamData.MAX_HEIGHT
end
if Machine.User then
BeamData.USER_HOLE_DIAM = Machine.User.L020_DIAM_HOLE or BeamData.USER_HOLE_DIAM
end
end
end
---------------------------------------------------------------------
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 == 'H3' 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 nInd == 1 then
return ''
else
return EgtIf( vtN:getY() > 0, 'C=180', 'C=-180')
end
end
BeamData.GetChainSawInitAngs = GetChainSawInitAngs
---------------------------------------------------------------------
local function GetSCC( vtToolDirection, vtEdgeDirection, vtNFace)
local nSCC = MCH_SCC.NONE
if abs( vtToolDirection:getX()) > abs( vtToolDirection:getY()) - GEO.EPS_SMALL then
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
if abs( vtEdgeDirection:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtNFace, Z_AX()) then
nSCC = EgtIf( ( vtToolDirection:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XM, MCH_SCC.ADIR_XP)
else
nSCC = EgtIf( ( vtToolDirection:getX() > -GEO.EPS_SMALL), MCH_SCC.ADIR_XP, MCH_SCC.ADIR_XM)
end
else
-- se il taglio è orizzontale, si gira aggregato lama per facilitare caduta del legno
if abs( vtEdgeDirection:getZ()) < 10 * GEO.EPS_SMALL and not AreSameOrOppositeVectorApprox( vtNFace, Z_AX()) then
nSCC = EgtIf( ( vtToolDirection:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YM, MCH_SCC.ADIR_YP)
else
nSCC = EgtIf( ( vtToolDirection:getY() > -GEO.EPS_SMALL), MCH_SCC.ADIR_YP, MCH_SCC.ADIR_YM)
end
end
return nSCC
end
---------------------------------------------------------------------
-- sAxis può essere AB, C, Z; restituisce direzioni, profondità di estrusione e punti per il controllo precollisione
local function GetPreCollisionData( sAxis, vtC, vtHead)
local PreCollisionData = {}
-- Pivot uguale per tutti; non c'è aggregato quindi non dipende da SCC
-- riferimento vtPivot
-- - vtHead (Z): asse rotazione utensile, guarda il mandrino
-- - vtToolSCC (X): direzione asse C o aggregato
-- - vtEdge (Y): direzione lato, verso in base a X e Z
-- - punto di applicazione: naso mandrino o aggregato
PreCollisionData.vtMovePivot = Vector3d( 0, 0, MldeParameters.MillOffs)
-- carro Z
if sAxis == 'Z' then
PreCollisionData.Directions = { vtDirectionX = Y_AX(), vtDirectionY = Z_AX(), vtDirectionZ = X_AX()}
PreCollisionData.dExtrusionDepth = 300
PreCollisionData.Points = {
Point3d( -150.001, 2209.004, 0),
Point3d( 150.001, 2209.004, 0),
Point3d( 150.001, 2204.955, 0),
Point3d( 194.679, 2204.955, 0),
Point3d( 195.004, 362.996, 0),
Point3d( 149.998, 362.996, 0),
Point3d( 149.998, 324.754, 0),
Point3d( 104.999, 324.754, 0),
Point3d( 104.999, 313.754, 0),
Point3d( -104.999, 313.754, 0),
Point3d( -104.999, 324.754, 0),
Point3d( -149.998, 324.754, 0),
Point3d( -149.998, 362.996, 0),
Point3d( -195.001, 362.996, 0),
Point3d( -194.679, 2204.955, 0),
Point3d( -150.001, 2204.995, 0),
Point3d( -150.001, 2209.004, 0)
}
-- motore (asse A o B)
elseif sAxis == 'AB' then
PreCollisionData.Directions = { vtDirectionX = vtHead ^ vtC, vtDirectionY = vtHead, vtDirectionZ = vtC}
PreCollisionData.dExtrusionDepth = 167
PreCollisionData.Points = {
Point3d( 35.5, -211.06, 0),
Point3d( -35.5, -211.06, 0),
Point3d( -35.5, -198.06, 0),
Point3d( -59.912, -198.06, 0),
Point3d( -60.012, -135.897, 0),
Point3d( -73.033, -135.897, 0),
Point3d( -73.033, -129, 0),
Point3d( -76.679, -129, 0),
Point3d( -94, -99, 0),
Point3d( -94, 36, 0),
Point3d( -79.854, 60.5, 0),
Point3d( -75.544, 60.5, 0),
Point3d( -75.544, 201.158, 0),
Point3d( -46.616, 209.792, 0),
Point3d( -6, 215.5, 0),
Point3d( 6, 215.5, 0),
Point3d( 46.616, 209.792, 0),
Point3d( 75.001, 201.158, 0),
Point3d( 75.001, 60.5, 0),
Point3d( 79.855, 60.5, 0),
Point3d( 94, 36, 0),
Point3d( 94, -99, 0),
Point3d( 76.68, -129, 0),
Point3d( 75.967, -129, 0),
Point3d( 75.967, -136.224, 0),
Point3d( 59.938, -136.224, 0),
Point3d( 59.938, -198.06, 0),
Point3d( 35.5, -198.06, 0),
Point3d( 35.5, -211.06, 0)
}
-- asse C
elseif sAxis == 'C' then
PreCollisionData.Directions = { vtDirectionX = vtC, vtDirectionY = Z_AX(), vtDirectionZ = vtC ^ Z_AX()}
PreCollisionData.dExtrusionDepth = 260
PreCollisionData.Points = {
Point3d( 91.5, 163.55, 0),
Point3d( 92.75, -103.001, 0),
Point3d( 304.669, -103.001, 0),
Point3d( 311.446, -79.727, 0),
Point3d( 318.015, -45.806, 0),
Point3d( 320.875, -2.072, 0),
Point3d( 320.875, 290, 0),
Point3d( 310, 314.5, 0),
Point3d( -110, 314.5, 0),
Point3d( -110, 235, 0),
Point3d( -49.992, 211.022, 0),
Point3d( 19.775, 199.927, 0),
Point3d( 65, 199.927, 0),
Point3d( 77, 190, 0),
Point3d( 77, 163.852, 0),
Point3d( 78, 163.55, 0),
Point3d( 91.5, 163.55, 0)
}
end
return PreCollisionData
end
---------------------------------------------------------------------
local function GetSetupInfo( sHead)
local SetupInfo = {}
-- dati comuni
SetupInfo.bIsCSymmetrical = false
SetupInfo.dCAxisEncumbrance = 180
SetupInfo.dCAxisSideEncumbrance = 200
SetupInfo.bToolOnAggregate = false
SetupInfo.vtRotationAxisC = EgtGetAxisDir( 'C')
SetupInfo.vtRotationAxisAB = EgtGetAxisDir( 'B')
-- testa 5 assi da sopra
if sHead == 'H1' then
SetupInfo.HeadType = { bTop = true, bBottom = false}
SetupInfo.PreferredSide = {}
SetupInfo.GetMinNz = function() return sin( -15) end
SetupInfo.GetPreCollisionData = GetPreCollisionData
SetupInfo.GetSCC = GetSCC
end
return SetupInfo
end
BeamData.GetSetupInfo = GetSetupInfo
---------------------------------------------------------------------
return BeamData
+1 -1
View File
@@ -9,7 +9,7 @@
require( 'EmtGenerator')
EgtEnableDebug( false)
PP_VER = '2.7j1'
PP_VER = '2.7l1'
MIN_MACH_VER = '2.5j1'
EgtOutLog ( '** Saomad-KAIROS '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1)