- In ShortestPathSorting si settano ora inizio e fine di ogni gruppo per ordine lavorazioni
- In STR0010 in caso che la strategia sia stata forzata da utente, non viene bocciata a causa della sua posizione/forma. Se forzata il cliente si è preso al responsabilità della sua scelta ed è giusto che venga provata. Al massimo si avranno errori di extra-corsa o colisioni.
This commit is contained in:
@@ -1694,15 +1694,12 @@ end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
function MachiningLib.ShortestPathSorting()
|
||||
-- verificare se serve settare prima e ultima lavorazione
|
||||
-- EgtOptMachSetFirstMachining( int nId)
|
||||
-- EgtOptMachSetLastMachining( int nId)
|
||||
|
||||
local nStartIndex
|
||||
local i = 1
|
||||
while i <= #DB_MACH_APPLIED do
|
||||
local nMachInDisp = 0
|
||||
local MachiningOptList = {}
|
||||
local GroupInfo = {}
|
||||
|
||||
-- se è una lavorazione
|
||||
if DB_MACH_APPLIED[i].sType ~= 'DISP' then
|
||||
@@ -1715,9 +1712,11 @@ function MachiningLib.ShortestPathSorting()
|
||||
|
||||
-- tra gruppi (stage) non si può ottimizzare
|
||||
EgtOptMachSetAllGroupsDependencesAsMandatory( true)
|
||||
EgtOptMachSetOptimizationForGroups( true)
|
||||
|
||||
-- se è una lavorazione
|
||||
while DB_MACH_APPLIED[i] and DB_MACH_APPLIED[i].sType ~= 'DISP' do
|
||||
local ptMinX, ptMaxX
|
||||
-- aggiungo lavorazioni
|
||||
local nToolIndex = MACHININGS[DB_MACH_APPLIED[i].nIndexInMachinings].Machining.nToolIndex
|
||||
EgtOptMachAddTool( nToolIndex, 2, 2) -- , [ num dTC_X, num dTC_Y, num dTC_Z, num dTC_A, num dTC_B, num dTC_C])
|
||||
@@ -1729,6 +1728,29 @@ function MachiningLib.ShortestPathSorting()
|
||||
EgtOptMachAddMachining( i, nToolIndex, nGroup, MachStartAxesPos, MachEndAxesPos)
|
||||
table.insert( MachiningOptList, i)
|
||||
|
||||
-- si salvano i punti minimi e massimi tra tutte le lavorazioni di ogni gruppo
|
||||
if MachStartAxesPos[1] < MachEndAxesPos[1] then
|
||||
ptMinX = MachStartAxesPos
|
||||
ptMaxX = MachEndAxesPos
|
||||
else
|
||||
ptMinX = MachEndAxesPos
|
||||
ptMaxX = MachStartAxesPos
|
||||
end
|
||||
|
||||
-- si aggiungono le info di gruppo
|
||||
local bFound = false
|
||||
for t = 1, #GroupInfo do
|
||||
if GroupInfo[t].nGroup == nGroup then
|
||||
if GroupInfo[t].ptMin[1] > ptMinX[1] then GroupInfo[t].ptMin = ptMinX end
|
||||
if GroupInfo[t].ptMax[1] < ptMaxX[1] then GroupInfo[t].ptMax = ptMaxX end
|
||||
bFound = true
|
||||
end
|
||||
end
|
||||
-- se non ho trovato, si aggiunge in lista
|
||||
if not bFound then
|
||||
table.insert( GroupInfo, { nGroup = nGroup, nStage = MACHININGS[DB_MACH_APPLIED[i].nIndexInMachinings].Machining.nStage, ptMin = ptMinX, ptMax = ptMaxX})
|
||||
end
|
||||
|
||||
nMachInDisp = nMachInDisp + 1
|
||||
i = i + 1
|
||||
end
|
||||
@@ -1754,6 +1776,23 @@ function MachiningLib.ShortestPathSorting()
|
||||
end
|
||||
end
|
||||
|
||||
-- definisco gruppo per gruppo la direzione preferita di ottimizzazione
|
||||
for t = 1, #GroupInfo do
|
||||
-- se gruppo "Taglio di coda" l'ordinamento è al contrario
|
||||
if GroupInfo[t].nStage == 3 then
|
||||
-- start point
|
||||
EgtOptMachSetOpenBoundForGroups( GroupInfo[t].nGroup, true, SHP_OB.NEAR_PNT, GroupInfo[t].ptMin[1], GroupInfo[t].ptMin[2], GroupInfo[t].ptMin[3])
|
||||
-- end point
|
||||
EgtOptMachSetOpenBoundForGroups( GroupInfo[t].nGroup, false, SHP_OB.NEAR_PNT, GroupInfo[t].ptMax[1], GroupInfo[t].ptMax[2], GroupInfo[t].ptMax[3])
|
||||
-- in tutti gli altri gruppi si ordina sempre dalla testa alla coda
|
||||
else
|
||||
-- start point
|
||||
EgtOptMachSetOpenBoundForGroups( GroupInfo[t].nGroup, true, SHP_OB.NEAR_PNT, GroupInfo[t].ptMax[1], GroupInfo[t].ptMax[2], GroupInfo[t].ptMax[3])
|
||||
-- end point
|
||||
EgtOptMachSetOpenBoundForGroups( GroupInfo[t].nGroup, false, SHP_OB.NEAR_PNT, GroupInfo[t].ptMin[1], GroupInfo[t].ptMin[2], GroupInfo[t].ptMin[3])
|
||||
end
|
||||
end
|
||||
|
||||
-- calcolo ordine lavorazioni
|
||||
MachiningOptList = EgtOptMachCalculate( MachiningOptList)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user