From 3bef4560fd243e836e12c8b52f10779eb889eae2 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Tue, 29 Nov 2016 08:14:44 +0000 Subject: [PATCH] =?UTF-8?q?EgtMachKernel=201.6w5=20:=20-=20in=20generazion?= =?UTF-8?q?e=20corretta=20creazione=20elenco=20utensili=20(ora=20si=20usa?= =?UTF-8?q?=20TUUID)=20-=20in=20Head=20corretta=20Clone=20-=20per=20SCC=20?= =?UTF-8?q?(criterio=20scelta=20soluzione)=20ora=20NONE=20=C3=A8=20equival?= =?UTF-8?q?ente=20a=20STANDARD=20-=20si=20esegue=20Apply=20sulle=20operazi?= =?UTF-8?q?oni=20solo=20se=20attive=20-=20aggiunta=20gestione=20da=20scrip?= =?UTF-8?q?t=20OnSpecialMoveUp=20per=20movimenti=20speciali=20a=20Z=20alta?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EgtMachKernel.rc | Bin 11782 -> 11782 bytes Generator.cpp | 5 +- Head.cpp | 3 ++ MachMgrOperations.cpp | 12 +++++ MachineCalc.cpp | 6 +-- Operation.cpp | 118 +++++++++++++++++++++++++++++++++++++++++- Operation.h | 1 + OutputConst.h | 17 +++--- Simulator.cpp | 8 +-- 9 files changed, 152 insertions(+), 18 deletions(-) diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index fbe08416ebddd3ba4969b0c8555d9c3e0ed85a64..64e6a3bc2039a9a15b121d12a37e9a2197099396 100644 GIT binary patch delta 97 zcmZpRX^YwLhmFy6^ItYwW=7M=j>5W|vxM9jH?QON0rG*u7nvrX5iEd9O=7{OSQ@Kh Hr8(RHQiUK= delta 97 zcmZpRX^YwLhmFx>^ItYwW=50Aj>5W|vxM9jH?QON0rG*u7nvrX5iEd9O=7{OSQ@Kh Hr8(RHQ1Kv2 diff --git a/Generator.cpp b/Generator.cpp index 439811f..5ff6997 100644 --- a/Generator.cpp +++ b/Generator.cpp @@ -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 ; diff --git a/Head.cpp b/Head.cpp index f3594d2..81fa5f6 100644 --- a/Head.cpp +++ b/Head.cpp @@ -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 ; diff --git a/MachMgrOperations.cpp b/MachMgrOperations.cpp index d1775c3..afa721f 100644 --- a/MachMgrOperations.cpp +++ b/MachMgrOperations.cpp @@ -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) diff --git a/MachineCalc.cpp b/MachineCalc.cpp index d83dc4c..517f93f 100644 --- a/MachineCalc.cpp +++ b/MachineCalc.cpp @@ -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) { diff --git a/Operation.cpp b/Operation.cpp index 0e70058..8ce6ba1 100644 --- a/Operation.cpp +++ b/Operation.cpp @@ -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 ; + } +} diff --git a/Operation.h b/Operation.h index e91b5ce..297d960 100644 --- a/Operation.h +++ b/Operation.h @@ -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 diff --git a/OutputConst.h b/OutputConst.h index 2ad4e0f..1a9d042 100644 --- a/OutputConst.h +++ b/OutputConst.h @@ -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 "" ; } } diff --git a/Simulator.cpp b/Simulator.cpp index 1d96543..27fde05 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -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