diff --git a/Beam/BeamData.lua b/Beam/BeamData.lua index 1ccc0c5..87d3fa4 100644 --- a/Beam/BeamData.lua +++ b/Beam/BeamData.lua @@ -42,6 +42,7 @@ local BeamData = { 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 @@ -117,6 +118,7 @@ if EgtExistsFile( sData) then 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 + BeamData.MAX_ANGLE_DRILL_CUT = Machine.Offsets.MAX_ANGLE_DRILL_CUT or BeamData.MAX_ANGLE_DRILL_CUT 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 end diff --git a/Common_ONE-PF.NUM.mlpe b/Common_ONE-PF.NUM.mlpe index c228279..bb895b2 100644 --- a/Common_ONE-PF.NUM.mlpe +++ b/Common_ONE-PF.NUM.mlpe @@ -911,7 +911,16 @@ function OnRapid() if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then EmitMoveDataHead( 1, { B=0, S=Speed}) EmitMoveDataHead( 1, { C=EMT.R1, S=Speed}) - EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + EmitMoveDataHead( 1, { Z=dZref, B=dBref, S=Speed}) + EmitMoveDataHead( 1, { B=EMT.R2, S=Speed}) + else + EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + end + if bMoveZbeforeX then EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed}) end @@ -995,7 +1004,15 @@ function OnRapid() if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then EmitMoveDataHead( 1, { B=0, S=Speed}) EmitMoveDataHead( 1, { C=EMT.R1, S=Speed}) - EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + EmitMoveDataHead( 1, { Z=dZref, B=dBref, S=Speed}) + EmitMoveDataHead( 1, { B=EMT.R2, S=Speed}) + else + EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + end if bMoveZbeforeX then EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed}) end @@ -1065,7 +1082,15 @@ function OnRapid() if EMT.HEAD == 'H22' then EmitMoveDataHead( 2, { B=0, S=Speed}) EmitMoveDataHead( 2, { C=EMT.R1, S=Speed}) - EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed}) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + EmitMoveDataHead( 2, { Z=dZref, B=dBref, S=Speed}) + EmitMoveDataHead( 2, { B=EMT.R2, S=Speed}) + else + EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed}) + end if bMoveZbeforeX then EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed}) end @@ -1285,7 +1310,15 @@ function OnRapid() if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then EmitMoveDataHead( 1, { B=0, S=Speed}) EmitMoveDataHead( 1, { C=EMT.R1, S=Speed}) - EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + EmitMoveDataHead( 1, { Z=dZref, B=dBref, S=Speed}) + EmitMoveDataHead( 1, { B=EMT.R2, S=Speed}) + else + EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + end if bMoveZbeforeX then EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed}) end @@ -1374,7 +1407,15 @@ function OnRapid() if EMT.HEAD == 'H12' and abs( PrevR1 - EMT.R1) > 1 and ( abs( HomeC1 - EMT.R1) > 30.1 or abs( HomeB1 - EMT.R2) > 30.1) then EmitMoveDataHead( 1, { B=0, S=Speed}) EmitMoveDataHead( 1, { C=EMT.R1, S=Speed}) - EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + EmitMoveDataHead( 1, { Z=dZref, B=dBref, S=Speed}) + EmitMoveDataHead( 1, { B=EMT.R2, S=Speed}) + else + EmitMoveDataHead( 1, { Z=dZref, B=EMT.R2, S=Speed}) + end if bMoveZbeforeX then EmitMoveDataHead( 1, { Z=EMT.L3, S=Speed}) end @@ -1439,7 +1480,15 @@ function OnRapid() if EMT.HEAD == 'H22' then EmitMoveDataHead( 2, { B=0, S=Speed}) EmitMoveDataHead( 2, { C=EMT.R1, S=Speed}) - EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed}) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + EmitMoveDataHead( 2, { Z=dZref, B=dBref, S=Speed}) + EmitMoveDataHead( 2, { B=EMT.R2, S=Speed}) + else + EmitMoveDataHead( 2, { Z=dZref, B=EMT.R2, S=Speed}) + end if bMoveZbeforeX then EmitMoveDataHead( 2, { Z=EMT.L3, S=Speed}) end diff --git a/Common_ONE-PF.mlpe b/Common_ONE-PF.mlpe index 2c3b4c8..2cce3da 100644 --- a/Common_ONE-PF.mlpe +++ b/Common_ONE-PF.mlpe @@ -1051,7 +1051,15 @@ function OnSimulMoveStart() if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) - SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', dBref, MCH_SIM_STEP.COLLROT) + SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) + else + SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) + end if bMoveZbeforeX then SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID) end @@ -1120,7 +1128,15 @@ function OnSimulMoveStart() if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) - SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', dBref, MCH_SIM_STEP.COLLROT) + SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) + else + SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) + end if bMoveZbeforeX then SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID) end @@ -1192,7 +1208,15 @@ function OnSimulMoveStart() if EMT.HEAD == 'H22' then SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT) - SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT) + -- se movimento di B > di 90°, spezza il movimento in 2 arrivando alla quota Z con B+-90 e poi muove l'ultimo segmento + -- evita collisione con carro X + if EMT.R2 > 91 or EMT.R2 < -91 then + local dBref = EgtClamp( EMT.R2, -91, 91) + SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', dBref, MCH_SIM_STEP.COLLROT) + SimulMoveAxis( 'B2', EMT.R2, MCH_SIM_STEP.COLLROT) + else + SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT) + end if bMoveZbeforeX then SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID) end @@ -1831,16 +1855,163 @@ function ExecUnloading() end end +--------------------------------------------------------------------- +function CheckClamping( sClampName) + nIndexClamp = EgtGetAxisId( sClampName) + local idClampPath = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nIndexClamp, 'CLAMP_CHECK') or GDB_ID.NULL) + local b3ClampingArea = EgtGetBBoxGlob( idClampPath or GDB_ID.NULL, GDB_BB.STANDARD) + -- se non trovo percorso area di clamping, esco subito + if not idClampPath or not EMT.VMILL or not ClampingCoeffMin then + return + end + + local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth) + local idCurveList = {} + local vtIntersPlane + -- piano di interpolazione + 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.EXACT) + local ptPosIntersPlane + if sPosIntersPlane == 'MIN' then + ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane + elseif sPosIntersPlane == 'MAX' then + ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane + end + + local idLoop, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB) + -- se c'è almeno una curva + if idLoop then + for j = 1, nLoopCnt do + local idLoopTemp = idLoop + j - 1 + table.insert( idCurveList, idLoopTemp) + end + end + end + return idCurveList + end + + local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth) + -- test piano frontale + 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, dTotalXLenght + end + return 0 + end + + -- minima area considerata per un corretto pinzaggio + DistZClampToTable = DistZClampToTable or 0 + 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) + local dMinClampingAreaWarn = ( MinJoin * MinZClamping) * ClampingCoeffMin + local dMinClampingAreaErr = ( MinJoin * MinZClamping) * ( ClampingCoeffMin / 3) + + local bError = true + local sWrn, sErr + local bWriteWarnMessage = false + local bWriteErrMessage = false + -- controllo faccia frontale + 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, 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)' + bWriteErrMessage = true + end + end + -- WARNING: pinza meno del minimo richiesto + if dArea and dArea < dMinClampingAreaWarn and not bWriteErrMessage then + sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)' + bWriteWarnMessage = true + end + EgtEmptyGroup( CLAMP_CHECK_GROUP) + EgtEmptyGroup( CLAMP_CHECK_INTERS) + + -- controllo altro lato solo se non sono già in errore + if not bWriteErrMessage then + -- controllo faccia posteriore + 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, 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)' + bWriteErrMessage = true + end + end + -- WARNING: pinza meno del minimo richiesto + if dArea and dArea < dMinClampingAreaWarn and not bWriteWarnMessage and not bWriteErrMessage then + sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)' + bWriteWarnMessage = true + end + EgtEmptyGroup( CLAMP_CHECK_GROUP) + EgtEmptyGroup( CLAMP_CHECK_INTERS) + end + + if bWriteErrMessage then + EmtSetLastError( 1213, sErr, EgtGetEnableUI()) + EgtOutBox( sErr, 'CLAMPING', 'ERROR', 'OK') + EmtSetSimulPause() + elseif bWriteWarnMessage then + EgtOutLog( sWrn) + EgtOutBox( sWrn, 'CLAMPING', 'WARNING', 'OK') + EmtSetSimulPause() + end +end + --------------------------------------------------------------------- function ExecMovePY1( bClose) SimulMoveAxis( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID) SetPY1Light( bClose) + if bClose then + CheckClamping( 'PY1') + end end --------------------------------------------------------------------- function ExecMovePY2( bClose) SimulMoveAxis( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID) SetPY2Light( bClose) + if bClose then + CheckClamping( 'PY2') + end end --------------------------------------------------------------------- diff --git a/Common_ONE-PF.mlse b/Common_ONE-PF.mlse index 9a0c38e..7953cfc 100644 --- a/Common_ONE-PF.mlse +++ b/Common_ONE-PF.mlse @@ -17,6 +17,33 @@ require( 'EmtGenMachining') --------------------------------------------------------------------- ----------------------------------------------------------------------------------------- function OnSpecialGetPrevMachiningOffset() + -- Aggiorno posizione della testa della trave a seguito di movimenti delle pinze non previsti tra le fasi + local function TPosUpdate() + local nClId = EgtGetFirstNameInGroup( EMC.CURRMCHID, 'CL') -- recupero Id del gruppo CL della lavorazione corrente + local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) -- Id del primo gruppo nella lavorazione (P1) + if not nPathId then + EMC.ERR = 12 + EMC.MSG = ' Error : CL group path not found' + return + end + local dAuxMoveCount = EgtGetInfo( nPathId, 'AS#', 'd') or 0 -- numero di movimenti ausiliari + local dTRepos = nil + -- controlla ogni gruppo di movimenti ausiliari + for i = 1, dAuxMoveCount do + local aAuxMove = EgtGetInfo( nPathId, 'AS' .. tostring( i), 'vs') or {} -- array contenete i parametri di ogni gruppo + -- controlla solo i movimenti della testa trave e salva l'ultimo + if aAuxMove[1] == '2' or aAuxMove[1] == '3' then + for j = 2, #aAuxMove do + if aAuxMove[j] == 'T' then + dTRepos = aAuxMove[j+1] + break + end + end + end + end + return dTRepos + end + -- default EMC.ERR = 0 EMC.PREVOFFSX = 0 @@ -26,8 +53,15 @@ function OnSpecialGetPrevMachiningOffset() if IsStartOrRestPhase( EMC.CURRPHASE) then -- recupero la posizione finale della lavorazione precedente local vPrevAx = EmtGetFinalAxesPos( EMC.PREVMCHID) - -- la X (L1) di questa corrisponde alla posizione iniziale della nuova trave, se ne deduce l'offset - EMC.PREVOFFSX = ParkV1 - vPrevAx[1] + -- ricava se e quanto la trave viene spostata tra le due fasi dai movimenti ausiliari e corregge l'offset di fine fase + local dNewTPos = TPosUpdate() + -- se ci sono dei movimenti della testa trave tra le due fasi ricava il delta tra la vecchia e la nuova posizione + if dNewTPos then + EMC.PREVOFFSX = dNewTPos - vPrevAx[1] + -- oppure la X (L1) di questa corrisponde alla posizione iniziale della nuova trave, se ne deduce l'offset + else + EMC.PREVOFFSX = ParkV1 - vPrevAx[1] + end end end end diff --git a/Essetre-PF.nge b/Essetre-PF.nge index 082f90d..1017e91 100644 Binary files a/Essetre-PF.nge and b/Essetre-PF.nge differ diff --git a/Essetre-PFrl.mlde b/Essetre-PFrl.mlde index dfa0c17..d77daec 100644 --- a/Essetre-PFrl.mlde +++ b/Essetre-PFrl.mlde @@ -44,10 +44,10 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.7l1' -PP_NVER = '2.7.12.1' +PP_VER = '2.7l2' +PP_NVER = '2.7.12.2' MIN_MACH_VER = '2.5k1' -MACH_NAME = string.match( EgtGetCurrMachineDir(), "[^\\]+$") -- si ricava il nome della macchina dal direttorio +MACH_NAME = EgtGetCurrMachineName() -- Carico i dati globali local sMachDir = EgtGetCurrMachineDir() @@ -179,6 +179,8 @@ AutoRotMinLen = 0 EstimationRapidMultiplier = 1 ForceToCloseRollersGate = false AggreBlockHaus = false +DistZClampToTable = 5 -- distanza tra la tavola e il punto più basso della morsa +ClampingCoeffMin = nil -- coefficiente di fissaggio, se 0 o nil non fa controllo, per il momento da inizializzare da Ts3Data -- Aggiornamento con dati da TechnoEssetre7 local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PFrl.data" @@ -273,6 +275,7 @@ if EgtExistsFile( sData) then AngTrBHOffs = Machine.Offsets.OFFSETZ_RINV_BH or AngTrBHOffs AngTrBHLen = Machine.Offsets.OFFSETX_RINV_BH or AngTrBHLen if Machine.Offsets.MAX_BACK_CLAMP_5 then MaxBackClamp5 = Machine.Offsets.MAX_BACK_CLAMP_5 end + if Machine.Offsets.COEFF_CLAMP_CHECK then ClampingCoeffMin = Machine.Offsets.COEFF_CLAMP_CHECK end -- aggiustamenti MinY1 = MinV1 + MinDeltaYV MaxY1 = MaxMchY1 @@ -530,7 +533,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', @@ -550,7 +553,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', @@ -857,8 +860,10 @@ local vtMove = Vector3d( 0, ( DeltaTabY - 1170.0), ( DeltaTabZ + 1010.0)) EgtMove( EgtGetFirstNameInGroup( BaseId, 'CONVOYER'), 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( PV1Id, 'SOLID'), vtMove, GDB_RT.GLOB) EgtMove( EgtGetFirstNameInGroup( QV1Id, 'SOLID'), vtMove, GDB_RT.GLOB) diff --git a/UpdateLog.txt b/UpdateLog.txt index de664b0..0e691c4 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,10 @@ ==== Common_ONE-PF Update Log ==== +Versione 2.7l1 (18/12/2025) +-(SIM-GEN) Aggiunto controllo post movimenti ausiliari dell' EMC.PREVOFFSX nella funzione OnSpecialGetPrevMachiningOffset(). Ticket#2727 +-(SIM-GEN) Divisione movimento B in approccio se > 90°. Ticket#2754 +-(SIM) Aggiunta funzione CheckClamping + Versione 2.7k3 (28/11/2025) - (GEN) Prima di andare allo scarico, si aggiunge movimento intermedio dove si aspetta che rulli scarico siano arrivati in posizione. Ticket#2716 diff --git a/Version.lua b/Version.lua index ea400fc..4f476ea 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_ONE-PF', -- nome script PP standard - VERSION = '2.7k3', -- versione script + VERSION = '2.7l1', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel }