From 5ea5c78605293f2d8dab12adc7062389a9deec32 Mon Sep 17 00:00:00 2001 From: "andrea.villa" Date: Tue, 7 May 2024 09:20:25 +0200 Subject: [PATCH] Implementata funzione per scelta strategia migliore (tra quelle disponibili che sono state analizzate) --- LuaLibs/BeamExec.lua | 41 ++++++++++++++++++++++++++++++++-------- LuaLibs/MachiningLib.lua | 1 + 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/LuaLibs/BeamExec.lua b/LuaLibs/BeamExec.lua index 1ee3e6e..643f5c6 100644 --- a/LuaLibs/BeamExec.lua +++ b/LuaLibs/BeamExec.lua @@ -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 diff --git a/LuaLibs/MachiningLib.lua b/LuaLibs/MachiningLib.lua index 83025b4..ba9fbd6 100644 --- a/LuaLibs/MachiningLib.lua +++ b/LuaLibs/MachiningLib.lua @@ -61,6 +61,7 @@ function MachiningLib.CalculateRatingStrategies( Proc, b3Raw) Proc.AvailableStrategies[nIndexStrategy].Rating = 0 Proc.AvailableStrategies[nIndexStrategy].Info = 'Strategy not found' Proc.AvailableStrategies[nIndexStrategy].Status = 'Not-Applicable' + Proc.AvailableStrategies[nIndexStrategy].CompletionIndex = 0 end end end