From 3265bc8f8cb2af4e550b7346cff66962a923fb05 Mon Sep 17 00:00:00 2001 From: "daniele.nicoli" Date: Wed, 26 Nov 2025 10:29:57 +0100 Subject: [PATCH] - Aggiornamento a Common 2.7k5 - mlde, aggiunti import CLAMP_CHECK - mlde, inizializzato valore default di ClampingCoeffMin = nil - Aggiornamento versione MACH_KERNEL minima necessaria per Common 2.7k4 --- Common_PF1250.mlpe | 62 +++++++++++++++++++++---------------- Common_PF1250.mlse | 2 +- Essetre-PF1500MAXrl-3T.mlde | 10 ++++-- UpdateLog.txt | 10 ++++++ Version.lua | 4 +-- 5 files changed, 57 insertions(+), 31 deletions(-) diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index 18a5146..5a360b4 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -79,6 +79,14 @@ function OnSimulStart() for j = 1, #( vTools or {}) do if vTools[j] ~= '' then EgtLoadTool( vTcPos[i], j, vTools[j]) + -- Aggiunto controllo lunghezza lama minima * 0.9 per ricavare la tolleranza del VMILL + if EgtTdbSetCurrTool(vTools[j]) then -- set utensile corrente + if EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_STD or EgtTdbGetCurrToolParam( MCH_TP.TYPE) == MCH_TY.SAW_FLAT then -- controllo tipo utensile sega + local dCurrSawLen = EgtTdbGetCurrToolParam( MCH_TP.LEN) * 0.9 + -- se non definito o minore del valore precedente aggiorna la tolleranza + EMT.VMILLTOL = EgtIf( not EMT.VMILLTOL or dCurrSawLen < EMT.VMILLTOL, dCurrSawLen, EMT.VMILLTOL) + end + end end end ShowToolInTcPos( vTcPos[i], true) @@ -249,7 +257,7 @@ function OnSimulDispositionStart() -- determino la risoluzione dello Zmap local dTol = 4.71 if EmtGetVMillStep then - dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), 4.71) + dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol) else local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ() if dArea < 0.075e6 then @@ -266,6 +274,7 @@ function OnSimulDispositionStart() dTol = 3.77 end end + dTol = min( dTol, EMT.VMILLTOL or dTol) -- imposto dTol al valore minore tra quello per volume e quello per spessore lama -- creo lo Zmap local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB) if VMillId then @@ -1770,23 +1779,25 @@ function CheckClamping( sClampName) return end - function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, vtOffset) + local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth) local idCurveList = {} local vtIntersPlane -- piano di interpolazione - if sIntersPlane == 'Y' then + if sIntersPlane == 'X' then + vtIntersPlane = X_AX() + elseif sIntersPlane == 'Y' then vtIntersPlane = Y_AX() elseif sIntersPlane == 'Z' then vtIntersPlane = Z_AX() end for i = 1, #EMT.VMILL do - local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.STANDARD) + local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.EXACT) local ptPosIntersPlane if sPosIntersPlane == 'MIN' then - ptPosIntersPlane = b3VMill:getMin() + vtOffset + ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane elseif sPosIntersPlane == 'MAX' then - ptPosIntersPlane = b3VMill:getMax() + vtOffset + ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane end local idLoop, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB) @@ -1801,31 +1812,36 @@ function CheckClamping( sClampName) return idCurveList end - function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, vtOffset) + local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth) -- test piano frontale - local idCurveList = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, vtOffset) + local idCurveList = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth) -- si copia curva intersezione e curva pinza in gruppo di confronto local idFlatSurf, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idCurveList) local idClampSurf = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idClampPath) - + if idFlatSurf then local dTotalArea = 0 + local dTotalXLenght = 0 for k = 1, nFlatSurfCnt do local idTempSurf = idFlatSurf + k - 1 EgtSurfFrIntersect( idTempSurf, idClampSurf) if idTempSurf then dTotalArea = dTotalArea + ceil( EgtSurfArea( idTempSurf) or 0) + local b3BoxIntersectionBox = EgtGetBBoxGlob( idTempSurf, GDB_BB.STANDARD) + if b3BoxIntersectionBox then + dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate + end end end - return dTotalArea + return dTotalArea, dTotalXLenght end return 0 end -- minima area considerata per un corretto pinzaggio DistZClampToTable = DistZClampToTable or 0 - local MinJoin = BD.GetMinJoin( EMT.SB, EMT.HB, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB)) + local MinJoin = BD.GetMinJoin( EMT.HB, EMT.SB, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB)) local MinZClamping = min( b3ClampingArea:getDimZ() + DistZClampToTable, EMT.SB) - DistZClampToTable -- si moltiplica per un coefficiente minimo sotto al quale si da l'errore di pinzaggio ClampingCoeffMin = EgtClamp( ClampingCoeffMin, 0.01, 1) @@ -1837,15 +1853,12 @@ function CheckClamping( sClampName) local bWriteWarnMessage = false local bWriteErrMessage = false -- controllo faccia frontale - local dArea = CalculateIntersectionArea( 'MIN', 'Y', Vector3d( 0, 1, 0)) + local dArea, dXClampedLenght = CalculateIntersectionArea( 'MIN', 'Y', 3) -- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto) if dArea and dArea < dMinClampingAreaErr then - -- solo se pinza almeno 1cm2, si prova un altro slice 5mm più all'interno, se aumenta al doppio non c'è errore (probabilmente siamo in presenza di un displuvio) - if dArea > 1000 then - local dNewArea = CalculateIntersectionArea( 'MIN', 'Y', Vector3d( 0, 5, 0)) - if dNewArea > dArea * 2 then - bError = false - end + -- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore + if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then + bError = false end -- pinzaggio non fattibile, errore if bError then @@ -1864,16 +1877,13 @@ function CheckClamping( sClampName) -- controllo altro lato solo se non sono già in errore if not bWriteErrMessage then -- controllo faccia posteriore - dArea = CalculateIntersectionArea( 'MAX', 'Y', Vector3d( 0, -1, 0)) + dArea = CalculateIntersectionArea( 'MAX', 'Y', 3) -- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto) if dArea and dArea < dMinClampingAreaErr then - -- solo se pinza almeno 1cm2, si prova un altro slice 5mm più all'interno, se aumenta al doppio non c'è errore (probabilmente siamo in presenza di un displuvio) - if dArea > 1000 then - local dNewArea = CalculateIntersectionArea( 'MAX', 'Y', Vector3d( 0, -5, 0)) - if dNewArea > dArea * 2 then - bError = false - end - end + -- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore + if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then + bError = false + end -- pinzaggio non fattibile, errore if bError then sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)' diff --git a/Common_PF1250.mlse b/Common_PF1250.mlse index fd28e04..3c79c71 100644 --- a/Common_PF1250.mlse +++ b/Common_PF1250.mlse @@ -1134,7 +1134,7 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del -- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then - WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF) + WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF + EMC.LT) end end diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 9603c23..a9166a2 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -188,6 +188,9 @@ WriteAllCoordsOnFirstM101 = true ForceToCloseRollersGate = false Motors23KW = true EstimationRapidMultiplier = 1 +DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa +ClampingCoeffMin = 0.8 + -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1500MAXrl-3T.data" @@ -290,6 +293,7 @@ if EgtExistsFile( sDataBeam) then if Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO then ForceToCloseRollersGate = Machine.Offsets.CHIUDI_PINZE_2_3_SCAMBIO == 1 end if Machine.Offsets.WOOD_DENSITY then WoodDensity = Machine.Offsets.WOOD_DENSITY end if Machine.Offsets.MOTORS23KW then Motors23KW = Machine.Offsets.MOTORS23KW == 1 end + if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end -- aggiustamenti MinY1 = MinV1 + MinDeltaYV @@ -675,7 +679,7 @@ local PY1Id = EmtAxis { Stroke = {0, MaxHoOpen}, Home = MaxHoOpen, Geo = 'PY1_AXIS/GEO', - Aux = 'PY1_AXIS/SOLID'} + Aux = {'PY1_AXIS/SOLID', 'PY1_AXIS/CLAMP_CHECK'}} local Y2Id = EmtAxis { Name = 'Y2', Parent = 'Base', @@ -695,7 +699,7 @@ local PY2Id = EmtAxis { Stroke = {0, MaxHoOpen}, Home = MaxHoOpen, Geo = 'PY2_AXIS/GEO', - Aux = 'PY2_AXIS/SOLID'} + Aux = {'PY2_AXIS/SOLID', 'PY2_AXIS/CLAMP_CHECK'}} -- Rulli local V1Id = EmtAxis { Name = 'V1', @@ -1104,8 +1108,10 @@ local vtMove = Vector3d( 0, ( DeltaTabY - 2065.5), ( DeltaTabZ + 1321.0)) EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'..sGeomConvoyer), vtMove, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( Y1Id, 'SOLID'), vtMove, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( PY1Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( PY1Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( Y2Id, 'SOLID'), vtMove, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( PY2Id, 'SOLID'), vtMove, GDB_RT.GLOB) +EgtMove( EgtGetFirstNameInGroup( PY2Id, 'CLAMP_CHECK'), vtMove + Vector3d(0,0,DistZClampToTable), GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( V1Id, 'SOLID'), vtMove, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( V1Id, 'COLLISION'), vtMove, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( PV1Id, 'SOLID'), vtMove, GDB_RT.GLOB) diff --git a/UpdateLog.txt b/UpdateLog.txt index 9a14b14..cf75361 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,15 @@ ==== Common_PF1250 Update Log ==== +Versione 2.7k5 (26/11/2025) +- (SIM) Migliorata funzione CheckClamping, ora il controllo di warning si basa sulla somma delle lunghezze delle aree pinzate + +Versione 2.7k4 (25/11/2025) +- (SIM) Migliorata funzione CheckClamping, ora la sezione rientra di 3 mm + +Versione 2.7k3 (21/11/2025) +- (SIM-GEN) Corretto problema riposizionamento carrelli. Ticket#2704 +- (SIM) Aggiornata risoluzione VMillTol in funzione dello spessore lama + Versione 2.7k2 (19/11/2025) - (SIM-GEN) Con testa H38 si va in home quando testa viene comandata a Zmassima. Ticket#2703_b diff --git a/Version.lua b/Version.lua index d078732..c61db11 100644 --- a/Version.lua +++ b/Version.lua @@ -3,8 +3,8 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.7k2', -- versione script - MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel + VERSION = '2.7k5', -- versione script + MIN_MACH_VER_PP_COMMON = '2.7k1' -- versione minima kernel } return InfoCommon_STD_PP