From e4c696c498b930166b658aa2f97f20f1536abf75 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Wed, 31 Jan 2024 09:08:18 +0100 Subject: [PATCH] 3dPrinting : - correzioni a calcolo TFS per layer vuoti (tipicamente primi e ultimi con estrusione a 45 gradi). --- LuaLibs/RunMachParamFromSWCalc.lua | 62 ++++++------------------------ 1 file changed, 11 insertions(+), 51 deletions(-) diff --git a/LuaLibs/RunMachParamFromSWCalc.lua b/LuaLibs/RunMachParamFromSWCalc.lua index df17423..13ea1b3 100644 --- a/LuaLibs/RunMachParamFromSWCalc.lua +++ b/LuaLibs/RunMachParamFromSWCalc.lua @@ -1,4 +1,4 @@ --- RunMachParamFromSWCalc.lua by Egaltech s.r.l. 2022/12/28 +-- RunMachParamFromSWCalc.lua by Egaltech s.r.l. 2024/01/30 -- Calcolo dei parametri di stampa -- Tabella per definizione modulo @@ -126,44 +126,6 @@ function RunMachParamFromSWCalc.Exec() end nCrvId = EgtGetNextName( nCrvId, CONTOUR_GRP .. '*') end - - - -- -- rimuovo eventuale info precedente del tempo di attesa - -- EgtRemoveInfo( nLayerId, KEY_WAITING_TIME) - -- -- calcolo lunghezza totale del layer - -- local dTotLayerLength = 0 - -- local dTotLayerLengthForMass = 0 - -- local dTotLayerArea = 0 - -- local nCrvId = EgtGetFirstNameInGroup( nLayerId, CONTOUR_GRP .. '*') - -- while nCrvId do - -- local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) - -- -- sommo lunghezze percorsi - -- local dTotCrvLength = 0 - -- local dTotCrvLengthForMass = 0 - -- local nShellId = EgtGetFirstInGroup( nToolPathId) - -- while nShellId do - -- dTotCrvLength = dTotCrvLength + EgtCurveLength( nShellId) - -- if EgtGetName( nShellId) ~= WIPE_CRV then - -- dTotCrvLengthForMass = dTotCrvLengthForMass + EgtCurveLength( nShellId) - -- end - -- nShellId = EgtGetNext( nShellId) - -- end - -- dTotLayerLength = dTotLayerLength + dTotCrvLength - -- dTotLayerLengthForMass = dTotLayerLengthForMass + dTotCrvLengthForMass - -- -- recupero area - -- local nOuterCrvId = EgtGetFirstNameInGroup( nCrvId, OUTER_CRV) - -- if nOuterCrvId and dStrandCount > 0.5 then - -- local _, _, dTotCrvArea = EgtCurveArea( nOuterCrvId) - -- local dOuterLength = EgtCurveLength( nOuterCrvId) - -- -- recupero offset del part per aggiungerlo all'area interna - -- local dOffset = EgtGetInfo( nPartId, KEY_OFFSET_SLICE, 'd') - -- dTotCrvArea = dTotCrvArea + ( dOffset * dOuterLength) - -- dTotLayerArea = dTotLayerArea + dTotCrvArea - -- end - -- nCrvId = EgtGetNextName( nCrvId, CONTOUR_GRP .. '*') - -- end - - -- recupero feed del layer local dLayerFeed = 0 local dLayerWait = 0 @@ -192,12 +154,11 @@ function RunMachParamFromSWCalc.Exec() for nMeanIndex = 1, #LengthCrvList do dStrandMean = dStrandMean + LengthCrvList[nMeanIndex].Width * LengthCrvList[nMeanIndex].Length end - dStrandMean = dStrandMean / dTotLayerLength + dStrandMean = dStrandMean / EgtIf( dTotLayerLength > 0.1, dTotLayerLength, 1) -- calcolo costante MF local dMF = 1 local dSC = 1 if dTotLayerArea > 1 then - -- dMF = dTotLayerLength * dStrand / dTotLayerArea * 100 dMF = dTotLayerLength * dStrandMean / dTotLayerArea * 100 dSC = dStrandCount else @@ -216,9 +177,9 @@ function RunMachParamFromSWCalc.Exec() local dTMin = ( MATERIAL.K_LAYERTIME / 100.0) * ( dMF + MATERIAL.AMin) / MATERIAL.BMin * pow( 0.25 * dStrandMean, MATERIAL.KW) * pow( dSliceStep, MATERIAL.KZ) * pow( dSC, MATERIAL.KN) local dTTrg = ( MATERIAL.K_LAYERTIME / 100.0) * ( dMF + MATERIAL.ATrg) / MATERIAL.BTrg * pow( 0.25 * dStrandMean, MATERIAL.KW) * pow( dSliceStep, MATERIAL.KZ) * pow( dSC, MATERIAL.KN) local dTMax = ( MATERIAL.K_LAYERTIME / 100.0) * ( dMF + MATERIAL.AMax) / MATERIAL.BMax * pow( 0.25 * dStrandMean, MATERIAL.KW) * pow( dSliceStep, MATERIAL.KZ) * pow( dSC, MATERIAL.KN) - local dFMin = dTotLayerLength / dTMax * 60 - local dFTrg = dTotLayerLength / dTTrg * 60 - local dFMax = dTotLayerLength / dTMin * 60 + local dFMin = dTotLayerLength / EgtIf( dTMax > 0.1, dTMax, 1) * 60 + local dFTrg = dTotLayerLength / EgtIf( dTTrg > 0.1, dTTrg, 1) * 60 + local dFMax = dTotLayerLength / EgtIf( dTMin > 0.1, dTMin, 1) * 60 local dLayerTime = dTTrg if dLayerFeed == 0 then dLayerFeed = dFTrg @@ -241,8 +202,10 @@ function RunMachParamFromSWCalc.Exec() dSpeed = dSMax end if not bSpeedOk then - dLayerFeed = ( MATERIAL.C1 * pow( ( dSpeed / (( MATERIAL.K_EXTRUSION / 100.0) * ( MACHINING.K / 100.0))), MATERIAL.C2)) * 1000 / ( ( dStrandMean - dSliceStep) * dSliceStep + pi * pow( dSliceStep / 2, 2)) - dLayerTime = dTotLayerLength / dLayerFeed * 60 + if dTotLayerLength > 0.1 then + dLayerFeed = ( MATERIAL.C1 * pow( ( dSpeed / (( MATERIAL.K_EXTRUSION / 100.0) * ( MACHINING.K / 100.0))), MATERIAL.C2)) * 1000 / ( ( dStrandMean - dSliceStep) * dSliceStep + pi * pow( dSliceStep / 2, 2)) + dLayerTime = dTotLayerLength / dLayerFeed * 60 + end dLayerWait = floor( dTMin + 0.5) - floor( dLayerTime + 0.5) end -- calcolo massa dello strato @@ -276,15 +239,11 @@ function RunMachParamFromSWCalc.Exec() EgtSetInfo( nLayerResultId, KEY_WAITING_TIME, dLayerWait) end -- scrivo valori in struttura dati - --local nLayerResultId = EgtGetFirstNameInGroup( nResultLayerId, nLayerIndex) EgtSetInfo( nLayerResultId, KEY_TMIN, dTMin) EgtSetInfo( nLayerResultId, KEY_TTRG, dTTrg) EgtSetInfo( nLayerResultId, KEY_TMAX, dTMax) EgtSetInfo( nLayerResultId, KEY_FTRG, dFTrg) EgtSetInfo( nLayerResultId, KEY_FMAX, dFeedMax) - -- EgtSetInfo( nLayerResultId, KEY_FMIN, dFMin) - -- EgtSetInfo( nLayerResultId, KEY_FTRG, dFTrg) - -- EgtSetInfo( nLayerResultId, KEY_FMAX, dFMax) EgtSetInfo( nLayerResultId, KEY_TCUR, dLayerTime) EgtSetInfo( nLayerResultId, KEY_FCUR, dLayerFeed) EgtSetInfo( nLayerResultId, KEY_LENGTH, dTotLayerLength) @@ -296,11 +255,12 @@ function RunMachParamFromSWCalc.Exec() EgtEmptyGroup( nResultLayerId) return end - + -- passo al layer successivo nLayerIndex = nLayerIndex + 1 nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) or EgtGetFirstNameInGroup( nPartId, "__" .. SLICE_LAYER .. nLayerIndex) end if nMaxIndex < nLayerIndex then nMaxIndex = nLayerIndex end + -- passo al pezzo successivo nPartId = EgtGetNextPart( nPartId) ::continue:: end