EgtMachKernel :

- aggiunta gestione dati utensili in intestazione part-program.
This commit is contained in:
Dario Sassi
2016-10-07 13:27:30 +00:00
parent c11878617c
commit 01b1b88c9b
3 changed files with 98 additions and 0 deletions
+92
View File
@@ -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)