diff --git a/Common-PF1250.TPA.mlpe b/Common-PF1250.TPA.mlpe index c51835f..a22f009 100644 --- a/Common-PF1250.TPA.mlpe +++ b/Common-PF1250.TPA.mlpe @@ -40,14 +40,17 @@ end --------------------------------------------------------------------- function OnProgramStart() + -- aggiungo prefisso per commentae commenti iniziali se la macchina è utilizzata per fare i test + local sPrefixCommentLine = '' ; if IS_TEST_MACHINE or EgtEndsWith( EgtGetCurrMachineDir(), '.TEST') then sPrefixCommentLine = '//' end + -- Intestazioni if EMT.INFO then - MyOutput( '('..EMT.INFO..')') + MyOutput( sPrefixCommentLine..'('..EMT.INFO..')') else MyOutput( '(Program Start)') end - MyOutput( '('.. CSP_INFO..')') - MyOutput( '('.. MACHINE_INFO..')') + MyOutput( sPrefixCommentLine..'('.. CSP_INFO..')') + MyOutput( sPrefixCommentLine..'('.. MACHINE_INFO..')') -- Se modalità test, aggiungo linee per muovere tappeto e alzare la testa (in automatico viene fatto dal main residente) if TEST_USE then @@ -704,7 +707,12 @@ function OnRapid() -- se testa 1 if nHSet == 1 then -- selezione testa (posso muovere X solo a Zmax) - local MaxZ1 = EgtGetAxisMax( 'Z1') + local MyMaxZ1 = EgtGetAxisMax( 'Z1') + -- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti + local bXSpec = EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY)) + EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, S=Speed}) + EmitMoveStartHead( 1) + EmitMoveWaitHead( 1) EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3)) -- se necessario allargo le cabine if RollerParkingNeeded( EMT.HEAD, PrevR1, PrevR2, EMT.R1, EMT.R2) or @@ -712,14 +720,12 @@ function OnRapid() local dPosT = EMT.TPOS or EMT.L1op EmitParkRoller( dPosT, bSplitCut) end - -- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti - local bXSpec = EgtIf( BD.RIGHT_LOAD, ( EMT.L2 > -DeltaTabY), ( EMT.L2 < -DeltaTabY)) if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( PrevR1 - EMT.R1) > 1 or abs( PrevR2 - EMT.R2) > 1) and ( abs( HomeR1 - EMT.R1) > 30.1 or abs( HomeR2 - EMT.R2) > 30.1) then -- se bisogna scrivere tutti gli assi if WriteAllCoordsOnFirstM101 then - EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MaxZ1, B=ParkB1, C=ParkC1, S=Speed}) + EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, B=ParkB1, C=ParkC1, S=Speed}) else - EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MaxZ1, S=Speed}) + EmitMoveDataHead( 1, { X=EgtIf( bXSpec, -DeltaTabY, EMT.L2), Z=MyMaxZ1, S=Speed}) end EmitMoveDataHead( 1, { B=0, S=Speed}) EmitMoveDataHead( 1, { C=EMT.R1, S=Speed}) @@ -1063,6 +1069,7 @@ function OnRapid() local CurrC2 = PrevR1 local dSafeZ2 = EgtGetAxisHomePos( 'Z2') local Speed = EMT.S * EgtIf( EMT.HEAD ~= 'H22', 1, 1.65) + if not EMT.L2p then EMT.L2p = EgtGetAxisHomePos( 'X2') end -- calcolo posizione reale EMT.TCPOSREAL = 'T' .. AdjustTcPos( false, EMT.TCPOS, EMT.R3) -- se utensile cambiato (controllo il reale perchè per aggregato dipende come è stato caricato) @@ -1076,19 +1083,22 @@ function OnRapid() EmitMoveDataHead( 2, { X=SafeX2, Z=-CurrZ2, B=CurrB2, C=CurrC2, S=Speed}) end end + -- scrivo solo se gli assi rotanti sono cambiati EmitMoveDataHead( 2, { Z=-dSafeZ2, S=Speed}) - EmitMoveDataHead( 2, { X=EMT.L2, S=Speed}) + if EMT.L2p > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=ParkMchY2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) + end else -- scrivo solo se gli assi rotanti sono cambiati - if EMT.HEAD == 'H22' and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then - EmitMoveDataHead( 2, { X=EMT.L2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) + if EMT.L2p > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=ParkMchY2, 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.HEAD == 'H22' and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then - EmitMoveDataHead( 2, { X=EMT.L2, Z=-dSafeZ2, B=CurrB2, C=CurrC2, S=Speed}) + if EMT.L2p > ParkMchY2 and ( CurrB2 ~= EMT.R2 or CurrC2 ~= EMT.R1) then + EmitMoveDataHead( 2, { X=ParkMchY2, 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 fb04a58..d3226f4 100644 --- a/Common-PF1250.mlpe +++ b/Common-PF1250.mlpe @@ -120,6 +120,7 @@ function OnSimulStart() { Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'}, { Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'}, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW'}, + { Grp = 'Base', Sub = 'COLLISION', Name = 'CEIL'}, { Grp = 'Z2', Sub = 'COLLISION', Name = 'COL1'}, { Grp = 'Z2', Sub = 'COLLISION', Name = 'CHAIN'}, { Grp = 'Z2', Sub = 'COLLISION', Name = 'COL2'}, @@ -455,6 +456,9 @@ function OnSimulToolSelect( dPosA) if EgtGetHeadId( 'H31') then EgtSetAxisPos( 'X3', ParkX3) end + if EMT.HEAD == 'H12' then + EgtSetAxisPos( 'Z1', MaxZ1Blade) + end EgtResetAxisPos( 'C1') EgtResetAxisPos( 'B1') -- se testa 3 parcheggio la 1 @@ -520,10 +524,14 @@ function OnSimulToolDeselect( dPrevA) if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' and ( EMT.NEXTHEAD ~= 'H22' or not dPrevA) then return end -- deposito utensile EgtOutText( 'Tool change in progress...') - -- recupero il gruppo - local nSetHead = GetHeadSet( EMT.NEXTHEAD) + -- recupero il gruppo attuale e il successivo + local nNextSetHead = GetHeadSet( EMT.NEXTHEAD) + local nSetHead = GetHeadSet( EMT.HEAD) + -- se devo deselezionare testa 3, la mando a parcheggio + if nSetHead == 3 then + SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID) -- per testa gruppo 2 - if nSetHead == 2 and EMT.PREVTCPOS_H2 then + elseif nNextSetHead == 2 and EMT.PREVTCPOS_H2 then -- deposito lama su aggregato testa sotto if EMT.PREVHEAD_H2 == 'H22' then -- simulo movimento @@ -542,7 +550,7 @@ function OnSimulToolDeselect( dPrevA) -- nascondo l'utensile sulla testa EgtSetStatus( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_ST.OFF) -- se testa gruppo 1 - elseif nSetHead == 1 and EMT.PREVTCPOS_H1 then + elseif nNextSetHead == 1 and EMT.PREVTCPOS_H1 then -- deposito utensile fresa if EMT.PREVHEAD_H1 == 'H11' then -- simulo movimento @@ -599,8 +607,6 @@ function OnSimulToolDeselect( dPrevA) EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN) end SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID) - elseif nNextSetHead == 1 then - SimulMoveAxis( 'X3', ParkX3, MCH_SIM_STEP.RAPID) end -- movimento per prendere nuovo utensile -- prendo utensile fresa @@ -901,6 +907,7 @@ function OnSimulMoveStart() local C1Home = EgtGetAxisHomePos( 'C1') local Z1Pos = EgtGetAxisPos( 'Z1') local Z1Home = EgtGetAxisHomePos( 'Z1') + local MyMaxZ1 = EgtGetAxisMax( 'Z1') -- se fresa o lama if EMT.HEAD ~= 'H13' then -- se movimento iniziale da Zmax con lama o fresa @@ -909,7 +916,7 @@ function OnSimulMoveStart() -- in caso di rotazione della lama lontano dalla posizione di home degli assi rotanti if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( C1Pos - EMT.R1) > 1 or abs( B1Pos - EMT.R2) > 1) and ( abs( C1Home - EMT.R1) > 30.1 or abs( B1Home - EMT.R2) > 30.1) then SimulMoveAxis( 'X1', EgtIf( bXSpec, DeltaTabY, EMT.L2), MCH_SIM_STEP.RAPID) - SimulMoveAxes( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT) + SimulMoveAxes( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID) SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT) @@ -947,6 +954,9 @@ function OnSimulMoveStart() local C2Home = EgtGetAxisHomePos( 'C2') local Z2Home = EgtGetAxisHomePos( 'Z2') local X2Home = EgtGetAxisHomePos( 'X2') + local X2Pos = EgtGetAxisPos( 'X2') + local B2Pos = EgtGetAxisPos( 'B2') + local C2Pos = EgtGetAxisPos( 'C2') if EMT.TOOL ~= EMT.PREVTOOL_H2 then if EMT.ZMAX then -- se bisogna scrivere tutti gli assi @@ -958,15 +968,20 @@ function OnSimulMoveStart() end end SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID) - SimulMoveAxis( 'X2', EMT.L2, 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) + end else - if EMT.HEAD == 'H22' then - SimulMoveAxis( 'X2', EMT.L2, 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) end end else - if EMT.HEAD == 'H22' then - SimulMoveAxis( 'X2', EMT.L2, 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) end end if EMT.HEAD == 'H22' then @@ -1022,7 +1037,7 @@ function OnSimulMoveStart() EmtSetLastError( 1208, sErr) end -- se appena sopra inizio, sistemo subito la quota in Z - if EMT.MOVE == 0 and EMT.FLAG == 1 then + if EMT.MOVE == 0 then SimulMoveAxes( 'Z2', EMT.A6, MCH_SIM_STEP.RAPID) end end @@ -1350,13 +1365,14 @@ function ExecMoveZmax( bMchSplit) end -- se testa sopra if nSetHead == 1 then + local MyMaxZ1 = EgtGetAxisMax( 'Z1') -- se fresa o lama if EMT.HEAD ~= 'H13' then if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB) SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT) if ( EMT.HEAD == 'H12' or EMT.HEAD == 'H16') and ( abs( HomeC - CurrC) > 30.1 or abs( HomeB - CurrB) > 30.1) then - SimulMoveAxes( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT) + SimulMoveAxes( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID, 'B1', 0, MCH_SIM_STEP.COLLROT) end if ( not BD.RIGHT_LOAD and EMT.L2 > DeltaTabY) or ( BD.RIGHT_LOAD and EMT.L2 < DeltaTabY) then SimulMoveAxis( 'X1', DeltaTabY, MCH_SIM_STEP.RAPID) @@ -1364,7 +1380,7 @@ function ExecMoveZmax( bMchSplit) SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT) SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT) end - SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID) + SimulMoveAxis( 'Z1', MyMaxZ1, MCH_SIM_STEP.RAPID) -- altrimenti sega a catena else -- salgo in Z sicurezza raddrizzando la B diff --git a/Common-PF1250.mlse b/Common-PF1250.mlse index 59de0cd..9631c7a 100644 --- a/Common-PF1250.mlse +++ b/Common-PF1250.mlse @@ -71,14 +71,14 @@ function OnSpecialGetMaxZ() elseif EMC.HEAD == 'H12' then if vtTp:getX() > 0.3 and vtT:getX() > 0.3 then if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then - EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) + 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 else EMC.MAXZ = ParkZ1 + 1 end elseif bBSameSign and EMC.R1p > 29.9 and EMC.R1p < 180.1 and EMC.R1 > 29.9 and EMC.R1 < 180.1 and EMC.R2p > -10 and EMC.R2 > -10 then - EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) + EMC.MAXZ = MaxZ1Blade - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) elseif bBSameSign and EMC.R1p > -0.1 and EMC.R1p < 180.1 and EMC.R1 > -0.1 and EMC.R1 < 180.1 and EMC.R2p > -10 and EMC.R2 > -10 then local vMZ = {{ Tz=0.85, Ez=440}, { Tz=0.5, Ez=200}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}} EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ) @@ -89,14 +89,14 @@ function OnSpecialGetMaxZ() elseif EMC.HEAD == 'H16' then if vtTp:getX() > 0.3 and vtT:getX() > 0.3 then if bBSameSign and abs( EMC.R1 - EMC.R1p) < 165 then - EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) + 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 else EMC.MAXZ = ParkZ1 + 1 end elseif bBSameSign and EMC.R1p > 29.9 and EMC.R1p < 180.1 and EMC.R1 > 29.9 and EMC.R1 < 180.1 and EMC.R2p > -10 and EMC.R2 > -10 then - EMC.MAXZ = MaxZ1 - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) + EMC.MAXZ = MaxZ1Blade - EgtIf( abs( EMC.R2) < 90.1 and abs( EMC.R2p) < 90.1, 0, 130) elseif bBSameSign and EMC.R1p > -0.1 and EMC.R1p < 180.1 and EMC.R1 > -0.1 and EMC.R1 < 180.1 and EMC.R2p > -10 and EMC.R2 > -10 then local vMZ = {{ Tz=0.85, Ez=440}, { Tz=0.5, Ez=200}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}} EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ) diff --git a/UpdateLog.txt b/UpdateLog.txt index ceb8d98..aded747 100644 --- a/UpdateLog.txt +++ b/UpdateLog.txt @@ -1,9 +1,19 @@ ==== Common_PF1250 Update Log ==== +Versione 2.6d2 (23/04/2024) +- (MLDE-GEN) Aggiunto parametro 'IS_TEST_MACHINE' FACOLTATIVO. Se non esiste o 'false' è macchina standard, se 'true' è una macchina utilizzata per i test Egalware interni +- (GEN) Chiamando la macchina con un nome che termini con '.TEST' si abilita come macchina per test interni, equivalente a settare 'IS_TEST_MACHINE' (che comunque rimane) +- (SIM-GEN) Modificato movimenti testa sotto. Prima si muove in quota 'ParkMchY2' e poi va alla coordinata di lavoro ruotando gli assi +- (SIM) Per lavorazioni in doppio, viene subito scritta la quota Z. La generazione era già corretta. Ticket#1377 +- (GEN) Ripristinato movimento iniziale testa sopra assieme alle pinze. Spostato comando wait dopo primo movimento testa. Ticket#1730 +- (MLDE-SIM-GEN) Aggiunto parametro MaxZ1Blade per differenziare Z massima aggregato lama e altri utensili. +- (SIM) Aggiunto controllo con solido di collisione per verificare di non salire oltre il massimo +- (SIM) Corretta simulazione scambio testa 3 -> testa 1 + Versione 2.6d1 (09/04/2024) - (GEN) Corretto impostazione piano G24 con testa da sotto con aggregato - (SIM-GEN) Corretta posizione prelievo/parcheggio se lama su aggregato da sotto -- (MLDE-SIM-GEN) Aggiunta variabile FACOLTATIVA 'ForceToCloseRollersGate' ( che legge la variabile da TS3 'CHIUDI_RULLI_SCAMBIO') in mlde per forzare chiusura paratie rulli +- (MLDE-SIM-GEN) Aggiunta variabile FACOLTATIVA 'ForceToCloseRollersGate' ( che legge la variabile da TS3 'CHIUDI_PINZE_2_3_SCAMBIO') in mlde per forzare chiusura paratie rulli durante scambio pinze per facilitare passaggio pezzi molto storti. Se non presente chiude solo se necessario. - (GEN) Corretta scrittura lista utensili iniziale M992 per doppia motosega e aggregato lama sotto - (SIM-GEN) Corretto movimento punte lunghe diff --git a/Version.lua b/Version.lua index 9d59079..b1067f0 100644 --- a/Version.lua +++ b/Version.lua @@ -3,7 +3,7 @@ local InfoCommon_STD_PP = { NAME = 'Common_PF1250', -- nome script PP standard - VERSION = '2.6d1', -- versione script + VERSION = '2.6d2', -- versione script MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel }