afe4648575
- modifica prototipi in Machining Optimization.
88 lines
4.3 KiB
C++
88 lines
4.3 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2025-2025
|
|
//----------------------------------------------------------------------------
|
|
// File : MachOptimization.h Data : 31.03.25 Versione : 2.7a1
|
|
// Contenuto : Classe per calcolo ottimizzato per le lavorazioni.
|
|
//
|
|
//
|
|
// Modifiche : 31.03.2025 RE Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/ENkMachOptimization.h"
|
|
|
|
using namespace std ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
class MachOptimization : public IMachOptimization
|
|
{
|
|
public :
|
|
~MachOptimization( void) override ;
|
|
// Inserimento
|
|
bool InsertTool( int nId, double dTCX, double dTCY, double dTCZ, double dTCA,
|
|
double dTCB, double dTCC, bool bX, bool bY, bool bZ, bool bA,
|
|
bool bB, bool bC, double dTLoad, double dTUnL) override ;
|
|
bool InsertMachining( int nId, int nToolId, int nGroup,
|
|
double dX_Start, double dY_Start, double dZ_Start,
|
|
double dA_Start, double dB_Start, double dC_Start,
|
|
double dX_End, double dY_End, double dZ_End,
|
|
double dA_End, double dB_End, double dC_End) override ;
|
|
bool InsertDependence( int nIdPrec, int nIdNext) override ;
|
|
bool InsertSuggestedDependences( int nIdPrec, int nIdNext) override ;
|
|
|
|
// Impostazione parametri lavorazione
|
|
bool SetFirstMachining( int nId) override ;
|
|
bool SetLastMachining( int nId) override ;
|
|
bool SetFeeds( double dFeedL, double dFeedA) override ;
|
|
bool SetAllGroupsAsMandatory( bool bAllMandatory) override ;
|
|
bool SetOptimizationForGroups( bool bOptForGroups) override ;
|
|
bool SetOpenBound( bool bStartVsEnd, int nFlag, double dX, double dY, double dZ) override ;
|
|
bool SetOpenBoundForGroups( int nGroup, bool bStartVsEnd, int nFlag, double dX, double dY, double dZ) override ;
|
|
|
|
// Risultati
|
|
bool Calculate( INTVECTOR& vIds) override ;
|
|
|
|
public :
|
|
MachOptimization( void) ;
|
|
|
|
private :
|
|
// Calcolo dei tempi tra le lavorazioni
|
|
double CalcTimeLavLav( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin) const ;
|
|
bool CalcTimeLavLavTC( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin,
|
|
double& dTimeLav1TC1, double& dTimeTC1TC2, double& dTimeTC2Lav2,
|
|
double& dTUnload1, double& dTLoad2) const ;
|
|
bool CalcMachTime( int nInd1, int nInd2, int& nTime) const ;
|
|
bool CalcMachTime( const MachOptm& Lav1, const MachOptm& Lav2, int& nTime) const ;
|
|
|
|
// Controllo Conflitti tra dipendenze e Gestione Dipendenze
|
|
bool CheckDependences( int nIdPrev, int nIdNext, const INTINTVECTOR& vDep,
|
|
bool bBlockMessages, bool& bExist, bool& bConflict) const ;
|
|
bool SetGroupDependences( void) ;
|
|
|
|
// Calcolo della Matrice dei tempi, Del fattore perso dipendenze suggerite e della soluzione ottimale
|
|
bool ComputeTimeMatrix( INTMATRIX& mTimes) const ;
|
|
|
|
// Calcolo dei risultati a seconda della modalità
|
|
bool GetGlobalResult( INTVECTOR& vIds) ;
|
|
bool GetGroupResult( INTVECTOR& vIds) ;
|
|
|
|
// Utility
|
|
int GetIndById( int nId) const ;
|
|
bool SplitMachOptsInGroups( MACHOPTMMATRIX& matMachOpt, vector<INTINTVECTOR>& matDep,
|
|
vector<INTINTVECTOR>& matSuggDep) ;
|
|
|
|
private :
|
|
MACHOPTMVECTOR m_vMachOptm ; // Vettore delle lavorazioni
|
|
TOOLOPTMVECTOR m_vToolOptm ; // Vettore degli utensili
|
|
INTINTVECTOR m_vDependences ; // Vettore di dipendenze ( IdPrev, IdSucc) -> deve essere rispettato
|
|
INTINTVECTOR m_vSuggDependences ; // Vettore delle dipendenze suggerite ( IdPrev, IdSucc) -> si cerca di rispettarle
|
|
double m_dFeedL ; // Feed Lineare
|
|
double m_dFeedA ; // Feed Angolare
|
|
bool m_bAllMandatory ; // Flag per impostare ogni dipendenza da Gruppo come vincolo
|
|
bool m_bOptInGroup ; // Flag per ottimizzazione solo interna ai gruppi
|
|
MACHOPTOPENBOUNDVECTOR m_vOpenBounds ; // Vettore dei punti OpenBound
|
|
} ;
|