EgtMachKernel 2.3e4 :

- aggiunta gestione collegamento tra lavorazioni con risalita poi rotazione poi spostamento poi discesa (con nuovo flag 5 su rapido).
This commit is contained in:
DarioS
2021-05-28 12:26:24 +02:00
parent bc7d1936dc
commit 8c7ee22703
4 changed files with 47 additions and 5 deletions
BIN
View File
Binary file not shown.
+2
View File
@@ -104,6 +104,8 @@ const std::string MCH_EXIT = "T" ;
const std::string MCH_ZMAXONROT = "ZMAXONROT" ;
// Info di testa per una extra risalita in Z
const std::string MCH_ZEXTRA = "ZEXTRA" ;
// Info di testa per abilitare rotazione a Zmax
const std::string MCH_ROTATZMAX = "ROTATZMAX" ;
// Info di testa per dichiarazione Home Z in basso
const std::string MCH_ZHOMEDOWN = "ZHOMEDOWN" ;
// Info di testa per dichiarazione Da Sopra
+43 -4
View File
@@ -1758,6 +1758,7 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
DBLVECTOR vAxVal2 = vAxVal ; vAxVal2[2] = dHomeZ ;
DBLVECTOR vAxIni2 = vAxIni ; vAxIni2[2] = dHomeZ ;
if ( ! TestCollisionAvoid( vAxVal2, vAxIni2)) {
// se ammessa risalita aggiuntiva
double dExtraZ, dMaxAngV ;
if ( GetExtraZ( dHomeZ, dExtraZ, dMaxAngV)) {
if ( vAxVal2.size() < 5 || ( abs( vAxVal2[4]) < dMaxAngV && abs( vAxIni2[4]) < dMaxAngV)) {
@@ -1772,14 +1773,37 @@ Operation::AdjustStartEndMovements( bool bVerifyPreviousLink)
else
bToZmax = true ;
}
// se altrimenti ammessa rotazione a Zmax e richiesta rotazione
else if ( GetRotationAtZmax() &&
(( vAxVal2.size() >= 4 && abs( vAxVal2[3] - vAxIni2[3]) > 5) ||
( vAxVal2.size() >= 5 && abs( vAxVal2[4] - vAxIni2[4]) > 5))) {
// verifico se va bene rotazione assi iniziale e poi movimento
DBLVECTOR vAxMid2 = vAxVal2 ;
vAxMid2[3] = vAxIni2[3] ;
if ( vAxVal2.size() >= 5)
vAxMid2[4] = vAxIni2[4] ;
if ( TestCollisionAvoid( vAxVal2, vAxMid2) &&
TestCollisionAvoid( vAxMid2, vAxIni2) &&
pPrevOp->AddRise( vAxVal2) &&
pPrevOp->AddSpecialRise( vAxMid2, true, GDB_ID_NULL, 5)) {
vAxVal = vAxMid2 ;
bMaxZ = true ;
}
else
return false ;
}
else
return false ;
}
}
else
return false ;
// Se richiesta risalita a Zmax
if ( bToZmax || ForcedZmax( vAxVal, vAxIni)) {
// Se già a Zmax
if ( bMaxZ) {
// non devo fare alcunché
}
// se altrimenti richiesta risalita a Zmax
else if ( bToZmax || ForcedZmax( vAxVal, vAxIni)) {
// cancello eventuale risalita parziale della lavorazione precedente
pPrevOp->RemoveRise() ;
// aggiungo risalita a Zmax
@@ -2240,7 +2264,7 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta, int nClPathId, bool bZHome
//----------------------------------------------------------------------------
bool
Operation::AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk, int nClPathId)
Operation::AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk, int nClPathId, int nFlag)
{
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
@@ -2286,7 +2310,8 @@ Operation::AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk, int nClPathId)
pCam->SetAxes( ( bOk ? CamData::AS_OK : CamData::AS_OUTSTROKE), vAxVal) ;
pCam->SetMoveType( 0) ;
pCam->SetFeed( 0) ;
pCam->SetFlag( 0) ;
pCam->SetFlag( nFlag) ;
pCam->SetFlag2( 0) ;
// associo questo oggetto a quello geometrico
m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
@@ -2495,6 +2520,20 @@ Operation::GetExtraZ( double dSafeZ, double& dExtraZ, double& dMaxAngV) const
return false ;
}
//----------------------------------------------------------------------------
bool
Operation::GetRotationAtZmax( void) const
{
// Recupero macchina corrente
Machine* pMch = ( m_pMchMgr != nullptr ? m_pMchMgr->GetCurrMachine() : nullptr) ;
if ( pMch == nullptr)
return 0 ;
// Se testa con Info ROTATZMAX la recupero e restituisco abilitazione rotazione a Zmax
int nHeadId = pMch->GetCurrHead() ;
int nVal = 0 ;
return ( m_pGeomDB->GetInfo( nHeadId, MCH_ROTATZMAX, nVal) && nVal != 0) ;
}
//----------------------------------------------------------------------------
bool
Operation::ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const
+2 -1
View File
@@ -107,11 +107,12 @@ class Operation : public IUserObj
bool ToolChangeNeeded( const Operation& Op1, const Operation& Op2) const ;
bool RemoveClimb( int nClPathId) ;
bool AddRise( DBLVECTOR& vAxVal, double dDelta = - 1, int nClPathId = GDB_ID_NULL, bool bZHomeDown = false) ;
bool AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL) ;
bool AddSpecialRise( const DBLVECTOR& vAxVal, bool bOk = true, int nClPathId = GDB_ID_NULL, int nFlag = 0) ;
bool RemoveRise( int nClPathId = GDB_ID_NULL) ;
bool AddHome( void) ;
bool CalcDeltaZForHeadRotation( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, double& dDeltaZ) const ;
bool GetExtraZ( double dSafeZ, double& dExtraZ, double& dMaxAngV) const ;
bool GetRotationAtZmax( void) const ;
bool ForcedZmax( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) const ;
int GetUserNotesZmax( void) const ;
bool GetZHomeDown( void) const ;