diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index 0150ff1..5454e1f 100644 Binary files a/EgtMachKernel.rc and b/EgtMachKernel.rc differ diff --git a/ToolData.cpp b/ToolData.cpp index f4075d3..530ce2f 100644 --- a/ToolData.cpp +++ b/ToolData.cpp @@ -25,7 +25,9 @@ using namespace std ; //---------------------------------------------------------------------------- enum nToolKey { - TK_COR = 0, + TK_ABSMAX = 0, + TK_COOLANT, + TK_COR, TK_CRAD, TK_D, TK_DRAW, @@ -33,6 +35,7 @@ enum nToolKey { TK_EXI, TK_F, TK_FE, + TK_FM, TK_FS, TK_FT, TK_HEA, @@ -54,6 +57,8 @@ enum nToolKey { TK_ZZZ} ; // rappresenta il numero di elementi static const std::array sToolKey = { + "ABSMAX", + "COOLANT", "COR", "CRAD", "D", @@ -62,6 +67,7 @@ static const std::array sToolKey = { "EXI", "F", "FE", + "FM", "FS", "FT", "HEA", @@ -83,7 +89,7 @@ static const std::array sToolKey = { //---------------------------------------------------------------------------- int -ToolData::GetSize( void) const +ToolData::GetSize( void) { // in debug verifico validità ultimo campo assert( sToolKey[TK_UUID] == "UUID") ; @@ -111,6 +117,12 @@ ToolData::FromString( const string& sString, int& nKey) nKey = FindToolKey( ToUpper( sKey)) ; bool bOk = ( nKey >= 0) ; switch ( nKey) { + case TK_ABSMAX : + bOk = ::FromString( sVal, m_dMaxAbsorption) ; + break ; + case TK_COOLANT : + bOk = ::FromString( sVal, m_nCoolant) ; + break ; case TK_COR : bOk = ::FromString( sVal, m_nCorr) ; break ; @@ -135,6 +147,9 @@ ToolData::FromString( const string& sString, int& nKey) case TK_FE : bOk = ::FromString( sVal, m_dEndFeed) ; break ; + case TK_FM : + bOk = ::FromString( sVal, m_dMinFeed) ; + break ; case TK_FS : bOk = ::FromString( sVal, m_dStartFeed) ; break ; @@ -202,6 +217,8 @@ string ToolData::ToString( int nInd) const { switch ( nInd) { + case TK_ABSMAX : return ( sToolKey[TK_ABSMAX] + "=" + ::ToString( m_dMaxAbsorption)) ; + case TK_COOLANT : return ( sToolKey[TK_COOLANT] + "=" + ::ToString( m_nCoolant)) ; case TK_COR : return ( sToolKey[TK_COR] + "=" + ::ToString( m_nCorr)) ; case TK_CRAD : return ( sToolKey[TK_CRAD] + "=" + ::ToString( m_dCornRad)) ; case TK_D : return ( sToolKey[TK_D] + "=" + ::ToString( m_dDiam)) ; @@ -210,6 +227,7 @@ ToolData::ToString( int nInd) const case TK_EXI : return ( sToolKey[TK_EXI] + "=" + ::ToString( m_nExit)) ; case TK_F : return ( sToolKey[TK_F] + "=" + ::ToString( m_dFeed)) ; case TK_FE : return ( sToolKey[TK_FE] + "=" + ::ToString( m_dEndFeed)) ; + case TK_FM : return ( sToolKey[TK_FM] + "=" + ::ToString( m_dMinFeed)) ; case TK_FS : return ( sToolKey[TK_FS] + "=" + ::ToString( m_dStartFeed)) ; case TK_FT : return ( sToolKey[TK_FT] + "=" + ::ToString( m_dTipFeed)) ; case TK_HEA : return ( sToolKey[TK_HEA] + "=" + m_sHead) ; @@ -255,6 +273,9 @@ ToolData::SetParam( int nType, int nVal) return false ; m_nType = nVal ; return true ; + case TPA_COOLANT : + m_nCoolant = nVal ; + return true ; } return false ; } @@ -301,6 +322,8 @@ ToolData::SetParam( int nType, double dVal) m_dOffsR = dVal ; return true ; case TPA_SPEED : + if ( ! VerifySpeed( dVal)) + return false ; m_dSpeed = dVal ; return true ; case TPA_SIDEANG : @@ -312,6 +335,12 @@ ToolData::SetParam( int nType, double dVal) case TPA_THICK : m_dThick = dVal ; return true ; + case TPA_MAXABSORPTION : + m_dMaxAbsorption = dVal ; + return true ; + case TPA_MINFEED : + m_dMinFeed = dVal ; + return true ; } return false ; } @@ -359,6 +388,9 @@ ToolData::GetParam( int nType, int& nVal) const case TPA_TYPE : nVal = m_nType ; return true ; + case TPA_COOLANT : + nVal = m_nCoolant ; + return true ; } return false ; } @@ -416,6 +448,12 @@ ToolData::GetParam( int nType, double& dVal) const case TPA_THICK : dVal = m_dThick ; return true ; + case TPA_MAXABSORPTION : + dVal = m_dMaxAbsorption ; + return true ; + case TPA_MINFEED : + dVal = m_dMinFeed ; + return true ; } return false ; } diff --git a/ToolData.h b/ToolData.h index 07c39c7..c971cb0 100644 --- a/ToolData.h +++ b/ToolData.h @@ -43,6 +43,9 @@ struct ToolData double m_dTipFeed ; // velocità di lavorazione di testa double m_dOffsR ; // offset radiale double m_dOffsL ; // offset longitudinale + int m_nCoolant ; // liquido di raffreddamento + double m_dMaxAbsorption ;// massimo assorbimento + double m_dMinFeed ; // minima riduzione di feed per contenere l'assorbimento std::string m_sSysNotes ; // note interne std::string m_sUserNotes ; // note dell'utente @@ -50,9 +53,9 @@ struct ToolData : m_Uuid(), m_nExit( 0), m_nCorr(0), m_nType(0), m_dMaxSpeed(0), m_dMaxMat(0), m_dDiam( 0), m_dTDiam( 0), m_dLen( 0), m_dTLen( 0), m_dThick( 0), m_dCornRad( 0), m_dSideAng( 0), m_dSpeed( 0), m_dFeed(0), m_dStartFeed( 0), m_dEndFeed( 0), m_dTipFeed( 0), - m_dOffsR( 0), m_dOffsL( 0) {} + m_dOffsR( 0), m_dOffsL( 0), m_nCoolant( 0), m_dMaxAbsorption( 0), m_dMinFeed( 0) {} - int GetSize( void) const ; + static int GetSize( void) ; bool FromString( const std::string& sString, int& nKey) ; std::string ToString( int nInd) const ; diff --git a/ToolsMgr.cpp b/ToolsMgr.cpp index df3934a..752a17f 100644 --- a/ToolsMgr.cpp +++ b/ToolsMgr.cpp @@ -7,7 +7,8 @@ // // // Modifiche : 01.06.15 DS Creazione modulo. -// +// 21.10.15 DS Aggiunti VERSION e TOOLSIZE in HEADER (default VERSION = 1000 e TOOLSIZE = 26). +// Ora VERSION = 1001 e TOOLSIZE = 29. // //---------------------------------------------------------------------------- @@ -27,7 +28,10 @@ using namespace std ; //---------------------------------------------------------------------------- const string TF_HEADER = "[HEADER]" ; +const string TF_VERSION = "VERSION" ; +const string TF_TOOLSIZE = "TOOLSIZE" ; const string TF_TOTAL = "TOTAL" ; +const int TF_CURR_VER = 1001 ; //---------------------------------------------------------------------------- ToolsMgr::ToolsMgr( void) @@ -75,12 +79,18 @@ ToolsMgr::Load( const string& sToolsFile) bool bEnd = false ; // leggo l'intestazione + int nVersion = 0 ; + int nToolSize = 0 ; int nTotal = 0 ; - if ( ! LoadHeader( TheScanner, nTotal, bEnd)) { + if ( ! LoadHeader( TheScanner, nVersion, nToolSize, nTotal, bEnd)) { bOk = false ; string sOut = "LoadTools : Error on Header" ; LOG_ERROR( GetEMkLogger(), sOut.c_str()) } + { + string sOut = "LoadTools : FileVer = " + ToString( nVersion) + " CurrVer = " + ToString( TF_CURR_VER) ; + LOG_INFO( GetEMkLogger(), sOut.c_str()) + } // dimensiono maps const int MIN_BUCKETS = 53 ; @@ -88,7 +98,7 @@ ToolsMgr::Load( const string& sToolsFile) // ciclo di lettura degli utensili do { - if ( ! LoadOneTool( TheScanner, bEnd)) { + if ( ! LoadOneTool( TheScanner, nToolSize, bEnd)) { bOk = false ; string sOut = "LoadTools : Error on line " + ToString( TheScanner.GetCurrLineNbr()) ; LOG_ERROR( GetEMkLogger(), sOut.c_str()) @@ -109,7 +119,7 @@ ToolsMgr::Load( const string& sToolsFile) //---------------------------------------------------------------------------- bool -ToolsMgr::LoadHeader( Scanner& TheScanner, int& nTotal, bool& bEnd) +ToolsMgr::LoadHeader( Scanner& TheScanner, int& nVersion, int& nToolSize, int& nTotal, bool& bEnd) { // leggo la prossima linea string sLine ; @@ -124,6 +134,8 @@ ToolsMgr::LoadHeader( Scanner& TheScanner, int& nTotal, bool& bEnd) bool bOk = true ; // leggo le linee successive bEnd = true ; + nVersion = 1000 ; + nToolSize = 26 ; nTotal = 0 ; while ( bOk && TheScanner.GetLine( sLine)) { // se utensile successivo @@ -136,7 +148,11 @@ ToolsMgr::LoadHeader( Scanner& TheScanner, int& nTotal, bool& bEnd) string sKey, sVal ; SplitFirst( sLine, "=", sKey, sVal) ; // riconosco la chiave - if ( ToUpper( sKey) == TF_TOTAL) + if ( ToUpper( sKey) == TF_VERSION) + bOk = FromString( sVal, nVersion) ; + else if ( ToUpper( sKey) == TF_TOOLSIZE) + bOk = FromString( sVal, nToolSize) ; + else if ( ToUpper( sKey) == TF_TOTAL) bOk = FromString( sVal, nTotal) ; else bOk = false ; @@ -146,7 +162,7 @@ ToolsMgr::LoadHeader( Scanner& TheScanner, int& nTotal, bool& bEnd) //---------------------------------------------------------------------------- bool -ToolsMgr::LoadOneTool( Scanner& TheScanner, bool& bEnd) +ToolsMgr::LoadOneTool( Scanner& TheScanner, int nToolSize, bool& bEnd) { ToolData tData ; // leggo la prossima linea @@ -166,7 +182,7 @@ ToolsMgr::LoadOneTool( Scanner& TheScanner, bool& bEnd) bEnd = true ; const int DIM_BS = 64 ; bitset Flag ; - assert( tData.GetSize() <= DIM_BS) ; + assert( nToolSize <= DIM_BS) ; while ( bOk && TheScanner.GetLine( sLine)) { // se utensile successivo if ( sLine.front() == '[' && sLine.back() == ']') { @@ -182,7 +198,7 @@ ToolsMgr::LoadOneTool( Scanner& TheScanner, bool& bEnd) Flag.set( nKey) ; } // verifico di aver letto tutti i campi - bOk = bOk && ( Flag.count() == tData.GetSize()) ; + bOk = bOk && ( Flag.count() == nToolSize) ; // salvo i dati dell'utensile bOk = bOk && m_utData.emplace( tData.m_Uuid, tData).second ; bOk = bOk && m_suData.emplace( tData.m_sName, tData.m_Uuid).second ; @@ -255,6 +271,10 @@ ToolsMgr::SaveHeader( Writer& TheWriter) const string sOut ; sOut = TF_HEADER ; bOk = bOk && TheWriter.OutText( sOut) ; + sOut = TF_VERSION + "=" + ToString( TF_CURR_VER) ; + bOk = bOk && TheWriter.OutText( sOut) ; + sOut = TF_TOOLSIZE + "=" + ToString( ToolData::GetSize()) ; + bOk = bOk && TheWriter.OutText( sOut) ; sOut = TF_TOTAL + "=" + ToString( int( m_utData.size())) ; bOk = bOk && TheWriter.OutText( sOut) ; return bOk ; diff --git a/ToolsMgr.h b/ToolsMgr.h index c05a31c..0c0c373 100644 --- a/ToolsMgr.h +++ b/ToolsMgr.h @@ -46,8 +46,8 @@ class ToolsMgr private : bool Clear( void) ; - bool LoadHeader( Scanner& TheScanner, int& nTotal, bool& bEnd) ; - bool LoadOneTool( Scanner& TheScanner, bool& bEnd) ; + bool LoadHeader( Scanner& TheScanner, int& nVersion, int& nToolSize, int& nTotal, bool& bEnd) ; + bool LoadOneTool( Scanner& TheScanner, int nToolSize, bool& bEnd) ; bool SaveHeader( Writer& TheWriter) const ; bool SaveOneTool( const EgtUUID& Uuid, int& nCounter, Writer& TheWriter) const ; bool VerifyTool( int nFamily, std::string& sName, int& nType) const ;