EgtMachKernel 1.6x8 :
- prima versione della gestione dell'attrezzaggio.
This commit is contained in:
+107
-50
@@ -82,6 +82,10 @@ Generator::Run( const string& sCncFile, const std::string& sInfo)
|
||||
m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL)
|
||||
return false ;
|
||||
|
||||
// recupero eventuale attrezzaggio della macchinata
|
||||
m_stuMgr.Init( m_pMchMgr) ;
|
||||
m_stuMgr.Load() ;
|
||||
|
||||
// evento inizio esecuzione
|
||||
bool bOk = true ;
|
||||
if ( ! OnStart()) {
|
||||
@@ -90,7 +94,7 @@ Generator::Run( const string& sCncFile, const std::string& sInfo)
|
||||
}
|
||||
|
||||
// apertura file di output ed evento inizio programma
|
||||
if ( bOk && ! OnProgramStart( m_pMachine->GetMachineName(), sCncFile, sInfo)) {
|
||||
if ( bOk && ! OnProgramStart( m_pMachine->GetMachineName(), sCncFile, sInfo, m_stuMgr.Exists())) {
|
||||
bOk = false ;
|
||||
LOG_INFO( GetEMkLogger(), "OnProgramStart error") ;
|
||||
}
|
||||
@@ -167,7 +171,7 @@ Generator::ProcessDisposition( int nOpId, int nOpInd)
|
||||
// Se disposizione con movimenti macchina
|
||||
if ( ! pDisp->IsEmpty()) {
|
||||
// Recupero l'utensile della disposizione corrente
|
||||
string sTool ; string sHead ; int nExit ; string sTcPos ;
|
||||
string sTool ; string sHead ; int nExit ; string sTcPos ;
|
||||
if ( ! pDisp->GetToolData( sTool, sHead, nExit, sTcPos))
|
||||
return false ;
|
||||
// Se utensile cambierà
|
||||
@@ -270,15 +274,17 @@ Generator::ProcessMachining( int nOpId, int nOpInd)
|
||||
|
||||
// Se utensile cambierà
|
||||
if ( ! m_sTool.empty() && m_sTool != sTool) {
|
||||
// recupero la testa del prossimo utensile
|
||||
string sNextHead ; int nNextExit ; string sNextTcPos ;
|
||||
if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sNextHead) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nNextExit) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sNextTcPos) ;
|
||||
// recupero la testa del prossimo utensile (prima dall'attrezzaggio, poi dal DB utensili)
|
||||
string sNextTcPos ; string sNextHead ; int nNextExit ;
|
||||
if ( ! m_stuMgr.GetToolData( sTool, sNextTcPos, sNextHead, nNextExit)) {
|
||||
if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sNextTcPos) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sNextHead) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nNextExit) ;
|
||||
}
|
||||
// ripristino l'utensile corrente
|
||||
m_pMchMgr->TdbSetCurrTool( m_sTool) ;
|
||||
}
|
||||
// ripristino l'utensile corrente
|
||||
m_pMchMgr->TdbSetCurrTool( m_sTool) ;
|
||||
// emetto deselezione vecchio utensile
|
||||
if ( ! OnToolDeselect( sNextHead, nNextExit, sNextTcPos))
|
||||
return false ;
|
||||
@@ -288,9 +294,12 @@ Generator::ProcessMachining( int nOpId, int nOpInd)
|
||||
return false ;
|
||||
// Se utensile cambiato, emetto selezione nuovo utensile
|
||||
if ( m_sTool != m_sPrevTool) {
|
||||
string sHead ; m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
|
||||
int nExit ; m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
|
||||
string sTcPos ; m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sTcPos) ;
|
||||
string sTcPos ; string sHead ; int nExit ;
|
||||
if ( ! m_stuMgr.GetToolData( m_sTool, sTcPos, sHead, nExit)) {
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_TCPOS, sTcPos) ;
|
||||
}
|
||||
if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos))
|
||||
return false ;
|
||||
}
|
||||
@@ -434,9 +443,12 @@ Generator::UpdateTool( const string& sTool)
|
||||
// lo imposto come corrente
|
||||
if ( ! m_pMchMgr->TdbSetCurrTool( sTool))
|
||||
return false ;
|
||||
// lo carico in macchina
|
||||
string sHead ; m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
|
||||
int nExit ; m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
|
||||
// lo carico in macchina (se esiste attrezzaggio prendo i dati da questo)
|
||||
string sTcPos ; string sHead ; int nExit ;
|
||||
if ( ! m_stuMgr.GetToolData( m_sTool, sTcPos, sHead, nExit)) {
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_HEAD, sHead) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_EXIT, nExit) ;
|
||||
}
|
||||
if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit))
|
||||
return false ;
|
||||
m_sTool = sTool ;
|
||||
@@ -506,7 +518,7 @@ Generator::OnEnd( void)
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
bool
|
||||
Generator::OnProgramStart( const string& sMachName, const string& sCncFile, const string& sInfo)
|
||||
Generator::OnProgramStart( const string& sMachName, const string& sCncFile, const string& sInfo, bool bSetup)
|
||||
{
|
||||
// apro il file di output
|
||||
bool bOk = m_pMachine->WriterOpen( sCncFile) ;
|
||||
@@ -519,6 +531,8 @@ Generator::OnProgramStart( const string& sMachName, const string& sCncFile, cons
|
||||
// assegno info
|
||||
string sTxt = sInfo + " " + CurrDateTime() ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_INFO, sTxt) ;
|
||||
// assegno flag di presenza setup
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SETUP, bSetup) ;
|
||||
// chiamo la funzione di inizio programma
|
||||
bOk = bOk && m_pMachine->LuaCallFunction( ON_PROGRAM_START) ;
|
||||
return bOk ;
|
||||
@@ -582,44 +596,87 @@ Generator::ProcessToolData( void)
|
||||
// passo alla operazione successiva
|
||||
nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ;
|
||||
}
|
||||
// ordino l'elenco degli utensili
|
||||
std::sort( vTdata.begin(), vTdata.end(), []( const MyToolData& a, const MyToolData& 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 sPrevTcPos ; string sPrevTool ;
|
||||
for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
|
||||
// se posizione diversa (testa o uscita o toolchanger)
|
||||
if ( vTdata[i].sHead != sPrevHead || vTdata[i].nExit != nPrevExit ||
|
||||
vTdata[i].sTcPos != sPrevTcPos) {
|
||||
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) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, vTdata[i].dMaxSpeed) ;
|
||||
// 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 ;
|
||||
sPrevTcPos = vTdata[i].sTcPos ;
|
||||
}
|
||||
// altrimenti
|
||||
else {
|
||||
if ( vTdata[i].sName != sPrevTool) {
|
||||
string sErr = "Error : two tools in same position : " + sPrevTool + "<->" + vTdata[i].sName ;
|
||||
|
||||
// se definito attrezzaggio
|
||||
if ( m_stuMgr.Exists()) {
|
||||
// verifico che tutti gli utensili siano attrezzati
|
||||
for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
|
||||
if ( ! m_stuMgr.FindTool( vTdata[i].sName)) {
|
||||
string sErr = "Error : " + vTdata[i].sName + " missing in setup " ;
|
||||
LOG_INFO( GetEMkLogger(), sErr.c_str())
|
||||
bOk = false ;
|
||||
}
|
||||
}
|
||||
// emetto l'elenco di tutti gli utensili attrezzati
|
||||
string sTcPos ; string sHead ; int nExit ; string sTool ;
|
||||
for ( int i = 1 ; m_stuMgr.GetPosData( i, sTcPos, sHead , nExit, sTool); ++ i) {
|
||||
// se nella posizione non c'è utensile, vado oltre
|
||||
if ( sTool.empty())
|
||||
continue ;
|
||||
// emetto i dati
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TOOL, sTool) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_HEAD, sHead) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXIT, nExit) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCPOS, sTcPos) ;
|
||||
if ( m_pMchMgr->TdbSetCurrTool( sTool)) {
|
||||
int nComp ; double dDiam ; double dLen ; double dMaxSpeed ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_CORR, nComp) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, dDiam) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ;
|
||||
m_pMchMgr->TdbGetCurrToolParam( TPA_MAXSPEED, dMaxSpeed) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TCOMP, nComp) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TDIAM, dDiam) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, dLen) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, dMaxSpeed) ;
|
||||
}
|
||||
// se esiste, chiamo la funzione di emissione dati utensile
|
||||
if ( m_pMachine->LuaExistsFunction( ON_TOOL_DATA))
|
||||
bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_DATA) ;
|
||||
}
|
||||
}
|
||||
|
||||
// altrimenti emetto direttamente gli utensili
|
||||
else {
|
||||
// ordino l'elenco degli utensili
|
||||
std::sort( vTdata.begin(), vTdata.end(), []( const MyToolData& a, const MyToolData& b)
|
||||
{ if ( a.sHead == b.sHead)
|
||||
return a.nExit < b.nExit ;
|
||||
else
|
||||
return a.sHead < b.sHead ; }) ;
|
||||
// emetto l'elenco degli utensili
|
||||
string sPrevHead ; int nPrevExit = 0 ; string sPrevTcPos ; string sPrevTool ;
|
||||
for ( size_t i = 0 ; i < vTdata.size() ; ++ i) {
|
||||
// se posizione diversa (testa o uscita o toolchanger)
|
||||
if ( vTdata[i].sHead != sPrevHead || vTdata[i].nExit != nPrevExit ||
|
||||
vTdata[i].sTcPos != sPrevTcPos) {
|
||||
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) ;
|
||||
bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, vTdata[i].dMaxSpeed) ;
|
||||
// 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 ;
|
||||
sPrevTcPos = vTdata[i].sTcPos ;
|
||||
}
|
||||
// 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 ;
|
||||
|
||||
Reference in New Issue
Block a user