Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a19947f6c2 | |||
| 07770ea12e | |||
| ce1ae72beb | |||
| 341e049753 | |||
| e8be6e9ca8 | |||
| e4659394a5 | |||
| 1e8dfdd2f0 | |||
| 1ff99e2f0f | |||
| e8958065ef | |||
| eff8fc90c6 | |||
| 4448156fec | |||
| f346df9d27 | |||
| 810f85c62a | |||
| 6ec26b5ad1 | |||
| 304701cb77 | |||
| 306945f09b | |||
| 09eb355037 | |||
| 30ed6aa984 | |||
| 36df78ed67 | |||
| 8c5e759bec |
@@ -1647,7 +1647,7 @@ end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetET( sHead, sTcPos, dAxR3)
|
||||
if sHead == 'H1' then
|
||||
if sHead == 'H1' or sHead == 'H5' or sHead == 'H6' then
|
||||
return ' E'..sTcPos
|
||||
elseif sHead == 'H2' then
|
||||
return ' ET42'
|
||||
|
||||
+23
-8
@@ -152,7 +152,8 @@ function OnSimulDispositionStarting()
|
||||
EmtUnlinkAllRawPartsFromGroups()
|
||||
if EMT.PHASE > 1 then
|
||||
if IsStartOrRestPhase( EMT.PHASE) then
|
||||
EgtSetAxisPos( 'T', LoadT)
|
||||
local ParkT = GetParkT()
|
||||
EgtSetAxisPos( 'T', ParkT)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -358,6 +359,8 @@ function OnSimulDispositionStart()
|
||||
EgtOutText( 'Barra non ruotata')
|
||||
end
|
||||
end
|
||||
-- verifico posizione di carico
|
||||
local ParkT = GetParkT()
|
||||
-- indice primo grezzo della fase
|
||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||
-- ricerco vettore movimento per i successivi
|
||||
@@ -365,7 +368,7 @@ function OnSimulDispositionStart()
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
while nRawId do
|
||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
|
||||
vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
||||
vtMove = Vector3d( - ParkT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
||||
break
|
||||
end
|
||||
nRawId = EgtGetNextRawPart( nRawId)
|
||||
@@ -386,6 +389,8 @@ function OnSimulDispositionStart()
|
||||
end
|
||||
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
||||
else
|
||||
-- verifico posizione di carico
|
||||
local ParkT = GetParkT()
|
||||
-- indice primo grezzo della fase
|
||||
local nOrd = GetPhaseOrd( EMT.PHASE)
|
||||
-- ricerco vettore movimento per i successivi
|
||||
@@ -393,7 +398,7 @@ function OnSimulDispositionStart()
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
while nRawId do
|
||||
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd + 1 then
|
||||
vtMove = Vector3d( - LoadT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
||||
vtMove = Vector3d( - ParkT - EgtGetRawPartBBox( nRawId):getMax():getX(), 0, 0)
|
||||
break
|
||||
end
|
||||
nRawId = EgtGetNextRawPart( nRawId)
|
||||
@@ -477,8 +482,8 @@ function OnSimulToolSelect( dPosA)
|
||||
EMT.A1n = 'Y'
|
||||
EMT.A2n = 'V'
|
||||
end
|
||||
-- carico utensile se non lama su sua testa o dummy
|
||||
if EMT.HEAD ~= 'H2' and EMT.HEAD ~= 'H4' then
|
||||
-- carico utensile se non lama
|
||||
if EMT.HEAD ~= 'H2' then
|
||||
-- se sega a catena, imposto subito angolo scelto per asse virtuale A
|
||||
if EMT.HEAD == 'H3' then
|
||||
if not dPosA then
|
||||
@@ -589,8 +594,8 @@ function OnSimulToolDeselect()
|
||||
ShowToolInTcPos( EMT.TCPOS_1, false)
|
||||
end
|
||||
EgtOutText( '')
|
||||
-- deposito utensile se prossimo non lama su sua testa o dummy
|
||||
elseif EMT.NEXTHEAD ~= 'H2' and EMT.NEXTHEAD ~= 'H4' then
|
||||
-- deposito utensile se prossimo non lama su sua testa
|
||||
elseif EMT.NEXTHEAD ~= 'H2' then
|
||||
if EMT.NEXTTOOL ~= EMT.TOOL_1 then
|
||||
EgtOutText( 'Tool change in progress...')
|
||||
-- simulo movimento
|
||||
@@ -922,7 +927,7 @@ function ExecUnloading()
|
||||
local nLayId = EgtGroup( nVmGrpId, EgtGetGlobFrame( vMillId))
|
||||
EgtRelocate( vMillId, nLayId)
|
||||
local vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 450, -450), 0)
|
||||
if EMT.FALL then vtMove = Vector3d( -500, 0, EgtIf( BD.RIGHT_LOAD, 750, -750)) end
|
||||
if EMT.FALL then vtMove = Vector3d( 0, EgtIf( BD.RIGHT_LOAD, 500, -500), -750) end
|
||||
EgtMove( nLayId, vtMove, GDB_RT.GLOB)
|
||||
EgtSetLevel( vMillId, GDB_LV.USER)
|
||||
-- aggiungo gli spigoli
|
||||
@@ -1566,6 +1571,16 @@ function GetPhaseRot( nPhase)
|
||||
return ( EgtGetInfo( EgtGetPhaseDisposition( nPhase) or GDB_ID.NULL, 'ROT', 'i') or 0)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function GetParkT()
|
||||
local dTmp = EgtGetInfo( EMT.DISPID, 'TPOS', 'd') or EgtGetInfo( EMT.DISPID, 'TPARK', 'd')
|
||||
if dTmp then
|
||||
return dTmp
|
||||
else
|
||||
return LoadT
|
||||
end
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
-- *** END GENERAL ***
|
||||
---------------------------------------------------------------------
|
||||
|
||||
+46
-20
@@ -638,13 +638,15 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
-- Calcolo dell'ingombro della lavorazione
|
||||
local dDistFront, dDistBack = SpecialCalcMachiningEncumbrance( EMC.MCHID, bPreCut)
|
||||
if not dDistFront or not dDistBack then return end
|
||||
local dMaxLenLeft = 0
|
||||
if bPreSplit or bSplitting then
|
||||
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
||||
local dDistF, dDistB, dMaxLF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
||||
dDistFront = min( dDistFront, dDistF)
|
||||
local dNextHOVM = EgtGetInfo( EgtGetNextRawPart( nCurrRawId) or GDB_ID.NULL, 'HOVM', 'd') or 0
|
||||
local dBackOther = b3Tot:getDimX() - b3Raw:getDimX() - MinOther - dNextHOVM
|
||||
EgtOutLog( 'DistBack='..EgtNumToString( dDistBack)..' OtherBack='..EgtNumToString( dBackOther), 3)
|
||||
dDistBack = min( dDistBack, dBackOther)
|
||||
if bSplitting then dMaxLenLeft = dMaxLF end
|
||||
elseif bPreCut or bCutting then
|
||||
local dDistF = SpecialCalcPhaseEncumbrance( EMC.PHASE + 1)
|
||||
dDistFront = min( dDistFront, dDistF)
|
||||
@@ -709,8 +711,9 @@ function SpecApplyPath( bPreSplit, bSplitting, bPreCut, bCutting, bUnload, bPreR
|
||||
return false
|
||||
end
|
||||
-- eseguo la separazione ( standard o di pezzo ruotato)
|
||||
EgtOutLog( 'MaxLenLeft=' .. EgtNumToString( dMaxLenLeft, 1), 1)
|
||||
if not IsMid2Phase( EMC.PHASE + 1) then
|
||||
vCmd = SpecCalcSplit( b3Raw:getDimX())
|
||||
vCmd = SpecCalcSplit( b3Raw:getDimX(), dMaxLenLeft)
|
||||
else
|
||||
vCmd = SpecCalcSplitRot( b3Raw:getDimX())
|
||||
end
|
||||
@@ -823,6 +826,7 @@ function SpecialCalcPhaseEncumbrance( nPhase)
|
||||
-- Deve essere la fase finale di lavorazione di un pezzo (già staccato dal resto della trave)
|
||||
local dDistFront = EMC.LB
|
||||
local dDistBack = EMC.LB
|
||||
local dMaxLenLeft = 0
|
||||
-- Salvo lavorazione e utensile correnti, per ripristinarli alla fine
|
||||
local nOrigMchId = EgtGetCurrMachining()
|
||||
local sOrigTool = EgtTdbGetCurrToolParam( MCH_TP.NAME)
|
||||
@@ -847,6 +851,9 @@ function SpecialCalcPhaseEncumbrance( nPhase)
|
||||
if dDistF and dDistB then
|
||||
dDistFront = min( dDistFront, dDistF)
|
||||
dDistBack = min( dDistBack, dDistB)
|
||||
local dMaxLenL = EMC.LR - dDistF
|
||||
EgtOutLog( ' MaxLenLeft = ' .. EgtNumToString( dMaxLenL, 1), 3)
|
||||
dMaxLenLeft = max( dMaxLenLeft, dMaxLenL)
|
||||
end
|
||||
nMchId = EgtGetNextActiveOperation( nMchId)
|
||||
end
|
||||
@@ -855,7 +862,7 @@ function SpecialCalcPhaseEncumbrance( nPhase)
|
||||
if sOrigTool then EgtTdbSetCurrTool( sOrigTool) end
|
||||
if sOrigTool and sOrigHead and nOrigExit then EgtSetCalcTool( sOrigTool, sOrigHead, nOrigExit) end
|
||||
-- Restituisco gli ingombri trovati
|
||||
return dDistFront, dDistBack
|
||||
return dDistFront, dDistBack, dMaxLenLeft
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
@@ -1028,9 +1035,9 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
||||
elseif ( vtTool:getX() > 0.5) then
|
||||
dHeadFront = 450
|
||||
end
|
||||
if vtTool:getX() > 0.25 then
|
||||
if vtTool:getX() > 0.25 then
|
||||
dHeadFront = dHeadFront + max( dTLen - 130, 0) * vtTool:getX()
|
||||
elseif vtTool:getX() > 0 then
|
||||
elseif vtTool:getX() > 0 then
|
||||
dHeadFront = dHeadFront + ( dTLen + 180) * vtTool:getX()
|
||||
end
|
||||
if vtTool:getX() < -0.866 then
|
||||
@@ -1042,7 +1049,7 @@ function SpecCalcEncumbrance( vtTool, vtArm, ptMin, ptMax, bSaw, bChain, dTLen,
|
||||
if vtArm:getX() > 0.259 then
|
||||
dHeadFront = 510
|
||||
else
|
||||
dHeadFront = EgtIf( vtTool:getZ() > 0.966, 160, 280)
|
||||
dHeadFront = EgtIf( vtTool:getZ() > 0.966, 170, 280)
|
||||
end
|
||||
end
|
||||
-- per fresature longitudinali con utensile di fianco
|
||||
@@ -1329,10 +1336,17 @@ function SpecCalcCarriages( dDistFront, dDistBack, bFixedDelta, bFixedPos)
|
||||
end
|
||||
|
||||
---------------------------------------------------------------------
|
||||
function SpecCalcSplit( dLenRaw)
|
||||
function SpecCalcSplit( dLenRaw, dMaxLenLeft)
|
||||
local vCmd = {}
|
||||
EgtOutLog( ' *[S]', 1)
|
||||
table.insert( vCmd, { 0, EgtIf( EMC.VDELTA, 'Split', 'Fall')})
|
||||
local bSplit = ( EMC.VDELTA ~= nil)
|
||||
local ParkT = LoadT
|
||||
if bSplit then
|
||||
if dMaxLenLeft + 100 > LoadT then
|
||||
ParkT = dMaxLenLeft + 300
|
||||
end
|
||||
end
|
||||
table.insert( vCmd, { 0, EgtIf( bSplit, 'Split', 'Fall')})
|
||||
-- determino i grezzi da agganciare al carrello Y (sono quelli presenti nella fase successiva dispari)
|
||||
local nNextOddPhase = GetNextStartOrRestPhase( EMC.PHASE)
|
||||
local nRawId = EgtGetFirstRawPart()
|
||||
@@ -1344,20 +1358,26 @@ function SpecCalcSplit( dLenRaw)
|
||||
end
|
||||
-- riporto il carrello Y al carico con il resto della trave
|
||||
local dLDelta = EMC.YDELTA - dLenRaw
|
||||
table.insert( vCmd, { 1, 'Y', LoadT + dLDelta})
|
||||
table.insert( vCmd, { 1, 'Y', ParkT + dLDelta})
|
||||
table.insert( vCmd, { 21, 0, EMC.VDELTA or 0})
|
||||
-- imposto subito Y non più attaccato al trave in lavoro
|
||||
EMC.YDELTA = nil
|
||||
-- salvo posizione carrello Y in disposizione del pezzo dopo split
|
||||
local PostDispId = EgtGetPhaseDisposition( EMC.PHASE + 1)
|
||||
if PostDispId then
|
||||
EgtSetInfo( PostDispId, 'YPOS', LoadT + dLDelta)
|
||||
if not bSplit then
|
||||
EgtSetInfo( PostDispId, 'TPOS', ParkT)
|
||||
else
|
||||
EgtRemoveInfo( PostDispId, 'TPOS')
|
||||
EgtSetInfo( PostDispId, 'TPARK', ParkT)
|
||||
end
|
||||
EgtSetInfo( PostDispId, 'YPOS', ParkT + dLDelta)
|
||||
end
|
||||
-- salvo posizione grezzo rimasto e posizione carrello Y nella disposizione iniziale del pezzo succ (prossima fase dispari)
|
||||
local NextDispId = EgtGetPhaseDisposition( nNextOddPhase)
|
||||
if NextDispId then
|
||||
EgtSetInfo( NextDispId, 'TPOS', LoadT)
|
||||
EgtSetInfo( NextDispId, 'YPOS', LoadT + dLDelta)
|
||||
EgtSetInfo( NextDispId, 'TPOS', ParkT)
|
||||
EgtSetInfo( NextDispId, 'YPOS', ParkT + dLDelta)
|
||||
end
|
||||
return vCmd
|
||||
end
|
||||
@@ -1518,16 +1538,16 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
|
||||
-- se pinza non in presa, setto offset minimo in base all'altra che sta pinzando
|
||||
if not dYDeltaI then
|
||||
dYDeltaI = dVDeltaI + ( MyMinY - MaxV) + 100 * GEO.EPS_SMALL
|
||||
dYDeltaI = dVDeltaI + ( MyMinY - MaxV)
|
||||
end
|
||||
if not dVDeltaI then
|
||||
dVDeltaI = dYDeltaI - ( MyMinY - MaxV) - 100 * GEO.EPS_SMALL
|
||||
dVDeltaI = dYDeltaI - ( MyMinY - MaxV)
|
||||
end
|
||||
if not dYDeltaF then
|
||||
dYDeltaF = dVDeltaF + ( MyMinY - MaxV) + 100 * GEO.EPS_SMALL
|
||||
dYDeltaF = dVDeltaF + ( MyMinY - MaxV)
|
||||
end
|
||||
if not dVDeltaF then
|
||||
dVDeltaF = dYDeltaF - ( MyMinY - MaxV) - 100 * GEO.EPS_SMALL
|
||||
dVDeltaF = dYDeltaF - ( MyMinY - MaxV)
|
||||
end
|
||||
|
||||
-- se non c'è posizione finale, è lo scarico. Allora setto al minimo della morsa allo scarico.
|
||||
@@ -1544,6 +1564,14 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
local bZmaxOk = EnsureZmax( bZmaxOk, vCmd)
|
||||
end
|
||||
|
||||
-- ribadisco pinzaggio
|
||||
if EMC.YDELTA then
|
||||
table.insert( vCmd, { 11, 1})
|
||||
end
|
||||
if EMC.VDELTA then
|
||||
table.insert( vCmd, { 12, 1})
|
||||
end
|
||||
|
||||
-- reset contatore primo riposizionamento con compensazione lettura laser
|
||||
EMC.CNT = nil
|
||||
|
||||
@@ -1575,7 +1603,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- * deve effettivamente spostarsi
|
||||
-- * non si arriva da gestione passo del pellegrino
|
||||
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
||||
if ( dYDeltaI - dVDeltaF) - 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
||||
if ( dYDeltaI - dVDeltaF) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dVDeltaF - dVDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
||||
( dVDeltaF - dVDeltaI > MinV - dVPosI + MyMinY - dYPosI) then
|
||||
table.insert( vCmd, { 0, 'Direct-V-Y'})
|
||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||
@@ -1680,7 +1708,7 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- * deve effettivamente spostarsi
|
||||
-- * non si arriva da gestione passo del pellegrino
|
||||
-- * se riesce a raggiungere la posizione con le corse a disposizione per come sono posizionate le morse attualmente
|
||||
elseif ( dYDeltaF - dVDeltaI) - 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
||||
elseif ( dYDeltaF - dVDeltaI) + 10 * GEO.EPS_SMALL >= MyMinY - MaxV and abs( dYDeltaF - dYDeltaI) > 10 * GEO.EPS_SMALL and not EMC.PILGRIMSTEP and
|
||||
( dYDeltaF - dYDeltaI < MaxY - dYPosI + MaxV - dVPosI) then
|
||||
table.insert( vCmd, { 0, 'Direct-Y-V'})
|
||||
-- se l'altra morsa non era in presa, vado a pinzare il pezzo
|
||||
@@ -1791,7 +1819,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
-- compatto al centro
|
||||
if not EMC.YDELTA then
|
||||
table.insert( vCmd, { 0, 'Compact Y'})
|
||||
table.insert( vCmd, { 12, 1})
|
||||
table.insert( vCmd, { 11, 0})
|
||||
dTPosA = MaxV - dVDeltaI
|
||||
dVPosA = MaxV
|
||||
@@ -1804,7 +1831,6 @@ function SpecAdjustCarriages( vCmd, dTPosI, dYDeltaI, dVDeltaI, dTPosF, dYDeltaF
|
||||
end
|
||||
if not EMC.VDELTA then
|
||||
table.insert( vCmd, { 0, 'Compact V'})
|
||||
table.insert( vCmd, { 11, 1})
|
||||
table.insert( vCmd, { 12, 0})
|
||||
dTPosA = MyMinY - dYDeltaI
|
||||
dVPosA = MaxV
|
||||
|
||||
@@ -1,5 +1,23 @@
|
||||
==== Common_FAST Update Log ====
|
||||
|
||||
Versione 2.6l1 (02/12/2024)
|
||||
- (SIM) Corretto movimento VMILL durante scarico pezzo piccolo a caduta
|
||||
- (SIM-GEN) Per decidere posizione parcheggio barra dopo separazione, si considera lunghezza coda del pezzo in lavoro per evitare collisioni. Ticket#2168
|
||||
|
||||
Versione 2.6k1 (11/11/2024)
|
||||
- (GEN) Aggiunta gestione aggregato a T per NUM
|
||||
- (SIM) Tolta gestione testa dummy H4
|
||||
- (SIM-GEN) Aggiustato parametro in calcolo ingombro lavorazione. Ticket#2163
|
||||
|
||||
Versione 2.6j10 (25/10/2024)
|
||||
- (SIM-GEN) Miglioria 2.6j9. Si ribadisce pinza in presa sempre, all'inizio, in base a quella attiva
|
||||
|
||||
Versione 2.6j9 (22/10/2024)
|
||||
- (SIM-GEN) Miglioria 2.6j6. Oltre al passo pellegrino si ribadisce anche quando è scambio diretto
|
||||
|
||||
Versione 2.6j8 (21/10/2024)
|
||||
- (SIM-GEN) Corretto problema tolleranza aggiunto con versione 2.6j7
|
||||
|
||||
Versione 2.6j7 (18/10/2024)
|
||||
- (SIM-GEN) In nuova disposizione carrelli, aggiunta tolleranza di 100 EPS quando si calcola minimo posizionamento
|
||||
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
|
||||
local InfoCommon_STD_PP = {
|
||||
NAME = 'Common_FAST', -- nome script PP standard
|
||||
VERSION = '2.6j7', -- versione script
|
||||
VERSION = '2.6l1', -- versione script
|
||||
MIN_MACH_VER_PP_COMMON = '2.5k1' -- versione minima kernel
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user