6b59d709f6
- modifica prototipi in Machining Optimization.
134 lines
6.5 KiB
C++
134 lines
6.5 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2025-2025
|
|
//----------------------------------------------------------------------------
|
|
// File : ENkMachOptimization.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/EgtNumCollection.h"
|
|
|
|
//----------------------- Macro per import/export ----------------------------
|
|
#undef ENK_EXPORT
|
|
#if defined( I_AM_ENK) // da definirsi solo nella DLL
|
|
#define ENK_EXPORT __declspec( dllexport)
|
|
#else
|
|
#define ENK_EXPORT __declspec( dllimport)
|
|
#endif
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
// Definizione utensile
|
|
struct ToolOptm {
|
|
int nId ; // Id dell'utensile ( univoco)
|
|
|
|
double dTCX ; // Coordinata cambio utensile per X
|
|
double dTCY ; // Coordinata cambio utensile per Y
|
|
double dTCZ ; // Coordinata cambio utensile per Z
|
|
double dTCA ; // Coordinata cambio utensile per A
|
|
double dTCB ; // Coordinata cambio utensile per B
|
|
double dTCC ; // Coordinata cambio utensile per C
|
|
|
|
bool bTCX ; // Flag per condsiderare/scartare il controllo sulla coordinata X
|
|
bool bTCY ; // Flag per condsiderare/scartare il controllo sulla coordinata Y
|
|
bool bTCZ ; // Flag per condsiderare/scartare il controllo sulla coordinata Z
|
|
bool bTCA ; // Flag per condsiderare/scartare il controllo sulla coordinata A
|
|
bool bTCB ; // Flag per condsiderare/scartare il controllo sulla coordinata B
|
|
bool bTCC ; // Flag per condsiderare/scartare il controllo sulla coordinata C
|
|
|
|
double dTLoad ; // Tempo di carico
|
|
double dTUnLoad ; // Tempo di scarico
|
|
|
|
ToolOptm( int nI, double dX, double dY, double dZ, double dA, double dB, double dC,
|
|
bool bX, bool bY, bool bZ, bool bA, bool bB, bool bC, double dTL, double dTUL) :
|
|
nId( nI), dTCX( dX), dTCY( dY), dTCZ( dZ), dTCA( dA), dTCB( dB), dTCC( dC),
|
|
bTCX( bX), bTCY( bY), bTCZ( bZ), bTCA( bA), bTCB( bB), bTCC( bC), dTLoad( dTL), dTUnLoad( dTUL) {}
|
|
} ;
|
|
typedef std::vector<ToolOptm> TOOLOPTMVECTOR ;
|
|
|
|
// Definizione strutta per singola lavorazione
|
|
struct MachOptm {
|
|
int nId ; // Id della lavorazione corrente
|
|
int nIdTool ; // Id dell'utensile corrente
|
|
int nGroup ; // Gruppo di appartenenza della lavorazione
|
|
|
|
double dX_Start ; // Stato iniziale asse lineare X
|
|
double dY_Start ; // Stato iniziale asse lineare Y
|
|
double dZ_Start ; // Stato iniziale asse lineare Z
|
|
double dA_Start ; // Stato iniziale asse rotante A
|
|
double dB_Start ; // Stato iniziale asse rotante B
|
|
double dC_Start ; // Stato iniziale asse rotante C
|
|
|
|
double dX_End ; // Stato finale asse lineare X
|
|
double dY_End ; // Stato finale asse lineare Y
|
|
double dZ_End ; // Stato finale asse lineare Z
|
|
double dA_End ; // Stato finale asse rotante A
|
|
double dB_End ; // Stato finale asse rotante B
|
|
double dC_End ; // Stato finale asse rotante C
|
|
|
|
MachOptm( int nIdL, int nToolL, int nGroupL,
|
|
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) :
|
|
nId( nIdL), nIdTool( nToolL), nGroup( nGroupL),
|
|
dX_Start( dX_Start), dY_Start( dY_Start), dZ_Start( dZ_Start),
|
|
dA_Start( dA_Start) , dB_Start( dB_Start), dC_Start( dC_Start),
|
|
dX_End( dX_End), dY_End( dY_End), dZ_End( dZ_End),
|
|
dA_End( dA_End), dB_End( dB_End), dC_End( dC_End) {}
|
|
MachOptm()
|
|
: nId( -1), nIdTool( -1), nGroup( -1),
|
|
dX_Start( 0.), dY_Start( 0.), dZ_Start( 0.),
|
|
dA_Start( 0.) , dB_Start( 0.), dC_Start( 0.),
|
|
dX_End( 0.), dY_End( 0.), dZ_End( 0.),
|
|
dA_End( 0.), dB_End( 0.), dC_End( 0.) {} ;
|
|
} ;
|
|
typedef std::vector<MachOptm> MACHOPTMVECTOR ;
|
|
typedef std::vector<MACHOPTMVECTOR> MACHOPTMMATRIX ;
|
|
|
|
// Definizione struttura per OpenBounds
|
|
struct OpenBoundOptm {
|
|
int nGroup ;
|
|
bool bStartVsEnd ;
|
|
int nFlag ;
|
|
double dX ;
|
|
double dY ;
|
|
double dZ ;
|
|
|
|
OpenBoundOptm( int nOBGroup, bool bOBStartVsEnd, int nOBFlag, double dOBX, double dOBY, double dOBZ )
|
|
: nGroup( nOBGroup), bStartVsEnd( bOBStartVsEnd), nFlag( nOBFlag), dX( dOBX), dY( dOBY), dZ( dOBZ) {}
|
|
} ;
|
|
typedef std::vector<OpenBoundOptm> MACHOPTOPENBOUNDVECTOR ;
|
|
|
|
//----------------------------------------------------------------------------
|
|
class __declspec( novtable) IMachOptimization
|
|
{
|
|
public :
|
|
virtual ~IMachOptimization( void) {}
|
|
virtual 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) ;
|
|
virtual 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) = 0 ;
|
|
virtual bool InsertDependence( int nIdPrec, int nIdSucc) = 0 ;
|
|
virtual bool InsertSuggestedDependences( int nIdPrec, int nIdSucc) = 0 ;
|
|
virtual bool SetFirstMachining( int nId) = 0 ;
|
|
virtual bool SetLastMachining( int nId) = 0 ;
|
|
virtual bool SetFeeds( double dFeedL, double dFeedA) = 0 ;
|
|
virtual bool SetAllGroupsAsMandatory( bool bAllMandatory = false) = 0 ;
|
|
virtual bool SetOptimizationForGroups( bool bOptForGroups = false) = 0 ;
|
|
virtual bool SetOpenBound( bool bStartVsEnd, int nFlag, double dX, double dY, double dZ) = 0 ;
|
|
virtual bool SetOpenBoundForGroups( int nGroup, bool bStartVsEnd, int nFlag, double dX, double dY, double dZ) = 0 ;
|
|
virtual bool Calculate( INTVECTOR& vIds) = 0 ;
|
|
} ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
ENK_EXPORT IMachOptimization* CreateMachOptimization( void) ;
|