From d61450cf20f718292b8cb96a9e950a2ea9b422aa Mon Sep 17 00:00:00 2001 From: DarioS Date: Fri, 17 Jun 2022 07:39:24 +0200 Subject: [PATCH] EgtMachKernel 2.4f4 : - aggiunta lavorazione a tuffo (su inizio o fine) in mortasatura - aggiunta Distanza (per mortasatrici) a dati utensili. --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes Mortising.cpp | 130 ++++++++++++++++++++++++++++------------------- Mortising.h | 2 +- OutputConst.h | 1 + Processor.cpp | 9 +++- 5 files changed, 86 insertions(+), 56 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index ba388c4804f91cc2b06fc0cb96dcc25fb081edad..7b63d366e3d9b9992111ba2af7bfabd9a98877ce 100644 GIT binary patch delta 97 zcmewt{V#gMFE&P#&A-`fnHfzcKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUI`BbWdH delta 97 zcmewt{V#gMFE&Qw&A-`fnHh~IKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUD-Bai?9 diff --git a/Mortising.cpp b/Mortising.cpp index 05924dd..2acba5d 100644 --- a/Mortising.cpp +++ b/Mortising.cpp @@ -1291,8 +1291,12 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId) if ( FromString( ExtractInfo( m_Params.m_sUserNotes, "MaxElev="), dMaxElev) && dElev > dMaxElev) dElev = dMaxElev ; + // affondamento speciale da note untente + int nPlunge = 0 ; + FromString( ExtractInfo( m_Params.m_sUserNotes, "Plunge="), nPlunge) ; + // verifico che lo step dell'utensile sia sensato - double dOkStep = m_Params.m_dStep ; + double dOkStep = ( nPlunge != 0 ? m_Params.m_dStep : 0) ; const double MIN_ZSTEP = 1.0 ; if ( dOkStep >= EPS_SMALL && dOkStep < MIN_ZSTEP) { dOkStep = MIN_ZSTEP ; @@ -1380,7 +1384,7 @@ Mortising::ProcessPath( int nPathId, int nPvId, int nClId) SetAuxDir( vtAux) ; // Calcolo la mortasatura - if ( ! GenerateMortisingCl( pCompo, vtTool, dDepth, dElev, dOkStep)) + if ( ! GenerateMortisingCl( pCompo, vtTool, dDepth, dElev, dOkStep, nPlunge)) return false ; } @@ -1466,7 +1470,7 @@ Mortising::GenerateMortisingPv( int nPathId, const ICurveComposite* pCompo) //---------------------------------------------------------------------------- bool -Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep) +Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep, int nPlunge) { // estremi della curva composita Point3d ptStart ; pCompo->GetStartPoint( ptStart) ; @@ -1478,7 +1482,7 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v // determino se l'inizio dell'attacco è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione double dSafeZ = m_pMchMgr->GetCurrMachiningsMgr()->GetSafeZ() + m_pMchMgr->GetDeltaSafeZ( m_TParams.m_sHead) ; double dStartElev = 0 ; - Point3d ptLi = ptStart + vtTool * dDelta ; + Point3d ptLi = ( nPlunge != 2 ? ptStart : ptEnd) + vtTool * dDelta ; bool bUnderStart = GetPointUnderRaw( ptLi, vtTool, 0, GetRadiusForStartEndElevation(), m_TParams.m_dLen, false, dSafeZ, vtTool, dStartElev) ; // altrimenti ridetermino elevazione su inizio percorso di lavoro @@ -1487,14 +1491,14 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v // 1 -> punto approccio SetFlag( 1) ; - Point3d ptP1 = ptStart + vtTool * ( dDelta + dStartElev + dSafeZ) ; + Point3d ptP1 = ( nPlunge != 2 ? ptStart : ptEnd) + vtTool * ( dDelta + dStartElev + dSafeZ) ; if ( AddRapidStart( ptP1) == GDB_ID_NULL) return false ; SetFlag( 0) ; // 2 -> punto fuori (se diverso dal precedente) - if ( m_Params.m_dStartPos < dSafeZ) { - Point3d ptP2 = ptStart + vtTool * ( dDelta + m_Params.m_dStartPos) ; + if ( m_Params.m_dStartPos < dSafeZ - 10 * EPS_SMALL) { + Point3d ptP2 = ( nPlunge != 2 ? ptStart : ptEnd) + vtTool * ( dDelta + m_Params.m_dStartPos) ; if ( AddRapidMove( ptP2) == GDB_ID_NULL) return false ; } @@ -1508,56 +1512,76 @@ Mortising::GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& v // eseguo ciclo a seconda del tipo di step Point3d ptLast ; - switch ( m_Params.m_nStepType) { - default : // ZIGZAG - for ( int i = 1 ; i <= nStep ; ++ i) { - // 3 -> punto in affondamento - SetFeed( GetStartFeed()) ; - SetFlag( 0) ; - Point3d ptP3 = (( i % 2 == 1) ? ptStart : ptEnd) + ( dDelta - i * dStep) * vtTool ; - if ( AddLinearMove( ptP3) == GDB_ID_NULL) - return false ; - // 4 -> punto termine - SetFeed( GetFeed()) ; - SetFlag( 0) ; - ptLast = (( i % 2 == 1) ? ptEnd : ptStart) ; - Point3d ptP4 = ptLast + ( dDelta - i * dStep) * vtTool ; - if ( AddLinearMove( ptP4) == GDB_ID_NULL) - return false ; - } - break ; - case MORTISE_ST_ONEWAY : - for ( int i = 1 ; i <= nStep ; ++ i) { - // 3 -> punto in affondamento - SetFeed( GetStartFeed()) ; - SetFlag( 0) ; - Point3d ptP3 = ptStart + ( dDelta - i * dStep) * vtTool ; - if ( AddLinearMove( ptP3) == GDB_ID_NULL) - return false ; - // 4 -> punto termine - SetFeed( GetFeed()) ; - SetFlag( 0) ; - ptLast = ptEnd ; - Point3d ptP4 = ptLast + ( dDelta - i * dStep) * vtTool ; - if ( AddLinearMove( ptP4) == GDB_ID_NULL) - return false ; - // 5 -> ritorno sull'inizio, se non ultimo punto - if ( i < nStep) { - // retrocedo + if ( nPlunge == 1) { + // 3 -> punto in affondamento + SetFeed( GetStartFeed()) ; + SetFlag( 0) ; + Point3d ptP3 = ptStart ; + if ( AddLinearMove( ptP3) == GDB_ID_NULL) + return false ; + ptLast = ptP3 ; + } + else if ( nPlunge == 2) { + // 3 -> punto in affondamento + SetFeed( GetStartFeed()) ; + SetFlag( 0) ; + Point3d ptP3 = ptEnd ; + if ( AddLinearMove( ptP3) == GDB_ID_NULL) + return false ; + ptLast = ptP3 ; + } + else { + switch ( m_Params.m_nStepType) { + default : // ZIGZAG + for ( int i = 1 ; i <= nStep ; ++ i) { + // 3 -> punto in affondamento + SetFeed( GetStartFeed()) ; + SetFlag( 0) ; + Point3d ptP3 = (( i % 2 == 1) ? ptStart : ptEnd) + ( dDelta - i * dStep) * vtTool ; + if ( AddLinearMove( ptP3) == GDB_ID_NULL) + return false ; + // 4 -> punto termine SetFeed( GetFeed()) ; SetFlag( 0) ; - Point3d ptP5a = ptP4 + RETURN_DIST * vtTool ; - if ( AddLinearMove( ptP5a) == GDB_ID_NULL) - return false ; - // ritorno sopra inizio - SetFeed( GetFeed()) ; - SetFlag( 0) ; - Point3d ptP5b = ptP3 + RETURN_DIST * vtTool ; - if ( AddLinearMove( ptP5b) == GDB_ID_NULL) - return false ; + ptLast = (( i % 2 == 1) ? ptEnd : ptStart) ; + Point3d ptP4 = ptLast + ( dDelta - i * dStep) * vtTool ; + if ( AddLinearMove( ptP4) == GDB_ID_NULL) + return false ; } + break ; + case MORTISE_ST_ONEWAY : + for ( int i = 1 ; i <= nStep ; ++ i) { + // 3 -> punto in affondamento + SetFeed( GetStartFeed()) ; + SetFlag( 0) ; + Point3d ptP3 = ptStart + ( dDelta - i * dStep) * vtTool ; + if ( AddLinearMove( ptP3) == GDB_ID_NULL) + return false ; + // 4 -> punto termine + SetFeed( GetFeed()) ; + SetFlag( 0) ; + ptLast = ptEnd ; + Point3d ptP4 = ptLast + ( dDelta - i * dStep) * vtTool ; + if ( AddLinearMove( ptP4) == GDB_ID_NULL) + return false ; + // 5 -> ritorno sull'inizio, se non ultimo punto + if ( i < nStep) { + // retrocedo + SetFeed( GetFeed()) ; + SetFlag( 0) ; + Point3d ptP5a = ptP4 + RETURN_DIST * vtTool ; + if ( AddLinearMove( ptP5a) == GDB_ID_NULL) + return false ; + // ritorno sopra inizio + SetFeed( GetFeed()) ; + SetFlag( 0) ; + Point3d ptP5b = ptP3 + RETURN_DIST * vtTool ; + if ( AddLinearMove( ptP5b) == GDB_ID_NULL) + return false ; + } + } + break ; } - break ; } // determino se la fine dell'uscita è esattamente sotto il grezzo, nel qual caso ricalcolo l'elevazione diff --git a/Mortising.h b/Mortising.h index 73a69ae..094acfb 100644 --- a/Mortising.h +++ b/Mortising.h @@ -74,7 +74,7 @@ class Mortising : public Machining bool ProcessPath( int nPathId, int nPvId, int nClId) ; bool CalcPathElevation( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dRad, double dThick, double& dElev) const ; bool GenerateMortisingPv( int nPathId, const ICurveComposite* pCompo) ; - bool GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep) ; + bool GenerateMortisingCl( const ICurveComposite* pCompo, const Vector3d& vtTool, double dDepth, double dElev, double dOkStep, int nPlunge) ; double GetRadiusForStartEndElevation( void) const ; private : diff --git a/OutputConst.h b/OutputConst.h index 7bc0eaf..6398959 100644 --- a/OutputConst.h +++ b/OutputConst.h @@ -65,6 +65,7 @@ static const std::string GVAR_TDIAM = ".TDIAM" ; // (num) diametro static const std::string GVAR_TTOTDIAM = ".TTOTDIAM" ; // (num) diametro totale utensile static const std::string GVAR_TLEN = ".TLEN" ; // (num) lunghezza utensile static const std::string GVAR_TTOTLEN = ".TTOTLEN" ; // (num) lunghezza totale utensile +static const std::string GVAR_TDIST = ".TDIST" ; // (num) distanza utensile (per mortasatrice/sega a catena) static const std::string GVAR_TUSED = ".TUSED" ; // (bool) flag per indicare che l'utensile attrezzato è anche utilizzato static const std::string GVAR_SMAX = ".SMAX" ; // (num) massima speed utensile static const std::string GVAR_FIRST = ".FIRST" ; // (bool) flag per primo utensile diff --git a/Processor.cpp b/Processor.cpp index 9fa6494..b04a865 100644 --- a/Processor.cpp +++ b/Processor.cpp @@ -608,9 +608,10 @@ Processor::ProcessToolData( void) double dTDiam ; double dLen ; double dTLen ; + double dDist ; double dMaxSpeed ; MyToolData( void) - : sName(), sHead(), nExit( 0), sTcPos(), nComp(0), dDiam( 0), dLen( 0), dMaxSpeed( 0) {} + : sName(), sHead(), nExit( 0), sTcPos(), nComp(0), dDiam( 0), dLen( 0), dDist( 0), dMaxSpeed( 0) {} } ; typedef vector TDATAVECTOR ; TDATAVECTOR vTdata ; @@ -640,6 +641,7 @@ Processor::ProcessToolData( void) m_pMchMgr->TdbGetCurrToolParam( TPA_TOTDIAM, Tdata.dTDiam) ; m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, Tdata.dLen) ; m_pMchMgr->TdbGetCurrToolParam( TPA_TOTLEN, Tdata.dTLen) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_DIST, Tdata.dDist) ; m_pMchMgr->TdbGetCurrToolParam( TPA_MAXSPEED, Tdata.dMaxSpeed) ; vTdata.push_back( Tdata) ; } @@ -672,18 +674,20 @@ Processor::ProcessToolData( void) bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, nExit) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, sTcPos) ; if ( m_pMchMgr->TdbSetCurrTool( sTool)) { - int nComp ; double dDiam ; double dTDiam ; double dLen ; double dTLen ; double dMaxSpeed ; + int nComp ; double dDiam ; double dTDiam ; double dLen ; double dTLen ; double dDist ; double dMaxSpeed ; m_pMchMgr->TdbGetCurrToolParam( TPA_CORR, nComp) ; m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, dDiam) ; m_pMchMgr->TdbGetCurrToolParam( TPA_TOTDIAM, dTDiam) ; m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ; m_pMchMgr->TdbGetCurrToolParam( TPA_TOTLEN, dTLen) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_DIST, dDist) ; m_pMchMgr->TdbGetCurrToolParam( TPA_MAXSPEED, dMaxSpeed) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCOMP, nComp) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIAM, dDiam) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTDIAM, dTDiam) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, dLen) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTLEN, dTLen) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIST, dDist) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, dMaxSpeed) ; } bool bUsed = false ; @@ -722,6 +726,7 @@ Processor::ProcessToolData( void) bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTDIAM, vTdata[i].dTDiam) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, vTdata[i].dLen) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTLEN, vTdata[i].dTLen) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIST, vTdata[i].dDist) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, vTdata[i].dMaxSpeed) ; bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TUSED, true) ; // se esiste, chiamo la funzione di emissione dati utensile