Compare commits
16 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 164097fe52 | |||
| 9cc0cdd379 | |||
| a8532d4c97 | |||
| cb9839b266 | |||
| 3c329adb0f | |||
| 05f4d9ab4c | |||
| 51c596ae82 | |||
| ae7be91567 | |||
| 232ffb4714 | |||
| 47b294fba4 | |||
| c8e322fbc9 | |||
| a4898227eb | |||
| d5fb783672 | |||
| 9321e8bc1f | |||
| 5ac91ab90e | |||
| dfbe14eb9f |
+2
-2
@@ -1,4 +1,4 @@
|
||||
-- BeamData.lua by Egaltech s.r.l. 2023/06/28
|
||||
-- BeamData.lua by Egaltech s.r.l. 2024/01/19
|
||||
-- Raccolta dati generali per Travi
|
||||
|
||||
EgtOutLog( ' PF1250-BeamData started')
|
||||
@@ -53,7 +53,7 @@ local BeamData = {
|
||||
DIM_STRIP_SMALL = 1.5, -- dimensione codolo piccolo (quando le parti sostenute sono sicuramente sulla parte sopra del pezzo)
|
||||
RAWCOL = { 255, 160, 32, 30}, -- colore del grezzo
|
||||
RAW_OFFSET = 2000, -- spostamento grezzo rimanente dopo split
|
||||
VICE_MINH = 110, -- altezza minima della morsa
|
||||
VICE_MINH = 400, -- altezza minima della morsa
|
||||
OFFSET_DRILL_TENON = 0, -- offset fori su tenoni verso base degli stessi (0=non fare)
|
||||
USER_HOLE_DIAM = 0, -- diametro foro per L20
|
||||
MAX_TOOL_LEN_FOR_HOR_MACH = 500, -- massima lunghezza ingombro per poter fare forature (fresature) oltre i 10 gradi dalla verticale
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,5 @@
|
||||
-- Processore macchina Essetre-PF1250 by EgalTech s.r.l. 2023/11/21
|
||||
-- Processore standard macchine tipo PF1250 by EgalWare s.r.l. 2024/01/19
|
||||
|
||||
-- Funzioni generiche indipendenti dal controllo
|
||||
|
||||
-- Intestazioni
|
||||
@@ -12,7 +13,7 @@ local sBaseDir = EgtGetSourceDir()
|
||||
if NumericalControl == 'NUM' then
|
||||
error( 'Numerical Control error : NUM not yet managed')
|
||||
elseif NumericalControl == 'TPA' then
|
||||
dofile( sBaseDir .. 'Essetre-PF1250.TPA.mlpe')
|
||||
dofile( sBaseDir .. 'Common-PF1250.TPA.mlpe')
|
||||
else
|
||||
error( 'Numerical Control error : unkwnown type')
|
||||
end
|
||||
@@ -25,8 +26,8 @@ local COLL_SAFE_DIST = 3
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulStart()
|
||||
-- controllo versione programma
|
||||
if not EMT.VER or EMT.VER < '2.5d1' then
|
||||
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel 2.5d1)')
|
||||
if not EMT.VER or EMT.VER < MIN_MACH_VER then
|
||||
EmtSetLastError( 1200, 'A newer version of the program is required (minimum EgtMachKernel '..MIN_MACH_VER..')')
|
||||
end
|
||||
-- Carico gli utensili sulle barre portautensili
|
||||
local vTcPos = EgtGetAllTcPosNames()
|
||||
@@ -63,6 +64,11 @@ function OnSimulStart()
|
||||
AddToCollisionCheck( 'X2', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'C2', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'B2', 'COLLISION', EMT.COLLOBJ)
|
||||
if EgtGetHeadId('H31') then
|
||||
AddToCollisionCheck( 'Z3', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'C3', 'COLLISION', EMT.COLLOBJ)
|
||||
AddToCollisionCheck( 'B3', 'COLLISION', EMT.COLLOBJ)
|
||||
end
|
||||
DumpCollisionCheck( EMT.COLLOBJ, 'Collision Objects :', 4)
|
||||
-- Preparo lista solidi macchina con cui possono collidere gli oggetti sopra riportati (in aggiunta a VMill)
|
||||
EMT.MCODET = {}
|
||||
@@ -75,6 +81,12 @@ function OnSimulStart()
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'CHAIN'},
|
||||
{ Grp = 'Z2', Sub = 'COLLISION', Name = 'COL2'}}
|
||||
|
||||
-- inserisco gruppi opzionali
|
||||
if SecondChain then table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'CHSAW2'}) end
|
||||
if TcSpecialTools then table.insert( McdData, {Grp = 'Base', Sub = 'COLLISION', Name = 'SPTOOLS'}) end
|
||||
if TcAggreBladeUnder then table.insert( McdData, {Grp = 'Base', Sub = 'COLLISION', Name = 'AGGREBLADEUNDER'}) end
|
||||
|
||||
EgtOutLog( 'MCODET Objects :', 4)
|
||||
local nMcdNullCnt = 0
|
||||
for i = 1, #McdData do
|
||||
@@ -388,24 +400,46 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMT.NEXTHEAD)
|
||||
-- se fresa o lama su testa 1, reset assi rotanti
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' or EMT.HEAD == 'H13' or EMT.HEAD == 'H16' then
|
||||
if nSetHead == 1 then
|
||||
-- se ho la testa 3, la mando a parcheggio
|
||||
if EgtGetHeadId( 'H31') then
|
||||
EgtSetAxisPos( 'X3', ParkX3)
|
||||
end
|
||||
EgtResetAxisPos( 'C1')
|
||||
EgtResetAxisPos( 'B1')
|
||||
-- se testa 3 parcheggio la 1
|
||||
elseif nSetHead == 3 then
|
||||
EgtSetAxisPos( 'X1', ParkX1)
|
||||
end
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H13' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextChainSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A', dPosA)
|
||||
-- imposto home dell'asse C1 (A=0 -> T101, A=90 -> T104)
|
||||
EgtSetAxisPos( 'A1', dPosA)
|
||||
-- imposto home dell'asse C1 (A1=0 -> T101, A1=90 -> T104)
|
||||
local MyParkCSawC1 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C1', MyParkCSawC1)
|
||||
EgtSetAxisPos( 'C1', MyParkCSawC1)
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
end
|
||||
-- se lama su aggregato da sotto, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H22' then
|
||||
-- valore dell'asse virtuale
|
||||
dPosA = dPosA or GetNextSawingVirtualAxis( EMT.MCHID)
|
||||
-- imposto il valore di A
|
||||
EgtSetAxisPos( 'A2', dPosA)
|
||||
-- imposto home dell'asse C1 (A2=0 -> T101, A2=90 -> T104)
|
||||
local MyParkSawC2 = GetSawCHomeFromVirtualAxis( dPosA)
|
||||
EmtModifyAxisHome( 'C2', MyParkSawC2)
|
||||
EgtSetAxisPos( 'C2', MyParkSawC2)
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
end
|
||||
-- carico utensile, con breve pausa
|
||||
EgtPause( 100)
|
||||
EgtOutText( '')
|
||||
@@ -422,7 +456,7 @@ function OnSimulToolSelect( dPosA)
|
||||
-- se attivo Collision Check
|
||||
EMT.SAFEDIST = COLL_SAFE_DIST
|
||||
if EMT.COLLOBJ then
|
||||
local nInd = EgtIf( EMT.HEAD ~= 'H21', 1001, 1011)
|
||||
local nInd = EgtIf( nSetHead ~= 2, 1001, 1011)
|
||||
AddToolToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd, true)
|
||||
AddToolHolderToCollisionObj( EMT.TOOL, EMT.HEAD, EMT.EXIT, nInd + 1)
|
||||
for i, Coll in ipairs( EMT.COLLOBJ or {}) do
|
||||
@@ -433,75 +467,99 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulToolDeselect( dPrevA)
|
||||
-- se prossimo utensile dummy, non faccio alcunché
|
||||
if EMT.NEXTHEAD == 'H14' then return end
|
||||
-- se prossimo utensile non cambia e non è sega a catena, esco
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' then return end
|
||||
if ( EMT.NEXTTOOL == EMT.PREVTOOL_H1 or EMT.NEXTTOOL == EMT.PREVTOOL_H2) and EMT.NEXTHEAD ~= 'H13' and EMT.NEXTHEAD ~= 'H22' then return end
|
||||
-- deposito utensile
|
||||
EgtOutText( 'Tool change in progress...')
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMT.NEXTHEAD)
|
||||
-- per testa gruppo 2
|
||||
if nSetHead == 2 then
|
||||
-- deposito lama su aggregato testa sotto
|
||||
if EMT.PREVHEAD_H2 == 'H22' then
|
||||
-- simulo movimento
|
||||
local ParkC2 = EgtGetAxisHomePos( 'C2')
|
||||
if dPrevA then
|
||||
ParkC2 = GetSawCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- visualizzo utensile su TcPos
|
||||
ShowToolInTcPos( EMT.PREVTCPOS_H2, true)
|
||||
-- nascondo l'utensile sulla testa
|
||||
EgtSetStatus( EgtGetHeadId( EMT.PREVHEAD_H2 or '') or GDB_ID.NULL, GDB_ST.OFF)
|
||||
return
|
||||
end
|
||||
-- Testa gruppo 1...
|
||||
-- deposito utensile fresa
|
||||
if EMT.PREVHEAD_H1 == 'H11' then
|
||||
-- simulo movimento
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1)
|
||||
if EMT.PREVTTOTLEN_H1 < LongTool then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( nPrevTc ~= 2, ParkX1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
if nPrevTc ~= 2 then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc1C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkX1
|
||||
-- se testa gruppo 1
|
||||
else
|
||||
-- deposito utensile fresa
|
||||
if EMT.PREVHEAD_H1 == 'H11' then
|
||||
-- simulo movimento
|
||||
local nPrevTc = GetTcForTopHeadTool( EMT.PREVTCPOS_H1)
|
||||
if EMT.PREVTTOTLEN_H1 < LongTool then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( nPrevTc ~= 2, ParkX1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc2C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkTc2X1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
if nPrevTc ~= 2 then
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc1C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkX1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkLongTc2C1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = ParkTc2X1
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
-- deposito utensile lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile sega a catena
|
||||
elseif EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- simulo movimento
|
||||
local ParkC1 = EgtGetAxisHomePos( 'C1')
|
||||
if dPrevA then
|
||||
ParkC1 = GetChainSawCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile seconda lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- deposito utensile lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H12' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile sega a catena
|
||||
elseif EMT.PREVHEAD_H1 == 'H13' then
|
||||
-- simulo movimento
|
||||
local ParkC1 = EgtGetAxisHomePos( 'C1')
|
||||
if dPrevA then
|
||||
ParkC1 = GetChainSawCHomeFromVirtualAxis( dPrevA)
|
||||
end
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
-- deposito utensile seconda lama
|
||||
elseif EMT.PREVHEAD_H1 == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- 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)
|
||||
end
|
||||
-- breve pausa
|
||||
EgtPause( 100)
|
||||
-- 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)
|
||||
-- se passo da testa 1 a 3 o viceversa
|
||||
if nNextSetHead == 3 then
|
||||
-- deposito eventuale sega a catena
|
||||
if EMT.PREVHEAD_H1 == 'H13' 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)
|
||||
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
|
||||
if EMT.NEXTHEAD == 'H11' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
local dPosX = EgtIf( GetTcForTopHeadTool( EMT.NEXTTCPOS) ~= 2, ParkX1, ParkTc2X1)
|
||||
SimulMoveAxis( 'X1', dPosX, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', 0, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile lama
|
||||
elseif EMT.NEXTHEAD == 'H12' then
|
||||
-- simulo movimento
|
||||
@@ -511,12 +569,25 @@ function OnSimulToolDeselect( dPrevA)
|
||||
elseif EMT.NEXTHEAD == 'H13' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkCSawB1, MCH_SIM_STEP.RAPROT, 'C1', EgtGetAxisHomePos( 'C1'), MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'X1', ParkCSawX1, MCH_SIM_STEP.RAPID, 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile seconda lama
|
||||
elseif EMT.NEXTHEAD == 'H16' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B1', ParkB1, MCH_SIM_STEP.RAPROT, 'C1', ParkC1, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X1', ParkTc2X1, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile su CU margherita testa sotto
|
||||
elseif EMT.NEXTHEAD == 'H21' then
|
||||
-- simulo movimento
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.RAPROT, 'C2', ParkC2, MCH_SIM_STEP.RAPROT)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
-- prendo utensile lama su aggregato
|
||||
elseif EMT.NEXTHEAD == 'H22' then
|
||||
-- aggiungo utensile per verifica collisione
|
||||
AddToolToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011, false)
|
||||
AddToolHolderToCollisionObj( EMT.NEXTTOOL, EMT.NEXTHEAD, EMT.NEXTEXIT, 1011 + 1)
|
||||
-- simulo movimento
|
||||
SimulMoveAxis( 'X2', ParkSawX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkSawB2, MCH_SIM_STEP.COLLROT, 'C2', ParkSawC2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -524,15 +595,27 @@ end
|
||||
function OnSimulMachiningStart()
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H13' and EMT.HEAD == EMT.PREVHEAD_H1 then
|
||||
local dPrevA = EgtGetAxisPos( 'A')
|
||||
local dPrevA = EgtGetAxisPos( 'A1')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 3))
|
||||
local dPosA = tonumber( sVal:sub( 4))
|
||||
if abs( dPosA - dPrevA) > 1 then
|
||||
OnSimulToolDeselect( dPrevA)
|
||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||
OnSimulToolSelect( dPosA)
|
||||
end
|
||||
end
|
||||
-- se lavorazione attuale e precedente con sega a catena con angolo A diverso, devo scaricare e ricaricare
|
||||
if EMT.HEAD == 'H22' and EMT.HEAD == EMT.PREVHEAD_H2 then
|
||||
local dPrevA = EgtGetAxisPos( 'A2')
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
local dPosA = tonumber( sVal:sub( 4)) or 0
|
||||
if abs( dPosA - dPrevA) > 1 then
|
||||
ExecParkRoller( nil, nil, nil, nil, false, bAgg)
|
||||
OnSimulToolDeselect( dPrevA)
|
||||
EgtSetStatus( EgtGetHeadId( EMT.HEAD), GDB_ST.ON)
|
||||
OnSimulToolSelect( dPosA)
|
||||
end
|
||||
end
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- per gruppo testa 1
|
||||
@@ -547,6 +630,12 @@ function OnSimulMachiningStart()
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
EMT.PREVTTOTLEN_H2 = EMT.TTOTLEN
|
||||
-- per gruppo testa 3 (resetto dati testa 1)
|
||||
else
|
||||
EMT.PREVTOOL_H3 = nil
|
||||
EMT.PREVHEAD_H3 = nil
|
||||
EMT.PREVTCPOS_H3 = nil
|
||||
EMT.PREVTTOTLEN_H3 = nil
|
||||
end
|
||||
-- recupero alcuni dati della lavorazione
|
||||
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
||||
@@ -600,6 +689,9 @@ function OnSimulMachiningStart()
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
ExecParkRoller( nil, nil, nil, nil, false, bAgg)
|
||||
-- eseguo
|
||||
if EMT.DOU_TO_ZMAX == 2 then
|
||||
SimulMoveAxis( 'X2', SafeX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'Z2', MinZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
@@ -644,7 +736,7 @@ function OnSimulPathEnd()
|
||||
if EMT.MCHSPLIT and not EMT.TO_FALL then
|
||||
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
|
||||
EMT.Y1DELTA = nil
|
||||
SetPY1Light( false)
|
||||
ExecMovePY1( false)
|
||||
end
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
EMT.TO_ZMAX = nil
|
||||
@@ -654,19 +746,19 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulPathStartAux()
|
||||
-- eseguo il comando
|
||||
ExecAuxCmd( EMT.AUX)
|
||||
ExecAuxCmd( EMT.AUX, true)
|
||||
-- se ultimo comando e lavorazione di split, sgancio il carro Y1
|
||||
if EMT.AUXIND == EMT.AUXTOT and EMT.MCHSPLIT and not EMT.TO_FALL then
|
||||
EMT.SPLIT_Y1DELTA = EMT.Y1DELTA
|
||||
EMT.Y1DELTA = nil
|
||||
SetPY1Light( false)
|
||||
ExecMovePY1( false)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulPathEndAux()
|
||||
-- eseguo il comando
|
||||
ExecAuxCmd( EMT.AUX)
|
||||
ExecAuxCmd( EMT.AUX, false)
|
||||
-- se ultimo comando e richiesta risalita a Zmax
|
||||
if EMT.AUXIND == EMT.AUXTOT and EMT.TO_ZMAX then
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
@@ -751,54 +843,63 @@ function OnSimulMoveStart()
|
||||
if nSetHead == 1 then
|
||||
-- Dati
|
||||
local B1Pos = EgtGetAxisPos( 'B1')
|
||||
local B1Home = EgtGetAxisHomePos( 'B1')
|
||||
local C1Pos = EgtGetAxisPos( 'C1')
|
||||
local C1Home = EgtGetAxisHomePos( 'C1')
|
||||
local Z1Pos = EgtGetAxisPos( 'Z1')
|
||||
local Z1Home = EgtGetAxisHomePos( 'Z1')
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
if EMT.TTOTLEN < LongTool then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
local bXSpec = ( EMT.L2 > DeltaTabY)
|
||||
local bXSpec = EgtIf( BD.RIGHT_LOAD, EMT.L2 < DeltaTabY, EMT.L2 > DeltaTabY)
|
||||
-- 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)
|
||||
local Z_EXTRA = EgtIf( EMT.HEAD == 'H11', 250, 160)
|
||||
local dZref
|
||||
if EMT.R2 > -60 then
|
||||
dZref = Z1Home + Z_EXTRA
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', min( EMT.R2, 60), MCH_SIM_STEP.COLLROT)
|
||||
if EMT.R2 > 60 then
|
||||
dZref = Z1Home + Z_EXTRA * ( 90 - abs( EMT.R2)) / 30
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', min( EMT.R2, 90), MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
else
|
||||
dZref = Z1Home + Z_EXTRA * ( 90 - abs( EMT.R2)) / 30
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
if dZref and EMT.L3 < dZref + 0.1 then
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
if bXSpec and EMT.L3 < dZref - 0.1 then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( '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)
|
||||
-- caso standard
|
||||
else
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
SimulMoveAxis( 'X1', EgtIf( bXSpec, DeltaTabY, EMT.L2), MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
local bXSpec = ( EMT.L2 > DeltaTabY)
|
||||
SimulMoveAxis( 'X1', EgtIf( bXSpec, DeltaTabY, EMT.L2), MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID)
|
||||
if bXSpec then
|
||||
SimulMoveAxes( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- Porto la Z alla giusta quota
|
||||
if Z1Pos > Z1Home + 1 and abs( B1Pos) > 89.9 then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z1', Z1Home, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se movimento iniziale da Zmax
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
SimulMoveAxes( 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- altrimenti testa 2
|
||||
else
|
||||
-- Porto la X alla giusta quota
|
||||
local X2Pos = EgtGetAxisPos( 'X2')
|
||||
local X2Home = EgtGetAxisHomePos( 'X2')
|
||||
if X2Pos > X2Home - 1 then
|
||||
-- se altrimenti testa 2
|
||||
elseif nSetHead == 2 then
|
||||
local B2Home = EgtGetAxisHomePos( 'B2')
|
||||
local C2Home = EgtGetAxisHomePos( 'C2')
|
||||
local Z2Home = EgtGetAxisHomePos( 'Z2')
|
||||
if EMT.ZMAX then
|
||||
-- se bisogna scrivere tutti gli assi
|
||||
if WriteAllCoordsOnFirstM101 then
|
||||
SimulMoveAxes( 'X2', SafeX2, MCH_SIM_STEP.RAPID, 'B2', B2Home, MCH_SIM_STEP.COLLROT, 'C2', C2Home, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
; -- non devo fare alcunchè di speciale
|
||||
end
|
||||
end
|
||||
-- se lavorazione split, muovo per riaggancio del carro Y1
|
||||
@@ -818,11 +919,12 @@ function OnSimulMoveStart()
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
-- se primo movimento, eseguo movimento rotatorio preliminare
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
SimulMoveAxis( 'X2', SafeX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'C2', EMT.R1, MCH_SIM_STEP.RAPROT, 'B2', EMT.R2, MCH_SIM_STEP.RAPROT)
|
||||
else
|
||||
EMT.AuxAxes = 4 + 4
|
||||
EMT.A5n = 'X2'
|
||||
local X2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY + EMT.L2 + EMT.TLEN - EMT.HB)
|
||||
local X2 = Delta2TabY + EMT.DOU_TLEN - ( -DeltaTabY + EMT.L2 + EMT.TLEN + EgtIf( BD.RIGHT_LOAD, -EMT.HB, EMT.HB))
|
||||
if EMT.MCHTYPE == MCH_MY.DRILLING and EMT.FLAG == 101 then
|
||||
EMT.DOU_DRILL_END = -( EMT.L2p - EMT.L2)
|
||||
X2 = X2 + 2 * EMT.DOU_DRILL_END
|
||||
@@ -878,17 +980,28 @@ function OnSimulMoveStart()
|
||||
end
|
||||
end
|
||||
-- se necessario ...
|
||||
if EMT.MCHFIRST then
|
||||
if EMT.MCHFIRST and EMT.EnabAxes ~= false then
|
||||
if nSetHead == 1 then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID,
|
||||
'Z1', EMT.L3, MCH_SIM_STEP.RAPID,
|
||||
'C1', EMT.R1, MCH_SIM_STEP.RAPROT,
|
||||
'B1', EMT.R2, MCH_SIM_STEP.RAPROT)
|
||||
else
|
||||
'C1', EMT.R1, MCH_SIM_STEP.COLLROT,
|
||||
'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.DOU_TYPE and EMT.AuxAxes == 8 then
|
||||
SimulMoveAxes( 'X2', EMT.A5, MCH_SIM_STEP.RAPID,
|
||||
'Z2', EMT.A6, MCH_SIM_STEP.RAPID,
|
||||
'C2', EMT.A7, MCH_SIM_STEP.COLLROT,
|
||||
'B2', EMT.A8, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
elseif nSetHead == 2 then
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID,
|
||||
'Z2', EMT.L3, MCH_SIM_STEP.RAPID,
|
||||
'C2', EMT.R1, MCH_SIM_STEP.RAPROT,
|
||||
'B2', EMT.R2, MCH_SIM_STEP.RAPROT)
|
||||
'C2', EMT.R1, MCH_SIM_STEP.COLLROT,
|
||||
'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxes( 'X3', EMT.L2, MCH_SIM_STEP.RAPID,
|
||||
'Z3', EMT.L3, MCH_SIM_STEP.RAPID,
|
||||
'C3', EMT.R1, MCH_SIM_STEP.COLLROT,
|
||||
'B3', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
if nRes ~= 0 then
|
||||
@@ -905,7 +1018,7 @@ function OnSimulMoveEnd()
|
||||
-- se lavorazione split, dichiaro carro Y1 riagganciato
|
||||
if EMT.SPLIT_Y1DELTA then
|
||||
EMT.SPLIT_Y1DELTA = nil
|
||||
SetPY1Light( true)
|
||||
ExecMovePY1( true)
|
||||
end
|
||||
-- chiusura o apertura rulli V1
|
||||
if GetV1ToClose() then
|
||||
@@ -951,14 +1064,10 @@ function OnSimulCollision()
|
||||
-- se prima collisione della lavorazione, la segnalo
|
||||
if EMT.MCHNAME ~= EMT.LAST_MCHNAME_COLLIDE then
|
||||
local Class = ''
|
||||
if EMT.SIMCOBIND == 1001 then
|
||||
if EMT.SIMCOBIND == 1001 or EMT.SIMCOBIND == 1011 then
|
||||
Class = 'T_'..EMT.HEAD
|
||||
elseif EMT.SIMCOBIND == 1011 then
|
||||
Class = 'T_H21'
|
||||
elseif EMT.SIMCOBIND == 1002 then
|
||||
elseif EMT.SIMCOBIND == 1002 or EMT.SIMCOBIND == 1012 then
|
||||
Class = 'TH_'..EMT.HEAD
|
||||
elseif EMT.SIMCOBIND == 1012 then
|
||||
Class = 'TH_H21'
|
||||
else
|
||||
Class = EMT.COLLOBJ[EMT.SIMCOBIND].Cl
|
||||
end
|
||||
@@ -972,7 +1081,7 @@ function OnSimulCollision()
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecAuxCmd( sCmd)
|
||||
function ExecAuxCmd( sCmd, bPathStart)
|
||||
-- analizzo il comando
|
||||
local Cmd = EgtSplitString( sCmd)
|
||||
if Cmd[1] == '0' then
|
||||
@@ -985,29 +1094,31 @@ function ExecAuxCmd( sCmd)
|
||||
end
|
||||
EgtOutText( Cmd[2])
|
||||
elseif Cmd[1] == '1' then
|
||||
if EMT.SPLIT then ExecOpenRoller( 1) end
|
||||
if EMT.UNLOADING or EMT.TO_FALL then ExecOpenRoller( 2) end
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
sV2, MoveV2, MCH_SIM_STEP.RAPID)
|
||||
if not bOk then
|
||||
if not bOk1 then
|
||||
if VerifyY1Y2Stroke( Cmd[2], tonumber( Cmd[3])) == nil then
|
||||
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
|
||||
if Cmd[2] ~= 'Z' then
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
sV2, MoveV2, MCH_SIM_STEP.RAPID)
|
||||
if not bOk then
|
||||
if not bOk1 then
|
||||
if VerifyY1Y2Stroke( Cmd[2], tonumber( Cmd[3])) == nil then
|
||||
EgtOutLog( 'Error on ExecAuxCmd : ' .. sCmd)
|
||||
end
|
||||
elseif not bOk2 then
|
||||
VerifyV1V2Stroke( sV1, MoveV1)
|
||||
elseif not bOk3 then
|
||||
VerifyV1V2Stroke( sV2, MoveV2)
|
||||
end
|
||||
elseif not bOk2 then
|
||||
VerifyV1V2Stroke( sV1, MoveV1)
|
||||
elseif not bOk3 then
|
||||
VerifyV1V2Stroke( sV2, MoveV2)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '2' then
|
||||
-- Verifico movimento carrello con trave agganciata
|
||||
VerifyOneChariotSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5])
|
||||
-- Eseguo i movimenti necessari
|
||||
if EMT.SPLIT then ExecOpenRoller( 1) end
|
||||
if EMT.UNLOADING or EMT.TO_FALL then ExecOpenRoller( 2) end
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3, bOk4 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||
@@ -1029,8 +1140,8 @@ function ExecAuxCmd( sCmd)
|
||||
-- Verifico movimento carrelli con trave agganciata
|
||||
VerifyTwoChariotsSlide( Cmd[2], Cmd[3], Cmd[4], Cmd[5], Cmd[6], Cmd[7])
|
||||
-- Eseguo i movimenti necessari
|
||||
if EMT.SPLIT then ExecOpenRoller( 1) end
|
||||
if EMT.UNLOADING or EMT.TO_FALL then ExecOpenRoller( 2) end
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
local bOk, bOk1, bOk2, bOk3, bOk4, bOk5 = SimulMoveAxes( Cmd[2], tonumber( Cmd[3]), MCH_SIM_STEP.RAPID,
|
||||
Cmd[4], tonumber( Cmd[5]), MCH_SIM_STEP.RAPID,
|
||||
@@ -1050,13 +1161,13 @@ function ExecAuxCmd( sCmd)
|
||||
end
|
||||
end
|
||||
elseif Cmd[1] == '4' then
|
||||
ExecMoveHome( Cmd[2] == '1', EMT.MCHSPLIT)
|
||||
ExecMoveHome( Cmd[2] == '1', EgtIf( bPathStart, false, EMT.MCHSPLIT))
|
||||
elseif Cmd[1] == '11' then
|
||||
SimulMoveAxes( 'PY1', EgtIf( Cmd[2] == '0', MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY1Light( Cmd[2] ~= '0')
|
||||
local bClose = Cmd[2] ~= '0'
|
||||
if bPathStart and EMT.MCHSPLIT and not EMT.FALL and EMT.AUXIND >= 8 then bClose = false end
|
||||
ExecMovePY1( bClose)
|
||||
elseif Cmd[1] == '12' then
|
||||
SimulMoveAxes( 'PY2', EgtIf( Cmd[2] == '0', MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY2Light( Cmd[2] ~= '0')
|
||||
ExecMovePY2( Cmd[2] ~= '0')
|
||||
elseif Cmd[1] == '21' then
|
||||
local nY1Delta = tonumber( Cmd[2])
|
||||
local nY2Delta = tonumber( Cmd[3])
|
||||
@@ -1122,6 +1233,7 @@ end
|
||||
function ExecMoveHome( bNearV, bMchSplit)
|
||||
-- risalita a Zmax
|
||||
ExecMoveZmax( bMchSplit)
|
||||
EMT.TO_ZMAX = nil
|
||||
-- se testa sotto
|
||||
if GetHeadSet( EMT.HEAD) == 2 then
|
||||
if not SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID) then
|
||||
@@ -1167,58 +1279,30 @@ function ExecMoveZmax( bMchSplit)
|
||||
-- se fresa o lama
|
||||
if EMT.HEAD ~= 'H13' then
|
||||
if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then
|
||||
if EMT.TTOTLEN < LongTool then
|
||||
local bSafeZ = false
|
||||
local Z_EXTRA = EgtIf( EMT.HEAD == 'H11', 250, 160)
|
||||
if abs( CurrB) < 60 then
|
||||
local dZref = HomeZ + Z_EXTRA
|
||||
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
|
||||
bSafeZ = true
|
||||
elseif abs( CurrB) < 90 then
|
||||
local dZref = HomeZ + Z_EXTRA * ( 90 - abs( CurrB)) / 30
|
||||
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
|
||||
bSafeZ = true
|
||||
end
|
||||
if CurrX < DeltaTabY then
|
||||
if not bSafeZ then
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', EgtIf( CurrB > 0, 90, -90), MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'X1', DeltaTabY, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
local ANG_LIM_DOWN = EgtIf( EMT.HEAD == 'H11', 0, -45)
|
||||
local ANG_LIM_OPPO = 90
|
||||
if CurrB > ANG_LIM_DOWN then
|
||||
if CurrB > ANG_LIM_OPPO then
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', ANG_LIM_OPPO, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
if CurrB > 60 then
|
||||
SimulMoveAxes( 'Z1', HomeZ + Z_EXTRA, MCH_SIM_STEP.RAPID, 'B1', 60, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxes( 'Z1', HomeZ + Z_EXTRA, MCH_SIM_STEP.RAPID, 'B1', ANG_LIM_DOWN, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxis( 'Z1', HomeZ, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
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)
|
||||
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)
|
||||
end
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if CurrX > DeltaTabY then
|
||||
SimulMoveAxis( 'X1', DeltaTabY, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
-- salzo in Z sicurezza raddrizzando la B
|
||||
SimulMoveAxes( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', SafeX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
EMT.DOU_TO_ZMAX = nil
|
||||
elseif EMT.DOU_TYPE == 3 then
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
@@ -1226,11 +1310,15 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
EMT.DOU_TO_ZMAX = nil
|
||||
end
|
||||
-- altrimenti testa sotto
|
||||
else
|
||||
-- se altrimenti testa sotto
|
||||
elseif nSetHead == 2 then
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
-- altrimenti testa 3
|
||||
else
|
||||
SimulMoveAxes( 'Z3', MaxZ3, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'B3', ParkB3, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
end
|
||||
@@ -1244,14 +1332,14 @@ function ExecUnloading()
|
||||
-- li sposto per lasciare spazio al nuovo pezzo
|
||||
local nId = EgtGetFirstInGroup( nVmGrpId)
|
||||
while nId do
|
||||
EgtMove( nId, Vector3d( 0, -( EMT.HB + 50.0), 0), GDB_RT.GLOB)
|
||||
EgtMove( nId, Vector3d( 0, EgtIf( BD.RIGHT_LOAD, ( EMT.HB + 50.0), -( EMT.HB + 50.0)), 0), GDB_RT.GLOB)
|
||||
nId = EgtGetNext( nId)
|
||||
end
|
||||
-- creo un nuovo layer e vi inserisco il nuovo pezzo
|
||||
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
|
||||
EgtRelocate( vMillId, nLayId)
|
||||
local vtMove = Vector3d( 0, -1600, 0)
|
||||
if EMT.FALL then vtMove = Vector3d( 0, -2600, -1150) end
|
||||
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 1600, -1600), 0)
|
||||
if EMT.FALL then vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 3200, -2600), -1150) end
|
||||
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
||||
EgtSetLevel( vMillId, GDB_LV.USER)
|
||||
-- aggiungo gli spigoli
|
||||
@@ -1283,6 +1371,18 @@ function ExecUnloading()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePY1( bClose)
|
||||
SimulMoveAxes( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY1Light( bClose)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePY2( bClose)
|
||||
SimulMoveAxes( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY2Light( bClose)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function LinkRemainingPartsToY1()
|
||||
local nCurrOrd = GetPhaseOrd( EMT.PHASE)
|
||||
@@ -1312,6 +1412,9 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
-- Parcheggi pinze
|
||||
local MyParkY1 = ParkY1 + EgtIf( bAgg, AggLoad, 0)
|
||||
local MyParkY2 = ParkY2
|
||||
-- Apro i rulli, se necessario
|
||||
if abs( ParkV1 - PosV1) > 0.1 then ExecOpenRoller( 1) end
|
||||
if abs( ParkV2 - PosV2) > 0.1 then ExecOpenRoller( 2) end
|
||||
-- Eseguo spostamenti
|
||||
if EMT.Y1DELTA and EMT.Y2DELTA then
|
||||
local DiffY1 = MyParkY1 - PosY1
|
||||
@@ -1471,7 +1574,7 @@ function VerifyY1Slide( sName1, dVal1, sName2, dVal2)
|
||||
if sName1 == 'T' and sName2 == 'Y1' and GetPY1Light() then
|
||||
local dY1DeltaP = EgtGetAxisPos( 'Y1') - EgtGetAxisPos( 'T')
|
||||
local dY1DeltaA = tonumber( dVal2) - tonumber( dVal1)
|
||||
EgtOutLog( string.format( 'Y1DeltaP=%.3f YDeltaA=%.3f', dY1DeltaP, dY1DeltaA), 5)
|
||||
EgtOutLog( string.format( 'Y1DeltaP=%.3f Y1DeltaA=%.3f', dY1DeltaP, dY1DeltaA), 5)
|
||||
if abs( dY1DeltaA - dY1DeltaP) > 0.5 then
|
||||
EMT.ERR = 2
|
||||
local sErr = 'Y1 slide : ' .. EmtLenToString( dY1DeltaP, 3) .. ' -> ' .. EmtLenToString( dY1DeltaA, 3)
|
||||
@@ -1654,6 +1757,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function LoadFirstTool( nHSet, sTcPosDef)
|
||||
if nHSet ~= 1 and nHSet ~= 2 then return end
|
||||
EgtUnloadTool( EgtIf( nHSet == 1, 'H11', 'H21'), 1)
|
||||
if GetHeadSetFromTcPos( sTcPosDef) ~= nHSet then return end
|
||||
local sTool, sHead, sTcPos = FindFirstToolOnHeadSet( nHSet)
|
||||
if not sTool then
|
||||
@@ -1661,15 +1765,7 @@ function LoadFirstTool( nHSet, sTcPosDef)
|
||||
if vTools and vTools[1] then
|
||||
sTool = vTools[1]
|
||||
sTcPos = sTcPosDef
|
||||
if nHSet == 1 then
|
||||
if SecondSaw and sTcPos == 'T11' then
|
||||
sHead = 'H16'
|
||||
else
|
||||
sHead = EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
||||
end
|
||||
else
|
||||
sHead = 'H21'
|
||||
end
|
||||
sHead = GetAdjHeadFromTcPos( nHSet, sTcPos)
|
||||
end
|
||||
end
|
||||
if sTool then
|
||||
@@ -2088,38 +2184,6 @@ function GetParkT()
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSet( sHead)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
return 1
|
||||
elseif sHead == 'H21' then
|
||||
return 2
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSetFromTcPos( sTcPos)
|
||||
local TCPOS_1A = { 'T1', 'T3', 'T4', 'T5', 'T6', 'T7', 'T8', 'T9', 'T10'}
|
||||
local TCPOS_1B = { 'T101'}
|
||||
local TCPOS_1C = { 'T11', 'T12', 'T13', 'T14', 'T15', 'T16', 'T17', 'T18'}
|
||||
local TCPOS_2 = { 'T20', 'T21', 'T22', 'T23', 'T24', 'T25', 'T26', 'T27', 'T28', 'T29', 'T30'}
|
||||
for _, sVal in ipairs( TCPOS_1A) do
|
||||
if sVal == sTcPos then return 1, 1 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1B) do
|
||||
if sVal == sTcPos then return 1, 2 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1C) do
|
||||
if sVal == sTcPos then return 1, 3 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_2) do
|
||||
if sVal == sTcPos then return 2, 1 end
|
||||
end
|
||||
return 0, 0
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function FindFirstToolOnHeadSet( nHSet)
|
||||
-- salvo stato iniziale
|
||||
@@ -2170,8 +2234,8 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function GetCurrChainSawingVirtualAxis()
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A=0'
|
||||
local dPosA = tonumber( sVal:sub( 3)) or 0
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A1=0'
|
||||
local dPosA = tonumber( sVal:sub( 4)) or 0
|
||||
return dPosA
|
||||
end
|
||||
|
||||
@@ -2202,6 +2266,40 @@ function GetNextChainSawingVirtualAxis( MchId)
|
||||
return dPosA
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetCurrSawingVirtualAxis()
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS) or 'A2=0'
|
||||
local dPosA = tonumber( sVal:sub( 4)) or 0
|
||||
return dPosA
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetNextSawingVirtualAxis( MchId)
|
||||
-- recupero la lavorazione successiva
|
||||
local NextMchId
|
||||
if MchId then
|
||||
NextMchId = EgtGetNextActiveOperation( MchId)
|
||||
else
|
||||
NextMchId = EgtGetFirstActiveOperation()
|
||||
end
|
||||
while NextMchId and EgtGetOperationType( NextMchId) == MCH_OY.DISP do
|
||||
NextMchId = EgtGetNextActiveOperation( NextMchId)
|
||||
end
|
||||
-- verifico sia un taglio o fresatura con lama su aggregato da sotto
|
||||
if ( EgtGetOperationType( NextMchId) ~= MCH_OY.MILLING and EgtGetOperationType( NextMchId) ~= MCH_OY.SAWING) or EMT.HEAD ~= 'H22' then
|
||||
return nil
|
||||
end
|
||||
-- la imposto come lavorazione corrente
|
||||
EgtSetCurrMachining( NextMchId)
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local dPosA = GetCurrSawingVirtualAxis()
|
||||
-- ripristino la lavorazione corrente
|
||||
if MchId then
|
||||
EgtSetCurrMachining( MchId)
|
||||
end
|
||||
return dPosA
|
||||
end
|
||||
---------------------------------------------------------------------
|
||||
function GetStartMachiningXaxis( nMchId)
|
||||
-- Recupero quota X (nostro -L2)
|
||||
@@ -2218,7 +2316,7 @@ end
|
||||
function RollerParkingNeeded( sHead, dAng1p, dAng2p, dAng1, dAng2)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
elseif sHead == 'H21' then
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return ( abs( dAng1 - dAng1p) > 1 or ( abs( dAng2 - dAng2p) > 1 and abs( dAng1 % 180.0) > 1))
|
||||
end
|
||||
end
|
||||
@@ -1,17 +1,121 @@
|
||||
-- Special Operations macchina Essetre-PF1250 by EgalTech s.r.l. 2023/11/21
|
||||
-- Special Operations macchina Essetre-PF1250 by Egalware s.r.l. 2024/01/18
|
||||
-- Intestazioni
|
||||
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- Carico i dati globali
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
local BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
|
||||
EgtOutLog ( '** Essetre-PF1250 '..PP_VER..' **', 1)
|
||||
---------------------------------------------------------------------
|
||||
-- *** Special Z moves ***
|
||||
---------------------------------------------------------------------
|
||||
---------------------- OnSpecialGetMaxZ -----------------------------
|
||||
local function CalcExtraZ( vtTp, vtT, vMZ)
|
||||
-- la tabella deve esistere ed essere non vuota
|
||||
if not vMZ or #vMZ == 0 then return 0 end
|
||||
-- componente Z di riferimento è la minima
|
||||
local vtTz = min( vtTp:getZ(), vtT:getZ())
|
||||
-- se oltre il massimo
|
||||
if vtTz > vMZ[1].Tz then return vMZ[1].Ez end
|
||||
-- interpolo
|
||||
for i = 2, #vMZ do
|
||||
if vtTz > vMZ[i].Tz then
|
||||
local dCoeff = ( vtTz - vMZ[i-1].Tz) / ( vMZ[i].Tz - vMZ[i-1].Tz)
|
||||
return (( 1 - dCoeff) * vMZ[i-1].Ez + dCoeff * vMZ[i].Ez)
|
||||
end
|
||||
end
|
||||
-- sotto il minimo
|
||||
return 0
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSpecialGetMaxZ()
|
||||
-- Inizializzazioni
|
||||
EMC.ERR = 0
|
||||
|
||||
-- Gestione speciale per sega a catena
|
||||
if EMC.HEAD == 'H13' then
|
||||
EMC.MAXZ = EgtGetAxisHomePos( 'Z1')
|
||||
return
|
||||
end
|
||||
|
||||
-- Sistemazione dati di input
|
||||
local vtTp = Vector3d( EMC.TDIRp)
|
||||
local bFromZmax = false
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( EMC.HEAD)
|
||||
if vtTp:isSmall() then
|
||||
vtTp = X_AX()
|
||||
bFromZmax = true
|
||||
if nSetHead == 1 then
|
||||
EMC.R1p = ParkC1
|
||||
EMC.R2p = ParkB1
|
||||
elseif nSetHead == 2 then
|
||||
EMC.R1p = ParkC2
|
||||
EMC.R2p = ParkB2
|
||||
end
|
||||
end
|
||||
local vtT = Vector3d( EMC.TDIR)
|
||||
local vtTpZm = EgtIf( bFromZmax, vtT, vtTp)
|
||||
local bBSameSign = (( EMC.R2p < 10 and EMC.R2 < 10) or ( EMC.R2p > -10 and EMC.R2 > -10))
|
||||
|
||||
-- Calcolo in funzione della testa e dei parametri
|
||||
if EMC.HEAD == 'H11' then
|
||||
if bBSameSign and vtTp:getX() > -0.1 and vtT:getX() > -0.1 then
|
||||
EMC.MAXZ = MaxZ1
|
||||
else
|
||||
local vMZ = {{ Tz=0.85, Ez=390}, { Tz=0.5, Ez=280}, { Tz=-0.01, Ez=160}}
|
||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
else
|
||||
local vMZ = {{ Tz=0.85, Ez=400}, { Tz=0.7, Ez=300}, { Tz=0.5, Ez=195}, { Tz=0.15, Ez=70}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
else
|
||||
local vMZ = {{ Tz=0.85, Ez=400}, { Tz=0.7, Ez=300}, { Tz=0.5, Ez=195}, { Tz=0.15, Ez=70}, { Tz=-0.01, Ez=5}, { Tz=-0.5, Ez=1}}
|
||||
EMC.MAXZ = ParkZ1 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
elseif EMC.HEAD == 'H21' then
|
||||
if bBSameSign and vtTp:getX() > -0.1 and vtT:getX() > -0.1 then
|
||||
EMC.MAXZ = MaxZ2
|
||||
else
|
||||
local vMZ = {{ Tz=0.85, Ez=390}, { Tz=0.5, Ez=280}, { Tz=-0.01, Ez=160}}
|
||||
EMC.MAXZ = ParkZ2 + CalcExtraZ( vtTpZm, vtT, vMZ)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------- OnSpecialMoveZup -----------------------------
|
||||
---------------------------------------------------------------------
|
||||
function OnSpecialMoveZup()
|
||||
|
||||
--EgtOutLog( 'OnSpecialMoveZup : ' .. EMC.HEAD .. '.' .. tostring( EMC.EXIT))
|
||||
@@ -20,122 +124,69 @@ function OnSpecialMoveZup()
|
||||
EMC.ERR = 0
|
||||
EMC.MODIF = false
|
||||
|
||||
-- Direzione utensile
|
||||
local vtT = Vector3d( EMC.TDIR)
|
||||
|
||||
-- recupero Z1 home
|
||||
local dZmax = EgtGetAxisHomePos( 'Z1')
|
||||
local nHeadSet = GetHeadSet( EMC.HEAD)
|
||||
local dZmax = EgtGetAxisHomePos( EgtIf( nHeadSet ~= 2, 'Z1', 'Z2'))
|
||||
|
||||
--EgtOutLog( string.format( 'Zhome=%.3f L3=%.3f R2=%.3f Flag=%i', dZmax, EMC.L3, EMC.R2, EMC.FLAG))
|
||||
|
||||
-- se fresa su testa1
|
||||
if EMC.HEAD == 'H11' then
|
||||
local Z_EXTRA = 250
|
||||
-- se inclinata oltre 90 gradi
|
||||
if abs( EMC.R2) > 89.9 then
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZmax - 30 then
|
||||
-- sistemo asse rotante
|
||||
EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
-- ricalcolo versore utensile
|
||||
EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZmax
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
-- se inclinata oltre i 60 gradi
|
||||
elseif abs( EMC.R2) > 60 then
|
||||
local dZref = min( dZmax + Z_EXTRA * ( 90 - abs( EMC.R2)) / 30, MaxZ1)
|
||||
-- se troppo in basso
|
||||
if EMC.L3 < dZref - 0.1 then
|
||||
if ( EMC.FLAG == 2 or EMC.FLAG == 3) and EMC.FLAG2 == 1 then
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
-- se troppo alto
|
||||
elseif EMC.L3 > dZref + 0.1 then
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
-- altrimenti inclinata meno di 60 gradi
|
||||
else
|
||||
local dZref = min( dZmax + Z_EXTRA, MaxZ1)
|
||||
-- se troppo in basso
|
||||
if EMC.L3 < dZref - 0.1 then
|
||||
if ( EMC.FLAG == 2 or EMC.FLAG == 3) and EMC.FLAG2 == 1 then
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
-- se troppo alto
|
||||
elseif EMC.L3 > dZref + 0.1 then
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
-- se fresa su testa1 o testa 2
|
||||
if EMC.HEAD == 'H11' or EMC.HEAD == 'H21' or EMC.HEAD == 'H22' then
|
||||
;
|
||||
-- se lama
|
||||
else
|
||||
-- riporto i valori tra -179 e + 180
|
||||
local dCheckAxR1 = EMC.R1
|
||||
if dCheckAxR1 < -180 then
|
||||
dCheckAxR1 = dCheckAxR1 + 360
|
||||
elseif dCheckAxR1 > 180 then
|
||||
dCheckAxR1 = dCheckAxR1 - 360
|
||||
end
|
||||
-- se lama su testa1
|
||||
elseif EMC.HEAD == 'H12' or EMC.HEAD == 'H16' then
|
||||
local Z_EXTRA = 160
|
||||
-- se inclinata oltre 90 gradi
|
||||
if abs( EMC.R2) > 89.9 then
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZmax - 100 then
|
||||
-- sistemo asse rotante
|
||||
EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
-- ricalcolo versore utensile
|
||||
EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZmax
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
-- se inclinata oltre i 60 gradi
|
||||
elseif abs( EMC.R2) > 60 then
|
||||
local dZref = dZmax + Z_EXTRA * ( 90 - abs( EMC.R2)) / 30
|
||||
-- se troppo in basso
|
||||
if EMC.L3 < dZref - 0.1 then
|
||||
--if ( EMC.FLAG == 2 or EMC.FLAG == 3) and EMC.FLAG2 == 1 then
|
||||
-- porto alla giusta quota
|
||||
-- se lama su testa1
|
||||
if EMC.HEAD == 'H12' then
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( dCheckAxR1 < 15.0 or dCheckAxR1 > 180.0)) or ( EMC.R2 < -87.9 and ( dCheckAxR1 > -15.0 and dCheckAxR1 < 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZref + 1 then
|
||||
---- sistemo asse rotante
|
||||
--EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
---- ricalcolo versore utensile
|
||||
--EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
---- porto alla giusta quota
|
||||
--EMC.L3 = dZmax
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
--end
|
||||
-- se troppo alto
|
||||
elseif EMC.L3 > dZref + 0.1 then
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
end
|
||||
-- altrimenti inclinata meno di 60 gradi
|
||||
else
|
||||
local dZref = dZmax + Z_EXTRA
|
||||
-- se troppo in basso
|
||||
if EMC.L3 < dZref - 0.1 then
|
||||
--if ( EMC.FLAG == 2 or EMC.FLAG == 3) and EMC.FLAG2 == 1 then
|
||||
-- porto alla giusta quota
|
||||
-- se seconda lama su testa1
|
||||
elseif EMC.HEAD == 'H16' then
|
||||
-- se inclinata oltre 90 gradi e interferisce con la trave
|
||||
if ( EMC.R2 > 87.9 and ( dCheckAxR1 < 15.0 or dCheckAxR1 > 180.0)) or ( EMC.R2 < -87.9 and ( dCheckAxR1 > -15.0 and dCheckAxR1< 180.0)) then
|
||||
local dZref = dZmax + min( 330 * vtT:getZ(), 0) + 260 * ( 1 - sqrt( 1- vtT:getZ() * vtT:getZ()))
|
||||
-- se troppo in alto
|
||||
if EMC.L3 > dZref + 1 then
|
||||
---- sistemo asse rotante
|
||||
--EMC.R2 = EgtIf( ( EMC.R2 > 0), 90, -90)
|
||||
---- ricalcolo versore utensile
|
||||
--EMC.TDIR = EgtGetCalcToolDirFromAngles( EMC.R1, EMC.R2)
|
||||
---- porto alla giusta quota
|
||||
--EMC.L3 = dZmax
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
--end
|
||||
-- se troppo alto
|
||||
elseif EMC.L3 > dZref + 0.1 then
|
||||
-- porto alla giusta quota
|
||||
EMC.L3 = dZref
|
||||
-- dichiaro modificato
|
||||
EMC.MODIF = true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
---------- OnSpecialApplyDisposition & OnPostApplyMachining ---------
|
||||
---------------------------------------------------------------------
|
||||
-- *** OnSpecialApplyDisposition & OnPostApplyMachining ***
|
||||
---------------------------------------------------------------------
|
||||
----------------------- Costanti ------------------------------------
|
||||
local DELTA_SIC = 1
|
||||
local MinJoin = BD.MIN_JOIN_S
|
||||
@@ -202,6 +253,22 @@ local function GetNextStartOrRestPhase( nPhase)
|
||||
return nNextPhase
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function IsFirstMachiningOfStart( nMchId)
|
||||
-- se non è fase inizio di pezzo, ritorno risultato negativo
|
||||
if not IsStartOrRestPhase( EMC.PHASE) then
|
||||
return false
|
||||
end
|
||||
-- recupero la precedente operazione attiva
|
||||
local nPrevOperId = EgtGetPrevActiveOperation( nMchId)
|
||||
-- se non esiste o non è una disposizione, ritorno risultato negativo
|
||||
if not nPrevOperId or EgtGetOperationType( nPrevOperId) ~= MCH_OY.DISP then
|
||||
return false
|
||||
end
|
||||
-- è la prima
|
||||
return true
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
local function UpdateMinJoin()
|
||||
MinJoin = BD.GetMinJoin( EMC.SB, EMC.HB, EMC.LB)
|
||||
@@ -437,7 +504,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function OnPostApplyMachining()
|
||||
|
||||
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID), 1)
|
||||
EgtOutLog( ' Lavorazione : ' .. EgtGetName( EMC.MCHID) .. ' (' .. tostring( EMC.MCHID) .. ')')
|
||||
|
||||
-- Inizializzo codice di errore
|
||||
EMC.ERR = 0
|
||||
@@ -618,6 +685,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
EMC.SB = b3Tot:getDimY()
|
||||
EMC.HB = b3Tot:getDimZ()
|
||||
EMC.LT = b3Raw:getDimX()
|
||||
EgtOutLog( ' BarLen='..EgtNumToString( EMC.LB, 1), 3)
|
||||
|
||||
-- Aggiorno limiti di presa
|
||||
UpdateMinJoin()
|
||||
@@ -697,6 +765,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
|
||||
-- Altrimenti, non muovo i carrelli rispetto alla trave ma impongo la posizione dei rulli
|
||||
else
|
||||
SpecOutputCNT()
|
||||
local vCmd = {}
|
||||
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
|
||||
table.insert( vCmd, { 22, dRollBack, -dRollFront})
|
||||
@@ -730,7 +799,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload)
|
||||
return false
|
||||
end
|
||||
-- eseguo la separazione
|
||||
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1))
|
||||
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1), 1)
|
||||
vCmd = SpecCalcSplit( b3Raw:getDimX(), dMaxLenLeft)
|
||||
end
|
||||
-- Se taglio finale di grezzo a perdere
|
||||
@@ -797,23 +866,32 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
||||
for i = 1, #vAxMin do
|
||||
vAxMid[i] = ( vAxMin[i] + vAxMax[i]) / 2
|
||||
end
|
||||
-- recupero il gruppo
|
||||
local nSetHead = GetHeadSet( sHead)
|
||||
-- Calcolo dell'ingombro della testa rispetto allo Zero Macchina (assi rotanti fissi, C=4, B=5, A=6)
|
||||
local b3Enc
|
||||
if sHead ~= 'H21' then
|
||||
if nSetHead == 1 then
|
||||
EgtSetAxisPos( 'C1', vAxMid[4])
|
||||
EgtSetAxisPos( 'B1', vAxMid[5])
|
||||
if sHead == 'H13' then
|
||||
EgtSetAxisPos( 'A', vAxMid[6])
|
||||
EgtSetAxisPos( 'A1', vAxMid[6])
|
||||
end
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C1'), GDB_BB.ONLY_VISIBLE)
|
||||
else
|
||||
elseif nSetHead == 2 then
|
||||
EgtSetAxisPos( 'C2', vAxMid[4])
|
||||
EgtSetAxisPos( 'B2', vAxMid[5])
|
||||
if sHead == 'H22' then
|
||||
EgtSetAxisPos( 'A2', vAxMid[6])
|
||||
end
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C2'), GDB_BB.ONLY_VISIBLE)
|
||||
else -- 'H31'
|
||||
EgtSetAxisPos( 'C3', vAxMid[4])
|
||||
EgtSetAxisPos( 'B3', vAxMid[5])
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C3'), GDB_BB.ONLY_VISIBLE)
|
||||
end
|
||||
local dMinFrontEng = EgtIf( sHead ~= 'H21', MIN_ENG_RACK_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dMinFrontEng = EgtIf( nSetHead ~= 2, MIN_ENG_RACK_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dRollFront = max( b3Enc:getMax():getX(), dMinFrontEng) + SIC_V
|
||||
local dMinBackEng = EgtIf( sHead ~= 'H21', MIN_ENG_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dMinBackEng = EgtIf( nSetHead ~= 2, MIN_ENG_V, EgtIf( vAxMax[3] < MIN_Z2_FOR_ENG_XZ2_V, MIN_ENG_V, MIN_ENG_XZ2_V))
|
||||
local dRollBack = max( -b3Enc:getMin():getX(), dMinBackEng) + SIC_V
|
||||
EgtOutLog( ' RollFront = ' .. EgtNumToString( dRollFront, 1) .. ' RollBack = ' .. EgtNumToString( dRollBack, 1), 3)
|
||||
-- Calcolo della posizione della Punta Utensile rispetto allo Zero Macchina
|
||||
@@ -910,7 +988,7 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
|
||||
local dNewY1min = max( EMC.LB - dDistBack, MinOther + AggLoad + EMC.HCING + EMC.HOVM)
|
||||
local dNewY1max = min( ( MaxY1 - MinY1) - 5, EMC.LB - MinJoin)
|
||||
if dNewY1min > dNewY1max then return nil end
|
||||
local dNewY1Delta = dNewY1max
|
||||
local dNewY1Delta = EgtClamp( BD.CHAR_LOAD_DIST or 3000, 0.75 * dNewY1min + 0.25 * dNewY1max, 0.25 * dNewY1min + 0.75 * dNewY1max)
|
||||
local dNewY2Delta = nil
|
||||
local dNewY1 = dPosT + dNewY1Delta
|
||||
local vCmd = {}
|
||||
@@ -1000,8 +1078,8 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
return {}
|
||||
end
|
||||
|
||||
-- al carico si deve ignorare l'ingombro delle lavorazioni di testa per il pinzaggio
|
||||
if EMC.LOAD then EMC.HCING = 0 end
|
||||
-- al carico o con prima lavorazione di un pezzo si deve ignorare l'ingombro delle lavorazioni di testa per il pinzaggio
|
||||
if EMC.LOAD or IsFirstMachiningOfStart( EMC.MCHID) then EMC.HCING = 0 end
|
||||
|
||||
return SpecAdjustCarriages( WorkTab)
|
||||
|
||||
@@ -2198,7 +2276,7 @@ function SpecAdjustCarrC( WorkTab)
|
||||
WorkTab.dY1DeltaMaxF = EMC.LB - ( MinJoin + MyTCING)
|
||||
-- se Y1 deve accentrarsi
|
||||
if WorkTab.dY1DeltaI > WorkTab.dY1DeltaMaxF then
|
||||
WorkTab.dY1DeltaMinF = EMC.LB - 2 * MinJoin + MyTCING
|
||||
WorkTab.dY1DeltaMinF = EMC.LB - 2 * MinJoin - MyTCING
|
||||
end
|
||||
end
|
||||
-- posizioni obiettivo dei carrelli al centro dei rispettivi intervalli di validità
|
||||
+144
-15
@@ -1,4 +1,4 @@
|
||||
-- Descrizione macchina Essetre-PF1250 by EgalTech s.r.l. 2023/12/05
|
||||
-- Descrizione macchina Essetre-PF1250 by EgalTech s.r.l. 2024/01/18
|
||||
-- 2021/08/03 ver 2.3h1 Prima versione.
|
||||
-- 2021/09/14 ver 2.3i9 Estesa gestione sega a catena.
|
||||
-- 2021/09/15 ver 2.3i10 Correzione gestione posizione rimanenza.
|
||||
@@ -33,14 +33,29 @@
|
||||
-- Piccole modifiche per allineamento a PF1250rl
|
||||
-- 2023/12/04 ver 2.5l1 In dinamica pinze risultati finali non più accelerazioni ma tempi rampa in ms (P7, P8 e P9 di M115).
|
||||
-- 2023/12/05 ver 2.5l2 In dinamica pinze corretto typo in nomi variabili.
|
||||
-- 2023/12/05 ver 2.5l3 In M111 si scrive il DeltaY (distanza testa trave - pinzaY1) come commento
|
||||
-- 2023/12/05 ver 2.5l4 Corretto segno calcolo posizione seconda testa in lavorazioni in doppio
|
||||
-- 2023/12/11 ver 2.5l5 Allineamento movimento in zmax come PF1250rl
|
||||
-- 2024/01/18 ver 2.6a1 Correzione gestione apertura/chiusura rulli sul fine barra (#1630) e in generale.
|
||||
-- 2024/01/22 ver 2.6a2 Modificato solido collisionee asse Z
|
||||
-- Prima versione post common PF1250
|
||||
-- Allineamento con common ver. 2.6a3
|
||||
|
||||
-- Intestazioni
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
PP_VER = '2.5l1'
|
||||
PP_VER = '2.6a2'
|
||||
MIN_MACH_VER = '2.5k1'
|
||||
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
INFO_STD_PP = dofile( sBaseDir .. 'Version.lua')
|
||||
-- prendo la versione kernel minima necessaria piu' nuova tra macchina e script comuni
|
||||
if INFO_STD_PP.MIN_MACH_VER_PP_COMMON > MIN_MACH_VER then
|
||||
MIN_MACH_VER = INFO_STD_PP.MIN_MACH_VER_PP_COMMON
|
||||
end
|
||||
|
||||
EgtOutLog ( '** Essetre-PF1250 '..PP_VER..' (MinMach '.. MIN_MACH_VER ..') **', 1)
|
||||
|
||||
-- Parametri macchina
|
||||
NumericalControl = 'TPA' -- NUM o TPA
|
||||
@@ -98,7 +113,7 @@ MinB1b = -119
|
||||
MaxB1b = 119
|
||||
ParkX1 = 250
|
||||
ParkTc2X1 = 3100
|
||||
ParkZ1 = -535
|
||||
ParkZ1 = -545
|
||||
ParkC1 = -90
|
||||
ParkB1 = -90
|
||||
ParkCSawX1 = 1500
|
||||
@@ -120,6 +135,7 @@ MaxC2 = 275
|
||||
MinB2 = -127
|
||||
MaxB2 = 127
|
||||
ParkX2 = -100
|
||||
SafeX2 = -400
|
||||
ParkZ2 = 0
|
||||
ParkC2 = -90
|
||||
ParkB2 = -90
|
||||
@@ -139,8 +155,15 @@ Head2Z = DeltaTabZ - Delta2TabZ
|
||||
DefTcPos1 = 'T1'
|
||||
DefTcPos2 = 'T30'
|
||||
CoeffVM = 0.5
|
||||
MinForzaPinze = 400 -- [Kgf]
|
||||
MaxForzaPinze = 1000 -- [Kgf]
|
||||
Tc2Active = true
|
||||
SecondSaw = true
|
||||
SecondChain = false -- magazzino seconda sega a catena
|
||||
TcSpecialTools = false -- magarzzino per utensili speciali. In genere truciolatore
|
||||
TcAggreBladeUnder = false -- lama su aggregato per testa da sotto
|
||||
EmitAccClamps = true
|
||||
WriteAllCoordsOnFirstM101 = true
|
||||
|
||||
-- Aggiornamento con dati da TechnoEssetre7
|
||||
local sTs3Data = EgtGetStringFromIni( 'Beam', 'DATA_DIR', "C:\\TechnoEssetre7\\EgtData", EgtGetIniFile()).."\\Essetre-PF1250.data"
|
||||
@@ -160,6 +183,7 @@ if EgtExistsFile( sDataBeam) then
|
||||
--NumericalControl = EgtIf( Machine.Offsets.TIPO_CN == 0, 'NUM', 'TPA')
|
||||
if Machine.Offsets.X1_POS then MinX1 = -Machine.Offsets.X1_POS end
|
||||
if Machine.Offsets.X1_NEG then MaxX1 = -Machine.Offsets.X1_NEG end
|
||||
if Machine.Offsets.PARK_X1 then ParkX1 = Machine.Offsets.PARK_X1 end
|
||||
if Machine.Offsets.Z1_NEG then MinZ1 = Machine.Offsets.Z1_NEG end
|
||||
if Machine.Offsets.Z1_POS then MaxZ1 = min( MaxZ1, Machine.Offsets.Z1_POS) end
|
||||
if Machine.Offsets.PARK_Z1 then ParkZ1 = Machine.Offsets.PARK_Z1 end
|
||||
@@ -171,9 +195,11 @@ if EgtExistsFile( sDataBeam) then
|
||||
if Machine.Offsets.B1_POS1 then MaxB1b = Machine.Offsets.B1_POS1 end
|
||||
if Machine.Offsets.X2_NEG then MinX2 = Machine.Offsets.X2_NEG end
|
||||
if Machine.Offsets.X2_POS then MaxX2 = Machine.Offsets.X2_POS end
|
||||
if Machine.Offsets.PARK_X2 then ParkX2 = Machine.Offsets.PARK_X2 end
|
||||
if Machine.Offsets.Z2_POS then MinZ2 = -Machine.Offsets.Z2_POS end
|
||||
if Machine.Offsets.Z2_NEG then MaxZ2 = -Machine.Offsets.Z2_NEG end
|
||||
if Machine.Offsets.PARK_Z2 then ParkZ2 = -Machine.Offsets.PARK_Z2 end
|
||||
if Machine.Offsets.PARK_Z2_INLAV then ParkInLavZ2 = -Machine.Offsets.PARK_Z2_INLAV end
|
||||
if Machine.Offsets.C2_NEG then MinC2 = Machine.Offsets.C2_NEG end
|
||||
if Machine.Offsets.C2_POS then MaxC2 = Machine.Offsets.C2_POS end
|
||||
if Machine.Offsets.B2_NEG then MinB2 = Machine.Offsets.B2_NEG end
|
||||
@@ -210,6 +236,8 @@ if EgtExistsFile( sDataBeam) then
|
||||
if Machine.Offsets.SAW2OFFSZ then Saw2OffsZ = Machine.Offsets.SAW2OFFSZ end
|
||||
if Machine.Offsets.DEFTCPOS1 then DefTcPos1 = ( 'T' .. Machine.Offsets.DEFTCPOS1) end
|
||||
if Machine.Offsets.DEFTCPOS2 then DefTcPos2 = ( 'T' .. Machine.Offsets.DEFTCPOS2) end
|
||||
if Machine.Offsets.MINPRESS then MinForzaPinze = Machine.Offsets.MINPRESS end
|
||||
if Machine.Offsets.MAXPRESS then MaxForzaPinze = Machine.Offsets.MAXPRESS end
|
||||
-- aggiustamenti
|
||||
MinY1 = MinV1 + MinDeltaYV
|
||||
MaxY1 = MaxMchY1
|
||||
@@ -236,8 +264,8 @@ EmtGeneral {
|
||||
ExitMaxAdjust = 300,
|
||||
ExitMaxRotAdj = 0.5,
|
||||
AngDeltaMinForHome = 80,
|
||||
Special = 'Essetre-PF1250.mlse',
|
||||
Processor = 'Essetre-PF1250.mlpe'}
|
||||
Special = 'Common-PF1250.mlse',
|
||||
Processor = 'Common-PF1250.mlpe'}
|
||||
local sBaseAux = {'BASE/SOLID', 'BASE/CONVOYER', 'BASE/COLLISION', 'BASE/TC1', 'BASE/TCR', 'BASE/TC3'}
|
||||
if Tc2Active then table.insert( sBaseAux, 5, 'BASE/TC2') end
|
||||
local BaseId = EmtBase {
|
||||
@@ -338,7 +366,7 @@ if SecondSaw then
|
||||
end
|
||||
-- Sega a catena
|
||||
EmtAxis {
|
||||
Name = 'A',
|
||||
Name = 'A1',
|
||||
Parent = 'B1',
|
||||
Token = '**',
|
||||
Type = MCH_AT.ROTARY,
|
||||
@@ -346,10 +374,10 @@ EmtAxis {
|
||||
Pos = Point3d( 0, 0, 0),
|
||||
Stroke = { 0, 270},
|
||||
Home = 0,
|
||||
Geo = 'A_AXIS/GEO'}
|
||||
Geo = 'A1_AXIS/GEO'}
|
||||
local H13Id = EmtHead {
|
||||
Name = 'H13',
|
||||
Parent = 'A',
|
||||
Parent = 'A1',
|
||||
HSet = 'H11',
|
||||
Type = MCH_HT.STD,
|
||||
Pos = Point3d(0,0,-ChSawLen),
|
||||
@@ -823,9 +851,8 @@ function OnSetHead()
|
||||
local vtMove = Point3d( 0, 0, -dDist) - Point3d( EMC.EXITPOS)
|
||||
local ExitId = EgtGetFirstNameInGroup( EgtGetHeadId( EMC.HEAD), 'T'..tostring( EMC.EXIT))
|
||||
EgtMove( ExitId, vtMove)
|
||||
-- recupero valore asse A bloccato
|
||||
local sVal = EgtGetMachiningParam( MCH_MP.BLOCKEDAXIS)
|
||||
CSawPosA = tonumber( sVal:sub( 3) or '')
|
||||
-- recupero il valore dell'asse virtuale bloccato A
|
||||
local CSawPosA = GetCurrChainSawingVirtualAxis()
|
||||
EmtModifyAxisHome( 'X1', ParkCSawX1)
|
||||
EmtModifyAxisHome( 'Z1', GetChainSawZHomeFromVirtualAxis( CSawPosA))
|
||||
EmtModifyAxisStroke( 'C1', {MinC1, MaxC1})
|
||||
@@ -856,6 +883,64 @@ function GetTcForTopHeadTool( sTcPos)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSet( sHead)
|
||||
if sHead == 'H11' or sHead == 'H12' or sHead == 'H13' or sHead == 'H16' then
|
||||
return 1
|
||||
elseif sHead == 'H21' or sHead == 'H22' then
|
||||
return 2
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetHeadSetFromTcPos( sTcPos)
|
||||
local TCPOS_1A = { 'T1', 'T3', 'T4', 'T5', 'T6', 'T7', 'T8', 'T9', 'T10'} -- CU montante DX
|
||||
local TCPOS_1B = { 'T101'} -- CU sotto traversa
|
||||
local TCPOS_1C = { 'T11', 'T12', 'T13', 'T14', 'T15'} -- CU montante sinistro
|
||||
local TCPOS_2A = { 'T20', 'T21', 'T22', 'T23', 'T24', 'T25', 'T26', 'T27', 'T28', 'T29', 'T30'} -- CU margherita testa 2
|
||||
local TCPOS_2B = {} -- CU lama su aggregato testa 2
|
||||
for _, sVal in ipairs( TCPOS_1A) do
|
||||
if sVal == sTcPos then return 1, 1 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1B) do
|
||||
if sVal == sTcPos then return 1, 2 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_1C) do
|
||||
if sVal == sTcPos then return 1, 3 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_2A) do
|
||||
if sVal == sTcPos then return 2, 1 end
|
||||
end
|
||||
for _, sVal in ipairs( TCPOS_2B) do
|
||||
if sVal == sTcPos then return 2, 2 end
|
||||
end
|
||||
return 0, 0
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che ritorna il nome della testa in base alla posizione utensile (ATT: deve rispecchiare il setup)
|
||||
function GetAdjHeadFromTcPos( nHeadSet, sTcPos)
|
||||
if nHeadSet == 1 then
|
||||
-- seconda lama
|
||||
if SecondSaw and sTcPos == 'T12' then
|
||||
return 'H16'
|
||||
-- motoseghe
|
||||
elseif sTcPos == 'T101' then
|
||||
return 'H13'
|
||||
-- utensili standard o prima lama
|
||||
else
|
||||
return EgtIf( sTcPos == 'T1', 'H12', 'H11')
|
||||
end
|
||||
elseif nHeadSet == 2 then
|
||||
|
||||
return 'H21'
|
||||
|
||||
else
|
||||
return ''
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che riconosce testa per sega a catena
|
||||
function HeadIsChainSaw( sHead)
|
||||
@@ -865,10 +950,10 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che calcola la posizione Home di Z per la sega a catena dal valore dell'asse virtuale
|
||||
function GetChainSawZHomeFromVirtualAxis( dPosA)
|
||||
-- se A=0 -> T101 -> HomeZ = -400
|
||||
-- se A1=0 -> T101 -> HomeZ = -400
|
||||
if abs( dPosA) < 0.1 then
|
||||
return ParkCSaw0Z1
|
||||
-- altrimenti A=-90 -> T102 o A=90 -> T104 -> HomeZ = -100
|
||||
-- altrimenti A1=-90 -> T102 o A=90 -> T104 -> HomeZ = -100
|
||||
else
|
||||
return ParkCSawZ1
|
||||
end
|
||||
@@ -877,15 +962,59 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che calcola l'angolo Home di C per la sega a catena dal valore dell'asse virtuale
|
||||
function GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
-- se A=0 -> T101 -> HomeC = 0
|
||||
-- se A1=0 -> T101 -> HomeC = 0
|
||||
if abs( dPosA) < 0.1 then
|
||||
return ParkCSaw0C1
|
||||
-- altrimenti A=90 -> T104 -> HomeC = -90
|
||||
-- altrimenti A1=90 -> T104 -> HomeC = -90
|
||||
else
|
||||
return ParkCSawC1
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che calcola l'angolo Home di C per la lama su aggregato dal valore dell'asse virtuale
|
||||
function GetSawCHomeFromVirtualAxis( dPosA)
|
||||
-- se A2=0 -> 201 -> HomeC = -90
|
||||
if abs( dPosA) < 0.1 then
|
||||
return ParkSaw0C2
|
||||
-- altrimenti A2=90 -> T204 -> HomeC = -90
|
||||
else
|
||||
return ParkSawC2
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione che ritorna ZExtra partendo dalla testa e dall'angolo verticale
|
||||
function GetZExtra( sHead, dAngV)
|
||||
-- se testa standard
|
||||
if sHead == 'H11' then
|
||||
if abs( dAngV) < 30.1 then
|
||||
return 400
|
||||
elseif abs( dAngV) < 45.1 then
|
||||
return 300
|
||||
elseif abs( dAngV) < 60.1 then
|
||||
return 200
|
||||
elseif abs( dAngV) < 90.1 then
|
||||
return 10
|
||||
else
|
||||
return 0
|
||||
end
|
||||
-- se aggregato lama
|
||||
elseif sHead == 'H12' or sHead == 'H16' then
|
||||
if abs( dAngV) < 30.1 then
|
||||
return 400
|
||||
elseif abs( dAngV) < 45.1 then
|
||||
return 300
|
||||
elseif abs( dAngV) < 60.1 then
|
||||
return 200
|
||||
elseif abs( dAngV) < 90.1 then
|
||||
return 10
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- Funzione per impostare spia stato morsa carrello Y1
|
||||
function SetPY1Light( bClosed)
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
==== Common_PF1250 Update Log ====
|
||||
|
||||
Versione 2.6a1 (09/01/2024)
|
||||
- Prima versione post-proc comune tra macchine PF1250 e PF1500
|
||||
- (SIM-GEN) Corretto movimento testa 2 in ToolDesel e movimento controllo collisione
|
||||
- (GEN) Tolta testa H14 per utensili speciali. Si utilizza H11 per frese standard
|
||||
- (MLDE-GEN) Costanti 'MinForzaPinze' e 'MaxForzaPinze' portati in mlde/Ts3data (erano hardcoded)
|
||||
- (MLDE-SIM-GEN) Aggiunto parametro 'WriteAllCoordsOnFirstM101' per decidere se stampare tutti gli assi sulla prima M101
|
||||
|
||||
Versione 2.6a2 (19/01/2024)
|
||||
- (GEN) Corretta inversione coordinata X per Lama su aggregato da sotto
|
||||
- (SIM) Se modalità 'WriteAllCoordsOnFirstM101', oltre alla X si scive quota di parcheggio assi B2 e C2 come in generazione
|
||||
- (SIM-GEN) Tolta gestione rotazione pezzo (di derivazione PF), in macchina non è previsto ribaltamento
|
||||
- (GEN) Migliorata gestione preselezione utensile
|
||||
- (MLDE-GEN) Aggiunto flag 'EmitRapidInG0' per decidere se scrivere G0 anziché G1. Se flag a nil, scrive i rapidi in G1
|
||||
|
||||
Versione 2.6a3 (22/01/2024)
|
||||
- (SIM-GEN) Correzione gestione apertura/chiusura rulli sul fine barra (#1630) e in generale
|
||||
- (GEN) Modificato flag 'EmitRapidInG0' in 'EmitRapidInG1' per decidere se scrivere G1 anziché G0. Se flag a nil, scrive i rapidi in G0
|
||||
- (SIM) Correzione movimenti pinze prima di separazione
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
-- Version.lua by EgalWare s.r.l. 2024/01/19
|
||||
-- Gestione della versione dei file comuni post-processori macchine PF1250 e PF1500 di Essetre
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_PF1250', -- nome script PP standard
|
||||
VERSION = '2.6a3', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
return InfoCommon_STD_PP
|
||||
Reference in New Issue
Block a user