EgtMachKernel 1.8c3 :

- prima versione funzionante di lavorazione generica con script lua
- corretta funzione per Lua EmtAddArcMove
- aggiunta VerifyAngleOutstroke
- corretta assegnazione valore precedente ad asse indeterminato
- corretta assegnazione angoli tenendo conto dei precedenti durante lavorazione.
This commit is contained in:
Dario Sassi
2017-03-08 19:47:08 +00:00
parent 0b1fe4b106
commit 6fce5b366d
16 changed files with 163 additions and 66 deletions
+17 -5
View File
@@ -783,7 +783,7 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
// ignoro gli assi bloccati
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
continue ;
// assegno il precedente
// assegno il precedente ed esco
vAng1[i] = vAxRotPrec[i] ;
m_pMchMgr->LimitAngleToStroke( i, vAng1[i]) ;
break ;
@@ -801,13 +801,16 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
// ignoro gli assi bloccati
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
continue ;
// assegno il precedente
// assegno il precedente ed esco
vAng1[i] = vAxRotPrec[i] ;
break ;
}
}
}
}
if ( abs( nRStat) == 2) {
bool bAng1 = true ;
bool bAng2 = true ;
// se primo movimento
if ( bFirst) {
// porto gli angoli ai valori più vicini ai precedenti con offset di uno o più giri
@@ -821,10 +824,11 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
// ignoro gli assi bloccati
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
continue ;
// assegno il precedente
// assegno il precedente ed esco
vAng1[i] = vAxRotPrec[i] ;
m_pMchMgr->LimitAngleToStroke( i, vAng1[i]) ;
vAng2[i] = vAng1[i] ;
break ;
}
}
}
@@ -839,12 +843,20 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
// ignoro gli assi bloccati
if ( m_pMchMgr->IsKinematicRotAxisBlocked( i))
continue ;
// assegno il precedente
// assegno il precedente ed esco
vAng1[i] = vAxRotPrec[i] ;
vAng2[i] = vAng1[i] ;
break ;
}
}
}
// verifico che le soluzioni siano nelle corse
for ( int i = 0 ; i < int( vAng1.size()) ; ++ i) {
if ( ! m_pMchMgr->VerifyAngleOutstroke( i, vAng1[i]))
bAng1 = false ;
if ( ! m_pMchMgr->VerifyAngleOutstroke( i, vAng2[i]))
bAng2 = false ;
}
}
// scelgo la soluzione più vicina alla precedente
double dDelta1 = 0 ;
@@ -858,7 +870,7 @@ Operation::CalculateClPathAxesValues( int nClPathId, int nLinAxes, int nRotAxes,
dDelta1 += fabs( vAng1[i] - vAxRotPrec[i]) * ( bFirst ? dRot1W : 1) ;
dDelta2 += fabs( vAng2[i] - vAxRotPrec[i]) * ( bFirst ? dRot1W : 1) ;
}
if ( dDelta2 < dDelta1 - EPS_ANG_SMALL)
if ( bAng2 && ( dDelta2 < dDelta1 - EPS_ANG_SMALL || ! bAng1))
vAng1 = vAng2 ;
}
// ricavo posizione con eventuali modifiche dipendenti dalla lavorazione