DataBeam :

- aggiunta gestione extracorse in simulazione cieca
- aggiunta configurazione per lista lavorazioni
- migliorata gestione lughezza minima barre in Process
- migliorie varie.
This commit is contained in:
Dario Sassi
2019-07-24 17:34:48 +00:00
parent 35782ae142
commit 7e3c951901
9 changed files with 112 additions and 115 deletions
+9 -2
View File
@@ -1,8 +1,9 @@
-- BatchProcess.lua by Egaltech s.r.l. 2019/07/19
-- BatchProcess.lua by Egaltech s.r.l. 2019/07/24
-- Gestione calcolo batch disposizione e lavorazioni per Travi
-- 2019/07/11 Aggiunta gestione stato rotazione di feature per TS3.
-- 2019/07/16 Aggiunta gestione modalità oltre 10 per impostazione macchina e uscita.
-- 2019/07/19 Aggiunta gestione collisioni.
-- 2019/07/24 Aggiunta gestione extra-corse.
-- Intestazioni
require( 'EgtBase')
@@ -303,7 +304,13 @@ if BEAM.FLAG == 3 and bVerifyCollision then
local bSimOk, nErr, sErr = EgtSimulate()
if not bSimOk then
BEAM.ERR = 22
BEAM.MSG = 'Head-Part Collision'
if nErr == MCH_SHE.OUTSTROKE then
BEAM.MSG = 'Axis outstroke ' .. sErr
elseif nErr == MCH_SHE.COLLISION then
BEAM.MSG = 'Head-part collision'
else
BEAM.MSG = 'General failure (contact supplier)'
end
BEAM.ROT = 0
BEAM.CUTID = 0
BEAM.TASKID = 0
+4 -3
View File
@@ -8,6 +8,7 @@ Button3=Swap.lua,Images\Swap.png,Scambia estremi trave
Button4=Rotate.lua,Images\Rotate.png,Ruota trave
Button5=DisableFeatures.lua,Images\DisableFeatures.png,Disabilita lavorazioni
Button6=EnableFeatures.lua,Images\EnableFeatures.png,Abilita lavorazioni
Button7=HideAll.lua,Images\HideAll.png,Nascondi tutte le travi non selezionate
Button8=ShowAll.lua,Images\ShowAll.png,Visualizza tutte le travi
Button9=ShowBuilding.lua,Images\ShowBuilding.png,Visualizza struttura/Visualizza pezzi
Button7=BeamMachinings,Images\BeamMachinings.png,Lista lavorazioni
Button8=HideAll.lua,Images\HideAll.png,Nascondi tutte le travi non selezionate
Button9=ShowAll.lua,Images\ShowAll.png,Visualizza tutte le travi
Button10=ShowBuilding.lua,Images\ShowBuilding.png,Visualizza struttura/Visualizza pezzi
Binary file not shown.

After

Width:  |  Height:  |  Size: 434 B

