diff --git a/LuaLibs/AddManData.lua b/LuaLibs/AddManData.lua index 2548281..1838197 100644 --- a/LuaLibs/AddManData.lua +++ b/LuaLibs/AddManData.lua @@ -208,5 +208,19 @@ RIBS_CRV = "Rib" SHELL_NBR_GRP = "ShellNbrRegions" SHELL_NBR_CRV = "ShellNbrRegion" +--------------------------------------------------------------------- +-- parametri calcolo tempi, F ed S +LAY_TFSCALC = "TFSCalc" +KEY_TMIN = "TMin" +KEY_TTRG = "TTrg" +KEY_TMAX = "TMax" +KEY_FMIN = "FMin" +KEY_FTRG = "FTrg" +KEY_FMAX = "FMax" +KEY_TCUR = "TCur" +KEY_FCUR = "FCur" +KEY_LENGTH = "Length" +KEY_SLICEID = "SliceId" + --------------------------------------------------------------------- return AddManData diff --git a/LuaLibs/CalcMachParamFromSW.lua b/LuaLibs/CalcMachParamFromSW.lua new file mode 100644 index 0000000..d0b160a --- /dev/null +++ b/LuaLibs/CalcMachParamFromSW.lua @@ -0,0 +1,144 @@ +-- CalcMachParam.lua by Egaltech s.r.l. 2022/08/07 +-- Calcolo dei parametri di stampa + +-- Intestazioni +require( 'EgtBase') +_ENV = EgtProtectGlobal() +EgtEnableDebug( false) + +EgtOutLog( ' CalcMachParam started', 1) + +--local MATERIAL = {} +--MATERIAL.Name = 'AKROMIDĀ® B3 ICF 40' +--MATERIAL.K = 0.1 +--MATERIAL.C1 = 0.8742 +--MATERIAL.C2 = 0.8964 +--MATERIAL.Density = 1.31 +--MATERIAL.AMax = 48.33 +--MATERIAL.ATrg = 49.9 +--MATERIAL.AMin = 116.4 +--MATERIAL.BMax = 1.667 +--MATERIAL.BTrg = 2.2 +--MATERIAL.BMin = 7.273 +--MATERIAL.KW = 0.4 +--MATERIAL.KZ = 0.9 +--MATERIAL.KN = 0.3 + +-- layer dei risultati +local nResultLayerId = EgtGetFirstNameInGroup( GDB_ID.ROOT, LAY_TFSCALC) +if not nResultLayerId then + nResultLayerId = EgtGroup( GDB_ID.ROOT) + EgtSetName( nResultLayerId, LAY_TFSCALC) +end +-- massimo indice di layer calcolato +local nMaxIndex = 0 +-- ciclo sui pezzi +local nPartId = EgtGetFirstPart() +while nPartId do + if not EgtGetInfo( nPartId, KEY_PART_ON_TABLE, 'b') then + nPartId = EgtGetNextPart( nPartId) + goto continue + end + -- recupero i parametri di lavorazione del pezzo + local dSliceStep = EgtGetInfo( nPartId, KEY_SLICE_STEP, 'd') + local dStrand = EgtGetInfo( nPartId, KEY_STRAND, 'd') + local dStrandCount = EgtGetInfo( nPartId, KEY_SHELLS_NBR, 'd') + -- ciclo sui layer + local nLayerIndex = 1 + local nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + while nLayerId do + local sLayerName = EgtGetName( nLayerId) + local nLayerIndex = tonumber( sLayerName:sub( #SLICE_LAYER + 1)) + -- rimuovo eventuale info precedente del tempo di attesa + EgtRemoveInfo( nLayerId, KEY_WAITING_TIME) + -- calcolo lunghezza totale del layer + local dTotLayerLength = 0 + local dTotLayerArea = 0 + local nCrvId = EgtGetFirstGroupInGroup( nLayerId) + while nCrvId do + local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) + -- sommo lunghezze percorsi + local dTotCrvLength = 0 + nShellId = EgtGetFirstInGroup( nToolPathId) + while nShellId do + dTotCrvLength = dTotCrvLength + EgtCurveLength( nShellId) + nShellId = EgtGetNext( nShellId) + end + dTotLayerLength = dTotLayerLength + dTotCrvLength + -- recupero area + local nOuterCrvId = EgtGetFirstNameInGroup( nCrvId, OUTER_CRV) + 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 + nCrvId = EgtGetNext( nCrvId) + end + -- recupero feed del layer + local dLayerFeed = 0 + local nLayerResultId = EgtGetFirstNameInGroup( nResultLayerId, nLayerIndex) + if nLayerResultId then + dLayerFeed = EgtGetInfo( nLayerResultId, KEY_FCUR, 'd') or 0 + else + nLayerResultId = EgtGroup( nResultLayerId) + EgtSetName( nLayerResultId, nLayerIndex) + end + -- riporto riferimento a layer del solido in layer del calcolo + local nOrigLayers = EgtGetInfo( nLayerResultId, KEY_SLICEID, 'vi') or {} + local bFound = false + for nIndex = 1, #nOrigLayers do + if nOrigLayers[nIndex] == nLayerId then + bFound = true + end + end + if not bFound then + table.insert( nOrigLayers, nLayerId) + end + EgtSetInfo( nLayerResultId, KEY_SLICEID, nOrigLayers) + -- calcolo costante MF + local dMF = dTotLayerLength * dStrand / dTotLayerArea * 100 + -- calcolo tempi stimati del layer + local dTMin = ( dMF + MATERIAL.AMin) / MATERIAL.BMin * pow( 0.25 * dStrand, MATERIAL.KW) * pow( dSliceStep, MATERIAL.KZ) * pow( dStrandCount, MATERIAL.KN) + local dTTrg = ( dMF + MATERIAL.ATrg) / MATERIAL.BTrg * pow( 0.25 * dStrand, MATERIAL.KW) * pow( dSliceStep, MATERIAL.KZ) * pow( dStrandCount, MATERIAL.KN) + local dTMax = ( dMF + MATERIAL.AMax) / MATERIAL.BMax * pow( 0.25 * dStrand, MATERIAL.KW) * pow( dSliceStep, MATERIAL.KZ) * pow( dStrandCount, MATERIAL.KN) + local dFMin = dTotLayerLength / dTMin * 60 + local dFTrg = dTotLayerLength / dTTrg * 60 + local dFMax = dTotLayerLength / dTMax * 60 + local dLayerTime = dTTrg + if dLayerFeed == 0 then + dLayerFeed = dFTrg + else + dLayerTime = dTotLayerLength / dLayerFeed * 60 + end + -- calcolo la portata + local Vf = dLayerFeed * ( ( dStrand - dSliceStep) * dSliceStep + pi * pow( dSliceStep / 2, 2)) / 1000 + -- calcolo speed + local dSpeed = ( 1 + MATERIAL.K ) * pow( Vf / MATERIAL.C1, 1 / MATERIAL.C2) + -- scrivo info feed e speed in group toolpath + nCrvId = EgtGetFirstNameInGroup( nLayerId, CONTOUR_GRP .. '*') + while nCrvId do + local nToolPathId = EgtGetFirstNameInGroup( nCrvId, TOOLPATH_GRP) + EgtSetInfo( nToolPathId, KEY_FEED, dLayerFeed) + EgtSetInfo( nToolPathId, KEY_SPEED, dSpeed) + nCrvId = EgtGetNextName( nCrvId, CONTOUR_GRP .. '*') + 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_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) + EgtSetInfo( nLayerResultId, KEY_SPEED, dSpeed) + nLayerIndex = nLayerIndex + 1 + nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) + end + if nMaxIndex < nLayerIndex then nMaxIndex = nLayerIndex end + nPartId = EgtGetNextPart( nPartId) + ::continue:: +end diff --git a/LuaLibs/RunMachiningParamCalc.lua b/LuaLibs/RunMachiningParamCalc.lua index 1fbc9ca..f73bf5e 100644 --- a/LuaLibs/RunMachiningParamCalc.lua +++ b/LuaLibs/RunMachiningParamCalc.lua @@ -37,9 +37,12 @@ function RunMachiningParamCalc.Exec() local CSVNewResult = {} -- ciclo sui pezzi - local nPartIndex = 1 - local nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + local nPartId = EgtGetFirstPart() while nPartId do + if not EgtGetInfo( nPartId, KEY_PART_ON_TABLE, 'b') then + nPartId = EgtGetNextPart( nPartId) + goto continue + end -- recupero i parametri di lavorazione del pezzo local dMachiningFeed = EgtGetInfo( nPartId, KEY_FEED, 'd') local dSliceStep = EgtGetInfo( nPartId, KEY_SLICE_STEP, 'd') @@ -148,8 +151,8 @@ function RunMachiningParamCalc.Exec() nLayerIndex = nLayerIndex + 1 nLayerId = EgtGetFirstNameInGroup( nPartId, SLICE_LAYER .. nLayerIndex) end - nPartIndex = nPartIndex + 1 - nPartId = EgtGetFirstNameInGroup( GDB_ID.ROOT, PART .. nPartIndex) + nPartId = EgtGetNextPart( nPartId) + ::continue:: end -- aggiorno palette diff --git a/LuaLibs/RunSlicing.lua b/LuaLibs/RunSlicing.lua index 334551f..4c672ba 100644 --- a/LuaLibs/RunSlicing.lua +++ b/LuaLibs/RunSlicing.lua @@ -4,6 +4,8 @@ -- Tabella per definizione modulo local RunSlicing = {} +--PRINT.PROGRAM = 1 + -- Intestazioni require( 'EgtBase') @@ -118,7 +120,7 @@ local function LoadParams( sFile, nPartId) SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_LEAD_OUT_LEN, '0.0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_LEAD_OUT_COASTING, '0.0') SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_LEAD_OUT_WIPE, '0.0') - SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_LEAD_OUT_WIPE_DIR, '0.0') + SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_RIBS_LEAD_OUT_WIPE_DIR, '0.0') -- parametri per regioni con diverso numero di passate SetParamInfo( sFile, nPartId, SEC_DEFAULT, KEY_SHELL_NBR_DIFF, '0') @@ -206,20 +208,23 @@ function RunSlicing.Exec() local nShellNbrLay = EgtGetFirstNameInGroup( nPartId, LAY_SHELL_NBR) local nStartLayId = EgtGetFirstNameInGroup( nPartId, LAY_MACH_START) - -- Scelta del file dei parametri - local sPrevParamFile = EgtGetInfo( nPartId, KEY_PARAMS) - if not sPrevParamFile or not EgtExistsFile( sPrevParamFile) then - local sLastParamFile = EgtGetStringFromIni( '3dPrinting', 'ParamFile', '', EgtGetIniFile()) - local sDir = EgtSplitPath( sLastParamFile) - sPrevParamFile = sDir..'*.ini' + local sParamFile + if not PRINT or PRINT.PROGRAM ~= 1 then + --Scelta del file dei parametri + local sPrevParamFile = EgtGetInfo( nPartId, KEY_PARAMS) + if not sPrevParamFile or not EgtExistsFile( sPrevParamFile) then + local sLastParamFile = EgtGetStringFromIni( '3dPrinting', 'ParamFile', '', EgtGetIniFile()) + local sDir = EgtSplitPath( sLastParamFile) + sPrevParamFile = sDir..'*.ini' + end + sParamFile = EgtFileDialog( true, sPrevParamFile, 'Param Files (*.ini)|*.ini||') + if not sParamFile then + EgtOutBox( 'No param file selected', 'Warning', 'WARNING') + return + end + EgtWriteStringToIni( '3dPrinting', 'ParamFile', sParamFile, EgtGetIniFile()) end - local sParamFile = EgtFileDialog( true, sPrevParamFile, 'Param Files (*.ini)|*.ini||') - if not sParamFile then - EgtOutBox( 'No param file selected', 'Warning', 'WARNING') - return - end - EgtWriteStringToIni( '3dPrinting', 'ParamFile', sParamFile, EgtGetIniFile()) - + -- Elimino eventuale precedente file dei risultati local sResultFile = EgtChangePathExtension( sCurrProjectPath, '.csv') EgtEraseFile( sResultFile) @@ -230,8 +235,9 @@ function RunSlicing.Exec() EgtResetCurrMachGroup() -- Lettura dei parametri - LoadParams( sParamFile, nPartId) - + if not PRINT or PRINT.PROGRAM ~= 1 then + LoadParams( sParamFile, nPartId) + end -- Lettura dati macchina local sMachIni = EgtGetCurrMachineDir() .. '\\' .. EgtGetCurrMachineName() .. '.ini' local HMax = tonumber( EgtGetStringFromIni( '3dPrinting', 'HMax', 500, sMachIni))