f31aacdc14
- aggiunta gestione TcPos (posizioni di cambio utensile) da configurazione macchina - aggiunte funzioni GetToolsInCurrSetupPos, GetTcPosId e GetAllTcPosNames.
330 lines
10 KiB
C++
330 lines
10 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2017-2017
|
|
//----------------------------------------------------------------------------
|
|
// File : SetupMgr.cpp Data : 18.01.17 Versione : 1.6x8
|
|
// Contenuto : Implementazione gestore attrezzaggio utensili.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 18.01.17 DS Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
//--------------------------- Include ----------------------------------------
|
|
#include "stdafx.h"
|
|
#include "SetupMgr.h"
|
|
#include "DllMain.h"
|
|
#include "MachMgr.h"
|
|
#include "/EgtDEv/Include/EGnScanner.h"
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
SetupMgr::SetupMgr( void)
|
|
{
|
|
m_pMchMgr = nullptr ;
|
|
m_pGeomDB = nullptr ;
|
|
m_pMachine = nullptr ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::Init( MachMgr* pMchMgr)
|
|
{
|
|
// verifico ambiente
|
|
if ( pMchMgr == nullptr || pMchMgr->GetContextId() == 0 ||
|
|
pMchMgr->GetGeomDB() == nullptr || pMchMgr->GetCurrMachine() == nullptr)
|
|
return false ;
|
|
m_pMchMgr = pMchMgr ;
|
|
m_pGeomDB = m_pMchMgr->GetGeomDB() ;
|
|
m_pMachine = m_pMchMgr->GetCurrMachine() ;
|
|
// reset
|
|
m_vStuData.clear() ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::Reset( void)
|
|
{
|
|
m_vStuData.clear() ;
|
|
m_pMchMgr = nullptr ;
|
|
m_pGeomDB = nullptr ;
|
|
m_pMachine = nullptr ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::Clear( void)
|
|
{
|
|
m_vStuData.clear() ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::Load( void)
|
|
{
|
|
// reset
|
|
m_vStuData.clear() ;
|
|
|
|
// verifico ci sia una macchinata corrente
|
|
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr ||
|
|
m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL)
|
|
return false ;
|
|
|
|
// recupero il gruppo di setup
|
|
int nSetupId = m_pMchMgr->GetCurrSetupGroupId() ;
|
|
|
|
// eseguo la lettura dei campi di attrezzaggio
|
|
int nPos = 1 ;
|
|
while ( true) {
|
|
// leggo una nuova posizione di attrezzaggio
|
|
string sVal ;
|
|
if ( ! m_pGeomDB->GetInfo( nSetupId, "Pos" + ToString( nPos), sVal))
|
|
break ;
|
|
// recupero i dati della posizione (Tn;Hm;1/Tuuid/Name,2/Tuuid/Name...)
|
|
bool bAdded = false ;
|
|
STRVECTOR vsTok1 ;
|
|
Tokenize( sVal, ";", vsTok1) ;
|
|
if ( vsTok1.empty())
|
|
break ;
|
|
SetupData stuData ;
|
|
stuData.m_sTcPos = vsTok1[0] ;
|
|
if ( vsTok1.size() >= 3) {
|
|
stuData.m_sHead = vsTok1[1] ;
|
|
STRVECTOR vsTok2 ;
|
|
Tokenize( vsTok1[2], ",", vsTok2) ;
|
|
for ( size_t i = 0 ; i < vsTok2.size() ; ++ i) {
|
|
STRVECTOR vsTok3 ;
|
|
Tokenize( vsTok2[i], "/", vsTok3) ;
|
|
if ( vsTok3.size() >= 2) {
|
|
if ( FromString( vsTok3[0], stuData.m_nExit) &&
|
|
m_pMchMgr->TdbGetToolFromUUID( vsTok3[1], stuData.m_sName)) {
|
|
bAdded = true ;
|
|
stuData.m_sTuuid = vsTok3[1] ;
|
|
m_vStuData.emplace_back( stuData) ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( ! bAdded) {
|
|
stuData.m_nExit = 0 ;
|
|
m_vStuData.emplace_back( stuData) ;
|
|
}
|
|
// passo alla successiva posizione
|
|
++ nPos ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::Save( void) const
|
|
{
|
|
// verifico ci sia una macchinata corrente
|
|
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr ||
|
|
m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL)
|
|
return false ;
|
|
|
|
// recupero il gruppo di setup
|
|
int nSetupId = m_pMchMgr->GetCurrSetupGroupId() ;
|
|
|
|
// cancello eventuali campi di attrezzaggio già presenti
|
|
int nPosiz = 1 ;
|
|
while ( m_pGeomDB->ExistsInfo( nSetupId, "Pos" + ToString( nPosiz))) {
|
|
m_pGeomDB->RemoveInfo( nSetupId, "Pos" + ToString( nPosiz)) ;
|
|
++ nPosiz ;
|
|
}
|
|
|
|
// eseguo la scrittura dei campi di attrezzaggio
|
|
int nSize = int( m_vStuData.size()) ;
|
|
int nI = 0 ;
|
|
int nPos = 1 ;
|
|
while ( nI < nSize) {
|
|
// assegno i dati della posizione (Tn;Hm;1/Tuuid/Name,2/Tuuid/Name...)
|
|
string sVal ;
|
|
sVal = m_vStuData[nI].m_sTcPos ;
|
|
if ( m_vStuData[nI].m_nExit > 0)
|
|
sVal += ";" + m_vStuData[nI].m_sHead + ";" + ToString( m_vStuData[nI].m_nExit) + "/" +
|
|
m_vStuData[nI].m_sTuuid + "/" + m_vStuData[nI].m_sName ;
|
|
++ nI ;
|
|
// verifico se ci sono altri utensili nella medesima posizione
|
|
while ( nI < nSize && m_vStuData[nI].m_sTcPos == m_vStuData[nI-1].m_sTcPos) {
|
|
if ( m_vStuData[nI].m_nExit > 0)
|
|
sVal += "," + ToString( m_vStuData[nI].m_nExit) + "/" + m_vStuData[nI].m_sTuuid + "/" + m_vStuData[nI].m_sName ;
|
|
++ nI ;
|
|
}
|
|
|
|
// scrivo una nuova posizione di attrezzaggio
|
|
if ( ! m_pGeomDB->SetInfo( nSetupId, "Pos" + ToString( nPos), sVal))
|
|
return false ;
|
|
// passo alla successiva posizione
|
|
++ nPos ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::Import( const string& sFileName)
|
|
{
|
|
// reset
|
|
m_vStuData.clear() ;
|
|
|
|
// verifico ci sia una macchinata corrente
|
|
if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr ||
|
|
m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL)
|
|
return false ;
|
|
|
|
// recupero il gruppo di setup
|
|
int nSetupId = m_pMchMgr->GetCurrSetupGroupId() ;
|
|
|
|
// inizializzo lo scanner
|
|
Scanner TheScanner ;
|
|
if ( ! TheScanner.Init( sFileName, ";"))
|
|
return false ;
|
|
|
|
// eseguo la lettura dei campi di attrezzaggio
|
|
int nPos = 1 ;
|
|
string sLine ;
|
|
while ( TheScanner.GetLine( sLine)) {
|
|
// salto dichiarazione sezione
|
|
if ( sLine.front() == '[')
|
|
continue ;
|
|
// recupero i dati della posizione (Posxx=Tn;Hm;1/Tuuid/Name,2/Tuuid/Name...)
|
|
size_t nInd = sLine.find( "=") ;
|
|
if ( nInd != string::npos)
|
|
sLine.erase( 0, nInd + 1) ;
|
|
STRVECTOR vsTok1 ;
|
|
Tokenize( sLine, ";", vsTok1) ;
|
|
if ( vsTok1.empty())
|
|
break ;
|
|
bool bAdded = false ;
|
|
SetupData stuData ;
|
|
stuData.m_sTcPos = vsTok1[0] ;
|
|
if ( vsTok1.size() >= 3) {
|
|
stuData.m_sHead = vsTok1[1] ;
|
|
STRVECTOR vsTok2 ;
|
|
Tokenize( vsTok1[2], ",", vsTok2) ;
|
|
for ( size_t i = 0 ; i < vsTok2.size() ; ++ i) {
|
|
STRVECTOR vsTok3 ;
|
|
Tokenize( vsTok2[i], "/", vsTok3) ;
|
|
if ( vsTok3.size() >= 2) {
|
|
if ( FromString( vsTok3[0], stuData.m_nExit) &&
|
|
m_pMchMgr->TdbGetToolFromUUID( vsTok3[1], stuData.m_sName)) {
|
|
bAdded = true ;
|
|
stuData.m_sTuuid = vsTok3[1] ;
|
|
m_vStuData.emplace_back( stuData) ;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( ! bAdded) {
|
|
stuData.m_nExit = 0 ;
|
|
m_vStuData.emplace_back( stuData) ;
|
|
}
|
|
// passo alla successiva posizione
|
|
++ nPos ;
|
|
}
|
|
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::FindTool( const string& sName) const
|
|
{
|
|
// verifico validità utensile
|
|
if ( IsEmptyOrSpaces( sName))
|
|
return false ;
|
|
// eseguo ricerca
|
|
for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) {
|
|
if ( m_vStuData[i].m_nExit > 0 && EqualNoCase( sName, m_vStuData[i].m_sName))
|
|
return true ;
|
|
}
|
|
return false ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::GetPosData( int nPos, string& sTcPos, string& sHead, int& nExit, string& sName) const
|
|
{
|
|
// verifico che la posizione sia valida
|
|
int nI = nPos - 1 ;
|
|
if ( nI < 0 || nI >= int( m_vStuData.size()))
|
|
return false ;
|
|
// assegno i dati
|
|
sTcPos = m_vStuData[nI].m_sTcPos ;
|
|
if ( m_vStuData[nI].m_nExit > 0) {
|
|
sHead = m_vStuData[nI].m_sHead ;
|
|
nExit = m_vStuData[nI].m_nExit ;
|
|
sName = m_vStuData[nI].m_sName ;
|
|
}
|
|
else {
|
|
sHead = "" ;
|
|
nExit = 0 ;
|
|
sName = "" ;
|
|
}
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::GetToolData( const string& sName, string& sTcPos, string& sHead, int& nExit, int* pnPos) const
|
|
{
|
|
// verifico validità utensile
|
|
if ( IsEmptyOrSpaces( sName))
|
|
return false ;
|
|
// cerco l'utensile
|
|
int nI = - 1 ;
|
|
for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) {
|
|
if ( m_vStuData[i].m_nExit > 0 && EqualNoCase( sName, m_vStuData[i].m_sName)) {
|
|
nI = int( i) ;
|
|
break ;
|
|
}
|
|
}
|
|
if ( nI == -1)
|
|
return false ;
|
|
// assegno i dati
|
|
sTcPos = m_vStuData[nI].m_sTcPos ;
|
|
sHead = m_vStuData[nI].m_sHead ;
|
|
nExit = m_vStuData[nI].m_nExit ;
|
|
if ( pnPos != nullptr)
|
|
*pnPos = nI + 1 ;
|
|
return true ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::GetToolName( const string& sHead, int nExit, string& sName) const
|
|
{
|
|
// eseguo ricerca
|
|
for ( size_t i = 0 ; i < m_vStuData.size() ; ++ i) {
|
|
if ( EqualNoCase( sHead, m_vStuData[i].m_sHead) && m_vStuData[i].m_nExit == nExit) {
|
|
sName = m_vStuData[i].m_sName ;
|
|
return true ;
|
|
}
|
|
}
|
|
sName.clear() ;
|
|
return false ;
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
bool
|
|
SetupMgr::GetToolsInSetupPos( const string& sTcPos, STRVECTOR& vsTools) const
|
|
{
|
|
vsTools.clear() ;
|
|
// eseguo ricerca
|
|
for ( int i = 0 ; i < int( m_vStuData.size()) ; ++ i) {
|
|
if ( EqualNoCase( sTcPos, m_vStuData[i].m_sTcPos)) {
|
|
vsTools.emplace_back( m_vStuData[i].m_sName) ;
|
|
}
|
|
}
|
|
return true ;
|
|
}
|