From 2b574d7be1abcc3e31fb8e99f96e6518498ee5fb Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Thu, 31 May 2018 06:46:34 +0000 Subject: [PATCH] EgtMachKernel 1.9e6 : - aggiunto Estimator - in taglio lama back-feed viene applicata solo all'ultimo passaggio di ritorno. --- EgtMachKernel.rc | Bin 11774 -> 11774 bytes EgtMachKernel.vcxproj | 4 + EgtMachKernel.vcxproj.filters | 12 + Estimator.cpp | 228 ++++++++ Estimator.h | 49 ++ Generator.cpp | 967 +++---------------------------- Generator.h | 76 +-- MachMgr.h | 1 + MachMgrGeneration.cpp | 26 +- OutputConst.h | 26 +- Processor.cpp | 1024 +++++++++++++++++++++++++++++++++ Processor.h | 98 ++++ Sawing.cpp | 2 +- SawingData.h | 2 +- 14 files changed, 1562 insertions(+), 953 deletions(-) create mode 100644 Estimator.cpp create mode 100644 Estimator.h create mode 100644 Processor.cpp create mode 100644 Processor.h diff --git a/EgtMachKernel.rc b/EgtMachKernel.rc index ca00e748f8c85360b580c9df12b61e67d623d807..d088e4ee1b7638e7ef62c01ce4005d1aff199bbb 100644 GIT binary patch delta 97 zcmewt{V#gMFE&QA&A-`fnHkL{Ka|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUTDBd7oX delta 97 zcmewt{V#gMFE&Qg&A-`fnHfzdKa|wnoW?bQ1uSxrY4Qod0+^@}R1`^_2jk{d(jGv4 NK<#LXK~l;gTmUO4BcK2P diff --git a/EgtMachKernel.vcxproj b/EgtMachKernel.vcxproj index 3d24985..1c36f6a 100644 --- a/EgtMachKernel.vcxproj +++ b/EgtMachKernel.vcxproj @@ -221,6 +221,7 @@ copy $(TargetPath) \EgtProg\Dll64 + @@ -257,6 +258,7 @@ copy $(TargetPath) \EgtProg\Dll64 + @@ -290,6 +292,7 @@ copy $(TargetPath) \EgtProg\Dll64 + @@ -314,6 +317,7 @@ copy $(TargetPath) \EgtProg\Dll64 + diff --git a/EgtMachKernel.vcxproj.filters b/EgtMachKernel.vcxproj.filters index efe444a..0df8ddd 100644 --- a/EgtMachKernel.vcxproj.filters +++ b/EgtMachKernel.vcxproj.filters @@ -210,6 +210,12 @@ Source Files\Operations + + Source Files\Output + + + Source Files\Output + @@ -371,6 +377,12 @@ Header Files + + Header Files + + + Header Files + diff --git a/Estimator.cpp b/Estimator.cpp new file mode 100644 index 0000000..10dcd76 --- /dev/null +++ b/Estimator.cpp @@ -0,0 +1,228 @@ +//---------------------------------------------------------------------------- +// EgalTech 2015-2018 +//---------------------------------------------------------------------------- +// File : Estimator.cpp Data : 28.05.18 Versione : 1.9e6 +// Contenuto : Implementazione della classe Estimator. +// +// +// +// Modifiche : 28.10.15 DS Creazione modulo. +// 26.02.16 DS Aggiunta gestione archi. +// +//---------------------------------------------------------------------------- + +//--------------------------- Include ---------------------------------------- +#include "stdafx.h" +#include "DllMain.h" +#include "Estimator.h" +#include "Machine.h" +#include "OutputConst.h" +#include "/EgtDev/Include/EGnFileUtils.h" + +using namespace std ; + +//---------------------------------------------------------------------------- +static const string ERR_EXT = ".err" ; + +//---------------------------------------------------------------------------- +Estimator::Estimator( void) +{ +} + +//---------------------------------------------------------------------------- +Estimator::~Estimator( void) +{ +} + +//---------------------------------------------------------------------------- +bool +Estimator::Init( MachMgr* pMchMgr) +{ + return Processor::Init( pMchMgr) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::Run( const string& sCncFile, const std::string& sInfo) +{ + // emetto info di log + { string sOut = "Estimator Run : " + sCncFile ; + LOG_INFO( GetEMkLogger(), sOut.c_str()) ; } + + // cancello l'eventuale file di uscita (e anche il file errore) + EraseFile( sCncFile) ; + string sErrFile = ChangeFileExtension( sCncFile, ERR_EXT) ; + EraseFile( sErrFile) ; + + // lancio il processore + bool bOk = Processor::Run( sCncFile, sInfo) ; + + // in caso di errore rinomino il file di output + if ( ! bOk) + RenameFile( sCncFile, sErrFile) ; + + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnStart( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_START) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnEnd( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_END) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnProgramStart( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_PROGRAM_START) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnProgramEnd( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_PROGRAM_END) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnToolData( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_TOOL_DATA)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_TOOL_DATA) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnDispositionStart( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_DISPOSITION_START) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnDispositionEnd( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_DISPOSITION_END) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnTableData( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_TABLE_DATA)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_TABLE_DATA) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnFixtureData( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_FIXTURE_DATA)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_FIXTURE_DATA) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnRawMoveData( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_RAWMOVE_DATA)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_RAWMOVE_DATA) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnToolSelect( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_TOOL_SELECT) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnToolDeselect( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_TOOL_DESELECT) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnMachiningStart( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_MACHINING_START) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnMachiningEnd( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_MACHINING_END) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnPathStart( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_PATH_START)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_PATH_START) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnPathEnd( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_PATH_END)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_PATH_END) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnPathStartAux( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_PATH_START_AUX)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_PATH_START_AUX) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnPathEndAux( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_ESTIM_PATH_END_AUX)) + return true ; + return m_pMachine->LuaCallFunction( ON_ESTIM_PATH_END_AUX) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnRapid( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_RAPID) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnLinear( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_LINEAR) ; +} + +//---------------------------------------------------------------------------- +bool +Estimator::CallOnArc( void) +{ + return m_pMachine->LuaCallFunction( ON_ESTIM_ARC) ; +} diff --git a/Estimator.h b/Estimator.h new file mode 100644 index 0000000..0e394ca --- /dev/null +++ b/Estimator.h @@ -0,0 +1,49 @@ +//---------------------------------------------------------------------------- +// EgalTech 2018-2018 +//---------------------------------------------------------------------------- +// File : Estimator.h Data : 29.05.18 Versione : 1.9e6 +// Contenuto : Dichiarazione della classe Estimator. +// +// +// +// Modifiche : 29.05.18 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "Processor.h" + +//---------------------------------------------------------------------------- +class Estimator : public Processor +{ + public : + Estimator( void) ; + ~Estimator( void) ; + bool Init( MachMgr* pMchMgr) ; + bool Run( const std::string& sEstFile, const std::string& sInfo) ; + + private : + bool CallOnStart( void) override ; + bool CallOnEnd( void) override ; + bool CallOnProgramStart( void) override ; + bool CallOnProgramEnd( void) override ; + bool CallOnToolData( void) override ; + bool CallOnDispositionStart( void) override ; + bool CallOnDispositionEnd( void) override ; + bool CallOnTableData( void) override ; + bool CallOnFixtureData( void) override ; + bool CallOnRawMoveData( void) override ; + bool CallOnToolSelect( void) override ; + bool CallOnToolDeselect( void) override ; + bool CallOnMachiningStart( void) override ; + bool CallOnMachiningEnd( void) override ; + bool CallOnPathStart( void) override ; + bool CallOnPathEnd( void) override ; + bool CallOnPathStartAux( void) override ; + bool CallOnPathEndAux( void) override ; + bool CallOnRapid( void) override ; + bool CallOnLinear( void) override ; + bool CallOnArc( void) override ; +} ; diff --git a/Generator.cpp b/Generator.cpp index 5c23a48..e8125dd 100644 --- a/Generator.cpp +++ b/Generator.cpp @@ -1,8 +1,8 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2016 +// EgalTech 2015-2018 //---------------------------------------------------------------------------- -// File : Generator.cpp Data : 26.02.16 Versione : 1.6n8 -// Contenuto : Implementazione della classe generator. +// File : Generator.cpp Data : 28.05.18 Versione : 1.9e6 +// Contenuto : Implementazione della classe Generator. // // // @@ -15,57 +15,30 @@ #include "stdafx.h" #include "DllMain.h" #include "Generator.h" -#include "MachMgr.h" -#include "Disposition.h" -#include "Machining.h" -#include "MachiningConst.h" +#include "Machine.h" #include "OutputConst.h" -#include "/EgtDev/Include/EMkToolConst.h" -#include "/EgtDev/Include/EMkOperationConst.h" -#include "/EgtDev/Include/EGkCurve.h" -#include "/EgtDev/Include/EGkStringUtils3d.h" #include "/EgtDev/Include/EGnFileUtils.h" using namespace std ; -//------------------------------ Errors -------------------------------------- -// 1001 = "Error with setup : xxx" -// 1002 = "Error opening Cnc file" - //---------------------------------------------------------------------------- static const string ERR_EXT = ".err" ; //---------------------------------------------------------------------------- Generator::Generator( void) { - m_pMchMgr = nullptr ; - m_pGeomDB = nullptr ; - m_pMachine = nullptr ; - m_AxesName.reserve( 8) ; - m_AxesToken.reserve( 8) ; - m_AxesVal.reserve( 8) ; } //---------------------------------------------------------------------------- Generator::~Generator( void) { - } //---------------------------------------------------------------------------- bool Generator::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() ; - m_sPrevTool.clear() ; - m_sTool.clear() ; - return true ; + return Processor::Init( pMchMgr) ; } //---------------------------------------------------------------------------- @@ -81,961 +54,165 @@ Generator::Run( const string& sCncFile, const std::string& sInfo) string sErrFile = ChangeFileExtension( sCncFile, ERR_EXT) ; EraseFile( sErrFile) ; - // verifico ci sia una macchinata corrente - if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr || - m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL) - return false ; - m_pMchMgr->ResetLastError() ; + // lancio il processore + bool bOk = Processor::Run( sCncFile, sInfo) ; - // forzo aggiornamento attrezzaggio della macchinata - m_pMchMgr->UpdateSetup() ; - if ( ! VerifySetup()) - return false ; - - // evento inizio esecuzione - bool bOk = true ; - if ( ! OnStart()) { - bOk = false ; - LOG_INFO( GetEMkLogger(), "OnStart error") ; - } - - // apertura file di output ed evento inizio programma - if ( bOk && ! OnProgramStart( m_pMachine->GetMachineName(), sCncFile, sInfo, m_pMchMgr->GetCurrSetupMgr().Exists())) { - bOk = false ; - 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() ; - while ( bOk && nOpId != GDB_ID_NULL) { - // incremento l'indice della operazione - ++ nInd ; - // la prima operazione deve essere una disposizione - if ( nInd == 1) { - if ( m_pMchMgr->GetOperationType( nOpId) != OPER_DISP) { - bOk = false ; - continue ; - } - } - // processo l'operazione - int nType = m_pMchMgr->GetOperationType( nOpId) ; - if ( IsValidDispositionType( nType)) { - if ( ! ProcessDisposition( nOpId, nInd)) - bOk = false ; - } - else if ( IsValidMachiningType( nType)) { - if ( ! ProcessMachining( nOpId, nInd)) - bOk = false ; - } - // passo alla operazione successiva - nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ; - } - - // evento fine programma - if ( bOk && ! OnProgramEnd()) { - bOk = false ; - LOG_INFO( GetEMkLogger(), "OnProgramEnd error") ; - } - // chiudo il file di output - if ( ! m_pMachine->WriterClose()) - bOk = false ; - // in caso di errore lo rinomino + // in caso di errore rinomino il file di output if ( ! bOk) RenameFile( sCncFile, sErrFile) ; - // evento fine esecuzione - if ( ! OnEnd()) { - bOk = false ; - LOG_INFO( GetEMkLogger(), "OnEnd error") ; - } - return bOk ; } //---------------------------------------------------------------------------- bool -Generator::VerifySetup( void) +Generator::CallOnStart( void) { - // se attrezzaggio non definito, nulla da verificare - if ( ! m_pMchMgr->GetCurrSetupMgr().Exists()) + return m_pMachine->LuaCallFunction( ON_START) ; +} + +//---------------------------------------------------------------------------- +bool +Generator::CallOnEnd( void) +{ + return m_pMachine->LuaCallFunction( ON_END) ; +} + +//---------------------------------------------------------------------------- +bool +Generator::CallOnProgramStart( void) +{ + return m_pMachine->LuaCallFunction( ON_PROGRAM_START) ; +} + +//---------------------------------------------------------------------------- +bool +Generator::CallOnProgramEnd( void) +{ + return m_pMachine->LuaCallFunction( ON_PROGRAM_END) ; +} + +//---------------------------------------------------------------------------- +bool +Generator::CallOnToolData( void) +{ + if ( ! m_pMachine->LuaExistsFunction( ON_TOOL_DATA)) return true ; - - // lancio la verifica - STRVECTOR vsErr ; - if ( m_pMchMgr->VerifyCurrSetup( vsErr)) - return true ; - - // gestisco errore - string sErr = "Error with setup :" ; - for each( const auto& sTmp in vsErr) - sErr += " " + sTmp ; - m_pMchMgr->SetLastError( 1001, sErr) ; - return false ; + return m_pMachine->LuaCallFunction( ON_TOOL_DATA) ; } //---------------------------------------------------------------------------- bool -Generator::ProcessDisposition( int nOpId, int nOpInd) +Generator::CallOnDispositionStart( void) { - // Parametri della disposizione - Disposition* pDisp = GetDisposition( m_pGeomDB->GetUserObj( nOpId)) ; - if ( pDisp == nullptr) - return false ; - - // Imposto la fase - int nPhase = pDisp->GetPhase() ; - m_pMchMgr->SetCurrPhase( nPhase) ; - bool bEmpty = pDisp->IsEmpty() ; - bool bSomeByHand = pDisp->GetSomeByHand() ; - - // Se disposizione con movimenti macchina - if ( ! pDisp->IsEmpty()) { - // Recupero l'utensile della disposizione corrente - string sTool ; string sHead ; int nExit ; string sTcPos ; - if ( ! pDisp->GetToolData( sTool, sHead, nExit, sTcPos)) - return false ; - // Se esiste utensile corrente e cambierà, lo scarico - if ( ! m_sTool.empty() && m_sTool != sTool) { - // emetto deselezione vecchio utensile - if ( ! OnToolDeselect( sTool, sHead, nExit, sTcPos)) - return false ; - } - // Aggiorno utensile e assi macchina - if ( ! UpdateDispTool( sTool, sHead, nExit) || ! UpdateAxes()) - return false ; - // Se utensile non definito o cambiato, emetto selezione nuovo utensile - if ( m_sTool.empty() || m_sTool != m_sPrevTool) { - if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos)) - return false ; - } - } - - // Emetto inizio disposizione - if ( ! OnDispositionStart( nOpId, nOpInd, nPhase, bEmpty, bSomeByHand)) - return false ; - - // Emetto dati tavola - string sTable ; - pDisp->GetTable( sTable) ; - Point3d ptOri1 ; - pDisp->GetTableRef1( ptOri1) ; - if ( ! OnTableData( sTable, ptOri1)) - return false ; - - // Emetto dati bloccaggi - for ( int i = 0 ; ; ++ i) { - string sName ; - int nId ; - Point3d ptPos ; - double dAngDeg ; - double dMov ; - if ( pDisp->GetFixtureData( i, sName, nId, ptPos, dAngDeg, dMov)) { - if ( ! OnFixtureData( nId, i + 1, sName, ptPos, dAngDeg, dMov)) - return false ; - } - else - break ; - } - - // Emetto movimenti sui grezzi - for ( int i = 0 ; ; ++ i) { - int nRawId ; - int nType ; - Point3d ptPos ; - int nFlag ; - if ( pDisp->GetMoveRawData( i, nRawId, nType, ptPos, nFlag)) { - if ( ! OnRawMoveData( nRawId, i + 1, nType, ptPos, nFlag)) - return false ; - } - else - break ; - } - bool bOk = true ; - - // Se disposizione con movimenti macchina - if ( ! pDisp->IsEmpty()) { - // Ciclo su tutti i percorsi CL della disposizione - int nClPathInd = 0 ; - int nClId = m_pGeomDB->GetFirstNameInGroup( nOpId, MCH_CL) ; - int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ; - while ( bOk && nClPathId != GDB_ID_NULL) { - ++ nClPathInd ; - // processo il percorso di lavoro - if ( ! ProcessClPath( nClPathId, nClPathInd, nOpId, nOpInd)) - bOk = false ; - // passo al percorso successivo - nClPathId = m_pGeomDB->GetNextGroup( nClPathId) ; - } - } - - // Emetto fine disposizione - bOk = bOk && OnDispositionEnd() ; - - return bOk ; + return m_pMachine->LuaCallFunction( ON_DISPOSITION_START) ; } //---------------------------------------------------------------------------- bool -Generator::ProcessMachining( int nOpId, int nOpInd) +Generator::CallOnDispositionEnd( void) { - // Imposto come lavorazione corrente - if ( ! m_pMchMgr->SetCurrMachining( nOpId)) - return false ; - - // Verifico non sia vuota - if ( m_pMchMgr->IsMachiningEmpty()) - return true ; - - // Recupero l'utensile della lavorazione corrente - string sTuuid, sTool ; - if ( ! m_pMchMgr->GetMachiningParam( MPA_TUUID, sTuuid) || - ! m_pMchMgr->TdbGetToolFromUUID( sTuuid, sTool)) - return false ; - - // Se utensile cambierà - if ( ! m_sTool.empty() && m_sTool != sTool) { - // recupero la testa del prossimo utensile (prima dall'attrezzaggio, poi dal DB utensili) - string sNextTcPos ; string sNextHead ; int nNextExit ; - if ( ! m_pMchMgr->GetCurrSetupMgr().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) ; - } - // emetto deselezione vecchio utensile - if ( ! OnToolDeselect( sTool, sNextHead, nNextExit, sNextTcPos)) - return false ; - } - // Aggiorno utensile e assi macchina - if ( ! UpdateTool( sTool) || ! UpdateAxes()) - return false ; - // Se utensile cambiato, emetto selezione nuovo utensile - if ( m_sTool != m_sPrevTool) { - string sTcPos ; string sHead ; int nExit ; - if ( ! m_pMchMgr->GetCurrSetupMgr().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 ; - } - - // Recupero speed - double dSpeed ; - if ( ! m_pMchMgr->GetMachiningParam( MPA_SPEED, dSpeed)) - return false ; - - // Recupero punti di minimo e massimo ingombro - int nClId = m_pGeomDB->GetFirstNameInGroup( nOpId, MCH_CL) ; - Point3d ptMin, ptMax ; - m_pGeomDB->GetInfo( nClId, KEY_MMIN, ptMin) ; - m_pGeomDB->GetInfo( nClId, KEY_MMAX, ptMax) ; - - // Emetto inizio lavorazione - if ( ! OnMachiningStart( nOpId, nOpInd, dSpeed, ptMin, ptMax)) - return false ; - - // Ciclo su tutti i percorsi CL della lavorazione - bool bOk = true ; - int nClPathInd = 0 ; - int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ; - while ( bOk && nClPathId != GDB_ID_NULL) { - ++ nClPathInd ; - // processo il percorso di lavoro - if ( ! ProcessClPath( nClPathId, nClPathInd, nOpId, nOpInd)) - bOk = false ; - // passo al percorso successivo - nClPathId = m_pGeomDB->GetNextGroup( nClPathId) ; - } - - // Emetto fine lavorazione - bOk = bOk && OnMachiningEnd() ; - - return bOk ; + return m_pMachine->LuaCallFunction( ON_DISPOSITION_END) ; } //---------------------------------------------------------------------------- bool -Generator::ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd) +Generator::CallOnTableData( void) { - // Recupero punti di inizio e fine del percorso - Point3d ptStart ; - m_pGeomDB->GetInfo( nClPathId, KEY_START, ptStart) ; - Point3d ptEnd ; - m_pGeomDB->GetInfo( nClPathId, KEY_END, ptEnd) ; - // Recupero versore estrusione associato al percorso (normale al piano di interpolazione) - Vector3d vtExtr ; - m_pGeomDB->GetInfo( nClPathId, KEY_EXTR, vtExtr) ; - // Recupero punti di minimo e massimo ingombro - Point3d ptMin, ptMax ; - m_pGeomDB->GetInfo( nClPathId, KEY_PMIN, ptMin) ; - m_pGeomDB->GetInfo( nClPathId, KEY_PMAX, ptMax) ; - // Recupero massima elevazione - double dElev = 0 ; - m_pGeomDB->GetInfo( nClPathId, KEY_ELEV, dElev) ; - // Recupero il numero di eventi ausiliari iniziali - int nAS = 0 ; - m_pGeomDB->GetInfo( nClPathId, KEY_AS_TOT, nAS) ; - // Emetto inizio percorso di lavoro - if ( ! OnPathStart( nClPathId, nClPathInd, nAS, ptStart, ptEnd, vtExtr, ptMin, ptMax, dElev)) - return false ; - - // Emissione eventuali dati ausiliari di inizio - // processo gli eventi - for ( int i = 1 ; i <= nAS ; ++ i) { - // recupero i dati per l'evento - string sAS ; - if ( ! m_pGeomDB->GetInfo( nClPathId, KEY_AS + ToString( i), sAS)) - return false ; - // richiamo gestione evento ausiliario prima di inizio percorso di lavoro - if ( ! OnPathStartAux( i, sAS)) - return false ; - } - - // Ciclo su tutte le entità del percorso CL - bool bOk = true ; - int nEntInd = 0 ; - int nEntId = m_pGeomDB->GetFirstInGroup( nClPathId) ; - while ( bOk && nEntId != GDB_ID_NULL) { - ++ nEntInd ; - // processo l'entità - if ( ! ProcessClEnt( nEntId, nEntInd, nClPathId, nClPathInd, nOpId, nOpInd)) - bOk = false ; - // passo all'entità successivo - nEntId = m_pGeomDB->GetNext( nEntId) ; - } - - // Recupero il numero di eventi ausiliari finali - int nAE = 0 ; - m_pGeomDB->GetInfo( nClPathId, KEY_AE_TOT, nAE) ; - - // Emetto fine percorso di lavoro - bOk = bOk && OnPathEnd( nAE) ; - - // Emissione eventuali dati ausiliari di fine - // processo gli eventi - for ( int i = 1 ; i <= nAE ; ++ i) { - // recupero i dati per l'evento - string sAE ; - if ( ! m_pGeomDB->GetInfo( nClPathId, KEY_AE + ToString( i), sAE)) - return false ; - // richiamo gestione evento ausiliario dopo fine percorso di lavoro - if ( ! OnPathEndAux( i, sAE)) - return false ; - } - - return bOk ; + return m_pMachine->LuaCallFunction( ON_TABLE_DATA) ; } //---------------------------------------------------------------------------- bool -Generator::ProcessClEnt( int nEntId, int nEntInd, int nClPathId, int nClPathInd, int nOpId, int nOpInd) +Generator::CallOnFixtureData( void) { - // Recupero i dati Cam - CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ; - if ( pCamData == nullptr || pCamData->GetAxesStatus() != CamData::AS_OK) - return false ; - const DBLVECTOR& AxesEnd = pCamData->GetAxesVal() ; - // Emetto movimento - int nMove = pCamData->GetMoveType() ; - switch ( nMove) { - case 0 : // rapido - if ( ! OnRapid( nMove, AxesEnd, pCamData->GetAxesMask(), pCamData->GetFlag())) - return false ; - break ; - case 1 : // linea - if ( ! OnLinear( nMove, AxesEnd, pCamData->GetFeed(), pCamData->GetFlag())) - return false ; - break ; - case 2 : // arco CW - case 3 : // arco CCW - Point3d ptMid( AxesEnd[0], AxesEnd[1], AxesEnd[2]) ; - ptMid.Rotate( pCamData->GetAxesCen(), pCamData->GetAxesNormDir(), - pCamData->GetAxesAngCen() / 2) ; - if ( ! OnArc( nMove, AxesEnd, pCamData->GetAxesCen(), ptMid, pCamData->GetAxesRad(), pCamData->GetAxesAngCen(), - pCamData->GetFeed(), pCamData->GetFlag())) - return false ; - break ; - } - - return true ; + return m_pMachine->LuaCallFunction( ON_FIXTURE_DATA) ; } //---------------------------------------------------------------------------- bool -Generator::UpdateTool( const string& sTool) +Generator::CallOnRawMoveData( void) { - // Salvo l'utensile attuale come precedente - m_sPrevTool = m_sTool ; - // Se cambiato utensile ... - if ( sTool != m_sTool) { - // lo imposto come corrente - if ( ! m_pMchMgr->TdbSetCurrTool( sTool)) - return false ; - // lo carico in macchina (se esiste attrezzaggio prendo i dati da questo) - string sTcPos ; string sHead ; int nExit ; - if ( ! m_pMchMgr->GetCurrSetupMgr().GetToolData( 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 ; - } - return true ; + return m_pMachine->LuaCallFunction( ON_RAWMOVE_DATA) ; } //---------------------------------------------------------------------------- bool -Generator::UpdateDispTool( const string& sTool, const string& sHead, int nExit) +Generator::CallOnToolSelect( void) { - // Salvo l'utensile attuale come precedente - m_sPrevTool = m_sTool ; - // Se non definito o cambiato ... - if ( sTool.empty() || sTool != m_sTool) { - // lo carico in macchina - if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit)) - return false ; - m_sTool = sTool ; - } - return true ; + return m_pMachine->LuaCallFunction( ON_TOOL_SELECT) ; } //---------------------------------------------------------------------------- bool -Generator::UpdateAxes( void) +Generator::CallOnToolDeselect( void) { - // Carico i nomi degli assi macchina attivi - return m_pMachine->GetAllCurrAxesName( m_AxesName) && - m_pMachine->GetAllCurrAxesToken( m_AxesToken) ; + return m_pMachine->LuaCallFunction( ON_TOOL_DESELECT) ; } //---------------------------------------------------------------------------- bool -Generator::OnStart( void) +Generator::CallOnMachiningStart( void) { - // definisco tavola variabili globali - bool bOk = m_pMachine->LuaCreateGlobTable( GLOB_VAR) ; - // assegno versione - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_VER, GetEMkVer()) ; - // assegno valori di default - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_USETO1, false) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MODAL, false) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NUM, false) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NUMTOK, "N") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_LINENBR, 0) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_LINEINC, 1) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C1T, "I") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C2T, "J") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C3T, "K") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M1T, "I") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M2T, "J") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M3T, "K") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RRT, "R") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FT, "F") ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_ST, "S") ; - // chiamo la funzione - bOk = bOk && m_pMachine->LuaCallFunction( ON_START) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_MACHINING_START) ; } //---------------------------------------------------------------------------- bool -Generator::OnEnd( void) +Generator::CallOnMachiningEnd( void) { - // chiamo la funzione - bool bOk = m_pMachine->LuaCallFunction( ON_END) ; - // rimuovo tavola variabili globali - bOk = m_pMachine->LuaResetGlobVar( GLOB_VAR) && bOk ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_MACHINING_END) ; } //---------------------------------------------------------------------------- bool -Generator::OnProgramStart( const string& sMachName, const string& sCncFile, const string& sInfo, bool bSetup) +Generator::CallOnPathStart( void) { - // apro il file di output - bool bOk = m_pMachine->WriterOpen( sCncFile) ; - if ( ! bOk) - m_pMchMgr->SetLastError( 1002, "Error opening Cnc file") ; - // assegno nome macchina - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MACHNAME, sMachName) ; - // assegno nome file - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FILE, sCncFile) ; - // 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 ; + return m_pMachine->LuaCallFunction( ON_PATH_START) ; } //---------------------------------------------------------------------------- bool -Generator::OnProgramEnd( void) +Generator::CallOnPathEnd( void) { - // chiamo fine programma - bool bOk = m_pMachine->LuaCallFunction( ON_PROGRAM_END) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_PATH_END) ; } //---------------------------------------------------------------------------- bool -Generator::ProcessToolData( void) +Generator::CallOnPathStartAux( void) { - struct MyToolData { - string sName ; - string sHead ; - int nExit ; - string sTcPos ; - int nComp ; - double dDiam ; - double dTDiam ; - double dLen ; - double dTLen ; - double dMaxSpeed ; - MyToolData( void) - : sName(), sHead(), nExit( 0), sTcPos(), nComp(0), dDiam( 0), dLen( 0), dMaxSpeed( 0) {} - } ; - typedef vector 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 sTuuid, sTool ; - if ( ! m_pMchMgr->GetMachiningParam( MPA_TUUID, sTuuid) || - ! m_pMchMgr->TdbGetToolFromUUID( sTuuid, sTool)) - return false ; - // Recupero i dati dell'utensile - MyToolData 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_TOTDIAM, Tdata.dTDiam) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, Tdata.dLen) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_TOTLEN, Tdata.dTLen) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_MAXSPEED, Tdata.dMaxSpeed) ; - vTdata.push_back( Tdata) ; - } - } - // passo alla operazione successiva - nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ; - } - - bool bOk = true ; - - // se definito attrezzaggio - if ( m_pMchMgr->GetCurrSetupMgr().Exists()) { - // verifico che tutti gli utensili siano attrezzati - for ( size_t i = 0 ; i < vTdata.size() ; ++ i) { - if ( ! m_pMchMgr->GetCurrSetupMgr().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_pMchMgr->GetCurrSetupMgr().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 dTDiam ; double dLen ; double dTLen ; double dMaxSpeed ; - m_pMchMgr->TdbGetCurrToolParam( TPA_CORR, nComp) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, dDiam) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_TOTDIAM, dTDiam) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ; - m_pMchMgr->TdbGetCurrToolParam( TPA_TOTLEN, dTLen) ; - 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_TTOTDIAM, dTDiam) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, dLen) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTLEN, dTLen) ; - 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_TTOTDIAM, vTdata[i].dTDiam) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, vTdata[i].dLen) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTLEN, vTdata[i].dTLen) ; - 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 ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnDispositionStart( int nOpId, int nOpInd, int nPhase, bool bEmpty, bool bSomeByHand) -{ - // assegno identificativo e indice disposizione - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_DISPID, nOpId) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_DISPIND, nOpInd) ; - // assegno nuovo indice di fase - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PHASE, nPhase) ; - // assegno flag disposizione passiva - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EMPTY, bEmpty) ; - // assegno flag disposizione con operazioni manuali - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SBH, bSomeByHand) ; - // chiamo la funzione di inizio disposizione - bOk = bOk && m_pMachine->LuaCallFunction( ON_DISPOSITION_START) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnDispositionEnd( void) -{ - // chiamo la funzione di fine disposizione - bool bOk = m_pMachine->LuaCallFunction( ON_DISPOSITION_END) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnTableData( const string& sName, const Point3d& ptOri1) -{ - // assegno nome tavola e valore riferimento - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TABNAME, sName) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TABORI1, ptOri1) ; - // chiamo la funzione di gestione dati tavola - bOk = bOk && m_pMachine->LuaCallFunction( ON_TABLE_DATA) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnFixtureData( int nFixId, int nFixInd, const string& sName, const Point3d& ptPos, - double dAngDeg, double dMov) -{ - // assegno dati bloccaggio - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXID, nFixId) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXIND, nFixInd) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXNAME, sName) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXPOS, ptPos) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXANG, dAngDeg) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXMOB, dMov) ; - // chiamo la funzione di gestione dati bloccaggio - bOk = bOk && m_pMachine->LuaCallFunction( ON_FIXTURE_DATA) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) -{ - // assegno dati bloccaggio - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWID, nRawId) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWIND, RawMoveInd) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWTYPE, nType) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWPOS, ptPos) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWFLAG, nFlag) ; - // chiamo la funzione di gestione movimento del grezzo - bOk = bOk && m_pMachine->LuaCallFunction( ON_RAWMOVE_DATA) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnToolSelect( const string& sTool, const string& sHead, int nExit, const string& sTcPos) -{ - // assegno il nome dell'utensile, la testa, l'uscita e l'eventuale posizione nel toolchanger - bool 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) ; - // assegno il token e il nome degli assi - int nNumAxes = int( m_AxesName.size()) ; - for ( int i = 1 ; i <= MAX_AXES ; ++ i) { - if ( i <= nNumAxes) { - bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisToken(i), m_AxesToken[i-1]) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisName(i), m_AxesName[i-1]) ; - } - else { - bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisToken(i)) ; - bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisName(i)) ; - } - } - // chiamo la funzione di selezione utensile - bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_SELECT) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnToolDeselect( const std::string& sNextTool, const string& sNextHead, int nNextExit, const string& sNextTcPos) -{ - // assegno il prossimo utensile - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTTOOL, sNextTool) ; - // assegno la prossima testa - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTHEAD, sNextHead) ; - // assegno la prossima uscita - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTEXIT, nNextExit) ; - // assegno l'eventuale prossima posizione nel TC - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTTCPOS, sNextTcPos) ; - // chiamo la funzione di deselezione utensile - bOk = bOk && m_pMachine->LuaCallFunction( ON_TOOL_DESELECT) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax) -{ - // assegno identificativo e indice lavorazione - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHID, nOpId) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHIND, nOpInd) ; - // assegno speed - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_S, dSpeed) ; - // assegno punti estremi dell'ingombro della lavorazione - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MMIN, ptMin) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MMAX, ptMax) ; - // chiamo la funzione di inizio lavorazione - bOk = bOk && m_pMachine->LuaCallFunction( ON_MACHINING_START) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnMachiningEnd( void) -{ - // chiamo la funzione di fine lavorazione - bool bOk = m_pMachine->LuaCallFunction( ON_MACHINING_END) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd, - const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax, double dElev) -{ - // assegno identificativo e indice percorso di lavorazione - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PATHID, nClPathId) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PATHIND, nClPathInd) ; - // assegno numero di dati ausiliari iniziali - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXTOT, nAS) ; - // assegno punti iniziale e finale e versore estrusione del percorso originale - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_START, ptStart) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_END, ptEnd) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXTR, vtExtr) ; - // assegno punti estremi dell'ingombro del percorso di lavorazione - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PMIN, ptMin) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PMAX, ptMax) ; - // assegno la massima elevazione - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_ELEV, dElev) ; - // chiamo la funzione di inizio percorso di lavorazione - bOk = bOk && m_pMachine->LuaCallFunction( ON_PATH_START) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnPathEnd( int nAE) -{ - // assegno numero di dati ausiliari finali - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXTOT, nAE) ; - // chiamo la funzione di fine percorso di lavorazione - bOk = bOk && m_pMachine->LuaCallFunction( ON_PATH_END) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::OnPathStartAux( int nInd, const string& sAS) -{ - // verifico esistenza funzione if ( ! m_pMachine->LuaExistsFunction( ON_PATH_START_AUX)) return true ; - // assegno indice e valore dato ausiliario - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXIND, nInd) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUX, sAS) ; - // chiamo la funzione di emissione dato ausiliario ad inizio percorso di lavorazione - bOk = bOk && m_pMachine->LuaCallFunction( ON_PATH_START_AUX) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_PATH_START_AUX) ; } - + //---------------------------------------------------------------------------- bool -Generator::OnPathEndAux( int nInd, const string& sAE) +Generator::CallOnPathEndAux( void) { - // verifico esistenza funzione if ( ! m_pMachine->LuaExistsFunction( ON_PATH_END_AUX)) return true ; - // assegno indice e valore dato ausiliario - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXIND, nInd) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUX, sAE) ; - // chiamo la funzione di emissione dato ausiliario alla fine percorso di lavorazione - bOk = bOk && m_pMachine->LuaCallFunction( ON_PATH_END_AUX) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_PATH_END_AUX) ; } //---------------------------------------------------------------------------- bool -Generator::OnRapid( int nMove, const DBLVECTOR& AxesEnd, int nAxesMask, int nFlag) +Generator::CallOnRapid( void) { - // cancello variabili estranee - ResetArcData() ; - // assegno il tipo di movimento - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, nMove) ; - // assegno il valore degli assi - int nNumAxes = int( AxesEnd.size()) ; - for ( int i = 1 ; i <= MAX_AXES ; ++ i) { - if ( i <= nNumAxes) - bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ; - else - bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ; - } - // assegno la mascheratura degli assi - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MASK, nAxesMask) ; - // assegno il valore del flag - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ; - // chiamo la funzione di movimento in rapido - bOk = bOk && m_pMachine->LuaCallFunction( ON_RAPID) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_RAPID) ; } //---------------------------------------------------------------------------- bool -Generator::OnLinear( int nMove, const DBLVECTOR& AxesEnd, double dFeed, int nFlag) +Generator::CallOnLinear( void) { - // cancello variabili estranee - ResetArcData() ; - // assegno il tipo di movimento - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, nMove) ; - // assegno il valore degli assi - int nNumAxes = int( AxesEnd.size()) ; - for ( int i = 1 ; i <= MAX_AXES ; ++ i) { - if ( i <= nNumAxes) - bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ; - else - bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ; - } - // assegno il valore della feed - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_F, dFeed) ; - // assegno il valore del flag - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ; - // chiamo la funzione di movimento in rapido - bOk = bOk && m_pMachine->LuaCallFunction( ON_LINEAR) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_LINEAR) ; } //---------------------------------------------------------------------------- bool -Generator::OnArc( int nMove, const DBLVECTOR& AxesEnd, const Point3d& ptCen, const Point3d& ptMid, - double dRad, double dAngCen, double dFeed, int nFlag) +Generator::CallOnArc( void) { - // assegno il tipo di movimento - bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, nMove) ; - // assegno il valore degli assi - int nNumAxes = int( AxesEnd.size()) ; - for ( int i = 1 ; i <= MAX_AXES ; ++ i) { - if ( i <= nNumAxes) - bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ; - else - bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ; - } - // assegno le coordinate del centro - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C1, ptCen.x) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C2, ptCen.y) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C3, ptCen.z) ; - // assegno le coordinate del punto medio - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M1, ptMid.x) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M2, ptMid.y) ; - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M3, ptMid.z) ; - // assegno il valore del raggio - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RR, dRad) ; - // assegno il valore dell'angolo al centro - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AC, dAngCen) ; - // assegno il valore della feed - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_F, dFeed) ; - // assegno il valore del flag - bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ; - // chiamo la funzione di movimento in rapido - bOk = bOk && m_pMachine->LuaCallFunction( ON_ARC) ; - return bOk ; -} - -//---------------------------------------------------------------------------- -bool -Generator::ResetArcData( void) -{ - // reset dati arco - bool bOk = m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_C1) ; - bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_C2) ; - bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_C3) ; - bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_RR) ; - bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_AC) ; - return bOk ; + return m_pMachine->LuaCallFunction( ON_ARC) ; } diff --git a/Generator.h b/Generator.h index fc97841..af0a659 100644 --- a/Generator.h +++ b/Generator.h @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2018 //---------------------------------------------------------------------------- -// File : Generator.h Data : 28.10.15 Versione : 1.6j4 +// File : Generator.h Data : 29.05.18 Versione : 1.8e6 // Contenuto : Dichiarazione della classe Generator. // // @@ -13,14 +13,10 @@ #pragma once -#include "CamData.h" - -class MachMgr ; -class IGeomDB ; -class Machine ; +#include "Processor.h" //---------------------------------------------------------------------------- -class Generator +class Generator : public Processor { public : Generator( void) ; @@ -29,47 +25,25 @@ class Generator bool Run( const std::string& sCncFile, const std::string& sInfo) ; private : - bool VerifySetup( void) ; - bool ProcessDisposition( int nOpId, int nOpInd) ; - bool ProcessMachining( int nOpId, int nOpInd) ; - bool ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd) ; - bool ProcessClEnt( int nEntId, int nEntInd, int nClPathId, int nClPathInd, int nOpId, int nOpInd) ; - bool UpdateTool( const std::string& sTool) ; - bool UpdateDispTool( const std::string& sTool, const std::string& sHead, int nExit) ; - bool UpdateAxes( void) ; - bool OnStart( void) ; - bool OnEnd( void) ; - bool OnProgramStart( const std::string& sMachName, const std::string& sCncFile, const std::string& sInfo, bool bSetup) ; - bool OnProgramEnd( void) ; - bool ProcessToolData( void) ; - bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos) ; - bool OnToolDeselect( const std::string& sNextTool, const std::string& sNextHead, int nNextExit, const std::string& sNextTcPos) ; - bool OnDispositionStart( int nOpId, int nOpInd, int nPhase, bool bEmpty, bool bSomeByHand) ; - bool OnDispositionEnd( void) ; - bool OnTableData( const std::string& sName, const Point3d& ptOri1) ; - bool OnFixtureData( int nFixId, int nFixInd, const std::string& sName, - const Point3d& ptPos, double dAngDeg, double dMov) ; - bool OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) ; - bool OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax) ; - bool OnMachiningEnd( void) ; - bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd, - const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax, double dElev) ; - bool OnPathEnd( int nAE) ; - bool OnPathStartAux( int nInd, const std::string& sAS) ; - bool OnPathEndAux( int nInd, const std::string& sAE) ; - bool OnRapid( int nMove, const DBLVECTOR& AxesEnd, int nAxesMask, int nFlag) ; - bool OnLinear( int nMove, const DBLVECTOR& AxesEnd, double dFeed, int nFlag) ; - bool OnArc( int nMove, const DBLVECTOR& AxesEnd, const Point3d& ptCen, const Point3d& ptMid, - double dRad, double dAngCen, double dFeed, int nFlag) ; - bool ResetArcData( void) ; - - private : - MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni - IGeomDB* m_pGeomDB ; // puntatore al DB geometrico - Machine* m_pMachine ; // puntatore alla macchina - std::string m_sPrevTool ; // nome dell'utensile precedente - std::string m_sTool ; // nome dell'utensile corrente - STRVECTOR m_AxesName ; // nomi degli assi macchina attivi - STRVECTOR m_AxesToken ; // token degli assi macchina attivi - DBLVECTOR m_AxesVal ; // valori degli assi macchina all'inizio del movimento corrente + bool CallOnStart( void) override ; + bool CallOnEnd( void) override ; + bool CallOnProgramStart( void) override ; + bool CallOnProgramEnd( void) override ; + bool CallOnToolData( void) override ; + bool CallOnDispositionStart( void) override ; + bool CallOnDispositionEnd( void) override ; + bool CallOnTableData( void) override ; + bool CallOnFixtureData( void) override ; + bool CallOnRawMoveData( void) override ; + bool CallOnToolSelect( void) override ; + bool CallOnToolDeselect( void) override ; + bool CallOnMachiningStart( void) override ; + bool CallOnMachiningEnd( void) override ; + bool CallOnPathStart( void) override ; + bool CallOnPathEnd( void) override ; + bool CallOnPathStartAux( void) override ; + bool CallOnPathEndAux( void) override ; + bool CallOnRapid( void) override ; + bool CallOnLinear( void) override ; + bool CallOnArc( void) override ; } ; diff --git a/MachMgr.h b/MachMgr.h index 488085e..2288d51 100644 --- a/MachMgr.h +++ b/MachMgr.h @@ -273,6 +273,7 @@ class MachMgr : public IMachMgr bool SimStop( void) override ; // Generation bool Generate( const std::string& sCncFile, const std::string& sInfo) override ; + bool Estimate( const std::string& sEstFile, const std::string& sInfo) override ; // Machine Calc bool SetCalcTable( const std::string& sTable) override ; bool SetCalcTool( const std::string& sTool, const std::string& sHead, int nExit) override ; diff --git a/MachMgrGeneration.cpp b/MachMgrGeneration.cpp index b9ab9d1..03cd33b 100644 --- a/MachMgrGeneration.cpp +++ b/MachMgrGeneration.cpp @@ -1,7 +1,7 @@ //---------------------------------------------------------------------------- -// EgalTech 2015-2015 +// EgalTech 2015-2018 //---------------------------------------------------------------------------- -// File : MachMgrGeneration.cpp Data : 28.10.15 Versione : 1.6j4 +// File : MachMgrGeneration.cpp Data : 29.05.18 Versione : 1.8e6 // Contenuto : Implementazione gestione generazione della classe MachMgr. // // @@ -17,12 +17,13 @@ #include "MachMgr.h" #include "MachConst.h" #include "Generator.h" +#include "Estimator.h" using namespace std ; //---------------------------------------------------------------------------- bool -MachMgr::Generate( const string& sCncFile, const std::string& sInfo) +MachMgr::Generate( const string& sCncFile, const string& sInfo) { // inizializzazione generatore Generator genPP ; @@ -38,3 +39,22 @@ MachMgr::Generate( const string& sCncFile, const std::string& sInfo) return true ; } + +//---------------------------------------------------------------------------- +bool +MachMgr::Estimate( const string& sEstFile, const string& sInfo) +{ + // inizializzazione generatore + Estimator estPP ; + if ( ! estPP.Init( this)) { + LOG_ERROR( GetEMkLogger(), "Error on Estimate Init") + return false ; + } + // esecuzione della generazione + if ( ! estPP.Run( sEstFile, sInfo)) { + LOG_ERROR( GetEMkLogger(), "Error on Estimate Run") + return false ; + } + + return true ; +} diff --git a/OutputConst.h b/OutputConst.h index ea74198..01d6663 100644 --- a/OutputConst.h +++ b/OutputConst.h @@ -147,13 +147,13 @@ static const std::string ON_END = "OnEnd" ; static const std::string ON_PROGRAM_START = "OnProgramStart" ; static const std::string ON_PROGRAM_END = "OnProgramEnd" ; static const std::string ON_TOOL_DATA = "OnToolData" ; -static const std::string ON_TOOL_SELECT = "OnToolSelect" ; -static const std::string ON_TOOL_DESELECT = "OnToolDeselect" ; static const std::string ON_DISPOSITION_START = "OnDispositionStart" ; static const std::string ON_DISPOSITION_END = "OnDispositionEnd" ; static const std::string ON_TABLE_DATA = "OnTableData" ; static const std::string ON_FIXTURE_DATA = "OnFixtureData" ; static const std::string ON_RAWMOVE_DATA = "OnRawMoveData" ; +static const std::string ON_TOOL_SELECT = "OnToolSelect" ; +static const std::string ON_TOOL_DESELECT = "OnToolDeselect" ; static const std::string ON_MACHINING_START = "OnMachiningStart" ; static const std::string ON_MACHINING_END = "OnMachiningEnd" ; static const std::string ON_PATH_START = "OnPathStart" ; @@ -163,6 +163,28 @@ static const std::string ON_PATH_END_AUX = "OnPathEndAux" ; static const std::string ON_RAPID = "OnRapid" ; static const std::string ON_LINEAR = "OnLinear" ; static const std::string ON_ARC = "OnArc" ; +// Funzioni stima +static const std::string ON_ESTIM_START = "OnEstimStart" ; +static const std::string ON_ESTIM_END = "OnEstimEnd" ; +static const std::string ON_ESTIM_PROGRAM_START = "OnEstimProgramStart" ; +static const std::string ON_ESTIM_PROGRAM_END = "OnEstimProgramEnd" ; +static const std::string ON_ESTIM_TOOL_DATA = "OnEstimToolData" ; +static const std::string ON_ESTIM_DISPOSITION_START = "OnEstimDispositionStart" ; +static const std::string ON_ESTIM_DISPOSITION_END = "OnEstimDispositionEnd" ; +static const std::string ON_ESTIM_TABLE_DATA = "OnEstimTableData" ; +static const std::string ON_ESTIM_FIXTURE_DATA = "OnEstimFixtureData" ; +static const std::string ON_ESTIM_RAWMOVE_DATA = "OnEstimRawMoveData" ; +static const std::string ON_ESTIM_TOOL_SELECT = "OnEstimToolSelect" ; +static const std::string ON_ESTIM_TOOL_DESELECT = "OnEstimToolDeselect" ; +static const std::string ON_ESTIM_MACHINING_START = "OnEstimMachiningStart" ; +static const std::string ON_ESTIM_MACHINING_END = "OnEstimMachiningEnd" ; +static const std::string ON_ESTIM_PATH_START = "OnEstimPathStart" ; +static const std::string ON_ESTIM_PATH_END = "OnEstimPathEnd" ; +static const std::string ON_ESTIM_PATH_START_AUX = "OnEstimPathStartAux" ; +static const std::string ON_ESTIM_PATH_END_AUX = "OnEstimPathEndAux" ; +static const std::string ON_ESTIM_RAPID = "OnEstimRapid" ; +static const std::string ON_ESTIM_LINEAR = "OnEstimLinear" ; +static const std::string ON_ESTIM_ARC = "OnEstimArc" ; // Funzioni simulazione static const std::string ON_SIMUL_START = "OnSimulStart" ; static const std::string ON_SIMUL_END = "OnSimulEnd" ; diff --git a/Processor.cpp b/Processor.cpp new file mode 100644 index 0000000..0bc8901 --- /dev/null +++ b/Processor.cpp @@ -0,0 +1,1024 @@ +//---------------------------------------------------------------------------- +// EgalTech 2018-2018 +//---------------------------------------------------------------------------- +// File : Processor.cpp Data : 29.05.18 Versione : 1.9e6 +// Contenuto : Implementazione della classe Processor. +// +// +// +// Modifiche : 29.05.18 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +//--------------------------- Include ---------------------------------------- +#include "stdafx.h" +#include "DllMain.h" +#include "Processor.h" +#include "MachMgr.h" +#include "Disposition.h" +#include "Machining.h" +#include "MachiningConst.h" +#include "OutputConst.h" +#include "/EgtDev/Include/EMkToolConst.h" +#include "/EgtDev/Include/EMkOperationConst.h" +#include "/EgtDev/Include/EGkCurve.h" +#include "/EgtDev/Include/EGkStringUtils3d.h" +#include "/EgtDev/Include/EGnFileUtils.h" + +using namespace std ; + +//------------------------------ Errors -------------------------------------- +// 1001 = "Error with setup : xxx" +// 1002 = "Error opening Cnc file" + +//---------------------------------------------------------------------------- +static const string ERR_EXT = ".err" ; + +//---------------------------------------------------------------------------- +Processor::Processor( void) +{ + m_pMchMgr = nullptr ; + m_pGeomDB = nullptr ; + m_pMachine = nullptr ; + m_AxesName.reserve( 8) ; + m_AxesToken.reserve( 8) ; + m_AxesVal.reserve( 8) ; +} + +//---------------------------------------------------------------------------- +Processor::~Processor( void) +{ + +} + +//---------------------------------------------------------------------------- +bool +Processor::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() ; + m_sPrevTool.clear() ; + m_sTool.clear() ; + return true ; +} + +//---------------------------------------------------------------------------- +bool +Processor::Run( const string& sOutFile, const std::string& sInfo) +{ + // verifico ci sia una macchinata corrente + if ( m_pMchMgr == nullptr || m_pGeomDB == nullptr || m_pMachine == nullptr || + m_pMchMgr->GetCurrMachGroup() == GDB_ID_NULL) + return false ; + m_pMchMgr->ResetLastError() ; + + // forzo aggiornamento attrezzaggio della macchinata + m_pMchMgr->UpdateSetup() ; + if ( ! VerifySetup()) + return false ; + + // evento inizio esecuzione + bool bOk = true ; + if ( ! OnStart()) { + bOk = false ; + LOG_INFO( GetEMkLogger(), "OnStart error") ; + } + + // apertura file di output ed evento inizio programma + if ( bOk && ! OnProgramStart( m_pMachine->GetMachineName(), sOutFile, sInfo, m_pMchMgr->GetCurrSetupMgr().Exists())) { + bOk = false ; + 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() ; + while ( bOk && nOpId != GDB_ID_NULL) { + // incremento l'indice della operazione + ++ nInd ; + // la prima operazione deve essere una disposizione + if ( nInd == 1) { + if ( m_pMchMgr->GetOperationType( nOpId) != OPER_DISP) { + bOk = false ; + continue ; + } + } + // processo l'operazione + int nType = m_pMchMgr->GetOperationType( nOpId) ; + if ( IsValidDispositionType( nType)) { + if ( ! ProcessDisposition( nOpId, nInd)) + bOk = false ; + } + else if ( IsValidMachiningType( nType)) { + if ( ! ProcessMachining( nOpId, nInd)) + bOk = false ; + } + // passo alla operazione successiva + nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ; + } + + // evento fine programma + if ( bOk && ! OnProgramEnd()) { + bOk = false ; + LOG_INFO( GetEMkLogger(), "OnProgramEnd error") ; + } + // chiudo il file di output + if ( ! m_pMachine->WriterClose()) + bOk = false ; + + // evento fine esecuzione + if ( ! OnEnd()) { + bOk = false ; + LOG_INFO( GetEMkLogger(), "OnEnd error") ; + } + + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::VerifySetup( void) +{ + // se attrezzaggio non definito, nulla da verificare + if ( ! m_pMchMgr->GetCurrSetupMgr().Exists()) + return true ; + + // lancio la verifica + STRVECTOR vsErr ; + if ( m_pMchMgr->VerifyCurrSetup( vsErr)) + return true ; + + // gestisco errore + string sErr = "Error with setup :" ; + for each( const auto& sTmp in vsErr) + sErr += " " + sTmp ; + m_pMchMgr->SetLastError( 1001, sErr) ; + return false ; +} + +//---------------------------------------------------------------------------- +bool +Processor::ProcessDisposition( int nOpId, int nOpInd) +{ + // Parametri della disposizione + Disposition* pDisp = GetDisposition( m_pGeomDB->GetUserObj( nOpId)) ; + if ( pDisp == nullptr) + return false ; + + // Imposto la fase + int nPhase = pDisp->GetPhase() ; + m_pMchMgr->SetCurrPhase( nPhase) ; + bool bEmpty = pDisp->IsEmpty() ; + bool bSomeByHand = pDisp->GetSomeByHand() ; + + // Se disposizione con movimenti macchina + if ( ! pDisp->IsEmpty()) { + // Recupero l'utensile della disposizione corrente + string sTool ; string sHead ; int nExit ; string sTcPos ; + if ( ! pDisp->GetToolData( sTool, sHead, nExit, sTcPos)) + return false ; + // Se esiste utensile corrente e cambierà, lo scarico + if ( ! m_sTool.empty() && m_sTool != sTool) { + // emetto deselezione vecchio utensile + if ( ! OnToolDeselect( sTool, sHead, nExit, sTcPos)) + return false ; + } + // Aggiorno utensile e assi macchina + if ( ! UpdateDispTool( sTool, sHead, nExit) || ! UpdateAxes()) + return false ; + // Se utensile non definito o cambiato, emetto selezione nuovo utensile + if ( m_sTool.empty() || m_sTool != m_sPrevTool) { + if ( ! OnToolSelect( sTool, sHead, nExit, sTcPos)) + return false ; + } + } + + // Emetto inizio disposizione + if ( ! OnDispositionStart( nOpId, nOpInd, nPhase, bEmpty, bSomeByHand)) + return false ; + + // Emetto dati tavola + string sTable ; + pDisp->GetTable( sTable) ; + Point3d ptOri1 ; + pDisp->GetTableRef1( ptOri1) ; + if ( ! OnTableData( sTable, ptOri1)) + return false ; + + // Emetto dati bloccaggi + for ( int i = 0 ; ; ++ i) { + string sName ; + int nId ; + Point3d ptPos ; + double dAngDeg ; + double dMov ; + if ( pDisp->GetFixtureData( i, sName, nId, ptPos, dAngDeg, dMov)) { + if ( ! OnFixtureData( nId, i + 1, sName, ptPos, dAngDeg, dMov)) + return false ; + } + else + break ; + } + + // Emetto movimenti sui grezzi + for ( int i = 0 ; ; ++ i) { + int nRawId ; + int nType ; + Point3d ptPos ; + int nFlag ; + if ( pDisp->GetMoveRawData( i, nRawId, nType, ptPos, nFlag)) { + if ( ! OnRawMoveData( nRawId, i + 1, nType, ptPos, nFlag)) + return false ; + } + else + break ; + } + bool bOk = true ; + + // Se disposizione con movimenti macchina + if ( ! pDisp->IsEmpty()) { + // Ciclo su tutti i percorsi CL della disposizione + int nClPathInd = 0 ; + int nClId = m_pGeomDB->GetFirstNameInGroup( nOpId, MCH_CL) ; + int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ; + while ( bOk && nClPathId != GDB_ID_NULL) { + ++ nClPathInd ; + // processo il percorso di lavoro + if ( ! ProcessClPath( nClPathId, nClPathInd, nOpId, nOpInd)) + bOk = false ; + // passo al percorso successivo + nClPathId = m_pGeomDB->GetNextGroup( nClPathId) ; + } + } + + // Emetto fine disposizione + bOk = bOk && OnDispositionEnd() ; + + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::ProcessMachining( int nOpId, int nOpInd) +{ + // Imposto come lavorazione corrente + if ( ! m_pMchMgr->SetCurrMachining( nOpId)) + return false ; + + // Verifico non sia vuota + if ( m_pMchMgr->IsMachiningEmpty()) + return true ; + + // Recupero l'utensile della lavorazione corrente + string sTuuid, sTool ; + if ( ! m_pMchMgr->GetMachiningParam( MPA_TUUID, sTuuid) || + ! m_pMchMgr->TdbGetToolFromUUID( sTuuid, sTool)) + return false ; + + // Se utensile cambierà + if ( ! m_sTool.empty() && m_sTool != sTool) { + // recupero la testa del prossimo utensile (prima dall'attrezzaggio, poi dal DB utensili) + string sNextTcPos ; string sNextHead ; int nNextExit ; + if ( ! m_pMchMgr->GetCurrSetupMgr().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) ; + } + // emetto deselezione vecchio utensile + if ( ! OnToolDeselect( sTool, sNextHead, nNextExit, sNextTcPos)) + return false ; + } + // Aggiorno utensile e assi macchina + if ( ! UpdateTool( sTool) || ! UpdateAxes()) + return false ; + // Se utensile cambiato, emetto selezione nuovo utensile + if ( m_sTool != m_sPrevTool) { + string sTcPos ; string sHead ; int nExit ; + if ( ! m_pMchMgr->GetCurrSetupMgr().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 ; + } + + // Recupero speed + double dSpeed ; + if ( ! m_pMchMgr->GetMachiningParam( MPA_SPEED, dSpeed)) + return false ; + + // Recupero punti di minimo e massimo ingombro + int nClId = m_pGeomDB->GetFirstNameInGroup( nOpId, MCH_CL) ; + Point3d ptMin, ptMax ; + m_pGeomDB->GetInfo( nClId, KEY_MMIN, ptMin) ; + m_pGeomDB->GetInfo( nClId, KEY_MMAX, ptMax) ; + + // Emetto inizio lavorazione + if ( ! OnMachiningStart( nOpId, nOpInd, dSpeed, ptMin, ptMax)) + return false ; + + // Ciclo su tutti i percorsi CL della lavorazione + bool bOk = true ; + int nClPathInd = 0 ; + int nClPathId = m_pGeomDB->GetFirstGroupInGroup( nClId) ; + while ( bOk && nClPathId != GDB_ID_NULL) { + ++ nClPathInd ; + // processo il percorso di lavoro + if ( ! ProcessClPath( nClPathId, nClPathInd, nOpId, nOpInd)) + bOk = false ; + // passo al percorso successivo + nClPathId = m_pGeomDB->GetNextGroup( nClPathId) ; + } + + // Emetto fine lavorazione + bOk = bOk && OnMachiningEnd() ; + + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd) +{ + // Recupero punti di inizio e fine del percorso + Point3d ptStart ; + m_pGeomDB->GetInfo( nClPathId, KEY_START, ptStart) ; + Point3d ptEnd ; + m_pGeomDB->GetInfo( nClPathId, KEY_END, ptEnd) ; + // Recupero versore estrusione associato al percorso (normale al piano di interpolazione) + Vector3d vtExtr ; + m_pGeomDB->GetInfo( nClPathId, KEY_EXTR, vtExtr) ; + // Recupero punti di minimo e massimo ingombro + Point3d ptMin, ptMax ; + m_pGeomDB->GetInfo( nClPathId, KEY_PMIN, ptMin) ; + m_pGeomDB->GetInfo( nClPathId, KEY_PMAX, ptMax) ; + // Recupero massima elevazione + double dElev = 0 ; + m_pGeomDB->GetInfo( nClPathId, KEY_ELEV, dElev) ; + // Recupero il numero di eventi ausiliari iniziali + int nAS = 0 ; + m_pGeomDB->GetInfo( nClPathId, KEY_AS_TOT, nAS) ; + // Emetto inizio percorso di lavoro + if ( ! OnPathStart( nClPathId, nClPathInd, nAS, ptStart, ptEnd, vtExtr, ptMin, ptMax, dElev)) + return false ; + + // Emissione eventuali dati ausiliari di inizio + // processo gli eventi + for ( int i = 1 ; i <= nAS ; ++ i) { + // recupero i dati per l'evento + string sAS ; + if ( ! m_pGeomDB->GetInfo( nClPathId, KEY_AS + ToString( i), sAS)) + return false ; + // richiamo gestione evento ausiliario prima di inizio percorso di lavoro + if ( ! OnPathStartAux( i, sAS)) + return false ; + } + + // Ciclo su tutte le entità del percorso CL + bool bOk = true ; + int nEntInd = 0 ; + int nEntId = m_pGeomDB->GetFirstInGroup( nClPathId) ; + while ( bOk && nEntId != GDB_ID_NULL) { + ++ nEntInd ; + // processo l'entità + if ( ! ProcessClEnt( nEntId, nEntInd, nClPathId, nClPathInd, nOpId, nOpInd)) + bOk = false ; + // passo all'entità successivo + nEntId = m_pGeomDB->GetNext( nEntId) ; + } + + // Recupero il numero di eventi ausiliari finali + int nAE = 0 ; + m_pGeomDB->GetInfo( nClPathId, KEY_AE_TOT, nAE) ; + + // Emetto fine percorso di lavoro + bOk = bOk && OnPathEnd( nAE) ; + + // Emissione eventuali dati ausiliari di fine + // processo gli eventi + for ( int i = 1 ; i <= nAE ; ++ i) { + // recupero i dati per l'evento + string sAE ; + if ( ! m_pGeomDB->GetInfo( nClPathId, KEY_AE + ToString( i), sAE)) + return false ; + // richiamo gestione evento ausiliario dopo fine percorso di lavoro + if ( ! OnPathEndAux( i, sAE)) + return false ; + } + + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::ProcessClEnt( int nEntId, int nEntInd, int nClPathId, int nClPathInd, int nOpId, int nOpInd) +{ + // Recupero i dati Cam + CamData* pCamData = GetCamData( m_pGeomDB->GetUserObj( nEntId)) ; + if ( pCamData == nullptr || pCamData->GetAxesStatus() != CamData::AS_OK) + return false ; + const DBLVECTOR& AxesEnd = pCamData->GetAxesVal() ; + // Emetto movimento + int nMove = pCamData->GetMoveType() ; + switch ( nMove) { + case 0 : // rapido + if ( ! OnRapid( nMove, AxesEnd, pCamData->GetAxesMask(), pCamData->GetFlag())) + return false ; + break ; + case 1 : // linea + if ( ! OnLinear( nMove, AxesEnd, pCamData->GetFeed(), pCamData->GetFlag())) + return false ; + break ; + case 2 : // arco CW + case 3 : // arco CCW + Point3d ptMid( AxesEnd[0], AxesEnd[1], AxesEnd[2]) ; + ptMid.Rotate( pCamData->GetAxesCen(), pCamData->GetAxesNormDir(), - pCamData->GetAxesAngCen() / 2) ; + if ( ! OnArc( nMove, AxesEnd, pCamData->GetAxesCen(), ptMid, pCamData->GetAxesRad(), pCamData->GetAxesAngCen(), + pCamData->GetFeed(), pCamData->GetFlag())) + return false ; + break ; + } + + return true ; +} + +//---------------------------------------------------------------------------- +bool +Processor::UpdateTool( const string& sTool) +{ + // Salvo l'utensile attuale come precedente + m_sPrevTool = m_sTool ; + // Se cambiato utensile ... + if ( sTool != m_sTool) { + // lo imposto come corrente + if ( ! m_pMchMgr->TdbSetCurrTool( sTool)) + return false ; + // lo carico in macchina (se esiste attrezzaggio prendo i dati da questo) + string sTcPos ; string sHead ; int nExit ; + if ( ! m_pMchMgr->GetCurrSetupMgr().GetToolData( 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 ; + } + return true ; +} + +//---------------------------------------------------------------------------- +bool +Processor::UpdateDispTool( const string& sTool, const string& sHead, int nExit) +{ + // Salvo l'utensile attuale come precedente + m_sPrevTool = m_sTool ; + // Se non definito o cambiato ... + if ( sTool.empty() || sTool != m_sTool) { + // lo carico in macchina + if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit)) + return false ; + m_sTool = sTool ; + } + return true ; +} + +//---------------------------------------------------------------------------- +bool +Processor::UpdateAxes( void) +{ + // Carico i nomi degli assi macchina attivi + return m_pMachine->GetAllCurrAxesName( m_AxesName) && + m_pMachine->GetAllCurrAxesToken( m_AxesToken) ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnStart( void) +{ + // definisco tavola variabili globali + bool bOk = m_pMachine->LuaCreateGlobTable( GLOB_VAR) ; + // assegno versione + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_VER, GetEMkVer()) ; + // assegno valori di default + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_USETO1, false) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MODAL, false) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NUM, false) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NUMTOK, "N") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_LINENBR, 0) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_LINEINC, 1) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C1T, "I") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C2T, "J") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C3T, "K") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M1T, "I") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M2T, "J") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M3T, "K") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RRT, "R") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FT, "F") ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_ST, "S") ; + // chiamo la funzione + bOk = bOk && CallOnStart() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnEnd( void) +{ + // chiamo la funzione + bool bOk = CallOnEnd() ; + // rimuovo tavola variabili globali + bOk = m_pMachine->LuaResetGlobVar( GLOB_VAR) && bOk ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnProgramStart( const string& sMachName, const string& sCncFile, const string& sInfo, bool bSetup) +{ + // apro il file di output + bool bOk = m_pMachine->WriterOpen( sCncFile) ; + if ( ! bOk) + m_pMchMgr->SetLastError( 1002, "Error opening Cnc file") ; + // assegno nome macchina + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MACHNAME, sMachName) ; + // assegno nome file + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FILE, sCncFile) ; + // 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 && CallOnProgramStart() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnProgramEnd( void) +{ + // chiamo fine programma + bool bOk = CallOnProgramEnd() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::ProcessToolData( void) +{ + struct MyToolData { + string sName ; + string sHead ; + int nExit ; + string sTcPos ; + int nComp ; + double dDiam ; + double dTDiam ; + double dLen ; + double dTLen ; + double dMaxSpeed ; + MyToolData( void) + : sName(), sHead(), nExit( 0), sTcPos(), nComp(0), dDiam( 0), dLen( 0), dMaxSpeed( 0) {} + } ; + typedef vector 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 sTuuid, sTool ; + if ( ! m_pMchMgr->GetMachiningParam( MPA_TUUID, sTuuid) || + ! m_pMchMgr->TdbGetToolFromUUID( sTuuid, sTool)) + return false ; + // Recupero i dati dell'utensile + MyToolData 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_TOTDIAM, Tdata.dTDiam) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, Tdata.dLen) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_TOTLEN, Tdata.dTLen) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_MAXSPEED, Tdata.dMaxSpeed) ; + vTdata.push_back( Tdata) ; + } + } + // passo alla operazione successiva + nOpId = m_pMchMgr->GetNextActiveOperation( nOpId) ; + } + + bool bOk = true ; + + // se definito attrezzaggio + if ( m_pMchMgr->GetCurrSetupMgr().Exists()) { + // verifico che tutti gli utensili siano attrezzati + for ( size_t i = 0 ; i < vTdata.size() ; ++ i) { + if ( ! m_pMchMgr->GetCurrSetupMgr().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_pMchMgr->GetCurrSetupMgr().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 dTDiam ; double dLen ; double dTLen ; double dMaxSpeed ; + m_pMchMgr->TdbGetCurrToolParam( TPA_CORR, nComp) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_DIAM, dDiam) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_TOTDIAM, dTDiam) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_LEN, dLen) ; + m_pMchMgr->TdbGetCurrToolParam( TPA_TOTLEN, dTLen) ; + 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_TTOTDIAM, dTDiam) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, dLen) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTLEN, dTLen) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, dMaxSpeed) ; + } + // chiamo la funzione di emissione dati utensile + bOk = bOk && CallOnToolData() ; + } + } + + // 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_TTOTDIAM, vTdata[i].dTDiam) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TLEN, vTdata[i].dLen) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TTOTLEN, vTdata[i].dTLen) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SMAX, vTdata[i].dMaxSpeed) ; + // se esiste, chiamo la funzione di emissione dati utensile + bOk = bOk && CallOnToolData() ; + // 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 ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnDispositionStart( int nOpId, int nOpInd, int nPhase, bool bEmpty, bool bSomeByHand) +{ + // assegno identificativo e indice disposizione + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_DISPID, nOpId) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_DISPIND, nOpInd) ; + // assegno nuovo indice di fase + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PHASE, nPhase) ; + // assegno flag disposizione passiva + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EMPTY, bEmpty) ; + // assegno flag disposizione con operazioni manuali + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_SBH, bSomeByHand) ; + // chiamo la funzione di inizio disposizione + bOk = bOk && CallOnDispositionStart() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnDispositionEnd( void) +{ + // chiamo la funzione di fine disposizione + bool bOk = CallOnDispositionEnd() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnTableData( const string& sName, const Point3d& ptOri1) +{ + // assegno nome tavola e valore riferimento + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TABNAME, sName) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_TABORI1, ptOri1) ; + // chiamo la funzione di gestione dati tavola + bOk = bOk && CallOnTableData() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnFixtureData( int nFixId, int nFixInd, const string& sName, const Point3d& ptPos, + double dAngDeg, double dMov) +{ + // assegno dati bloccaggio + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXID, nFixId) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXIND, nFixInd) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXNAME, sName) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXPOS, ptPos) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXANG, dAngDeg) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FIXMOB, dMov) ; + // chiamo la funzione di gestione dati bloccaggio + bOk = bOk && CallOnFixtureData() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) +{ + // assegno dati bloccaggio + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWID, nRawId) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWIND, RawMoveInd) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWTYPE, nType) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWPOS, ptPos) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RAWFLAG, nFlag) ; + // chiamo la funzione di gestione movimento del grezzo + bOk = bOk && CallOnRawMoveData() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnToolSelect( const string& sTool, const string& sHead, int nExit, const string& sTcPos) +{ + // assegno il nome dell'utensile, la testa, l'uscita e l'eventuale posizione nel toolchanger + bool 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) ; + // assegno il token e il nome degli assi + int nNumAxes = int( m_AxesName.size()) ; + for ( int i = 1 ; i <= MAX_AXES ; ++ i) { + if ( i <= nNumAxes) { + bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisToken(i), m_AxesToken[i-1]) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisName(i), m_AxesName[i-1]) ; + } + else { + bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisToken(i)) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisName(i)) ; + } + } + // chiamo la funzione di selezione utensile + bOk = bOk && CallOnToolSelect() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnToolDeselect( const std::string& sNextTool, const string& sNextHead, int nNextExit, const string& sNextTcPos) +{ + // assegno il prossimo utensile + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTTOOL, sNextTool) ; + // assegno la prossima testa + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTHEAD, sNextHead) ; + // assegno la prossima uscita + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTEXIT, nNextExit) ; + // assegno l'eventuale prossima posizione nel TC + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_NEXTTCPOS, sNextTcPos) ; + // chiamo la funzione di deselezione utensile + bOk = bOk && CallOnToolDeselect() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax) +{ + // assegno identificativo e indice lavorazione + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHID, nOpId) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MCHIND, nOpInd) ; + // assegno speed + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_S, dSpeed) ; + // assegno punti estremi dell'ingombro della lavorazione + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MMIN, ptMin) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MMAX, ptMax) ; + // chiamo la funzione di inizio lavorazione + bOk = bOk && CallOnMachiningStart() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnMachiningEnd( void) +{ + // chiamo la funzione di fine lavorazione + bool bOk = CallOnMachiningEnd() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd, + const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax, double dElev) +{ + // assegno identificativo e indice percorso di lavorazione + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PATHID, nClPathId) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PATHIND, nClPathInd) ; + // assegno numero di dati ausiliari iniziali + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXTOT, nAS) ; + // assegno punti iniziale e finale e versore estrusione del percorso originale + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_START, ptStart) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_END, ptEnd) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_EXTR, vtExtr) ; + // assegno punti estremi dell'ingombro del percorso di lavorazione + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PMIN, ptMin) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_PMAX, ptMax) ; + // assegno la massima elevazione + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_ELEV, dElev) ; + // chiamo la funzione di inizio percorso di lavorazione + bOk = bOk && CallOnPathStart() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnPathEnd( int nAE) +{ + // assegno numero di dati ausiliari finali + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXTOT, nAE) ; + // chiamo la funzione di fine percorso di lavorazione + bOk = bOk && CallOnPathEnd() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnPathStartAux( int nInd, const string& sAS) +{ + // assegno indice e valore dato ausiliario + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXIND, nInd) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUX, sAS) ; + // chiamo la funzione di emissione dato ausiliario ad inizio percorso di lavorazione + bOk = bOk && CallOnPathStartAux() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnPathEndAux( int nInd, const string& sAE) +{ + // assegno indice e valore dato ausiliario + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUXIND, nInd) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AUX, sAE) ; + // chiamo la funzione di emissione dato ausiliario alla fine percorso di lavorazione + bOk = bOk && CallOnPathEndAux() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnRapid( int nMove, const DBLVECTOR& AxesEnd, int nAxesMask, int nFlag) +{ + // cancello variabili estranee + ResetArcData() ; + // assegno il tipo di movimento + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, nMove) ; + // assegno il valore degli assi + int nNumAxes = int( AxesEnd.size()) ; + for ( int i = 1 ; i <= MAX_AXES ; ++ i) { + if ( i <= nNumAxes) + bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ; + else + bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ; + } + // assegno la mascheratura degli assi + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MASK, nAxesMask) ; + // assegno il valore del flag + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ; + // chiamo la funzione di movimento in rapido + bOk = bOk && CallOnRapid() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnLinear( int nMove, const DBLVECTOR& AxesEnd, double dFeed, int nFlag) +{ + // cancello variabili estranee + ResetArcData() ; + // assegno il tipo di movimento + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, nMove) ; + // assegno il valore degli assi + int nNumAxes = int( AxesEnd.size()) ; + for ( int i = 1 ; i <= MAX_AXES ; ++ i) { + if ( i <= nNumAxes) + bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ; + else + bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ; + } + // assegno il valore della feed + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_F, dFeed) ; + // assegno il valore del flag + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ; + // chiamo la funzione di movimento in rapido + bOk = bOk && CallOnLinear() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::OnArc( int nMove, const DBLVECTOR& AxesEnd, const Point3d& ptCen, const Point3d& ptMid, + double dRad, double dAngCen, double dFeed, int nFlag) +{ + // assegno il tipo di movimento + bool bOk = m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_MOVE, nMove) ; + // assegno il valore degli assi + int nNumAxes = int( AxesEnd.size()) ; + for ( int i = 1 ; i <= MAX_AXES ; ++ i) { + if ( i <= nNumAxes) + bOk = bOk && m_pMachine->LuaSetGlobVar( GetGlobVarAxisValue(i), AxesEnd[i-1]) ; + else + bOk = bOk && m_pMachine->LuaResetGlobVar( GetGlobVarAxisValue(i)) ; + } + // assegno le coordinate del centro + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C1, ptCen.x) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C2, ptCen.y) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_C3, ptCen.z) ; + // assegno le coordinate del punto medio + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M1, ptMid.x) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M2, ptMid.y) ; + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_M3, ptMid.z) ; + // assegno il valore del raggio + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_RR, dRad) ; + // assegno il valore dell'angolo al centro + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_AC, dAngCen) ; + // assegno il valore della feed + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_F, dFeed) ; + // assegno il valore del flag + bOk = bOk && m_pMachine->LuaSetGlobVar( GLOB_VAR + GVAR_FLAG, nFlag) ; + // chiamo la funzione di movimento in rapido + bOk = bOk && CallOnArc() ; + return bOk ; +} + +//---------------------------------------------------------------------------- +bool +Processor::ResetArcData( void) +{ + // reset dati arco + bool bOk = m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_C1) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_C2) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_C3) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_M1) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_M2) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_M3) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_RR) ; + bOk = bOk && m_pMachine->LuaResetGlobVar( GLOB_VAR + GVAR_AC) ; + return bOk ; +} diff --git a/Processor.h b/Processor.h new file mode 100644 index 0000000..674dcd6 --- /dev/null +++ b/Processor.h @@ -0,0 +1,98 @@ +//---------------------------------------------------------------------------- +// EgalTech 2018-2018 +//---------------------------------------------------------------------------- +// File : Processor.h Data : 29.05.18 Versione : 1.9e6 +// Contenuto : Dichiarazione della classe Processor. +// +// +// +// Modifiche : 29.05.18 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "CamData.h" + +class MachMgr ; +class IGeomDB ; +class Machine ; + +//---------------------------------------------------------------------------- +class Processor +{ + public : + Processor( void) ; + ~Processor( void) ; + bool Init( MachMgr* pMchMgr) ; + bool Run( const std::string& sCncFile, const std::string& sInfo) ; + + private : + bool VerifySetup( void) ; + bool ProcessDisposition( int nOpId, int nOpInd) ; + bool ProcessMachining( int nOpId, int nOpInd) ; + bool ProcessClPath( int nClPathId, int nClPathInd, int nOpId, int nOpInd) ; + bool ProcessClEnt( int nEntId, int nEntInd, int nClPathId, int nClPathInd, int nOpId, int nOpInd) ; + bool UpdateTool( const std::string& sTool) ; + bool UpdateDispTool( const std::string& sTool, const std::string& sHead, int nExit) ; + bool UpdateAxes( void) ; + bool OnStart( void) ; + bool OnEnd( void) ; + bool OnProgramStart( const std::string& sMachName, const std::string& sCncFile, const std::string& sInfo, bool bSetup) ; + bool OnProgramEnd( void) ; + bool ProcessToolData( void) ; + bool OnToolSelect( const std::string& sTool, const std::string& sHead, int nExit, const std::string& sTcPos) ; + bool OnToolDeselect( const std::string& sNextTool, const std::string& sNextHead, int nNextExit, const std::string& sNextTcPos) ; + bool OnDispositionStart( int nOpId, int nOpInd, int nPhase, bool bEmpty, bool bSomeByHand) ; + bool OnDispositionEnd( void) ; + bool OnTableData( const std::string& sName, const Point3d& ptOri1) ; + bool OnFixtureData( int nFixId, int nFixInd, const std::string& sName, + const Point3d& ptPos, double dAngDeg, double dMov) ; + bool OnRawMoveData( int nRawId, int RawMoveInd, int nType, const Point3d& ptPos, int nFlag) ; + bool OnMachiningStart( int nOpId, int nOpInd, double dSpeed, const Point3d& ptMin, const Point3d& ptMax) ; + bool OnMachiningEnd( void) ; + bool OnPathStart( int nClPathId, int nClPathInd, int nAS, const Point3d& ptStart, const Point3d& ptEnd, + const Vector3d& vtExtr, const Point3d& ptMin, const Point3d& ptMax, double dElev) ; + bool OnPathEnd( int nAE) ; + bool OnPathStartAux( int nInd, const std::string& sAS) ; + bool OnPathEndAux( int nInd, const std::string& sAE) ; + bool OnRapid( int nMove, const DBLVECTOR& AxesEnd, int nAxesMask, int nFlag) ; + bool OnLinear( int nMove, const DBLVECTOR& AxesEnd, double dFeed, int nFlag) ; + bool OnArc( int nMove, const DBLVECTOR& AxesEnd, const Point3d& ptCen, const Point3d& ptMid, + double dRad, double dAngCen, double dFeed, int nFlag) ; + bool ResetArcData( void) ; + + protected : + virtual bool CallOnStart( void) = 0 ; + virtual bool CallOnEnd( void) = 0 ; + virtual bool CallOnProgramStart( void) = 0 ; + virtual bool CallOnProgramEnd( void) = 0 ; + virtual bool CallOnToolData( void) = 0 ; + virtual bool CallOnDispositionStart( void) = 0 ; + virtual bool CallOnDispositionEnd( void) = 0 ; + virtual bool CallOnTableData( void) = 0 ; + virtual bool CallOnFixtureData( void) = 0 ; + virtual bool CallOnRawMoveData( void) = 0 ; + virtual bool CallOnToolSelect( void) = 0 ; + virtual bool CallOnToolDeselect( void) = 0 ; + virtual bool CallOnMachiningStart( void) = 0 ; + virtual bool CallOnMachiningEnd( void) = 0 ; + virtual bool CallOnPathStart( void) = 0 ; + virtual bool CallOnPathEnd( void) = 0 ; + virtual bool CallOnPathStartAux( void) = 0 ; + virtual bool CallOnPathEndAux( void) = 0 ; + virtual bool CallOnRapid( void) = 0 ; + virtual bool CallOnLinear( void) = 0 ; + virtual bool CallOnArc( void) = 0 ; + + protected : + MachMgr* m_pMchMgr ; // puntatore al gestore di tutte le lavorazioni + IGeomDB* m_pGeomDB ; // puntatore al DB geometrico + Machine* m_pMachine ; // puntatore alla macchina + std::string m_sPrevTool ; // nome dell'utensile precedente + std::string m_sTool ; // nome dell'utensile corrente + STRVECTOR m_AxesName ; // nomi degli assi macchina attivi + STRVECTOR m_AxesToken ; // token degli assi macchina attivi + DBLVECTOR m_AxesVal ; // valori degli assi macchina all'inizio del movimento corrente +} ; diff --git a/Sawing.cpp b/Sawing.cpp index 7c28122..fe84e5b 100644 --- a/Sawing.cpp +++ b/Sawing.cpp @@ -1744,7 +1744,7 @@ Sawing::GenerateLineCl( const ICurveLine* pLine, const Vector3d& vtTool, const V if ( AddLinearMove( ptP2) == GDB_ID_NULL) return false ; // movimento di lato - SetFeed( ( IsEven( i) ? GetBackFeed() : GetFeed())) ; + SetFeed( ( i == 0 ? GetBackFeed() : GetFeed())) ; if ( AddLinearMove( ptP3) == GDB_ID_NULL) return false ; } diff --git a/SawingData.h b/SawingData.h index c4a49aa..5103e34 100644 --- a/SawingData.h +++ b/SawingData.h @@ -28,7 +28,7 @@ struct SawingData : public MachiningData double m_dStartFeed ; // velocità di lavorazione iniziale ( se 0 da utensile) double m_dEndFeed ; // velocità di lavorazione finale ( se 0 da utensile) double m_dTipFeed ; // velocità di lavorazione di testa ( se 0 da utensile) - double m_dBackFeed ; // velocità di lavorazione al ritorno ( se 0 da utensile) + double m_dBackFeed ; // velocità di lavorazione dell'ultimo ritorno ( se 0 da utensile) double m_dOffsR ; // offset radiale ( se UNKNOWN_PAR da utensile) double m_dOffsL ; // offset longitudinale ( se UNKNOWN_PAR da utensile) bool m_bInvert ; // flag di inversione direzione lavorazione