EgtMachKernel 3.1d7 :
- in NewLink in SpecialLink() aggiunto parametro OTHERLINKTYPE per gestione lavorazioni in doppio - Aggiunto controllo "Home" per Add/Remove Climb/Rise.
This commit is contained in:
Binary file not shown.
+11
@@ -142,9 +142,20 @@ const std::string MACHININGS_SEC = "Machinings" ;
|
||||
const std::string RAPIDONOUT_KEY = "RapidOnOut" ;
|
||||
// Chiave per Drilling in Doppio in Parallelo
|
||||
const std::string DRILLING_PARALLEL_KEY = "DrillingDoubleNT" ;
|
||||
// Chiave per Pocketing in Doppio in Parallelo
|
||||
const std::string POCKETING_PARALLEL_KEY = "PocketingDoubleNT" ;
|
||||
// Chiave per Ottimizzazione delle Feed in PocketingNT
|
||||
const std::string POCKETING_FEED_KEY = "PocketingAdjustFeedNT" ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Tipo di Collegamento tra le lavorazioni (LinkType)
|
||||
enum LINKTYPE {
|
||||
LINK_NULL = 0,
|
||||
LINK_HOME_TO_MACH = 1,
|
||||
LINK_MACH_TO_HOME = 2,
|
||||
LINK_MACH_TO_MACH = 3
|
||||
} ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Minimo spessore del grezzo
|
||||
const double RAW_MIN_H = 1 ;
|
||||
|
||||
@@ -317,6 +317,9 @@ Machine::LuaEmtAddClimb( lua_State* L)
|
||||
if ( m_pMchLua == nullptr ||
|
||||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// verifica "Main" e "Double"
|
||||
if ( ! EqualNoCase( sMain, MCH_CL) && ! EqualNoCase( sMain, MCH_DBL))
|
||||
return luaL_error( L, ( " Error in EmtAddClimb : " + sMain).c_str()) ;
|
||||
// recupero l'operazione
|
||||
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
|
||||
// imposto la discesa (primo movimento del primo percorso della lavorazione)
|
||||
@@ -343,6 +346,9 @@ Machine::LuaEmtRemoveClimb( lua_State* L)
|
||||
if ( m_pMchLua == nullptr ||
|
||||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// verifica "Main" e "Double"
|
||||
if ( ! EqualNoCase( sMain, MCH_CL) && ! EqualNoCase( sMain, MCH_DBL))
|
||||
return luaL_error( L, ( " Error in EmtAddClimb : " + sMain).c_str()) ;
|
||||
// recupero l'operazione
|
||||
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
|
||||
// elimino le discese (primi movimenti "CLIMB" del primo percorso della lavorazione)
|
||||
@@ -377,6 +383,9 @@ Machine::LuaEmtAddRise( lua_State* L)
|
||||
if ( m_pMchLua == nullptr ||
|
||||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// verifica "Main" e "Double"
|
||||
if ( ! EqualNoCase( sMain, MCH_CL) && ! EqualNoCase( sMain, MCH_DBL))
|
||||
return luaL_error( L, ( " Error in EmtAddClimb : " + sMain).c_str()) ;
|
||||
// recupero l'operazione
|
||||
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
|
||||
// aggiungo la risalita (ultimo movimento dell'ultimo percorso della lavorazione)
|
||||
@@ -403,6 +412,9 @@ Machine::LuaEmtRemoveRise( lua_State* L)
|
||||
if ( m_pMchLua == nullptr ||
|
||||
m_pMchLua->m_pMchMgr == nullptr || m_pMchLua->m_pGeomDB == nullptr)
|
||||
return luaL_error( L, " Unknown Machine") ;
|
||||
// verifica "Main" e "Double"
|
||||
if ( ! EqualNoCase( sMain, MCH_CL) && ! EqualNoCase( sMain, MCH_DBL))
|
||||
return luaL_error( L, ( " Error in EmtAddClimb : " + sMain).c_str()) ;
|
||||
// recupero l'operazione
|
||||
Operation* pOper = GetOperation( m_pMchLua->m_pGeomDB->GetUserObj( nMachId)) ;
|
||||
// elimino le risalite (ultimi movimenti "RISE" dell'ultimo percorso della lavorazione)
|
||||
|
||||
+62
-46
@@ -3418,7 +3418,8 @@ Operation::AdjustStartEndMovementsStd( bool bVerifyPreviousLink)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::MoveHeadFromHomeToMach( bool bCurrMain, const string& sToolName, const string& sHeadName, int nExitNbr, int nStartZMax)
|
||||
Operation::MoveHeadFromHomeToMach( bool bCurrMain, const string& sToolName, const string& sHeadName, int nExitNbr, int nStartZMax,
|
||||
int nOtherLinkType)
|
||||
{
|
||||
// verifico gestore delle lavorazioni e operazione
|
||||
if ( m_pMchMgr == nullptr)
|
||||
@@ -3433,7 +3434,7 @@ Operation::MoveHeadFromHomeToMach( bool bCurrMain, const string& sToolName, cons
|
||||
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath( bCurrMain), GDB_ID_NULL, nullptr, vAxVal, 0, true))
|
||||
return false ;
|
||||
// eseguo collegamento speciale
|
||||
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, false, this, GDB_ID_NULL, bCurrMain, nStartZMax))
|
||||
if ( ! ManageSpecialLink( nullptr, GDB_ID_NULL, false, this, GDB_ID_NULL, bCurrMain, nStartZMax, nOtherLinkType))
|
||||
return false ;
|
||||
|
||||
// riporto l'utensile corrente come originale
|
||||
@@ -3448,7 +3449,7 @@ bool
|
||||
Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
|
||||
bool bPrevMain, const string& sPrevToolName, const string& sPrevHeadName, int nPrevExitNbr,
|
||||
bool bCurrMain, const string& sCurrToolName, const string& sCurrHeadName, int nCurrExitNbr,
|
||||
bool bToolChangeNeeded, int nStartZMax)
|
||||
bool bToolChangeNeeded, int nStartZMax, int nOtherLinkType, int nOtherLinkType1)
|
||||
{
|
||||
// verifico gestore delle lavorazioni e operazione precedente
|
||||
if ( m_pMchMgr == nullptr || pPrevOpe == nullptr)
|
||||
@@ -3474,7 +3475,7 @@ Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
|
||||
if ( ! AdjustOneStartEndMovement( GetFirstFullToolpath( bCurrMain), GDB_ID_NULL, pPrevOpe, vAxVal, dPrevOffsX, false))
|
||||
return false ;
|
||||
// gestione collegamento speciale
|
||||
if ( ! ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, this, GDB_ID_NULL, bCurrMain, nStartZMax))
|
||||
if ( ! ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, this, GDB_ID_NULL, bCurrMain, nStartZMax, nOtherLinkType))
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -3482,12 +3483,12 @@ Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
|
||||
else {
|
||||
// imposto la lavorazione precedente come corrente ed effettuo collegamento
|
||||
m_pMchMgr->SetCurrMachining( pPrevOpe->GetOwner()) ;
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, bPrevMain, sPrevToolName, sPrevHeadName, nPrevExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, bPrevMain, sPrevToolName, sPrevHeadName, nPrevExitNbr, nStartZMax, nOtherLinkType))
|
||||
return false ;
|
||||
|
||||
// ripristino la lavorazione corrente ed effettuo collegamento
|
||||
m_pMchMgr->SetCurrMachining( GetOwner()) ;
|
||||
if ( ! MoveHeadFromHomeToMach( bCurrMain, sCurrToolName, sCurrHeadName, nCurrExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromHomeToMach( bCurrMain, sCurrToolName, sCurrHeadName, nCurrExitNbr, nStartZMax, nOtherLinkType1))
|
||||
return false ;
|
||||
}
|
||||
|
||||
@@ -3501,7 +3502,7 @@ Operation::MoveHeadFromMachToMach( Operation* pPrevOpe,
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::MoveHeadFromMachToHome( Operation* pPrevOpe, bool bPrevMain, const string& sPrevToolName, const string& sPrevHeadName, int nPrevExitNbr,
|
||||
int nStartZMax)
|
||||
int nStartZMax, int nOtherLinkType)
|
||||
{
|
||||
// verifico gestore delle lavorazioni e operazione precedente
|
||||
if ( m_pMchMgr == nullptr || pPrevOpe == nullptr)
|
||||
@@ -3517,7 +3518,7 @@ Operation::MoveHeadFromMachToHome( Operation* pPrevOpe, bool bPrevMain, const st
|
||||
return false ;
|
||||
}
|
||||
// eventuale rilascio utensile speciale di lavorazione precedente
|
||||
if ( ! pPrevOpe->ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, nullptr, GDB_ID_NULL, false, nStartZMax))
|
||||
if ( ! pPrevOpe->ManageSpecialLink( pPrevOpe, GDB_ID_NULL, bPrevMain, nullptr, GDB_ID_NULL, false, nStartZMax, nOtherLinkType))
|
||||
return false ;
|
||||
|
||||
// riporto l'utensile corrente come originale
|
||||
@@ -3565,10 +3566,10 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
if ( sPrevTool.empty() || NeedPrevHome()) {
|
||||
// -->! la lavorazione corrente è per forza in doppio !<--
|
||||
// Dalla sua posizione di Home porto la Testa Main sul percorso Main corrente
|
||||
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr(), nStartZMax))
|
||||
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr(), nStartZMax, LINK_HOME_TO_MACH))
|
||||
return false ;
|
||||
// Dalla sua posizione di Home porto da Testa Double sul percorso Double corrente
|
||||
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax, LINK_HOME_TO_MACH))
|
||||
return false ;
|
||||
}
|
||||
else {
|
||||
@@ -3579,10 +3580,11 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && nStartZMax == 0) {
|
||||
// Come prima cosa sposto la testa Main della prima lavorazione sul percorso Main della lavorazione corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax,
|
||||
LINK_HOME_TO_MACH, LINK_NULL))
|
||||
return false ;
|
||||
// Successivamente porto la testa Double dalla sua Home alla lavorazione corrente ( in doppio) sul percorso
|
||||
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax, LINK_MACH_TO_MACH))
|
||||
return false ;
|
||||
}
|
||||
// -->! 2) Verifico se l'unico utensile della lavorazione precedente ( in quanto singola) è compatibile
|
||||
@@ -3590,10 +3592,11 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
else if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, false) && nStartZMax == 0) {
|
||||
// Come prima cosa sposto la testa Main della lavorazione precedente sul percorso Double della lavorazione corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false, nStartZMax))
|
||||
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false, nStartZMax,
|
||||
LINK_HOME_TO_MACH, LINK_NULL))
|
||||
return false ;
|
||||
// Successivamente porto la testa Main dalla sua Home alla lavorazione corrente ( in doppio) sul percorso
|
||||
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr(), nStartZMax))
|
||||
if ( ! MoveHeadFromHomeToMach( true, GetToolName(), GetHeadName(), GetExitNbr(), nStartZMax, LINK_MACH_TO_MACH))
|
||||
return false ;
|
||||
}
|
||||
// -->! 3) In questo caso l'unico utensile della lavorazione precedente ( in quanto singola) non è compatibile
|
||||
@@ -3601,10 +3604,11 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
else {
|
||||
// Porto la Testa Main sul percorso Main corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax,
|
||||
LINK_NULL, LINK_HOME_TO_MACH))
|
||||
return false ;
|
||||
// Dalla sua posizione di Home porto da Testa Double sul percorso Double corrente
|
||||
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromHomeToMach( false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, nStartZMax, LINK_HOME_TO_MACH))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -3614,33 +3618,36 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
// con l'Utensile presente sul percorso Main della lavorazione corrente ( in quanto singola) !<--
|
||||
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && nStartZMax == 0) {
|
||||
// Come prima cosa sposto la testa Double della lavorazione precedente ( in doppio) in Home
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr, nStartZMax, LINK_MACH_TO_MACH))
|
||||
return false ;
|
||||
// Sposto al testa Main della lavorazione precedente sul percorso Main corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax,
|
||||
LINK_MACH_TO_HOME, LINK_NULL))
|
||||
return false ;
|
||||
}
|
||||
// -->! 2) Verifico se l'utensile secondario della lavorazione precedente ( in doppio) è compatibile
|
||||
// con l'Utensile presente sul percorso Double della lavorazione corrente ( in quanto singola) !<--
|
||||
else if ( ! ToolChangeNeeded( *pPrevOpe, false, *this, true) && nStartZMax == 0) {
|
||||
// Come prima cosa sposto la testa Main della lavorazione precedente ( in doppio) in Home
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr, nStartZMax, LINK_MACH_TO_MACH))
|
||||
return false ;
|
||||
// Sposto al testa Double della lavorazione precedente sul percorso corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax,
|
||||
LINK_MACH_TO_HOME, LINK_NULL))
|
||||
return false ;
|
||||
}
|
||||
// -->! 3) In questo caso l'unico utensile della lavorazione corrente ( in quanto singola) non è compatibile
|
||||
// con nessun utensile della lavorazione precedente ( in doppio) !<--
|
||||
else {
|
||||
// Come prima cosa sposto la testa Double della lavorazione precedente ( in doppio) in Home
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr, nStartZMax))
|
||||
if ( ! MoveHeadFromMachToHome( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr, nStartZMax, LINK_MACH_TO_HOME))
|
||||
return false ;
|
||||
// Sposto la testa Main della lavorazione precedente sul percorso corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax,
|
||||
LINK_MACH_TO_HOME, LINK_NULL))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -3650,22 +3657,26 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
if ( ! ToolChangeNeeded( *pPrevOpe, true, *this, true) && ! ToolChangeNeeded( *pPrevOpe, false, *this, false) && nStartZMax == 0) {
|
||||
// Porto la testa Main dalla lavorazione precedente alla lavorazione corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), false, nStartZMax,
|
||||
LINK_MACH_TO_MACH, LINK_NULL))
|
||||
return false ;
|
||||
// Porto la testa double delle lavorazione precedente alla lavorazine corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr,
|
||||
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false, nStartZMax))
|
||||
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, false, nStartZMax,
|
||||
LINK_MACH_TO_MACH, LINK_NULL))
|
||||
return false ;
|
||||
}
|
||||
// -->! 2) Per tutto il resto porto sempre in Home per sicurezza passando da una lavorazione all'altra !<--
|
||||
else {
|
||||
// Porto la testa Main dalla lavorazione precedente alla lavorazione corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, true, sPrevTool, sPrevHead, nPrevExitNbr,
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax))
|
||||
true, GetToolName(), GetHeadName(), GetExitNbr(), true, nStartZMax,
|
||||
LINK_MACH_TO_HOME, LINK_HOME_TO_MACH))
|
||||
return false ;
|
||||
// Porto la testa Double delle lavorazione precedente alla lavorazine corrente
|
||||
if ( ! MoveHeadFromMachToMach( pPrevOpe, false, sPrevDblTool, sPrevDblHead, nPrevDblExitNbr,
|
||||
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, true, nStartZMax))
|
||||
false, sCurrDblTool, sCurrDblHead, nCurrDblExitNbr, true, nStartZMax,
|
||||
LINK_MACH_TO_HOME, LINK_HOME_TO_MACH))
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
@@ -3684,7 +3695,7 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
DBLVECTOR vAxVal ;
|
||||
bOk = bOk && GetClPathFinalAxesValues( nPrevCLPathId, false, vAxVal) ;
|
||||
bOk = bOk && AdjustOneStartEndMovement( nCLPathId, nPrevCLPathId, nullptr, vAxVal, 0, false) ;
|
||||
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true, nStartZMax) ;
|
||||
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true, nStartZMax, LINK_NULL) ;
|
||||
// passo al successivo
|
||||
nPrevCLPathId = nCLPathId ;
|
||||
nCLPathId = GetNextFullToolpath( nCLPathId) ;
|
||||
@@ -3716,13 +3727,13 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
// Utensile Main
|
||||
bOk = bOk && GetClPathFinalAxesValues( nPrevCLPathId, false, vAxVal) ;
|
||||
bOk = bOk && AdjustOneStartEndMovement( nCLPathId, nPrevCLPathId, nullptr, vAxVal, 0, false) ;
|
||||
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true, nStartZMax) ;
|
||||
bOk = bOk && ManageSpecialLink( this, nPrevCLPathId, true, this, nCLPathId, true, nStartZMax, LINK_MACH_TO_HOME) ;
|
||||
// Utensile Double
|
||||
DBLVECTOR vAxDblVal ;
|
||||
bOk = bOk && m_pMchMgr->SetCalcTool( sCurrDblTool, sCurrDblHead, nCurrDblExitNbr) ;
|
||||
bOk = bOk && GetClPathFinalAxesValues( nPrevDBLPathId, false, vAxDblVal) ;
|
||||
bOk = bOk && AdjustOneStartEndMovement( nDBLPathId, nPrevDBLPathId, nullptr, vAxDblVal, 0, false) ;
|
||||
bOk = bOk && ManageSpecialLink( this, nPrevDBLPathId, false, this, nDBLPathId, false, nStartZMax) ;
|
||||
bOk = bOk && ManageSpecialLink( this, nPrevDBLPathId, false, this, nDBLPathId, false, nStartZMax, LINK_MACH_TO_HOME) ;
|
||||
bOk = bOk && m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
|
||||
// passo al successivo
|
||||
nPrevCLPathId = nCLPathId ;
|
||||
@@ -3735,12 +3746,12 @@ Operation::ManageDoubleOperNew( Operation* pPrevOpe)
|
||||
// per utensile Main
|
||||
DBLVECTOR vAxVal ;
|
||||
bOk = bOk && AddRise( vAxVal) ;
|
||||
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true, 0) ;
|
||||
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, true, nullptr, GDB_ID_NULL, true, 0, LINK_NULL) ;
|
||||
// per utensile Double
|
||||
DBLVECTOR vAxDblVal ;
|
||||
bOk = bOk && m_pMchMgr->SetCalcTool( sCurrDblTool, sCurrDblHead, nCurrDblExitNbr) ;
|
||||
bOk = bOk && AddRise( vAxDblVal, NAN, GDB_ID_NULL, false) ;
|
||||
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, false, nullptr, GDB_ID_NULL, false, 0) ;
|
||||
bOk = bOk && ManageSpecialLink( this, GDB_ID_NULL, false, nullptr, GDB_ID_NULL, false, 0, LINK_NULL) ;
|
||||
bOk = bOk && m_pMchMgr->SetCalcTool( GetToolName(), GetHeadName(), GetExitNbr()) ;
|
||||
// -->! se ultima operazione o la successiva lo richiede, vado in Home !<--
|
||||
int nNextOpId = m_pMchMgr->GetNextActiveOperation( m_nOwnerId) ;
|
||||
@@ -3907,7 +3918,7 @@ Operation::AdjustStartEndMovementsNew( void)
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Operation::ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrevMain, Operation* pNextOpe, int nNextClPathId, bool bNextMain,
|
||||
int nStartZmax)
|
||||
int nStartZmax, int nOtherLinkType)
|
||||
{
|
||||
// controlli
|
||||
if ( pPrevOpe == nullptr && pNextOpe == nullptr)
|
||||
@@ -3950,7 +3961,7 @@ Operation::ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrev
|
||||
return false ;
|
||||
|
||||
// chiamo funzione script OnSpecialRapidMove per avere posizioni di movimento
|
||||
bool bOk = SpecialLink( vNeatAxSta, vNeatAxEnd, nLinkType, pPrevOpe, bPrevMain, pNextOpe, bNextMain, nStartZmax) ;
|
||||
bool bOk = SpecialLink( vNeatAxSta, vNeatAxEnd, nLinkType, pPrevOpe, bPrevMain, pNextOpe, bNextMain, nStartZmax, nOtherLinkType) ;
|
||||
|
||||
// in caso di errore eseguo inserimento con segnalazione di errore
|
||||
if ( ! bOk) {
|
||||
@@ -5941,23 +5952,24 @@ Operation::SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd,
|
||||
bool
|
||||
Operation::SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nLinkType,
|
||||
const Operation* pPrevOpe, bool bPrevMain, const Operation* pNextOpe, bool bNextMain,
|
||||
int nStartZMax)
|
||||
int nStartZMax, int nOtherLinkType)
|
||||
{
|
||||
// recupero la macchina corrente
|
||||
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
|
||||
if ( pMch == nullptr)
|
||||
return false ;
|
||||
// costanti
|
||||
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
|
||||
static const string EVAR_PREVMCHID = ".PREVMCHID" ; // IN (int) identificativo lavorazione precedente
|
||||
static const string EVAR_PREVPHASE = ".PREVPHASE" ; // IN (int) indice fase della lavorazione precedente
|
||||
static const string EVAR_PREVMAIN = ".PREVMAIN" ; // IN (bool) flag lavorazione principale o double precedente
|
||||
static const string EVAR_NEXTMCHID = ".NEXTMCHID" ; // IN (int) identificativo lavorazione successiva
|
||||
static const string EVAR_NEXTPHASE = ".NEXTPHASE" ; // IN (int) indice fase della lavorazione successiva
|
||||
static const string EVAR_NEXTMAIN = ".NEXTMAIN" ; // IN (bool) flag lavorazione principale o double successiva
|
||||
static const string EVAR_STARTZMAX = ".STARTZMAX" ; // IN (int) identificativo StartZMax
|
||||
static const string EVAR_LINKTYPE = ".LINKTYPE" ; // IN (int) codice tipo collegamento (1=Inizio, 2=Fine, 3=FinePrec+InizioSucc)
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
|
||||
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
|
||||
static const string EVAR_PREVMCHID = ".PREVMCHID" ; // IN (int) identificativo lavorazione precedente
|
||||
static const string EVAR_PREVPHASE = ".PREVPHASE" ; // IN (int) indice fase della lavorazione precedente
|
||||
static const string EVAR_PREVMAIN = ".PREVMAIN" ; // IN (bool) flag lavorazione principale o double precedente
|
||||
static const string EVAR_NEXTMCHID = ".NEXTMCHID" ; // IN (int) identificativo lavorazione successiva
|
||||
static const string EVAR_NEXTPHASE = ".NEXTPHASE" ; // IN (int) indice fase della lavorazione successiva
|
||||
static const string EVAR_NEXTMAIN = ".NEXTMAIN" ; // IN (bool) flag lavorazione principale o double successiva
|
||||
static const string EVAR_STARTZMAX = ".STARTZMAX" ; // IN (int) identificativo StartZMax
|
||||
static const string EVAR_LINKTYPE = ".LINKTYPE" ; // IN (int) codice tipo collegamento (1=Inizio, 2=Fine, 3=FinePrec+InizioSucc)
|
||||
static const string EVAR_OTHERLINKTYPE = ".OTHERLINKTYPE" ; // IN (int) codice tipo collegamento per altra lavorazione (0=Non Presente, 1=Inizio, 2=Fine, 3=FinePrec+InizioSucc)
|
||||
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
|
||||
static const string ON_SPECIAL_LINK = "OnSpecialLink" ;
|
||||
|
||||
// se la funzione non è definita, esco
|
||||
@@ -5982,14 +5994,18 @@ Operation::SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_EXIT, nExitNbr) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TCPOS, sTcPos) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PREVMCHID, ( pPrevOpe != nullptr ? pPrevOpe->GetOwner() : GDB_ID_NULL)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PREVMAIN, ( bPrevMain ? MCH_CL : MCH_DBL)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PREVMAIN, ( pPrevOpe != nullptr ? ( bPrevMain ? MCH_CL : MCH_DBL) : MCH_HOME)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PREVPHASE, ( pPrevOpe != nullptr ? pPrevOpe->m_nPhase : 0)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTMCHID, ( pNextOpe != nullptr ? pNextOpe->GetOwner() : GDB_ID_NULL)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTPHASE, ( pNextOpe != nullptr ? pNextOpe->m_nPhase : 0)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTMAIN, ( bNextMain ? MCH_CL : MCH_DBL)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_NEXTMAIN, ( pNextOpe != nullptr ? ( bNextMain ? MCH_CL : MCH_DBL) : MCH_HOME)) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_STARTZMAX, nStartZMax) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_PHASE, m_nPhase) ;
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_LINKTYPE, nLinkType) ;
|
||||
if ( nOtherLinkType == LINK_NULL)
|
||||
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR + EVAR_OTHERLINKTYPE) ;
|
||||
else
|
||||
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_OTHERLINKTYPE, nOtherLinkType) ;
|
||||
// valore degli assi
|
||||
bool bIsRobot = m_pMchMgr->GetCurrIsRobot() ;
|
||||
int nNumAxes = ssize( vAxStart) ;
|
||||
|
||||
+6
-5
@@ -240,16 +240,17 @@ class Operation : public IUserObj
|
||||
bool AdjustStartEndMovementsStd( bool bVerifyPreviousLink) ;
|
||||
bool AdjustOneStartEndMovement( int nClPathId, int nPrevClPathId, Operation* pPrevOpe, const DBLVECTOR& vAxPrev, double dPrevOffsX, bool bMaxZ) ;
|
||||
bool AdjustStartEndMovementsNew( void) ;
|
||||
bool MoveHeadFromHomeToMach( bool bMain, const std::string& sToolName, const std::string& sHeadName, int nExitNbr, int nStartZMax) ;
|
||||
bool MoveHeadFromHomeToMach( bool bMain, const std::string& sToolName, const std::string& sHeadName, int nExitNbr, int nStartZMax,
|
||||
int nOtherLinkType) ;
|
||||
bool MoveHeadFromMachToMach( Operation* pPrevOpe,
|
||||
bool bPrevMain, const std::string& sPrevToolName, const std::string& sPrevHeadName, int nPrevExitNbr,
|
||||
bool bCurrMain, const std::string& sCurrToolName, const std::string& sCurrHeadName, int nCurrExitNbr,
|
||||
bool bToolChange, int nStartZMax) ;
|
||||
bool bToolChange, int nStartZMax, int nOtherLinkType, int nOtherLinkType1) ;
|
||||
bool MoveHeadFromMachToHome( Operation* pPrevOpe, bool bCurrMain, const std::string& sCurrToolName, const std::string& sCurrHeadName, int nCurrExitNbr,
|
||||
int nStartZMax) ;
|
||||
int nStartZMax, int nOtherLinkType) ;
|
||||
bool ManageDoubleOperNew( Operation* pPrevOpe) ;
|
||||
bool ManageSpecialLink( Operation* pPrevOpe, int nPrevClPathId, bool bPrevMain, Operation* pNextOpe, int nNextClPathId, bool bNextMain,
|
||||
int nStartZMax) ;
|
||||
int nStartZMax, int nOtherLinkType = LINK_NULL) ;
|
||||
bool ToolChangeNeeded( const Operation& Ope1, bool bMain1, const Operation& Ope2, bool bMain2) const ;
|
||||
bool AddSpecialClimb( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL, bool bMain = true,
|
||||
int nFlag = 0, int nFlag2 = 0, int nMask = -1, const std::string& sInfo = "", bool bFirst = true) ;
|
||||
@@ -278,7 +279,7 @@ class Operation : public IUserObj
|
||||
bool SpecialMoveRapid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, DBLVECTOR& vAxNew, bool& bModif) ;
|
||||
bool SpecialLink( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, int nLinkType,
|
||||
const Operation* pPrevOpe, bool bPrevMain, const Operation* pNextOpe, bool bNextMain,
|
||||
int nStartZMax) ;
|
||||
int nStartZMax, int nOtherLinkType = LINK_NULL) ;
|
||||
bool SpecialPrevMachiningOffset( const Operation* pPrevOpe, double& dOffsetX) ;
|
||||
|
||||
protected :
|
||||
|
||||
Reference in New Issue
Block a user