From 8c7ee22703fd73f64a6cb8d8d9a73cb74e0af1fd Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 28 May 2021 12:26:24 +0200 Subject: [PATCH] EgtMachKernel 2.3e4 : - aggiunta gestione collegamento tra lavorazioni con risalita poi rotazione poi spostamento poi discesa (con nuovo flag 5 su rapido). --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes MachineStruConst.h | 2 ++ Operation.cpp | 47 +++++++++++++++++++++++++++++++++++++++++---- Operation.h | 3 ++- 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 951c83213b0efe890b063007f406041c6bdfbe95..d86e1ef151e09ea61a8c2c8047668fdc5480416f 100644 GIT binary patch delta 97 zcmewt{V#gMFE&P#&A-`fnHfzcKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUI`BbWdH delta 97 zcmewt{V#gMFE&Qw&A-`fnHh~IKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUD-Bai?9 diff --git a/MachineStruConst.h b/MachineStruConst.h index d84a63d..69d1223 100644 --- a/MachineStruConst.h +++ b/MachineStruConst.h @@ -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 diff --git a/Operation.cpp b/Operation.cpp index 8a3e2e5..9423c6f 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -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 diff --git a/Operation.h b/Operation.h index 5ac6267..27f468d 100644 --- a/Operation.h +++ b/Operation.h @@ -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 ;