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
BIN
View File
Binary file not shown.
+3 -2
View File
@@ -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 ;
+3
View File
@@ -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 ;
+12
View File
@@ -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
View File
@@ -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
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 ;
}
}
+1
View File
@@ -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
View File
@@ -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
View File
@@ -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