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:
Dario Sassi
2016-05-22 17:07:41 +00:00
parent 086af445e5
commit 061e7a26a3
13 changed files with 233 additions and 90 deletions
+82 -28
View File
@@ -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 ;