Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 91fb6887e2 | |||
| 1f888528d1 | |||
| aba14fa0e4 | |||
| a3255c957b | |||
| 4a7fa2bfa8 |
@@ -1674,6 +1674,7 @@ function OnRapid()
|
||||
-- aggiorno quota finale trave dopo Zmax
|
||||
EMT.L1o = EMT.TPOS
|
||||
EMT.ZMAX = true
|
||||
ToolPreSelectionSingleHead( EMT.MCHID)
|
||||
-- se altrimenti movimento in Home
|
||||
elseif EMT.FLAG == 4 then
|
||||
-- non previsto
|
||||
@@ -2871,6 +2872,24 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 1, MovH)
|
||||
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||
local dChSawEncumbrance = sqrt( pow( EMT.TTOTLEN, 2) + pow( ChSawLen + MillOffs, 2))
|
||||
if EMT.ADIR and EMT.TDIR then
|
||||
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||
if EMT.TDIR[1] <= 0 then
|
||||
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||
local dEncumbranceTot = EMT.L3o + MillOffs - dChSawEncumbrance - EMT.SB - 30
|
||||
-- nuova quota Z intermedia
|
||||
local dZUp = EMT.L3o + ( DeltaTabZ - dEncumbranceTot)
|
||||
-- se la nuova quota è minore della quota di parcheggio
|
||||
if dZUp <= ParkCSawZ1 then
|
||||
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||
EmitMoveDataHead( 1, { Z=dZUp})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
EmitMoveDataHead( 1, { Z=dSafeZ1, B=dSafeB1})
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 1, { Z=ParkCSawZ1})
|
||||
@@ -2928,6 +2947,24 @@ function EmitZmax( bReset, bEnd, bXhome, PrevR1, PrevR2, bSplitCut, bUsePrevDelt
|
||||
-- ribadisco movimento perchè in G141 si aspetta sempre tutti i valori
|
||||
local MovH = { X = -dXPos, Z = EMT.L3o, B = PrevR2, C = PrevR1}
|
||||
EmitMoveDataHead( 2, MovH)
|
||||
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||
local dChSawEncumbrance = sqrt( pow( EMT.TTOTLEN, 2) + pow( ChSawLen + Mill2Offs, 2))
|
||||
if EMT.ADIR and EMT.TDIR then
|
||||
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||
if EMT.TDIR[1] <= 0 then
|
||||
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||
local dEncumbranceTot = EMT.L3o + Mill2Offs - dChSawEncumbrance - EMT.SB - 30
|
||||
-- nuova quota Z intermedia
|
||||
local dZUp = EMT.L3o + ( DeltaTabZ - dEncumbranceTot)
|
||||
-- se la nuova quota è minore della quota di parcheggio
|
||||
if dZUp <= ParkCSawZ2 then
|
||||
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||
EmitMoveDataHead( 2, { Z=dZUp})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
EmitMoveDataHead( 2, { Z=dSafeZ2, B=dSafeB2})
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
EmitMoveDataHead( 2, { Z=ParkCSawZ2})
|
||||
@@ -3119,6 +3156,57 @@ function EmitParkRoller( dPosT, bSplitCut, bUsePrevDelta)
|
||||
EMT.TPOS = dPosT
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Se la lavorazione segue una disposizione ha un utensile diverso da quello attuale lo cambia durante la disposizione
|
||||
function ToolPreSelectionSingleHead( nMchId)
|
||||
-- Se non sono nell'ultima lavorazione della fase o se è una macchina a doppia testa ritorna senza fare nulla
|
||||
local bIsPhaseEnd = ( EgtGetNextActiveOperation( nMchId) and EgtGetInfo( EgtGetNextActiveOperation( nMchId), 'TYPE') == 'END')
|
||||
if not bIsPhaseEnd or EgtGetHeadId( 'H21') then
|
||||
return
|
||||
end
|
||||
-- nome utensile
|
||||
local sToolChange
|
||||
local sToolChangePos
|
||||
local sToolChangeHead
|
||||
-- recupero lavorazione successiva e se contiene un utensile diverso salva utensile e posizione utensile
|
||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||
while nNextMchId do
|
||||
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||
if EgtSetCurrMachining( nNextMchId) then
|
||||
local sNextTool = EgtGetMachiningParam( MCH_MP.TOOL)
|
||||
if EgtTdbSetCurrTool( sNextTool) then
|
||||
if EMT.TOOL ~= sNextTool then
|
||||
local sNextHead = EgtTdbGetCurrToolParam( MCH_TP.HEAD)
|
||||
if not HeadIsChainSaw( sNextHead) then
|
||||
sToolChange = sNextTool
|
||||
sToolChangePos = EgtTdbGetCurrToolParam( MCH_TP.TCPOS)
|
||||
sToolChangeHead = sNextHead
|
||||
end
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||
end
|
||||
-- ripristino stato corrente
|
||||
EgtSetCurrMachining( EMT.MCHID)
|
||||
EgtTdbSetCurrTool( EMT.TOOL)
|
||||
-- controlla se l'operazione successiva e quella ancora dopo esistono e sono disposizioni
|
||||
local bNextOpIsDisp = ( EgtGetNextActiveOperation( nMchId)
|
||||
and ( EgtGetOperationType( EgtGetNextActiveOperation( nMchId)) == MCH_OY.DISP)
|
||||
and ( EgtGetNextActiveOperation( EgtGetNextActiveOperation( nMchId)))
|
||||
and ( EgtGetOperationType( EgtGetNextActiveOperation( EgtGetNextActiveOperation( nMchId))) == MCH_OY.DISP))
|
||||
-- emetto preselezione utensile
|
||||
if bIsPhaseEnd and bNextOpIsDisp then
|
||||
if ( EMT.TOOL and sToolChangePos and sToolChange and sToolChangeHead) and EMT.TOOL ~= sToolChangePos and not HeadIsChainSaw( sToolChangeHead) then
|
||||
local MyParkX1 = EgtIf( GetHeadTCSet( sToolChangeHead, sToolChangePos) == 'Head1_TC2', ParkFrnX1, ParkX1)
|
||||
EmitMoveDataHead( 1, { X=-MyParkX1, Z=MaxZ1, B=ParkB1, C=ParkC1, TPos=AdjustTcPos( false, sToolChangePos)})
|
||||
EmitMoveStartHead( 1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function PreselectNextDiffHead( nMchId, sHead)
|
||||
-- se non ho due teste, esco subito
|
||||
|
||||
@@ -1737,6 +1737,24 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||
local dChSawEncumbrance = sqrt( pow( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN), 2) + pow( ChSawLen + MillOffs, 2))
|
||||
if EMT.ADIR and EMT.TDIR then
|
||||
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||
if EMT.TDIR[1] <= 0 then
|
||||
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||
local dEncumbranceTot = EMT.L3p + MillOffs - dChSawEncumbrance - EMT.SB - 30
|
||||
-- nuova quota Z intermedia
|
||||
local dZUp = EMT.L3p + ( DeltaTabZ - dEncumbranceTot)
|
||||
-- se la nuova quota è minore della quota di parcheggio
|
||||
if dZUp <= ParkCSawZ1 then
|
||||
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||
SimulMoveAxis( 'Z1', dZUp, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
@@ -1776,6 +1794,24 @@ function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- controlla che l'ingombro della sega a catena non possa collidere durante il suo riposizionamento
|
||||
local dChSawEncumbrance = sqrt( pow( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN), 2) + pow( ChSawLen + Mill2Offs, 2))
|
||||
if EMT.ADIR and EMT.TDIR then
|
||||
-- direzione versore sega a catena X- (copre anche eventuali inclinazioni in Y)
|
||||
if EMT.TDIR[1] <= 0 then
|
||||
-- ingombro massimo di quota Z (senza pivot) + ingombro massimo sega + altezza pezzo + altezza sicurezza
|
||||
local dEncumbranceTot = EMT.L3p + Mill2Offs - dChSawEncumbrance - EMT.SB - 30
|
||||
-- nuova quota Z intermedia
|
||||
local dZUp = EMT.L3p + ( DeltaTabZ - dEncumbranceTot)
|
||||
-- se la nuova quota è minore della quota di parcheggio
|
||||
if dZUp <= ParkCSawZ2 then
|
||||
-- se B è oltre il punto di massimo ingombro (con l'inclinazione attuale non ha il massimo ingombro)
|
||||
if asin( EMT.TDIR[3] / 1) > asin( EgtTdbGetCurrToolParam( MCH_TP.TOTLEN) / dChSawEncumbrance) and ( dEncumbranceTot < DeltaTabZ) then
|
||||
SimulMoveAxis( 'Z2', dZUp, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R3 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||
|
||||
+4
-2
@@ -32,8 +32,8 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.7l2'
|
||||
PP_NVER = '2.7.12.2'
|
||||
PP_VER = '3.1b1'
|
||||
PP_NVER = '3.1.2.1'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
MACH_NAME = EgtGetCurrMachineName()
|
||||
|
||||
@@ -226,6 +226,8 @@ if EgtExistsFile( sData) then
|
||||
if Machine.Offsets.MIN_V2 then MinV2 = Machine.Offsets.MIN_V2 end
|
||||
if Machine.Offsets.MAX_V2 then MaxV2 = Machine.Offsets.MAX_V2 end
|
||||
if Machine.Offsets.CLAMP5 then Clamp5 = ( Machine.Offsets.CLAMP5 == 1) end
|
||||
if Machine.Offsets.MIN_W then MinW = Machine.Offsets.MIN_W end
|
||||
if Machine.Offsets.MAX_W then MaxW = Machine.Offsets.MAX_W end
|
||||
if Machine.Offsets.MINWOPEN then MinWOpen = Machine.Offsets.MINWOPEN end
|
||||
if Machine.Offsets.MAXWOPEN then MaxWOpen = Machine.Offsets.MAXWOPEN end
|
||||
if Machine.Offsets.MAXWHEIGHT then MaxWHeight = Machine.Offsets.MAXWHEIGHT end
|
||||
|
||||
+10
-3
@@ -1,9 +1,16 @@
|
||||
==== Common_ONE-PF Update Log ====
|
||||
Versione 3.1b1 (20/02/2026)
|
||||
- (GEN) Aggiunta funzione ToolPreSelection() per la preselezione utensile. Ticket#2789
|
||||
- (GEN) Funzione rinominata in ToolPreSelectionSingleHead(), ora utilizza funzione in MLDE per capire se è motosega
|
||||
|
||||
Versione 3.1a1 (16/01/2026)
|
||||
- (SIM-GEN) Aggiunto controllo che evita collisioni durante lo svincolo in Z della sega a catena nelle funzioni ExecMoveZMax() e EmitZMax(). Ticket#2767
|
||||
- (SIM-GEN) Piccola correzione modifiche fatte in precedenza
|
||||
|
||||
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
|
||||
- (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
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||
VERSION = '2.7l1', -- versione script
|
||||
VERSION = '3.1b1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user