EgtMachKernel :

- correzioni per movimenti in rapido con robot.
This commit is contained in:
Dario Sassi
2025-04-30 11:21:23 +02:00
parent af5522547c
commit 3b93e47fe7
+9 -8
View File
@@ -43,7 +43,7 @@ using namespace std ;
//----------------------------------------------------------------------------
const double MAX_DIST_RAW = 200.0 ;
const double MAX_ROBOT_G0_LEN = 299.0 ;
const double MAX_ROBOT_G0_LEN = 101.0 ;
//----------------------------------------------------------------------------
bool
@@ -3721,15 +3721,16 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta, int nClPathId, int nToMinM
if ( vAxVal.size() < 6)
return false ;
// verifico se richiesta Zmax
bool bZmax = ( dDelta < 0) ;
bool bZmax = ( ! isfinite( dDelta)) ;
// calcolo gli assi (compresa verifica corse)
double dNewDeltaZ ;
Point3d ptEnd = pCamData->GetEndPoint() ;
Vector3d vtTool = pCamData->GetToolDir() ;
Vector3d vtAux = pCamData->GetAuxDir() ;
bOk = CalcRobotAxesAbovePos( ptEnd, vtTool, vtAux, dDelta, vAxVal, &dNewDeltaZ) ;
DBLVECTOR vAxRise = vAxVal ;
double dNewDeltaZ ;
bOk = CalcRobotAxesAbovePos( ptEnd, vtTool, vtAux, dDelta, vAxRise, &dNewDeltaZ) ;
// assegno i dati
pCam->SetAxes( ( bOk ? CamData::AS_OK : CamData::AS_OUTSTROKE), vAxVal) ;
pCam->SetAxes( ( bOk ? CamData::AS_OK : CamData::AS_OUTSTROKE), vAxRise) ;
pCam->SetMoveType( 0) ;
pCam->SetFeed( 0) ;
pCam->SetFlag( ( bZmax ? 3 : 0)) ;
@@ -3737,7 +3738,7 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta, int nClPathId, int nToMinM
// associo questo oggetto a quello geometrico
m_pGeomDB->SetUserObj( nId, Release( pCam)) ;
// aggiungo eventuali posizioni intermedie per garantire movimento lineare entro tolleranze
int nStep = 1 + int( dNewDeltaZ / MAX_ROBOT_G0_LEN) ;
int nStep = 1 + int( ( dNewDeltaZ - EPS_SMALL) / MAX_ROBOT_G0_LEN) ;
double dStep = dNewDeltaZ / nStep ;
for ( int i = 1 ; i < nStep ; ++ i) {
// copio l'entità
@@ -3988,7 +3989,7 @@ Operation::AddRobotClimb( int nEntId, double dDeltaZ)
pCdEnt->SetFlag( 2) ;
pCdEnt->SetFlag2( ( bZmax ? 1 : 0)) ;
// aggiungo eventuali posizioni intermedie per garantire movimento lineare entro tolleranze
int nStep = 1 + int( dNewDeltaZ / MAX_ROBOT_G0_LEN) ;
int nStep = 1 + int( ( dNewDeltaZ - EPS_SMALL) / MAX_ROBOT_G0_LEN) ;
double dStep = dNewDeltaZ / nStep ;
for ( int i = 1 ; i < nStep ; ++ i) {
// copio l'entità
@@ -4023,7 +4024,7 @@ Operation::CalcRobotAxesAbovePos( const Point3d& ptP, const Vector3d& vtT, const
return false ;
}
// se DeltaZ non specificata vado a Zmax
if ( dDeltaZ < 0 ) {
if ( ! isfinite( dDeltaZ)) {
// recupero quota tavola
Point3d ptRef1 ;
pMch->GetCurrTableRef1( ptRef1) ;