diff --git a/Common_ONE-PF.mlpe b/Common_ONE-PF.mlpe index e03b8ad..06f020e 100644 --- a/Common_ONE-PF.mlpe +++ b/Common_ONE-PF.mlpe @@ -626,7 +626,11 @@ function OnSimulToolDeselect( dPrevA) EgtSetAxisPos( 'B1', ParkB1) EgtSetAxisPos( 'Z1', MaxZ1) SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID) - LoadNextTool( 1, DefTcPos1) + local sTool, sHead, sTcPos = FindNextToolOnHeadSet( 1, false) + if sTcPos then + LoadNextTool( 1, DefTcPos1) + end + EMT.CHSAW_OUT = nil end elseif HeadIsChainSaw( EMT.PREVHEAD_H2) then -- visualizzo utensile su TcPos @@ -640,16 +644,34 @@ function OnSimulToolDeselect( dPrevA) EgtSetAxisPos( 'B2', ParkB2) EgtSetAxisPos( 'Z2', MaxZ2) SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) - LoadNextTool( 2, DefTcPos2) + local sTool, sHead, sTcPos = FindNextToolOnHeadSet( 2, false) + if sTcPos then + LoadNextTool( 2, DefTcPos2) + end + EMT.CHSAW_OUT = nil end end - -- reset flag sega a catena già depositata - EMT.CHSAW_OUT = nil -- se utensile non cambia e non è sega a catena, esco if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and not HeadIsChainSaw( EMT.NEXTHEAD) then return end -- deposito utensile EgtOutText( 'Tool change in progress...') + -- se prossimo utensile sega a catena, devo mettere in home testa 1 e depositare l'utensile sulla testa 2 o viceversa + + local dHeadSet = GetHeadSet( EMT.PREVHEAD) + if dHeadSet == 1 then + -- visualizzo utensile su TcPos + ShowToolInTcPos( EMT.PREVTCPOS_H1, true) + -- nascondo l'utensile sulla testa + EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H1 or '') or GDB_ID.NULL, GDB_MD.HIDDEN) + else + -- visualizzo utensile su TcPos + ShowToolInTcPos( EMT.PREVTCPOS_H2, true) + -- nascondo l'utensile sulla testa + EgtSetMode( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_MD.HIDDEN) + end + -- breve pausa + EgtPause( 100) end @@ -657,20 +679,9 @@ end function OnSimulMachiningStart() -- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare if HeadIsChainSaw( EMT.HEAD) then - -- se anche precedente con sega a catena ma depositata, devo riprenderla + -- se la precedente ha rimosso la motosega, devo disattivarla, verrà riattivata dopo il movimento dei carrelli if EMT.CHSAW_OUT then - local dPosA = GetCurrChainSawingVirtualAxis() EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN) - OnSimulToolDeselect() - OnSimulToolSelect( dPosA) - elseif ( EMT.HEAD == EMT.PREVHEAD_H2 and EMT.TCPOS == EMT.PREVTCPOS_H2) or EMT.HEAD == EMT.PREVHEAD_H1 then - local dPrevA = EgtGetAxisPos( 'A') - local dPosA = GetCurrChainSawingVirtualAxis() - if abs( dPosA - dPrevA) > 1 then - OnSimulToolDeselect( dPrevA) - EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON) - OnSimulToolSelect( dPosA) - end end end -- salvo dati utensile @@ -738,6 +749,11 @@ function OnSimulMachiningEnd() EMT.DOU_TOOL = nil -- salvo dati utensile local nSetHead = GetHeadSet( EMT.HEAD) + + EMT.PREVTOOL = EMT.TOOL + EMT.PREVHEAD = EMT.HEAD + EMT.PREVTCPOS = EMT.TCPOS + -- se non ho già tolto la sega a catena, aggiorno valori if not EMT.CHSAW_OUT then -- per gruppo testa 1 @@ -941,6 +957,15 @@ function OnSimulMoveStart() if EMT.SPLIT_Y1DELTA then EMT.Y1DELTA = nil end end + -- se anche precedente con sega a catena ma depositata, devo riprenderla + if EMT.CHSAW_OUT then + EgtLoadTool( EMT.HEAD, 1, EMT.TOOL) + ShowToolInTcPos( EMT.TCPOS, false) + local dPosA = GetCurrChainSawingVirtualAxis() + OnSimulToolSelect( dPosA) + EMT.CHSAW_OUT = nil + end + -- se lavorazione split, muovo per riaggancio del carro Y1 if EMT.SPLIT_Y1DELTA and ( EMT.MASK & 1) == 1 then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA @@ -1147,10 +1172,10 @@ function OnSimulMoveEnd() end local bLastRise = EgtGetInfo( EMT.MOVEID, 'LastRise', 'b') - -- se ultimo rapido e motosega, si va in home if bLastRise and HeadIsChainSaw( EMT.HEAD) then - OnSimulToolDeselect() + OnSimulToolDeselect( EMT.R3) + EMT.CHSAW_OUT = true end end @@ -2565,12 +2590,14 @@ function FindNextToolOnHeadSet( nHSet, bFirst) local nType = EgtGetOperationType( OpId) if nType ~= MCH_OY.NONE and nType ~= MCH_OY.DISP then if EgtSetCurrMachining( OpId) then - local sTest = EgtGetMachiningParam( MCH_MP.TOOL) - if EgtTdbSetCurrTool( sTest) then + local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL) + if EgtTdbSetCurrTool( sNextTool) then sHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD) - if GetHeadSet( sHead) == nHSet then - sTool = sTest - sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS) + if GetHeadSet( sHead) == nHSet and EMT.TOOL ~= sNextTool then + if not HeadIsChainSaw( sHead) then + sTool = sNextTool + sTcPos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS) + end break end end diff --git a/Common_ONE-PF.mlse b/Common_ONE-PF.mlse index c5c1b0d..0d973cf 100644 --- a/Common_ONE-PF.mlse +++ b/Common_ONE-PF.mlse @@ -216,10 +216,11 @@ function OnSpecialLink() -- retrazione EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN) if abs( EMC.R2) > 91 then - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2) + EmtAddRise( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;') + else + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'UniqueRise=1;') end - EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') - EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;') -- approccio EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN) EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, MaxZ1Blade, EMC.R1, 0}, 30, 2, 2, 'FirstClimb=1;') @@ -238,7 +239,8 @@ function OnSpecialLink() if EMC.LINKTYPE == 1 then -- approccio EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN) - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2p, EMC.R3}, 30, 2, 2, 'FirstClimb=1;') + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p, EMC.R3}, 30, 2, 2, 'FirstClimb=1;') + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2p, EMC.R3}, 30, 2, 2) if abs( EMC.R3) < 0.1 then EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkCSaw0Z1, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2) else @@ -343,12 +345,10 @@ function OnSpecialLink() if EMC.LINKTYPE == 1 then -- approccio EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN) - -- altrimenti discesa diretta - if abs( EMC.R1 - EMC.R1p) < 10 and abs( EMC.R2 - EMC.R2p) < 90 then - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;') + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;') + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2) -- se assi cambiano di molto - else - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 2, 2, 'FirstClimb=1;') + if abs( EMC.R1 - EMC.R1p) > 10 or abs( EMC.R2 - EMC.R2p) > 90 then EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1p, 0}, 30, 2, 2) EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, 0}, 30, 2, 2) end @@ -358,6 +358,19 @@ function OnSpecialLink() end EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;') + -- se fine lavorazione con deposito utensile + elseif EMC.LINKTYPE == 2 then + -- retrazione + EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN) + if abs( EMC.R1 - EMC.R1p) > 1 or abs( EMC.R2 - EMC.R2p) > 1 then + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, 0}, 30, 3, 2) + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2) + else + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3, EMC.R1p, EMC.R2p}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') + end + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 3, 2, 'LastRise=1;') + -- se fine lavorazione con deposito utensile elseif EMC.LINKTYPE == 2 then -- retrazione @@ -377,15 +390,22 @@ function OnSpecialLink() local vFinalAxLink = EmtGetFinalAxesPos( EMC.PREVMCHID, EMC.PREVMAIN, false) local vInitAxLink = EmtGetInitialAxesPos( EMC.NEXTMCHID, EMC.NEXTMAIN, false) local bSafeMove = IsLinkSafe( vFinalAxLink, vInitAxLink) + + -- se gli assi rotanti non sono cambiati e il collegamento è come ultimo punto della lavorazione + if abs( EMC.R1 - EMC.R1p) < 1 and abs( EMC.R2 - EMC.R2p) < 1 and abs( EMC.L3p - vFinalAxLink[3]) < 1 and abs( EMC.L3 - vInitAxLink[3]) < 1 then + bSafeMove = true + end + -- se superata quota massima ammessa if not bSafeMove then -- retrazione EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN) if abs( EMC.R2) > 91 then - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2) + EmtAddRise( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;') + else + EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'UniqueRise=1;') end - EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;') - EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;') -- approccio EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN) EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, MaxZ1Blade, EMC.R1, 0}, 30, 2, 2, 'FirstClimb=1;') @@ -399,14 +419,18 @@ function OnSpecialLink() elseif EMC.HEAD == 'H23' then -- recupero se split da note utente di lavorazione precedente local bSplit = IsPrevSplit() - -- se inizio lavorazione con prelievo utensile if EMC.LINKTYPE == 1 then -- approccio EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN) - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2p, EMC.R3}, 30, 2, 2, 'FirstClimb=1;') - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2) - EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;') + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p, EMC.R3}, 30, 2, 2, 'FirstClimb=1;') + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2p, EMC.R3}, 30, 2, 2) + if abs( EMC.R3) < 0.1 then + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkCSaw0Z1, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2) + else + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3p, EMC.R1, EMC.R2, EMC.R3}, 30, 2, 2) + end + EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2, EMC.R3}, 31, 2, 2, 'LastClimb=1;') -- se fine lavorazione con deposito utensile elseif EMC.LINKTYPE == 2 then