EgtMachKernel 1.6w5 :

- in generazione corretta creazione elenco utensili (ora si usa TUUID)
- in Head corretta Clone
- per SCC (criterio scelta soluzione) ora NONE è equivalente a STANDARD
- si esegue Apply sulle operazioni solo se attive
- aggiunta gestione da script OnSpecialMoveUp per movimenti speciali a Z alta.
This commit is contained in:
Dario Sassi
2016-11-29 08:14:44 +00:00
parent 30c0ee8719
commit 3bef4560fd
9 changed files with 152 additions and 18 deletions
+117 -1
View File
@@ -16,6 +16,7 @@
#include "DllMain.h"
#include "Operation.h"
#include "MachMgr.h"
#include "OutputConst.h"
#include "/EgtDev/Include/EGkAngle.h"
#include "/EgtDev/Include/EGkGeoPoint3d.h"
#include "/EgtDev/Include/EGkCurveLine.h"
@@ -995,6 +996,17 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// modifico quella originale (è la prima del percorso)
DBLVECTOR vAxNew = vAxCurr ;
vAxNew[2] = vAxPrev[2] ;
// eventuale aggiustamenti speciali dipendenti dalla macchina
Vector3d vtTool = pCamData->GetToolDir() ;
DBLVECTOR vAxTmp = vAxNew ;
bool bModif ;
if ( ! SpecialMoveZup( vtTool, vAxTmp, bModif))
return false ;
if ( bModif) {
pCamData->SetToolDir( vtTool) ;
vAxNew = vAxTmp ;
}
// applico le modifiche
pCamData->SetAxes( CamData::AS_OK, vAxNew) ;
pCamData->ChangeAxesMask( CamData::MSK_L1 | CamData::MSK_L2 | CamData::MSK_R1 | CamData::MSK_R2 | CamData::MSK_R3) ;
pCamData->SetFlag( 2) ;
@@ -1022,8 +1034,32 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// modifico questa entità
DBLVECTOR vAxNew1 = vAxPrev ;
vAxNew1[2] = dHomeZ ;
int nMask = CamData::MSK_L3 ;
// eventuali aggiustamenti speciali dipendenti dalla macchina
Vector3d vtTool = pCamData->GetToolDir() ;
DBLVECTOR vAxTmp = vAxNew1 ;
bool bModif ;
if ( ! SpecialMoveZup( vtTool, vAxTmp, bModif))
return false ;
if ( bModif) {
pCamData->SetToolDir( vtTool) ;
if ( vAxNew1.size() >= 4 && abs( vAxTmp[3] - vAxNew1[3]) > EPS_ANG_SMALL) {
vAxCurr[3] = vAxNew1[3] ;
nMask |= CamData::MSK_R1 ;
}
if ( vAxNew1.size() >= 5 && abs( vAxTmp[4] - vAxNew1[4]) > EPS_ANG_SMALL) {
vAxCurr[4] = vAxNew1[4] ;
nMask |= CamData::MSK_R2 ;
}
if ( vAxNew1.size() >= 6 && abs( vAxTmp[5] - vAxNew1[5]) > EPS_ANG_SMALL) {
vAxCurr[5] = vAxNew1[5] ;
nMask |= CamData::MSK_R3 ;
}
vAxNew1 = vAxTmp ;
}
// applico le modifiche
pNew1CamData->SetAxes( CamData::AS_OK, vAxNew1) ;
pNew1CamData->ChangeAxesMask( CamData::MSK_L3) ;
pNew1CamData->ChangeAxesMask( nMask) ;
pNew1CamData->SetFlag( 0) ;
// spostamento sopra inizio percorso corrente
// copio l'entità
@@ -1063,6 +1099,17 @@ Operation::AdjustOneStartMovement( int nClPathId, const DBLVECTOR& vAxPrev, bool
// modifico quella originale (è la prima del percorso)
DBLVECTOR vAxNew = vAxCurr ;
vAxNew[2] = vAxPrev[2] ;
// eventuali aggiustamenti speciali dipendenti dalla macchina
Vector3d vtTool = pCamData->GetToolDir() ;
DBLVECTOR vAxTmp = vAxNew ;
bool bModif ;
if ( ! SpecialMoveZup( vtTool, vAxTmp, bModif))
return false ;
if ( bModif) {
pCamData->SetToolDir( vtTool) ;
vAxNew = vAxTmp ;
}
// applico le modifiche
pCamData->SetAxes( CamData::AS_OK, vAxNew) ;
pCamData->ChangeAxesMask( CamData::MSK_L1 | CamData::MSK_L2 | CamData::MSK_R1 | CamData::MSK_R2 | CamData::MSK_R3) ;
pCamData->SetFlag( 2) ;
@@ -1140,11 +1187,22 @@ Operation::AddRise( DBLVECTOR& vAxVal, double dDelta)
}
// altrimenti uso la Z home
else {
// recupero posizione home
DBLVECTOR vAxHome ;
m_pMchMgr->GetAllCalcAxesHomePos( vAxHome) ;
vAxVal[2] = vAxHome[2] ;
nFlag = 3 ; // movimento a Zmax
}
// eventuale aggiustamenti speciali dipendenti dalla macchina
Vector3d vtTool = pCamData->GetToolDir() ;
DBLVECTOR vAxTmp = vAxVal ;
bool bModif ;
if ( ! SpecialMoveZup( vtTool, vAxTmp, bModif))
return false ;
if ( bModif) {
pCamData->SetToolDir( vtTool) ;
vAxVal = vAxTmp ;
}
// verifico extra-corsa dell'asse Z
double dL1 = vAxVal[0] ;
double dL2 = vAxVal[1] ;
@@ -1416,3 +1474,61 @@ Operation::TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEn
return ( ! bCollide) ;
}
//----------------------------------------------------------------------------
bool
Operation::SpecialMoveZup( Vector3d& vtTool, DBLVECTOR& vAx, bool& bModif)
{
// recupero la macchina corrente
Machine* pMch = m_pMchMgr->GetCurrMachine() ;
if ( pMch == nullptr)
return false ;
// costanti
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
static const string EVAR_ERROR = ".ERR" ; // OUT (int) codice di errore ( 0 = ok)
static const string EVAR_MODIF = ".MODIF" ; // OUT (bool) flag di modifica effettuata
static const string ON_SPECIAL_MOVEZUP = "OnSpecialMoveZup" ;
// eseguo l'azione
if ( pMch->LuaExistsFunction( ON_SPECIAL_MOVEZUP)) {
bool bOk = true ;
int nErr = 99 ;
// imposto valori parametri
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TOOL, GetToolName()) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_HEAD, GetHeadName()) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_EXIT, GetExitNbr()) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TCPOS, GetToolTcPos()) ;
// direzione utensile
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + GVAR_TDIR, vtTool) ;
// valore degli assi
int nNumAxes = int( vAx.size()) ;
for ( int i = 1 ; i <= MAX_AXES ; ++ i) {
if ( i <= nNumAxes)
bOk = bOk && pMch->LuaSetGlobVar( GetGlobVarAxisValue( i, EMC_VAR), vAx[i-1]) ;
else
bOk = bOk && pMch->LuaResetGlobVar( GetGlobVarAxisValue( i, EMC_VAR)) ;
}
// eseguo
bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_MOVEZUP) ;
// recupero valori parametri obbligatori
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_MODIF, bModif) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + GVAR_TDIR, vtTool) ;
for ( int i = 1 ; i <= nNumAxes ; ++ i)
bOk = bOk && pMch->LuaGetGlobVar( GetGlobVarAxisValue( i, EMC_VAR), vAx[i-1]) ;
// reset
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
// segnalo errori
if ( nErr != 0) {
bOk = false ;
string sOut = " Error in " + ON_SPECIAL_MOVEZUP + " (" + ToString( nErr) + ")" ;
LOG_INFO( GetEMkLogger(), sOut.c_str())
}
return bOk ;
}
else {
bModif = false ;
return true ;
}
}