Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 54b0f5ed9a | |||
| 97a163579e | |||
| a90a4070b8 | |||
| 835b0a2637 | |||
| 96faf7cd54 | |||
| 797bf6f8eb | |||
| 88c7786e84 | |||
| 14fc485df7 | |||
| 3dc7d36c7a | |||
| 194a17102c | |||
| 7ab3e14a66 | |||
| 026718885e |
+89
-1
@@ -981,7 +981,7 @@ function OnRapid()
|
||||
local dTRad, dTLen = GetToolRadLen()
|
||||
-- se fresa o lama
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
EmitMoveDataHead( 1, { X=-ParkX2, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveDataHead( 1, { X=-ParkFrnX1, Z=MyMaxZ1, B=HomeB1, C=HomeC1, TRad=dTRad, TLen=dTLen, S=Speed})
|
||||
EmitMoveStartHead( 1)
|
||||
EmitMoveWaitHead( 1)
|
||||
EmitMoveWaitChars( EgtIf( bOnlyCharY, 1, 3))
|
||||
@@ -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
|
||||
|
||||
+37
-1
@@ -1112,7 +1112,7 @@ function OnSimulMoveStart()
|
||||
local bMoveZbeforeX = false
|
||||
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( -EMT.L2 < -LimX1RotSaw or EMT.R2 > 91) then
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( BD.RIGHT_LOAD, -EMT.L2 < -LimX1RotSaw, -EMT.L2 > -LimX1RotSaw) or EMT.R2 > 91) then
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
-- se la quota di lavoro è più in alta della posizione a ZHOME della testa, prima si va alla Z di lavoro e poi si approccia il pezzo
|
||||
@@ -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)
|
||||
|
||||
+14
-3
@@ -1,9 +1,20 @@
|
||||
==== Common_ONE-PF Update Log ====
|
||||
Versione 3.1c1 (04/03/2026)
|
||||
- (GEN) Corretta chiamata di una variabile insesistente in caso di ONE
|
||||
- (SIM) Allineata simulazione a generazione
|
||||
|
||||
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.1c1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user