EgtMachKernel :
- aggiunta lavorazione di mortasatura - aggiunt agestione angolo indeterminato su secondo asse rotante.
This commit is contained in:
+45
-19
@@ -51,6 +51,8 @@ Simulator::Simulator( void)
|
||||
m_nAuxETot = 0 ;
|
||||
m_nAuxEInd = 0 ;
|
||||
m_nVmId = GDB_ID_NULL ;
|
||||
m_dVmTdOffs = 0 ;
|
||||
m_dVmAdOffs = 0 ;
|
||||
m_bEnabAxes = true ;
|
||||
m_AxesName.reserve( 8) ;
|
||||
m_AxesToken.reserve( 8) ;
|
||||
@@ -401,6 +403,23 @@ Simulator::UpdateTool( bool bFirst)
|
||||
// aggiorno gli assi macchina
|
||||
if ( ! UpdateAxes())
|
||||
return false ;
|
||||
// eventuali offset per Vmill (per adattare lo ZeroT macchina con quello di Zmap)
|
||||
int nToolType ; m_pMchMgr->TdbGetCurrToolParam( TPA_TYPE, nToolType) ;
|
||||
if ( nToolType == TT_MORTISE_STD) {
|
||||
double dThick ; m_pMchMgr->TdbGetCurrToolParam( TPA_THICK, dThick) ;
|
||||
m_dVmTdOffs = 0 ;
|
||||
m_dVmAdOffs = 0.5 * dThick ;
|
||||
}
|
||||
else if ( nToolType == TT_SAW_STD || nToolType == TT_SAW_FLAT) {
|
||||
double dLen ; m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ;
|
||||
double dThick ; m_pMchMgr->TdbGetCurrToolParam( TPA_THICK, dThick) ;
|
||||
m_dVmTdOffs = - dLen + dThick ;
|
||||
m_dVmAdOffs = 0 ;
|
||||
}
|
||||
else {
|
||||
m_dVmTdOffs = 0 ;
|
||||
m_dVmAdOffs = 0 ;
|
||||
}
|
||||
// eventuale lancio script
|
||||
if ( ! OnToolSelect( m_sTool, sHead, nExit, sTcPos, bFirst))
|
||||
return false ;
|
||||
@@ -598,9 +617,11 @@ Simulator::FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus)
|
||||
nStatus = MCH_SIM_ERR ;
|
||||
return false ;
|
||||
}
|
||||
// aggiorno visualizzazione e breve pausa (200 ms)
|
||||
ExeDraw() ;
|
||||
Sleep( 200) ;
|
||||
// se non è inizio, aggiorno visualizzazione e breve pausa (200 ms)
|
||||
if ( nPhase != 1) {
|
||||
ExeDraw() ;
|
||||
Sleep( 200) ;
|
||||
}
|
||||
}
|
||||
}
|
||||
// passo alla operazione successiva
|
||||
@@ -830,8 +851,8 @@ Simulator::ManageMove( int& nStatus)
|
||||
m_dCoeff = 1 ;
|
||||
|
||||
// Posizione e direzione attuali dell'utensile e riferimento attuale del pezzo (per Vmill)
|
||||
Point3d ptNoseI ; Vector3d vtDirI ; Frame3d frVzmI ;
|
||||
bool bOkI = GetHeadCurrPosDir( ptNoseI, vtDirI) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmI) ;
|
||||
Point3d ptNoseI ; Vector3d vtDirI ; Vector3d vtAuxI ; Frame3d frVzmI ;
|
||||
bool bOkI = GetHeadCurrPosDirAux( ptNoseI, vtDirI, vtAuxI) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmI) ;
|
||||
|
||||
// Eseguo movimento rapido o lineare
|
||||
if ( nMoveType != 2 && nMoveType != 3) {
|
||||
@@ -842,9 +863,9 @@ Simulator::ManageMove( int& nStatus)
|
||||
}
|
||||
// eseguo eventuale Vmill
|
||||
if ( m_nVmId != GDB_ID_NULL) {
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Frame3d frVzmF ;
|
||||
bool bOkF = GetHeadCurrPosDir( ptNoseF, vtDirF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ; ;
|
||||
ExecVmillOnLine( ptNoseI, vtDirI, frVzmI, ptNoseF, vtDirF, frVzmF) ;
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ; Frame3d frVzmF ;
|
||||
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ; ;
|
||||
ExecVmillOnLine( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
|
||||
}
|
||||
}
|
||||
// Eseguo movimento su arco
|
||||
@@ -876,9 +897,9 @@ Simulator::ManageMove( int& nStatus)
|
||||
}
|
||||
// eseguo eventuale Vmill
|
||||
if ( m_nVmId != GDB_ID_NULL) {
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Frame3d frVzmF ;
|
||||
bool bOkF = GetHeadCurrPosDir( ptNoseF, vtDirF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ;
|
||||
ExecVmillOnLine( ptNoseI, vtDirI, frVzmI, ptNoseF, vtDirF, frVzmF) ;
|
||||
Point3d ptNoseF ; Vector3d vtDirF ; Vector3d vtAuxF ; Frame3d frVzmF ;
|
||||
bool bOkF = GetHeadCurrPosDirAux( ptNoseF, vtDirF, vtAuxF) && m_pGeomDB->GetGlobFrame( m_nVmId, frVzmF) ;
|
||||
ExecVmillOnLine( ptNoseI, vtDirI, vtAuxI, frVzmI, ptNoseF, vtDirF, vtAuxF, frVzmF) ;
|
||||
// aggiorno prossimo inizio
|
||||
ptNoseI = ptNoseF ;
|
||||
vtDirI = vtDirF ;
|
||||
@@ -934,7 +955,7 @@ Simulator::ManageMove( int& nStatus)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Simulator::GetHeadCurrPosDir( Point3d& ptH, Vector3d& vtH)
|
||||
Simulator::GetHeadCurrPosDirAux( Point3d& ptH, Vector3d& vtH, Vector3d& vtA)
|
||||
{
|
||||
// ci devono essere almeno i tre assi lineari
|
||||
if ( m_AxesName.size() < 3)
|
||||
@@ -950,13 +971,14 @@ Simulator::GetHeadCurrPosDir( Point3d& ptH, Vector3d& vtH)
|
||||
// determino posizione e orientamento della testa
|
||||
m_pMachine->GetNoseFromPositions( vLinAx[0], vLinAx[1], vLinAx[2], vRotAx, ptH) ;
|
||||
m_pMachine->GetToolDirFromAngles( vRotAx, vtH) ;
|
||||
m_pMachine->GetAuxDirFromAngles( vRotAx, vtA) ;
|
||||
return true ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Simulator::ExecVmillOnLine( const Point3d& ptHi, const Vector3d& vtHi, const Frame3d& frVzmI,
|
||||
const Point3d& ptHf, const Vector3d& vtHf, const Frame3d& frVzmF)
|
||||
Simulator::ExecVmillOnLine( 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)) ;
|
||||
@@ -965,13 +987,19 @@ Simulator::ExecVmillOnLine( const Point3d& ptHi, const Vector3d& vtHi, const Fra
|
||||
// Porto gli estremi nel riferimento opportuno dello Zmap
|
||||
Point3d ptHiL = ptHi ; ptHiL.ToLoc( frVzmI) ;
|
||||
Vector3d vtHiL = vtHi ; vtHiL.ToLoc( frVzmI) ;
|
||||
Vector3d vtAiL = vtAi ; vtAiL.ToLoc( frVzmI) ;
|
||||
Point3d ptHfL = ptHf ; ptHfL.ToLoc( frVzmF) ;
|
||||
Vector3d vtHfL = vtHf ; vtHfL.ToLoc( frVzmF) ;
|
||||
Vector3d vtAfL = vtAf ; vtAfL.ToLoc( frVzmI) ;
|
||||
// Eventuali offset
|
||||
ptHiL += m_dVmTdOffs * vtHiL + m_dVmAdOffs * vtAiL ;
|
||||
ptHfL += m_dVmTdOffs * vtHfL + m_dVmAdOffs * vtAfL ;
|
||||
// Log per debug
|
||||
//string sOut = "Pi=(" + ToString( ptHiL) + ") Vi=(" + ToString( vtHiL) + ") Pf=(" + ToString( ptHfL) + ") Vf=(" + ToString( vtHfL) + ")" ;
|
||||
//string sOut = "Pi=(" + ToString( ptHiL) + ") Vi=(" + ToString( vtHiL) + ") Ai=(" + ToString( vtAiL) +
|
||||
// ") Pf=(" + ToString( ptHfL) + ") Vf=(" + ToString( vtHfL) + ") Af=(" + ToString( vtAfL) + ")" ;
|
||||
//LOG_INFO( GetEMkLogger(), sOut.c_str())
|
||||
// Eseguo
|
||||
return pVZM->MillingStep( ptHiL, vtHiL, ptHfL, vtHfL) ;
|
||||
return pVZM->MillingStep( ptHiL, vtHiL, vtAiL, ptHfL, vtHfL, vtAfL) ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -1085,10 +1113,8 @@ Simulator::OnToolSelect( const string& sTool, const string& sHead, int nExit, co
|
||||
bool bOk = m_pMachine->LuaCallFunction( ON_SIMUL_TOOL_SELECT) ;
|
||||
// forzo aggiornamento posizione assi (possono essere stati mossi nello script)
|
||||
UpdateAxesPos() ;
|
||||
|
||||
// reset assi ausiliari
|
||||
// recupero i dati di ritorno per assi ausiliari
|
||||
ResetAuxAxes() ;
|
||||
// recupero i dati di ritorno
|
||||
int nNumAuxAxes = 0 ;
|
||||
if ( ! m_pMachine->LuaGetGlobVar( GLOB_VAR + GVAR_AUXAXES, nNumAuxAxes) || nNumAuxAxes == 0)
|
||||
return true ;
|
||||
|
||||
Reference in New Issue
Block a user