Implementata funzione per scelta strategia migliore (tra quelle disponibili che sono state analizzate)
This commit is contained in:
+33
-8
@@ -633,11 +633,31 @@ end
|
||||
|
||||
-------------------------------------------------------------------------------------------------------------
|
||||
-- -- sceglie la strategia migliore tra quelle disponibili ( presenti nella tabella vProcRot[dRotIndex].AvailableStrategies)
|
||||
local function ChooseStrategy( Proc, b3Raw)
|
||||
-- ciclo tutte le strategia
|
||||
local function ChooseStrategy( Proc)
|
||||
-- ciclo tutte le strategie
|
||||
local nIndexBestStrategy = 0
|
||||
for i = 1, #Proc.AvailableStrategies do
|
||||
|
||||
-- se non ancora scelta alcuna strategia
|
||||
if nIndexBestStrategy == 0 then
|
||||
-- prendo la prima applicabile che trovo
|
||||
if Proc.AvailableStrategies[i].Status == 'Completed' or Proc.AvailableStrategies[i].Status == 'Not-Completed' then
|
||||
nIndexBestStrategy = i
|
||||
end
|
||||
-- altrimenti
|
||||
else
|
||||
-- se una completa e l'altra no, prediligo la completa
|
||||
if Proc.AvailableStrategies[i].Status == 'Completed' and Proc.AvailableStrategies[nIndexBestStrategy].Status == 'Not-Completed' then
|
||||
nIndexBestStrategy = i
|
||||
-- a parità di stato si controlla rating composito (rating + indice di completamento)
|
||||
elseif Proc.AvailableStrategies[i].Status == Proc.AvailableStrategies[nIndexBestStrategy].Status then
|
||||
local dCompositeRatingBestStrategy = Proc.AvailableStrategies[nIndexBestStrategy].Rating + Proc.AvailableStrategies[nIndexBestStrategy].CompletionIndex
|
||||
local dCompositeRatingStrategyToAnalize = Proc.AvailableStrategies[i].Rating + Proc.AvailableStrategies[i].CompletionIndex
|
||||
-- si predilige strategia con rating composito più alto. N.B.= se stesso rating, mantengo la prima, che teoricamente è la preferita dal cliente
|
||||
if dCompositeRatingStrategyToAnalize > dCompositeRatingBestStrategy then
|
||||
nIndexBestStrategy = i
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- salvo sulla proc la migliore strategia
|
||||
@@ -659,7 +679,7 @@ local function ProcessPieceFeatures( vProcSingleRot, b3Raw)
|
||||
-- processa le strategie disponibili e salva sulla Proc il voto e info varie per ogni startegia
|
||||
Proc = MachiningLib.CalculateRatingStrategies( Proc, b3Raw)
|
||||
-- sceglie la strategia migliore tra quelle disponibili ( presenti nella tabella vProcRot[dRotIndex].AvailableStrategies)
|
||||
Proc = ChooseStrategy( Proc, b3Raw)
|
||||
Proc = ChooseStrategy( Proc)
|
||||
end
|
||||
end
|
||||
return vProcSingleRot
|
||||
@@ -678,7 +698,7 @@ local function ExecPieceFeatures( vProc, b3Raw)
|
||||
-- carico file script strategia (non serve verificare presenza del file perchè già fatto durante scelta strategia)
|
||||
local StrategyScriptName = '\\Strategies\\' .. Proc.ChosenStrategy.StrategyId .. '\\' .. Proc.ChosenStrategy.StrategyId
|
||||
local StrategyScript = require( StrategyScriptName)
|
||||
-- eseguo la strategia solo come calcolo fattibilità e voto. Non si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati
|
||||
-- eseguo la strategia e si applicano le lavorazioni. Si passa la Proc e i parametri personalizzati
|
||||
Proc = StrategyScript.Make( bAddMachining, Proc, Proc.ChosenStrategy.Parameters)
|
||||
end
|
||||
end
|
||||
@@ -716,12 +736,15 @@ function BeamExec.ProcessFeatures()
|
||||
local nPartId = EgtGetFirstPartInRawPart( nRawId)
|
||||
if not nPartId and EgtGetRawPartBBox( nRawId):getDimX() < BeamData.MinRaw then break end
|
||||
|
||||
local vProc = {}
|
||||
-- per ogni rotazione, calcolo come lavorare le feature per decidere posizionamento iniziale e in che rotazione verranno lavorate le singole feature
|
||||
local vProcRot = {}
|
||||
-- lista contenente le feature da eseguire
|
||||
local vProc = {}
|
||||
|
||||
-- TODO da rimuovere o lasciare solo per debug
|
||||
EgtStartCounter()
|
||||
if EgtGetDebugLevel() >= 3 then
|
||||
EgtStartCounter()
|
||||
end
|
||||
|
||||
-- TODO Il numero di rotazioni da calcolare deve dipendere dalle impostazionei del cliente. Per adesso si calcolano tutte e 4, ma può essere ottimizzato
|
||||
for dRotIndex = 1, 4 do
|
||||
@@ -752,7 +775,9 @@ function BeamExec.ProcessFeatures()
|
||||
end
|
||||
|
||||
-- TODO da rimuovere o lasciare solo per debug
|
||||
local time = EgtStopCounter()
|
||||
if EgtGetDebugLevel() >= 3 then
|
||||
local time = EgtStopCounter()
|
||||
end
|
||||
|
||||
-- TODO decidere come lavorare ogni feature in base alla matrice delle rotazioni
|
||||
-- la matrice delle rotazioni deve già salvare sulla proc la strategia da utilizzare
|
||||
|
||||
Reference in New Issue
Block a user