From 2300b6a148ca23f94b535d283ffe71d066d8ef7b Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 13 Dec 2024 17:20:51 +0100 Subject: [PATCH 01/11] Prima versione ufficiale pubblicata --- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 2947706..34f3798 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6k2_DEV12' -PP_NVER = '2.6.11.2' +PP_VER = '2.6l1' +PP_NVER = '2.6.12.1' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' From 28e0d89a152c384d961e872764a4719a26d3d591 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 13 Dec 2024 17:47:28 +0100 Subject: [PATCH 02/11] Allineamento con common ver.2.6l2 --- Common_PF1250.mlpe | 4 ++-- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index 6b707ac..93c1bf0 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -2589,7 +2589,7 @@ function GetNextChainSawingVirtualAxis( MchId) -- la imposto come lavorazione corrente EgtSetCurrMachining( NextMchId) -- recupero il valore dell'asse virtuale bloccato A - local dPosA = GetCurrMultiDrillVirtualAxis() + local dPosA = GetCurrChainSawingVirtualAxis() -- ripristino la lavorazione corrente if MchId then EgtSetCurrMachining( MchId) @@ -2616,7 +2616,7 @@ function GetNextMultiDrillVirtualAxis( MchId) -- la imposto come lavorazione corrente EgtSetCurrMachining( NextMchId) -- recupero il valore dell'asse virtuale bloccato A - local dPosA = GetCurrChainSawingVirtualAxis() + local dPosA = GetCurrMultiDrillVirtualAxis() -- ripristino la lavorazione corrente if MchId then EgtSetCurrMachining( MchId) diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 34f3798..5b05c6c 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6l1' -PP_NVER = '2.6.12.1' +PP_VER = '2.6l2' +PP_NVER = '2.6.12.2' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index a351473..f63d1a6 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.6l2 (13/12/2024) +- (SIM) Corretta chiamata calcolo asse virtuale + Versione 2.6l1 (13/12/2024) - (SIM) Gestione caricamento utensili in caso di testa con uscita multipla. - (SIM) Corretto errore di collisione per errata simulazione cambio utensile da lama a motosega. diff --git a/Version.lua b/Version.lua index da2326c..3b9b042 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.6l1', -- versione script + VERSION = '2.6l2', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From 4fb3d46beb14a7fddeed3f589fc9601eb56be057 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 17 Dec 2024 11:46:59 +0100 Subject: [PATCH 03/11] Allineamento con common ver. 2.6l5 --- Common_PF1250.mlpe | 10 ++++++---- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 10 ++++++++++ Version.lua | 2 +- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index 93c1bf0..cb4572b 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -648,10 +648,10 @@ function OnSimulToolDeselect( dPrevA) sTool = vTools[1] sTcPos = DefTcPos1 sHead = GetAdjHeadFromTcPos( 1, sTcPos) + -- carico l'utensile + EgtLoadTool( sHead, 1, sTool) + ShowToolInTcPos( DefTcPos1, false) end - -- carico l'utensile - EgtLoadTool( sHead, 1, sTool) - ShowToolInTcPos( DefTcPos1, false) EMT.PREVTOOL_H1 = sTool EMT.PREVHEAD_H1 = sHead EMT.PREVTCPOS_H1 = DefTcPos1 @@ -1487,7 +1487,9 @@ function ExecStartHome() EgtResetAxisPos( 'C1') EgtResetAxisPos( 'B1') -- Testa 2 - EgtSetAxisPos( 'X2', SafeX2) + local _, sHead, _, _, _, _ = FindFirstToolOnHeadSet( 2) + local PosXStart = EgtIf( sHead == 'H22', SafeX2, ParkX2) + EgtSetAxisPos( 'X2', PosXStart) EgtSetAxisPos( 'Z2', MinZ2) EgtResetAxisPos( 'C2') EgtResetAxisPos( 'B2') diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 5b05c6c..1516bcd 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6l2' -PP_NVER = '2.6.12.2' +PP_VER = '2.6l3' +PP_NVER = '2.6.12.3' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index f63d1a6..be03ac3 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,15 @@ ==== Common_PF1250 Update Log ==== +Versione 2.6l5 (17/12/2024) +- (SIM) Corretta posizione iniziale testa 2. Ticket#2228 + +Versione 2.6l4 (16/12/2024) +- (SIM-GEN) In MLSE ripristinati vecchi valori indici calcolo Z massima. In alcuni casi peggioravano la situazione. + +Versione 2.6l3 (16/12/2024) +- (SIM) Corretto scarico utensile se aggregato. Se non presente utensile di default, non seleziona nulla. +- (SIM-GEN) In MLSE ritoccati indici calcolo Z massima. Ticket#2210 + Versione 2.6l2 (13/12/2024) - (SIM) Corretta chiamata calcolo asse virtuale diff --git a/Version.lua b/Version.lua index 3b9b042..85b6f26 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.6l2', -- versione script + VERSION = '2.6l5', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From 25e3b36d1bb82e23f73e3a34df6ba1b0f8033703 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Wed, 18 Dec 2024 17:06:43 +0100 Subject: [PATCH 04/11] Allineamento con common ver.2.6l6 --- Common_PF1250.TPA.mlpe | 16 ++++++++-------- Common_PF1250.mlpe | 13 +++++++------ Essetre-PF1500MAXrl-3T.mlde | 5 +++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 5 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Common_PF1250.TPA.mlpe b/Common_PF1250.TPA.mlpe index 8ef4944..1ab9cef 100644 --- a/Common_PF1250.TPA.mlpe +++ b/Common_PF1250.TPA.mlpe @@ -864,8 +864,8 @@ function OnRapid() EmitParkRoller( dPosT, bSplitCut) end -- vado a quota sicurezza in X per permettere rotazione assi rotanti - if ( not EMT.L2pp or ( EMT.L2pp and EMT.L2pp > ParkMchY2)) and ( ParkB2 ~= EMT.R2 or ParkC2 ~= EMT.R1) then - EmitMoveDataHead( 2, { X=ParkMchY2, Z=ParkZ2, B=ParkB2, C=ParkC2, S=Speed}) + if ( not EMT.L2pp or ( EMT.L2pp and EMT.L2pp > SafeX2RotAxis)) and ( ParkB2 ~= EMT.R2 or ParkC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=ParkZ2, B=ParkB2, C=ParkC2, S=Speed}) end -- scrivo solo se gli assi rotanti sono cambiati if EMT.HEAD == 'H22' and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then @@ -1200,20 +1200,20 @@ function OnRapid() end -- scrivo solo se gli assi rotanti sono cambiati EmitMoveDataHead( 2, { Z=-dSafeZ2, S=Speed}) - if EMT.L2pp > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then - EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) + if EMT.L2pp > SafeX2RotAxis and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) end else -- scrivo solo se gli assi rotanti sono cambiati - if EMT.L2pp > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then - EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) + if EMT.L2pp > SafeX2RotAxis and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) end end -- se stesso utensile vado già alla X di lavoro else -- scrivo solo se gli assi rotanti sono cambiati - if EMT.ZMAX and EMT.L2pp > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then - EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) + if EMT.ZMAX and EMT.L2pp > SafeX2RotAxis and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=SafeX2RotAxis, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) end end -- scrivo solo se gli assi rotanti sono cambiati diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index cb4572b..e9d1489 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -1100,8 +1100,8 @@ function OnSimulMoveStart() end SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID) -- Porto la X alla giusta quota - if X2Pos > ParkMchY2 and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then - SimulMoveAxis( 'X2', ParkMchY2, MCH_SIM_STEP.RAPID) + if X2Pos > SafeX2RotAxis and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then + SimulMoveAxis( 'X2', SafeX2RotAxis, MCH_SIM_STEP.RAPID) end end else @@ -1110,8 +1110,8 @@ function OnSimulMoveStart() SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID) end -- Porto la X alla giusta quota - if EMT.ZMAX and X2Pos > ParkMchY2 and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then - SimulMoveAxis( 'X2', ParkMchY2, MCH_SIM_STEP.RAPID) + if EMT.ZMAX and X2Pos > SafeX2RotAxis and ( B2Pos ~= EMT.R2 or C2Pos ~= EMT.R1) then + SimulMoveAxis( 'X2', SafeX2RotAxis, MCH_SIM_STEP.RAPID) end end if EMT.HEAD == 'H22' then @@ -1499,11 +1499,12 @@ end function ExecMoveHome( bNearV, bMchSplit) -- risalita a Zmax ExecMoveZmax( bMchSplit, true) - -- se testa sotto e macchian a 3 teste e gruppo truciolatore a 4 assi + -- se testa sotto e macchina a 3 teste if GetHeadSet( EMT.HEAD) == 2 and IsHeadExisting( 3) then - if not SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) then + if not SimulMoveAxis( 'X2', EgtIf( EMT.HEAD == 'H22', SafeX2, ParkX2), MCH_SIM_STEP.RAPID) then EgtOutLog( 'Error on MoveHome : X2') end + -- se gruppo truciolatore a 4 assi if EgtGetHeadId( 'H39') then if not SimulMoveAxis( 'Z2', ParkInLavZ2, MCH_SIM_STEP.RAPID) then EgtOutLog( 'Error on MoveHome : Z2') diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 1516bcd..53d8aa3 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6l3' -PP_NVER = '2.6.12.3' +PP_VER = '2.6l4' +PP_NVER = '2.6.12.4' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' @@ -143,6 +143,7 @@ MinB2b = -119 MaxB2b = 119 ParkX2 = -100 SafeX2 = -400 +SafeX2RotAxis = -1000 ParkZ2 = 0 ParkInLavZ2 = 200 ParkC2 = -90 diff --git a/UpdateLog.txt b/UpdateLog.txt index be03ac3..bd17e01 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.6l6 (18/12/2024) +- (MLDE-SIM-GEN) Aggiunta variabile 'SafeX2RotAxis' in sostituzionme della 'ParkMchY2' che era usata impropriamente + Versione 2.6l5 (17/12/2024) - (SIM) Corretta posizione iniziale testa 2. Ticket#2228 diff --git a/Version.lua b/Version.lua index 85b6f26..108f76b 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.6l5', -- versione script + VERSION = '2.6l6', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From 93d536ffda677c297c33c5f1c4658bec4d08009d Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 19 Dec 2024 10:31:31 +0100 Subject: [PATCH 05/11] Allineamento con common ver.2.6l7 --- Common_PF1250.mlpe | 2 ++ Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index e9d1489..2444430 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -463,6 +463,8 @@ function OnSimulToolSelect( dPosA) end if EMT.HEAD == 'H12' or EMT.HEAD == 'H16' then EgtSetAxisPos( 'Z1', MaxZ1Blade) + elseif EMT.HEAD == 'H13' then + EgtSetAxisPos( 'Z1', ParkCSawZ1) else EgtSetAxisPos( 'Z1', MaxZ1) end diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 53d8aa3..9cbf43d 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6l4' -PP_NVER = '2.6.12.4' +PP_VER = '2.6l5' +PP_NVER = '2.6.12.5' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index bd17e01..3ce4965 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.6l7 (19/12/2024) +- (SIM) HOTFIX : corretto posizione Z zero alla selezione dell'utensile in caso di motosega. Ticket#2235 + Versione 2.6l6 (18/12/2024) - (MLDE-SIM-GEN) Aggiunta variabile 'SafeX2RotAxis' in sostituzionme della 'ParkMchY2' che era usata impropriamente diff --git a/Version.lua b/Version.lua index 108f76b..34799b1 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.6l6', -- versione script + VERSION = '2.6l7', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From 274c807a012aeae7111fee32d2f9632c9ec200f3 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 9 Jan 2025 11:56:13 +0100 Subject: [PATCH 06/11] Hotfix - Aggiunto nuovo ToolHolder per testa H3 con lama fissa --- Essetre-PF1500MAXrl-3T.ini | 1 + Essetre-PF1500MAXrl-3T.mlde | 4 ++-- THolders/SawH3Std.nge | Bin 0 -> 29799 bytes 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 THolders/SawH3Std.nge diff --git a/Essetre-PF1500MAXrl-3T.ini b/Essetre-PF1500MAXrl-3T.ini index 0ba13f7..33c4d51 100644 --- a/Essetre-PF1500MAXrl-3T.ini +++ b/Essetre-PF1500MAXrl-3T.ini @@ -26,6 +26,7 @@ H21.1:MILL_NOTIP=MillNoTip.nge H21.1:SAW_STD=SawH2Std.nge H21.1:SAW_FLAT=SawH2Flat.nge H22.1=Saw.nge +H38.1=SawH3Std.nge [Machinings] Drilling=1 diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 9cbf43d..a18205b 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6l5' -PP_NVER = '2.6.12.5' +PP_VER = '2.6l6' +PP_NVER = '2.6.12.6' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/THolders/SawH3Std.nge b/THolders/SawH3Std.nge new file mode 100644 index 0000000000000000000000000000000000000000..1e2fd9dbbad7c0f56bb53eb1fa54e5aef1ce6e5f GIT binary patch literal 29799 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 literal 0 HcmV?d00001 From b005447490f01f7673e914d4e0952fdaca9da0c0 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Fri, 17 Jan 2025 09:34:23 +0100 Subject: [PATCH 07/11] Allineamento con common ver 2.7a1 --- Common_PF1250.TPA.mlpe | 9 ++++++--- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 8 ++++++-- Version.lua | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Common_PF1250.TPA.mlpe b/Common_PF1250.TPA.mlpe index 1ab9cef..937fa1c 100644 --- a/Common_PF1250.TPA.mlpe +++ b/Common_PF1250.TPA.mlpe @@ -2843,9 +2843,12 @@ function PreselectNextDiffHead( nMchId, sHead) -- faccio preselezione ( se sono arrivato qui, vuol dire che posso preselezionare) if nNextHSet == 1 then local dNextX - -- se sto lavorando con testa 3, la testa 1 deve restare in home + -- se sto lavorando con testa 3, la testa 1 preselezionata deve restare in home if nHSet == 3 then - dNextX = EgtGetAxisHomePos( 'X1') + dNextX = - EgtGetAxisHomePos( 'X1') + -- se il prossimo utensile su testa 1 è utensile lungo, resta in home + elseif sNextHead == 'H11' and dNextTotLen > LongTool then + dNextX = - EgtGetAxisHomePos( 'X1') -- altrimenti recupero quota X1 (nostro L2) else dNextX = GetStartMachiningXaxis( nNextMchId) @@ -2857,7 +2860,7 @@ function PreselectNextDiffHead( nMchId, sHead) EmitMoveDataHead( 1, { X=dNextX, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sNextTcPos), Fmt=2}) else local nNextTc = GetTcForTopHeadTool( sNextTcPos) - EmitMoveDataHead( 1, { X=dNextX, B=ParkLongB1, C=EgtIf( nPrevTc ~= 2, ParkLongTc1C1, ParkLongTc2C1), TPos=AdjustTcPos( false, sNextTcPos), Fmt=2}) + EmitMoveDataHead( 1, { X=dNextX, B=ParkLongB1, C=EgtIf( nNextTc ~= 2, ParkLongTc1C1, ParkLongTc2C1), TPos=AdjustTcPos( false, sNextTcPos), Fmt=2}) end EmitMoveStartHead( 1) elseif sNextHead == 'H12' or sNextHead == 'H16' then diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index a18205b..edbee90 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.6l6' -PP_NVER = '2.6.12.6' +PP_VER = '2.7a1' +PP_NVER = '2.7.1.1' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index 3ce4965..37c2c00 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,10 +1,14 @@ ==== Common_PF1250 Update Log ==== +Versione 2.7a1 (17/01/2025) +- (GEN) Piccola correzione posizione X in preselezione utensile +- (GEN) Corretto primo punto X preselezione utensile. Ticket#2183 e #2250 + Versione 2.6l7 (19/12/2024) - (SIM) HOTFIX : corretto posizione Z zero alla selezione dell'utensile in caso di motosega. Ticket#2235 Versione 2.6l6 (18/12/2024) -- (MLDE-SIM-GEN) Aggiunta variabile 'SafeX2RotAxis' in sostituzionme della 'ParkMchY2' che era usata impropriamente +- (MLDE-SIM-GEN) Aggiunta variabile 'SafeX2RotAxis' in sostituzione della 'ParkMchY2' che era usata impropriamente Versione 2.6l5 (17/12/2024) - (SIM) Corretta posizione iniziale testa 2. Ticket#2228 @@ -28,7 +32,7 @@ Versione 2.6l1 (13/12/2024) - (SIM-GEN) A fine barra, testa 3 sempre in home - (GEN) Controllo esistenza terzo asse ausiliario - (GEN) Corretto primo movimento in X quando si parte con testa 3. Ticket#2216 -- (GEN) Se su testa 1 c'è un aggregato e si utilizzerà la testa 3, si pscarica aggregato e si prende utensile di default. Ticket#2222 +- (GEN) Se su testa 1 c'è un aggregato e si utilizzerà la testa 3, si scarica aggregato e si prende utensile di default. Ticket#2222 - (GEN) Durante utilizzo della testa 3, non si preselezionano altre teste. Ticket#2220 - (SIM-GEN) Se lavorazione con testa dedicata lama e su testa 1 c'era aggregato, viene scaricato. Ticket#2216 diff --git a/Version.lua b/Version.lua index 34799b1..3a60594 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.6l7', -- versione script + VERSION = '2.7a1', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From d363591acf3127ead8c8b8310513ebd6a60297ca Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 28 Jan 2025 12:46:39 +0100 Subject: [PATCH 08/11] Allineamento con common ver. 2.7a2 --- Common_PF1250.mlse | 4 ++++ Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Common_PF1250.mlse b/Common_PF1250.mlse index fc24a06..3742ea7 100644 --- a/Common_PF1250.mlse +++ b/Common_PF1250.mlse @@ -77,6 +77,8 @@ function OnSpecialGetMaxZ() EMC.MAXZ = MaxZ1Blade - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then EMC.MAXZ = ParkZ1 + 200 + elseif vtTp:getZ() > 0.5 or vtT:getZ() > 0.5 then + EMC.MAXZ = ParkZ1 + 100 else EMC.MAXZ = ParkZ1 + 1 end @@ -95,6 +97,8 @@ function OnSpecialGetMaxZ() EMC.MAXZ = MaxZ1Blade - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) elseif vtTp:getZ() > 0.707 or vtT:getZ() > 0.707 then EMC.MAXZ = ParkZ1 + 200 + elseif vtTp:getZ() > 0.5 or vtT:getZ() > 0.5 then + EMC.MAXZ = ParkZ1 + 100 else EMC.MAXZ = ParkZ1 + 1 end diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index edbee90..e5eff93 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.7a1' -PP_NVER = '2.7.1.1' +PP_VER = '2.7a2' +PP_NVER = '2.7.1.2' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index 37c2c00..5fd3962 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.7a2 (28/01/2025) +- (SIM-GEN) In MLSE aggiunta piccola correzione quota Z in caso di direzione Z tra 0.5 e 0.707. + Versione 2.7a1 (17/01/2025) - (GEN) Piccola correzione posizione X in preselezione utensile - (GEN) Corretto primo punto X preselezione utensile. Ticket#2183 e #2250 diff --git a/Version.lua b/Version.lua index 3a60594..f990c3c 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.7a1', -- versione script + VERSION = '2.7a2', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From a8f069616e5a8f3de146605738002619a6757aa5 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Mon, 3 Feb 2025 09:03:23 +0100 Subject: [PATCH 09/11] Allineamento con common ver. 2.7b1 --- Common_PF1250.mlpe | 5 ++++- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index 2444430..ef5e93f 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -1318,7 +1318,7 @@ function OnSimulMoveEnd() -- ricavo prossimo utensile local sNextTool = GetNextTool( EMT.MCHID) -- vado in home se è ultimo movimento ed è ultima lavorazione - local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) + local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool and nHSet == 3) or ( nHSet == 1 and EMT.TTOTLEN > LongTool) -- eseguo ExecMoveZmax( EMT.MCHSPLIT, bToXhome) EMT.TO_ZMAX = nil @@ -1566,6 +1566,9 @@ function ExecMoveZmax( bMchSplit, bGoToHome) SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT) end SimulMoveAxis( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID) + if bGoToHome then + SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID) + end -- altrimenti sega a catena else -- salgo in Z sicurezza raddrizzando la B diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index e5eff93..35e7422 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.7a2' -PP_NVER = '2.7.1.2' +PP_VER = '2.7b1' +PP_NVER = '2.7.2.1' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index 5fd3962..d15e51d 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.7b1 (03/02/2025) +- (SIM) Corretta simulazioen che non mandava testa in home in caso di utensile lungo. Generazione era già ok. Ticket#2280 + Versione 2.7a2 (28/01/2025) - (SIM-GEN) In MLSE aggiunta piccola correzione quota Z in caso di direzione Z tra 0.5 e 0.707. diff --git a/Version.lua b/Version.lua index f990c3c..513b4e6 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.7a2', -- versione script + VERSION = '2.7b1', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From da6216fdfddc6eda8f4be8c6e0b2b0b45c3a09cd Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 4 Feb 2025 12:32:19 +0100 Subject: [PATCH 10/11] Allineamento con common ver. 2.7b2 --- Common_PF1250.mlse | 2 +- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Common_PF1250.mlse b/Common_PF1250.mlse index 3742ea7..94efe56 100644 --- a/Common_PF1250.mlse +++ b/Common_PF1250.mlse @@ -209,7 +209,7 @@ local SIC_V = 50 -- sicurezza da testa local MIN_ENG_V = 115 -- ingombro asse Z local MIN_ENG_RACK_V = 161 -- ingombro asse Z con cremagliera local MIN_ENG_XZ2_V = 180 -- ingombro assi XZ sotto -local MIN_Z2_FOR_ENG_XZ2_V = 270 -- quota Z2 da cui considerare ingombro assi XZ sotto +local MIN_Z2_FOR_ENG_XZ2_V = 250 + EgtIf( MaxZ2 > 1100, 300, 0) -- quota Z2 da cui considerare ingombro assi XZ sotto local AGG_V = MinDeltaYV -- ingombro rulli pressori + sicurezza local MaxLenSmT = 1500 -- massima lunghezza pezzo scaricato con nastri verdi local DIST_Y1MAX_LOAD = 100 -- distanza carrello Y1 da massimo asse al carico diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 35e7422..4a765af 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.7b1' -PP_NVER = '2.7.2.1' +PP_VER = '2.7b2' +PP_NVER = '2.7.2.2' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index d15e51d..062926f 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.7b2 (04/02/2025) +- (SIM-GEN) Piccola modifica nel calcolo posizione dei rulli di pinzaggio. + Versione 2.7b1 (03/02/2025) - (SIM) Corretta simulazioen che non mandava testa in home in caso di utensile lungo. Generazione era già ok. Ticket#2280 diff --git a/Version.lua b/Version.lua index 513b4e6..8b18806 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.7b1', -- versione script + VERSION = '2.7b2', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel } From b2d607cb14119f60adef168ef633aa19406fb592 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Thu, 6 Feb 2025 08:37:13 +0100 Subject: [PATCH 11/11] Allineamento con common ver. 2.7b3 --- Common_PF1250.mlpe | 2 +- Essetre-PF1500MAXrl-3T.mlde | 4 ++-- UpdateLog.txt | 3 +++ Version.lua | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Common_PF1250.mlpe b/Common_PF1250.mlpe index ef5e93f..021f64b 100644 --- a/Common_PF1250.mlpe +++ b/Common_PF1250.mlpe @@ -575,7 +575,7 @@ function OnSimulToolDeselect( dPrevA) -- visualizzo utensile su TcPos ShowToolInTcPos( EMT.PREVTCPOS_H2, true) -- nascondo l'utensile sulla testa - EgtSetStatus( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_ST.OFF) + EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_MD.HIDDEN) -- se testa gruppo 1 elseif nNextSetHead == 1 and EMT.PREVTCPOS_H1 then -- deposito utensile fresa diff --git a/Essetre-PF1500MAXrl-3T.mlde b/Essetre-PF1500MAXrl-3T.mlde index 4a765af..4e47762 100644 --- a/Essetre-PF1500MAXrl-3T.mlde +++ b/Essetre-PF1500MAXrl-3T.mlde @@ -5,8 +5,8 @@ require( 'EmtGenerator') EgtEnableDebug( false) -PP_VER = '2.7b2' -PP_NVER = '2.7.2.2' +PP_VER = '2.7b3' +PP_NVER = '2.7.2.3' MIN_MACH_VER = '2.5k1' MACH_NAME = 'Essetre-PF1500MAXrl-3T' diff --git a/UpdateLog.txt b/UpdateLog.txt index 062926f..1d02d3b 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,5 +1,8 @@ ==== Common_PF1250 Update Log ==== +Versione 2.7b3 (06/02/2025) +- (SIM) Dopo aver scaricato utensile, si setta nota "HIDDEN" per dichiarare utensile non più sulla testa e non considerare le collisioni. + Versione 2.7b2 (04/02/2025) - (SIM-GEN) Piccola modifica nel calcolo posizione dei rulli di pinzaggio. diff --git a/Version.lua b/Version.lua index 8b18806..e995deb 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.7b2', -- versione script + VERSION = '2.7b3', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel }