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:
Binary file not shown.
+3
-2
@@ -526,8 +526,9 @@ Generator::ProcessToolData( void)
|
||||
if ( ! m_pMchMgr->SetCurrMachining( nOpId))
|
||||
return false ;
|
||||
// Recupero l'utensile della lavorazione corrente
|
||||
string sTool ;
|
||||
if ( ! m_pMchMgr->GetMachiningParam( MPA_TOOL, sTool))
|
||||
string sTuuid, sTool ;
|
||||
if ( ! m_pMchMgr->GetMachiningParam( MPA_TUUID, sTuuid) ||
|
||||
! m_pMchMgr->TdbGetToolFromUUID( sTuuid, sTool))
|
||||
return false ;
|
||||
// Recupero i dati dell'utensile
|
||||
MyToolData Tdata ;
|
||||
|
||||
@@ -47,6 +47,9 @@ Head::Clone( void) const
|
||||
pHead->m_nType = m_nType ;
|
||||
pHead->m_vsHSet = m_vsHSet ;
|
||||
pHead->m_vtADir = m_vtADir ;
|
||||
pHead->m_dRot1W = m_dRot1W ;
|
||||
pHead->m_Rot2Stroke = m_Rot2Stroke ;
|
||||
pHead->m_nSolCh = m_nSolCh ;
|
||||
}
|
||||
catch( ...) {
|
||||
delete pHead ;
|
||||
|
||||
@@ -583,6 +583,12 @@ MachMgr::GetPhaseDisposition( int nPhase) const
|
||||
bool
|
||||
MachMgr::DispositionSpecialApply( int nId, bool bRecalc)
|
||||
{
|
||||
// verifico sia attiva
|
||||
bool bActive ;
|
||||
if ( ! GetOperationMode( nId, bActive))
|
||||
return false ;
|
||||
if ( ! bActive)
|
||||
return true ;
|
||||
// recupero la disposizione
|
||||
Disposition* pDisp = ::GetDisposition( m_pGeomDB->GetUserObj( nId)) ;
|
||||
if ( pDisp == nullptr)
|
||||
@@ -898,6 +904,12 @@ MachMgr::MachiningApply( bool bRecalc)
|
||||
int nCurrMchId = GetCurrMachining() ;
|
||||
if ( nCurrMchId == GDB_ID_NULL)
|
||||
return false ;
|
||||
// verifico sia attiva
|
||||
bool bActive ;
|
||||
if ( ! GetOperationMode( nCurrMchId, bActive))
|
||||
return false ;
|
||||
if ( ! bActive)
|
||||
return true ;
|
||||
// ne recupero il gestore
|
||||
Machining* pMch = GetMachining( m_pGeomDB->GetUserObj( nCurrMchId)) ;
|
||||
if ( pMch == nullptr)
|
||||
|
||||
+3
-3
@@ -492,8 +492,8 @@ Machine::IsKinematicRotAxisBlocked( int nInd) const
|
||||
bool
|
||||
Machine::SetSolCh( int nScc)
|
||||
{
|
||||
// se standard o suo opposto
|
||||
if ( nScc == MCH_SCC_STD || nScc == MCH_SCC_OPPOSITE) {
|
||||
// se standard o nullo o suo opposto
|
||||
if ( nScc == MCH_SCC_STD || nScc == MCH_SCC_NONE || nScc == MCH_SCC_OPPOSITE) {
|
||||
// recupero i dati della testa
|
||||
Head* pHead = GetHead( m_nCalcHeadId) ;
|
||||
if ( pHead == nullptr) {
|
||||
@@ -502,7 +502,7 @@ Machine::SetSolCh( int nScc)
|
||||
}
|
||||
// assegno il criterio definito nella testa (standard)
|
||||
m_nCalcSolCh = pHead->GetSolCh() ;
|
||||
if ( nScc == MCH_SCC_STD)
|
||||
if ( nScc == MCH_SCC_STD || nScc == MCH_SCC_NONE)
|
||||
return true ;
|
||||
// essendo opposto, devo invertirlo
|
||||
switch ( m_nCalcSolCh) {
|
||||
|
||||
+117
-1
@@ -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 ;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,7 @@ class Operation : public IUserObj
|
||||
bool AddHome( void) ;
|
||||
bool CalcDeltaZForHeadRotation( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd, double& dDeltaZ) ;
|
||||
bool TestCollisionAvoid( const DBLVECTOR& vAxStart, const DBLVECTOR& vAxEnd) ;
|
||||
bool SpecialMoveZup( Vector3d& vtTool, DBLVECTOR& vAx, bool& bModif) ;
|
||||
|
||||
protected :
|
||||
int m_nOwnerId ; // identificativo dell'oggetto geometrico possessore
|
||||
|
||||
+9
-8
@@ -110,6 +110,7 @@ static const std::string GVAR_R3N = ".R3n" ; // (string) nome del t
|
||||
static const std::string GVAR_R4N = ".R4n" ; // (string) nome del quarto asse rotante
|
||||
static const std::string GVAR_MASK = ".MASK" ; // (int) mask associato ai movimenti in rapido
|
||||
static const std::string GVAR_FLAG = ".FLAG" ; // (int) flag associato ad ogni movimento
|
||||
static const std::string GVAR_TDIR = ".TDIR" ; // (Vector3d)versore utensile
|
||||
static const std::string GVAR_AUXAXES = ".AuxAxes" ; // (int) numero assi ausiliari per simulazione
|
||||
static const std::string GVAR_AN = ".AN" ; // (num) valore del N-esimo asse ausiliario per simulazione
|
||||
static const std::string GVAR_ANN = ".ANn" ; // (string) nome del N-esimo asse ausiliario per simulazione
|
||||
@@ -154,16 +155,16 @@ static const int MIN_CALL_SIMUL_MOVE = 1000 ;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
inline std::string
|
||||
GetGlobVarAxisValue( int nAx)
|
||||
GetGlobVarAxisValue( int nAx, const std::string& sVar = GLOB_VAR)
|
||||
{
|
||||
switch ( nAx) {
|
||||
case 1 : return ( GLOB_VAR + GVAR_L1) ;
|
||||
case 2 : return ( GLOB_VAR + GVAR_L2) ;
|
||||
case 3 : return ( GLOB_VAR + GVAR_L3) ;
|
||||
case 4 : return ( GLOB_VAR + GVAR_R1) ;
|
||||
case 5 : return ( GLOB_VAR + GVAR_R2) ;
|
||||
case 6 : return ( GLOB_VAR + GVAR_R3) ;
|
||||
case 7 : return ( GLOB_VAR + GVAR_R4) ;
|
||||
case 1 : return ( sVar + GVAR_L1) ;
|
||||
case 2 : return ( sVar + GVAR_L2) ;
|
||||
case 3 : return ( sVar + GVAR_L3) ;
|
||||
case 4 : return ( sVar + GVAR_R1) ;
|
||||
case 5 : return ( sVar + GVAR_R2) ;
|
||||
case 6 : return ( sVar + GVAR_R3) ;
|
||||
case 7 : return ( sVar + GVAR_R4) ;
|
||||
default : return "" ;
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -834,12 +834,12 @@ Simulator::OnMoveStart( const CamData* pCamData)
|
||||
const DBLVECTOR& AxesEnd = pCamData->GetAxesVal() ;
|
||||
for ( int i = 1 ; i <= MAX_AXES ; ++ i) {
|
||||
if ( i <= nNumAxes) {
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisPrev(i), m_AxesVal[i-1]) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisPrev( i), m_AxesVal[i-1]) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue( i), AxesEnd[i-1]) ;
|
||||
}
|
||||
else {
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisPrev(i)) ;
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ;
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisPrev( i)) ;
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue( i)) ;
|
||||
}
|
||||
}
|
||||
// reset numero assi ausiliari
|
||||
|
||||
Reference in New Issue
Block a user