|
|
|
@@ -148,6 +148,30 @@ function OnSimulStart()
|
|
|
|
|
end
|
|
|
|
|
-- Preparo lista collisioni vuota
|
|
|
|
|
EMT.COLLIDE = {}
|
|
|
|
|
|
|
|
|
|
-- si crea gruppo temporaneo appoggio controllo clamping
|
|
|
|
|
CLAMP_CHECK_GROUP = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_CHECK')
|
|
|
|
|
CLAMP_CHECK_INTERS = EgtGetFirstNameInGroup( GDB_ID.ROOT, 'CLAMP_INTERS')
|
|
|
|
|
|
|
|
|
|
if CLAMP_CHECK_GROUP then
|
|
|
|
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
|
|
|
|
else
|
|
|
|
|
local frClampCheckGroup = Frame3d( ORIG(), GDB_FR.FRONT)
|
|
|
|
|
CLAMP_CHECK_GROUP = EgtGroup( GDB_ID.ROOT, frClampCheckGroup)
|
|
|
|
|
EgtSetName( CLAMP_CHECK_GROUP, 'CLAMP_CHECK')
|
|
|
|
|
EgtSetLevel( CLAMP_CHECK_GROUP, GDB_LV.TEMP)
|
|
|
|
|
EgtSetStatus( CLAMP_CHECK_GROUP, GDB_ST.OFF)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if CLAMP_CHECK_INTERS then
|
|
|
|
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
|
|
|
|
else
|
|
|
|
|
CLAMP_CHECK_INTERS = EgtGroup( GDB_ID.ROOT)
|
|
|
|
|
EgtSetName( CLAMP_CHECK_INTERS, 'CLAMP_INTERS')
|
|
|
|
|
EgtSetLevel( CLAMP_CHECK_INTERS, GDB_LV.TEMP)
|
|
|
|
|
EgtSetStatus( CLAMP_CHECK_INTERS, GDB_ST.OFF)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
@@ -296,18 +320,24 @@ function OnSimulDispositionStart()
|
|
|
|
|
local nOrd = GetPhaseOrd( EMT.PHASE)
|
|
|
|
|
local nScrapOrd = GetPhaseOrd( EgtGetPhaseCount()) + 1
|
|
|
|
|
local b3Raw = BBox3d()
|
|
|
|
|
local b3Bar = BBox3d()
|
|
|
|
|
local b3Part = BBox3d()
|
|
|
|
|
local nPartRawId, nScrapRawId
|
|
|
|
|
local nRawId = EgtGetFirstRawPart()
|
|
|
|
|
while nRawId do
|
|
|
|
|
local nNextRawId = EgtGetNextRawPart( nRawId)
|
|
|
|
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
|
|
|
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
|
|
|
|
local b3Tmp = EgtGetRawPartBBox( nRawId)
|
|
|
|
|
b3Bar:Add( b3Tmp)
|
|
|
|
|
local nRawOrd = EgtGetInfo( nRawId, 'ORD', 'i')
|
|
|
|
|
if nRawOrd == nOrd then
|
|
|
|
|
b3Raw = EgtGetRawPartBBox( nRawId)
|
|
|
|
|
--b3Raw = EgtGetRawPartBBox( nRawId)
|
|
|
|
|
b3Raw:Add( b3Tmp)
|
|
|
|
|
b3Part:Add( b3Tmp)
|
|
|
|
|
nPartRawId = nRawId
|
|
|
|
|
elseif nRawOrd == nOrd + 1 and nRawOrd == nScrapOrd then
|
|
|
|
|
local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
|
|
|
|
--local b3Tmp = EgtGetRawPartBBox( nRawId) or BBox3d()
|
|
|
|
|
b3Raw:Add( b3Tmp)
|
|
|
|
|
nScrapRawId = nRawId
|
|
|
|
|
end
|
|
|
|
@@ -321,6 +351,9 @@ function OnSimulDispositionStart()
|
|
|
|
|
else
|
|
|
|
|
EMT.SCRAP = nil
|
|
|
|
|
end
|
|
|
|
|
EMT.LB = b3Bar:getDimX()
|
|
|
|
|
EMT.LR = b3Raw:getDimX()
|
|
|
|
|
EMT.LT = b3Part:getDimX()
|
|
|
|
|
-- recupero CutId del pezzo in lavorazione
|
|
|
|
|
EMT.CUTID = EgtGetInfo( EgtGetFirstPartInRawPart( nPartRawId or GDB_ID.NULL) or GDB_ID.NULL, 'CUTID', 'i') or 0
|
|
|
|
|
EMT.YSPEC = nil
|
|
|
|
@@ -392,6 +425,7 @@ function OnSimulDispositionStart()
|
|
|
|
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
|
|
|
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
|
|
|
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
|
|
|
|
b3Bar = EgtGetRawPartBBox( nRawId)
|
|
|
|
|
else
|
|
|
|
|
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
|
|
|
|
EgtSetStatus( nRawId, GDB_ST.OFF)
|
|
|
|
@@ -399,6 +433,8 @@ function OnSimulDispositionStart()
|
|
|
|
|
end
|
|
|
|
|
nRawId = nNextRawId
|
|
|
|
|
end
|
|
|
|
|
EMT.LB = b3Bar:getDimX()
|
|
|
|
|
|
|
|
|
|
-- altrimenti fase finale, aggancio primo grezzo alla tavola e gli altri in posizione carico al carro Y
|
|
|
|
|
else
|
|
|
|
|
-- verifico posizione di carico
|
|
|
|
@@ -416,12 +452,14 @@ function OnSimulDispositionStart()
|
|
|
|
|
nRawId = EgtGetNextRawPart( nRawId)
|
|
|
|
|
end
|
|
|
|
|
-- eseguo
|
|
|
|
|
local b3Bar = BBox3d()
|
|
|
|
|
nRawId = EgtGetFirstRawPart()
|
|
|
|
|
while nRawId do
|
|
|
|
|
local nNextRawId = EgtGetNextRawPart( nRawId)
|
|
|
|
|
if EgtVerifyRawPartPhase( nRawId, EMT.PHASE) then
|
|
|
|
|
if EgtGetInfo( nRawId, 'ORD', 'i') == nOrd then
|
|
|
|
|
EmtLinkRawPartToGroup( nRawId, 'Tab')
|
|
|
|
|
b3Bar = EgtGetRawPartBBox( nRawId)
|
|
|
|
|
else
|
|
|
|
|
EgtMove( nRawId, vtMove, GDB_RT.GLOB)
|
|
|
|
|
EmtLinkRawPartToGroup( nRawId, 'Y')
|
|
|
|
@@ -429,6 +467,7 @@ function OnSimulDispositionStart()
|
|
|
|
|
end
|
|
|
|
|
nRawId = nNextRawId
|
|
|
|
|
end
|
|
|
|
|
EMT.LB = b3Bar:getDimX()
|
|
|
|
|
end
|
|
|
|
|
-- Indicazione angolo rotazione pezzo
|
|
|
|
|
EMT.ROT = EgtGetInfo( EMT.DISPID, 'ROT', 'i') or 0
|
|
|
|
@@ -460,6 +499,7 @@ function OnSimulDispositionEnd()
|
|
|
|
|
EMT.POSTROT = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
EMT.SPLIT = false
|
|
|
|
|
EMT.OPEISDISP = false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@@ -577,12 +617,12 @@ function OnSimulToolDeselect()
|
|
|
|
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
|
|
|
|
-- movimento scarico rinvio
|
|
|
|
|
elseif EMT.HEAD == 'H5' or EMT.HEAD == 'H6' then
|
|
|
|
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
|
|
|
|
SimulMoveAxes( 'B', 0, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
|
|
|
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
|
|
|
|
-- movimento scarico aggregato BlockHaus
|
|
|
|
|
elseif EMT.HEAD == 'H7' then
|
|
|
|
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
|
|
|
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
|
|
|
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
|
|
|
|
-- movimento scarico punta lunga su T111
|
|
|
|
|
elseif EMT.TOTLEN > LONG_TOOL_MINLEN then
|
|
|
|
|
-- se su cambio utensile T111
|
|
|
|
@@ -593,9 +633,9 @@ function OnSimulToolDeselect()
|
|
|
|
|
else
|
|
|
|
|
SimulMoveAxis( 'X', 0, MCH_SIM_STEP.RAPID)
|
|
|
|
|
if GetTCSet( EMT.TCPOS) == 1 then
|
|
|
|
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
|
|
|
|
SimulMoveAxes( 'B', 90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
|
|
|
|
else
|
|
|
|
|
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', -90, MCH_SIM_STEP.COLLROT)
|
|
|
|
|
SimulMoveAxes( 'B', -90, MCH_SIM_STEP.COLLROT, 'C', EgtIf( BD.RIGHT_LOAD, 90, -90), MCH_SIM_STEP.COLLROT)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- movimento scarico utensile di grosso diametro (su T111)
|
|
|
|
@@ -714,6 +754,7 @@ function OnSimulMachiningEnd()
|
|
|
|
|
EMT.UNLOADING = false
|
|
|
|
|
EMT.FALL = false
|
|
|
|
|
end
|
|
|
|
|
EMT.SPLIT = nil
|
|
|
|
|
EMT.PREVHEAD = EMT.HEAD
|
|
|
|
|
EMT.PREVTOOL = EMT.TOOL
|
|
|
|
|
EMT.PREVEXIT = EMT.EXIT
|
|
|
|
@@ -812,7 +853,8 @@ function OnSimulMoveStart()
|
|
|
|
|
EMT.MCHFIRST = false
|
|
|
|
|
local bZmax = ( EMT.TOOL ~= EMT.PREVTOOL or EMT.L3 > -1)
|
|
|
|
|
-- con pezzi alti aggiorno gli assi rotanti prima di muovermi sopra il pezzo
|
|
|
|
|
if not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HEAD == 'H3' or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
|
|
|
|
if not EMT.LOAD and EMT.MOVE == 0 and ( EMT.HEAD == 'H3' or ( bZmax and EMT.TOTLEN > 200)) and
|
|
|
|
|
( EMT.HT > BeamHeightForFixRot or ( EMT.HEAD == 'H1' and EMT.TOTLEN > 350) or bGoToHome) and EMT.FLAG2 == 1 then
|
|
|
|
|
-- se motosega mi muovo a X di sicurezza per ruotare, prima si raddrizza B e poi C in posizione
|
|
|
|
|
if EMT.HEAD == 'H3' or bGoToHome then
|
|
|
|
|
SimulMoveAxis( 'X', SafeXRotAxes, MCH_SIM_STEP.RAPID)
|
|
|
|
@@ -901,6 +943,8 @@ function ExecAuxCmd( sCmd)
|
|
|
|
|
if Cmd[1] == '0' then
|
|
|
|
|
if Cmd[2] == 'Unloading' then
|
|
|
|
|
EMT.UNLOADING = true
|
|
|
|
|
elseif Cmd[2] == 'Split' then
|
|
|
|
|
EMT.SPLIT = true
|
|
|
|
|
elseif Cmd[2] == 'Fall' then
|
|
|
|
|
EMT.FALL = true
|
|
|
|
|
end
|
|
|
|
@@ -942,19 +986,9 @@ function ExecAuxCmd( sCmd)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elseif Cmd[1] == '11' then
|
|
|
|
|
local dPY = MaxOpen
|
|
|
|
|
if Cmd[2] ~= '0' then
|
|
|
|
|
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
|
|
|
|
end
|
|
|
|
|
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
|
|
|
|
SetPYLight( Cmd[2] ~= '0')
|
|
|
|
|
ExecMovePY( Cmd[2] ~= '0')
|
|
|
|
|
elseif Cmd[1] == '12' then
|
|
|
|
|
local dPV = MaxOpen
|
|
|
|
|
if Cmd[2] ~= '0' then
|
|
|
|
|
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
|
|
|
|
end
|
|
|
|
|
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
|
|
|
|
SetPVLight( Cmd[2] ~= '0')
|
|
|
|
|
ExecMovePV( Cmd[2] ~= '0')
|
|
|
|
|
elseif Cmd[1] == '21' then
|
|
|
|
|
local nYDelta = tonumber( Cmd[2])
|
|
|
|
|
local nVDelta = tonumber( Cmd[3])
|
|
|
|
@@ -1063,6 +1097,181 @@ function ExecUnloading()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function CheckClamping( sClampName)
|
|
|
|
|
nIndexClamp = EgtGetAxisId( sClampName)
|
|
|
|
|
local idClampPath = EgtGetFirstInGroup( EgtGetFirstNameInGroup( nIndexClamp, 'CLAMP_CHECK') or GDB_ID.NULL)
|
|
|
|
|
local b3ClampingArea = EgtGetBBoxGlob( idClampPath or GDB_ID.NULL, GDB_BB.STANDARD)
|
|
|
|
|
-- se non trovo percorso area di clamping, esco subito
|
|
|
|
|
if not idClampPath or not EMT.VMILL or not ClampingCoeffMin then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
|
|
|
|
local idCurveList = {}
|
|
|
|
|
local vtIntersPlane
|
|
|
|
|
-- piano di interpolazione
|
|
|
|
|
if sIntersPlane == 'X' then
|
|
|
|
|
vtIntersPlane = X_AX()
|
|
|
|
|
elseif sIntersPlane == 'Y' then
|
|
|
|
|
vtIntersPlane = Y_AX()
|
|
|
|
|
elseif sIntersPlane == 'Z' then
|
|
|
|
|
vtIntersPlane = Z_AX()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for i = 1, #EMT.VMILL do
|
|
|
|
|
local b3VMill = EgtGetBBoxGlob( EMT.VMILL[i], GDB_BB.EXACT)
|
|
|
|
|
local ptPosIntersPlane
|
|
|
|
|
if sPosIntersPlane == 'MIN' then
|
|
|
|
|
ptPosIntersPlane = b3VMill:getMin() + dDepth * vtIntersPlane
|
|
|
|
|
elseif sPosIntersPlane == 'MAX' then
|
|
|
|
|
ptPosIntersPlane = b3VMill:getMax() - dDepth * vtIntersPlane
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local idLoop, nLoopCnt = EgtPlaneVolZmapInters( ptPosIntersPlane, vtIntersPlane, EMT.VMILL[i], CLAMP_CHECK_INTERS, GDB_RT.GLOB)
|
|
|
|
|
-- se c'è almeno una curva
|
|
|
|
|
if idLoop then
|
|
|
|
|
for j = 1, nLoopCnt do
|
|
|
|
|
local idLoopTemp = idLoop + j - 1
|
|
|
|
|
table.insert( idCurveList, idLoopTemp)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return idCurveList
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function CalculateIntersectionArea( sPosIntersPlane, sIntersPlane, dDepth)
|
|
|
|
|
-- test piano frontale
|
|
|
|
|
local idCurveList = GetCurveListFromIntersection( sPosIntersPlane, sIntersPlane, dDepth)
|
|
|
|
|
|
|
|
|
|
-- si copia curva intersezione e curva pinza in gruppo di confronto
|
|
|
|
|
local idFlatSurf, nFlatSurfCnt = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idCurveList)
|
|
|
|
|
local idClampSurf = EgtSurfFlatRegion( CLAMP_CHECK_GROUP, idClampPath)
|
|
|
|
|
|
|
|
|
|
if idFlatSurf then
|
|
|
|
|
local dTotalArea = 0
|
|
|
|
|
local dTotalXLenght = 0
|
|
|
|
|
for k = 1, nFlatSurfCnt do
|
|
|
|
|
local idTempSurf = idFlatSurf + k - 1
|
|
|
|
|
EgtSurfFrIntersect( idTempSurf, idClampSurf)
|
|
|
|
|
if idTempSurf then
|
|
|
|
|
dTotalArea = dTotalArea + ceil( EgtSurfArea( idTempSurf) or 0)
|
|
|
|
|
local b3BoxIntersectionBox = EgtGetBBoxGlob( idTempSurf, GDB_BB.STANDARD)
|
|
|
|
|
if b3BoxIntersectionBox then
|
|
|
|
|
dTotalXLenght = dTotalXLenght + ceil( b3BoxIntersectionBox:getDimX()) -- somma lunghezze (x) delle aree pinzate
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
return dTotalArea, dTotalXLenght
|
|
|
|
|
end
|
|
|
|
|
return 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- minima area considerata per un corretto pinzaggio
|
|
|
|
|
DistZClampToTable = DistZClampToTable or 0
|
|
|
|
|
local MinJoin = BD.GetMinJoin( EMT.ST, EMT.HT, EgtIf( EMT.SPLIT, EMT.LT, EMT.LB))
|
|
|
|
|
local MinZClamping = min( b3ClampingArea:getDimZ() + DistZClampToTable, EMT.HT) - DistZClampToTable
|
|
|
|
|
local dMinClamping = ( MinJoin * MinZClamping)
|
|
|
|
|
-- si moltiplica per un coefficiente minimo sotto al quale si da l'errore di pinzaggio
|
|
|
|
|
ClampingCoeffMin = EgtClamp( ClampingCoeffMin, 0.01, 1)
|
|
|
|
|
if MinZClamping > 116 then
|
|
|
|
|
dMinClamping = MinJoin * 116 + ( math.pow( MinJoin, 2) / 2)
|
|
|
|
|
if MinJoin > 280 then
|
|
|
|
|
dMinClamping = dMinClamping + ( math.pow( MinJoin - 280, 2))
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local dMinClampingAreaWarn = dMinClamping * ClampingCoeffMin
|
|
|
|
|
local dMinClampingAreaErr = dMinClamping * ( ClampingCoeffMin / 3)
|
|
|
|
|
|
|
|
|
|
local bError = true
|
|
|
|
|
local sWrn, sErr
|
|
|
|
|
local bWriteWarnMessage = false
|
|
|
|
|
local bWriteErrMessage = false
|
|
|
|
|
-- controllo faccia frontale
|
|
|
|
|
local dArea, dXClampedLenght = CalculateIntersectionArea( 'MIN', 'Y', 3)
|
|
|
|
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
|
|
|
|
if dArea and dArea < dMinClampingAreaErr then
|
|
|
|
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
|
|
|
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
|
|
|
|
bError = false
|
|
|
|
|
end
|
|
|
|
|
-- pinzaggio non fattibile, errore
|
|
|
|
|
if bError then
|
|
|
|
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
|
|
|
|
bWriteErrMessage = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- WARNING: pinza meno del minimo richiesto
|
|
|
|
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteErrMessage then
|
|
|
|
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
|
|
|
|
bWriteWarnMessage = true
|
|
|
|
|
end
|
|
|
|
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
|
|
|
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
|
|
|
|
|
|
|
|
|
-- controllo altro lato solo se non sono già in errore
|
|
|
|
|
if not bWriteErrMessage then
|
|
|
|
|
-- controllo faccia posteriore
|
|
|
|
|
dArea = CalculateIntersectionArea( 'MAX', 'Y', 3)
|
|
|
|
|
-- ERRORE: pinza troppo poco (meno di 1/3 del minimo richiesto)
|
|
|
|
|
if dArea and dArea < dMinClampingAreaErr then
|
|
|
|
|
-- solo se pinza almeno 1cm2, e la somma della lunghezza pinzata è maggiore della lunghezza minima pinzabile da Warning e non errore
|
|
|
|
|
if dXClampedLenght >= MinJoin * ClampingCoeffMin and dArea > 1000 then
|
|
|
|
|
bError = false
|
|
|
|
|
end
|
|
|
|
|
-- pinzaggio non fattibile, errore
|
|
|
|
|
if bError then
|
|
|
|
|
sErr = 'ERROR CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
|
|
|
|
bWriteErrMessage = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
-- WARNING: pinza meno del minimo richiesto
|
|
|
|
|
if dArea and dArea < dMinClampingAreaWarn and not bWriteWarnMessage and not bWriteErrMessage then
|
|
|
|
|
sWrn = 'WARNING CLAMPING ' .. sClampName .. ' : '..tostring( ceil( ( dArea / dMinClampingAreaWarn) * 100))..'% ( '.. tostring( dArea/1000)..'cm2)'
|
|
|
|
|
bWriteWarnMessage = true
|
|
|
|
|
end
|
|
|
|
|
EgtEmptyGroup( CLAMP_CHECK_GROUP)
|
|
|
|
|
EgtEmptyGroup( CLAMP_CHECK_INTERS)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if bWriteErrMessage then
|
|
|
|
|
EmtSetLastError( 1213, sErr, EgtGetEnableUI())
|
|
|
|
|
EgtOutBox( sErr, 'CLAMPING', 'ERROR', 'OK')
|
|
|
|
|
EmtSetSimulPause()
|
|
|
|
|
elseif bWriteWarnMessage then
|
|
|
|
|
EgtOutLog( sWrn)
|
|
|
|
|
EgtOutBox( sWrn, 'CLAMPING', 'WARNING', 'OK')
|
|
|
|
|
EmtSetSimulPause()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function ExecMovePY( bClose)
|
|
|
|
|
local dPY = MaxOpen
|
|
|
|
|
if bClose then
|
|
|
|
|
dPY = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
|
|
|
|
end
|
|
|
|
|
SimulMoveAxis( 'PY', dPY, MCH_SIM_STEP.RAPID)
|
|
|
|
|
SetPYLight( bClose)
|
|
|
|
|
if bClose then
|
|
|
|
|
CheckClamping( 'PY')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function ExecMovePV( bClose)
|
|
|
|
|
local dPV = MaxOpen
|
|
|
|
|
if bClose then
|
|
|
|
|
dPV = EgtIf( EMT.ROT == -1, EMT.HT, EMT.ST)
|
|
|
|
|
end
|
|
|
|
|
SimulMoveAxis( 'PV', dPV, MCH_SIM_STEP.RAPID)
|
|
|
|
|
SetPVLight( bClose)
|
|
|
|
|
if bClose then
|
|
|
|
|
CheckClamping( 'PV')
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
function VerifyYSlide( sName1, dVal1, sName2, dVal2)
|
|
|
|
|
-- Se movimento trave agganciata con carrello Y
|
|
|
|
@@ -1220,11 +1429,11 @@ end
|
|
|
|
|
-- *** ESTIMATION T&L ***
|
|
|
|
|
---------------------------------------------------------------------
|
|
|
|
|
local ESTIMATION_RAPID_COEFF = EstimationRapidMultiplier or 1
|
|
|
|
|
local RAPID_X_FEED = 75000 / ESTIMATION_RAPID_COEFF -- mm/min
|
|
|
|
|
local RAPID_X_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
|
|
|
|
local RAPID_Y_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
|
|
|
|
local RAPID_Z_FEED = 50000 / ESTIMATION_RAPID_COEFF -- mm/min
|
|
|
|
|
local RAPID_C_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
|
|
|
|
local RAPID_B_FEED = 15000 / ESTIMATION_RAPID_COEFF -- deg/min
|
|
|
|
|
local RAPID_Z_FEED = 100000 / ESTIMATION_RAPID_COEFF -- mm/min
|
|
|
|
|
local RAPID_C_FEED = 12000 / ESTIMATION_RAPID_COEFF -- deg/min
|
|
|
|
|
local RAPID_B_FEED = 12000 / ESTIMATION_RAPID_COEFF -- deg/min
|
|
|
|
|
local RAPID_MIN_T = 0.1 * ESTIMATION_RAPID_COEFF -- s
|
|
|
|
|
local LOAD_T = 2 * ESTIMATION_RAPID_COEFF -- s
|
|
|
|
|
local CHAR_ONE_MOVE_T = 1 * ESTIMATION_RAPID_COEFF -- s
|
|
|
|
@@ -1534,15 +1743,15 @@ function OnEstimRapid()
|
|
|
|
|
EMT.MCHEXTLEN = EMT.MCHEXTLEN + dLen
|
|
|
|
|
-- calcolo tempo
|
|
|
|
|
local dTime = RAPID_MIN_T
|
|
|
|
|
local dT1 = CalcMoveTime( abs( dL1), RAPID_X_FEED, EMT.SPLIT)
|
|
|
|
|
local dT1 = CalcMoveTime( abs( dL1), EMT.FMAXPINZE, EMT.SPLIT)
|
|
|
|
|
if dT1 > dTime then dTime = dT1 end
|
|
|
|
|
local dT2 = CalcMoveTime( abs( dL2), EMT.FMAXPINZE, EMT.SPLIT)
|
|
|
|
|
local dT2 = abs( dL2) / ( RAPID_X_FEED / 60) -- CalcMoveTime( abs( dL2), RAPID_X_FEED, EMT.SPLIT)
|
|
|
|
|
if dT2 > dTime then dTime = dT2 end
|
|
|
|
|
local dT3 = CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT)
|
|
|
|
|
local dT3 = abs( dL3) / ( RAPID_Z_FEED * 60) -- CalcMoveTime( abs( dL3), RAPID_Z_FEED, EMT.SPLIT)
|
|
|
|
|
if dT3 > dTime then dTime = dT3 end
|
|
|
|
|
local dT4 = abs( dR1) / RAPID_C_FEED * 60
|
|
|
|
|
local dT4 = abs( dR1) / ( RAPID_C_FEED / 60)
|
|
|
|
|
if dT4 > dTime then dTime = dT4 end
|
|
|
|
|
local dT5 = abs( dR2) / RAPID_B_FEED * 60
|
|
|
|
|
local dT5 = abs( dR2) / ( RAPID_B_FEED / 60)
|
|
|
|
|
if dT5 > dTime then dTime = dT5 end
|
|
|
|
|
EMT.MCHEXTTIME = EMT.MCHEXTTIME + dTime
|
|
|
|
|
EgtOutLog( string.format( ' G0 Len=%.0f Rot=%.0f° Time=%.2f', dLen, abs( dR1) + abs( dR2), dTime), 5)
|
|
|
|
@@ -1560,7 +1769,7 @@ function OnEstimLinear()
|
|
|
|
|
local dLen = sqrt( dL1 * dL1 + dL2 * dL2 + dL3 * dL3)
|
|
|
|
|
EMT.MCHCUTLEN = EMT.MCHCUTLEN + dLen
|
|
|
|
|
-- calcolo tempo
|
|
|
|
|
local dTime = CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
|
|
|
|
local dTime = dLen / ( EMT.F / 60) -- CalcMoveTime( dLen, EMT.F, EMT.SPLIT)
|
|
|
|
|
EMT.MCHCUTTIME = EMT.MCHCUTTIME + dTime
|
|
|
|
|
EgtOutLog( string.format( ' G1 Len=%.0f Time=%.2f', dLen, dTime), 5)
|
|
|
|
|
-- aggiorno valori come precedenti
|
|
|
|
|