Files
OmagCUT/SimulationPageUC.xaml.vb
T
Dario Sassi 374fc7ff75 OmagCUT 1.6k9 :
- CamAutomatico usa lavorazione corrente e in caso di errore emette messaggio
- verifica corrispondenza tra macchina nel file e macchina corrente e gestione differenze
- nesting solo se esiste grezzo.
2015-11-24 22:17:18 +00:00

209 lines
8.0 KiB
VB.net

Imports EgtUILib
Public Class SimulationPageUC
Dim m_MainWindow As MainWindow = Application.Current.MainWindow
Dim m_CurrProjPage As CurrentProjectPageUC
' Stato e comando correnti
Public Enum SIM_ST As Integer
ST_STOP = 1
ST_PLAY = 2
ST_PAUSE = 3
End Enum
Private m_nStatus As Integer = SIM_ST.ST_STOP
' Stato bottone Play
Private m_bPlay As Boolean = True
' Coeeficiente per valore Slider
Private m_SliderX As Double = 1
Private Sub SimulationPage_Initialized(sender As Object, e As EventArgs)
PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Play.png", UriKind.Relative))
End Sub
Private Sub SimulationPage_Loaded(sender As Object, e As RoutedEventArgs)
m_CurrProjPage = m_MainWindow.m_CurrentProjectPageUC
' Disabilito impostazione modificato
EgtDisableModified()
' Nascondo eventuali pezzi in parcheggio
HideParkedParts()
' Visualizzo tutta la macchina
EgtShowOnlyTable(False)
' Calcolo le lavorazioni
Dim sSawMch As String = String.Empty
GetPrivateProfileString(S_MACH, K_CURRMACHINING, "", sSawMch, m_MainWindow.GetIniFile())
EgtLuaCreateGlobTable("CAM")
EgtLuaSetGlobStringVar("CAM.SAWMCH", sSawMch)
Dim bOk As Boolean = EgtLuaExecFile(m_MainWindow.GetCamAutoDir() & "\CamAuto.lua")
Dim nErr As Integer = 999
EgtLuaGetGlobIntVar("CAM.ERR", nErr)
EgtLuaResetGlobVar("CAM")
If nErr <> 0 Then
bOk = False
EgtOutLog("Error in CamAuto : " & nErr.ToString())
End If
' Messaggio di errore
' Se errore in generazione, segnalo l'errore ed esco
If Not bOk Then
OutMessageLbl.Text = EgtMsg(90314) 'Errore nella generazione del programma CN
OutMessageLbl.Background = Brushes.Tomato
OutMessageLbl.Visibility = Windows.Visibility.Visible
EgtOutLog(OutMessageLbl.Text)
End If
' Salvo il progetto con le lavorazioni
Dim sMchPath As String = m_MainWindow.GetTempDir() & "\" & "MachProj.nge"
m_CurrProjPage.SaveFile(sMchPath)
' Imposto vista 3d isometrica di tutto
EgtSetView(VT.ISO_SE, False)
EgtZoom(ZM.ALL)
' Imposto stato corrente
m_nStatus = SIM_ST.ST_STOP
m_bPlay = True
m_SliderX = GetPrivateProfileDouble(S_SIMUL, K_SLIDERX, 1, m_MainWindow.GetIniFile())
Dim SliderVal As Double = GetPrivateProfileDouble(S_SIMUL, K_SLIDERVAL, 10, m_MainWindow.GetIniFile())
SpeedSlider.Value = SliderVal
' Porto la testa in home
EgtSimStart()
HomeBtn_Click(Me, Nothing)
End Sub
Private Sub HomeBtn_Click(sender As Object, e As RoutedEventArgs) Handles HomeBtn.Click
If m_nStatus <> SIM_ST.ST_STOP Then
Return
End If
' Vado in home
EgtSimHome()
' Aggiorno visualizzazione
EgtDraw()
' Aggiorno dati CNC
ShowCncData()
End Sub
Private Sub PlayPauseBtn_Click(sender As Object, e As RoutedEventArgs) Handles PlayPauseBtn.Click
If m_bPlay Then
' Aggiorno bottone
m_bPlay = False
PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Pause.png", UriKind.Relative))
' Eseguo
If m_nStatus = SIM_ST.ST_STOP Then
' Lancio simulazione
ExecSim()
' Aggiorno bottone
m_bPlay = True
PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Play.png", UriKind.Relative))
ElseIf m_nStatus = SIM_ST.ST_PAUSE Then
m_nStatus = SIM_ST.ST_PLAY
End If
Else
' Aggiorno bottone
m_bPlay = True
PlayPauseImage.Source = New System.Windows.Media.Imaging.BitmapImage(New Uri("/Resources/Play.png", UriKind.Relative))
' Se play, imposto stato pausa
If m_nStatus = SIM_ST.ST_PLAY Then
m_nStatus = SIM_ST.ST_PAUSE
End If
End If
End Sub
Private Sub StopBtn_Click(sender As Object, e As RoutedEventArgs) Handles StopBtn.Click
m_nStatus = SIM_ST.ST_STOP
End Sub
Private Sub SpeedSlider_ValueChanged(sender As Object, e As RoutedPropertyChangedEventArgs(Of Double))
EgtSimSetStep(SpeedSlider.Value * m_SliderX)
End Sub
Private Sub ExecSim()
m_nStatus = SIM_ST.ST_PLAY
EgtSimStart()
EgtSimSetStep(SpeedSlider.Value * m_SliderX)
While m_nStatus <> SIM_ST.ST_STOP
' Se simulazione in svolgimento
If m_nStatus = SIM_ST.ST_PLAY Then
' Eseguo movimento
Dim nMove As Integer
Dim bMove As Boolean = EgtSimMove(nMove)
' Se movimento non riuscito
If Not bMove Then
m_nStatus = SIM_ST.ST_STOP
Select Case nMove
Case MCH_SIM.END_
Case MCH_SIM.OUTSTROKE
OutMessageLbl.Text = EgtMsg(90317) 'Extracorsa
OutMessageLbl.Background = Brushes.Tomato
OutMessageLbl.Visibility = Windows.Visibility.Visible
EgtOutLog(OutMessageLbl.Text)
Case MCH_SIM.DIR_ERR
OutMessageLbl.Text = EgtMsg(90318) 'Direzione utensile irraggiungibile
OutMessageLbl.Background = Brushes.Tomato
OutMessageLbl.Visibility = Windows.Visibility.Visible
EgtOutLog(OutMessageLbl.Text)
Case Else
OutMessageLbl.Text = EgtMsg(90319) 'Errore
OutMessageLbl.Background = Brushes.Tomato
OutMessageLbl.Visibility = Windows.Visibility.Visible
EgtOutLog(OutMessageLbl.Text)
End Select
End If
' Aggiorno visualizzazione
EgtDraw()
' Aggiorno dati CNC
ShowCncData()
End If
' Costringo ad aggiornare UI
Dim nDummy As Integer
Application.Current.Dispatcher.Invoke(Windows.Threading.DispatcherPriority.Background, _
New Action(Function() nDummy = 0))
End While
End Sub
Private Sub ShowCncData()
ShowAxisNameVal(0, L1NameTxBl.Text, L1ValueTxBl.Text)
ShowAxisNameVal(1, L2NameTxBl.Text, L2ValueTxBl.Text)
ShowAxisNameVal(2, L3NameTxBl.Text, L3ValueTxBl.Text)
ShowAxisNameVal(3, R1NameTxBl.Text, R1ValueTxBl.Text)
ShowAxisNameVal(4, R2NameTxBl.Text, R2ValueTxBl.Text)
End Sub
Private Function ShowAxisNameVal(ByVal nInd As Integer, ByRef sName As String, ByRef sVal As String) As Boolean
Dim sInfo As String = String.Empty
Dim dVal As Double = 0
If EgtSimGetAxisInfoPos(nInd, sInfo, dVal) Then
sName = sInfo
sVal = DoubleToString(dVal, -3)
Return True
Else
sName = String.Empty
sVal = String.Empty
Return False
End If
End Function
Private Sub ExitBtnUC_Click(sender As Object, e As RoutedEventArgs)
' Mi assicuro di terminare la simulazione
EgtSimStop()
' Salvo valore dello slider
Dim sVal As String = DoubleToString(SpeedSlider.Value, 1)
WritePrivateProfileString(S_SIMUL, K_SLIDERVAL, sVal, m_MainWindow.GetIniFile())
' Riporto il progetto allo stato iniziale
EgtRemoveAllOperations()
' Ripristino visibilità standard
ShowParkedParts()
EgtShowOnlyTable(True)
' Imposto vista 2D
EgtSetView(VT.TOP, False)
EgtZoom(ZM.ALL)
' Abilito impostazione modificato
EgtEnableModified()
' Esco dalla pagina
m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Remove(Me)
m_CurrProjPage.CurrProjGrid.Visibility = Windows.Visibility.Visible
m_MainWindow.m_CurrentProjectPageUC.CurrentProjectPageGrid.Children.Add(m_MainWindow.m_CadCutPageUC)
m_MainWindow.m_ActivePage = MainWindow.Pages.CadCut
End Sub
End Class