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:
Riccardo Elitropi
2026-04-30 14:36:03 +02:00
parent 054dc530fb
commit ed1cd66164
5 changed files with 91 additions and 51 deletions
BIN
View File
Binary file not shown.
+11
View File
@@ -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 ;
+12
View File
@@ -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
View File
@@ -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
View File
@@ -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 :