Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
64e27be974 | ||
|
|
6603ee65ef | ||
|
|
e2a3a65ebd | ||
|
|
c0b6ef49d6 | ||
|
|
f900809a26 |
+26
-10
@@ -221,7 +221,8 @@ function OnSimulDispositionStart()
|
|||||||
end
|
end
|
||||||
-- Se vero inizio e abilitato creo gli Zmap
|
-- Se vero inizio e abilitato creo gli Zmap
|
||||||
EMT.VMILL = {}
|
EMT.VMILL = {}
|
||||||
if not EMT.SIM1ST and EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') then
|
if not EMT.SIM1ST then
|
||||||
|
local bShowVMill = EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b')
|
||||||
local nLastOrd = GetPhaseOrd( EgtGetPhaseCount())
|
local nLastOrd = GetPhaseOrd( EgtGetPhaseCount())
|
||||||
local nPartRawId = EgtGetFirstRawPart()
|
local nPartRawId = EgtGetFirstRawPart()
|
||||||
while nPartRawId do
|
while nPartRawId do
|
||||||
@@ -247,7 +248,7 @@ function OnSimulDispositionStart()
|
|||||||
-- determino la risoluzione dello Zmap
|
-- determino la risoluzione dello Zmap
|
||||||
local dTol = 4.71
|
local dTol = 4.71
|
||||||
if EmtGetVMillStep then
|
if EmtGetVMillStep then
|
||||||
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol)
|
dTol = EmtGetVMillStep( b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), EMT.VMILLTOL or dTol)
|
||||||
else
|
else
|
||||||
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
local dArea = b3Raw:getDimX() * b3Raw:getDimY() + b3Raw:getDimX() * b3Raw:getDimZ() + b3Raw:getDimY() * b3Raw:getDimZ()
|
||||||
if dArea < 0.075e6 then
|
if dArea < 0.075e6 then
|
||||||
@@ -263,21 +264,25 @@ function OnSimulDispositionStart()
|
|||||||
elseif dArea < 2.4e6 then
|
elseif dArea < 2.4e6 then
|
||||||
dTol = 3.77
|
dTol = 3.77
|
||||||
end
|
end
|
||||||
|
dTol = min( dTol, EMT.VMILLTOL or dTol) -- imposto dTol al valore minore tra quello per volume e quello per spessore lama
|
||||||
end
|
end
|
||||||
dTol = min( dTol, EMT.VMILLTOL or dTol) -- imposto dTol al valore minore tra quello per volume e quello per spessore lama
|
|
||||||
-- creo lo Zmap
|
-- creo lo Zmap
|
||||||
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
local VMillId = EgtVolZmapBox( nPartRawId, b3Raw:getMin(), b3Raw:getDimX(), b3Raw:getDimY(), b3Raw:getDimZ(), dTol, true, GDB_RT.GLOB)
|
||||||
if VMillId then
|
if VMillId then
|
||||||
EgtSetName( VMillId, 'VMill')
|
EgtSetName( VMillId, 'VMill')
|
||||||
EgtSetLevel( VMillId, GDB_LV.TEMP)
|
EgtSetLevel( VMillId, GDB_LV.TEMP)
|
||||||
EgtSetColor( VMillId, EgtGetColor( nSolId), false)
|
EgtSetColor( VMillId, EgtGetColor( nSolId), false)
|
||||||
-- nascondo le altre geometrie
|
if bShowVMill then
|
||||||
local nId = EgtGetFirstInGroup( nPartRawId)
|
-- nascondo le altre geometrie
|
||||||
while nId do
|
local nId = EgtGetFirstInGroup( nPartRawId)
|
||||||
if nId ~= VMillId then
|
while nId do
|
||||||
EgtSetStatus( nId, GDB_ST.OFF)
|
if nId ~= VMillId then
|
||||||
|
EgtSetStatus( nId, GDB_ST.OFF)
|
||||||
|
end
|
||||||
|
nId = EgtGetNext( nId)
|
||||||
end
|
end
|
||||||
nId = EgtGetNext( nId)
|
else
|
||||||
|
EgtSetStatus( VMillId, GDB_ST.OFF)
|
||||||
end
|
end
|
||||||
table.insert( EMT.VMILL, VMillId)
|
table.insert( EMT.VMILL, VMillId)
|
||||||
end
|
end
|
||||||
@@ -338,7 +343,9 @@ function OnSimulDispositionStart()
|
|||||||
-- gestione eventuale scarto affettato successivo
|
-- gestione eventuale scarto affettato successivo
|
||||||
if EMT.VMILL and #EMT.VMILL > 0 then
|
if EMT.VMILL and #EMT.VMILL > 0 then
|
||||||
EMT.SCRAP = nScrapRawId
|
EMT.SCRAP = nScrapRawId
|
||||||
EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF)
|
if EgtGetInfo( EgtGetCurrMachGroup(), 'Vm', 'b') then
|
||||||
|
EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
EMT.SCRAP = nil
|
EMT.SCRAP = nil
|
||||||
end
|
end
|
||||||
@@ -1484,6 +1491,8 @@ end
|
|||||||
function ExecUnloading()
|
function ExecUnloading()
|
||||||
if EMT.VMILL and #EMT.VMILL > 0 then
|
if EMT.VMILL and #EMT.VMILL > 0 then
|
||||||
local vMillId = EMT.VMILL[1]
|
local vMillId = EMT.VMILL[1]
|
||||||
|
-- grezzo di appartenenza
|
||||||
|
local nPartRawId = EgtGetParent( vMillId)
|
||||||
-- gruppo dei Vmill
|
-- gruppo dei Vmill
|
||||||
local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill')
|
local nVmGrpId = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'VMill')
|
||||||
-- li sposto per lasciare spazio al nuovo pezzo
|
-- li sposto per lasciare spazio al nuovo pezzo
|
||||||
@@ -1507,6 +1516,7 @@ function ExecUnloading()
|
|||||||
EgtSetAxisPos( 'PW', MaxWOpen)
|
EgtSetAxisPos( 'PW', MaxWOpen)
|
||||||
end
|
end
|
||||||
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
||||||
|
EgtSetStatus( vMillId, GDB_ST.ON)
|
||||||
EgtSetLevel( vMillId, GDB_LV.USER)
|
EgtSetLevel( vMillId, GDB_LV.USER)
|
||||||
-- aggiungo gli spigoli
|
-- aggiungo gli spigoli
|
||||||
if EgtVolZmapSetShowEdges then
|
if EgtVolZmapSetShowEdges then
|
||||||
@@ -1525,6 +1535,12 @@ function ExecUnloading()
|
|||||||
EgtDraw()
|
EgtDraw()
|
||||||
-- se finito
|
-- se finito
|
||||||
if EMT.PHASE == EgtGetPhaseCount() then
|
if EMT.PHASE == EgtGetPhaseCount() then
|
||||||
|
-- in ogni caso, nascondo ultimo pezzo
|
||||||
|
local nId = EgtGetFirstInGroup( nPartRawId)
|
||||||
|
while nId do
|
||||||
|
EgtSetStatus( nId, GDB_ST.OFF)
|
||||||
|
nId = EgtGetNext( nId)
|
||||||
|
end
|
||||||
-- se impostato di salvare i Vmill, lo faccio
|
-- se impostato di salvare i Vmill, lo faccio
|
||||||
local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini'
|
local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini'
|
||||||
if EgtGetStringFromIni( 'VMill', 'Save', '', sMachIni) == '1' then
|
if EgtGetStringFromIni( 'VMill', 'Save', '', sMachIni) == '1' then
|
||||||
|
|||||||
+52
-24
@@ -69,6 +69,28 @@ end
|
|||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
-- *** Special Link moves ***
|
-- *** Special Link moves ***
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
-- funzione che controlla se ci sono dei movimenti di carrelli tra due lavorazioni consecutive con stesso utensile
|
||||||
|
local function MoveCarrBetweenMachining()
|
||||||
|
local nClId = EgtGetFirstNameInGroup( EMC.NEXTMCHID, 'CL') -- recupero Id del gruppo CL della lavorazione corrente
|
||||||
|
local nPathId = EgtGetFirstInGroup( nClId or GDB_ID.NULL) -- Id del primo gruppo nella lavorazione (P1)
|
||||||
|
if not nPathId then
|
||||||
|
EMC.ERR = 12
|
||||||
|
EMC.MSG = ' Error : CL group path not found'
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local dAuxMoveCount = EgtGetInfo( nPathId, 'AS#', 'd') or 0 -- numero di movimenti ausiliari
|
||||||
|
local dTRepos = nil
|
||||||
|
-- controlla ogni gruppo di movimenti ausiliari
|
||||||
|
for i = 1, dAuxMoveCount do
|
||||||
|
local aAuxMove = EgtGetInfo( nPathId, 'AS' .. tostring( i), 'vs') or {} -- array contenete i parametri di ogni gruppo
|
||||||
|
-- controlla solo i movimenti della testa trave e salva l'ultimo
|
||||||
|
if aAuxMove[1] == '1' or aAuxMove[1] == '2' or aAuxMove[1] == '3' then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
-----------------------------------------------------------------------------------------
|
-----------------------------------------------------------------------------------------
|
||||||
local function IsPrevSplit()
|
local function IsPrevSplit()
|
||||||
local sPrevUserNotes = ''
|
local sPrevUserNotes = ''
|
||||||
@@ -250,21 +272,36 @@ function OnSpecialLink()
|
|||||||
|
|
||||||
-- se superata quota massima ammessa
|
-- se superata quota massima ammessa
|
||||||
if not bSafeMove then
|
if not bSafeMove then
|
||||||
-- retrazione
|
-- se c'è un movimento di pinze
|
||||||
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
|
if MoveCarrBetweenMachining() then
|
||||||
if abs( EMC.R2) > 91 then
|
-- si fa un rise senza cambiare assi rotanti, perchè alla fine della lavorazione farà il riposizionamento e i rulli sono calcolati sulla posizione attuale della testa
|
||||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2p, -90, 90)}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'FirstRise=1;')
|
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
|
||||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'LastRise=1;')
|
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, EMC.L3p, EMC.R1p, EMC.R2p}, 30, 0, 0)
|
||||||
|
-- l'approcio deve finire lo svincolo della lavorazione non completato
|
||||||
|
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 2, 2, 'FirstClimb=1;')
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, MaxZ1Blade, EMC.R1, 0}, 30, 2, 2)
|
||||||
|
if abs( EMC.R2) > 91 then
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkZ1, EMC.R1, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2)
|
||||||
|
end
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
|
||||||
else
|
else
|
||||||
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'UniqueRise=1;')
|
-- retrazione
|
||||||
|
EmtRemoveRise( EMC.PREVMCHID, EMC.PREVMAIN)
|
||||||
|
if abs( EMC.R2) > 91 then
|
||||||
|
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, ParkZ1, EMC.R1p, EgtClamp( EMC.R2p, -90, 90)}, 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;')
|
||||||
|
else
|
||||||
|
EmtAddRise( EMC.PREVMCHID, EMC.PREVMAIN, { EMC.L1p, EMC.L2p, MaxZ1Blade, EMC.R1p, 0}, 30, 3, 2, EgtIf( bSplit, 'Split=1;', '')..'UniqueRise=1;')
|
||||||
|
end
|
||||||
|
-- approccio
|
||||||
|
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, MaxZ1Blade, EMC.R1, 0}, 30, 2, 2, 'FirstClimb=1;')
|
||||||
|
if abs( EMC.R2) > 91 then
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkZ1, EMC.R1, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2)
|
||||||
|
end
|
||||||
|
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
|
||||||
end
|
end
|
||||||
-- approccio
|
|
||||||
EmtRemoveClimb( EMC.NEXTMCHID, EMC.NEXTMAIN)
|
|
||||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, MaxZ1Blade, EMC.R1, 0}, 30, 2, 2, 'FirstClimb=1;')
|
|
||||||
if abs( EMC.R2) > 91 then
|
|
||||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, ParkZ1, EMC.R1, EgtClamp( EMC.R2, -90, 90)}, 30, 2, 2)
|
|
||||||
end
|
|
||||||
EmtAddClimb( EMC.NEXTMCHID, EMC.NEXTMAIN, { EMC.L1, EMC.L2, EMC.L3, EMC.R1, EMC.R2}, 30, 2, 2, 'LastClimb=1;')
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -556,21 +593,12 @@ local function IsFirstMachiningOfStart( nMchId)
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
--TODO : controllare più precisamente se il primo punto della lavorazione fa collidere utensile, codolo, B o C contro la trave se non arretrata prima della discesa in Z.
|
||||||
|
-- ora fa arretrare la trave anche per le lavorazioni che non collidono ma semplicemente iniziano più avanti della trave, anche se lavorazioni sul fianco.
|
||||||
local function IsHeadMachining( nMchId)
|
local function IsHeadMachining( nMchId)
|
||||||
local vInitAx = EmtGetInitialAxesPos( nMchId)
|
local vInitAx = EmtGetInitialAxesPos( nMchId)
|
||||||
return ( vInitAx and vInitAx[1] > 100 * GEO.EPS_SMALL)
|
return ( vInitAx and vInitAx[1] > 100 * GEO.EPS_SMALL)
|
||||||
end
|
end
|
||||||
--------------------------------------------------------------------- Idea sostituzione IsHeadMachining controlla anche che Y sia dentro al pezzo
|
|
||||||
--[[local function IsHeadMachining( nMchId)
|
|
||||||
local vInitAx = EmtGetInitialAxesPos( nMchId)
|
|
||||||
local dDeltaZeroBeamY = EgtIf( GetHeadSet( EgtTdbGetCurrToolParam( MCH_TP.HEAD)) == 1, DeltaTabY, Delta2TabY)
|
|
||||||
if vInitAx then
|
|
||||||
if vInitAx[1] > 100 * GEO.EPS_SMALL and vInitAx[2] >= dDeltaZeroBeamY - 100 * GEO.EPS_SMALL and vInitAx[2] <= dDeltaZeroBeamY + EMC.SB + 100 * GEO.EPS_SMALL then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end]]
|
|
||||||
|
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
local function GetPhaseRot( nPhase)
|
local function GetPhaseRot( nPhase)
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
==== Common_ONE-PF Update Log ====
|
==== Common_ONE-PF Update Log ====
|
||||||
|
|
||||||
|
Versione 3.1-- (--/--/2026)
|
||||||
|
- (SIM-INI) Con CAM5 v.3.1h2 è possibile abilitare/disabilitare VMILL durante lavorazione. Serve Modifica INI macchina "Enable=2" in sezione "[VMill]".
|
||||||
|
Il flag non è più di creazione, ma di visualizzazione, e il controllo collisioni è comunque garantito.
|
||||||
|
- (ALL) Se collegamento LINKTYPE=3 con gestione risalita speciale, in caso di moviemnti pinze si fa RISE fittizio e si rimanda tutto al CLIMB. Ticket#3137
|
||||||
|
|
||||||
Versione 3.1h1 (05/08/2026)
|
Versione 3.1h1 (05/08/2026)
|
||||||
- (SIM-GEN) Se arretra trave al parcheggio rulli dopo Unload non può eseguire movimento completo, esegue movimento parziale solo se questo porta POST > 0. Altrimenti non fa nulla. Ticket#3102
|
- (SIM-GEN) Se arretra trave al parcheggio rulli dopo Unload non può eseguire movimento completo, esegue movimento parziale solo se questo porta POST > 0. Altrimenti non fa nulla. Ticket#3102
|
||||||
- (SIM) OnSimulToolDeselect chiamata da mlpe e ultimo movimento o movimento pinze nel quale non bisogna caricare nessun utensile, forzo TCPOS a 'T0'. Ticket#3114
|
- (SIM) OnSimulToolDeselect chiamata da mlpe e ultimo movimento o movimento pinze nel quale non bisogna caricare nessun utensile, forzo TCPOS a 'T0'. Ticket#3114
|
||||||
|
|||||||
+1
-1
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
local InfoCommon_STD_PP = {
|
local InfoCommon_STD_PP = {
|
||||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||||
VERSION = '3.1h1', -- versione script
|
VERSION = '3.1--', -- versione script
|
||||||
MIN_MACH_VER_PP_COMMON = '3.1f1' -- versione minima kernel
|
MIN_MACH_VER_PP_COMMON = '3.1f1' -- versione minima kernel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user