EgtMachKernel 1.6n8 :
- gestione tagli con lama esterno e interno archi per marmo.
This commit is contained in:
+29
-12
@@ -1,13 +1,13 @@
|
||||
//----------------------------------------------------------------------------
|
||||
// EgalTech 2015-2015
|
||||
// EgalTech 2015-2016
|
||||
//----------------------------------------------------------------------------
|
||||
// File : Simulator.cpp Data : 19.10.15 Versione : 1.6j2
|
||||
// File : Simulator.cpp Data : 26.02.16 Versione : 1.6n8
|
||||
// Contenuto : Implementazione della classe Simulator.
|
||||
//
|
||||
//
|
||||
//
|
||||
// Modifiche : 19.10.15 DS Creazione modulo.
|
||||
//
|
||||
// 26.02.16 DS Aggiunta gestione archi.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
@@ -173,7 +173,7 @@ Simulator::Move( int& nStatus)
|
||||
case CamData::AS_OK :
|
||||
break ;
|
||||
case CamData::AS_OUTSTROKE : {
|
||||
DBLVECTOR OutAxes = pCamData->GetAxisVal() ;
|
||||
DBLVECTOR OutAxes = pCamData->GetAxesVal() ;
|
||||
for ( size_t i = OutAxes.size() ; i < 5 ; ++ i)
|
||||
OutAxes.emplace_back( 0) ;
|
||||
int nStat ;
|
||||
@@ -187,9 +187,9 @@ Simulator::Move( int& nStatus)
|
||||
nStatus = MCH_SIM_ERR ;
|
||||
return false ;
|
||||
}
|
||||
const DBLVECTOR& AxesEnd = pCamData->GetAxisVal() ;
|
||||
// Verifico se movimento in rapido
|
||||
bool bRapid = ( pCamData->GetFeed() < EPS_SMALL) ;
|
||||
const DBLVECTOR& AxesEnd = pCamData->GetAxesVal() ;
|
||||
// Tipo di movimento
|
||||
int nMoveType = pCamData->GetMoveType() ;
|
||||
// Calcolo distanza di movimento
|
||||
double dSqDist = 0 ;
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) {
|
||||
@@ -198,13 +198,30 @@ Simulator::Move( int& nStatus)
|
||||
dSqDist += dSqCoeff * ( AxesEnd[i] - m_AxesVal[i]) * ( AxesEnd[i] - m_AxesVal[i]) ;
|
||||
}
|
||||
double dDist = sqrt( dSqDist) ;
|
||||
m_dCoeff += ( bRapid ? 4 : 1) * m_dStep / dDist ;
|
||||
m_dCoeff += ( nMoveType == 0 ? 4 : 1) * m_dStep / dDist ;
|
||||
if ( m_dCoeff > 1)
|
||||
m_dCoeff = 1 ;
|
||||
// Eseguo movimento
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) {
|
||||
double dVal = m_AxesVal[i] * ( 1 - m_dCoeff) + AxesEnd[i] * m_dCoeff ;
|
||||
m_pMchMgr->SetAxisPos( m_AxesName[i], dVal) ;
|
||||
// Eseguo movimento rapido o lineare
|
||||
if ( nMoveType != 2 && nMoveType != 3) {
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) {
|
||||
double dVal = m_AxesVal[i] * ( 1 - m_dCoeff) + AxesEnd[i] * m_dCoeff ;
|
||||
m_pMchMgr->SetAxisPos( m_AxesName[i], dVal) ;
|
||||
}
|
||||
}
|
||||
// Eseguo movimento su arco (per ora sempre nel piano XY)
|
||||
else {
|
||||
// primi due assi lineari
|
||||
Point3d ptCen = pCamData->GetAxesCen() ;
|
||||
double dAngCen = pCamData->GetAxesAngCen() ;
|
||||
Vector3d vtCurr = Point3d( m_AxesVal[0], m_AxesVal[1], ptCen.z) - ptCen ;
|
||||
vtCurr.Rotate( Z_AX, m_dCoeff * dAngCen) ;
|
||||
m_pMchMgr->SetAxisPos( m_AxesName[0], ptCen.x + vtCurr.x) ;
|
||||
m_pMchMgr->SetAxisPos( m_AxesName[1], ptCen.y + vtCurr.y) ;
|
||||
// altri assi
|
||||
for ( size_t i = 2 ; i < m_AxesName.size() ; ++ i) {
|
||||
double dVal = m_AxesVal[i] * ( 1 - m_dCoeff) + AxesEnd[i] * m_dCoeff ;
|
||||
m_pMchMgr->SetAxisPos( m_AxesName[i], dVal) ;
|
||||
}
|
||||
}
|
||||
|
||||
// Se arrivato a fine interpolazione movimento, salvo posizioni e segnalo
|
||||
|
||||
Reference in New Issue
Block a user