diff --git a/Machine.h b/Machine.h index 215e48d..3ac4540 100644 --- a/Machine.h +++ b/Machine.h @@ -299,6 +299,7 @@ class Machine static int LuaEmtUnlinkAllPartsFromGroups( lua_State* L) ; static int LuaEmtWrite( lua_State* L) ; static int LuaEmtSetOutstrokeInfo( lua_State* L) ; + static int LuaEmtSetLastError( lua_State* L) ; } ; //---------------------------------------------------------------------------- diff --git a/MachineLua.cpp b/MachineLua.cpp index e9df6d0..31a11c7 100644 --- a/MachineLua.cpp +++ b/MachineLua.cpp @@ -108,6 +108,8 @@ Machine::LuaInit( const string& sMachineName) m_LuaMgr.RegisterFunction( "EmtWrite", Machine::LuaEmtWrite) ; // registro la funzione per impostare informazioni di outstroke m_LuaMgr.RegisterFunction( "EmtSetOutstrokeInfo", Machine::LuaEmtSetOutstrokeInfo) ; + // registro la funzione per impostare informazioni di errore + m_LuaMgr.RegisterFunction( "EmtSetLastError", Machine::LuaEmtSetLastError) ; return true ; } @@ -967,3 +969,22 @@ Machine::LuaEmtSetOutstrokeInfo( lua_State* L) LuaSetParam( L, true) ; return 1 ; } + +//---------------------------------------------------------------------------- +int +Machine::LuaEmtSetLastError( lua_State* L) +{ + // 2 parametri : nErrId, sErrDesc + int nErrId ; + LuaCheckParam( L, 1, nErrId) + string sErrDesc ; + LuaCheckParam( L, 2, sErrDesc) + LuaClearStack( L) ; + // verifico ci sia una macchina attiva + if ( m_pMchLua == nullptr) + return luaL_error( L, " Unknown Machine") ; + // assegno i dati + bool bOk = ( m_pMchLua->m_pMchMgr != nullptr && m_pMchLua->m_pMchMgr->SetLastError( nErrId, sErrDesc)) ; + string sOut = "(" + ToString( nErrId) + ") " + sErrDesc ; + return luaL_error( L, sOut.c_str()) ; +} diff --git a/Simulator.cpp b/Simulator.cpp index 359cda8..3c12396 100644 --- a/Simulator.cpp +++ b/Simulator.cpp @@ -416,7 +416,7 @@ Simulator::UpdateTool( bool bFirst) if ( sTool != m_sTool && ! m_sTool.empty()) { // eventuale lancio script per scarico utensile if ( ! OnToolDeselect( sTool, sHead, nExit, sTcPos)) - return Stopped() ; + return false ; } // se cambiato oppure prima volta, attivo l'utensile della lavorazione if ( sTool != m_sTool || bFirst) { @@ -449,7 +449,7 @@ Simulator::UpdateTool( bool bFirst) } // eventuale lancio script if ( ! OnToolSelect( m_sTool, sHead, nExit, sTcPos, bFirst)) - return Stopped() ; + return false ; } return true ; } @@ -463,7 +463,7 @@ Simulator::UpdateTool( bool bFirst) if ( ! m_sTool.empty() && sTool != m_sTool) { // eventuale lancio script per scarico utensile if ( ! OnToolDeselect( sTool, sHead, nExit, sTcPos)) - return Stopped() ; + return false ; } // carico l'utensile if ( ! m_pMchMgr->SetCalcTool( sTool, sHead, nExit)) @@ -474,7 +474,7 @@ Simulator::UpdateTool( bool bFirst) return false ; // eventuale lancio script if ( ! OnToolSelect( m_sTool, sHead, nExit, sTcPos, bFirst)) - return Stopped() ; + return false ; return true ; } return false ; @@ -574,7 +574,7 @@ Simulator::FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) if ( pMch != nullptr && ! pMch->IsEmpty()) { // aggiorno utensile e assi conseguenti if ( ! UpdateTool( bFirst)) { - nStatus = MCH_SIM_ERR ; + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; return false ; } ++ m_nOpInd ; @@ -587,12 +587,8 @@ Simulator::FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) m_pGeomDB->GetInfo( nClId, KEY_MMAX, ptMax) ; // richiamo gestione evento inizio lavorazione if ( ! OnMachiningStart( m_nOpId, m_nOpInd, ptMin, ptMax)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } break ; } @@ -616,29 +612,21 @@ Simulator::FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) if ( ! bEmpty) { // richiamo gestione evento appena prima di inizio disposizione if ( ! OnDispositionStarting( m_nOpId, m_nOpInd, nPhase, sTable, ptOri1, false, bSomeByHand)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } // cambio fase m_pMchMgr->SetCurrPhase( nPhase, ( nPhase == 1)) ; // aggiorno utensile e assi conseguenti if ( ! UpdateTool( bFirst)) { - nStatus = MCH_SIM_ERR ; + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; return false ; } ++ m_nOpInd ; // richiamo gestione evento inizio disposizione if ( ! OnDispositionStart( m_nOpId, m_nOpInd, nPhase, sTable, ptOri1, false, bSomeByHand)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } // se ci sono movimenti manuali, aggiorno visualizzazione e breve pausa (200 ms) if ( bSomeByHand) @@ -649,12 +637,8 @@ Simulator::FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) else { // richiamo gestione evento appena prima di inizio disposizione if ( ! OnDispositionStarting( m_nOpId, m_nOpInd, nPhase, sTable, ptOri1, true, bSomeByHand)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } // cambio fase m_pMchMgr->SetCurrPhase( nPhase, ( nPhase == 1)) ; @@ -662,12 +646,8 @@ Simulator::FindAndManageOperationStart( bool bStart, bool bFirst, int& nStatus) // richiamo gestione evento inizio e fine disposizione if ( ! OnDispositionStart( m_nOpId, m_nOpInd, nPhase, sTable, ptOri1, true, bSomeByHand) || ! OnDispositionEnd()) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } // se non è inizio, aggiorno visualizzazione e breve pausa (200 ms) if ( nPhase != 1) { @@ -701,15 +681,9 @@ Simulator::ManageOperationEnd( int& nStatus) bOk = OnDispositionEnd() ; } // gestione stato - if ( ! bOk) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } - } - return true ; + if ( ! bOk) + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return bOk ; } //---------------------------------------------------------------------------- @@ -766,12 +740,8 @@ Simulator::FindAndManagePathStart( int& nStatus) m_nAuxETot = 0 ; // richiamo gestione evento inizio percorso di lavoro if ( ! OnPathStart( m_nCLPathId, m_nCLPathInd, m_nAuxSTot, ptStart, ptEnd, vtExtr, ptMin, ptMax, dElev)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } } // se altrimenti trovato nuovo CL path vuoto @@ -797,15 +767,11 @@ Simulator::ManagePathEnd( int& nStatus) m_nAuxETot = 0 ; m_nAuxEInd = 0 ; // richiamo gestione evento fine percorso di lavoro - if ( ! OnPathEnd( m_nAuxETot)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } - } - return true ; + bool bOk = OnPathEnd( m_nAuxETot) ; + // gestione stato + if ( ! bOk) + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return bOk ; } //---------------------------------------------------------------------------- @@ -822,12 +788,8 @@ Simulator::ManagePathStartAux( int& nStatus) } // richiamo gestione evento ausiliario prima di inizio percorso di lavoro if ( ! OnPathStartAux( m_nAuxSInd, sAS)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } nStatus = MCH_SIM_END_STEP ; return true ; @@ -847,12 +809,8 @@ Simulator::ManagePathEndAux( int& nStatus) } // richiamo gestione evento ausiliario dopo fine percorso di lavoro if ( ! OnPathEndAux( m_nAuxEInd, sAE)) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } nStatus = MCH_SIM_END_STEP ; return true ; @@ -869,8 +827,6 @@ Simulator::ManageMove( int& nStatus) double dMove ; if ( ! ManageSingleMove( nStatus, dMove)) return false ; - if ( Stopped()) - return true ; dCurrMove += dMove ; // se modalità play e fine entità e non raggiunta la lunghezza di movimento voluto if ( m_nUiStatus == MCH_UISIM_PLAY && nStatus == MCH_SIM_END_STEP && dCurrMove < 0.75 * m_dStep) { @@ -929,15 +885,8 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove) ++ m_nEntInd ; int nErr ; if ( ! OnMoveStart( pCamData, nErr)) { - if ( Stopped()) - return true ; - else { - if ( nErr == 1) - nStatus = MCH_SIM_OUTSTROKE ; - else - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : ( nErr == 1 ? MCH_SIM_OUTSTROKE : MCH_SIM_ERR)) ; + return false ; } } @@ -1057,12 +1006,8 @@ Simulator::ManageSingleMove( int& nStatus, double& dMove) nStatus = MCH_SIM_END_STEP ; // richiamo gestione evento fine entità if ( ! OnMoveEnd()) { - if ( Stopped()) - return true ; - else { - nStatus = MCH_SIM_ERR ; - return false ; - } + nStatus = ( Stopped() ? MCH_SIM_STOP : MCH_SIM_ERR) ; + return false ; } } // Altrimenti sto muovendomi all'interno dell'entità