EgtMachKernel :
- aggiunta gestione dati utensili in intestazione part-program.
This commit is contained in:
@@ -95,6 +95,12 @@ Generator::Run( const string& sCncFile, const std::string& sInfo)
|
||||
LOG_INFO( GetEMkLogger(), "OnProgramStart error") ;
|
||||
}
|
||||
|
||||
// emissione dati utensili
|
||||
if ( bOk && ! ProcessToolData()) {
|
||||
bOk = false ;
|
||||
LOG_INFO( GetEMkLogger(), "ProcessToolData error") ;
|
||||
}
|
||||
|
||||
// ciclo su tutte le operazioni della macchinata
|
||||
int nInd = 0 ;
|
||||
int nOpId = m_pMchMgr->GetFirstActiveOperation() ;
|
||||
@@ -483,6 +489,92 @@ Generator::OnProgramEnd( void)
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Generator::ProcessToolData( void)
|
||||
{
|
||||
struct ToolData {
|
||||
string sName ;
|
||||
string sHead ;
|
||||
int nExit ;
|
||||
string sTcPos ;
|
||||
int nComp ;
|
||||
double dDiam ;
|
||||
double dLen ;
|
||||
ToolData( void)
|
||||
: sName(), sHead(), nExit( 0), sTcPos(), nComp(0), dDiam( 0), dLen( 0) {}
|
||||
} ;
|
||||
typedef vector<ToolData> TDATAVECTOR ;
|
||||
TDATAVECTOR vTdata ;
|
||||
// ciclo sulle lavorazioni per ricavare gli utensili utilizzati
|
||||
int nOpId = m_pMchMgr->GetFirstActiveOperation() ;
|
||||
while ( nOpId != GDB_ID_NULL) {
|
||||
// processo l'operazione
|
||||
int nType = m_pMchMgr->GetOperationType( nOpId) ;
|
||||
if ( IsValidMachiningType( nType)) {
|
||||
// Imposto come lavorazione corrente
|
||||
if ( ! m_pMchMgr->SetCurrMachining( nOpId))
|
||||
return false ;
|
||||
// Recupero l'utensile della lavorazione corrente
|
||||
string sTool ;
|
||||
if ( ! m_pMchMgr->GetMachiningParam( MPA_TOOL, sTool))
|
||||
return false ;
|
||||
// Recupero i dati dell'utensile
|
||||
ToolData Tdata ;
|
||||
if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
|
||||
Tdata.sName = sTool ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, Tdata.sHead) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, Tdata.nExit) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, Tdata.sTcPos) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_CORR, Tdata.nComp) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, Tdata.dDiam) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, Tdata.dLen) ;
|
||||
vTdata.push_back( Tdata) ;
|
||||
}
|
||||
}
|
||||
// passo alla operazione successiva
|
||||
nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ;
|
||||
}
|
||||
// ordino l'elenco degli utensili
|
||||
std::sort( vTdata.begin(), vTdata.end(), []( const ToolData& a, const ToolData& b)
|
||||
{ if ( a.sHead == b.sHead)
|
||||
return a.nExit < b.nExit ;
|
||||
else
|
||||
return a.sHead < b.sHead ; }) ;
|
||||
// emetto l'elenco degli utensili
|
||||
bool bOk = true ;
|
||||
string sPrevHead ; int nPrevExit = 0 ; string sPrevTool ;
|
||||
for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
|
||||
// se posizione diversa
|
||||
if ( vTdata[i].sHead != sPrevHead || vTdata[i].nExit != nPrevExit) {
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, vTdata[i].sName) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, vTdata[i].sHead) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, vTdata[i].nExit) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, vTdata[i].sTcPos) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCOMP, vTdata[i].nComp) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIAM, vTdata[i].dDiam) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, vTdata[i].dLen) ;
|
||||
// se esiste, chiamo la funzione di emissione dati utensile
|
||||
if ( m_pMachine->LuaExistsFunction( ON_TOOL_DATA))
|
||||
bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_DATA) ;
|
||||
// salvo dati correnti come precedenti
|
||||
sPrevHead = vTdata[i].sHead ;
|
||||
nPrevExit = vTdata[i].nExit ;
|
||||
sPrevTool = vTdata[i].sName ;
|
||||
}
|
||||
// altrimenti
|
||||
else {
|
||||
if ( vTdata[i].sName != sPrevTool) {
|
||||
string sErr = "Error : two tools in same position : " + sPrevTool + "<->" + vTdata[i].sName ;
|
||||
LOG_INFO( GetEMkLogger(), sErr.c_str())
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return bOk ;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Generator::OnDispositionStart( int nOpId, int nOpInd, int nPhase, bool bEmpty, bool bSomeByHand)
|
||||
|
||||
Reference in New Issue
Block a user