diff --git a/Common_PF1250.TPA.mlpe b/Common_PF1250.TPA.mlpe index 3653e10..cd939f1 100644 --- a/Common_PF1250.TPA.mlpe +++ b/Common_PF1250.TPA.mlpe @@ -358,6 +358,7 @@ function OnRawMoveData() EMT.HT = b3Part:getDimY() EMT.ST = b3Part:getDimZ() EMT.HOVM = EgtGetInfo( EMT.RAWID, 'HOVM', 'd') or 0 + EMT.XMINT = b3Part:getMin():getX() EMT.PARTTYPE = 0 local sMaterial = EgtGetInfo( PartId, 'MATERIAL') if sMaterial and sMaterial:find( 'CLT-', 1, true) == 1 then @@ -405,6 +406,7 @@ function OnMachiningStart() EMT.MCHNAME = EgtGetOperationName( EMT.MCHID) EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE) EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) + EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil) EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil) -- se sega a catena, aggiusto subito angolo scelto per asse virtuale A @@ -584,6 +586,15 @@ function OnPathStart() -- primo posizionamento sempre in globale EMT.REFLOC = nil EMT.IPLGL = false + + + -- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto) + EMT.DELTA_LT = 0 + if EMT.MCHPRECUT then + local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0)) + EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0) + end + -- leggo se ancora presa iniziale carrello --EMT.CNT = EgtGetInfo( EMT.PATHID, 'CNT', 'i') --MyOutput( 'CNT='.. tostring( EMT.CNT or 0)) @@ -2231,6 +2242,9 @@ end --------------------------------------------------------------------- function GetV1ToCloseTPA() + if EMT.MCHPRECUT or EMT.MCHCUT then + return false + end local dMaxHeadPos = EMT.MAXMAX[1] + ( EMT.HOVM or 0) - ( EMT.X_OFF or 0) local dMinTailPos = EMT.MAXMIN[1] + EMT.LB + EgtIf( IsStartOrMidPhase( EMT.PHASE), 0, ( EMT.HOVM or 0)) - ( EMT.X_OFF or 0) --MyOutput( string.format( 'V1 MaxHeadPos=%.3f MinTailPos=%.3f BarLen=%.3f HeadOvm=%.3f V1NextPos=%.3f', dMaxHeadPos, dMinTailPos, EMT.LB, ( EMT.HOVM or 0), EMT.V1NEXTPOS)) @@ -2718,8 +2732,8 @@ function EmitParkRoller( dPosT, bSplitCut) local dPosY2 = dPosT + EMT.Y2DELTA local DiffY2 = MyParkY2 - dPosY2 local dMoveY2 = EgtIf( DiffY2 < -0.1, dMoveV2, 0) - local dTryMoveY2 = max( ParkV2 - dPosT - EMT.LT - EMT.HOVM, MinY2 - dPosY2 + 10) - if ( dPosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end + local dTryMoveY2 = max( ParkV2 - dPosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - dPosY2 + 10) + if ( dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and dPosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and dPosY2 + dTryMoveY2 > MinY2) then dMoveY2 = min( dMoveY2, dTryMoveY2) end --MyOutput( string.format( 'PosT=%.3f LT=%.3f PosY2=%.3f V2POS=%.3f', dPosT, EMT.LT, dPosY2, EMT.V2POS)) MDChar.Y2 = dPosY2 + dMoveY2 MDChar.MovType = 2 diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index f96cdd4..0ff263f 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -160,10 +160,10 @@ function OnSimulStart() local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name) if nId then table.insert( EMT.MCODET, nId) - EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4) + EgtOutLog( ' Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4) else nMcdNullCnt = nMcdNullCnt + 1 - EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4) + EgtOutLog( ' Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4) end end if nMcdNullCnt > 0 then @@ -352,6 +352,10 @@ function OnSimulDispositionStart() EMT.LB = b3Bar:getDimX() EMT.LR = b3Raw:getDimX() EMT.LT = b3Part:getDimX() + if b3Part:getMin() then + EMT.XMINT = b3Part:getMin():getX() + ( EgtGetAxisPos( 'T') - EgtGetAxisHomePos( 'T')) + end + EMT.HOVM = EgtGetInfo( nPartRawId or GDB_ID.NULL, 'HOVM', 'd') or 0 EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0 EMT.Y1SPEC = nil -- se vero inizio, assegno solidi per verifica collisione @@ -484,10 +488,12 @@ end --------------------------------------------------------------------- function OnSimulToolSelect( dPosA) + EgtOutLog( '===> ToolSelect : Reset CollisionObj', 4) -- se utensile non definito, è disposizione ed esco if EMT.TOOL == '' then return end -- recupero dati utensile EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE) + EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM) EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES) @@ -575,9 +581,9 @@ function OnSimulToolSelect( dPosA) -- se attivo Collision Check EMT.SAFEDIST = COLL_SAFE_DIST if EMT.COLLOBJ then - local nInd = EgtIf( nSetHead ~= 2, 1001, 1011) + local nInd = 1000 + tonumber( string.sub( EMT.HEAD, 2)) AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd, true) - AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1) + AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 100) for i, Coll in ipairs( EMT.COLLOBJ or {}) do EmtAddCollisionObjEx( i, Coll.Fr, Coll.Ty, Coll.Mv, Coll.P1, Coll.P2, Coll.P3) end @@ -736,8 +742,9 @@ function OnSimulToolDeselect( dPrevA) -- prendo utensile lama su aggregato elseif EMT.NEXTHEAD == 'H22' then -- aggiungo utensile per verifica collisione - AddToolToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011, false) - AddToolHolderToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011 + 1) + local nInd = 1000 + tonumber( string.sub( EMT.NEXTHEAD, 2)) + AddToolToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, nInd, false) + AddToolHolderToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, nInd + 100) -- simulo movimento SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID) SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkSawC2, MCH_SIM_STEP.COLLROT) @@ -746,6 +753,7 @@ end --------------------------------------------------------------------- function OnSimulMachiningStart() + EgtOutLog( '===> Start Machining : ' .. EgtGetName( EMT.MCHID), 4) -- se lavorazione è con gruppo a forare, abilito le altre punte alla lavorazione del VMILL if EMT.HEAD == 'H14' then local OtherTools = EgtGetToolsInCurrSetupPos( 'T121') @@ -754,7 +762,7 @@ function OnSimulMachiningStart() if OtherTools[i] ~= '' and OtherTools[i] ~= EMT.TOOL then EmtAddToolForVmill( OtherTools[i], 'H14', i, EMT.VMILL) -- dichiaro utensile per verifica collisioni - local nInd = 1011 + local nInd = 1000 + tonumber( string.sub( 'H14', 2)) AddToolToCollisionObj( OtherTools[i], 'H14', i, nInd, true) end end @@ -796,6 +804,8 @@ function OnSimulMachiningStart() EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or '' EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true)) EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil) + EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil) + EMT.MCHCUT = ( EMT.MCHUSERNOTES:find( 'Cut;', 1, true) ~= nil) -- recupero TASKID e CUTID della feature lavorata (CUTID va recuperato qui per le pareti) local vId = EgtGetMachiningGeometry() if vId and #vId > 0 and #vId[1] > 0 then @@ -821,9 +831,9 @@ function OnSimulMachiningStart() -- dichiaro utensile per Vmill EmtAddToolForVmill( sDouTool, sDouHead, nDouExit, EMT.VMILL) -- dichiaro utensile per verifica collisioni - local nInd = 1011 + local nInd = 1000 + tonumber( string.sub( sDouHead, 2)) AddToolToCollisionObj( sDouTool, sDouHead, nDouExit, nInd, true) - AddToolHolderToCollisionObj( sDouTool, sDouHead, nDouExit, nInd + 1) + AddToolHolderToCollisionObj( sDouTool, sDouHead, nDouExit, nInd + 100) -- salvo dati EMT.DOU_TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN) EMT.DOU_TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) @@ -840,19 +850,17 @@ function OnSimulMachiningStart() local nSetHead = GetHeadSet( EMT.HEAD) if nSetHead ~= 1 and ( EMT.PREVTOOL_H1 and EMT.PREVHEAD_H1) then local nPrevExit_H1 = 1 - local nInd_H1 = 1001 + local nInd_H1 = 1000 + tonumber( string.sub( EMT.PREVHEAD_H1, 2)) AddToolToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1, true) - AddToolHolderToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1 + 1) + AddToolHolderToCollisionObj( EMT.PREVTOOL_H1, EMT.PREVHEAD_H1, nPrevExit_H1, nInd_H1 + 100) end if nSetHead ~= 2 and ( EMT.PREVTOOL_H2 and EMT.PREVHEAD_H2) then local nPrevExit_H2 = 1 - local nInd_H2 = 1011 + local nInd_H2 = 1000 + tonumber( string.sub( EMT.PREVHEAD_H2, 2)) AddToolToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2, true) - AddToolHolderToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2 + 1) + AddToolHolderToCollisionObj( EMT.PREVTOOL_H2, EMT.PREVHEAD_H2, nPrevExit_H2, nInd_H2 + 100) end if nSetHead ~= 3 and IsHeadExisting( 3) then - local nPrevExit_H3 = 1 - local nInd_H3 = 1001 local sHeadName if EgtGetHeadId( 'H39') then sHeadName = 'H39' @@ -861,8 +869,10 @@ function OnSimulMachiningStart() else EmtSetLastError( 1212, "HEAD not managed") end - AddToolToCollisionObj( nil, sHeadName, nPrevExit_H3, 1001) - AddToolHolderToCollisionObj( nil, sHeadName, nPrevExit_H3, 1002) + local nPrevExit_H3 = 1 + local nInd_H3 = 1000 + tonumber( string.sub( sHeadName, 2)) + AddToolToCollisionObj( nil, sHeadName, nPrevExit_H3, nInd_H3) + AddToolHolderToCollisionObj( nil, sHeadName, nPrevExit_H3, nInd_H3 + 100) end end -- se precedente in doppio ma ora solo testa 1 e non in sicurezza @@ -933,6 +943,17 @@ function OnSimulPathStart() EMT.TO_FALL = true end end + -- dump oggetti di collisione + if DumpCollisionObj then + DumpCollisionObj( ' ==> CollisionObj :', 4) + end + -- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto) + EMT.DELTA_LT = 0 + if EMT.MCHPRECUT then + local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0)) + EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0) + EgtOutLog( 'PreCutDeltaLT='..EgtNumToString( EMT.DELTA_LT, 3), 5) + end end --------------------------------------------------------------------- @@ -1445,10 +1466,10 @@ function OnSimulCollision() return end local Class = '' - if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 then - Class = 'T_'..EMT.HEAD - elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 then - Class = 'TH_'..EMT.HEAD + if EMT.SIMCOBIND > 1000 and EMT.SIMCOBIND < 1099 then + Class = 'T_H'.. tostring( EMT.SIMCOBIND - 1000) + elseif EMT.SIMCOBIND > 1100 and EMT.SIMCOBIND < 1199 then + Class = 'TH_H'..tostring( EMT.SIMCOBIND - 1100) else Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl end @@ -2067,8 +2088,8 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg) local MoveV2 = ParkV2 - PosV2 local DiffY2 = MyParkY2 - PosY2 local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0) - local TryMoveY2 = max( ParkV2 - PosT - EMT.LT, MinY2 - PosY2 + 10) - if ( PosT + EMT.LT < ParkV1 + ExtraParkV and PosT + EMT.LT > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end + local TryMoveY2 = max( ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - PosY2 + 10) + if ( PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID, 'V1', ParkV1, MCH_SIM_STEP.RAPID, 'V2', ParkV2, MCH_SIM_STEP.RAPID, @@ -2301,6 +2322,9 @@ end --------------------------------------------------------------------- function GetV1ToClose() + if EMT.MCHPRECUT or EMT.MCHCUT then + return false + end --EgtOutLog( string.format( 'L1m=%.3f L1M=%.3f V2NP=%.3f LB=%.3f', EMT.MAXMIN[1], EMT.MAXMAX[1], EMT.V2NEXTPOS, EMT.LB)) --EgtOutLog( string.format( 'LB=%.3f LT=%.3f', EMT.LB, EMT.LT or 0)) return ( EMT.MAXMAX[1] <= EMT.V1NEXTPOS + RollCageMin and EMT.MAXMIN[1] + EMT.LB >= EMT.V1NEXTPOS + RollCageMax) diff --git a/Common_PF1250.mlse b/Common_PF1250.mlse index c042c51..8ae4e6c 100644 --- a/Common_PF1250.mlse +++ b/Common_PF1250.mlse @@ -47,6 +47,7 @@ function OnSpecialGetPrevMachiningOffset() -- default EMC.ERR = 0 EMC.PREVOFFSX = 0 + -- se c'è cambio di fase tra le lavorazioni (quindi la precedente è l'ultima della sua fase e la corrente la prima) if EMC.PREVPHASE ~= EMC.CURRPHASE then -- se la fase corrente è di inizio lavorazione di nuova trave @@ -576,6 +577,24 @@ end --------------------------------------------------------------------- function OnPostApplyMachining() + -- Inizializzo codice di errore + EMC.ERR = 0 + -- Verifico se ultima lavorazione della fase + local nNextOpeId = EgtGetNextActiveOperation( EMC.MCHID) + local bMchLast = ( not nNextOpeId or EgtGetOperationPhase( nNextOpeId) ~= EMC.PHASE) -- Agisco sui diversi percorsi della lavorazione + local nPathId = EgtGetFirstInGroup( EgtGetFirstNameInGroup( EMC.MCHID, 'CL') or GDB_ID.NULL) + while nPathId do + -- recupero id del successivo + nPathId = EgtGetNext( nPathId) + -- verifico se ultimo percorso di ultima lavorazione della fase + local bLast = ( bMchLast and ( not nPathId)) + -- se ultimo, elimino ritorno in home + if bLast then EgtRemoveOperationHome( EMC.MCHID) end + end +end + +--------------------------------------------------------------------- +function OnSpecialApplyMachining() EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID) .. ' (' .. tostring( EMC.MCHID) .. ')') @@ -668,7 +687,7 @@ function OnPostApplyMachining() -- verifico se ultimo percorso di ultima lavorazione della fase local bLast = ( bMchLast and ( not nPathId)) -- se ultimo, elimino ritorno in home - if bLast then EgtRemoveOperationHome( EMC.MCHID) end + -- if bLast then EgtRemoveOperationHome( EMC.MCHID) end -- salvo lo stato dei carrelli local OriTPos = EMC.TPOS local OriY1Delta = EMC.Y1DELTA @@ -867,6 +886,12 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload) if not EMC.Y2DELTA then EgtOutLog( ' Warning SPLITTING -> separazione con caduta pezzo') SpecOutputCNT() + -- non funziona ma servirebbe un controllo simile, di modo che non possa avvenire la presenza di un pezzo "FALL" più grande di LEN_VERY_SHORT_PART + --if EMC.LT > LEN_VERY_SHORT_PART then + -- EMC.ERR = 19 + -- EMC.MSG = ' Error SPLIT : Y1 or Y2 not clamped' + -- return false + --end if IsEndPhase( EMC.PHASE + 1) then EgtSetInfo( NextDispId, 'SKIP', '1') local NextOpeId = EgtGetNextOperation( NextDispId) @@ -1201,7 +1226,9 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del WorkTab.dY1DeltaMaxF = min( EMC.LB - MinJoin, MaxY1 + dDistFront + dRollFront + AGG_V) WorkTab.dY2DeltaMinF = max( MinJoin + EMC.HCING + EMC.HOVM, EMC.LB + MinY2 - dMyDistBack - AGG_V - dRollBack) WorkTab.dY2DeltaMaxF = min( dDistFront, EMC.LB - MyMinOther) -- - EMC.TCING - if dY1DeltaMaxSP then WorkTab.dY1DeltaMaxF = min( WorkTab.dY1DeltaMaxF, dY1DeltaMaxSP) end + if dY1DeltaMaxSP and dY1DeltaMaxSP > WorkTab.dY1DeltaMinF then + WorkTab.dY1DeltaMaxF = min( WorkTab.dY1DeltaMaxF, dY1DeltaMaxSP) + end if dY2DeltaMinUL then WorkTab.dY2DeltaMinF = max( WorkTab.dY2DeltaMinF, dY2DeltaMinUL) end WorkTab.dV1PosF = dRollBack WorkTab.bV1CloseF = false diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 6f84540..83283fb 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '3.1b1' -PP_NVER = '3.1.2.1' +PP_VER = '3.1c1' +PP_NVER = '3.1.3.1' MIN_MACH_VER = '2.7d2' MACH_NAME = EgtGetCurrMachineName() diff --git a/UpdateLog.txt b/UpdateLog.txt index fbcced6..d264f11 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,12 @@ ==== Common_PF1250 Update Log ==== +Versione 3.1c1 (12/03/2026) +- (SIM-GEN) Corretto calcolo rimanenza durante ParkRoller. Ticket#2832 +- (SIM) Corretto caricamento geometrie di collisioni. Modificato indice di collisione per una migliore gestione. ATT: MIN_MACH -> 3.1b2 +- (SIM-GEN) Aggiunta OnSpecialApplyMachining per calcolare i carrelli da subito +- Aggiungendo OnSpecialApplyMachining, ora la OnSpecialGetPrevMachiningOffset lavora correttamente. Ticket#2798 +- (SIM-GEN) Solo se dY1DeltaMaxSP > WorkTab.dY1DeltaMinF lo prende in considerazione per il valore di WorkTab.dY1DeltaMaxF Ticket#2798 + Versione 3.1b1 (17/02/2026) - (GEN) Generazione non allineata a simulazione. Ticket#2819 diff --git a/Version.lua b/Version.lua index 29a89c9..6b2672f 100644 --- a/Version.lua +++ b/Version.lua @@ -3,8 +3,8 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '3.1b1', -- versione script - MIN_MACH_VER_PP_COMMON = '2.7k1' -- versione minima kernel + VERSION = '3.1c1', -- versione script + MIN_MACH_VER_PP_COMMON = '3.1b2' -- versione minima kernel } return InfoCommon_STD_PP