077b583814
- in simulazione al cambio di stato di Trace aggiunto ridisegno.
643 lines
17 KiB
VB.net
643 lines
17 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports EgtUILib
|
|
|
|
Public Class SimulationVM
|
|
Inherits VMBase
|
|
|
|
#Region "FIELDS & PROPERTIES"
|
|
|
|
'EGT PROPERTIES
|
|
' Stato di visualizzazione della macchina
|
|
Private m_nMachLook As MCH_LOOK = MCH_LOOK.ALL
|
|
|
|
' Utensile corrente
|
|
Private m_sCurrTool As String = String.Empty
|
|
|
|
' Stato di comando corrente
|
|
Private m_nStatus As MCH_SIM_ST = MCH_SIM_ST.UI_STOP
|
|
Private Property SimulationStatus As MCH_SIM_ST
|
|
Get
|
|
Return m_nStatus
|
|
End Get
|
|
Set(value As MCH_SIM_ST)
|
|
m_nStatus = value
|
|
OnPostSetSimulationStatus(value)
|
|
End Set
|
|
End Property
|
|
|
|
' Stato bottone Play
|
|
Private m_bShowPlay As Boolean = True
|
|
' Coefficiente per valore Slider
|
|
Private m_SliderX As Double = 1
|
|
' Percorsi immagini per bottone Play/Pause
|
|
Private m_PlayImagePath As String = String.Empty
|
|
Private m_PauseImagePath As String = String.Empty
|
|
' Messaggi per status Simulazione
|
|
Private m_PauseMsg As String = String.Empty
|
|
Private m_StopMsg As String = String.Empty
|
|
Private m_HomeMsg As String = String.Empty
|
|
|
|
' Flag di esecuzione in corso
|
|
Private m_bSimExecuting As Boolean = False
|
|
Public ReadOnly Property bSimExecuting As Boolean
|
|
Get
|
|
Return m_bSimExecuting
|
|
End Get
|
|
End Property
|
|
|
|
Public Shared SimulationMsg_Const As Integer = Nothing
|
|
|
|
' lista degli assi
|
|
Private m_MachineAxisList As New ObservableCollection(Of MachineAxis)
|
|
Public ReadOnly Property MachineAxisList As ObservableCollection(Of MachineAxis)
|
|
Get
|
|
Return m_MachineAxisList
|
|
End Get
|
|
End Property
|
|
|
|
Private m_GCode As String
|
|
Public Property GCode As String
|
|
Get
|
|
Return m_GCode
|
|
End Get
|
|
Set(value As String)
|
|
If value <> m_GCode Then
|
|
m_GCode = value
|
|
NotifyPropertyChanged(NameOf(GCode))
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_FValue As String
|
|
Public Property FValue As String
|
|
Get
|
|
Return m_FValue
|
|
End Get
|
|
Set(value As String)
|
|
If value <> m_FValue Then
|
|
m_FValue = value
|
|
NotifyPropertyChanged(NameOf(FValue))
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_TName As String
|
|
Public Property TName As String
|
|
Get
|
|
Return m_TName
|
|
End Get
|
|
Set(value As String)
|
|
If value <> m_TName Then
|
|
m_TName = value
|
|
NotifyPropertyChanged(NameOf(TName))
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_SValue As String
|
|
Public Property SValue As String
|
|
Get
|
|
Return m_SValue
|
|
End Get
|
|
Set(value As String)
|
|
If value <> m_SValue Then
|
|
m_SValue = value
|
|
NotifyPropertyChanged(NameOf(SValue))
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_OpeName As String
|
|
Public Property OpeName As String
|
|
Get
|
|
Return m_OpeName
|
|
End Get
|
|
Set(value As String)
|
|
If value <> m_OpeName Then
|
|
m_OpeName = value
|
|
NotifyPropertyChanged(NameOf(OpeName))
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_PlayPauseImage As String
|
|
Public ReadOnly Property PlayPauseImage As String
|
|
Get
|
|
If m_bShowPlay Then
|
|
Return m_PlayImagePath
|
|
Else
|
|
Return m_PauseImagePath
|
|
End If
|
|
End Get
|
|
End Property
|
|
|
|
Private m_StatusMsg As String
|
|
Public Property StatusMsg As String
|
|
Get
|
|
Return m_StatusMsg
|
|
End Get
|
|
Set(value As String)
|
|
m_StatusMsg = value
|
|
NotifyPropertyChanged(NameOf(StatusMsg))
|
|
End Set
|
|
End Property
|
|
|
|
Public m_SliderValue As Double
|
|
Public Overridable Property SliderValue As Double
|
|
Get
|
|
Return m_SliderValue
|
|
End Get
|
|
Set(value As Double)
|
|
If Math.Abs(value - m_SliderValue) > EPS_SMALL Then
|
|
m_SliderValue = value
|
|
EgtSimSetStep(m_SliderValue * m_SliderX)
|
|
NotifyPropertyChanged(NameOf(SliderValue))
|
|
End If
|
|
End Set
|
|
End Property
|
|
|
|
Private m_VMillActive As Boolean = False
|
|
Public Property VMillActive As Boolean
|
|
Get
|
|
Return m_VMillActive
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_VMillActive = value
|
|
VMillActiveInfoTitle(m_VMillActive)
|
|
NotifyPropertyChanged(NameOf(VMillActive))
|
|
End Set
|
|
End Property
|
|
Public Sub SetVMillActive(value As Boolean)
|
|
m_VMillActive = value
|
|
NotifyPropertyChanged(NameOf(VMillActive))
|
|
End Sub
|
|
|
|
Private m_VMill_Visibility As Visibility = Visibility.Collapsed
|
|
Public Property VMill_Visibility As Visibility
|
|
Get
|
|
Return m_VMill_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_VMill_Visibility = value
|
|
NotifyPropertyChanged(NameOf(VMill_Visibility))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_VMill_IsEnabled As Boolean = False
|
|
Public Property VMill_IsEnabled As Boolean
|
|
Get
|
|
Return m_VMill_IsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_VMill_IsEnabled = value
|
|
NotifyPropertyChanged(NameOf(VMill_IsEnabled))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_TraceActive As Boolean = False
|
|
Public Property TraceActive As Boolean
|
|
Get
|
|
Return m_TraceActive
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_TraceActive = value
|
|
EgtSimEnableToolTipTrace( m_TraceActive)
|
|
EgtDraw()
|
|
NotifyPropertyChanged(NameOf(TraceActive))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Trace_Visibility As Visibility = Visibility.Collapsed
|
|
Public Property Trace_Visibility As Visibility
|
|
Get
|
|
Return m_Trace_Visibility
|
|
End Get
|
|
Set(value As Visibility)
|
|
m_Trace_Visibility = value
|
|
NotifyPropertyChanged(NameOf(Trace_Visibility))
|
|
End Set
|
|
End Property
|
|
|
|
Private m_Trace_IsEnabled As Boolean = False
|
|
Public Property Trace_IsEnabled As Boolean
|
|
Get
|
|
Return m_Trace_IsEnabled
|
|
End Get
|
|
Set(value As Boolean)
|
|
m_Trace_IsEnabled = value
|
|
NotifyPropertyChanged(NameOf(Trace_IsEnabled))
|
|
End Set
|
|
End Property
|
|
|
|
' Definizione comandi
|
|
Private m_cmdStep As ICommand
|
|
Private m_cmdPlayPause As ICommand
|
|
Private m_cmdStop As ICommand
|
|
|
|
#Region "Messages"
|
|
|
|
Public ReadOnly Property SimulationMsg As String
|
|
Get
|
|
Return EgtMsg(31607) ' Simulazione
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property VMillMsg As String
|
|
Get
|
|
Return EgtMsg(5316) ' Virtual Milling
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property TraceMsg As String
|
|
Get
|
|
Return EgtMsg(5321) ' Tool Tip Tracing
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property PauseMsg As String
|
|
Get
|
|
Return m_PauseMsg
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property StopMsg As String
|
|
Get
|
|
Return m_StopMsg
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property HomeMsg As String
|
|
Get
|
|
Return m_HomeMsg
|
|
End Get
|
|
End Property
|
|
|
|
#End Region
|
|
|
|
#Region "ToolTip"
|
|
|
|
Public ReadOnly Property OneStepToolTip As String
|
|
Get
|
|
Return EgtMsg(31608) ' Un passo alla volta
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property PlayPauseToolTip As String
|
|
Get
|
|
Return EgtMsg(31609) ' Play/Pausa
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property StopHomeToolTip As String
|
|
Get
|
|
Return EgtMsg(31610) ' Stop/Home
|
|
End Get
|
|
End Property
|
|
|
|
#End Region
|
|
|
|
#End Region ' FIELDS & PROPERTIES
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New()
|
|
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Public Sub Refresh(PrevMeasureUnit As MeasureUnitOpt)
|
|
|
|
End Sub
|
|
|
|
Public Sub ResetSimulation()
|
|
StatusMsg = ""
|
|
' Termino la simulazione
|
|
SimulationStatus = MCH_SIM_ST.UI_STOP
|
|
EgtSimExit()
|
|
' Salvo valore dello slider
|
|
Dim sVal As String = DoubleToString(SliderValue, 1)
|
|
WriteMainPrivateProfileString(S_SIMUL, K_SLIDERVAL, sVal)
|
|
' Torno alla prima fase
|
|
EgtSetCurrPhase(1, True)
|
|
End Sub
|
|
|
|
Public Overridable Sub ExecSim()
|
|
|
|
End Sub
|
|
|
|
Public Sub ShowCncData()
|
|
' Assi
|
|
Dim nEgtIndex As Integer = 0
|
|
Dim nAxisIndex As Integer = 0
|
|
Dim sName As String = String.Empty
|
|
Dim sToken As String = String.Empty
|
|
Dim bLinear As Boolean = True
|
|
Dim dVal As Double = 0
|
|
While EgtSimGetAxisInfoPos(nEgtIndex, sName, sToken, bLinear, dVal)
|
|
If sToken <> "**" Then
|
|
IsValidAxisIndex(nAxisIndex)
|
|
m_MachineAxisList(nAxisIndex).Name = sName
|
|
m_MachineAxisList(nAxisIndex).Token = sToken
|
|
m_MachineAxisList(nAxisIndex).Linear = bLinear
|
|
m_MachineAxisList(nAxisIndex).SetValue(If(bLinear, LenToString(dVal, -3), DoubleToString(dVal, -3)))
|
|
nAxisIndex += 1
|
|
End If
|
|
nEgtIndex += 1
|
|
End While
|
|
For ClearIndex = m_MachineAxisList.Count - 1 To nAxisIndex Step -1
|
|
m_MachineAxisList.RemoveAt(ClearIndex)
|
|
Next
|
|
' Tipo di movimento e feed
|
|
ShowMoveTypeFeed()
|
|
' Nome utensile e speed
|
|
ShowToolNameSpeed()
|
|
' Nome operazione e tipo
|
|
ShowOperationName()
|
|
End Sub
|
|
|
|
Private Sub IsValidAxisIndex(nIndex As Integer)
|
|
For Index = m_MachineAxisList.Count To nIndex
|
|
m_MachineAxisList.Add(New MachineAxis)
|
|
Next
|
|
End Sub
|
|
|
|
Private Function ShowMoveTypeFeed() As Boolean
|
|
Dim nG As Integer = 0
|
|
Dim dFeed As Double = 0
|
|
If EgtSimGetMoveInfo(nG, dFeed) Then
|
|
If nG <> 0 Then
|
|
GCode = "G" & nG.ToString()
|
|
FValue = "F" & LenToString(dFeed, 0)
|
|
Else
|
|
GCode = "G" & nG.ToString()
|
|
FValue = ""
|
|
End If
|
|
Return True
|
|
Else
|
|
GCode = ""
|
|
FValue = ""
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
Private Function ShowToolNameSpeed() As Boolean
|
|
Dim sTool As String = String.Empty
|
|
Dim dSpeed As Double = 0
|
|
If EgtSimGetToolInfo(sTool, dSpeed) Then
|
|
TName = sTool
|
|
SValue = "S" & DoubleToString(dSpeed, 0)
|
|
Return True
|
|
Else
|
|
TName = ""
|
|
SValue = ""
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
Private Function ShowOperationName() As Boolean
|
|
Dim sName As String = String.Empty
|
|
Dim nType As Integer = 0
|
|
If EgtSimGetOperationInfo(sName, nType) Then
|
|
OpeName = sName
|
|
Return True
|
|
Else
|
|
OpeName = ""
|
|
Return False
|
|
End If
|
|
End Function
|
|
|
|
Public Sub UpdateMachView()
|
|
' Se cambiato utensile, aggiorno stato visualizzazione macchina
|
|
Dim sTool As String = String.Empty
|
|
Dim dSpeed As Double = 0
|
|
If EgtSimGetToolInfo(sTool, dSpeed) Then
|
|
If sTool <> m_sCurrTool Then
|
|
m_sCurrTool = sTool
|
|
EgtSetMachineLook(m_nMachLook)
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Public Overridable Sub OnPostSetSimulationStatus(value As MCH_SIM_ST)
|
|
|
|
End Sub
|
|
|
|
Public Overridable Sub VMillActiveInfoTitle(m_VMillActive As Boolean)
|
|
|
|
End Sub
|
|
|
|
#Region "Metodi Get"
|
|
|
|
Public Function GetMachLook() As MCH_LOOK
|
|
Return m_nMachLook
|
|
End Function
|
|
|
|
Public Function GetStatus() As MCH_SIM_ST
|
|
Return m_nStatus
|
|
End Function
|
|
|
|
Public Function GetSimulationStatus() As MCH_SIM_ST
|
|
Return SimulationStatus
|
|
End Function
|
|
|
|
Public Function GetSliderX() As Double
|
|
Return m_SliderX
|
|
End Function
|
|
|
|
#End Region ' Metodi Get
|
|
|
|
#Region "Metodi Set"
|
|
|
|
Public Sub SetMachLook(value As MCH_LOOK)
|
|
m_nMachLook = value
|
|
End Sub
|
|
|
|
Public Sub SetStatus(value As MCH_SIM_ST)
|
|
m_nStatus = value
|
|
End Sub
|
|
|
|
Public Sub SetSimulationStatus(value As MCH_SIM_ST)
|
|
SimulationStatus = value
|
|
End Sub
|
|
|
|
Public Sub SetShowPlay(value As Boolean)
|
|
m_bShowPlay = value
|
|
End Sub
|
|
|
|
Public Sub SetSliderX(value As Double)
|
|
m_SliderX = value
|
|
End Sub
|
|
|
|
Public Sub SetPlayImagePath(value As String)
|
|
m_PlayImagePath = value
|
|
End Sub
|
|
|
|
Public Sub SetPauseImagePath(value As String)
|
|
m_PauseImagePath = value
|
|
End Sub
|
|
|
|
Public Sub SetSimExecuting(value As Boolean)
|
|
m_bSimExecuting = value
|
|
End Sub
|
|
|
|
Public Sub SetMachineAxisList(value As ObservableCollection(Of MachineAxis))
|
|
m_MachineAxisList = value
|
|
End Sub
|
|
|
|
Public Sub SetPauseMsg(value As String)
|
|
m_PauseMsg = value
|
|
End Sub
|
|
|
|
Public Sub SetStopMsg(value As String)
|
|
m_StopMsg = value
|
|
End Sub
|
|
|
|
Public Sub SetHomeMsg(value As String)
|
|
m_HomeMsg = value
|
|
End Sub
|
|
|
|
#End Region ' Metodi Set
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "StepCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that create a new tool.
|
|
''' </summary>
|
|
Public ReadOnly Property StepCommand As ICommand
|
|
Get
|
|
If m_cmdStep Is Nothing Then
|
|
m_cmdStep = New Command(AddressOf StepCmd)
|
|
End If
|
|
Return m_cmdStep
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Creata the new tool. This method is invoked by the NewCommand.
|
|
''' </summary>
|
|
Public Sub StepCmd(ByVal param As Object)
|
|
StatusMsg = ""
|
|
' Disabilito check VMill
|
|
VMill_IsEnabled = False
|
|
' Se stato stop, devo avviare simulazione
|
|
If m_nStatus = MCH_SIM_ST.UI_STOP Then
|
|
SimulationStatus = MCH_SIM_ST.UI_STEP
|
|
' Aggiorno bottone
|
|
m_bShowPlay = False
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
ExecSim()
|
|
' Aggiorno bottone
|
|
m_bShowPlay = True
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
' Alrimenti imposto solo il nuovo stato
|
|
Else
|
|
SimulationStatus = MCH_SIM_ST.UI_STEP
|
|
' Aggiornamenti per bottone Play/Pause
|
|
m_bShowPlay = False
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' StepCommand
|
|
|
|
#Region "PlayPauseCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that create a new tool.
|
|
''' </summary>
|
|
Public ReadOnly Property PlayPauseCommand As ICommand
|
|
Get
|
|
If m_cmdPlayPause Is Nothing Then
|
|
m_cmdPlayPause = New Command(AddressOf PlayPause)
|
|
End If
|
|
Return m_cmdPlayPause
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Creata the new tool. This method is invoked by the NewCommand.
|
|
''' </summary>
|
|
Public Sub PlayPause(ByVal param As Object)
|
|
StatusMsg = ""
|
|
If m_bShowPlay Then
|
|
' Disabilito check VMill
|
|
VMill_IsEnabled = False
|
|
' Aggiorno bottone
|
|
m_bShowPlay = False
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
' Eseguo
|
|
If m_nStatus = MCH_SIM_ST.UI_STOP Then
|
|
' Lancio simulazione
|
|
SimulationStatus = MCH_SIM_ST.UI_PLAY
|
|
ExecSim()
|
|
' Aggiorno bottone
|
|
m_bShowPlay = True
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
ElseIf m_nStatus = MCH_SIM_ST.UI_PAUSE Then
|
|
SimulationStatus = MCH_SIM_ST.UI_PLAY
|
|
End If
|
|
Else
|
|
' Aggiorno bottone
|
|
m_bShowPlay = True
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
' Se play o step, imposto stato pausa
|
|
If m_nStatus = MCH_SIM_ST.UI_PLAY Or m_nStatus = MCH_SIM_ST.UI_STEP Then
|
|
SimulationStatus = MCH_SIM_ST.UI_PAUSE
|
|
StatusMsg = PauseMsg
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
|
|
#End Region ' PlayPauseCommand
|
|
|
|
#Region "StopCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that create a new tool.
|
|
''' </summary>
|
|
Public ReadOnly Property StopCommand As ICommand
|
|
Get
|
|
If m_cmdStop Is Nothing Then
|
|
m_cmdStop = New Command(AddressOf StopCmd)
|
|
End If
|
|
Return m_cmdStop
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Creata the new tool. This method is invoked by the NewCommand.
|
|
''' </summary>
|
|
Public Sub StopCmd(ByVal param As Object)
|
|
StatusMsg = ""
|
|
' Abilito check VMill
|
|
VMill_IsEnabled = True
|
|
' Se stato già stop, porto in home
|
|
If m_nStatus = MCH_SIM_ST.UI_STOP Then
|
|
' Mi riporto all'inizio
|
|
EgtSimStart()
|
|
EgtDraw()
|
|
' Aggiorno dati CNC
|
|
ShowCncData()
|
|
StatusMsg = HomeMsg
|
|
Else
|
|
StatusMsg = StopMsg
|
|
End If
|
|
' Aggiorno bottone
|
|
m_bShowPlay = True
|
|
NotifyPropertyChanged(NameOf(PlayPauseImage))
|
|
' Imposto il nuovo stato
|
|
SimulationStatus = MCH_SIM_ST.UI_STOP
|
|
End Sub
|
|
|
|
#End Region ' StopCommand
|
|
|
|
#End Region ' COMMANDS
|
|
|
|
End Class
|