Files
effector.plugin.fivelakes/Supervisor.Plugin.FiveLakes/MachinePage/MachinePageVM.vb
T
Emmanuele Sassi c670ba4758 - introdotta funzione GetNextDoor chiamabile da lua
- gestito DeleteAll in DoorListPage
- corretto id porte che riparte da 1 solo in caso di lista vuota
- aggiunta gestione funzioni chiamabili da lua
- corretta lettura variabili macchina booleane
2024-08-09 17:02:39 +02:00

185 lines
8.1 KiB
VB.net

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