Compare commits

..

20 Commits

Author SHA1 Message Date
andrea.villa a19947f6c2 Merge branch 'develop' 2024-12-02 08:25:22 +01:00
andrea.villa 07770ea12e Commit per versione 2024-12-02 08:25:12 +01:00
andrea.villa ce1ae72beb Per decidere posizione parcheggio barra dopo separazione, si considera lunghezza coda del pezzo in lavoro per evitare collisioni 2024-11-18 12:15:30 +01:00
andrea.villa 341e049753 Corretto movimento VMILL durante scarico pezzo piccolo a caduta 2024-11-14 10:42:10 +01:00
andrea.villa e8be6e9ca8 Merge remote-tracking branch 'origin/main' into develop 2024-11-11 09:25:01 +01:00
andrea.villa e4659394a5 Merge remote-tracking branch 'origin/develop' 2024-11-11 09:24:45 +01:00
andrea.villa 1e8dfdd2f0 - Aggiustato parametro in calcolo ingombro lavorazione
- Cambio versione
2024-11-11 09:24:31 +01:00
andrea.villa 1ff99e2f0f - Aggiunta gestione aggregato a T per NUM
- Tolta gestione testa dummy H4
2024-11-08 09:23:59 +01:00
andrea.villa e8958065ef Merge branch 'main' into develop 2024-10-25 14:35:55 +02:00
andrea.villa eff8fc90c6 Merge branch 'develop' 2024-10-25 14:35:50 +02:00
andrea.villa 4448156fec Miglioria 2.6j9. Si ribadisce pinza in presa sempre, all'inizio, in base a quella attiva 2024-10-25 14:35:36 +02:00
andrea.villa f346df9d27 Merge remote-tracking branch 'origin/main' into develop 2024-10-22 11:18:16 +02:00
andrea.villa 810f85c62a Merge branch 'hotfix/NewReposClampAfterTurn' 2024-10-22 11:17:35 +02:00
andrea.villa 6ec26b5ad1 Miglioria 2.6j6. Oltre al passo pellegrino si ribadisce anche quando è scambio diretto 2024-10-22 11:16:47 +02:00
andrea.villa 304701cb77 Merge branch 'main' into develop 2024-10-21 08:44:10 +02:00
andrea.villa 306945f09b Merge branch 'hotfix/BugFixRepositioningTolerance' 2024-10-21 08:44:03 +02:00
andrea.villa 09eb355037 Corretto problema tolleranza aggiunto con versione 2.6j7 2024-10-21 08:43:49 +02:00
andrea.villa 30ed6aa984 Merge remote-tracking branch 'origin/main' into develop 2024-10-18 10:21:52 +02:00
andrea.villa 36df78ed67 Merge remote-tracking branch 'origin/main' into develop 2024-10-17 16:10:15 +02:00
andrea.villa 8c5e759bec Merge remote-tracking branch 'origin/main' into develop 2024-10-17 09:28:19 +02:00
5 changed files with 89 additions and 30 deletions
+1 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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
+18
View File
@@ -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
View File
@@ -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
}