EgtMachKernel 1.6x8 :

- prima versione della gestione dell'attrezzaggio.
This commit is contained in:
Dario Sassi
2017-01-19 08:35:41 +00:00
parent 6e63197ac4
commit f0c1bc3360
8 changed files with 331 additions and 51 deletions
+107 -50
View File
@@ -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 ;