EgtMachKernel 1.8f2 :

- aggiunte Update di lavorazioni e disposizione per ricalcolo assi macchina ecollegamenti.
This commit is contained in:
Dario Sassi
2017-06-17 16:55:44 +00:00
parent 88d87de77e
commit a4c7789a91
22 changed files with 232 additions and 50 deletions
+65 -45
View File
@@ -1036,6 +1036,10 @@ Disposition::SpecialApply( bool bRecalc)
m_bSomeByHand = false ;
m_sTcPos.clear() ;
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// costanti
static const string EMC_VAR = "EMC" ; // tabella variabili locali per calcolo
static const string EVAR_TABNAME = ".TABNAME" ; // IN (string) nome della tavola macchina
@@ -1054,54 +1058,70 @@ Disposition::SpecialApply( bool bRecalc)
if ( pMch == nullptr)
return false ;
// se non esiste la funzione, non devo fare alcunché
if ( ! pMch->LuaExistsFunction( ON_SPECIAL_APPLY))
return true ;
// eseguo l'azione
if ( pMch->LuaExistsFunction( ON_SPECIAL_APPLY)) {
bool bOk = true ;
int nErr = 99 ;
// verifico tavola
bOk = ( m_bTabOk || SetTable( m_sTabName)) ;
// imposto valori parametri
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TABNAME, m_sTabName) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_DISPID, m_nOwnerId) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, GetPhase()) ;
// eseguo
bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_APPLY, false) ;
// recupero valori parametri obbligatori
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_HEAD, m_sHead) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_EXIT, m_nExit) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SHIFTS, m_nShifts) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SBH, m_bSomeByHand) ;
// recupero valori parametri opzionali
if ( bOk)
pMch->LuaGetGlobVar( EMC_VAR + EVAR_TCPOS, m_sTcPos) ;
// reset
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
// segnalo errori
if ( nErr != 0) {
bOk = false ;
m_nShifts = - 1 ;
string sOut = " Error in " + ON_SPECIAL_APPLY + " (" + ToString( nErr) + ")" ;
m_pMchMgr->SetLastError( 2006, sOut) ;
}
// se disposizione vuota o errore, esco
if ( m_nShifts <= 0 || ! bOk)
return bOk ;
// calcolo assi macchina
if ( ! CalculateAxesValues( "")) {
m_pMchMgr->SetLastError( 2007, "Error in Disposition : axes values not calculable") ;
return false ;
}
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine di tutti
if ( ! AdjustStartEndMovements()) {
m_pMchMgr->SetLastError( 2008, "Error in Disposition : link movements not calculable") ;
return false ;
}
bool bOk = true ;
int nErr = 99 ;
// verifico tavola
bOk = ( m_bTabOk || SetTable( m_sTabName)) ;
// imposto valori parametri
bOk = bOk && pMch->LuaCreateGlobTable( EMC_VAR) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_TABNAME, m_sTabName) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_DISPID, m_nOwnerId) ;
bOk = bOk && pMch->LuaSetGlobVar( EMC_VAR + EVAR_PHASE, GetPhase()) ;
// eseguo
bOk = bOk && pMch->LuaCallFunction( ON_SPECIAL_APPLY, false) ;
// recupero valori parametri obbligatori
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_ERROR, nErr) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_HEAD, m_sHead) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_EXIT, m_nExit) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SHIFTS, m_nShifts) ;
bOk = bOk && pMch->LuaGetGlobVar( EMC_VAR + EVAR_SBH, m_bSomeByHand) ;
// recupero valori parametri opzionali
if ( bOk)
pMch->LuaGetGlobVar( EMC_VAR + EVAR_TCPOS, m_sTcPos) ;
// reset
bOk = bOk && pMch->LuaResetGlobVar( EMC_VAR) ;
// segnalo errori ed esco
if ( ! bOk || nErr != 0) {
m_nShifts = - 1 ;
string sOut = " Error in " + ON_SPECIAL_APPLY + " (" + ToString( nErr) + ")" ;
m_pMchMgr->SetLastError( 2006, sOut) ;
return false ;
}
// eseguo aggiornamento assi macchina e collegamento con operazione precedente
return SpecialUpdate() ;
}
//----------------------------------------------------------------------------
bool
Disposition::SpecialUpdate( void)
{
// verifico MachMgr e GeomDB
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr)
return false ;
// se disposizione vuota, esco
if ( m_nShifts <= 0) {
if ( m_nShifts < 0)
LOG_INFO( GetEMkLogger(), "Warning in Disposition : No shifts")
return true ;
}
else
return true ;
// calcolo assi macchina
if ( ! CalculateAxesValues( "")) {
m_pMchMgr->SetLastError( 2007, "Error in Disposition : axes values not calculable") ;
return false ;
}
// gestione movimenti all'inizio di ogni singolo percorso di lavorazione e alla fine di tutti
if ( ! AdjustStartEndMovements()) {
m_pMchMgr->SetLastError( 2008, "Error in Disposition : link movements not calculable") ;
return false ;
}
return true ;
}
//----------------------------------------------------------------------------