EgtMachKernel 2.1c1 :
- corretta risalita in Z tra lavorazioni (senza più CalcDeltaZForHeadRotation) - corretta svuotatura per reset flag lato aperto prima di analisi - modificata simulazione per gestire più grezzi simultaneamente.
This commit is contained in:
+29
-28
@@ -57,7 +57,6 @@ Simulator::Simulator( void)
|
||||
m_nAuxSInd = 0 ;
|
||||
m_nAuxETot = 0 ;
|
||||
m_nAuxEInd = 0 ;
|
||||
m_nVmId = GDB_ID_NULL ;
|
||||
m_dVmTdOffs = 0 ;
|
||||
m_dVmAdOffs = 0 ;
|
||||
m_bEnabAxes = true ;
|
||||
@@ -176,7 +175,7 @@ Simulator::ResetInterpolation( void)
|
||||
m_nAuxSInd = 0 ;
|
||||
m_nAuxETot = 0 ;
|
||||
m_nAuxEInd = 0 ;
|
||||
m_nVmId = GDB_ID_NULL ;
|
||||
m_VmId.clear() ;
|
||||
m_dVmTdOffs = 0 ;
|
||||
m_dVmAdOffs = 0 ;
|
||||
m_bEnabAxes = true ;
|
||||
@@ -913,21 +912,24 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
|
||||
dMove = ( m_dCoeff - dPrevCoeff) * dDist ;
|
||||
|
||||
// Posizione e direzione attuali dell'utensile e riferimento attuale del pezzo (per Vmill)
|
||||
Point3d ptNoseI ; Vector3d vtDirI ; Vector3d vtAuxI ; Frame3d frVzmI ;
|
||||
bool bOkI = GetHeadCurrPosDirAux( ptNoseI, vtDirI, vtAuxI) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmI) ;
|
||||
Point3d ptNoseI ; Vector3d vtDirI ; Vector3d vtAuxI ;
|
||||
bool bOkI = GetHeadCurrPosDirAux( ptNoseI, vtDirI, vtAuxI) ;
|
||||
vector<Frame3d> vFrVzmI( m_VmId.size()) ;
|
||||
for ( int i = 0 ; i < int( m_VmId.size()) ; ++ i)
|
||||
bOkI = m_pGeomDB->GetGlobFrame( m_VmId[i], vFrVzmI[i]) && bOkI ;
|
||||
|
||||
// Eseguo movimento rapido o lineare
|
||||
if ( nMoveType != 2 && nMoveType != 3) {
|
||||
// assegno posizioni finali
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) {
|
||||
for ( int i = 0 ; i < int( m_AxesName.size()) ; ++ i) {
|
||||
double dVal = m_AxesVal[i] * ( 1 - m_dCoeff) + AxesEnd[i] * m_dCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[i], dVal) ;
|
||||
}
|
||||
// eseguo eventuale Vmill
|
||||
if ( m_nVmId != GDB_ID_NULL) {
|
||||
for ( int j = 0 ; j < int( m_VmId.size()) ; ++ j) {
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ; Frame3d frVzmF ;
|
||||
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ; ;
|
||||
ExecLineVmill( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
|
||||
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_VmId[j], frVzmF) ; ;
|
||||
ExecLineVmill( m_VmId[j], ptNoseI, vtDirI, vtAuxI, vFrVzmI[j], ptNoseF, vtDirF, vtAuxF, frVzmF) ;
|
||||
}
|
||||
}
|
||||
// Eseguo movimento su arco
|
||||
@@ -943,10 +945,10 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
|
||||
vtRot.Rotate( vtN, dPrevCoeff * dAngCen) ;
|
||||
// approssimo movimento con 1 o più step a seconda ci sia Vmill
|
||||
int nStep = 1 ;
|
||||
if ( m_nVmId != GDB_ID_NULL) {
|
||||
if ( ! m_VmId.empty()) {
|
||||
const double LEN_STEP = 2. ;
|
||||
nStep = max( int( abs( dDiffAng * DEGTORAD * dRad) / LEN_STEP), 1) ;
|
||||
const double ANG_STEP = 10. ;
|
||||
const double ANG_STEP = 5. ;
|
||||
if ( abs( dDiffAng) / nStep > ANG_STEP)
|
||||
nStep = int( abs( dDiffAng) / ANG_STEP) ;
|
||||
}
|
||||
@@ -958,20 +960,23 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove)
|
||||
m_pMachine->SetAxisPos( m_AxesName[1], ptCen.y + vtRot.y + dCurrCoeff * dDeltaN * vtN.y) ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[2], ptCen.z + vtRot.z + dCurrCoeff * dDeltaN * vtN.z) ;
|
||||
// assi rotanti
|
||||
for ( size_t j = 3 ; j < m_AxesName.size() ; ++ j) {
|
||||
for ( int j = 3 ; j < int( m_AxesName.size()) ; ++ j) {
|
||||
double dVal = m_AxesVal[j] * ( 1 - dCurrCoeff) + AxesEnd[j] * dCurrCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AxesName[j], dVal) ;
|
||||
}
|
||||
// eseguo eventuale Vmill
|
||||
if ( m_nVmId != GDB_ID_NULL) {
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ; Frame3d frVzmF ;
|
||||
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ;
|
||||
ExecLineVmill( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
|
||||
// aggiorno prossimo inizio
|
||||
ptNoseI = ptNoseF ;
|
||||
vtDirI = vtDirF ;
|
||||
frVzmI = frVzmF ;
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ;
|
||||
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) ;
|
||||
for ( int k = 0 ; k < int( m_VmId.size()) ; ++ k) {
|
||||
Frame3d frVzmF ;
|
||||
bOkF = m_pGeomDB->GetGlobFrame( m_VmId[k], frVzmF) && bOkF ;
|
||||
ExecLineVmill( m_VmId[k], ptNoseI, vtDirI, vtAuxI, vFrVzmI[k], ptNoseF, vtDirF, vtAuxF, frVzmF) ;
|
||||
// salvo riferimento per prossimo inizio
|
||||
vFrVzmI[k] = frVzmF ;
|
||||
}
|
||||
// aggiorno prossimo inizio
|
||||
ptNoseI = ptNoseF ;
|
||||
vtDirI = vtDirF ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1046,11 +1051,11 @@ Simulator::GetHeadCurrPosDirAux( Point3d& ptH, Vector3d& vtH, Vector3d& vtA)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Simulator::ExecLineVmill( const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
|
||||
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF)
|
||||
Simulator::ExecLineVmill( int nVmId, const Point3d& ptHi, const Vector3d& vtHi, const Vector3d& vtAi, const Frame3d& frVzmI,
|
||||
const Point3d& ptHf, const Vector3d& vtHf, const Vector3d& vtAf, const Frame3d& frVzmF)
|
||||
{
|
||||
// Recupero Zmap
|
||||
IVolZmap* pVZM = GetVolZmap( m_pGeomDB->GetGeoObj( m_nVmId)) ;
|
||||
IVolZmap* pVZM = GetVolZmap( m_pGeomDB->GetGeoObj( nVmId)) ;
|
||||
if ( pVZM == nullptr)
|
||||
return false ;
|
||||
// Porto gli estremi nel riferimento opportuno dello Zmap
|
||||
@@ -1145,9 +1150,7 @@ Simulator::OnDispositionStart( int nOpId, int nOpInd, int nPhase,
|
||||
// chiamo la funzione di inizio disposizione
|
||||
bOk = bOk && m_pMachine->LuaCallFunction( ON_SIMUL_DISPOSITION_START) ;
|
||||
// recupero i dati di ritorno
|
||||
int nVmId = GDB_ID_NULL ;
|
||||
m_pMachine->LuaGetGlobVar( GLOB_VAR + GVAR_VMILL, nVmId) ;
|
||||
m_nVmId = nVmId ;
|
||||
m_pMachine->LuaGetGlobVar( GLOB_VAR + GVAR_VMILL, m_VmId) ;
|
||||
// forzo aggiornamento posizione assi (possono essere stati mossi nello script)
|
||||
UpdateAxesPos() ;
|
||||
return bOk ;
|
||||
@@ -1163,9 +1166,7 @@ Simulator::OnDispositionEnd( void)
|
||||
// chiamo la funzione di fine disposizione
|
||||
bool bOk = m_pMachine->LuaCallFunction( ON_SIMUL_DISPOSITION_END) ;
|
||||
// recupero i dati di ritorno
|
||||
int nVmId = GDB_ID_NULL ;
|
||||
m_pMachine->LuaGetGlobVar( GLOB_VAR + GVAR_VMILL, nVmId) ;
|
||||
m_nVmId = nVmId ;
|
||||
m_pMachine->LuaGetGlobVar( GLOB_VAR + GVAR_VMILL, m_VmId) ;
|
||||
// forzo aggiornamento posizione assi (possono essere stati mossi nello script)
|
||||
UpdateAxesPos() ;
|
||||
return bOk ;
|
||||
|
||||
Reference in New Issue
Block a user