Imports System.Windows.Threading Imports System.Globalization Imports EgtUILib Public Class CNCommunication ' Riferimento alla MainWindow Private m_MainWindow As MainWindow = Application.Current.MainWindow Private m_MachineStatus As MachineStatusUC = m_MainWindow.m_MachineStatusUC Private m_AlarmsPage As AlarmsPageUC = m_MainWindow.m_MachinePageUC.m_AlarmsPageUC 'Variabile per tipologia CN Friend m_nNCType As Integer 'Variabile per stato CN Private b_Nc_simulation As Boolean = False 'Variabile che indica il Mode corrente Private m_nCurrMode As Integer 'Classe del CN Public WithEvents m_CN As CN_generico Private m_bNewPosData As Boolean = True Private m_bNewDeltaData As Boolean = True Private m_bNewVarData As Boolean = False Private m_bTimerBusy As Boolean = False 'Creazione timer Private m_RefreshTimer As New DispatcherTimer Friend Sub CNCommunication_Initialization() 'Verifico tipologia del CN If m_MainWindow.m_bNCLink = 0 Then m_nNCType = 0 Else m_nNCType = GetPrivateProfileInt(S_NUMERICALCONTROL, K_TYPE, 0, m_MainWindow.GetMachIniFile()) End If 'Inizializzo la connessione InitCn() 'Verifico se la connessione è avvenuta e in caso affermativo lancio il timer di aggiornamento dell'interfaccia If Not (m_CN.n_state < 2) Then AddHandler m_RefreshTimer.Tick, AddressOf RefreshTimer_tick m_RefreshTimer.Interval = TimeSpan.FromMilliseconds(100) m_RefreshTimer.Start() End If End Sub Private Sub RefreshTimer_tick() If Not m_bTimerBusy Then m_bTimerBusy = True m_RefreshTimer.Stop() Refresh() m_bTimerBusy = False m_RefreshTimer.Start() Else Dim x As Integer = 10 End If End Sub Private Sub InitCn() m_MachineStatus.MachineStatusGrid.Background = Brushes.Gold ' istanzio l'oggetto CN Try Select Case m_nNCType Case 0 m_CN = New CN_Debug Case 1 m_CN = New Num.NumNCOld Case Else m_CN = New Num.NumNC End Select m_MainWindow.m_MachineStatusUC.m_CN = Me.m_CN m_MainWindow.m_MachinePageUC.m_AlarmsPageUC.m_CN = Me.m_CN m_MainWindow.m_MachinePageUC.m_TestingPage.m_CN = Me.m_CN m_MainWindow.m_DirectCutPageUC.m_MachineButtons.m_CN = Me.m_CN m_MainWindow.m_DirectCutPageUC.m_CN = Me.m_CN m_MainWindow.m_DirectCutPageUC.m_ManualAxesMove.m_CN = Me.m_CN Catch ex As Exception ' set status to statusbar MsgBox(ex.Message) End Try Select Case m_nNCType Case 0 'Debug Case 1 'Axium Case 2 'Flexium If m_CN.n_state < 2 Then 'Per evitare crash nel caso si clickino bottoni che agiscono sul controllo, avvio il controllo di debug al posto del flexium Me.m_CN = New CN_Debug m_MainWindow.m_MachineStatusUC.m_CN = Me.m_CN m_MainWindow.m_MachinePageUC.m_AlarmsPageUC.m_CN = Me.m_CN m_MainWindow.m_MachinePageUC.m_TestingPage.m_CN = Me.m_CN m_MainWindow.m_DirectCutPageUC.m_MachineButtons.m_CN = Me.m_CN m_MainWindow.m_DirectCutPageUC.m_CN = Me.m_CN m_MachineStatus.MachineStatusGrid.Background = Brushes.Red Else m_CN.b_axis_events_enable = True m_MachineStatus.MachineStatusGrid.Background = Brushes.Gray End If End Select End Sub Private Sub NewVarChanged_handler(ByVal nst As Object) Handles m_CN.NewVarChanged m_bNewVarData = True End Sub Private Sub NewPositionData_handler(ByVal nst As Short) Handles m_CN.NewPositionData m_bNewPosData = True End Sub Private Sub NewPosDeltaData_handler(ByVal nst As Short) Handles m_CN.NewPosDeltaData m_bNewDeltaData = True End Sub Sub Refresh() If m_bNewPosData Then m_bNewPosData = False m_MachineStatus.DisplayPosition() End If If m_bNewDeltaData Then m_bNewDeltaData = False m_MachineStatus.DisplayDeltaPosition() End If If m_bNewVarData Then m_bNewVarData = False m_MachineStatus.DisplayVar() End If If m_CN.b_feed_override_changed Then m_CN.b_feed_override_changed = False m_MachineStatus.DisplayFeed() m_MachineStatus.ConsumptionLbl.Content = m_CN.d_spindle_current End If If m_CN.b_spindle_data_changed Then m_CN.b_spindle_data_changed = False m_MachineStatus.DisplaySpeed() End If If m_CN.b_Tool_data_changed Then m_CN.b_Tool_data_changed = False 'FrmMain.LblToolLen.Text = cn.Tools(0).lenght.ToString 'FrmMain.LblToolRad.Text = cn.Tools(0).radius.ToString 'FrmMain.LblToolComp.Text = cn.Tools(0).comp_num.ToString End If If m_CN.read_active_mode() <> m_nCurrMode Then m_nCurrMode = m_CN.read_active_mode() m_MachineStatus.DisplayActiveMode(m_nCurrMode) End If If m_CN.b_NC_error Then m_CN.b_NC_error = False m_AlarmsPage.NcError() End If If m_CN.b_PLC_error Then m_AlarmsPage.PlcError(m_CN.sz_PLC_error_messages) Else 'Dim BackColor As SolidColorBrush = m_MainWindow.m_MachineStatusUC.MachineStatusGrid.Background 'If Colors.Red.Equals(BackColor.Color) Then ' m_MainWindow.m_MachineStatusUC.MachineStatusGrid.Background = Brushes.DarkGray 'End If End If End Sub End Class