EgtMachKernel :
- corretto gestione asse indeterminato in presenza di un asse bloccato.
This commit is contained in:
+38
-13
@@ -777,10 +777,17 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
|
||||
// porto gli angoli ai valori più vicini ai precedenti con offset di uno o più giri
|
||||
for ( size_t i = 0 ; i < vAng1.size() ; ++ i)
|
||||
m_pMchMgr->GetNearestAngleInStroke( int( i), vAxRotPrec[i], vAng1[i]) ;
|
||||
// se sol.ne indeterminata (sempre il primo asse), assegno il precedente, limitandolo alla corsa
|
||||
// se sol.ne indeterminata (sempre il primo asse libero), assegno il precedente, limitandolo alla corsa
|
||||
if ( nRStat < 0 && vAng1.size() >= 1) {
|
||||
vAng1[0] = vAxRotPrec[0] ;
|
||||
m_pMchMgr->LimitAngleToStroke( 0, vAng1[0]) ;
|
||||
for ( int i = 0 ; i < int( vAng1.size()) ; ++ i) {
|
||||
// ignoro gli assi bloccati
|
||||
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
|
||||
continue ;
|
||||
// assegno il precedente
|
||||
vAng1[i] = vAxRotPrec[i] ;
|
||||
m_pMchMgr->LimitAngleToStroke( i, vAng1[i]) ;
|
||||
break ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// per movimenti successivi
|
||||
@@ -788,9 +795,15 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
|
||||
// scelgo gli angoli più vicini, per continuità non applico offset per stare nelle corse
|
||||
for ( size_t i = 0 ; i < vAng1.size() ; ++ i)
|
||||
vAng1[i] = AngleNearAngle( vAng1[i], vAxRotPrec[i]) ;
|
||||
// se sol.ne indeterminata (sempre il primo asse), assegno il precedente
|
||||
// se sol.ne indeterminata (sempre il primo asse libero), assegno il precedente
|
||||
if ( nRStat < 0 && vAng1.size() >= 1) {
|
||||
vAng1[0] = vAxRotPrec[0] ;
|
||||
for ( int i = 0 ; i < int( vAng1.size()) ; ++ i) {
|
||||
// ignoro gli assi bloccati
|
||||
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
|
||||
continue ;
|
||||
// assegno il precedente
|
||||
vAng1[i] = vAxRotPrec[i] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -802,11 +815,17 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
|
||||
m_pMchMgr->GetNearestAngleInStroke( int( i), vAxRotPrec[i], vAng1[i]) ;
|
||||
m_pMchMgr->GetNearestAngleInStroke( int( i), vAxRotPrec[i], vAng2[i]) ;
|
||||
}
|
||||
// se sol.ne indeterminata (sempre il primo asse), assegno il precedente, limitandolo alla corsa
|
||||
// se sol.ne indeterminata (sempre il primo asse libero), assegno il precedente, limitandolo alla corsa
|
||||
if ( nRStat < 0 && vAng1.size() >= 1) {
|
||||
vAng1[0] = vAxRotPrec[0] ;
|
||||
m_pMchMgr->LimitAngleToStroke( 0, vAng1[0]) ;
|
||||
vAng2[0] = vAng1[0] ;
|
||||
for ( int i = 0 ; i < int( vAng1.size()) ; ++ i) {
|
||||
// ignoro gli assi bloccati
|
||||
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
|
||||
continue ;
|
||||
// assegno il precedente
|
||||
vAng1[i] = vAxRotPrec[i] ;
|
||||
m_pMchMgr->LimitAngleToStroke( i, vAng1[i]) ;
|
||||
vAng2[i] = vAng1[i] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
@@ -814,14 +833,20 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
|
||||
for ( size_t i = 0 ; i < vAng1.size() ; ++ i) {
|
||||
vAng1[i] = AngleNearAngle( vAng1[i], vAxRotPrec[i]) ;
|
||||
vAng2[i] = AngleNearAngle( vAng2[i], vAxRotPrec[i]) ;
|
||||
// se sol.ne indeterminata (sempre il primo asse), assegno il precedente
|
||||
// se sol.ne indeterminata (sempre il primo asse libero), assegno il precedente
|
||||
if ( nRStat < 0 && vAng1.size() >= 1) {
|
||||
vAng1[0] = vAxRotPrec[0] ;
|
||||
vAng2[0] = vAng1[0] ;
|
||||
for ( int i = 0 ; i < int( vAng1.size()) ; ++ i) {
|
||||
// ignoro gli assi bloccati
|
||||
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
|
||||
continue ;
|
||||
// assegno il precedente
|
||||
vAng1[i] = vAxRotPrec[i] ;
|
||||
vAng2[i] = vAng1[i] ;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// scelgo la soluzione più vicina ai precedenti
|
||||
// scelgo la soluzione più vicina alla precedente
|
||||
double dDelta1 = 0 ;
|
||||
double dDelta2 = 0 ;
|
||||
for ( size_t i = 0 ; i < vAng1.size() ; ++ i) {
|
||||
|
||||
Reference in New Issue
Block a user