Imports System.Windows.Threading Imports System.IO Imports EgtUILib Imports EgtWPFLib Public Class AlarmsPageUC ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = Application.Current.MainWindow Private m_CurrentMachine As CurrentMachine Friend m_CN As CN_generico ' Definizione pagina attrezzaggio Friend m_SetUpPage As SetUpPage ' Properties Private m_bFirst As Boolean = True 'Lista che contiene le lame disponibili (per Combobox pagina Alarms) Private m_SawList As New List(Of String) Private m_DrillList As New List(Of String) Private m_MillList As New List(Of String) Private m_AuxToolTypeList As New List(Of StringIdCmBx) Private Sub AlarmsPage_Initialized(sender As Object, e As EventArgs) 'Assegno liste a combobox CurrSawCmBx.ItemsSource = m_SawList CurrDrillCmBx.ItemsSource = m_DrillList CurrMillCmBx.ItemsSource = m_MillList AuxiliaryToolCmBx.ItemsSource = m_AuxToolTypeList ' Assegno lista ad elenco materiali MaterialsLstBx.ItemsSource = m_MainWindow.m_CurrentMachine.Materials 'Imposto i messaggi letti dal file dei messaggi CurrSawTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 1) AuxiliaryToolTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 2) CurrDrillTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 3) CurrMillTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 4) HolesOffsetTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 9) HolesOverlapTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 10) HolesToleranceTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 11) CutExtraLenTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 6) AngleCutExtraLenTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 7) CompleteCutsTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 8) SafeZTxBl.Text = EgtMsg(MSG_ALARMSPAGEUC + 5) ErrorLstGpBx.Header = EgtMsg(MSG_ALARMSPAGEUC + 12) MaterialsGpBx.Header = EgtMsg(MSG_ALARMSPAGEUC + 13) NewMatBtn.Content = EgtMsg(MSG_ALARMSPAGEUC + 14) RemoveMatBtn.Content = EgtMsg(MSG_ALARMSPAGEUC + 15) SetUpGpBx.Header = EgtMsg(MSG_ALARMSPAGEUC + 16) HolesGpBx.Header = EgtMsg(MSG_ALARMSPAGEUC + 17) End Sub Private Sub AlarmsPage_Loaded(sender As Object, e As RoutedEventArgs) If m_bFirst Then ' Variabile che accorcia il riferimento alla macchina corrente m_CurrentMachine = m_MainWindow.m_CurrentMachine ' Verifico la configurazione della macchina per creare i combobox Select Case m_CurrentMachine.MountedToolConfig Case CurrentMachine.MountedToolConfigs.SAW ' Elimino le righe inutili e riduco il groupbox utensili correnti For Index = 7 - 1 To 2 Step -1 CurrToolsGrid.RowDefinitions.RemoveAt(Index) Next Dim EndRow As New RowDefinition EndRow.Height = New GridLength(0.25, GridUnitType.Star) CurrToolsGrid.RowDefinitions.Add(EndRow) SetUpGpBx.SetValue(Grid.RowSpanProperty, 1) ' Disattivo il gruppo dei parametri fori HolesGpBx.Visibility = Windows.Visibility.Hidden Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL 'Non faccio alcunchè Case CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER 'Da implementare End Select m_bFirst = False End If ' Aggiorno lista delle lame per pagina macchina in cui scegliere quella corrente CreateToolList(MCH_TF.SAWBLADE, m_SawList) ' Seleziono lama corrente CurrSawCmBx.SelectedItem = m_CurrentMachine.sCurrSaw ' Verifico la configurazione della macchina per creare i combobox Select Case m_CurrentMachine.MountedToolConfig Case CurrentMachine.MountedToolConfigs.SAW ' Non compio alcuna azione Case CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL If m_CurrentMachine.bDrilling Then m_AuxToolTypeList.Add(New StringIdCmBx(2, EgtMsg(MSG_ALARMSPAGEUC + 22))) If m_CurrentMachine.bMilling Then m_AuxToolTypeList.Add(New StringIdCmBx(1, EgtMsg(MSG_ALARMSPAGEUC + 21))) End If Else If m_CurrentMachine.bMilling Then m_AuxToolTypeList.Add(New StringIdCmBx(1, EgtMsg(MSG_ALARMSPAGEUC + 21))) End If End If ' Aggiungo elemento nessuno in fondo alla lista m_AuxToolTypeList.Add(New StringIdCmBx(0, EgtMsg(MSG_ALARMSPAGEUC + 20))) AuxiliaryToolTxBl.Visibility = Windows.Visibility.Visible AuxiliaryToolCmBx.Visibility = Windows.Visibility.Visible CurrDrillTxBl.Visibility = Windows.Visibility.Hidden CurrDrillCmBx.Visibility = Windows.Visibility.Hidden CurrMillTxBl.Visibility = Windows.Visibility.Hidden CurrMillCmBx.Visibility = Windows.Visibility.Hidden If m_CurrentMachine.sCurrDrill <> String.Empty Then AuxiliaryToolCmBx.SelectedItem = StringIdCmBx.FromIdToStringIdCmBx(1, m_AuxToolTypeList) CurrDrillTxBl.SetValue(Grid.RowProperty, 4) CurrDrillCmBx.SetValue(Grid.RowProperty, 5) CurrDrillTxBl.Visibility = Windows.Visibility.Visible CurrDrillCmBx.Visibility = Windows.Visibility.Visible ElseIf m_CurrentMachine.sCurrMill <> String.Empty Then AuxiliaryToolCmBx.SelectedItem = StringIdCmBx.FromIdToStringIdCmBx(2, m_AuxToolTypeList) CurrMillTxBl.Visibility = Windows.Visibility.Visible CurrMillCmBx.Visibility = Windows.Visibility.Visible Else AuxiliaryToolCmBx.SelectedItem = StringIdCmBx.FromIdToStringIdCmBx(0, m_AuxToolTypeList) End If Case CurrentMachine.MountedToolConfigs.MANUALTOOLCHANGER, CurrentMachine.MountedToolConfigs.TOOLCHANGER SetUpBtn.Visibility = Windows.Visibility.Visible End Select ' Leggo offset fori Dim dVal As Double dVal = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OFFSET, 0, m_MainWindow.GetMachIniFile()) EgtMdbSetGeneralParam(MCH_GP.EXTRARONDRIREG, dVal) EgtMdbSave() HolesOffsetTxBx.Text = LenToString(dVal, 2) ' Leggo sovrapposizione fori dVal = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_OVERLAP, 0, m_MainWindow.GetMachIniFile()) HolesOverlapTxBx.Text = LenToString(dVal, 2) ' Leggo tolleranza diametro fori dVal = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_HOLES_DIAMTOLER, 0, m_MainWindow.GetMachIniFile()) EgtMdbSetGeneralParam(MCH_GP.HOLEDIAMTOLER, dVal) EgtMdbSave() HolesToleranceTxBx.Text = LenToString(dVal, 2) ' Leggo sicurezza su tagli dVal = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, 0, m_MainWindow.GetMachIniFile()) EgtMdbSetGeneralParam(MCH_GP.EXTRALONCUTREG, dVal) EgtMdbSave() CutExtraLenTxBx.Text = LenToString(dVal, 2) ' Leggo sicurezza su tagli in angoli interni dVal = GetPrivateProfileDouble(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, 0, m_MainWindow.GetMachIniFile()) AngleCutExtraLenTxBx.Text = LenToString(dVal, 2) ' Leggo tagli ridotti per interferenza in nesting CompleteCutsChBx.IsChecked = (GetPrivateProfileInt(S_MACH_NEST, K_MACH_REDUCEDCUT, 0, m_MainWindow.GetMachIniFile()) = 0) ' Leggo distanza di sicurezza dVal = 0 EgtMdbGetGeneralParam(MCH_GP.SAFEZ, dVal) SafeZTxBx.Text = LenToString(dVal, 2) End Sub Private Sub AuxiliaryToolCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles AuxiliaryToolCmBx.SelectionChanged Dim SelectedItem As StringIdCmBx = AuxiliaryToolCmBx.SelectedItem Select Case SelectedItem.nId Case 0 CurrDrillTxBl.Visibility = Windows.Visibility.Hidden CurrDrillCmBx.Visibility = Windows.Visibility.Hidden CurrMillTxBl.Visibility = Windows.Visibility.Hidden CurrMillCmBx.Visibility = Windows.Visibility.Hidden m_CurrentMachine.sCurrDrill = String.Empty m_CurrentMachine.sCurrMill = String.Empty Case 1 CreateToolList(MCH_TF.DRILLBIT, m_DrillList) m_DrillList.Add("Nessuno") CurrDrillTxBl.SetValue(Grid.RowProperty, 4) CurrDrillCmBx.SetValue(Grid.RowProperty, 5) If m_CurrentMachine.sCurrDrill = String.Empty Then CurrDrillCmBx.SelectedItem = "Nessuno" Else CurrDrillCmBx.SelectedItem = m_CurrentMachine.sCurrDrill End If m_CurrentMachine.sCurrMill = String.Empty CurrDrillTxBl.Visibility = Windows.Visibility.Visible CurrDrillCmBx.Visibility = Windows.Visibility.Visible CurrMillTxBl.Visibility = Windows.Visibility.Hidden CurrMillCmBx.Visibility = Windows.Visibility.Hidden Case 2 CreateToolList(MCH_TF.MILL, m_MillList) m_MillList.Add("Nessuna") If m_CurrentMachine.sCurrMill = String.Empty Then CurrMillCmBx.SelectedItem = "Nessuna" Else CurrMillCmBx.SelectedItem = m_CurrentMachine.sCurrMill End If m_CurrentMachine.sCurrDrill = String.Empty CurrMillCmBx.SelectedItem = m_CurrentMachine.sCurrMill CurrDrillTxBl.Visibility = Windows.Visibility.Hidden CurrDrillCmBx.Visibility = Windows.Visibility.Hidden CurrMillTxBl.Visibility = Windows.Visibility.Visible CurrMillCmBx.Visibility = Windows.Visibility.Visible End Select End Sub Private Sub CurrSawCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrSawCmBx.SelectionChanged 'WritePrivateProfileString(S_MACH, K_CURRSAW, CurrSawCmBx.SelectedItem, m_MainWindow.GetIniFile()) m_CurrentMachine.sCurrSaw = CurrSawCmBx.SelectedItem End Sub Private Sub CurrDrillCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrDrillCmBx.SelectionChanged If CurrDrillCmBx.SelectedItem = "Nessuno" Then m_CurrentMachine.sCurrDrill = String.Empty Else m_CurrentMachine.sCurrDrill = CurrDrillCmBx.SelectedItem If m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL Then m_CurrentMachine.sCurrMill = String.Empty End If End If End Sub Private Sub CurrMillCmBx_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles CurrMillCmBx.SelectionChanged If CurrMillCmBx.SelectedItem = "Nessuna" Then m_CurrentMachine.sCurrMill = String.Empty Else m_CurrentMachine.sCurrMill = CurrMillCmBx.SelectedItem If m_CurrentMachine.MountedToolConfig = CurrentMachine.MountedToolConfigs.SAWANDAUXTOOL Then m_CurrentMachine.sCurrDrill = String.Empty End If End If End Sub Private Sub CreateToolList(ToolType As Integer, ToolList As List(Of String)) 'SawList.Clear() Dim ToolName As String = String.Empty Dim nType As Integer = MCH_TY.NONE If EgtTdbGetFirstTool(ToolType, ToolName, nType) Then ToolList.Add(ToolName) While EgtTdbGetNextTool(ToolType, ToolName, nType) ToolList.Add(ToolName) End While End If End Sub Private Sub SetUpBtn_Click(sender As Object, e As RoutedEventArgs) Handles SetUpBtn.Click m_MainWindow.m_MachinePageUC.MachinePageGrid.Children.Remove(Me) m_SetUpPage = New SetUpPage m_MainWindow.m_MachinePageUC.MachinePageGrid.Children.Add(m_SetUpPage) End Sub Private Sub HolesOffsetTxBx_EgtClosed(sender As Object, e As EventArgs) Handles HolesOffsetTxBx.EgtClosed Dim dVal As Double = 0 StringToLen(HolesOffsetTxBx.Text, dVal) WritePrivateProfileString(S_MACH_NEST, K_MACH_HOLES_OFFSET, DoubleToString(dVal, 2), m_MainWindow.GetMachIniFile()) EgtMdbSetGeneralParam(MCH_GP.EXTRARONDRIREG, dVal) EgtMdbSave() End Sub Private Sub HolesOverlapTxBx_EgtClosed(sender As Object, e As EventArgs) Handles HolesOverlapTxBx.EgtClosed Dim dVal As Double = 0 StringToLen(HolesOverlapTxBx.Text, dVal) WritePrivateProfileString(S_MACH_NEST, K_MACH_HOLES_OVERLAP, DoubleToString(dVal, 2), m_MainWindow.GetMachIniFile()) End Sub Private Sub HolesToleranceTxBx_EgtClosed(sender As Object, e As EventArgs) Handles HolesToleranceTxBx.EgtClosed Dim dVal As Double = 0 StringToLen(HolesToleranceTxBx.Text, dVal) WritePrivateProfileString(S_MACH_NEST, K_MACH_HOLES_DIAMTOLER, DoubleToString(dVal, 2), m_MainWindow.GetMachIniFile()) EgtMdbSetGeneralParam(MCH_GP.HOLEDIAMTOLER, dVal) EgtMdbSave() End Sub Private Sub CutExtraLenTxBx_EgtClosed(sender As Object, e As EventArgs) Handles CutExtraLenTxBx.EgtClosed Dim dVal As Double = 0 StringToLen(CutExtraLenTxBx.Text, dVal) WritePrivateProfileString(S_MACH_NEST, K_MACH_SAFE_LEN_CUT, DoubleToString(dVal, 2), m_MainWindow.GetMachIniFile()) EgtMdbSetGeneralParam(MCH_GP.EXTRALONCUTREG, dVal) EgtMdbSave() End Sub Private Sub AngleCutExtraLenTxBx_EgtClosed(sender As Object, e As EventArgs) Handles AngleCutExtraLenTxBx.EgtClosed Dim dVal As Double = 0 StringToLen(AngleCutExtraLenTxBx.Text, dVal) WritePrivateProfileString(S_MACH_NEST, K_MACH_SAFE_LEN_INTCORNER, DoubleToString(dVal, 2), m_MainWindow.GetMachIniFile()) End Sub Private Sub SafeZTxBx_EgtClosed(sender As Object, e As EventArgs) Handles SafeZTxBx.EgtClosed Dim dSafeZ As Double = 0 StringToLen(SafeZTxBx.Text, dSafeZ) EgtMdbSetGeneralParam(MCH_GP.SAFEZ, dSafeZ) EgtMdbSave() End Sub Private Sub CompleteCutsChBx_Click(sender As Object, e As RoutedEventArgs) Handles CompleteCutsChBx.Click Dim NestPage As NestPageUC = m_MainWindow.m_CadCutPageUC.m_NestPage If CompleteCutsChBx.IsChecked() Then ' Se pezzi in interferenza If Not NestPage.VerifyPartsNesting(False) Then ' Ci sono interferenze, alcuni pezzi saranno parcheggiati. Vuoi continuare ? Dim Dlg As New EgtMsgBox(m_MainWindow, "", EgtMsg(91105), EgtMsgBox.Buttons.OK_CANCEL, EgtMsgBox.Icons.ESCLAMATION, 1) If Dlg.DialogResult = 1 Then ' Ok NestPage.StoreCollisionParts(False) WritePrivateProfileString(S_MACH_NEST, K_MACH_REDUCEDCUT, "0", m_MainWindow.GetMachIniFile()) End If Else WritePrivateProfileString(S_MACH_NEST, K_MACH_REDUCEDCUT, "0", m_MainWindow.GetMachIniFile()) End If Else WritePrivateProfileString(S_MACH_NEST, K_MACH_REDUCEDCUT, "1", m_MainWindow.GetMachIniFile()) End If End Sub Friend Sub NcError() If m_CN.sz_NC_error_messages.Count > 0 Then 'NCErrorMessages.Text = m_CN.sz_NC_error_messages(0) If m_CN.bIsErrorMessage Then m_MainWindow.m_MachineStatusUC.MachineStatusGrid.Background = Application.Current.FindResource("OmagCut_Red") Else m_MainWindow.m_MachineStatusUC.MachineStatusGrid.Background = Application.Current.FindResource("OmagCut_DarkGray") End If Else 'NCErrorMessages.Text = "" Dim BackColor As SolidColorBrush = m_MainWindow.m_MachineStatusUC.MachineStatusGrid.Background If Colors.Red.Equals(BackColor.Color) Then m_MainWindow.m_MachineStatusUC.MachineStatusGrid.Background = Application.Current.FindResource("OmagCut_DarkGray") End If End If End Sub Friend Sub PlcError(ErrorMsg As String) ' m_MainWindow.m_MachineStatusUC.Background = Brushes.Red ' Dim sFilePath As String = m_MainWindow.GetMachinesRootDir() & "/PLCMessages/" & EgtMsg(MSG_MACHINEPAGEUC + 1) ' Try ' Dim sErrorText As String = File.ReadLines(sFilePath).Skip(m_CN.sz_PLC_error_messages).Take(1).First() ' sErrorText = sErrorText.Substring(sErrorText.IndexOf("$")) ' If sErrorText(0) = " " Then ' sErrorText = sErrorText.Substring(1) ' End If ' PLCErrorMessages.Text = sErrorText ' Catch ex As Exception ' MsgBox("Errore lettura errori PLC") ' End Try End Sub Private Sub NewMatBtn_Click(sender As Object, e As RoutedEventArgs) Handles NewMatBtn.Click ' Mostro textbox per il nome MatNameTxBx.Text = String.Empty MatNameTxBx.Visibility = Windows.Visibility.Visible MaterialsLstBx.SetValue(Grid.RowSpanProperty, 1) End Sub Private Sub MatNameTxBx_EgtClosed(sender As Object, e As EventArgs) Handles MatNameTxBx.EgtClosed ' Verifico che il nome non sia vuoto If Not String.IsNullOrWhiteSpace(MatNameTxBx.Text) Then ' Verifico che il nome non sia già utilizzato Dim bNameExist As Boolean = False For Each Material In m_CurrentMachine.Materials If Material.sName = MatNameTxBx.Text Then bNameExist = True Exit For End If Next If Not bNameExist Then m_CurrentMachine.AddMaterial(New Material(MatNameTxBx.Text, m_CurrentMachine.Materials)) End If End If ' Nascondo textbox per il nome MaterialsLstBx.SetValue(Grid.RowSpanProperty, 2) MatNameTxBx.Visibility = Windows.Visibility.Hidden End Sub Private Sub RemoveMatBtn_Click(sender As Object, e As RoutedEventArgs) Handles RemoveMatBtn.Click Dim SelectedMat As Material = MaterialsLstBx.SelectedItem If Not IsNothing(SelectedMat) Then m_CurrentMachine.RemoveMaterial(SelectedMat) End If End Sub End Class