558b590810
- Aggiunta classe di calcolo per ottimizzazione ordine delle lavorazioni - Aggiunti vincoli obbligatori e dipendenze suggerite a ShortestPath.
74 lines
3.4 KiB
C++
74 lines
3.4 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"
|
|
|
|
//----------------------------------------------------------------------------
|
|
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 ;
|
|
|
|
// Risultati
|
|
bool GetResult( INTVECTOR& vIds) override ;
|
|
|
|
public :
|
|
MachOptimization( void) ;
|
|
|
|
private :
|
|
// Calcolo dei tempi tra le lavorazioni
|
|
double CalcTimeLavLav( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin) ;
|
|
bool CalcTimeLavLavTC( const MachOptm& Lav1, const MachOptm& Lav2, bool bLin,
|
|
double& dTimeLav1TC1, double& dTimeTC1TC2, double& dTimeTC2Lav2,
|
|
double& dTUnload1, double& dTLoad2) ;
|
|
bool CalcMachTime( int nInd1, int nInd2, int& nTime) ;
|
|
|
|
// Controllo Conflitti tra dipendenze e Gestione Dipendenze
|
|
bool CheckDependences( int nIdPrev, int nIdNext, const INTINTVECTOR& vDep,
|
|
bool bBlockMessages, bool& bExist, bool& bConflict) ;
|
|
bool SetGroupDependences( void) ;
|
|
|
|
// Calcolo della Matrice dei tempi, Del fattore perso dipendenze suggerite e della soluzione ottimale
|
|
bool ComputeTimeMatrix( INTMATRIX& mTimes) ;
|
|
|
|
// Utility
|
|
int GetIndById( int nId) ;
|
|
|
|
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
|
|
} ;
|