Imports System.Collections.ObjectModel Imports System.Windows.Threading Public Class MachinePageVM Private m_DoorOnMachineList As New ObservableCollection(Of Door) Public ReadOnly Property DoorOnMachineList As ObservableCollection(Of Door) Get Return m_DoorOnMachineList End Get End Property Private m_VarTimer As New DispatcherTimer Private m_VariableList As ObservableCollection(Of Variable) Public ReadOnly Property VariableList As ObservableCollection(Of Variable) Get Return m_VariableList End Get End Property Sub New() m_VariableList = New ObservableCollection(Of Variable)({New Variable(Variable.VariableTypes.DOUBLE, "@WP_PR_00", "980", 1), New Variable(Variable.VariableTypes.DOUBLE, "@WP_PR_01", "981", 1), New Variable(Variable.VariableTypes.DOUBLE, "@WP_PR_02", "982", 1), New Variable(Variable.VariableTypes.DOUBLE, "@WP_PR_03", "983", 1), New Variable(Variable.VariableTypes.DOUBLE, "@WP_PR_04", "984", 1), New Variable(Variable.VariableTypes.INTEGER, "@DOORN_S0", "1360", 1), New Variable(Variable.VariableTypes.INTEGER, "@DOORN_S1", "1361", 1), New Variable(Variable.VariableTypes.INTEGER, "@DOORN_S2", "1362", 1), New Variable(Variable.VariableTypes.INTEGER, "@DOORN_S3", "1363", 1), New Variable(Variable.VariableTypes.INTEGER, "@DOORN_S4", "1364", 1), New Variable(Variable.VariableTypes.INTEGER, "@SENT_1", "1350", 1), New Variable(Variable.VariableTypes.INTEGER, "@SENT_2", "1351", 1), New Variable(Variable.VariableTypes.INTEGER, "@STATE", "1352", 1), New Variable(Variable.VariableTypes.INTEGER, "@RESET_ON", "1365", 1), New Variable(Variable.VariableTypes.INTEGER, "@MAST_OK", "1366", 1), New Variable(Variable.VariableTypes.INTEGER, "@START_OK", "1367", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF00", "901.0", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF01", "901.1", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF02", "901.2", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF03", "901.3", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF04", "901.4", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF05", "901.5", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF06", "901.6", 1), New Variable(Variable.VariableTypes.BOOLEAN, "@BF07", "901.7", 1)}) AddHandler m_VarTimer.Tick, AddressOf VarTimer_Tick m_VarTimer.Interval = New TimeSpan(100) m_VarTimer.Start() m_DoorOnMachineList.Add(New Door(35, 1, "Test.ddf", "Produzione2024", 1, 800, 1800, 40, {""}, {""})) End Sub Friend Sub VarTimer_Tick() For Each Var In m_VariableList Select Case Var.Type Case Variable.VariableTypes.INTEGER Dim nIndex As Integer = 0 Integer.TryParse(Var.sIndex, nIndex) Dim nValue As Integer = 0 If Map.refSupervisorFunction.ComReadShortVar(nIndex, nValue, Var.nMachine) Then Var.SetValue(nValue) Else Map.refSupervisorFunction.PlgOutLog("Error! Reading Variable " & Var.sIndex & " on machine " & Var.nMachine & "failed!") End If Case Variable.VariableTypes.DOUBLE Dim nIndex As Integer = 0 Integer.TryParse(Var.sIndex, nIndex) Dim dValue As Double = 0 If Map.refSupervisorFunction.ComReadDoubleVar(nIndex, dValue, Var.nMachine) Then Var.SetValue(dValue) Else Map.refSupervisorFunction.PlgOutLog("Error! Reading Variable " & Var.sIndex & " on machine " & Var.nMachine & "failed!") End If Case Variable.VariableTypes.BOOLEAN Dim nIndex As Integer = 0 Dim nBit As Integer = 0 Dim sIndexSplit() As String = Var.sIndex.Split("."c) Integer.TryParse(sIndexSplit(0), nIndex) Integer.TryParse(sIndexSplit(1), nBit) Dim bValue As Boolean = 0 If Map.refSupervisorFunction.ComReadBitVar(nIndex, nBit, bValue, Var.nMachine) Then Var.SetValue(bValue) Else Map.refSupervisorFunction.PlgOutLog("Error! Reading Variable " & Var.sIndex & " on machine " & Var.nMachine & "failed!") End If End Select Next End Sub End Class Public Class Variable Inherits VMBase Public Enum VariableTypes As Integer [INTEGER] = 1 [DOUBLE] = 2 [BOOLEAN] = 3 End Enum Private m_Type As VariableTypes Public ReadOnly Property Type As Integer Get Return m_Type End Get End Property Private m_sName As String Public ReadOnly Property sName As String Get Return m_sName End Get End Property Private m_sIndex As String Public ReadOnly Property sIndex As String Get Return m_sIndex End Get End Property Private m_nMachine As Integer Public ReadOnly Property nMachine As Integer Get Return m_nMachine End Get End Property Private m_nValue As Integer Private m_dValue As Double Private m_bValue As Boolean Public Property sValue As String Get Select Case Type Case VariableTypes.INTEGER Return m_nValue.ToString() Case VariableTypes.DOUBLE Return DoubleToString(m_dValue, 2) Case VariableTypes.BOOLEAN Return If(m_bValue, 1, 0) End Select End Get Set(value As String) Select Case Type Case VariableTypes.INTEGER If Not Integer.TryParse(value, m_nValue) Then NotifyPropertyChanged(NameOf(sValue)) End If Case VariableTypes.DOUBLE If Not StringToDouble(value, m_dValue) Then NotifyPropertyChanged(NameOf(sValue)) End If Case VariableTypes.BOOLEAN Dim nBoolean As Integer = 0 If Integer.TryParse(value, nBoolean) Then m_bValue = If(nBoolean > 0, 1, 0) Else NotifyPropertyChanged(NameOf(sValue)) End If End Select m_nValue = value End Set End Property Friend Sub SetValue(value As Integer) m_nValue = value NotifyPropertyChanged(NameOf(sValue)) End Sub Friend Sub SetValue(value As Double) m_dValue = value NotifyPropertyChanged(NameOf(sValue)) End Sub Friend Sub SetValue(value As Boolean) m_bValue = value NotifyPropertyChanged(NameOf(sValue)) End Sub Sub New(Type As VariableTypes, sName As String, sIndex As String, nMachine As Integer) m_Type = Type m_sName = sName m_sIndex = sIndex m_nMachine = nMachine End Sub End Class