EgtMachKernel 1.6r6 :
- corretto errore di mancata scrittura di m_dExtSawArcMinRad in dati generali DB lavorazioni - aggiunte funzioni per conoscere utensile caricato su testa/uscita dati e per scaricarlo - corretta impostazione assi e verifica corse per Rise di lavorazione precedente - su inizio fine movimento si richiamano sempre i relativi script indipendentemente dal valore del flag.
This commit is contained in:
+82
-28
@@ -260,17 +260,10 @@ Simulator::Move( int& nStatus)
|
||||
}
|
||||
|
||||
// Se inizio di nuova entità
|
||||
if ( m_nEntId != GDB_ID_NULL && m_dCoeff < EPS_ZERO) {
|
||||
++ m_nEntInd ;
|
||||
// richiamo gestione evento inizio entità
|
||||
if ( ! OnMoveStart()) {
|
||||
nStatus = MCH_SIM_ERR ;
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
bool bNewEnt = ( m_nEntId != GDB_ID_NULL && m_dCoeff < EPS_ZERO) ;
|
||||
|
||||
// Cerco prossima posizione su interpolazione corrente
|
||||
CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( m_nEntId)) ;
|
||||
// Recupero posizione finale
|
||||
const CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( m_nEntId)) ;
|
||||
if ( pCamData == nullptr) {
|
||||
nStatus = MCH_SIM_ERR ;
|
||||
return false ;
|
||||
@@ -297,6 +290,17 @@ Simulator::Move( int& nStatus)
|
||||
const DBLVECTOR& AxesEnd = pCamData->GetAxesVal() ;
|
||||
// Tipo di movimento
|
||||
int nMoveType = pCamData->GetMoveType() ;
|
||||
|
||||
// Eventuale gestione evento inizio entità
|
||||
if ( bNewEnt) {
|
||||
++ m_nEntInd ;
|
||||
if ( ! OnMoveStart( pCamData)) {
|
||||
nStatus = MCH_SIM_ERR ;
|
||||
return false ;
|
||||
}
|
||||
bNewEnt = false ;
|
||||
}
|
||||
|
||||
// Calcolo distanza di movimento
|
||||
double dSqDist = 0 ;
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) {
|
||||
@@ -308,6 +312,7 @@ Simulator::Move( int& nStatus)
|
||||
m_dCoeff += ( nMoveType == 0 ? 4 : 1) * m_dStep / dDist ;
|
||||
if ( m_dCoeff > 1)
|
||||
m_dCoeff = 1 ;
|
||||
|
||||
// Eseguo movimento rapido o lineare
|
||||
if ( nMoveType != 2 && nMoveType != 3) {
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i) {
|
||||
@@ -331,6 +336,12 @@ Simulator::Move( int& nStatus)
|
||||
}
|
||||
}
|
||||
|
||||
// Muovo eventuali assi ausiliari
|
||||
for ( size_t i = 0 ; i < m_AuxAxesName.size() ; ++ i) {
|
||||
double dVal = m_AuxAxesVal[i] * ( 1 - m_dCoeff) + m_AuxAxesEnd[i] * m_dCoeff ;
|
||||
m_pMachine->SetAxisPos( m_AuxAxesName[i], dVal) ;
|
||||
}
|
||||
|
||||
// Se arrivato a fine interpolazione movimento, salvo posizioni e segnalo
|
||||
if ( m_dCoeff > 0.999) {
|
||||
for ( size_t i = 0 ; i < m_AxesName.size() ; ++ i)
|
||||
@@ -469,6 +480,11 @@ Simulator::UpdateTool( bool bForced)
|
||||
if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit))
|
||||
return false ;
|
||||
m_sTool = sTool ;
|
||||
// imposto variabili per script
|
||||
if ( ! m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, m_sTool) ||
|
||||
! m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, sHead) ||
|
||||
! m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, nExit))
|
||||
return false ;
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
@@ -482,6 +498,11 @@ Simulator::UpdateTool( bool bForced)
|
||||
if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit))
|
||||
return false ;
|
||||
m_sTool = sTool ;
|
||||
// imposto variabili per script
|
||||
if ( ! m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, m_sTool) ||
|
||||
! m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, sHead) ||
|
||||
! m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, nExit))
|
||||
return false ;
|
||||
return true ;
|
||||
}
|
||||
return false ;
|
||||
@@ -566,7 +587,7 @@ Simulator::OnMachiningStart( int nOpId, int nOpInd)
|
||||
// verifico esistenza funzione
|
||||
if ( ! m_pMachine->LuaExistsFunction( ON_SIMUL_MACHINING_START))
|
||||
return true ;
|
||||
// assegno identificativo e indice disposizione
|
||||
// assegno identificativo e indice lavorazione
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHID, nOpId) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHIND, nOpInd) ;
|
||||
// chiamo la funzione di inizio disposizione
|
||||
@@ -615,25 +636,65 @@ Simulator::OnPathEnd( void)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Simulator::OnMoveStart( void)
|
||||
Simulator::OnMoveStart( const CamData* pCamData)
|
||||
{
|
||||
// verifico richiesta chiamata funzione
|
||||
CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( m_nEntId)) ;
|
||||
if ( pCamData == nullptr)
|
||||
return false ;
|
||||
int nFlag = pCamData->GetFlag() ;
|
||||
if ( nFlag < MIN_CALL_SIMUL_MOVE)
|
||||
return true ;
|
||||
// assegno dati
|
||||
// pulisco dati assi ausiliari
|
||||
m_AuxAxesName.clear() ;
|
||||
m_AuxAxesVal.clear() ;
|
||||
m_AuxAxesEnd.clear() ;
|
||||
|
||||
// recupero e assegno i dati
|
||||
// dati generali
|
||||
bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVEID, m_nEntId) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVEIND, m_nEntInd) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, pCamData->GetMoveType()) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, pCamData->GetFlag()) ;
|
||||
// valore degli assi all'inizio e alla fine del movimento
|
||||
int nNumAxes = int( m_AxesName.size()) ;
|
||||
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]) ;
|
||||
}
|
||||
else {
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisPrev(i)) ;
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ;
|
||||
}
|
||||
}
|
||||
// reset numero assi ausiliari
|
||||
bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_AUXAXES) ;
|
||||
|
||||
// verifico esistenza funzione
|
||||
if ( ! m_pMachine->LuaExistsFunction( ON_SIMUL_MOVE_START))
|
||||
return true ;
|
||||
// chiamo la funzione
|
||||
bOk = bOk && m_pMachine->LuaCallFunction( ON_SIMUL_MOVE_START) ;
|
||||
if ( ! bOk)
|
||||
return false ;
|
||||
|
||||
// recupero i dati di ritorno
|
||||
int nNumAuxAxes = 0 ;
|
||||
if ( ! m_pMachine->LuaGetGlobVar( GLOB_VAR + GVAR_AUXAXES, nNumAuxAxes) || nNumAuxAxes == 0)
|
||||
return true ;
|
||||
m_AuxAxesName.reserve( nNumAuxAxes) ;
|
||||
m_AuxAxesVal.reserve( nNumAuxAxes) ;
|
||||
m_AuxAxesEnd.reserve( nNumAuxAxes) ;
|
||||
for ( int i = 1 ; i <= nNumAuxAxes && bOk ; ++ i) {
|
||||
string sName ; double dVal ; double dEnd ;
|
||||
string sAuxAxVal = GLOB_VAR + GVAR_AN ; ReplaceString( sAuxAxVal, "N", ToString( i)) ;
|
||||
string sAuxAxTok = GLOB_VAR + GVAR_ANT ; ReplaceString( sAuxAxTok, "N", ToString( i)) ;
|
||||
if ( m_pMachine->LuaGetGlobVar( sAuxAxTok, sName) &&
|
||||
m_pMachine->GetAxisPos( sName, dVal) &&
|
||||
m_pMachine->LuaGetGlobVar( sAuxAxVal, dEnd)) {
|
||||
m_AuxAxesName.emplace_back( sName) ;
|
||||
m_AuxAxesVal.emplace_back( dVal) ;
|
||||
m_AuxAxesEnd.emplace_back( dEnd) ;
|
||||
}
|
||||
else
|
||||
bOk = false ;
|
||||
}
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
@@ -641,13 +702,6 @@ Simulator::OnMoveStart( void)
|
||||
bool
|
||||
Simulator::OnMoveEnd( void)
|
||||
{
|
||||
// verifico richiesta chiamata funzione
|
||||
CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( m_nEntId)) ;
|
||||
if ( pCamData == nullptr)
|
||||
return false ;
|
||||
int nFlag = pCamData->GetFlag() ;
|
||||
if ( nFlag < MIN_CALL_SIMUL_MOVE)
|
||||
return true ;
|
||||
// verifico esistenza funzione
|
||||
if ( ! m_pMachine->LuaExistsFunction( ON_SIMUL_MOVE_END))
|
||||
return true ;
|
||||
|
||||
Reference in New Issue
Block a user