Compare commits
130 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b2c2f4819b | |||
| e06f67b22a | |||
| 24cbfe0737 | |||
| 6df44b4a74 | |||
| 2d43a594d1 | |||
| 5cb0055dc9 | |||
| e33a6c163e | |||
| 171ff119b0 | |||
| 8733ed4007 | |||
| c650b259ff | |||
| c74ff69f55 | |||
| 64bbe6947f | |||
| a3ad415f3e | |||
| 382736ae14 | |||
| b7be5c1b2a | |||
| 67c6573974 | |||
| 85fbb5830d | |||
| 5b3d0e897f | |||
| 8a4bbff20b | |||
| 6e799468ae | |||
| 524bbb1edc | |||
| 7fa71a1002 | |||
| 03218233f7 | |||
| 8a3d1e05f6 | |||
| 009216d59c | |||
| 20b54428f8 | |||
| 492af68caf | |||
| e6e37c6c51 | |||
| 9cffde0047 | |||
| 5af712e8a9 | |||
| 91d5656a3d | |||
| c05b8a4117 | |||
| 824cf6eda2 | |||
| f1262e191f | |||
| 343298e87f | |||
| 49951262c9 | |||
| be109120f1 | |||
| f677ef6213 | |||
| dfb5952a85 | |||
| cdbb04441b | |||
| 5620e2b9e5 | |||
| 9b99aa2a40 | |||
| 97ae764439 | |||
| 566bb9e592 | |||
| 9948a9cfeb | |||
| 8901acb95a | |||
| 74d58029a5 | |||
| f25aecf62a | |||
| 3d4246e540 | |||
| dad97ad557 | |||
| 6c84aacd5a | |||
| 3cd9d39aa0 | |||
| 77bb66d8d6 | |||
| a3b714f790 | |||
| 929e1308a9 | |||
| 37d98a4324 | |||
| f3890dc20f | |||
| 8bd92a578b | |||
| 37b9eb3a9b | |||
| ac09d872eb | |||
| 047669d63f | |||
| fcaeb8530b | |||
| d174f8b79f | |||
| 621a31e283 | |||
| acdc1cfce6 | |||
| 8d162200b1 | |||
| 59e132478d | |||
| 62aefca5c8 | |||
| 530f70de94 | |||
| 04a2d35872 | |||
| edf7a29dfb | |||
| 2edcbf52ad | |||
| 0fa2ea3c67 | |||
| 9789092791 | |||
| bdd4cc17a4 | |||
| b14b3bfc26 | |||
| c77d354a5c | |||
| a47cb7d9be | |||
| fca293d3db | |||
| 1d4f262aef | |||
| cc299918f6 | |||
| 4e390c3eea | |||
| 63452aa0d5 | |||
| 0f78c5186f | |||
| 55c72bf40c | |||
| c2d4c7166c | |||
| 5470f2dbbb | |||
| fe1e3b1550 | |||
| 3ab4e8326a | |||
| f743ebdcf5 | |||
| 0ec16e7f4c | |||
| 80a9bc337e | |||
| 399e239d93 | |||
| 4383459661 | |||
| ba8f960e4f | |||
| 1f5b334bfb | |||
| 600dc8ff8b | |||
| 332cff04dc | |||
| eb0a32eab4 | |||
| bda944cf0a | |||
| edeb12fd51 | |||
| 7064857ff2 | |||
| 1c25c71da0 | |||
| 2089e50c5e | |||
| 0dee81a170 | |||
| fd2ae40d50 | |||
| b9914e0d2f | |||
| a348800d87 | |||
| 2478117e49 | |||
| c8e2a76964 | |||
| 3e8874907f | |||
| 8a2954c6fe | |||
| 701a803eeb | |||
| c7ba99b94a | |||
| b44dfb952d | |||
| 5a65152212 | |||
| 768cc2f099 | |||
| 5c77772f3c | |||
| 8fb7138855 | |||
| f7fa43e849 | |||
| 728dfa48c6 | |||
| c60570be6e | |||
| ce73fe9d1b | |||
| 281f14667f | |||
| dc91813d5a | |||
| 193c0911b4 | |||
| 4bbc00b181 | |||
| 94095e79a6 | |||
| c3a61b1433 | |||
| 1555d809df |
+483
-216
File diff suppressed because it is too large
Load Diff
+319
-106
@@ -6,12 +6,15 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- Carico libreria
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** GENERATION ***
|
||||
---------------------------------------------------------------------
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
local sBaseDir = EgtGetCurrMachineDir()
|
||||
if NumericalControl == 'NUM' or NumericalControl == 'NUM_FLEX' then
|
||||
dofile( sBaseDir .. 'Common_ONE-PF.NUM.mlpe')
|
||||
dofile( sBaseDir .. '\\Common_ONE-PF.NUM.mlpe')
|
||||
elseif NumericalControl == 'TPA' then
|
||||
error( 'Numerical Control error : TPA not yet managed')
|
||||
else
|
||||
@@ -23,6 +26,45 @@ end
|
||||
---------------------------------------------------------------------
|
||||
local COLL_SAFE_DIST = 4
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulInit()
|
||||
-- se macchina con carico destro, imposto offset direzioni di vista standard
|
||||
if BD.RIGHT_LOAD then
|
||||
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
|
||||
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
|
||||
if nOrigViewOffs ~= 2 then
|
||||
EgtSetViewOrizzOffsStep( 2)
|
||||
if dOrigViewAngV < 0.1 then
|
||||
EgtSetView( SCE_VD.TOP, false)
|
||||
elseif dOrigViewAngV > 179.9 then
|
||||
EgtSetView( SCE_VD.BOTTOM, false)
|
||||
else
|
||||
local dViewAngH = dOrigViewAngH + EgtIf( dOrigViewAngH > 180, 2 * 90, 0)
|
||||
EgtSetGenericView( dOrigViewAngV, dViewAngH, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulExit()
|
||||
-- se macchina con carico destro, annullo offset direzioni di vista standard
|
||||
if BD.RIGHT_LOAD then
|
||||
local nOrigViewOffs = EgtGetViewOrizzOffsStep()
|
||||
local dOrigViewAngV, dOrigViewAngH = EgtGetGenericView()
|
||||
if nOrigViewOffs == 2 then
|
||||
EgtSetViewOrizzOffsStep( 0)
|
||||
if dOrigViewAngV < 0.1 then
|
||||
EgtSetView( SCE_VD.TOP, false)
|
||||
elseif dOrigViewAngV > 179.9 then
|
||||
EgtSetView( SCE_VD.BOTTOM, false)
|
||||
else
|
||||
EgtSetGenericView( dOrigViewAngV, dOrigViewAngH - 2 * 90, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulStart()
|
||||
-- controllo versione programma
|
||||
@@ -77,6 +119,8 @@ function OnSimulStart()
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TRAV'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'COL2'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC1'},
|
||||
{ Grp = 'Base', Sub = 'COLLISION', Name = 'TC2'},
|
||||
{ Grp = 'Base', Sub = 'BELT', Name = 'COLLISION'}}
|
||||
-- gruppo CHSAW si attiva solo se progress, one con BIT mortiser o PF
|
||||
if Progress or Mortiser or EgtGetHeadId( 'H21') then
|
||||
@@ -90,6 +134,10 @@ function OnSimulStart()
|
||||
if Progress and EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'SAW1'})
|
||||
end
|
||||
-- se non è Progress ed è una ONE, aggiungo collisioni magazzino speciale
|
||||
if not Progress and not EgtGetHeadId( 'H21') then
|
||||
table.insert( McdData, { Grp = 'Base', Sub = 'COLLISION', Name = 'MTC'})
|
||||
end
|
||||
|
||||
if Clamp5 then
|
||||
table.insert( McdData, { Grp = 'W', Sub = 'COLLISION', Name = 'STM1'})
|
||||
@@ -110,7 +158,7 @@ function OnSimulStart()
|
||||
local nId = EgtGetFirstNameInGroup( EgtGetFirstNameInGroup( nGrpId, McdData[i].Sub), McdData[i].Name)
|
||||
if nId then
|
||||
table.insert( EMT.MCODET, nId)
|
||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is ok', 4)
|
||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' (' .. tostring( nId) .. ') is ok', 4)
|
||||
else
|
||||
nMcdNullCnt = nMcdNullCnt + 1
|
||||
EgtOutLog( 'Element ' .. McdData[i].Grp .. '/' .. McdData[i].Sub .. '/' .. McdData[i].Name .. ' is null', 4)
|
||||
@@ -276,6 +324,9 @@ function OnSimulDispositionStart()
|
||||
EMT.LB = b3Bar:getDimX()
|
||||
EMT.LR = b3Raw:getDimX()
|
||||
EMT.LT = b3Part:getDimX()
|
||||
if b3Part:getMin() then
|
||||
EMT.XMINT = b3Part:getMin():getX() + ( EgtGetAxisPos( 'T') - EgtGetAxisHomePos( 'T'))
|
||||
end
|
||||
EMT.HOVM = EgtGetInfo( nPartRawId or GDB_ID.NULL, 'HOVM', 'd') or 0
|
||||
EMT.CUTID = EgtGetInfo( PartId or GDB_ID.NULL, 'CUTID', 'i') or 0
|
||||
EMT.Y1SPEC = nil
|
||||
@@ -314,7 +365,6 @@ function OnSimulDispositionStart()
|
||||
if EMT.VMILL and #EMT.VMILL > 0 then
|
||||
EgtSetStatus( EMT.SCRAP or GDB_ID.NULL, GDB_ST.OFF)
|
||||
end
|
||||
|
||||
-- se altrimenti fasi intermedia o finale speciali, aggancio primo grezzo alla tavola e gli altri in posizione pre-carico
|
||||
elseif IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
||||
-- se cambiata giacitura, lo segnalo
|
||||
@@ -409,6 +459,21 @@ function OnSimulDispositionEnd()
|
||||
EMT.FALL = false
|
||||
EMT.TO_FALL = false
|
||||
end
|
||||
-- se disposizione intermedia
|
||||
if IsMidPhase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
||||
-- se le rotazioni delle fasi corrente e precedente sono diverse
|
||||
if GetPhaseRot( EMT.PHASE) ~= GetPhaseRot( EMT.PHASE - 1) then
|
||||
-- imposto stato post-rotazione
|
||||
EMT.POSTROT = true
|
||||
end
|
||||
-- se altrimenti disposizione intermedia speciale con eventuale rotazione
|
||||
elseif IsMid2Phase( EMT.PHASE) then
|
||||
-- se le rotazioni delle fasi corrente e precedente sono diverse
|
||||
if GetPhaseRot( EMT.PHASE) ~= GetPhaseRot( EMT.PHASE - 1) then
|
||||
-- imposto stato post-rotazione
|
||||
EMT.POSTROT = true
|
||||
end
|
||||
end
|
||||
EMT.SPLIT = false
|
||||
EMT.SPECSPLIT = false
|
||||
EMT.TO_SPECSPLIT = false
|
||||
@@ -421,6 +486,7 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.TOOLTYPE = EgtTdbGetCurrToolParam( MCH_TP.TYPE)
|
||||
EMT.TLEN = EgtTdbGetCurrToolParam( MCH_TP.LEN)
|
||||
EMT.TTOTLEN = EgtTdbGetCurrToolParam( MCH_TP.TOTLEN)
|
||||
EMT.TDIAM = EgtTdbGetCurrToolParam( MCH_TP.DIAM)
|
||||
EMT.TUSERNOTES = EgtTdbGetCurrToolParam( MCH_TP.USERNOTES)
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- se ho due teste, verifico che l'altra sia dalla parte opposta
|
||||
@@ -448,6 +514,8 @@ function OnSimulToolSelect( dPosA)
|
||||
EgtSetAxisPos( 'C1', MyParkCSawC1)
|
||||
EgtSetAxisPos( 'B1', ParkCSawB1)
|
||||
EgtSetAxisPos( 'X1', ParkCSawX1)
|
||||
-- l'utensile viene caricato qui, quindi setto come già cambiato
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
else
|
||||
-- imposto home dell'asse C2 (A=0 -> T111, A=-90 -> T112)
|
||||
local MyParkCSawC2 = GetChainSawCHomeFromVirtualAxis( dPosA)
|
||||
@@ -455,6 +523,8 @@ function OnSimulToolSelect( dPosA)
|
||||
EgtSetAxisPos( 'C2', MyParkCSawC2)
|
||||
EgtSetAxisPos( 'B2', ParkCSawB2)
|
||||
EgtSetAxisPos( 'X2', ParkCSawX2)
|
||||
-- l'utensile viene caricato qui, quindi setto come già cambiato
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
end
|
||||
-- Imposto visualizzazione
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD) or GDB_ID.NULL, GDB_MD.STD)
|
||||
@@ -509,13 +579,6 @@ function OnSimulToolDeselect( dPrevA)
|
||||
end
|
||||
elseif HeadIsChainSaw( EMT.PREVHEAD_H2) then
|
||||
-- simulo movimento
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
local CurrX2 = EgtGetAxisPos( 'X2')
|
||||
if CurrX2 < SafeCSaw0X2 then
|
||||
SimulMoveAxis( 'X2', SafeCSaw0X2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxis( 'X2', ParkCSawX2, MCH_SIM_STEP.RAPID)
|
||||
local dMyParkC = EgtGetAxisHomePos( 'C2')
|
||||
if dPrevA then dMyParkC = GetChainSawCHomeFromVirtualAxis( dPrevA) end
|
||||
@@ -599,10 +662,10 @@ function OnSimulToolDeselect( dPrevA)
|
||||
-- se devo scaricare un utensile normale
|
||||
else
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead == 1 then
|
||||
if nSetHead == 1 and EMT.PREVHEAD_H1 then
|
||||
local MyParkX1 = EgtIf( GetHeadTCSet( EMT.HEAD, EMT.TCPOS) == 'Head1_TC1', ParkX1, ParkFrnX1)
|
||||
SimulMoveAxis( 'X1', MyParkX1, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
elseif EMT.PREVHEAD_H2 then
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
end
|
||||
@@ -688,23 +751,13 @@ function OnSimulMachiningStart()
|
||||
end
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- per gruppo testa 1
|
||||
if nSetHead == 1 then
|
||||
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
-- per gruppo testa 2
|
||||
elseif nSetHead == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
end
|
||||
-- recupero alcuni dati della lavorazione
|
||||
EMT.MCHNAME = EgtGetOperationName( EMT.MCHID)
|
||||
EMT.MCHTYPE = EgtGetMachiningParam( MCH_MP.TYPE)
|
||||
EMT.MCHUSERNOTES = EgtGetMachiningParam( MCH_MP.USERNOTES) or ''
|
||||
EMT.VMRS = ( EMT.MCHTYPE ~= MCH_MY.DRILLING and not EMT.MCHUSERNOTES:find( 'VMRS=0;', 1, true))
|
||||
EMT.MCHSPLIT = ( EMT.MCHUSERNOTES:find( 'Split;', 1, true) ~= nil)
|
||||
EMT.MCHPRECUT = ( EMT.MCHUSERNOTES:find( 'Precut;', 1, true) ~= nil)
|
||||
-- recupero TASKID della feature lavorata
|
||||
local vId = EgtGetMachiningGeometry()
|
||||
if vId and #vId > 0 and #vId[1] > 0 then
|
||||
@@ -748,7 +801,7 @@ function OnSimulMachiningStart()
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
ExecParkRoller( nil, nil, nil, nil, false, bAgg)
|
||||
-- eseguo
|
||||
SimulMoveAxes( 'Z2', ParkZ2, 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( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
@@ -773,6 +826,23 @@ function OnSimulMachiningEnd()
|
||||
if EMT.DOU_TYPE and not EMT.ZMAX then EMT.DOU_TO_ZMAX = true end
|
||||
EMT.DOU_TYPE = nil
|
||||
EMT.DOU_TOOL = nil
|
||||
-- salvo dati utensile
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
-- se non ho già tolto la sega a catena, aggiorno valori
|
||||
if not EMT.CHSAW_OUT then
|
||||
-- per gruppo testa 1
|
||||
if nSetHead == 1 then
|
||||
EMT.PREVTOOL_H1 = EMT.TOOL
|
||||
EMT.PREVHEAD_H1 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H1 = EMT.TCPOS
|
||||
-- per gruppo testa 2
|
||||
elseif nSetHead == 2 then
|
||||
EMT.PREVTOOL_H2 = EMT.TOOL
|
||||
EMT.PREVHEAD_H2 = EMT.HEAD
|
||||
EMT.PREVTCPOS_H2 = EMT.TCPOS
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -786,12 +856,19 @@ function OnSimulPathStart()
|
||||
EMT.TO_SPECSPLIT = true
|
||||
end
|
||||
end
|
||||
-- se taglio di precut verifico quanto è più lungo il grezzo rispetto al pezzo (non tiene conto dell'ultimo cubetto)
|
||||
EMT.DELTA_LT = 0
|
||||
if EMT.MCHPRECUT then
|
||||
local dCosA = sqrt( max( 1 - EMT.EXTR[1] * EMT.EXTR[1], 0))
|
||||
EMT.DELTA_LT = max( EMT.XMINT - Point3d( EMT.MMAX):getX() - dCosA * EMT.TDIAM / 2, 0)
|
||||
EgtOutLog( 'PreCutDeltaLT='..EgtNumToString( EMT.DELTA_LT, 3), 5)
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulPathEnd()
|
||||
-- rimozione sfridi
|
||||
RemoveScraps()
|
||||
ExecRemoveScraps()
|
||||
-- se non ci sono comandi ausiliari associati e richiesta risalita a Zmax
|
||||
if EMT.AUXTOT == 0 and EMT.TO_ZMAX then
|
||||
if EMT.MCHSPLIT and not EMT.TO_FALL and not EMT.TO_SPECSPLIT then
|
||||
@@ -799,7 +876,7 @@ function OnSimulPathEnd()
|
||||
EMT.Y1DELTA = nil
|
||||
ExecMovePY1( false)
|
||||
end
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, false)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -822,7 +899,7 @@ function OnSimulPathEndAux()
|
||||
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)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, false)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -864,7 +941,8 @@ function OnSimulMoveStart()
|
||||
local bParkV = false
|
||||
if EMT.MCHFIRST then
|
||||
-- se rulli più chiusi del richiesto o cambio direzione utensile (tranne solo asse B con C0 o equivalenti) devo mettere i rulli in parcheggio
|
||||
if V1Pos < EMT.V1NEXTPOS - 1 or V2Pos > EMT.V2NEXTPOS + 1 or RollerParkingNeeded( EMT.HEAD, EMT.R1p, EMT.R2p, EMT.R1, EMT.R2) then
|
||||
if V1Pos < EMT.V1NEXTPOS - 1 or V2Pos > EMT.V2NEXTPOS + 1 or RollerParkingNeeded( EMT.HEAD, EMT.R1p, EMT.R2p, EMT.R1, EMT.R2) or
|
||||
( EMT.TOOL ~= EMT.PREVTOOL_H1 and EMT.TOOL ~= EMT.PREVTOOL_H2) then
|
||||
bParkV = true
|
||||
EMT.A3 = ParkV1
|
||||
EMT.A4 = ParkV2
|
||||
@@ -882,14 +960,24 @@ function OnSimulMoveStart()
|
||||
VerifyY2Stroke( EMT.A2)
|
||||
VerifyV1Stroke( EMT.A3)
|
||||
VerifyV2Stroke( EMT.A4)
|
||||
|
||||
-- se devo subito parcheggiare i rulli
|
||||
local nRes = 0
|
||||
if bParkV then
|
||||
local bAgg = EgtExistsInfo( EMT.PATHID, 'CNT')
|
||||
-- se la lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli
|
||||
if EMT.SPLIT_Y1DELTA and not EMT.MCHSPLIT then EMT.Y1DELTA = EMT.SPLIT_Y1DELTA end
|
||||
nRes = ExecParkRoller( Y1Pos, Y2Pos, V1Pos, V2Pos, false, bAgg)
|
||||
if EMT.SPLIT_Y1DELTA then EMT.Y1DELTA = nil end
|
||||
end
|
||||
-- se movimento in rapido ad inizio lavorazione
|
||||
if EMT.MOVE == 0 and EMT.MOVEIND <= 3 then
|
||||
-- gestione speciale per pezzi molto alti. Se il movimento successivo è più alto del precedente, allora prendo il successivo
|
||||
if EMT.L3s then
|
||||
if EMT.L3s > EMT.L3 then
|
||||
EMT.L3 = EMT.L3s
|
||||
end
|
||||
end
|
||||
-- Dati
|
||||
local B1Pos = EgtGetAxisPos( 'B1')
|
||||
local B1Home = EgtGetAxisHomePos( 'B1')
|
||||
@@ -904,20 +992,44 @@ function OnSimulMoveStart()
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
local bMoveZbeforeX = false
|
||||
|
||||
local dZref = EMT.L3
|
||||
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
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
|
||||
-- se vado in posizione speciale rotazione assi, poi devo ritornare alla X vera di lavoro
|
||||
local dMoveXtoFinalPosition = false
|
||||
local dXref = EMT.L2
|
||||
if EMT.HEAD == 'H12' and -EMT.L2 < -LimX1PlRotSaw then
|
||||
dXref = LimX1PlRotSaw
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2)
|
||||
dMoveXtoFinalPosition = true
|
||||
elseif not bMoveZbeforeX then
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxis( 'X1', LimX1PlRotSaw, MCH_SIM_STEP.RAPID)
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2)
|
||||
dMoveXtoFinalPosition = true
|
||||
end
|
||||
SimulMoveAxis( 'X1', dXref, MCH_SIM_STEP.RAPID)
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, EMT.L2 < -LimX1RotSaw, EMT.L2 > -LimX1RotSaw) or EMT.R2 < -91) then
|
||||
dZref = Z1Home + GetZExtra( EMT.HEAD, EMT.R2) - 100
|
||||
end
|
||||
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
|
||||
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
if dMoveXtoFinalPosition then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
|
||||
@@ -940,18 +1052,18 @@ function OnSimulMoveStart()
|
||||
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'B1', ParkCSawB1)
|
||||
B1Home = EgtGetAxisHomePos( 'B1')
|
||||
C1Home = EgtGetAxisHomePos( 'C1')
|
||||
Z1Home = EgtGetAxisHomePos( 'Z1')
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
-- 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( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', B1Home, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se circa verticale
|
||||
else
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
-- altrimenti testa 2
|
||||
@@ -961,16 +1073,29 @@ function OnSimulMoveStart()
|
||||
if EMT.HEAD == 'H11' or EMT.HEAD == 'H12' then
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
local bMoveZbeforeX = false
|
||||
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H12' and ( -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
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
if not bMoveZbeforeX then
|
||||
SimulMoveAxis( 'X1', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxis( 'X1', LimX1RotSawTC2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 400")
|
||||
if EMT.HEAD == 'H12' and abs( C1Pos - EMT.R1) > 1 and ( abs( C1Home - EMT.R1) > 30.1 or abs(B1Home - EMT.R2) > 30.1) then
|
||||
SimulMoveAxis( 'B1', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', dZref, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z1', dZref, MCH_SIM_STEP.RAPID)
|
||||
@@ -993,18 +1118,18 @@ function OnSimulMoveStart()
|
||||
EmtModifyAxisHome( 'C1', GetChainSawCHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'B1', ParkCSawB1)
|
||||
B1Home = EgtGetAxisHomePos( 'B1')
|
||||
C1Home = EgtGetAxisHomePos( 'C1')
|
||||
Z1Home = EgtGetAxisHomePos( 'Z1')
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
-- 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( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'Z1', Z1Home, MCH_SIM_STEP.RAPID, 'B1', B1Home, MCH_SIM_STEP.COLLROT, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se circa verticale
|
||||
else
|
||||
SimulMoveAxes( 'X1', EMT.L2, MCH_SIM_STEP.RAPID, 'C1', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z1', EMT.L3, MCH_SIM_STEP.RAPID, 'B1', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
else
|
||||
@@ -1020,16 +1145,28 @@ function OnSimulMoveStart()
|
||||
-- se movimento iniziale da Zmax con lama o fresa
|
||||
if EMT.ZMAX or EMT.FLAG == 1 or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
--EgtOutBox( 'Flag 2,1', 'Info Rapid')
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
local bMoveZbeforeX = false
|
||||
local dZref = EMT.L3
|
||||
if EMT.HEAD == 'H22' and ( EgtIf( BD.RIGHT_LOAD, EMT.L2 < -LimX2RotSaw, EMT.L2 > -LimX2RotSaw) or EMT.R2 > 91) then
|
||||
dZref = Z2Home + 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
|
||||
if EMT.L3 > dZref then
|
||||
bMoveZbeforeX = true
|
||||
end
|
||||
if not bMoveZbeforeX then
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
else
|
||||
SimulMoveAxis( 'X2', LimX2RotSaw, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso speciale per trave alta con rotazione lama pericolosa (tolto "and EMT.SB > 379")
|
||||
if EMT.HEAD == 'H22' and abs( C2Pos - EMT.R1) > 1 and ( abs( C2Home - EMT.R1) > 30.1 or abs(B2Home - EMT.R2) > 30.1) then
|
||||
SimulMoveAxis( 'B2', 0, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', dZref, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
if bMoveZbeforeX then
|
||||
SimulMoveAxis( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- caso standard
|
||||
else
|
||||
SimulMoveAxis( 'Z2', dZref, MCH_SIM_STEP.RAPID)
|
||||
@@ -1039,20 +1176,31 @@ function OnSimulMoveStart()
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
-- Porto la Z alla giusta quota
|
||||
if Z2Pos > Z2Home + 1 and abs( B2Pos) > 89.9 then
|
||||
SimulMoveAxis( 'X2', EMT.L2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', Z2Home, MCH_SIM_STEP.RAPID)
|
||||
-- se anche precedente con sega a catena ma depositata, devo riprenderla
|
||||
if EMT.CHSAW_OUT then
|
||||
local dPosA = GetCurrChainSawingVirtualAxis()
|
||||
EgtSetMode( EgtGetHeadId( EMT.HEAD), GDB_MD.HIDDEN)
|
||||
OnSimulToolDeselect()
|
||||
EgtLoadTool( EMT.HEAD, 1, EMT.TOOL)
|
||||
ShowToolInTcPos( EMT.TCPOS, false)
|
||||
OnSimulToolSelect( dPosA)
|
||||
-- recupero i dati dato che ho scaricato motosega e preso quelli dell'utensile di default
|
||||
EmtModifyAxisHome( 'Z2', GetChainSawZHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'C2', GetChainSawCHomeFromVirtualAxis( dPosA))
|
||||
EmtModifyAxisHome( 'B2', ParkCSawB2)
|
||||
B2Home = EgtGetAxisHomePos( 'B2')
|
||||
C2Home = EgtGetAxisHomePos( 'C2')
|
||||
Z2Home = EgtGetAxisHomePos( 'Z2')
|
||||
EMT.CHSAW_OUT = nil
|
||||
end
|
||||
-- se movimento iniziale da Zmax
|
||||
if EMT.ZMAX or ( EMT.FLAG == 2 and EMT.FLAG2 == 1) then
|
||||
-- se pezzo molto alto e R3=0, mi sposto in X (per ora solo davanti)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxes( 'X2', SafeCSaw0X2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'Z2', Z2Home, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
else
|
||||
SimulMoveAxes( 'Z2', Z2Home, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
-- se motosega configurata per lavorazioni di fianco o circa orizzontale
|
||||
if dPosA == 0 or abs( EMT.R2) < 10 then
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
-- se circa verticale
|
||||
else
|
||||
SimulMoveAxes( 'X2', EMT.L2, MCH_SIM_STEP.RAPID, 'C2', EMT.R1, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', EMT.L3, MCH_SIM_STEP.RAPID, 'B2', EMT.R2, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1123,10 +1271,16 @@ function OnSimulMoveStart()
|
||||
EMT.A4 = EgtIf( GetV2ToClose(), EMT.V2NEXTPOS, ParkV2)
|
||||
end
|
||||
EMT.ZMAX = nil
|
||||
EMT.XHOME = nil
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnSimulMoveEnd()
|
||||
-- rimozione eventuali sfridi
|
||||
if EMT.FLAG == 301 then
|
||||
ExecRemoveScraps()
|
||||
end
|
||||
|
||||
-- se primo rapido della lavorazione
|
||||
if EMT.MCHFIRST and EMT.MOVE == 0 then
|
||||
-- se lavorazione split, dichiaro carro Y1 riagganciato
|
||||
@@ -1168,9 +1322,14 @@ function OnSimulMoveEnd()
|
||||
-- se Zmax dopo fine lavorazione
|
||||
if EMT.MOVE == 0 and EMT.FLAG == 3 then
|
||||
-- eventuale rimozione sfridi
|
||||
RemoveScraps()
|
||||
ExecRemoveScraps()
|
||||
-- se Split o Presplit lascio agganciata solo la pinza Y2 alla fine dei movimenti
|
||||
local sNextTool = GetNextTool( EMT.MCHID)
|
||||
-- vado in home se è ultimo movimento ed è ultima lavorazione, se sono con motosega e devo cambiare utensile, oppure se ho la lama
|
||||
local bToXhome = ( IsLastPath( EMT.PATHID) and not sNextTool) or ( EMT.HEAD == 'H23' and EMT.TOOL ~= sNextTool) or ( EMT.HEAD == 'H13' and EMT.TOOL ~= sNextTool) or
|
||||
( EMT.HEAD == 'H12' and EMT.TOOL ~= sNextTool ) or ( EMT.HEAD == 'H22' and EMT.TOOL ~= sNextTool) or EMT.MCHSPLIT
|
||||
-- eseguo
|
||||
ExecMoveZmax( EMT.MCHSPLIT)
|
||||
ExecMoveZmax( EMT.MCHSPLIT, bToXhome)
|
||||
EMT.TO_ZMAX = nil
|
||||
end
|
||||
end
|
||||
@@ -1221,6 +1380,10 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
-- se stringo i rulli e ho lama, verifico che sia in home
|
||||
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
ExecMoveZmax( false, true)
|
||||
end
|
||||
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)
|
||||
@@ -1243,6 +1406,10 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
-- se stringo i rulli e ho lama, verifico che sia in home
|
||||
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
ExecMoveZmax( false, true)
|
||||
end
|
||||
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,
|
||||
sV1, MoveV1, MCH_SIM_STEP.RAPID,
|
||||
@@ -1266,6 +1433,10 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecOpenRoller( 1)
|
||||
ExecOpenRoller( 2)
|
||||
local sV1, MoveV1, sV2, MoveV2 = CalcMoveV1V2ForAuxCmd( Cmd)
|
||||
-- se stringo i rulli e ho lama, verifico che sia in home
|
||||
if MoveV1 and MoveV1 < 400 and ( EMT.HEAD == 'H12' or EMT.HEAD == 'H22') and EMT.ZMAX and not EMT.XHOME then
|
||||
ExecMoveZmax( false, true)
|
||||
end
|
||||
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,
|
||||
Cmd[6], tonumber( Cmd[7]), MCH_SIM_STEP.RAPID,
|
||||
@@ -1287,7 +1458,7 @@ function ExecAuxCmd( sCmd, bPathStart)
|
||||
ExecMoveHome( Cmd[2] == '1', EgtIf( bPathStart, false, EMT.MCHSPLIT))
|
||||
elseif Cmd[1] == '11' then
|
||||
local bClose = Cmd[2] ~= '0'
|
||||
if bPathStart and EMT.MCHSPLIT and not EMT.FALL and EMT.AUXIND >= 8 then bClose = false end
|
||||
if bPathStart and EMT.MCHSPLIT and not EMT.FALL and GetPY2Light() then bClose = false end
|
||||
ExecMovePY1( bClose)
|
||||
elseif Cmd[1] == '12' then
|
||||
ExecMovePY2( Cmd[2] ~= '0')
|
||||
@@ -1371,7 +1542,7 @@ end
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveHome( bNearV, bMchSplit)
|
||||
-- risalita a Zmax
|
||||
ExecMoveZmax( bMchSplit)
|
||||
ExecMoveZmax( bMchSplit, true)
|
||||
EMT.TO_ZMAX = nil
|
||||
-- se richiesto, avvicino i rulli
|
||||
if bNearV then
|
||||
@@ -1417,7 +1588,7 @@ function ExecMoveHome( bNearV, bMchSplit)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMoveZmax( bMchSplit)
|
||||
function ExecMoveZmax( bMchSplit, btoXHome)
|
||||
-- set della testa
|
||||
local nSetHead = GetHeadSet( EMT.HEAD)
|
||||
if nSetHead == 0 then return end
|
||||
@@ -1447,7 +1618,7 @@ function ExecMoveZmax( bMchSplit)
|
||||
if not HeadIsChainSaw( EMT.HEAD) then
|
||||
if abs( HomeC - CurrC) > 0.1 or abs( HomeB - CurrB) > 0.1 then
|
||||
local dZref = HomeZ + GetZExtra( EMT.HEAD, CurrB)
|
||||
if EgtIf( not EgtGetHeadId( 'H21') or BD.RIGHT_LOAD, -CurrX < -LimX1RotSaw, -CurrX > -LimX1RotSaw) then
|
||||
if EgtIf( BD.RIGHT_LOAD, -CurrX < -LimX1RotSaw, -CurrX > -LimX1RotSaw) then
|
||||
dZref = dZref - EgtIf( not Mortiser, 100, 370)
|
||||
end
|
||||
SimulMoveAxes( 'Z1', EgtIf( dZref > CurrZ, dZref, CurrZ), MCH_SIM_STEP.RAPID, 'B1', EgtClamp( CurrB, -90, 90), MCH_SIM_STEP.COLLROT)
|
||||
@@ -1458,20 +1629,30 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- se lavorazione in doppio
|
||||
if EMT.DOU_TYPE == 2 then
|
||||
local CurrZ2 = EgtGetAxisPos( 'Z2')
|
||||
if CurrZ2 < ParkZ2 then
|
||||
SimulMoveAxes( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', ParkZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'B2', ParkB2, MCH_SIM_STEP.COLLROT, 'C2', ParkC2, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxes( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
if bToXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
EMT.DOU_TO_ZMAX = nil
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
else
|
||||
@@ -1487,10 +1668,26 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z1', MaxZ1, MCH_SIM_STEP.RAPID)
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X1', ParkX1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z1', HomeZ, MCH_SIM_STEP.RAPID, 'B1', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z1', ParkCSawZ1, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
if btoXHome then
|
||||
EgtUnloadTool( EMT.HEAD, 1)
|
||||
ShowToolInTcPos( EMT.TCPOS, true)
|
||||
EMT.PREVTOOL_H1 = nil
|
||||
EMT.PREVHEAD_H1 = nil
|
||||
EMT.PREVTCPOS_H1 = nil
|
||||
EMT.CHSAW_OUT = true
|
||||
EMT.XHOME = true
|
||||
end
|
||||
SimulMoveAxes( 'X1', HomeX, MCH_SIM_STEP.RAPID, 'C1', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
|
||||
end
|
||||
@@ -1508,10 +1705,17 @@ function ExecMoveZmax( bMchSplit)
|
||||
SimulMoveAxis( 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
SimulMoveAxis( 'Z2', MaxZ2, MCH_SIM_STEP.RAPID)
|
||||
-- altrimenti sega a catena
|
||||
if btoXHome then
|
||||
EMT.XHOME = true
|
||||
SimulMoveAxis( 'X2', ParkX2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
-- altrimenti sega a catena
|
||||
else
|
||||
SimulMoveAxes( 'Z2', HomeZ, MCH_SIM_STEP.RAPID, 'B2', HomeB, MCH_SIM_STEP.COLLROT)
|
||||
SimulMoveAxis( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
if EMT.SB > 650 and abs( EMT.R3) < 0.1 then
|
||||
SimulMoveAxis( 'Z2', ParkCSawZ2, MCH_SIM_STEP.RAPID)
|
||||
end
|
||||
SimulMoveAxes( 'X2', HomeX, MCH_SIM_STEP.RAPID, 'C2', HomeC, MCH_SIM_STEP.COLLROT)
|
||||
end
|
||||
end
|
||||
EMT.ZMAX = true
|
||||
@@ -1546,10 +1750,14 @@ function ExecUnloading()
|
||||
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
||||
EgtSetLevel( vMillId, GDB_LV.USER)
|
||||
-- aggiungo gli spigoli
|
||||
local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId)
|
||||
if nFirstId then
|
||||
for nId = nFirstId, nFirstId + nCount - 1 do
|
||||
EgtSetColor( nId, Color3d( 96, 96, 96))
|
||||
if EgtVolZmapSetShowEdges then
|
||||
EgtVolZmapSetShowEdges( vMillId, true)
|
||||
else
|
||||
local nFirstId, nCount = EgtVolZmapGetEdges( vMillId, nLayId)
|
||||
if nFirstId then
|
||||
for nId = nFirstId, nFirstId + nCount - 1 do
|
||||
EgtSetColor( nId, Color3d( 96, 96, 96))
|
||||
end
|
||||
end
|
||||
end
|
||||
-- rilascio Vmill
|
||||
@@ -1584,13 +1792,13 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function ExecMovePY1( bClose)
|
||||
SimulMoveAxes( 'PY1', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SimulMoveAxis( '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)
|
||||
SimulMoveAxis( 'PY2', EgtIf( not bClose, MaxHoOpen, EMT.HB), MCH_SIM_STEP.RAPID)
|
||||
SetPY2Light( bClose)
|
||||
end
|
||||
|
||||
@@ -1683,7 +1891,7 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV1 = ParkV1 - PosV1
|
||||
local DiffY1 = MyParkY1 - PosY1
|
||||
local MoveY1 = EgtIf( DiffY1 > 0.1, MoveV1, 0)
|
||||
local TryMoveY1 = ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0) - EMT.HOVM
|
||||
local TryMoveY1 = min( ParkV1 - PosT - EgtIf( bSpliCut or EMT.FALL, EMT.LT, 0) - EMT.HOVM, MaxY1 - PosY1 - 10)
|
||||
if ( PosT > ParkV2 - ExtraParkV and PosT < ParkV1 and PosY1 + TryMoveY1 < MaxY1 and not EMT.W2DELTA) then MoveY1 = max( MoveY1, TryMoveY1) end
|
||||
-- se appena eseguito taglio di separazione
|
||||
if bSpliCut then
|
||||
@@ -1713,8 +1921,8 @@ function ExecParkRoller( PosY1, PosY2, PosV1, PosV2, bSpliCut, bAgg)
|
||||
local MoveV2 = ParkV2 - PosV2
|
||||
local DiffY2 = MyParkY2 - PosY2
|
||||
local MoveY2 = EgtIf( DiffY2 < -0.1, MoveV2, 0)
|
||||
local TryMoveY2 = ParkV2 - PosT - EMT.LT - EMT.HOVM
|
||||
if ( PosT + EMT.LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||
local TryMoveY2 = max( ParkV2 - PosT - EMT.LT - EMT.DELTA_LT - EMT.HOVM, MinY2 - PosY2 + 10)
|
||||
if ( PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM < ParkV1 + ExtraParkV and PosT + EMT.LT + EMT.DELTA_LT + EMT.HOVM > ParkV2 and PosY2 + TryMoveY2 > MinY2) then MoveY2 = min( MoveY2, TryMoveY2) end
|
||||
if not SimulMoveAxes( 'T', PosT + MoveY2, MCH_SIM_STEP.RAPID,
|
||||
'V1', ParkV1, MCH_SIM_STEP.RAPID,
|
||||
'V2', ParkV2, MCH_SIM_STEP.RAPID,
|
||||
@@ -1751,7 +1959,7 @@ function ExecOpenRoller( nInd)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function RemoveScraps()
|
||||
function ExecRemoveScraps()
|
||||
-- se attivo VMILL, lavorazione ed è richiesto di eliminare gli sfridi
|
||||
if EMT.VMILL and #EMT.VMILL > 0 and not EMT.OPEISDISP and EMT.VMRS then
|
||||
local vMillId = EMT.VMILL[1]
|
||||
@@ -1782,7 +1990,6 @@ function RemoveScraps()
|
||||
end
|
||||
EMT.VMRS = false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -2047,18 +2254,19 @@ end
|
||||
---------------------------------------------------------------------
|
||||
-- *** ESTIMATION T&L ***
|
||||
---------------------------------------------------------------------
|
||||
local RAPID_X_FEED = 70000 -- mm/min
|
||||
local RAPID_Y_FEED = 100000 -- mm/min
|
||||
local RAPID_Z_FEED = 32000 -- mm/min
|
||||
local RAPID_C_FEED = 15000 -- deg/min
|
||||
local RAPID_B_FEED = 15000 -- deg/min
|
||||
local RAPID_MIN_T = 0.1 -- s
|
||||
local LOAD_T = 2 -- s
|
||||
local CHAR_ONE_MOVE_T = 1 -- s
|
||||
local ROTATION_T = 40 -- s
|
||||
local SPLIT_T = 6 -- s
|
||||
local UNLOAD_T = 4 -- s
|
||||
local FALL_T = 2 -- s
|
||||
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
||||
local RAPID_X_FEED = 70000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||
local RAPID_Z_FEED = 32000 / ESTIMATION_RAPID_COEFF -- mm/min
|
||||
local RAPID_C_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
||||
local RAPID_B_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
||||
local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
|
||||
local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
||||
local ROTATION_T = 40 * ESTIMATION_RAPID_COEFF -- s
|
||||
local SPLIT_T = 6 * ESTIMATION_RAPID_COEFF -- s
|
||||
local UNLOAD_T = 4 * ESTIMATION_RAPID_COEFF -- s
|
||||
local FALL_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function OnEstimStart()
|
||||
@@ -2124,9 +2332,9 @@ function OnEstimDispositionEnd()
|
||||
-- Se disposizione inizio o rimanenza
|
||||
if IsStartOrRestPhase( EMT.PHASE) then
|
||||
;
|
||||
-- se altrimenti disposizione intermedia, eventuale rotazione
|
||||
elseif IsMidPhase( EMT.PHASE) then
|
||||
-- recupero le rotazioni delle fasi corrente e precedente
|
||||
-- se altrimenti disposizione intermedia o finale dopo separazione e rotazione, eventuale rotazione
|
||||
elseif IsMidPhase( EMT.PHASE) or IsMid2Phase( EMT.PHASE) or IsEnd2Phase( EMT.PHASE) then
|
||||
-- recupero le rotazioni delle fasi corrente e precedente
|
||||
local nRot = GetPhaseRot( EMT.PHASE)
|
||||
local nPrevRot = GetPhaseRot( EMT.PHASE - 1)
|
||||
-- verifico se sono diverse
|
||||
@@ -2582,7 +2790,12 @@ function GetNextTool( nMchId)
|
||||
-- recupero lavorazione successiva
|
||||
local nNextMchId = EgtGetNextActiveOperation( nMchId)
|
||||
while nNextMchId do
|
||||
if EgtGetOperationType( nNextMchId) ~= MCH_OY.DISP then
|
||||
-- se la prossima lavorazione è lo start di un altro pezzo, faccio finta che cambia utensile in modo che vada in parcheggio con utensili speciali
|
||||
if EgtGetOperationType( nNextMchId) == MCH_OY.DISP then
|
||||
if IsStartOrRestPhase( EMT.PHASE+1) then
|
||||
return nil
|
||||
end
|
||||
else
|
||||
break
|
||||
end
|
||||
nNextMchId = EgtGetNextActiveOperation( nNextMchId)
|
||||
|
||||
+45
-34
@@ -4,9 +4,8 @@
|
||||
require( 'EmtGenerator')
|
||||
EgtEnableDebug( false)
|
||||
|
||||
-- Carico i dati globali
|
||||
local sBaseDir = EgtGetSourceDir()
|
||||
BD = dofile( sBaseDir .. 'Beam\\BeamData.lua')
|
||||
-- Carico libreria
|
||||
local BD = require( 'BeamData')
|
||||
|
||||
---------------------- OnSpecialGetMaxZ -----------------------------
|
||||
---------------------------------------------------------------------
|
||||
@@ -825,6 +824,13 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreRotMch)
|
||||
-- mi salvo info lavorazione su una lista
|
||||
local AuxInfoMach = {}
|
||||
AuxInfoMach.bPreSplit = bPreSplit
|
||||
AuxInfoMach.bSplitting = bSplitting
|
||||
AuxInfoMach.bPreCut = bPreCut
|
||||
AuxInfoMach.bCutting = bCutting
|
||||
AuxInfoMach.bUnload = bUnload
|
||||
|
||||
-- Assegno flag di pezzo separato dal resto del grezzo
|
||||
SPLIT = IsEndPhase( EMC.PHASE) or IsMid2Phase( EMC.PHASE) or IsEnd2Phase( EMC.PHASE)
|
||||
@@ -922,7 +928,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
local dPosT = LoadT
|
||||
if IsFirstMachiningAfterRotation( EMC.MCHID) then dPosT = dPosT + TurnerOffs end
|
||||
local vCmd = SpecCalcLoad( dPosT, dDistFront, max( dDistBack, MinJoin + EgtIf( SPLIT, EMC.TCING, 0), EMC.LB - ( MaxY1 - MinY1) + 6))
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
local vCmd2 = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
if bSplitting and EMC.ERR == 18 then
|
||||
table.insert( vCmd, { 22, dRollBack, -dRollFront})
|
||||
end
|
||||
@@ -935,7 +941,7 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
|
||||
-- Se altrimenti carri entrambi diponibili, eseguo calcoli per carrelli
|
||||
elseif not IsEndPhase( EMC.PHASE) then
|
||||
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
local vCmd = SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
-- Se non ci sono spostamenti, confermo i parametri di aggancio e di posizione roller
|
||||
if SpecTestOnlyRemarkInCmds( vCmd) then
|
||||
table.insert( vCmd, { 21, EgtIf( EMC.Y1DELTA, EMC.Y1DELTA, 0), EgtIf( EMC.Y2DELTA, EMC.Y2DELTA, 0)})
|
||||
@@ -1117,8 +1123,12 @@ function SpecialCalcMachiningEncumbrance( nMchId, bPreCut)
|
||||
end
|
||||
b3Enc = EgtGetBBoxGlob( EgtGetAxisId( 'C2'), GDB_BB.ONLY_VISIBLE)
|
||||
end
|
||||
local dRollFront = max( b3Enc:getMax():getX(), MIN_FRONT_ENG_V) + SIC_V
|
||||
local dRollBack = max( -b3Enc:getMin():getX(), MIN_BACK_ENG_V) + SIC_V
|
||||
|
||||
-- Forzo la distanza di sicurezza da utensile
|
||||
local nSecRollerDist = EgtGetValInNotes( EgtTdbGetCurrToolParam( MCH_TP.USERNOTES), 'SECDIST', 'i') or SIC_V
|
||||
|
||||
local dRollFront = max( b3Enc:getMax():getX(), MIN_FRONT_ENG_V) + nSecRollerDist
|
||||
local dRollBack = max( -b3Enc:getMin():getX(), MIN_BACK_ENG_V) + nSecRollerDist
|
||||
EgtOutLog( ' RollFront = ' .. EgtNumToString( dRollFront, 1) .. ' RollBack = ' .. EgtNumToString( dRollBack, 1), 3)
|
||||
-- Calcolo della posizione della Punta Utensile rispetto allo Zero Macchina
|
||||
local ptTip
|
||||
@@ -1259,7 +1269,7 @@ function SpecCalcLoad( dPosT, dDistFront, dDistBack)
|
||||
end -- SpecAdjustLoad [L]
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar)
|
||||
function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1DeltaMaxSP, dY2DeltaMinUL, nChar, AuxInfoMach)
|
||||
|
||||
local MinFrontJoin = MinJoin + EMC.HCING + EMC.HOVM
|
||||
local MyMinOther = MinOther + EgtIf( EMC.CNT == 1, AggLoad, 0)
|
||||
@@ -1298,13 +1308,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
WorkTab.dV2PosF = -dRollFront
|
||||
WorkTab.bV2CloseF = false
|
||||
|
||||
-- aggiuntivo per non avere problemi con pezzi a caduta
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
|
||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico validità intervallo ammesso per Y1
|
||||
@@ -1343,13 +1351,11 @@ function SpecCalcCarriages( dDistFront, dDistBack, dRollFront, dRollBack, dY1Del
|
||||
WorkTab.dV2PosF = -dRollFront
|
||||
WorkTab.bV2CloseF = false
|
||||
|
||||
-- aggiuntivo per minimizzare scambi carrelli
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 4 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 2.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + 2 * BD.CHAR_EXTRA_DIST
|
||||
elseif WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = WorkTab.dY1DeltaMinF + BD.CHAR_EXTRA_DIST
|
||||
-- dopo che si è calcolato il minimo e massimo dell'intervallo, verifico che in testa rimanga almeno il minimo per poter fare passaggio pinze e scaricare
|
||||
if AuxInfoMach and ( AuxInfoMach.bSplitting or AuxInfoMach.bCutting) then
|
||||
if WorkTab.dY1DeltaMaxF - WorkTab.dY1DeltaMinF > 1.5 * BD.CHAR_EXTRA_DIST and WorkTab.dY1DeltaMaxF > EMC.LT + BD.MINRAW_S + BD.CHAR_EXTRA_DIST then
|
||||
WorkTab.dY1DeltaMinF = max( min( EMC.LT + BD.MINRAW_S, WorkTab.dY1DeltaMaxF - 1), WorkTab.dY1DeltaMinF)
|
||||
end
|
||||
end
|
||||
|
||||
-- verifico validità intervallo ammesso per Y1
|
||||
@@ -1653,19 +1659,24 @@ function SpecAdjustCarriages( WorkTab)
|
||||
local bCloseV = false
|
||||
if WorkTab.dY1DeltaI then
|
||||
if WorkTab.dY1DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EMC.HCING + EMC.HOVM + EgtIf( EMC.CNT == 1, AggLoad, 0) then
|
||||
bCloseV = true
|
||||
bCloseV = true
|
||||
end
|
||||
end
|
||||
if WorkTab.dY2DeltaI then
|
||||
if EMC.LB - WorkTab.dY2DeltaI <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then
|
||||
bCloseV = true
|
||||
bCloseV = true
|
||||
end
|
||||
end
|
||||
if WorkTab.dY2DeltaMinF then
|
||||
if EMC.LB - WorkTab.dY2DeltaMinF <= MinJoin + WorkTab.dV1PosI - WorkTab.dV2PosI + 2 * AGG_V + EgtIf( SPLIT, EMC.TCING, 0) + EgtIf( EMC.CNT == 1, AggLoad, 0) then
|
||||
bCloseV = true
|
||||
bCloseV = true
|
||||
end
|
||||
end
|
||||
-- se i pezzi del cliente sono molto storti, si forza la chiusura per evitare che vada a sbattere. Se parametro non presente, si chiude solo se necessario
|
||||
if ForceToCloseRollersGate then
|
||||
bCloseV = true
|
||||
end
|
||||
|
||||
WorkTab.bCloseV = bCloseV
|
||||
EgtOutLog( ' Tool : '..( EgtIf( bChangedTool, 'CHANGED', 'same')).. ' CloseV : '..( EgtIf( bCloseV, 'TRUE', 'false')), 1)
|
||||
|
||||
@@ -1821,7 +1832,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- allontano (Y1+T) e (Y2)
|
||||
dY1a = MaxY1
|
||||
dY2a = MinY2
|
||||
dTa = ( MaxY1 - TabI.dY1PosI) + dTa
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
-- **[M2]** = allontanamento dei trascinatori con Y2 in presa
|
||||
elseif sType == 'M2' then
|
||||
EmitComment( vCmd, '[M2]')
|
||||
@@ -1832,7 +1843,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- allontano (Y2+T) e (Y1)
|
||||
dY1a = MaxY1
|
||||
dY2a = MinY2
|
||||
dTa = ( MinY2 - TabI.dY2PosI) + dTa
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
-- **[M3]** = accentramento dei trascinatori con Y1 in presa
|
||||
elseif sType == 'M3' then
|
||||
EmitComment( vCmd, '[M3]')
|
||||
@@ -1842,7 +1853,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- accentro (Y1+T) e (Y2)
|
||||
dY1a = TabI.MyMinY1V1
|
||||
dY2a = TabI.MaxY2V2
|
||||
dTa = ( TabI.MyMinY1V1 - TabI.dY1PosI) + dTa
|
||||
dTa = ( dY1a - TabI.dY1PosI) + dTa
|
||||
-- **[M4]** = accentramento dei trascinatori con Y2 in presa
|
||||
elseif sType == 'M4' then
|
||||
EmitComment( vCmd, '[M4]')
|
||||
@@ -1853,7 +1864,7 @@ local function MaxDispl( TabI, vCmd, sType)
|
||||
-- accentro (Y2+T) e (Y1)
|
||||
dY1a = TabI.MyMinY1V1
|
||||
dY2a = TabI.MaxY2V2
|
||||
dTa = ( TabI.MaxY2V2 - TabI.dY2PosI) + dTa
|
||||
dTa = ( dY2a - TabI.dY2PosI) + dTa
|
||||
end
|
||||
--
|
||||
table.insert( vCmd, { 3, 'Y1', dY1a, 'Y2', dY2a, 'T', dTa, EMC.CNT})
|
||||
@@ -2179,7 +2190,7 @@ local function PosY1Y2B( TabI, vCmd)
|
||||
end
|
||||
end
|
||||
nCnt = nCnt + 1
|
||||
if nCnt > 5 then return end
|
||||
if nCnt > 10 then return end
|
||||
until ( not bXW)
|
||||
-- chiusura/parcheggio dei trascinatori in funzioni chiamanti
|
||||
local dY1Delta = TabI.dY1PosI - TabI.dTPosI
|
||||
@@ -2318,7 +2329,7 @@ local function PosY2Y1B( TabI, vCmd)
|
||||
end
|
||||
end
|
||||
nCnt = nCnt + 1
|
||||
if nCnt > 5 then return end
|
||||
if nCnt > 10 then return end
|
||||
until ( not bXW)
|
||||
-- la chiusura delle morse è fatta sopra
|
||||
local dY1Delta = TabI.dY1PosI - TabI.dTPosI
|
||||
@@ -2390,7 +2401,7 @@ function SpecAdjustCarrA( WorkTab)
|
||||
dY1DeltaF = PosY1Y2B( TabValI, vCmd)
|
||||
else
|
||||
--[A(1)A] **ALLONTANAMENTO** (dall'origine) del trascinatore Y1
|
||||
EmitComment( vCmd, '[AY1A]')
|
||||
EmitComment( vCmd, '[A-Y1A]')
|
||||
dY1DeltaF = PosY1Y2A( TabValI, vCmd)
|
||||
end
|
||||
-- chiudo Y1
|
||||
@@ -2486,8 +2497,8 @@ function SpecAdjustCarrB1( WorkTab)
|
||||
if not SpecTestSomeMoveInCmds( vCmd) then
|
||||
table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT})
|
||||
end
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
table.insert( vCmd, { 12, 1}) -- Chiudo Y2
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF})
|
||||
EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1)
|
||||
@@ -2558,8 +2569,8 @@ function SpecAdjustCarrB2( WorkTab)
|
||||
if not SpecTestSomeMoveInCmds( vCmd) then
|
||||
table.insert( vCmd, { 3, 'Y1', dY1PosI, 'Y2', dY2PosI, 'T', WorkTab.dTPosI, EMC.CNT})
|
||||
end
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
table.insert( vCmd, { 12, 1}) -- Chiudo Y2
|
||||
table.insert( vCmd, { 11, 1}) -- chiudo Y1
|
||||
-- imposto i nuovi parametri di aggancio
|
||||
table.insert( vCmd, { 21, dY1DeltaF, dY2DeltaF})
|
||||
EgtOutLog( ' Y1DeltaF=' .. EgtNumToString( dY1DeltaF) .. ' Y2DeltaF=' .. EgtNumToString( dY2DeltaF), 1)
|
||||
|
||||
+132
-10
@@ -1,4 +1,124 @@
|
||||
==== Essetre_StdPF Update Log ====
|
||||
==== Common_ONE-PF Update Log ====
|
||||
|
||||
Versione 2.6j1 (08/10/2024)
|
||||
-- (SIM-GEN) Corretto primo movimento di approccio al pezzo. Ticket#2093
|
||||
|
||||
Versione 2.6i2 (13/09/2024)
|
||||
- (GEN) Migliorato calcolo chiusura paratia rulli con aggiornamento lunghezza della barra in caso di ultimo taglio e grezzo residuo in coda. Ticket#2017
|
||||
- (NGE-MLDE-GEN-SIM) Aggiunto solidi collisione TC. Corretto movimento a Y di sicurezza con lama. Ticket#2042
|
||||
- (NGE-SIM) Aggiunta collisione magazzino motosega ONE
|
||||
|
||||
Versione 2.6i1 (02/09/2024)
|
||||
- (SIM-GEN) Quando si aprono i rulli, se la trave non può seguire i rulli perchè la pinza andrebbe in extra-corsa, si sposta comunque la pinza fino al massimo della sua corsa. Ticket#1949
|
||||
- (GEN) In preselezione. Se lavorazione motosega, non mando a parcheggio altra testa con utensile precedente, perchè subito dopo viene chiamata preselezione. Ticket#1961
|
||||
|
||||
Versione 2.6h2 (07/08/2024)
|
||||
- (SIM) Allineata simulazione a generazione in primo movimento rapido approccio al pezzo.
|
||||
|
||||
Versione 2.6h1 (01/08/2024)
|
||||
- (GEN) Corretto segno posizione X di sicurezza per rotazione assi rotanti.
|
||||
|
||||
Versione 2.6g5 (31/07/2024)
|
||||
- (SIM-GEN) Se motosega allineata ad asse B per tagli di fianco, corretto movimento che manda testa a parcheggio. Pezzi più alti di 650 va solo in Zmax. Ticket#1943
|
||||
- (SIM-GEN) Gestione movimenti speciali per pezzi molto alti. Se HomeZ < primo punto lavorazione, allora vado al punto Z lavorazione prima di approcciare il pezzo in X. Ticket#1943
|
||||
- (GEN) Gestione creazione piano generico in caso il primo movimento della lavorazione sia un arco. Ticket#1891
|
||||
- (SIM-GEN) Modifica limite inferirore intervallo di pinzaggio per garantire, se possibile, il passaggio pezzo a pinza 2. Da Common-PF1250.
|
||||
- (GEN) Corretta scrittura ISO per parcheggiare morsa 3 dopo ribaltamento. Ticket#1922,#1733
|
||||
|
||||
Versione 2.6g4 (19/07/2024)
|
||||
- (SIM-GEN) Aumentato numero iterazioni per scambio carrelli (da 5 a 10), per pezzi lunghi 30m.
|
||||
|
||||
Versione 2.6g3 (17/07/2024)
|
||||
- (GEN) Correzione modifica precedente (2.6g2). Con lama precedente e motosega successiva, andava a parcheggio con lama alla quota della motosega. Ticket#1880
|
||||
|
||||
Versione 2.6g2 (16/07/2024)
|
||||
- (GEN) Per preselezione o movimenti in home, non si scrive più 'ET0' perchè non è più supportato. Ticket#1926
|
||||
|
||||
Versione 2.6g1 (10/07/2024)
|
||||
- (GEN) Se prima lavorazione con motosega, dopo G151 di attesa carrelli si ribadiscono tutti gli assi. Ticket#1924
|
||||
|
||||
Versione 2.6f1 (03/06/2024)
|
||||
- (GEN) Aggiunta possibilità di scrivere nome utensile doppio anche in lavorazione con parametro "TOOLDOUBLE". Note sulla lavorazione hanno precedenza su note utensile.
|
||||
|
||||
Versione 2.6e1 (30/04/2024)
|
||||
- (GEN) Chiamando la macchina con un nome che termini con '.TEST' si abilita come macchina per test interni, equivalente a settare 'IS_TEST_MACHINE' (che comunque rimane)
|
||||
- (SIM) In log collisioni, si scrive anche ID del gruppo per facilitare riconoscimento in caso di collisione
|
||||
- (MLDE-GEN) Gestione facoltativa parametro WOOD_DENSITY settabile in Ts3. In MLDE, mettere il valore di WOOD_DENSITY nella nostra variabile 'WoodDensity'.
|
||||
|
||||
Versione 2.6d2 (12/04/2024)
|
||||
- (MLDE-SIM-GEN) Aggiunta variabile FACOLTATIVA 'ForceToCloseRollersGate' ( che legge la variabile da TS3 'CHIUDI_PINZE_2_3_SCAMBIO') in mlde per forzare chiusura paratie rulli
|
||||
durante scambio pinze per facilitare passaggio pezzi molto storti. Se non presente chiude solo se necessario.
|
||||
|
||||
Versione 2.6d1 (28/03/2024)
|
||||
- (GEN) Rimosso da generazione funzione GetNextTool duplicata
|
||||
- (SIM-GEN) Se fase successiva start di un altro pezzo, la GetNextTool restituisce nil, per forzare movimento home in caso di utensili speciali
|
||||
- (MLDE-GEN) Aggiunto parametro 'IS_TEST_MACHINE' FACOLTATIVO. Se non esiste o 'false' è macchina standard, se 'true' è una macchina utilizzata per i test Egalware interni
|
||||
- (SIM) Corretto movimento in simulazione se motosega su testa 2
|
||||
|
||||
Versione 2.6c9 (26/03/2024)
|
||||
- (SIM) Corretta gestione cambio utensile con motosega. In alcuni casi non era coerente con generazione
|
||||
- (GEN) In 'PreparePostRotation' si resetta sempre anche la paratia in uscita (Ticket#1733)
|
||||
|
||||
Versione 2.6c8 (22/03/2024)
|
||||
- (SIM) Miglioramento visualizzazione spigoli VMILL alla fine della simulazione. Funzione: EgtVolZmapSetShowEdges. CAM5 ver. 2.6c2 FACOLTATIVA.
|
||||
|
||||
Versione 2.6c7 (11/03/2024)
|
||||
- (SIM-GEN) Aggiunta gestione parametro "SECDIST". Distanza di sicurezza tra paratia con rulli e utensile/testa. Parametro da inserire nelle note utensile.
|
||||
- (MLPE-GEN) Aggiunto parametro "WriteM05Command" (NON OBBLIGATORIO) per decidere se scrivere il comando M05 per arresto mandrino. Default a true.
|
||||
|
||||
Versione 2.6c6 (08/03/2024)
|
||||
- (SIM-GEN) Gestione rotazioni 90° come su FAST, caso MID2 (split/cut prima delle rotazioni)
|
||||
|
||||
Versione 2.6c5 (07/03/2024)
|
||||
- (GEN) Per ribaltamento, i comandi si differenziano per macchina. Sembra che ONE e PF abbiano comandi diversi. In attesa di conferma da parte di Essetre
|
||||
- (SIM-GEN) Se cambiato utensile, si aprono sempre paratie
|
||||
- (SIM) Spostato salvataggio dati utensile precedente in MachiningEnd, prima era in MachininsStart
|
||||
|
||||
Versione 2.6c4 (06/03/2024)
|
||||
- (SIM-GEN) Alla fine del movimento a Z-MAX, in home con lama solo se si cambia utensile. Prima andava sempre in home se era lama, anche se non doveva cambiare utensile
|
||||
|
||||
Versione 2.6c3 (05/03/2024)
|
||||
- (MLDE-SIM) Aggiunta variabile FACOLTATIVA 'EstimationRapidMultiplier' in mlde per regolare il tempo stimato di rapido su macchine vecchie. Se non presente default 1.
|
||||
|
||||
Versione 2.6c2 (04/03/2024)
|
||||
- (MLDE-GEN) Aggiunta variabile 'MACH_NAME' in mlde con nome macchina
|
||||
|
||||
Versione 2.6c1 (29/02/2024)
|
||||
- (SIM) Gestione rimozione VMILL per tagli a cubetti Zig-Zag
|
||||
|
||||
Versione 2.6b2 (26/02/2024)
|
||||
- (MLDE-SIM-GEN) EgtAddToPackagePath spostato in mlde
|
||||
|
||||
Versione 2.6b1 (20/02/2024)
|
||||
- (SIM) Corretto controllo calcolo Z su primo movimento lama, allineato a generazione
|
||||
- (GEN) Corretto emissione movimenti per macchine con motosega su testa 2
|
||||
- (SIM) Aggiunta funzioni "OnSimulInit" e "OnSimulExit" per orientare vista corretta in caso di macchina con carico destro. N.B.= serve CAM5 2.6b4
|
||||
- (ALL) "BeamData" caricato come libreria con 'require' anziché come file con 'dofile'
|
||||
- (GEN) In "GetMovesInAuxCmd" si passa la posizione calcolata V1 indipendentemente dall'utilizzo di Y1
|
||||
|
||||
Versione 2.6a7 (12/02/2024)
|
||||
- (GEN) Per movimento con motosega, si ribadiscono tutti gli assi nella prima G141
|
||||
|
||||
Versione 2.6a6 (02/02/2024)
|
||||
- (SIM) Corretta simulazione movimento in X-Home, coerente con generazione
|
||||
- (GEN) Aggiunta lettura parametro 'Split'
|
||||
- (SIM) Se lavorazione è un taglio di separazione, se necessario, ripristino posizione di Y1DELTA prima di aprire i rulli
|
||||
- (SIM-GEN) Modificata gestione movimenti motosega, in aggiunta con caso particolare di pezzo alto più di 650mm
|
||||
- (ALL) Caricamento BeamData come local
|
||||
|
||||
Versione 2.6a5 (26/01/2024)
|
||||
- (SIM-GEN) Migliorato calcolo dimensioni grezzo per apertura rulli in caso di 'precut'
|
||||
|
||||
Versione 2.6a4 (24/01/2024)
|
||||
- (GEN) Se pezzo tenuto solo con pinza destra non si esclude la rulliera di sinistra, se pezzogrande, può venire in supporto
|
||||
- (SIM-GEN) Correzione gestione apertura/chiusura rulli sul fine barra e in generale (da PF1250)
|
||||
- (SIM) Aggiunto solido collisione lama sotto traversa (per PF-progress)
|
||||
|
||||
Versione 2.6a3 (23/01/2024)
|
||||
- (GEN) Corretto gestione del movimento precedente all'ultimo che manda il pezzo alla posizione di scarico
|
||||
|
||||
Versione 2.6a2 (09/01/2024)
|
||||
- Nuova versione. Prima versione stabile rilasciabile.
|
||||
|
||||
Versione 2.6a1 (28/11/2023)
|
||||
- Prima versione post-proc comune tra macchine ONE e PF
|
||||
@@ -9,15 +129,17 @@ Versione 2.6a1 (28/11/2023)
|
||||
- (GEN+MLDE) Inserita gestione macro con carico ottimizzato. Macro macchina presente come standard solo su macchine PF. Parametro "OptimizedLoadBeam"
|
||||
- (GEN+SIM) Migliorata gestione riposizionamento pinze, in caso testa debba andare in home
|
||||
- (GEN) Se a zeta massima con lama e utensile successivo diverso, mi sposto sempre verso X-HOME
|
||||
- (GEN) Corretto movimento in caso di testa 1 su TC-2. Utilizzava le quote della testa 2 anziché della 1.
|
||||
- (GEN) Corretto movimento in caso di testa 1 su TC-2. Utilizzava le quote della testa 2 anziché della 1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Versione 2.6a2 (09/01/2024)
|
||||
- Nuova versione. Prima versione stabile rilasciabile.
|
||||
|
||||
Versione 2.6a3 (23/01/2024)
|
||||
- (GEN) Corretto gestione del movimento precedente all'ultimo che manda il pezzo alla posizione di scarico
|
||||
|
||||
versione 2.6a4 (24/01/2024)
|
||||
- (GEN) Se pezzo tenuto solo con pinza destra non si esclude la rulliera di sinistra, se pezzogrande, può venire in supporto
|
||||
- (SIM-GEN) Correzione gestione apertura/chiusura rulli sul fine barra e in generale (da PF1250)
|
||||
- (SIM) Aggiunto solido collisione lama sotto traversa (per PF-progress)
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_ONE-PF', -- nome script PP standard
|
||||
VERSION = '2.6a4', -- versione script
|
||||
VERSION = '2.6j1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user