From eb22771d06cbf2ef31fc45eb0eeee6be7e9f3c2b Mon Sep 17 00:00:00 2001 From: NicolaP Date: Thu, 7 Apr 2022 17:48:00 +0200 Subject: [PATCH] Verifica del peso del grezzo prima del prelievo --- CadCuts/MoveRawPartPage.xaml.vb | 17 +++++- CadCuts/VacuumCups.vb | 63 ++++++++++++++++++++++ Constants/ConstMachIni.vb | 3 ++ DrawImport/InternalComponentPageUC.xaml.vb | 25 ++++++--- 4 files changed, 99 insertions(+), 9 deletions(-) diff --git a/CadCuts/MoveRawPartPage.xaml.vb b/CadCuts/MoveRawPartPage.xaml.vb index fdda58d..5aa71af 100644 --- a/CadCuts/MoveRawPartPage.xaml.vb +++ b/CadCuts/MoveRawPartPage.xaml.vb @@ -240,6 +240,14 @@ Public Class MoveRawPartPage ' Se con ventose, le posiziono sul grezzo If Not m_bByHand Then Dim rmData As New RawMoveData + ' inizializzo i dati del grezzo per il cacolo del peso + Dim MaxSinglePlugger As Double = 250 + MaxSinglePlugger = GetPrivateProfileDouble(S_MACH_RAWMOVE, K_MACH_WEIGHT_SINGLEPLUGGER, MaxSinglePlugger, m_MainWindow.GetMachIniFile()) + Dim MaxDoublePlugger As Double = 750 + MaxDoublePlugger = GetPrivateProfileDouble(S_MACH_RAWMOVE, K_MACH_WEIGHT_DOUBLEPLUGGER, MaxDoublePlugger, m_MainWindow.GetMachIniFile()) + Dim AverageDensity As Double = 2700 + AverageDensity = GetPrivateProfileDouble(S_MATERIALS, K_AVERAGEDENSITY, AverageDensity, m_MainWindow.GetMachIniFile()) + VacuumCups.GetWeightInformation(AverageDensity, MaxSinglePlugger, MaxDoublePlugger) If PutVacuumCupsOnRaw(nId, rmData) Then ' Visualizzo le ventose EgtSetStatus(GetVacuumId(), GDB_ST.ON_) @@ -251,8 +259,13 @@ Public Class MoveRawPartPage Else ' Aggiorno i dati m_bRawWithCups = False - ' Messaggio di avvertimento - m_CurrProjPage.SetWarningMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2)) 'Pezzo troppo piccolo : non si può muovere + If VacuumCups.bOverWeight Then + m_CurrProjPage.SetWarningMessage(EgtMsg(MSG_MOVERAWPAGEUC + 4)) 'Pezzo troppo pesante : non si può muovere + Else + ' Messaggio di avvertimento + m_CurrProjPage.SetWarningMessage(EgtMsg(MSG_MOVERAWPAGEUC + 2)) 'Pezzo troppo piccolo : non si può muovere + End If + End If End If End If diff --git a/CadCuts/VacuumCups.vb b/CadCuts/VacuumCups.vb index d8560d1..1390d88 100644 --- a/CadCuts/VacuumCups.vb +++ b/CadCuts/VacuumCups.vb @@ -11,6 +11,12 @@ Module VacuumCups Private m_dPrefVertRotXMinus As Double = 0 Private m_dPrefVertRotXPlus As Double = 0 Private m_dDripRefAng As Double = 0 + ' dati carico massimo manipolatore + Private m_RawDensity As Double = 2500 + Private m_RawWeight As Double = 0 + Private m_MaxWeightSinglePlugger As Double = 250 + Private m_MaxWeightDoublePlugger As Double = 750 + Public bOverWeight As Boolean = False ' Nome del gruppo temporaneo per le ventose Private Const VACTMP_GRP As String = "VacTmp" @@ -50,6 +56,12 @@ Module VacuumCups Return m_nVacType End Function + Friend Sub GetWeightInformation(Density, MaxSingle, MaxDouble) + m_RawDensity = Density + m_MaxWeightSinglePlugger = MaxSingle + m_MaxWeightDoublePlugger = MaxDouble + End Sub + Friend Function GetVacuumId() As Integer Return m_nVacId End Function @@ -165,6 +177,18 @@ Module VacuumCups EgtGetBBoxGlob(nRKerfId, GDB_BB.STANDARD, b3Kerf) Dim ptKerfCen As Point3d EgtCentroid(nRKerfId, GDB_ID.ROOT, ptKerfCen) + + '-------------------- INIZIO CALCOLO PESO -------------------- + ' recupero l'area del grezzo da muovere + Dim RawArea As Double = 0 + ' superficie del grezzo senza considerare eventuali fori + EgtSurfFrGrossArea(nRKerfId, RawArea) + ' volume calcolato in mmc + Dim RawVolume As Double = RawArea * b3Raw.DimZ() + ' peso calolato in kg + m_RawWeight = RawVolume * m_RawDensity / Math.Pow(10, 9) + '-------------------- FINE CALCOLO PESO -------------------- + ' Eseguo ricerca If FindVacuumCupsOnRaw(nRawId, ptRawCen, b3Kerf, ptKerfCen, nKerfId, nRKerfId, rmData) Then Return True @@ -187,6 +211,7 @@ Module VacuumCups Return False End Function + ' utilizzata per gestire la movimentazione dei pezzi per eseguire i drip Friend Function PutVacuumCupsOnPart(nPartId As Integer, ByRef rmData As RawMoveData, ByRef b3Part As BBox3d) As Boolean ' Ripristino posizione originale ventose @@ -368,6 +393,23 @@ Module VacuumCups If b3Vac.IsEmpty() Then Return INFINITO ' Se box maggiore di quello del pezzo, scarto soluzione If b3Vac.Radius() > b3Raw.Radius() Then Return INFINITO + '-------------------- INIZIO VERIFICA PESO -------------------- + bOverWeight = False + Select Case GetPluggerFromCameras(sCups) + Case 2 + ' se peso del grezzo oltre il limite consentito allora scarto la soluzione + If m_RawWeight > m_MaxWeightDoublePlugger Then + bOverWeight = True + Return INFINITO + End If + Case 1 + ' se peso del grezzo oltre il limite consentito allora scarto la soluzione + If m_RawWeight > m_MaxWeightSinglePlugger Then + bOverWeight = True + Return INFINITO + End If + End Select + '-------------------- FINE VERIFICA PESO -------------------- ' Recupero l'area della tavola Dim b3Tab As New BBox3d EgtGetTableArea(1, b3Tab) @@ -471,6 +513,27 @@ Module VacuumCups Return bVacOk End Function + Private Function GetPluggerFromCameras(sCups) As Integer + Dim nCountPlunger As Integer = 1 + Dim bPlugger1 As Boolean = False + Dim bPlugger2 As Boolean = False + For Each Camera As String In sCups + If (Camera.Contains("1") Or Camera.Contains("2") Or Camera.Contains("3")) Then + bPlugger1 = True + Else + bPlugger2 = True + End If + Next + ' verifico quali sono le camere attive + If bPlugger1 And bPlugger2 Then + nCountPlunger = 2 + ElseIf Not bPlugger1 And Not bPlugger2 Then + nCountPlunger = 0 + End If + ' restituisco il numero di Plugger in uso + Return nCountPlunger + End Function + Friend Function SaveOneMoveInfo(nId As Integer, rmData As RawMoveData) As Boolean ' Assegno le informazioni EgtSetInfo(nId, "Id", rmData.m_nId) diff --git a/Constants/ConstMachIni.vb b/Constants/ConstMachIni.vb index a518045..1f35d62 100644 --- a/Constants/ConstMachIni.vb +++ b/Constants/ConstMachIni.vb @@ -228,6 +228,8 @@ Public Const S_MACH_RAWMOVE As String = "RawMove" Public Const K_MACH_RM_ROTATE As String = "Rotate" Public Const K_MACH_RM_FINALMOVE As String = "FinalMove" + Public Const K_MACH_WEIGHT_SINGLEPLUGGER As String = "MaxWeightSinglePlugger" + Public Const K_MACH_WEIGHT_DOUBLEPLUGGER As String = "MaxWeightDoublePlugger" Public Const S_MACH_REG As String = "Reg" Public Const K_MACH_MAX_ROT_ANG As String = "MaxRotAng" @@ -290,5 +292,6 @@ Public Const K_CURRMATERIAL As String = "CurrMaterial" Public Const K_MATERIAL As String = "Material" Public Const K_FROMDBWATERJET As String = "FromDBWaterJet" + Public Const K_AVERAGEDENSITY As String = "AverageDensity" End Module diff --git a/DrawImport/InternalComponentPageUC.xaml.vb b/DrawImport/InternalComponentPageUC.xaml.vb index ae4a001..fb01bd5 100644 --- a/DrawImport/InternalComponentPageUC.xaml.vb +++ b/DrawImport/InternalComponentPageUC.xaml.vb @@ -1,4 +1,5 @@ -Imports EgtUILib +Imports System.IO +Imports EgtUILib Public Class InternalComponentPageUC @@ -286,12 +287,22 @@ Public Class InternalComponentPageUC If sCompoImage.Length <> 0 Then Try Dim sPath As String = m_MainWindow.GetResourcesDir() & "\" & sCompoImage - sCompoImageSource = ImageConverter.ConvertFromString(sPath) - GetImage(index).Height = 65 - GetImage(index).Width = 65 - GetImage(index).Source = sCompoImageSource - GetLabel(index).SetValue(Grid.ColumnProperty, 1) - GetLabel(index).SetValue(Grid.ColumnSpanProperty, 1) + If File.Exists(sPath) Then + sCompoImageSource = ImageConverter.ConvertFromString(sPath) + GetImage(index).Height = 65 + GetImage(index).Width = 65 + GetImage(index).Source = sCompoImageSource + GetLabel(index).SetValue(Grid.ColumnProperty, 1) + GetLabel(index).SetValue(Grid.ColumnSpanProperty, 1) + Else + sCompoImage = String.Empty + GetImage(index).Height = 0 + GetImage(index).Width = 0 + CustomThickness.Right = 0 + GetImage(index).Margin = CustomThickness + GetLabel(index).SetValue(Grid.ColumnProperty, 0) + GetLabel(index).SetValue(Grid.ColumnSpanProperty, 2) + End If Catch ex As Exception EgtOutLog("Error loading image " & sCompoImage) sCompoImage = String.Empty