+27 -16
View File
@@ -84,15 +84,9 @@ EgtOutLog( ' BeamExec started', 1)
-- *** Inserimento delle travi nel grezzo ***
-------------------------------------------------------------------------------------------------------------
function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam)
-- Determinazione minimo grezzo scaricabile
if dRawW * dRawH > 40000 then
BD.MinRaw = BD.MINRAW_L
elseif dRawW * dRawH > 14500 then
BD.MinRaw = BD.MINRAW_M
else
BD.MinRaw = BD.MINRAW_S
end
BeamExec.CalcMinUnloadableRaw( dRawW, dRawH)
-- Creazione nuovo gruppo di lavoro
local sMgName = EgtGetMachGroupNewName( 'Mach_1')
@@ -130,17 +124,17 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam)
local PartLen = b3Solid:getDimX()
local PartWidth = b3Solid:getDimY()
local PartHeight = b3Solid:getDimZ()
local NextLen = Len - DeltaS - DeltaE - PartLen
local NextLen = Len - DeltaS - PartLen - DeltaE
if (( abs( PartWidth - dRawW) < 10 * GEO.EPS_SMALL and abs( PartHeight - dRawH) < 10 * GEO.EPS_SMALL) or
( abs( PartHeight - dRawW) < 10 * GEO.EPS_SMALL and abs( PartWidth - dRawH) < 10 * GEO.EPS_SMALL)) and
NextLen >= 0 then
NextLen + DeltaE >= 0 then
-- eventuale sovramateriale di testa
if vBeam[i].PosX then
DeltaS = max( vBeam[i].PosX - ( dRawL - Len), 0)
end
-- dimensioni del grezzo
local CrawLen = PartLen + DeltaS + DeltaE
local Delta = DeltaE
local CrawLen = min( PartLen + DeltaS + DeltaE, Len)
local Delta = CrawLen - PartLen - DeltaS
-- creo e posiziono il grezzo
local nRaw = EgtAddRawPart( Point3d(0,0,0), CrawLen, dRawW, dRawH, BD.RAWCOL)
EgtMoveToCornerRawPart( nRaw, BD.OriTR, MCH_CR.TR)
@@ -177,7 +171,7 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam)
Len = Len - CrawLen
end
-- se rimasto troppo poco grezzo, esco
if Len < BD.MinRaw then break end
--if Len < BD.MinRaw then break end
DeltaS = 0
end
@@ -194,6 +188,19 @@ function BeamExec.ProcessBeams( dRawW, dRawH, dRawL, dOvmHead, vBeam)
return true
end
-------------------------------------------------------------------------------------------------------------
function BeamExec.CalcMinUnloadableRaw( dRawW, dRawH)
-- Determinazione minimo grezzo scaricabile
if dRawW * dRawH > 40000 then
BD.MinRaw = BD.MINRAW_L
elseif dRawW * dRawH > 14500 then
BD.MinRaw = BD.MINRAW_M
else
BD.MinRaw = BD.MINRAW_S
end
end
-------------------------------------------------------------------------------------------------------------
-- *** Inserimento delle lavorazioni nelle travi ***
-------------------------------------------------------------------------------------------------------------
@@ -377,10 +384,14 @@ local function OrderFeatures( vProc, b3Raw)
B1.Box:getMin():getX() < B2.Box:getMax():getX() + 100 * GEO.EPS_SMALL and B2.Box:getMin():getX() < B1.Box:getMax():getX() + 100 * GEO.EPS_SMALL then
return ( B1.Prc == 50 and B2.Prc == 52)
end
-- confronto standard
if abs( B1.Box:getCenter():getX() - B2.Box:getCenter():getX()) > 100.0 then
-- se uno di testa e non l'altro, privilegio questo
if B1.Head ~= B2.Head then
return B1.Head
end
-- confronto standard per feature che non si sovrappongono in X
if abs( B1.Box:getCenter():getX() - B2.Box:getCenter():getX()) > 0.5 * ( B1.Box:getDimX() + B2.Box:getDimX()) then
return B1.Box:getCenter():getX() > B2.Box:getCenter():getX()
elseif abs( B1.Box:getCenter():getY() - B2.Box:getCenter():getY()) > 100.0 then
elseif abs( B1.Box:getCenter():getY() - B2.Box:getCenter():getY()) > 0.5 * ( B1.Box:getDimY() + B2.Box:getDimY()) then
return B1.Box:getCenter():getY() > B2.Box:getCenter():getY()
else
return B1.Box:getCenter():getZ() > B2.Box:getCenter():getZ()
+5 -3
View File
@@ -1,4 +1,4 @@
-- BeamLib.lua by Egaltech s.r.l. 2019/05/27
-- BeamLib.lua by Egaltech s.r.l. 2019/07/24
-- Libreria globale per Travi
-- Tabella per definizione modulo
@@ -423,7 +423,8 @@ function BeamLib.CalcLeadInOutGeom( ptP1, ptP2, vtV1, vtV2, vtN, dRad, vtRef, dC
vtV1 = vtV1 - vtV1 * vtN * vtN ; vtV1:normalize()
vtV2 = vtV2 - vtV2 * vtN * vtN ; vtV2:normalize()
-- Versore tangente al taglio
local vtTg = ptP2 - ptP1 ; vtTg:normalize()
local vtTg = ptP2 - ptP1 ;
vtTg = vtTg - vtTg * vtN * vtN ; vtTg:normalize()
-- Sistema di riferimento intrinseco al taglio
local vtX = vtTg ^ vtN
local frFace = Frame3d( ptP1, vtX, vtTg, vtN)
@@ -520,7 +521,8 @@ end
---------------------------------------------------------------------
function BeamLib.CalcLeadInOutTangGeom( ptP1, ptP2, vtN, dRad, vtRef, dCutExtra, b3Box)
-- Versore tangente al taglio
local vtTg = ptP2 - ptP1 ; vtTg:normalize()
local vtTg = ptP2 - ptP1 ;
vtTg = vtTg - vtTg * vtN * vtN ; vtTg:normalize()
-- Sistema di riferimento intrinseco al taglio
local vtX = vtTg ^ vtN
local frFace = Frame3d( ptP1, vtX, vtTg, vtN)
+1 -1
View File
@@ -113,7 +113,7 @@ function ProcessDoubleCut.Make( Proc, nPhase, nRawId, nPartId, dOvmHead)
if not bOk then return bOk, sErr end
end
-- creo piano di taglio coincidente con la seconda faccia e lo lavoro
local AddId = EgtSurfTmPlaneInBBox( EgtGetParent( Proc.Id), ptC[2], vtN[2], b3Solid, GDB_RT.GLOB)
AddId = EgtSurfTmPlaneInBBox( EgtGetParent( Proc.Id), ptC[2], vtN[2], b3Solid, GDB_RT.GLOB)
if AddId then
EgtRelocate( AddId, nAddGrpId)
EgtSetName( AddId, 'AddCut_' .. tostring( Proc.Id))
+1 -4
View File
@@ -1,4 +1,4 @@
-- ProcessDrill.lua by Egaltech s.r.l. 2019/07/19
-- ProcessDrill.lua by Egaltech s.r.l. 2019/07/24
-- Gestione calcolo forature per Travi
-- Tabella per definizione modulo
@@ -147,9 +147,6 @@ function ProcessDrill.Make( Proc, nPhase, nRawId, nPartId)
dMaxDepth = EgtTdbGetCurrToolMaxDepth() or dMaxDepth
end
end
if nType == 'Pocket' then
dMaxDepth = dMaxDepth - 4
end
-- se foro intermedio e inclinato, limito il massimo affondamento
if not ( Proc.Fcs == 5 or Proc.Fcs == 6) then
local CosB = abs( vtExtr:getX())
+57 -81
View File
@@ -1,4 +1,4 @@
-- ProcessLongCut.lua by Egaltech s.r.l. 2019/02/15
-- ProcessLongCut.lua by Egaltech s.r.l. 2019/07/22
-- Gestione calcolo taglio longitudinale per Travi
-- Tabella per definizione modulo
@@ -83,62 +83,32 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId)
if ( bLimXmin and vtN:getY() > 0) or ( bLimXmax and vtN:getY()< 0) then
dEndDist = dToolDiam / 2
end
-- se va fatta in 3 o più parti
-- determino numero di parti
local nC = ceil( ( dLen - 2 * BD.LONGCUT_ENDLEN) / BD.LONGCUT_MAXLEN)
local dC = ( dLen - 2 * BD.LONGCUT_ENDLEN) / nC
local dAccDist = BD.LONGCUT_ENDLEN
if nC > 0 then
local dC = ( dLen - 2 * BD.LONGCUT_ENDLEN) / nC
nC = nC + 2
-- si percorre il lato basso della faccia
local nM = 0
for i = 1, nC do
-- ciclo sulle passate
local nO = 1
local dStep = 0
if dWidth + 2 * BD.CUT_EXTRA > dToolDiam then
nO = ceil(( dWidth + 2 * BD.CUT_EXTRA) / dToolDiam)
if nO > 1 then
dStep = ( dWidth + 2 * BD.CUT_EXTRA - dToolDiam) / ( nO - 1)
end
end
for k = nO, 1, -1 do
-- inserisco le parti di lavorazione
nM = nM + 1
local sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM)
local nMchFId = EgtAddMachining( sNameF, sMilling)
if not nMchFId then
local sErr = 'Error adding machining ' .. sNameF .. '-' .. sMilling
EgtOutLog( sErr)
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, 0}})
-- limito opportunamente la lavorazione
local dSal = EgtIf( i == 1, -dStartDist, - BD.LONGCUT_ENDLEN - ( i - 2) * dC)
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal)
local dEal = EgtIf( i == nC, -dEndDist, - BD.LONGCUT_ENDLEN - ( nC - i - 1) * dC)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal)
-- imposto offset radiale (nullo se concavo)
if k >1 then
EgtSetMachiningParam( MCH_MP.OFFSR, ( k - 1) * dStep)
else
EgtSetMachiningParam( MCH_MP.OFFSR, - BD.CUT_EXTRA)
end
-- eseguo
if not EgtApplyMachining( true, false) then
local _, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nMchFId, false)
return false, sErr
end
end
end
-- altrimenti una o due parti
else
nC = EgtIf( dLen > BD.LONGCUT_ENDLEN, 2, 1)
local dAccDist = EgtIf( nC == 2, dLen / 2, 0)
-- si percorre il lato basso della faccia
for i = 1, nC do
dAccDist = EgtIf( nC == 2, dLen / 2, 0)
end
-- si percorre il lato basso della faccia
local nM = 0
for i = 1, nC do
-- ciclo sulle passate
local nO = 1
local dStep = 0
if dWidth + 2 * BD.CUT_EXTRA > dToolDiam then
nO = ceil(( dWidth + 2 * BD.CUT_EXTRA) / dToolDiam)
if nO > 1 then
dStep = ( dWidth + 2 * BD.CUT_EXTRA - dToolDiam) / ( nO - 1)
end
end
for k = nO, 1, -1 do
-- inserisco le parti di lavorazione
local sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id))
nM = nM + 1
local sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( nM)
local nMchFId = EgtAddMachining( sNameF, sMilling)
if not nMchFId then
local sErr = 'Error adding machining ' .. sNameF .. '-' .. sMilling
@@ -148,39 +118,16 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId)
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, 0}})
-- limito opportunamente la lavorazione
local dSal = EgtIf( i == 1, -dStartDist, - dAccDist)
local dSal = EgtIf( i == 1, -dStartDist, - dAccDist - ( i - 2) * dC)
EgtSetMachiningParam( MCH_MP.STARTADDLEN, dSal)
local dEal = EgtIf( i == nC, -dEndDist, - dAccDist)
local dEal = EgtIf( i == nC, -dEndDist, - dAccDist - ( nC - i - 1) * dC)
EgtSetMachiningParam( MCH_MP.ENDADDLEN, dEal)
-- eseguo
if not EgtApplyMachining( true, false) then
local _, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nMchFId, false)
return false, sErr
-- imposto offset radiale (nullo se concavo)
if k >1 then
EgtSetMachiningParam( MCH_MP.OFFSR, ( k - 1) * dStep)
else
EgtSetMachiningParam( MCH_MP.OFFSR, - BD.CUT_EXTRA)
end
end
-- se ci sono le facce limitanti
for i = 1, Proc.Fct - 1 do
-- inserisco la lavorazione
local sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i)
local nMchFId = EgtAddMachining( sNameF, sMilling)
if not nMchFId then
local sErr = 'Error adding machining ' .. sNameF .. '-' .. sMilling
EgtOutLog( sErr)
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, i}})
-- lato di lavoro e inversione
EgtSetMachiningParam( MCH_MP.INVERT, true)
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
-- uso della faccia
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_DOWN)
-- attacco e uscita
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + 30)
EgtSetMachiningParam( MCH_MP.LOPERP, 0)
EgtSetMachiningParam( MCH_MP.LOTANG, dToolDiam / 2 + 30)
-- eseguo
if not EgtApplyMachining( true, false) then
local _, sErr = EgtGetLastMachMgrError()
@@ -189,6 +136,35 @@ function ProcessLongCut.Make( Proc, nPhase, nRawId, nPartId)
end
end
end
-- se ci sono le facce limitanti
for i = 1, Proc.Fct - 1 do
-- inserisco la lavorazione
local sNameF = 'L2C_' .. ( EgtGetName( Proc.Id) or tostring( Proc.Id)) .. '_' .. tostring( i)
local nMchFId = EgtAddMachining( sNameF, sMilling)
if not nMchFId then
local sErr = 'Error adding machining ' .. sNameF .. '-' .. sMilling
EgtOutLog( sErr)
return false, sErr
end
-- aggiungo geometria
EgtSetMachiningGeometry( {{ Proc.Id, i}})
-- lato di lavoro e inversione
EgtSetMachiningParam( MCH_MP.INVERT, true)
EgtSetMachiningParam( MCH_MP.WORKSIDE, MCH_MILL_WS.LEFT)
-- uso della faccia
EgtSetMachiningParam( MCH_MP.FACEUSE, MCH_MILL_FU.PARAL_DOWN)
-- attacco e uscita
EgtSetMachiningParam( MCH_MP.LIPERP, 0)
EgtSetMachiningParam( MCH_MP.LITANG, dToolDiam / 2 + 30)
EgtSetMachiningParam( MCH_MP.LOPERP, 0)
EgtSetMachiningParam( MCH_MP.LOTANG, dToolDiam / 2 + 30)
-- eseguo
if not EgtApplyMachining( true, false) then
local _, sErr = EgtGetLastMachMgrError()
EgtSetOperationMode( nMchFId, false)
return false, sErr
end
end
return true
end
+8 -5
View File
@@ -127,12 +127,17 @@ end
-- *** Inserimento delle travi nel grezzo ***
-------------------------------------------------------------------------------------------------------------
local function MyProcessBeams()
-- Determinazione minimo grezzo scaricabile
BE.CalcMinUnloadableRaw( dRawW, dRawH)
-- Lunghezza totale delle travi
local dTotLen = 0
for i = 1, #vBeam do
for i = 1, #vBeam - 1 do
dTotLen = dTotLen + vBeam[i].Box:getDimX()
end
local dAddLen = BD.OVM_HEAD + #vBeam * BD.OVM_MID
dTotLen = dTotLen + max( vBeam[#vBeam].Box:getDimX(), BD.MinRaw)
local dAddLen = BD.OVM_HEAD + ( #vBeam - 1) * BD.OVM_MID
EgtOutLog( 'Ltot : ' .. EgtNumToString( dTotLen, 1) .. ' Lagg : '.. EgtNumToString( dAddLen, 1), 1)
-- Richiedo lunghezza del grezzo e sovramateriale di testa
@@ -201,9 +206,7 @@ local function MyProcessFeatures()
local nWarnCnt = 0
local sOutput = ''
for i = 1, #Stats do
if Stats[i].Err == 0 then
sOutput = sOutput .. string.format( 'Cut=%d Tsk=%d Ok\n', Stats[i].CutId, Stats[i].TaskId)
elseif Stats[i].Err > 0 then
if Stats[i].Err > 0 then
nErrCnt = nErrCnt + 1
sOutput = sOutput .. string.format( 'Cut=%d Tsk=%d %s\n', Stats[i].CutId, Stats[i].TaskId, Stats[i].Msg)
elseif Stats[i].Err < 0 then