From 78505e0f2bb43ca59a65af03759f951eb8a10305 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 20 Apr 2021 20:12:56 +0200 Subject: [PATCH 1/5] Modifiche thread di comunicazione CN --- .../EgtBEAMWALL.Supervisor.vbproj | 2 + .../MachCommandMessagePanelVM.vb | 15 +- .../MachManagingThread/MachCommConst.vb | 58 +++++ .../MachManagingThread/MachManaging.vb | 218 ++++++++++++++++++ .../MachManagingThread/MachManagingThread.vb | 177 +++++++------- EgtBEAMWALL.Supervisor/Utility/Map.vb | 12 + 6 files changed, 388 insertions(+), 94 deletions(-) create mode 100644 EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb create mode 100644 EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb diff --git a/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj b/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj index 1fbd1417..057fcba0 100644 --- a/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj +++ b/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj @@ -171,6 +171,8 @@ MachinePanelV.xaml + + diff --git a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb index f9323cea..6af1af8d 100644 --- a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb @@ -27,13 +27,6 @@ Class MachCommandMessagePanelVM End Get End Property - Private _Tpa As TPAComm = Nothing - Public ReadOnly Property Tpa As TPAComm - Get - Return _Tpa - End Get - End Property - Private _ProgramPath As String Public ReadOnly Property ProgramPath As String @@ -203,13 +196,7 @@ Class MachCommandMessagePanelVM End Property Public Sub Connect(ByVal param As Object) - Try - _Tpa = New TPAComm() - _Connected = Tpa.remObject.OnConnect() - Catch ex As Exception - EgtOutLog("Tentativo di connessione alla macchina fallito") - Return - End Try + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.CONNECT)) ' avvio thread di gestione della macchina Map.refProjectVM.StartMachManagingThread() NotifyPropertyChanged(NameOf(Connect_Background)) diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb new file mode 100644 index 00000000..b23e788b --- /dev/null +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb @@ -0,0 +1,58 @@ +Module MachCommConst + + Public Enum PVars As Integer + PROD = 0 + MACHGROUP = 1 + PART = 2 + STATE = 3 + End Enum + + Public Enum ResultTypes + EXECUTED + RESULT + End Enum + + Public Enum CommandTypes As Integer + ERROR_ = 0 + CONNECT = 1 + DISCONNECT = 2 + START = 3 + SOFTSTART = 4 + STOP_ = 5 + RESET = 6 + STEP_ = 7 + SETPOINT = 8 + SENDPROG = 9 + REMOVEPROG = 10 + REMOVEALLPROG = 11 + READ = 12 + WRITE = 13 + End Enum + + Public Enum CommandStates As Integer + ERROR_ = 0 + OK = 1 + End Enum + + ' stati pezzo + Private Enum PartState As Integer + NULL = 0 + START = 1 + END_ = 2 + End Enum + + Public Delegate Sub ResultCallbackDlg(CommandType As CommandTypes, CommandState As CommandStates, ResultType As ResultTypes, Params As String) + Public Delegate Sub CloseCallbackDlg(ByRef bCancel As Boolean) + Public Delegate Sub UpdateCallbackDlg(Param As String, Params As String) + Public Delegate Sub AlarmCallbackDlg(ByVal AlarmOperation As Integer, ByVal AlarmType As Integer, ByVal AlarmMessage As String, ByVal AlarmCode As String, ByVal AlarmDateTime As String) + Public Delegate Sub AxisCoordinatesCallbackDlg(ByVal AxisValue As Double, ByVal AxisIndex As Integer) + Public Delegate Sub OpStateCallbackDlg(ByVal newOpState As ISOCNC.Remoting.MachineOperatingState) + + Friend m_ResultCallbackDlg As ResultCallbackDlg + Friend m_CloseCallbackDlg As CloseCallbackDlg + Friend m_UpdateCallbackDlg As UpdateCallbackDlg + Friend m_AlarmCallbackDlg As AlarmCallbackDlg + Friend m_AxisCoordinatesCallbackDlg As AxisCoordinatesCallbackDlg + Friend m_OpStateCallbackDlg As OpStateCallbackDlg + +End Module diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb new file mode 100644 index 00000000..15c015b4 --- /dev/null +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb @@ -0,0 +1,218 @@ +Imports System.Collections.ObjectModel +Imports System.Collections.Specialized +Imports System.Windows.Threading +Imports ISOCNC.Remoting + +Class MachManaging + + Private m_Timer As New DispatcherTimer + Friend ReadOnly Property Timer As New DispatcherTimer + + Private m_bConnected As Boolean = False + Public ReadOnly Property bConnected As Boolean + Get + Return m_bConnected + End Get + End Property + + Private m_Tpa As TPAComm = Nothing + Public ReadOnly Property Tpa As TPAComm + Get + Return m_Tpa + End Get + End Property + + Public Shared WithEvents m_CommandList As ObservableCollection(Of ThreadCommand) + + Sub New() + ' imposto in Map + Map.SetRefMachManaging(Me) + AddHandler m_CommandList.CollectionChanged, AddressOf CommandList_CollectionChanged + m_Timer.Interval = New TimeSpan(100) + AddHandler m_Timer.Tick, AddressOf Timer_Tick + End Sub + + Private Sub OnDispose() + m_Timer.Stop() + RemoveHandler m_CommandList.CollectionChanged, AddressOf CommandList_CollectionChanged + RemoveHandler m_Timer.Tick, AddressOf Timer_Tick + End Sub + + Private Sub Timer_Tick(sender As Object, e As EventArgs) + 'Dim bCancel As Boolean = False + 'callback(0, "Init", bCancel) + + ' leggo tutte le variabili + Tpa.RWVariableManager.RefreshAllVars() + + ' eseguo ciclo principale + Dim nResetVar As Integer + 'CommVar(sResetVarName, nResetVar) + Dim P_Prod As Integer + Dim P_Machgroup As Integer + Dim P_Part As Integer + Dim P_State As Integer + Tpa.RWVariableManager.ReadVar("P_PROD", P_Prod) + Tpa.RWVariableManager.ReadVar("P_MACHGROUP", P_Machgroup) + Tpa.RWVariableManager.ReadVar("P_PART", P_Part) + Tpa.RWVariableManager.ReadVar("P_STATE", P_State) + ' se macchina pronta e non sta tagliando alcun pezzo + If nResetVar = 0 AndAlso + P_Prod = 0 AndAlso + P_Machgroup = 0 AndAlso + P_Part = 0 AndAlso + P_State = PartState.NULL Then + ' verifico se c'e' un programma da lanciare + For Each MachGroup In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList + Dim MyMachGroup As MyMachGroupVM = DirectCast(MachGroup, MyMachGroupVM) + If MyMachGroup.bReadyForMachining Then + ' recupero Path file CN + Dim CNPath As String = MyMachGroup.CnFilePath().Replace("\\\\", "\\") + ' lo lancio + If (Map.refMachCommandMessagePanelVM.SelOPState = MachineOperatingState.Pending) Then + Dim bOk As Boolean = Map.refMachCommandMessagePanelVM.Tpa.remObject.AddProgramToList(CNPath) + Map.refMachCommandMessagePanelVM.Tpa.remObject.SetCommand(ISOCNC.Remoting.Commands.Start_Program_Soft) + End If + + End If + Next + ElseIf P_Prod <> 0 AndAlso + P_Machgroup <> 0 AndAlso + P_Part <> 0 Then + If P_State = PartState.START Then + DbControllers.m_PartController.UpdateStart(P_Prod, P_Machgroup, P_Part, DateTime.Now()) + Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = P_Machgroup) + MachGroup.MyMachGroupM.SetState(1) + MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) + Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = P_Part) + Part.nState = 1 + Part.NotifyPropertyChanged(NameOf(Part.nState)) + If Not MachGroup.PartVMList.Any(Function(x) x.nState = 1) Then + DbControllers.m_MachGroupController.UpdateStart(P_Prod, P_Machgroup, DateTime.Now()) + MachGroup.MyMachGroupM.SetState(2) + MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) + End If + ElseIf P_State = PartState.END_ Then + DbControllers.m_PartController.UpdateEnd(P_Prod, P_Machgroup, P_Part, DateTime.Now()) + Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = P_Machgroup) + Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = P_Part) + Part.nState = 2 + Part.NotifyPropertyChanged(NameOf(Part.nState)) + If MachGroup.PartVMList.All(Function(x) x.nState >= 2) Then + DbControllers.m_MachGroupController.UpdateEnd(P_Prod, P_Machgroup, DateTime.Now()) + MachGroup.MyMachGroupM.SetState(2) + MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) + End If + ' azzero variabili + Tpa.RWVariableManager.WriteVar("P_PROD", 0) + Tpa.RWVariableManager.WriteVar("P_MACHGROUP", 0) + Tpa.RWVariableManager.WriteVar("P_PART", 0) + Tpa.RWVariableManager.WriteVar("P_STATE", 0) + End If + End If + + End Sub + + Private Sub CommandList_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs) + For Index = e.NewItems.Count - 1 To 0 Step -1 + ExecuteCommand(DirectCast(e.NewItems(Index), ThreadCommand)) + m_CommandList.Remove(e.NewItems(Index)) + Next + End Sub + + Private Sub ExecuteCommand(Command As ThreadCommand) + Select Case Command.CommandType + Case CommandTypes.CONNECT + Connect() + Case CommandTypes.DISCONNECT + Disconnect() + Case CommandTypes.START + Start() + Case CommandTypes.STOP_ + Stop + Case CommandTypes.RESET + Reset() + Case CommandTypes.SETPOINT + SetPoint() + Case CommandTypes.SENDPROG + SendProgram(Command.sVariable) + Case CommandTypes.REMOVEPROG + RemoveProgram(Command.nVariable, Command.sVariable) + Case CommandTypes.REMOVEALLPROG + RemoveAllProgram() + End Select + End Sub + + Public Sub Connect() + Try + m_Tpa = New TPAComm(Me) + m_bConnected = Tpa.remObject.OnConnect() + m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.OK, ResultTypes.EXECUTED, "") + m_Timer.Start() + ' creo classe di gestione variabili + Catch ex As Exception + m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.EXECUTED, "Errore: impossibile connettersi!") + Return + End Try + End Sub + + Public Sub Disconnect() + Dim bOk As Boolean = Tpa.remObject.OnClose() + m_bConnected = Not bOk + m_ResultCallbackDlg(CommandTypes.DISCONNECT, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + ' chiudo classe Tpa + Me.OnDispose() + m_Tpa.OnDispose() + End Sub + + Public Sub Start() + Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start)) + m_ResultCallbackDlg(CommandTypes.START, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + + Public Sub [Stop]() + Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.[Stop])) + m_ResultCallbackDlg(CommandTypes.STOP_, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + + Public Sub Reset() + Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.[End])) + bOk = Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.WriteVar), "0.FUNM.E80048", "0") + m_ResultCallbackDlg(CommandTypes.RESET, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + + Public Sub SetPoint() + Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.SetPoint)) + m_ResultCallbackDlg(CommandTypes.SETPOINT, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + + Public Sub SendProgram(ProgramPath As String) + Dim bOk As Boolean = (Tpa.opState = MachineOperatingState.Pending) + If bOk Then + ProgramPath = ProgramPath.Replace("\\", "\") + bOk = Tpa.remObject.AddProgramToList(ProgramPath) + bOk = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start_Program_Soft)) + End If + m_ResultCallbackDlg(CommandTypes.SENDPROG, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + + Public Sub RemoveProgram(ProgramIndex As Integer, ProgramPath As String) + Dim bOk As Boolean + Dim sError As String = "" + If ProgramIndex > 0 Then + bOk = Tpa.remObject.RemoveProgramFromListAtIndex(ProgramIndex) + ElseIf Not String.IsNullOrEmpty(ProgramPath) Then + bOk = Tpa.remObject.RemoveProgramFromList(ProgramPath) + Else + bOk = False + sError = "Errore: nessun parametro passato" + End If + m_ResultCallbackDlg(CommandTypes.REMOVEPROG, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, sError) + End Sub + + Public Sub RemoveAllProgram() + Dim bOk As Boolean = Tpa.remObject.RemoveAllProgramsFromList() + m_ResultCallbackDlg(CommandTypes.REMOVEALLPROG, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + +End Class diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb index deddb6ee..88ad4f92 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb @@ -1,11 +1,13 @@ -Imports ISOCNC.Remoting +Imports System.Collections.ObjectModel +Imports ISOCNC.Remoting + +Class CommunicationThread + -Public Class CommunicationThread ' variabile che ferma il ciclo Public Shared m_Stop As Boolean = False - ' variabile in cui ci sono stati inizio e fine pezzo Private Shared sP1VarName As String = "0.FUNM.E81295" Private Shared sP2VarName As String = "0.FUNM.E81296" @@ -17,86 +19,101 @@ Public Class CommunicationThread Private Shared m_nP3Var As Integer Private Shared m_nP4Var As PartState - ' stati pezzo - Private Enum PartState As Integer - NULL = 0 - START = 1 - END_ = 2 - End Enum + Public Shared Sub MachManagingThreadFunction(ResultCallbackDlg As ResultCallbackDlg, CloseCallbackDlg As CloseCallbackDlg, UpdateCallbackDlg As UpdateCallbackDlg, + AlarmCallbackDlg As AlarmCallbackDlg, AxisCoordinatesCallbackDlg As AxisCoordinatesCallbackDlg, + OpStateCallbackDlg As OpStateCallbackDlg) + ' inizializzo callback + m_ResultCallbackDlg = ResultCallbackDlg + m_CloseCallbackDlg = CloseCallbackDlg + m_UpdateCallbackDlg = UpdateCallbackDlg + m_AlarmCallbackDlg = AlarmCallbackDlg + m_AxisCoordinatesCallbackDlg = AxisCoordinatesCallbackDlg + m_OpStateCallbackDlg = OpStateCallbackDlg - Public Shared Sub MachManagingThreadFunction() - ' creao classe di gestione variabili - Dim m_RWVariableManager As RWVariableManager = New RWVariableManager - 'Dim bCancel As Boolean = False - 'callback(0, "Init", bCancel) - While Not m_Stop - ' leggo tutte le variabili - m_RWVariableManager.RefreshAllVars() + ' creo classe di comunicazione + Dim m_MachManaging As MachManaging = New MachManaging() - - 'CommVar(sP1VarName, m_nP1Var) - 'CommVar(sP2VarName, m_nP2Var) - 'CommVar(sP3VarName, m_nP3Var) - 'CommVar(sP4VarName, m_nP4Var) - Dim nResetVar As Integer - 'CommVar(sResetVarName, nResetVar) - ' se macchina pronta e non sta tagliando alcun pezzo - If nResetVar = 0 AndAlso - m_nP1Var = 0 AndAlso - m_nP2Var = 0 AndAlso - m_nP3Var = 0 AndAlso - m_nP4Var = PartState.NULL Then - ' verifico se c'e' un programma da lanciare - For Each MachGroup In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList - Dim MyMachGroup As MyMachGroupVM = DirectCast(MachGroup, MyMachGroupVM) - If MyMachGroup.bReadyForMachining Then - ' recupero Path file CN - Dim CNPath As String = MyMachGroup.CnFilePath().Replace("\\\\", "\\") - ' lo lancio - If (Map.refMachCommandMessagePanelVM.SelOPState = MachineOperatingState.Pending) Then - Dim bOk As Boolean = Map.refMachCommandMessagePanelVM.Tpa.remObject.AddProgramToList(CNPath) - Map.refMachCommandMessagePanelVM.Tpa.remObject.SetCommand(ISOCNC.Remoting.Commands.Start_Program_Soft) - End If - - End If - Next - ElseIf m_nP1Var <> 0 AndAlso - m_nP2Var <> 0 AndAlso - m_nP3Var <> 0 Then - If m_nP4Var = PartState.START Then - DbControllers.m_PartController.UpdateStart(m_nP1Var, m_nP2Var, m_nP3Var, DateTime.Now()) - Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = m_nP2Var) - MachGroup.MyMachGroupM.SetState(1) - MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) - Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = m_nP3Var) - Part.nState = 1 - Part.NotifyPropertyChanged(NameOf(Part.nState)) - If Not MachGroup.PartVMList.Any(Function(x) x.nState = 1) Then - DbControllers.m_MachGroupController.UpdateStart(m_nP1Var, m_nP2Var, DateTime.Now()) - MachGroup.MyMachGroupM.SetState(2) - MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) - End If - ElseIf m_nP4Var = PartState.END_ Then - DbControllers.m_PartController.UpdateEnd(m_nP1Var, m_nP2Var, m_nP3Var, DateTime.Now()) - Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = m_nP2Var) - Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = m_nP3Var) - Part.nState = 2 - Part.NotifyPropertyChanged(NameOf(Part.nState)) - If MachGroup.PartVMList.All(Function(x) x.nState >= 2) Then - DbControllers.m_MachGroupController.UpdateEnd(m_nP1Var, m_nP2Var, DateTime.Now()) - MachGroup.MyMachGroupM.SetState(2) - MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) - End If - ' azzero variabili - 'WriteVar(sP1VarName, 0) - 'WriteVar(sP2VarName, 0) - 'WriteVar(sP3VarName, 0) - 'WriteVar(sP4VarName, 0) - End If - End If - System.Threading.Thread.Sleep(1000) - End While End Sub End Class + +Class ThreadCommand + + Private m_CommandType As CommandTypes + Public ReadOnly Property CommandType As CommandTypes + Get + Return m_CommandType + End Get + End Property + + Private m_nVariables(5) As Integer + Public ReadOnly Property nVariable As Integer + Get + Return m_nVariables(0) + End Get + End Property + Public ReadOnly Property nVariables As Integer() + Get + Return m_nVariables + End Get + End Property + Private m_dVariables(5) As Double + Public ReadOnly Property dVariable As Double + Get + Return m_dVariables(0) + End Get + End Property + Public ReadOnly Property dVariables As Double() + Get + Return m_dVariables + End Get + End Property + Private m_sVariables(5) As String + Public ReadOnly Property sVariable As String + Get + Return m_sVariables(0) + End Get + End Property + Public ReadOnly Property sVariables As String() + Get + Return m_sVariables + End Get + End Property + + Protected Sub New() + End Sub + + Public Shared Function CreateCommand(CommandType As CommandTypes) As ThreadCommand + Dim NewCommand As ThreadCommand = New ThreadCommand + NewCommand.m_CommandType = CommandType + Return NewCommand + End Function + Public Shared Function CreateCommand(CommandType As CommandTypes, Variable As Integer) As ThreadCommand + Dim NewCommand As ThreadCommand = New ThreadCommand + NewCommand.m_CommandType = CommandType + NewCommand.m_nVariables(0) = Variable + Return NewCommand + End Function + Public Shared Function CreateCommand(CommandType As CommandTypes, Variable As Double) As ThreadCommand + Dim NewCommand As ThreadCommand = New ThreadCommand + NewCommand.m_CommandType = CommandType + NewCommand.m_dVariables(0) = Variable + Return NewCommand + End Function + Public Shared Function CreateCommand(CommandType As CommandTypes, Variable As String) As ThreadCommand + Dim NewCommand As ThreadCommand = New ThreadCommand + NewCommand.m_CommandType = CommandType + NewCommand.m_sVariables(0) = Variable + Return NewCommand + End Function + Public Shared Function CreateCommand(CommandType As CommandTypes, nVariables() As Integer, dVariables() As Double, sVariables() As String) As ThreadCommand + Dim NewCommand As ThreadCommand = New ThreadCommand + NewCommand.m_CommandType = CommandType + NewCommand.m_nVariables = nVariables + NewCommand.m_dVariables = dVariables + NewCommand.m_sVariables = sVariables + Return NewCommand + End Function + +End Class diff --git a/EgtBEAMWALL.Supervisor/Utility/Map.vb b/EgtBEAMWALL.Supervisor/Utility/Map.vb index 0c3f49aa..16f943ef 100644 --- a/EgtBEAMWALL.Supervisor/Utility/Map.vb +++ b/EgtBEAMWALL.Supervisor/Utility/Map.vb @@ -23,6 +23,7 @@ Module Map 'Private m_refSplitModeVM As SplitModeVM 'Private m_refMoveRawModeVM As MoveRawModeVM 'Private m_refSimulTabVM As SimulTabVM + Private m_refMachManaging As MachManaging #Region "Get" @@ -169,6 +170,12 @@ Module Map ' End Get 'End Property + Public ReadOnly Property refMachManaging As MachManaging + Get + Return m_refMachManaging + End Get + End Property + #End Region ' Get #Region "Set" @@ -288,6 +295,11 @@ Module Map ' Return Not IsNothing(m_refSimulTabVM) 'End Function + Friend Function SetRefMachManaging(MachManaging As MachManaging) As Boolean + m_refMachManaging = MachManaging + Return Not IsNothing(m_refMachManaging) + End Function + #End Region ' Set #Region "Init" From 152d57de16b3c8f33f20124d19cfb104226935d3 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Tue, 20 Apr 2021 20:13:25 +0200 Subject: [PATCH 2/5] Modifiche thread di comunicazione con CN --- EgtBEAMWALL.Supervisor/Comms/TPAComm.vb | 140 ++++++++++++++---- .../MachManagingThread/RWVariableManager.vb | 98 +++++++++++- 2 files changed, 206 insertions(+), 32 deletions(-) diff --git a/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb index 85c49c0b..6f242922 100644 --- a/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb +++ b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb @@ -7,11 +7,33 @@ Imports System.Security.Permissions Imports System.Text Imports System.Threading.Tasks Imports System.Windows +Imports ISOCNC.Remoting Class TPAComm + + ' creo classe di gestione variabili + Private m_RWVariableManager As RWVariableManager + Friend ReadOnly Property RWVariableManager As RWVariableManager + Get + Return m_RWVariableManager + End Get + End Property + + Private m_MachManaging As MachManaging + Friend ReadOnly Property MachManaging As MachManaging + Get + Return m_MachManaging + End Get + End Property + Private _axesVal As Double() = New Double(23) {} Private _cmdActive As Integer = 0 - Private _opState As ISOCNC.Remoting.MachineOperatingState = ISOCNC.Remoting.MachineOperatingState.Unspecified + Private m_opState As ISOCNC.Remoting.MachineOperatingState = ISOCNC.Remoting.MachineOperatingState.Unspecified + Public ReadOnly Property opState As ISOCNC.Remoting.MachineOperatingState + Get + Return m_opState + End Get + End Property Private _remObject As ISOCNC.Remoting_Server Public ReadOnly Property remObject As ISOCNC.Remoting_Server @@ -21,7 +43,12 @@ Class TPAComm End Property Private serverURI As String = "ipc://localhost:9090/IRemoteObject.rem" - Private eventProxy As ISOCNC.Remoting.EventProxyManager + Private m_eventProxy As ISOCNC.Remoting.EventProxyManager + Friend ReadOnly Property eventProxy As ISOCNC.Remoting.EventProxyManager + Get + Return m_eventProxy + End Get + End Property Private _rpc As Integer Private _prgCount As Integer Private _prgAtIndex As String @@ -32,8 +59,28 @@ Class TPAComm Private _message As String Private _errSystem As String + Private m_Proxy_CommandExecutedEventHandler As New CommandExecutedEventHandler(AddressOf RemoteObject_CommandExecuted) + Private m_Proxy_ServerErrorEventHandler As New ServerErrorEventHandler(AddressOf RemoteObject_ServerError) + Private m_Proxy_AxesCoordinatesUpdateEventHandler As New AxesCoordinatesUpdateEventHandler(AddressOf RemoteObject_AxisCoordinatesUpdate) + Private m_Proxy_OpStateUpdateEventHandler As New OpStateUpdateEventHandler(AddressOf RemoteObject_OpStateUpdate) + Private m_Proxy_AlarmNotificationEventHandler As New AlarmNotificationEventHandler(AddressOf RemoteObject_AlarmNotification) + Private m_Proxy_ListInfoEventHandler As New ListInfoEventHandler(AddressOf RemoteObject_ListInfoResponse) + Private m_Proxy_RPCUpdateEventHandler As New RPCUpdateEventHandler(AddressOf RemoteObject_RPCUpdate) + Private m_Proxy_VariableCommandExecutedEventHandler As New VariableCommandExecutedEventHandler(AddressOf RemoteObject_VariableCommandExecuted) + Private m_Proxy_TickUpdateEventHandler As New TickUpdateEventHandler(AddressOf RemoteObject_TickUpdate) + Private m_Rem_CommandExecutedEventHandler As New CommandExecutedEventHandler(AddressOf m_eventProxy.LocallyHandleCommandExecuted) + Private m_Rem_ServerErrorEventHandler As New ServerErrorEventHandler(AddressOf m_eventProxy.LocallyHandleServerError) + Private m_Rem_AxesCoordinatesUpdateEventHandler As New AxesCoordinatesUpdateEventHandler(AddressOf m_eventProxy.LocallyHandleAxisCoordinatesUpdate) + Private m_Rem_OpStateUpdateEventHandler As New OpStateUpdateEventHandler(AddressOf m_eventProxy.LocallyHandleOpStateUpdate) + Private m_Rem_AlarmNotificationEventHandler As New AlarmNotificationEventHandler(AddressOf m_eventProxy.LocallyHandleAlarmNotification) + Private m_Rem_ListInfoEventHandler As New ListInfoEventHandler(AddressOf m_eventProxy.LocallyHandleListInfo) + Private m_Rem_RPCUpdateEventHandler As New RPCUpdateEventHandler(AddressOf m_eventProxy.LocallyHandleRPCUpdate) + Private m_Rem_VariableCommandExecutedEventHandler As New VariableCommandExecutedEventHandler(AddressOf m_eventProxy.LocallyHandleVariableCommandExecuted) + + - Public Sub New() + Public Sub New(Machmanaging As MachManaging) + m_MachManaging = Machmanaging Dim properties As System.Collections.Hashtable = New System.Collections.Hashtable() properties("name") = "remotingClient" properties("priority") = "20" @@ -53,34 +100,57 @@ Class TPAComm Console.WriteLine("The type of the message sink is {0}.", messageSink.[GetType]().ToString()) End If - eventProxy = New ISOCNC.Remoting.EventProxyManager() - AddHandler eventProxy.CommandExecuted, New ISOCNC.Remoting.CommandExecutedEventHandler(AddressOf RemoteObject_CommandExecuted) - AddHandler eventProxy.ServerError, New ISOCNC.Remoting.ServerErrorEventHandler(AddressOf RemoteObject_ServerError) - AddHandler eventProxy.AxisCoordinatesUpdate, New ISOCNC.Remoting.AxesCoordinatesUpdateEventHandler(AddressOf RemoteObject_AxisCoordinatesUpdate) - AddHandler eventProxy.OpStateUpdate, New ISOCNC.Remoting.OpStateUpdateEventHandler(AddressOf RemoteObject_OpStateUpdate) - AddHandler eventProxy.AlarmNotification, New ISOCNC.Remoting.AlarmNotificationEventHandler(AddressOf RemoteObject_AlarmNotification) - AddHandler eventProxy.ListInfoResponse, New ISOCNC.Remoting.ListInfoEventHandler(AddressOf RemoteObject_ListInfoResponse) - AddHandler eventProxy.RPCUpdate, New ISOCNC.Remoting.RPCUpdateEventHandler(AddressOf RemoteObject_RPCUpdate) - AddHandler eventProxy.VariableCommandExecuted, New ISOCNC.Remoting.VariableCommandExecutedEventHandler(AddressOf RemoteObject_VariableCommandExecuted) - AddHandler eventProxy.TickUpdate, New ISOCNC.Remoting.TickUpdateEventHandler(AddressOf RemoteObject_TickUpdate) - _remObject = CType(Activator.GetObject(GetType(ISOCNC.Remoting_Server), serverURI), ISOCNC.Remoting_Server) + m_eventProxy = New ISOCNC.Remoting.EventProxyManager() + AddHandler m_eventProxy.CommandExecuted, m_Proxy_CommandExecutedEventHandler + AddHandler m_eventProxy.ServerError, m_Proxy_ServerErrorEventHandler + AddHandler m_eventProxy.AxisCoordinatesUpdate, m_Proxy_AxesCoordinatesUpdateEventHandler + AddHandler m_eventProxy.OpStateUpdate, m_Proxy_OpStateUpdateEventHandler + AddHandler m_eventProxy.AlarmNotification, m_Proxy_AlarmNotificationEventHandler + AddHandler m_eventProxy.ListInfoResponse, m_Proxy_ListInfoEventHandler + AddHandler m_eventProxy.RPCUpdate, m_Proxy_RPCUpdateEventHandler + AddHandler m_eventProxy.VariableCommandExecuted, m_Proxy_VariableCommandExecutedEventHandler + AddHandler m_eventProxy.TickUpdate, m_Proxy_TickUpdateEventHandler + _remObject = CType(Activator.GetObject(GetType(ISOCNC.Remoting_Server), serverURI), ISOCNC.Remoting_Server) Try - AddHandler _remObject.CommandExecuted, New ISOCNC.Remoting.CommandExecutedEventHandler(AddressOf eventProxy.LocallyHandleCommandExecuted) - AddHandler _remObject.ServerError, New ISOCNC.Remoting.ServerErrorEventHandler(AddressOf eventProxy.LocallyHandleServerError) - AddHandler _remObject.AxisCoordinatesUpdate, New ISOCNC.Remoting.AxesCoordinatesUpdateEventHandler(AddressOf eventProxy.LocallyHandleAxisCoordinatesUpdate) - AddHandler _remObject.OpStateUpdate, New ISOCNC.Remoting.OpStateUpdateEventHandler(AddressOf eventProxy.LocallyHandleOpStateUpdate) - AddHandler _remObject.AlarmNotification, New ISOCNC.Remoting.AlarmNotificationEventHandler(AddressOf eventProxy.LocallyHandleAlarmNotification) - AddHandler _remObject.ListInfoResponse, New ISOCNC.Remoting.ListInfoEventHandler(AddressOf eventProxy.LocallyHandleListInfo) - AddHandler _remObject.RPCUpdate, New ISOCNC.Remoting.RPCUpdateEventHandler(AddressOf eventProxy.LocallyHandleRPCUpdate) - AddHandler _remObject.VariableCommandExecuted, New ISOCNC.Remoting.VariableCommandExecutedEventHandler(AddressOf eventProxy.LocallyHandleVariableCommandExecuted) + AddHandler _remObject.CommandExecuted, m_Rem_CommandExecutedEventHandler + AddHandler _remObject.ServerError, m_Rem_ServerErrorEventHandler + AddHandler _remObject.AxisCoordinatesUpdate, m_Rem_AxesCoordinatesUpdateEventHandler + AddHandler _remObject.OpStateUpdate, m_Rem_OpStateUpdateEventHandler + AddHandler _remObject.AlarmNotification, m_Rem_AlarmNotificationEventHandler + AddHandler _remObject.ListInfoResponse, m_Rem_ListInfoEventHandler + AddHandler _remObject.RPCUpdate, m_Rem_RPCUpdateEventHandler + AddHandler _remObject.VariableCommandExecuted, m_Rem_VariableCommandExecutedEventHandler Catch ex As System.Runtime.Remoting.RemotingException Dim dR As MessageBoxResult = MessageBox.Show(ex.Message) End Try + ' creo classe che gestisce variabili + m_RWVariableManager = RWVariableManager.CreateRWVariableManager(Me) + End Sub + + Friend Sub OnDispose() + RemoveHandler _remObject.CommandExecuted, m_Rem_CommandExecutedEventHandler + RemoveHandler _remObject.ServerError, m_Rem_ServerErrorEventHandler + RemoveHandler _remObject.AxisCoordinatesUpdate, m_Rem_AxesCoordinatesUpdateEventHandler + RemoveHandler _remObject.OpStateUpdate, m_Rem_OpStateUpdateEventHandler + RemoveHandler _remObject.AlarmNotification, m_Rem_AlarmNotificationEventHandler + RemoveHandler _remObject.ListInfoResponse, m_Rem_ListInfoEventHandler + RemoveHandler _remObject.RPCUpdate, m_Rem_RPCUpdateEventHandler + RemoveHandler _remObject.VariableCommandExecuted, m_Rem_VariableCommandExecutedEventHandler + RemoveHandler m_eventProxy.CommandExecuted, m_Proxy_CommandExecutedEventHandler + RemoveHandler m_eventProxy.ServerError, m_Proxy_ServerErrorEventHandler + RemoveHandler m_eventProxy.AxisCoordinatesUpdate, m_Proxy_AxesCoordinatesUpdateEventHandler + RemoveHandler m_eventProxy.OpStateUpdate, m_Proxy_OpStateUpdateEventHandler + RemoveHandler m_eventProxy.AlarmNotification, m_Proxy_AlarmNotificationEventHandler + RemoveHandler m_eventProxy.ListInfoResponse, m_Proxy_ListInfoEventHandler + RemoveHandler m_eventProxy.RPCUpdate, m_Proxy_RPCUpdateEventHandler + RemoveHandler m_eventProxy.VariableCommandExecuted, m_Proxy_VariableCommandExecutedEventHandler + RemoveHandler m_eventProxy.TickUpdate, m_Proxy_TickUpdateEventHandler End Sub Private Sub RemoteObject_OpStateUpdate(ByVal newOpState As ISOCNC.Remoting.MachineOperatingState) - _opState = newOpState + m_OpStateCallbackDlg(newOpState) + m_opState = newOpState 'If _opState = ISOCNC.Remoting.MachineOperatingState.Pending Then remObject.RemoveAllProgramsFromList() End Sub @@ -88,26 +158,34 @@ Class TPAComm Select Case executedCommand Case CInt(ISOCNC.Remoting.Commands.NoCommand) Case CInt(ISOCNC.Remoting.Commands.[End]) + m_ResultCallbackDlg(CommandTypes.RESET, CommandStates.OK, ResultTypes.RESULT, "") Case CInt(ISOCNC.Remoting.Commands.[Error]) + m_ResultCallbackDlg(CommandTypes.ERROR_, CommandStates.ERROR_, ResultTypes.RESULT, "") Case CInt(ISOCNC.Remoting.Commands.MDI_End) Case CInt(ISOCNC.Remoting.Commands.MDI_Start) Case CInt(ISOCNC.Remoting.Commands.MDI_Stop) Case CInt(ISOCNC.Remoting.Commands.SetPoint) + m_ResultCallbackDlg(CommandTypes.SETPOINT, CommandStates.OK, ResultTypes.RESULT, "") Case CInt(ISOCNC.Remoting.Commands.Start) + m_ResultCallbackDlg(CommandTypes.START, CommandStates.OK, ResultTypes.RESULT, "") Case CInt(ISOCNC.Remoting.Commands.[Step]) + m_ResultCallbackDlg(CommandTypes.STEP_, CommandStates.OK, ResultTypes.RESULT, "") Case CInt(ISOCNC.Remoting.Commands.[Stop]) + m_ResultCallbackDlg(CommandTypes.STOP_, CommandStates.OK, ResultTypes.RESULT, "") Case CInt(ISOCNC.Remoting.Commands.Start_Program_Soft) + m_ResultCallbackDlg(CommandTypes.SOFTSTART, CommandStates.OK, ResultTypes.RESULT, "") Case Else End Select - _cmdActive = CInt(executedCommand) End Sub Private Sub RemoteObject_ServerError(ByVal sender As Object, ByVal seEA As ISOCNC.Remoting.ServerErrorEventArgs) + m_ResultCallbackDlg(CommandTypes.ERROR_, CommandStates.ERROR_, ResultTypes.RESULT, "Server Error: " & seEA.[Error]) Dim dr As MessageBoxResult = MessageBox.Show("Server Error: " & seEA.[Error]) End Sub Private Sub RemoteObject_AxisCoordinatesUpdate(ByVal axisValue As Double, ByVal axisIndex As Integer) + m_AxisCoordinatesCallbackDlg(axisValue, axisIndex) _axesVal(axisIndex) = axisValue Map.refMachCommandMessagePanelVM.AxisList(axisIndex).Value = axisValue Map.refMachCommandMessagePanelVM.AxisList(axisIndex).NotifyPropertyChanged("Value") @@ -133,6 +211,8 @@ Class TPAComm End Sub Private Sub RemoteObject_AlarmNotification(ByVal alarmOperation As Integer, ByVal alarmType As Integer, ByVal alarmMessage As String, ByVal alarmCode As String, ByVal alarmDateTime As String) + ' restituisco errore ad interfaccia + m_AlarmCallbackDlg(alarmOperation, alarmType, alarmMessage, alarmCode, alarmDateTime) Select Case alarmType Case CInt(ISOCNC.Remoting.AlarmType.Cycle) @@ -189,9 +269,19 @@ Class TPAComm Private Sub RemoteObject_VariableCommandExecuted(ByVal executedCommand As Integer, ByVal commandExecutedCorrectly As Boolean, ByVal varName As String, ByVal varValue As String, ByVal varType As Integer) ' riporto valore variabile su array - + Select Case executedCommand + Case VariableCommands.Error + Case VariableCommands.NotExecuted + Case VariableCommands.ReadVar + m_RWVariableManager.UpdateVar(commandExecutedCorrectly, varName, varValue, varType) + Case VariableCommands.WriteVar + m_ResultCallbackDlg(CommandTypes.WRITE, CommandStates.OK, ResultTypes.RESULT, "") + Case VariableCommands.ReadAxis + Case VariableCommands.ReadAny + End Select End Sub Private Sub RemoteObject_TickUpdate(ByVal newTick As ULong) End Sub + End Class diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb index ec5f2a63..1eb6a0c1 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb @@ -1,11 +1,44 @@ Imports EgtWPFLib5 +Imports ISOCNC.Remoting Public Class RWVariableManager + Private m_Tpa As TPAComm = Nothing + Friend ReadOnly Property Tpa As TPAComm + Get + Return m_Tpa + End Get + End Property + + Private m_Proxy_VariableCommandExecutedEventHandler As New VariableCommandExecutedEventHandler(AddressOf RemoteObject_VariableCommandExecuted) + + ' lock per Synclock + Private m_CopyLock As New Object + Private m_ReadPLock As New Object ' lista variabili in lettura Private m_ReadingVars() As CommVar ' lista variabili lette - Private m_ReadedVars() As String + Public Shared m_ReadedVars() As String + + Protected Sub New() + End Sub + + Friend Sub OnDispose() + RemoveHandler m_Tpa.eventProxy.VariableCommandExecuted, m_Proxy_VariableCommandExecutedEventHandler + 'RemoveHandler m_Tpa.MachManaging.Timer.Tick, AddressOf Timer_Tick + End Sub + + 'Friend Sub Timer_Tick(sender As Object, e As EventArgs) + ' ' leggo tutte le variabili + ' RefreshAllVars() + 'End Sub + + Friend Shared Function CreateRWVariableManager(Tpa As TPAComm) + Dim NewRWVariableManager As New RWVariableManager + NewRWVariableManager.m_Tpa = Tpa + AddHandler NewRWVariableManager.m_Tpa.eventProxy.VariableCommandExecuted, NewRWVariableManager.m_Proxy_VariableCommandExecutedEventHandler + Return NewRWVariableManager + End Function Public Sub RefreshAllVars() For Each Var In m_ReadingVars @@ -27,11 +60,11 @@ Public Class RWVariableManager End Sub Private Sub IntRefreshVar(Address As String) - Map.refMachCommandMessagePanelVM.Tpa.remObject.SetVariableCommand(ISOCNC.Remoting.VariableCommands.ReadVar, Address, "") + Tpa.remObject.SetVariableCommand(ISOCNC.Remoting.VariableCommands.ReadVar, Address, "") End Sub Private Sub IntWriteVar(Address As String, Value As String) - Map.refMachCommandMessagePanelVM.Tpa.remObject.SetVariableCommand(ISOCNC.Remoting.VariableCommands.WriteVar, Address, Value) + Tpa.remObject.SetVariableCommand(ISOCNC.Remoting.VariableCommands.WriteVar, Address, Value) End Sub Public Sub ReadVar(Name As String, ByRef Value As String) @@ -48,8 +81,57 @@ Public Class RWVariableManager Return Array.IndexOf(m_ReadingVars, Function(x) x.sName = Name) End Function Private Function GetReadVarFromName(Name As String) As CommVar - Return m_ReadingVars(Array.IndexOf(m_ReadingVars, Function(x) x.sName = Name)) + Return m_ReadingVars(GetIndexFromName(Name)) End Function + Private Function GetIndexFromAddress(Address As String) As Integer + Return Array.IndexOf(m_ReadingVars, Function(x) x.sAddress = Address) + End Function + Private Function GetReadVarFromAddress(Address As String) As CommVar + Return m_ReadingVars(GetIndexFromAddress(Address)) + End Function + + Private Sub UpdateGroup() + Dim bReaded As Boolean = True + For Each Var In m_ReadingVars + If Not Var.bReaded Then + bReaded = False + Exit For + End If + Next + ' se lette tutte + If bReaded Then + ' aggiorno variabili + SyncLock m_CopyLock + For VarIndex = 0 To m_ReadingVars.Count - 1 + m_ReadedVars(VarIndex) = m_ReadingVars(VarIndex).sValue + Next + End SyncLock + End If + End Sub + + Friend Sub UpdateVar(CommandExecutedCorrectly As Boolean, VarName As String, VarValue As String, VarType As Integer) + If CommandExecutedCorrectly Then + Dim Var As CommVar = GetReadVarFromAddress(VarName) + If Not IsNothing(Var) Then + Var.SetValue(VarValue) + UpdateGroup() + End If + End If + End Sub + + Private Sub RemoteObject_VariableCommandExecuted(ByVal executedCommand As Integer, ByVal commandExecutedCorrectly As Boolean, ByVal varName As String, ByVal varValue As String, ByVal varType As Integer) + ' riporto valore variabile su array + Select Case executedCommand + Case VariableCommands.Error + Case VariableCommands.NotExecuted + Case VariableCommands.ReadVar + UpdateVar(commandExecutedCorrectly, varName, varValue, varType) + Case VariableCommands.WriteVar + m_ResultCallbackDlg(CommandTypes.WRITE, CommandStates.OK, ResultTypes.RESULT, "") + Case VariableCommands.ReadAxis + Case VariableCommands.ReadAny + End Select + End Sub End Class @@ -81,6 +163,7 @@ Public Class CommVar End Property Public Sub SetValue(Value As String) m_sValue = Value + m_bReaded = True End Sub Private m_bReaded As Boolean @@ -89,9 +172,6 @@ Public Class CommVar Return m_bReaded End Get End Property - Public Sub SetReaded(Readed As Boolean) - m_bReaded = Readed - End Sub Sub New(Name As String, Address As String, Type As Integer) m_sName = Name @@ -99,4 +179,8 @@ Public Class CommVar m_nType = Type End Sub + Friend Sub ResetReading() + m_bReaded = False + End Sub + End Class From af17747b38ca80a50c3e95e9a8279622002b425d Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Wed, 21 Apr 2021 20:02:07 +0200 Subject: [PATCH 3/5] Modifiche comunicazione --- EgtBEAMWALL.Supervisor/Comms/TPAComm.vb | 5 +- .../MachCommandMessagePanelVM.vb | 388 ++++++++++++------ .../MachManagingThread/MachCommConst.vb | 5 +- .../MachManagingThread/MachManaging.vb | 21 +- .../MachManagingThread/MachManagingThread.vb | 13 +- .../MachManagingThread/RWVariableManager.vb | 54 ++- .../Utility/DbControllers.vb | 1 + 7 files changed, 331 insertions(+), 156 deletions(-) diff --git a/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb index 6f242922..13724359 100644 --- a/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb +++ b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb @@ -149,9 +149,8 @@ Class TPAComm End Sub Private Sub RemoteObject_OpStateUpdate(ByVal newOpState As ISOCNC.Remoting.MachineOperatingState) - m_OpStateCallbackDlg(newOpState) m_opState = newOpState - 'If _opState = ISOCNC.Remoting.MachineOperatingState.Pending Then remObject.RemoveAllProgramsFromList() + m_OpStateCallbackDlg(newOpState) End Sub Private Sub RemoteObject_CommandExecuted(ByVal executedCommand As Integer) @@ -187,7 +186,7 @@ Class TPAComm Private Sub RemoteObject_AxisCoordinatesUpdate(ByVal axisValue As Double, ByVal axisIndex As Integer) m_AxisCoordinatesCallbackDlg(axisValue, axisIndex) _axesVal(axisIndex) = axisValue - Map.refMachCommandMessagePanelVM.AxisList(axisIndex).Value = axisValue + Map.refMachCommandMessagePanelVM.AxisList(axisIndex).sValue = axisValue Map.refMachCommandMessagePanelVM.AxisList(axisIndex).NotifyPropertyChanged("Value") End Sub diff --git a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb index 6af1af8d..7e575d62 100644 --- a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb @@ -10,10 +10,13 @@ Imports System.Windows Imports ISOCNC.Remoting Imports EgtUILib Imports System.Threading +Imports System.Windows.Threading Class MachCommandMessagePanelVM Inherits VMBase + Private m_AlarmTimer As DispatcherTimer + Private _Connected As Boolean = False Public ReadOnly Property Connected As Boolean Get @@ -73,87 +76,76 @@ Class MachCommandMessagePanelVM NotifyPropertyChanged(NameOf(VarValue)) End Sub - Private _AxisList As ObservableCollection(Of Axis) + Private m_AxisList As ObservableCollection(Of Axis) Public ReadOnly Property AxisList As ObservableCollection(Of Axis) Get - Return _AxisList + Return m_AxisList End Get End Property - Private _OPStateList As List(Of ISOCNC.Remoting.MachineOperatingState) + Private m_OPState As MachineOperatingState - Public Property OPStateList As List(Of ISOCNC.Remoting.MachineOperatingState) + Public ReadOnly Property OPState As MachineOperatingState Get - Return _OPStateList + Return m_OPState End Get - Set(ByVal value As List(Of ISOCNC.Remoting.MachineOperatingState)) - _OPStateList = value - End Set End Property - Private _SelOPState As ISOCNC.Remoting.MachineOperatingState - - Public Property SelOPState As ISOCNC.Remoting.MachineOperatingState + Public ReadOnly Property sOPState As String Get - Return _SelOPState + Select Case m_OPState + Case MachineOperatingState.Start + Return "START" + Case MachineOperatingState.Stop + Return "STOP" + Case MachineOperatingState.End + Return "RESET" + Case MachineOperatingState.SetPoint + Return "SETPOINT" + Case MachineOperatingState.Pending + Return "PENDING" + Case Else + Return "" + End Select End Get - Set(ByVal value As ISOCNC.Remoting.MachineOperatingState) - _SelOPState = value - End Set End Property - Private _ErrCycle As String - - Public ReadOnly Property ErrCycle As String + Private m_ErrCycle As New List(Of Alarm) + Private m_ErrCycleCount As Integer = 0 + Public ReadOnly Property sErrCycle As String Get - Return _ErrCycle + Dim ShownErr As Alarm = m_ErrCycle(0) + Return ShownErr.sCode & ": " & ShownErr.sMessage End Get End Property - Public Sub UpdateErrCycle(ByVal msg As String) - _ErrCycle = msg - NotifyPropertyChanged(NameOf(ErrCycle)) - End Sub - - Private _Iso As String - - Public ReadOnly Property Iso As String + Private m_Iso As New List(Of Alarm) + Private m_IsoCount As Integer = 0 + Public ReadOnly Property sIso As String Get - Return _Iso + Dim ShownErr As Alarm = m_Iso(0) + Return ShownErr.sCode & ": " & ShownErr.sMessage End Get End Property - Public Sub UpdateIso(ByVal msg As String) - _Iso = msg - NotifyPropertyChanged(NameOf(Iso)) - End Sub - - Private _Message As String - - Public ReadOnly Property Message As String + Private m_Message As New List(Of Alarm) + Private m_MessageCount As Integer = 0 + Public ReadOnly Property sMessage As String Get - Return _Message + Return m_Message End Get End Property - Public Sub UpdateMessage(ByVal msg As String) - _Message = msg - NotifyPropertyChanged(NameOf(Message)) - End Sub - Private _ErrSystem As String - - Public ReadOnly Property ErrSystem As String + Private m_ErrSystem As New List(Of Alarm) + Private m_ErrSystemCount As Integer = 0 + Public ReadOnly Property sErrSystem As String Get - Return _ErrSystem + Return m_ErrSystem End Get End Property - Public Sub UpdateErrSystem(ByVal msg As String) - _ErrSystem = msg - NotifyPropertyChanged(NameOf(ErrSystem)) - End Sub Private m_cmdConnect As ICommand Private m_cmdDisconnect As ICommand @@ -170,21 +162,15 @@ Class MachCommandMessagePanelVM Public Sub New() Map.SetRefMachCommandMessagePanelVM(Me) - _AxisList = New ObservableCollection(Of Axis) From { - New Axis("X"), - New Axis("Y"), - New Axis("Z"), - New Axis("C"), - New Axis("B") - } - _OPStateList = New List(Of MachineOperatingState) From { - MachineOperatingState.Start, - MachineOperatingState.[Stop], - MachineOperatingState.[End], - MachineOperatingState.SetPoint, - MachineOperatingState.Pending, - MachineOperatingState.Unspecified - } + ' impostazioni timer degli allarmi + m_AlarmTimer.Interval = New TimeSpan(1500) + AddHandler m_AlarmTimer.Tick, AddressOf AlarmTimer_Tick + ' impostazione assi (leggerli da conf macchina) + m_AxisList = New ObservableCollection(Of Axis)({New Axis("X"), + New Axis("Y"), + New Axis("Z"), + New Axis("C"), + New Axis("B")}) NotifyPropertyChanged(NameOf(Connect_Background)) End Sub @@ -195,39 +181,69 @@ Class MachCommandMessagePanelVM End Get End Property + Private Sub AlarmTimer_Tick() + If m_ErrCycle.Count = 0 AndAlso m_Iso.Count = 0 AndAlso m_Message.Count = 0 AndAlso m_ErrSystem.Count = 0 Then + NotifyPropertyChanged(NameOf(sErrCycle)) + NotifyPropertyChanged(NameOf(sIso)) + NotifyPropertyChanged(NameOf(sMessage)) + NotifyPropertyChanged(NameOf(sErrSystem)) + Return + End If + If m_ErrCycle.Count > 0 Then + If m_ErrCycleCount < m_ErrCycle.Count Then + m_ErrCycleCount += 1 + Else + m_ErrCycleCount = 0 + End If + End If + NotifyPropertyChanged(NameOf(sErrCycle)) + If m_Iso.Count > 0 Then + If m_IsoCount < m_Iso.Count Then + m_IsoCount += 1 + Else + m_IsoCount = 0 + End If + End If + NotifyPropertyChanged(NameOf(sIso)) + If m_Message.Count > 0 Then + If m_MessageCount < m_Message.Count Then + m_MessageCount += 1 + Else + m_MessageCount = 0 + End If + End If + NotifyPropertyChanged(NameOf(sMessage)) + If m_ErrSystem.Count > 0 Then + If m_ErrSystemCount < m_ErrSystem.Count Then + m_ErrSystemCount += 1 + Else + m_ErrSystemCount = 0 + End If + End If + NotifyPropertyChanged(NameOf(sErrSystem)) + End Sub + Public Sub Connect(ByVal param As Object) + Map.refProjectVM.StartMachManagingThread() MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.CONNECT)) ' avvio thread di gestione della macchina - Map.refProjectVM.StartMachManagingThread() NotifyPropertyChanged(NameOf(Connect_Background)) If _Connected Then Init() End Sub Private Sub Init() - _SelOPState = CType(Tpa.remObject.MachineOperativeStatus, MachineOperatingState) - NotifyPropertyChanged(NameOf(SelOPState)) - Dim sAxesValue As String = "" - Dim dAxesValue As Double = 0 - Dim sAxesName As String = "0.TESTA.AsseX.X" - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.ReadVar), sAxesName, sAxesValue) - Double.TryParse(sAxesValue, dAxesValue) - _AxisList(0).Value = dAxesValue - sAxesName = "0.TESTA.AsseY.Y" - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.ReadVar), sAxesName, sAxesValue) - Double.TryParse(sAxesValue, dAxesValue) - _AxisList(1).Value = dAxesValue - sAxesName = "0.TESTA.AsseZ.Z" - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.ReadVar), sAxesName, sAxesValue) - Double.TryParse(sAxesValue, dAxesValue) - _AxisList(2).Value = dAxesValue - sAxesName = "0.TESTA.AsseC.C" - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.ReadVar), sAxesName, sAxesValue) - Double.TryParse(sAxesValue, dAxesValue) - _AxisList(3).Value = dAxesValue - sAxesName = "0.TESTA.AsseB.B" - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.ReadVar), sAxesName, sAxesValue) - Double.TryParse(sAxesValue, dAxesValue) - _AxisList(4).Value = dAxesValue + ' inizializzo tutte le variabili + RWVariableManager.InitVar("AsseX", "0.TESTA.AsseX.X", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar("AsseY", "0.TESTA.AsseY.Y", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar("AsseZ", "0.TESTA.AsseZ.Z", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar("AsseZ", "0.TESTA.AsseC.C", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar("AsseZ", "0.TESTA.AsseB.B", CommVar.CommVarTypes.ONETIME) + ' inizializzo valori assi leggendoli da variabili + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseX")) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseY")) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseZ")) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseC")) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseB")) End Sub Public ReadOnly Property Disconnect_Command As ICommand @@ -238,8 +254,7 @@ Class MachCommandMessagePanelVM End Property Public Sub Disconnect(ByVal param As Object) - _Connected = Not Tpa.remObject.OnClose() - NotifyPropertyChanged(NameOf(Connect_Background)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.DISCONNECT)) End Sub Public ReadOnly Property Start_Command As ICommand @@ -250,9 +265,7 @@ Class MachCommandMessagePanelVM End Property Public Sub Start(ByVal param As Object) - Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start)) - System.Threading.Thread.Sleep(2000) - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.WriteVar), "0.FUNM.E80048", "0") + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.START)) End Sub Public ReadOnly Property Stop_Command As ICommand @@ -263,7 +276,7 @@ Class MachCommandMessagePanelVM End Property Public Sub [Stop](ByVal param As Object) - Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.[Stop])) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.STOP_)) End Sub Public ReadOnly Property Step_Command As ICommand @@ -274,8 +287,7 @@ Class MachCommandMessagePanelVM End Property Public Sub [Step](ByVal param As Object) - Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.[End])) - Tpa.remObject.RemoveAllProgramsFromList() + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.STEP_)) End Sub Public ReadOnly Property SetPoint_Command As ICommand @@ -286,7 +298,7 @@ Class MachCommandMessagePanelVM End Property Public Sub SetPoint(ByVal param As Object) - Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.SetPoint)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.SETPOINT)) End Sub Public ReadOnly Property SearchFilePath_Command As ICommand @@ -310,11 +322,7 @@ Class MachCommandMessagePanelVM End Property Public Sub AddProgram(ByVal param As Object) - If SelOPState = MachineOperatingState.Pending Then - Dim Path As String = _ProgramPath.Replace("\\", "\") - Dim x As Boolean = Tpa.remObject.AddProgramToList(Path) - Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start_Program_Soft)) - End If + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.SENDPROG)) End Sub Public ReadOnly Property RemoveProgram_Command As ICommand @@ -325,13 +333,7 @@ Class MachCommandMessagePanelVM End Property Public Sub RemoveProgram(ByVal param As Object) - If (Keyboard.Modifiers And ModifierKeys.Shift) = ModifierKeys.Shift Then - Tpa.remObject.RemoveAllProgramsFromList() - ElseIf _ProgramIndex < 0 Then - Tpa.remObject.RemoveProgramFromList(_ProgramPath) - Else - Tpa.remObject.RemoveProgramFromListAtIndex(_ProgramIndex) - End If + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.REMOVEPROG)) End Sub Public ReadOnly Property ReadVar_Command As ICommand @@ -342,7 +344,7 @@ Class MachCommandMessagePanelVM End Property Public Sub ReadVar(ByVal param As Object) - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.ReadVar), _VarName, _VarValue) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ)) End Sub Public ReadOnly Property WriteVar_Command As ICommand @@ -353,7 +355,7 @@ Class MachCommandMessagePanelVM End Property Public Sub WriteVar(ByVal param As Object) - Tpa.remObject.SetVariableCommand(CInt(ISOCNC.Remoting.VariableCommands.WriteVar), _VarName, _VarValue) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.WRITE)) End Sub Public ReadOnly Property DeleteAlarms_Command As ICommand @@ -364,36 +366,164 @@ Class MachCommandMessagePanelVM End Property Public Sub DeleteAlarms(ByVal param As Object) - Tpa.remObject.DeleteAlarms(CInt(ISOCNC.Remoting.AlarmType.ISO)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.DELETEALARMS)) End Sub + +#Region "CALLBACKS" + + Friend Sub ResultCallbackDlg(CommandType As CommandTypes, CommandState As CommandStates, ResultType As ResultTypes, Params As String) + ' DbControllers.m_LogMachineController.Create(m_SupervisorId,DateTime.Now(),nothing,Nothing,Nothing,) + End Sub + Friend Sub CloseCallbackDlg(ByRef bCancel As Boolean) + ' serve? + End Sub + Friend Sub UpdateCallbackDlg(Param As String, Params As String) + + End Sub + Friend Sub AlarmCallbackDlg(ByVal AlarmOperation As Integer, ByVal AlarmType As Integer, ByVal AlarmMessage As String, ByVal AlarmCode As String, ByVal AlarmDateTime As String) + Select Case AlarmType + Case CInt(ISOCNC.Remoting.AlarmType.Cycle) + If AlarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then + m_ErrCycle.Add(Alarm.CreateAlarm(AlarmCode, AlarmMessage)) + Else + Dim ToRemove As Alarm = m_ErrCycle.FirstOrDefault(Function(x) x.sCode = AlarmCode) + If Not IsNothing(ToRemove) Then + m_ErrCycle.Remove(ToRemove) + End If + End If + Case CInt(ISOCNC.Remoting.AlarmType.ISO) + If AlarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then + m_Iso.Add(Alarm.CreateAlarm(AlarmCode, AlarmMessage)) + Else + Dim ToRemove As Alarm = m_Iso.FirstOrDefault(Function(x) x.sCode = AlarmCode) + If Not IsNothing(ToRemove) Then + m_Iso.Remove(ToRemove) + End If + End If + Case CInt(ISOCNC.Remoting.AlarmType.Message) + If AlarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then + m_Message.Add(Alarm.CreateAlarm(AlarmCode, AlarmMessage)) + Else + Dim ToRemove As Alarm = m_Message.FirstOrDefault(Function(x) x.sCode = AlarmCode) + If Not IsNothing(ToRemove) Then + m_Message.Remove(ToRemove) + End If + End If + Case CInt(ISOCNC.Remoting.AlarmType.None) + Case CInt(ISOCNC.Remoting.AlarmType.System) + If AlarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then + m_ErrSystem.Add(Alarm.CreateAlarm(AlarmCode, AlarmMessage)) + Else + Dim ToRemove As Alarm = m_ErrSystem.FirstOrDefault(Function(x) x.sCode = AlarmCode) + If Not IsNothing(ToRemove) Then + m_ErrSystem.Remove(ToRemove) + End If + End If + Case Else + End Select + ' se non ci sono errori + If m_ErrCycle.Count = 0 AndAlso m_Iso.Count = 0 AndAlso m_Message.Count = 0 AndAlso m_ErrSystem.Count = 0 Then + ' fermo timer degli allarmi + m_AlarmTimer.Stop() + Else + ' altrimenti lo avvio + m_AlarmTimer.Start() + End If + ' DbControllers.m_LogMachineController.Create(m_SupervisorId,DateTime.Now(),nothing,Nothing,Nothing,) + End Sub + + Friend Sub AxisCoordinatesCallbackDlg(AxisValue As Double, AxisIndex As Integer) + m_AxisList(AxisIndex).SetValue(AxisValue) + End Sub + + Friend Sub OpStateCallbackDlg(newOpState As MachineOperatingState) + m_OPState = newOpState + NotifyPropertyChanged(NameOf(sOPState)) + ' DbControllers.m_LogMachineController.Create(m_SupervisorId,DateTime.Now(),nothing,Nothing,Nothing,) + End Sub + + Friend Sub ReadVarCallbackDlg(CommandExecutedCorrectly As Boolean, VarAddress As String, VarValue As String, VarType As Integer) + Dim VarName As String = RWVariableManager.GetReadVarNameFromAddress(VarAddress) + If Not String.IsNullOrEmpty(VarName) Then + Select Case VarName + Case "AsseX", "AsseY", "AsseZ", "AsseC", "AsseB" + SetAxisValue(VarName, VarValue) + End Select + End If + ' DbControllers.m_LogMachineController.Create(m_SupervisorId,DateTime.Now(),nothing,Nothing,Nothing,) + End Sub + + Private Sub SetAxisValue(VarName As String, VarValue As String) + Dim Axis As Axis = m_AxisList.FirstOrDefault(Function(x) x.sName = VarName) + If Not IsNothing(Axis) Then + Axis.SetValue(VarValue) + End If + End Sub + +#End Region ' CALLBACKS + End Class Class Axis Inherits VMBase - Private _Name As String - - Public Property Name As String + Private m_Name As String + Public ReadOnly Property sName As String Get - Return _Name + Return m_Name End Get - Set(ByVal value As String) - _Name = value - End Set End Property - Private _Value As Double - - Public Property Value As Double + Private m_Value As Double + Public ReadOnly Property sValue As Double Get - Return _Value + Return m_Value End Get - Set(ByVal value As Double) - _Value = value - End Set End Property - Public Sub New(ByVal Name As String) - _Name = Name + Private m_Address As Double + Public ReadOnly Property sAddress As Double + Get + Return m_Address + End Get + End Property + + Friend Sub SetValue(value As Double) + m_Value = value + NotifyPropertyChanged(NameOf(sValue)) End Sub + + Public Sub New(Name As String, Address As String) + m_Name = Name + m_Address = Address + End Sub + End Class + +Class Alarm + + Private m_sCode As String + Public ReadOnly Property sCode As String + Get + Return m_sCode + End Get + End Property + + Private m_sMessage As String + Public ReadOnly Property sMessage As String + Get + Return m_sMessage + End Get + End Property + + Protected Sub New() + End Sub + + Public Shared Function CreateAlarm(Code As String, Message As String) As Alarm + Dim NewAlarm As New Alarm + NewAlarm.m_sCode = Code + NewAlarm.m_sMessage = Message + Return NewAlarm + End Function + +End Class \ No newline at end of file diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb index b23e788b..c33240d9 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb @@ -27,6 +27,7 @@ REMOVEALLPROG = 11 READ = 12 WRITE = 13 + DELETEALARMS = 14 End Enum Public Enum CommandStates As Integer @@ -35,7 +36,7 @@ End Enum ' stati pezzo - Private Enum PartState As Integer + Public Enum PartState As Integer NULL = 0 START = 1 END_ = 2 @@ -47,6 +48,7 @@ Public Delegate Sub AlarmCallbackDlg(ByVal AlarmOperation As Integer, ByVal AlarmType As Integer, ByVal AlarmMessage As String, ByVal AlarmCode As String, ByVal AlarmDateTime As String) Public Delegate Sub AxisCoordinatesCallbackDlg(ByVal AxisValue As Double, ByVal AxisIndex As Integer) Public Delegate Sub OpStateCallbackDlg(ByVal newOpState As ISOCNC.Remoting.MachineOperatingState) + Public Delegate Sub ReadVarCallbackDlg(CommandExecutedCorrectly As Boolean, VarAddress As String, VarValue As String, VarType As Integer) Friend m_ResultCallbackDlg As ResultCallbackDlg Friend m_CloseCallbackDlg As CloseCallbackDlg @@ -54,5 +56,6 @@ Friend m_AlarmCallbackDlg As AlarmCallbackDlg Friend m_AxisCoordinatesCallbackDlg As AxisCoordinatesCallbackDlg Friend m_OpStateCallbackDlg As OpStateCallbackDlg + Friend m_ReadVarCallbackDlg As ReadVarCallbackDlg End Module diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb index 15c015b4..59b190d6 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb @@ -58,6 +58,7 @@ Class MachManaging Tpa.RWVariableManager.ReadVar("P_STATE", P_State) ' se macchina pronta e non sta tagliando alcun pezzo If nResetVar = 0 AndAlso + Tpa.opState = MachineOperatingState.Pending AndAlso P_Prod = 0 AndAlso P_Machgroup = 0 AndAlso P_Part = 0 AndAlso @@ -69,9 +70,9 @@ Class MachManaging ' recupero Path file CN Dim CNPath As String = MyMachGroup.CnFilePath().Replace("\\\\", "\\") ' lo lancio - If (Map.refMachCommandMessagePanelVM.SelOPState = MachineOperatingState.Pending) Then - Dim bOk As Boolean = Map.refMachCommandMessagePanelVM.Tpa.remObject.AddProgramToList(CNPath) - Map.refMachCommandMessagePanelVM.Tpa.remObject.SetCommand(ISOCNC.Remoting.Commands.Start_Program_Soft) + If (Map.refMachCommandMessagePanelVM.OPState = MachineOperatingState.Pending) Then + Dim bOk As Boolean = Tpa.remObject.AddProgramToList(CNPath) + Tpa.remObject.SetCommand(ISOCNC.Remoting.Commands.Start_Program_Soft) End If End If @@ -140,6 +141,12 @@ Class MachManaging RemoveProgram(Command.nVariable, Command.sVariable) Case CommandTypes.REMOVEALLPROG RemoveAllProgram() + Case CommandTypes.READ + Tpa.RWVariableManager.RefreshVar(Command.sVariable) + Case CommandTypes.WRITE + Tpa.RWVariableManager.WriteVar(Command.sVariable, Command.sVariable(1)) + Case CommandTypes.DELETEALARMS + DeleteAlarms() End Select End Sub @@ -215,4 +222,12 @@ Class MachManaging m_ResultCallbackDlg(CommandTypes.REMOVEALLPROG, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") End Sub + Public Sub DeleteAlarms() + Dim bOk As Boolean = Tpa.remObject.DeleteAlarms(CInt(AlarmType.ISO)) + bOk = Tpa.remObject.DeleteAlarms(CInt(AlarmType.Message)) + bOk = Tpa.remObject.DeleteAlarms(CInt(AlarmType.Cycle)) + bOk = Tpa.remObject.DeleteAlarms(CInt(AlarmType.System)) + m_ResultCallbackDlg(CommandTypes.DELETEALARMS, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") + End Sub + End Class diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb index 88ad4f92..4aee9d1b 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb @@ -14,14 +14,10 @@ Class CommunicationThread Private Shared sP3VarName As String = "0.FUNM.E81297" Private Shared sP4VarName As String = "0.FUNM.E81298" Private Shared sResetVarName As String = "0.FUNM.E80048" - Private Shared m_nP1Var As Integer - Private Shared m_nP2Var As Integer - Private Shared m_nP3Var As Integer - Private Shared m_nP4Var As PartState Public Shared Sub MachManagingThreadFunction(ResultCallbackDlg As ResultCallbackDlg, CloseCallbackDlg As CloseCallbackDlg, UpdateCallbackDlg As UpdateCallbackDlg, AlarmCallbackDlg As AlarmCallbackDlg, AxisCoordinatesCallbackDlg As AxisCoordinatesCallbackDlg, - OpStateCallbackDlg As OpStateCallbackDlg) + OpStateCallbackDlg As OpStateCallbackDlg, ReadVarCallbackDlg As ReadVarCallbackDlg) ' inizializzo callback m_ResultCallbackDlg = ResultCallbackDlg m_CloseCallbackDlg = CloseCallbackDlg @@ -29,6 +25,7 @@ Class CommunicationThread m_AlarmCallbackDlg = AlarmCallbackDlg m_AxisCoordinatesCallbackDlg = AxisCoordinatesCallbackDlg m_OpStateCallbackDlg = OpStateCallbackDlg + m_ReadVarCallbackDlg = ReadVarCallbackDlg ' creo classe di comunicazione Dim m_MachManaging As MachManaging = New MachManaging() @@ -115,5 +112,11 @@ Class ThreadCommand NewCommand.m_sVariables = sVariables Return NewCommand End Function + Public Shared Function CreateReadCommand(sVariable As String) As ThreadCommand + Dim NewCommand As ThreadCommand = New ThreadCommand + NewCommand.m_CommandType = CommandTypes.READ + NewCommand.m_sVariables(0) = sVariable + Return NewCommand + End Function End Class diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb index 1eb6a0c1..1af58288 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb @@ -14,9 +14,15 @@ Public Class RWVariableManager ' lock per Synclock Private m_CopyLock As New Object - Private m_ReadPLock As New Object + Private m_ReadLock As New Object ' lista variabili in lettura - Private m_ReadingVars() As CommVar + Private Shared m_ReadingVars() As CommVar + Public Shared ReadOnly Property ReadingVars As CommVar() + Get + Return m_ReadingVars + End Get + End Property + ' lista variabili lette Public Shared m_ReadedVars() As String @@ -42,17 +48,21 @@ Public Class RWVariableManager Public Sub RefreshAllVars() For Each Var In m_ReadingVars - IntRefreshVar(Var.sAddress) + ' rileggo solo variabili continue + If Var.sType = CommVar.CommVarTypes.CONTINUOUS Then IntRefreshVar(Var.sAddress) Next End Sub - Public Sub InitVar(Name As String, Address As String, Type As Integer) + Public Shared Function InitVar(Name As String, Address As String, Type As CommVar.CommVarTypes) As Integer Dim Index As Integer = Array.IndexOf(m_ReadingVars, Function(x) IsNothing(x)) m_ReadingVars(Index) = New CommVar(Name, Address, Type) - End Sub + Return Index + End Function Public Sub RefreshVar(Name As String) - IntRefreshVar(GetReadVarFromName(Name).sAddress) + Dim Var As CommVar = GetReadVarFromName(Name) + Var.ResetReading() + IntRefreshVar(Var.sAddress) End Sub Public Sub WriteVar(Name As String, Value As String) @@ -77,20 +87,24 @@ Public Class RWVariableManager Value = StringToDouble(m_ReadedVars(GetIndexFromName(Name)), 5) End Sub - Private Function GetIndexFromName(Name As String) As Integer + Private Shared Function GetIndexFromName(Name As String) As Integer Return Array.IndexOf(m_ReadingVars, Function(x) x.sName = Name) End Function - Private Function GetReadVarFromName(Name As String) As CommVar + Friend Shared Function GetReadVarFromName(Name As String) As CommVar Return m_ReadingVars(GetIndexFromName(Name)) End Function - Private Function GetIndexFromAddress(Address As String) As Integer + Private Shared Function GetIndexFromAddress(Address As String) As Integer Return Array.IndexOf(m_ReadingVars, Function(x) x.sAddress = Address) End Function - Private Function GetReadVarFromAddress(Address As String) As CommVar + Friend Shared Function GetReadVarFromAddress(Address As String) As CommVar Return m_ReadingVars(GetIndexFromAddress(Address)) End Function + Friend Shared Function GetReadVarNameFromAddress(Address As String) As String + Dim Var As CommVar = m_ReadingVars.FirstOrDefault(Function(x) x.sAddress = Address) + Return If(Not IsNothing(Var), Var.sName, "") + End Function - Private Sub UpdateGroup() + Private Sub UpdateContinuousVars() Dim bReaded As Boolean = True For Each Var In m_ReadingVars If Not Var.bReaded Then @@ -114,7 +128,12 @@ Public Class RWVariableManager Dim Var As CommVar = GetReadVarFromAddress(VarName) If Not IsNothing(Var) Then Var.SetValue(VarValue) - UpdateGroup() + ' se variabile ripetitiva lancio update variabili ripetitive + If Var.sType = CommVar.CommVarTypes.CONTINUOUS Then + UpdateContinuousVars() + Else + m_ReadVarCallbackDlg(CommandExecutedCorrectly, VarName, VarValue, VarType) + End If End If End If End Sub @@ -137,6 +156,11 @@ End Class Public Class CommVar + Public Enum CommVarTypes As Integer + ONETIME + CONTINUOUS + End Enum + Private m_sName As String Public ReadOnly Property sName As String Get @@ -149,8 +173,8 @@ Public Class CommVar Return m_sAddress End Get End Property - Private m_nType As Integer - Public ReadOnly Property sType As String + Private m_nType As CommVarTypes + Public ReadOnly Property sType As CommVarTypes Get Return m_nType End Get @@ -173,7 +197,7 @@ Public Class CommVar End Get End Property - Sub New(Name As String, Address As String, Type As Integer) + Sub New(Name As String, Address As String, Type As CommVarTypes) m_sName = Name m_sAddress = Address m_nType = Type diff --git a/EgtBEAMWALL.Supervisor/Utility/DbControllers.vb b/EgtBEAMWALL.Supervisor/Utility/DbControllers.vb index 08e71bf7..f2976e43 100644 --- a/EgtBEAMWALL.Supervisor/Utility/DbControllers.vb +++ b/EgtBEAMWALL.Supervisor/Utility/DbControllers.vb @@ -5,5 +5,6 @@ Public m_ProdController As New DataLayer.Controllers.ProdController Public m_MachGroupController As New DataLayer.Controllers.MachGroupController Public m_PartController As New DataLayer.Controllers.PartController + Public m_LogMachineController As New DataLayer.Controllers.LogMachineController End Module From b576276c7ae1a15fd4968e4d2c8751a984adca21 Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Thu, 22 Apr 2021 12:28:31 +0200 Subject: [PATCH 4/5] Modifiche comunicazione completate --- EgtBEAMWALL.Supervisor/Comms/TPAComm.vb | 55 ----------- .../Constants/ConstCommVar.vb | 30 ++++++ .../EgtBEAMWALL.Supervisor.vbproj | 1 + .../MachCommandMessagePanelVM.vb | 97 ++++++++++--------- .../MachGroupPanel/MyMachGroupPanelVM.vb | 6 ++ .../MachGroupPanel/MyMachGroupVM.vb | 5 + .../MachManagingThread/MachCommConst.vb | 1 + .../MachManagingThread/MachManaging.vb | 64 ++++++------ EgtBEAMWALL.Supervisor/Project/ProjectVM.vb | 9 -- 9 files changed, 131 insertions(+), 137 deletions(-) create mode 100644 EgtBEAMWALL.Supervisor/Constants/ConstCommVar.vb diff --git a/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb index 13724359..421a26a7 100644 --- a/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb +++ b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb @@ -185,9 +185,6 @@ Class TPAComm Private Sub RemoteObject_AxisCoordinatesUpdate(ByVal axisValue As Double, ByVal axisIndex As Integer) m_AxisCoordinatesCallbackDlg(axisValue, axisIndex) - _axesVal(axisIndex) = axisValue - Map.refMachCommandMessagePanelVM.AxisList(axisIndex).sValue = axisValue - Map.refMachCommandMessagePanelVM.AxisList(axisIndex).NotifyPropertyChanged("Value") End Sub Private Sub RemoteObject_RPCUpdate(ByVal newRPC As UInteger) @@ -212,58 +209,6 @@ Class TPAComm Private Sub RemoteObject_AlarmNotification(ByVal alarmOperation As Integer, ByVal alarmType As Integer, ByVal alarmMessage As String, ByVal alarmCode As String, ByVal alarmDateTime As String) ' restituisco errore ad interfaccia m_AlarmCallbackDlg(alarmOperation, alarmType, alarmMessage, alarmCode, alarmDateTime) - Select Case alarmType - Case CInt(ISOCNC.Remoting.AlarmType.Cycle) - - If alarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then - _errCycle = alarmCode & ": " & alarmMessage - Else - - If _errCycle IsNot Nothing AndAlso _errCycle <> "" Then - If _errCycle.Split(":"c)(0) = alarmCode Then _errCycle = "" - End If - End If - - Map.refMachCommandMessagePanelVM.UpdateErrCycle(_errCycle) - Case CInt(ISOCNC.Remoting.AlarmType.ISO) - - If alarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then - _iso = alarmCode & ": " & alarmMessage - Else - - If _iso IsNot Nothing AndAlso _iso <> "" Then - If _iso.Split(":"c)(0) = alarmCode Then _iso = "" - End If - End If - - Map.refMachCommandMessagePanelVM.UpdateIso(_iso) - Case CInt(ISOCNC.Remoting.AlarmType.Message) - - If alarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then - _message = alarmCode & ": " & alarmMessage - Else - - If _message IsNot Nothing AndAlso _message <> "" Then - If _message.Split(":"c)(0) = alarmCode Then _message = "" - End If - End If - - Map.refMachCommandMessagePanelVM.UpdateMessage(_message) - Case CInt(ISOCNC.Remoting.AlarmType.None) - Case CInt(ISOCNC.Remoting.AlarmType.System) - - If alarmOperation = CInt(ISOCNC.Remoting.AlarmOperation.Addition) Then - _errSystem = alarmCode & ": " & alarmMessage - Else - - If _errSystem IsNot Nothing AndAlso _errSystem <> "" Then - If _errSystem.Split(":"c)(0) = alarmCode Then _errSystem = "" - End If - End If - - Map.refMachCommandMessagePanelVM.UpdateErrSystem(_errSystem) - Case Else - End Select End Sub Private Sub RemoteObject_VariableCommandExecuted(ByVal executedCommand As Integer, ByVal commandExecutedCorrectly As Boolean, ByVal varName As String, ByVal varValue As String, ByVal varType As Integer) diff --git a/EgtBEAMWALL.Supervisor/Constants/ConstCommVar.vb b/EgtBEAMWALL.Supervisor/Constants/ConstCommVar.vb new file mode 100644 index 00000000..373e954c --- /dev/null +++ b/EgtBEAMWALL.Supervisor/Constants/ConstCommVar.vb @@ -0,0 +1,30 @@ +'---------------------------------------------------------------------------- +' EgalTech 2015-2017 +'---------------------------------------------------------------------------- +' File : ConstGen.vb Data : 10.04.17 Versione : 1.8d1 +' Contenuto : Modulo costanti generali. +' +' +' +' Modifiche : 10.04.17 DS Creazione modulo. +' +' +'---------------------------------------------------------------------------- + +Module ConstCommVa + + ' Assi + Public Const ASSE_X As String = "AsseX" + Public Const ASSE_Y As String = "AsseY" + Public Const ASSE_Z As String = "AsseZ" + Public Const ASSE_C As String = "AsseC" + Public Const ASSE_B As String = "AsseB" + ' variabili P eventi pezzo + Public Const P_PROD As String = "P_Prod" + Public Const P_MACHGROUP As String = "P_Machgroup" + Public Const P_PART As String = "P_Part" + Public Const P_STATE As String = "P_State" + ' variabile stato di reset + Public Const RESET_STATE As String = "Reset_State" + +End Module diff --git a/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj b/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj index 057fcba0..cca4c8f1 100644 --- a/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj +++ b/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj @@ -141,6 +141,7 @@ + diff --git a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb index 7e575d62..dd295d2c 100644 --- a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb @@ -15,7 +15,9 @@ Imports System.Windows.Threading Class MachCommandMessagePanelVM Inherits VMBase - Private m_AlarmTimer As DispatcherTimer + Private m_AlarmTimer As New DispatcherTimer + + Private m_MachManagingThread As Thread Private _Connected As Boolean = False Public ReadOnly Property Connected As Boolean @@ -115,8 +117,8 @@ Class MachCommandMessagePanelVM Private m_ErrCycleCount As Integer = 0 Public ReadOnly Property sErrCycle As String Get - Dim ShownErr As Alarm = m_ErrCycle(0) - Return ShownErr.sCode & ": " & ShownErr.sMessage + Dim ShownErr As Alarm = If(m_ErrCycleCount < m_ErrCycle.Count, m_ErrCycle(m_ErrCycleCount), Nothing) + Return If(Not IsNothing(ShownErr), ShownErr.sCode & ": " & ShownErr.sMessage, "") End Get End Property @@ -124,8 +126,8 @@ Class MachCommandMessagePanelVM Private m_IsoCount As Integer = 0 Public ReadOnly Property sIso As String Get - Dim ShownErr As Alarm = m_Iso(0) - Return ShownErr.sCode & ": " & ShownErr.sMessage + Dim ShownErr As Alarm = If(m_IsoCount < m_Iso.Count, m_Iso(m_IsoCount), Nothing) + Return If(Not IsNothing(ShownErr), ShownErr.sCode & ": " & ShownErr.sMessage, "") End Get End Property @@ -133,7 +135,8 @@ Class MachCommandMessagePanelVM Private m_MessageCount As Integer = 0 Public ReadOnly Property sMessage As String Get - Return m_Message + Dim ShownErr As Alarm = If(m_MessageCount < m_Message.Count, m_Message(m_MessageCount), Nothing) + Return If(Not IsNothing(ShownErr), ShownErr.sCode & ": " & ShownErr.sMessage, "") End Get End Property @@ -142,7 +145,8 @@ Class MachCommandMessagePanelVM Private m_ErrSystemCount As Integer = 0 Public ReadOnly Property sErrSystem As String Get - Return m_ErrSystem + Dim ShownErr As Alarm = If(m_ErrSystemCount < m_ErrSystem.Count, m_ErrSystem(m_ErrSystemCount), Nothing) + Return If(Not IsNothing(ShownErr), ShownErr.sCode & ": " & ShownErr.sMessage, "") End Get End Property @@ -151,6 +155,7 @@ Class MachCommandMessagePanelVM Private m_cmdDisconnect As ICommand Private m_cmdStart As ICommand Private m_cmdStop As ICommand + Private m_cmdReset As ICommand Private m_cmdStep As ICommand Private m_cmdSearchFilePath As ICommand Private m_cmdAddProgram As ICommand @@ -162,25 +167,26 @@ Class MachCommandMessagePanelVM Public Sub New() Map.SetRefMachCommandMessagePanelVM(Me) + ' creo thread gestione macchina + m_MachManagingThread = New Thread(Sub() + CommunicationThread.MachManagingThreadFunction(AddressOf ResultCallbackDlg, AddressOf CloseCallbackDlg, + AddressOf UpdateCallbackDlg, AddressOf AlarmCallbackDlg, + AddressOf AxisCoordinatesCallbackDlg, AddressOf OpStateCallbackDlg, + AddressOf ReadVarCallbackDlg) + End Sub) + ' impostazioni timer degli allarmi m_AlarmTimer.Interval = New TimeSpan(1500) AddHandler m_AlarmTimer.Tick, AddressOf AlarmTimer_Tick ' impostazione assi (leggerli da conf macchina) - m_AxisList = New ObservableCollection(Of Axis)({New Axis("X"), - New Axis("Y"), - New Axis("Z"), - New Axis("C"), - New Axis("B")}) + m_AxisList = New ObservableCollection(Of Axis)({New Axis(ASSE_X), + New Axis(ASSE_Y), + New Axis(ASSE_Z), + New Axis(ASSE_C), + New Axis(ASSE_B)}) NotifyPropertyChanged(NameOf(Connect_Background)) End Sub - Public ReadOnly Property Connect_Command As ICommand - Get - If m_cmdConnect Is Nothing Then m_cmdConnect = New Command(AddressOf Connect) - Return m_cmdConnect - End Get - End Property - Private Sub AlarmTimer_Tick() If m_ErrCycle.Count = 0 AndAlso m_Iso.Count = 0 AndAlso m_Message.Count = 0 AndAlso m_ErrSystem.Count = 0 Then NotifyPropertyChanged(NameOf(sErrCycle)) @@ -223,10 +229,17 @@ Class MachCommandMessagePanelVM NotifyPropertyChanged(NameOf(sErrSystem)) End Sub + Public ReadOnly Property Connect_Command As ICommand + Get + If m_cmdConnect Is Nothing Then m_cmdConnect = New Command(AddressOf Connect) + Return m_cmdConnect + End Get + End Property + Public Sub Connect(ByVal param As Object) - Map.refProjectVM.StartMachManagingThread() - MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.CONNECT)) ' avvio thread di gestione della macchina + m_MachManagingThread.Start() + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.CONNECT)) NotifyPropertyChanged(NameOf(Connect_Background)) If _Connected Then Init() End Sub @@ -253,10 +266,14 @@ Class MachCommandMessagePanelVM End Get End Property - Public Sub Disconnect(ByVal param As Object) + Public Sub Disconnect() MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.DISCONNECT)) End Sub + Public Sub SetOPState(OpState As Integer) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.SETOP)) + End Sub + Public ReadOnly Property Start_Command As ICommand Get If m_cmdStart Is Nothing Then m_cmdStart = New Command(AddressOf Start) @@ -279,6 +296,19 @@ Class MachCommandMessagePanelVM MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.STOP_)) End Sub + Public ReadOnly Property Reset_Command As ICommand + Get + If m_cmdReset Is Nothing Then m_cmdReset = New Command(AddressOf Reset) + Return m_cmdReset + End Get + End Property + + Public Sub Reset(ByVal param As Object) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.RESET)) + ' annullo stato di pronto ad essere lavorato di tutti i programmi + Map.refProjectVM.SupervisorMachGroupPanelVM.ResetAllMachGroups() + End Sub + Public ReadOnly Property Step_Command As ICommand Get If m_cmdStep Is Nothing Then m_cmdStep = New Command(AddressOf [Step]) @@ -301,19 +331,6 @@ Class MachCommandMessagePanelVM MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.SETPOINT)) End Sub - Public ReadOnly Property SearchFilePath_Command As ICommand - Get - If m_cmdSearchFilePath Is Nothing Then m_cmdSearchFilePath = New Command(AddressOf SearchFilePath) - Return m_cmdSearchFilePath - End Get - End Property - - Public Sub SearchFilePath(ByVal param As Object) - Dim OpenFileDialog As Microsoft.Win32.OpenFileDialog = New Microsoft.Win32.OpenFileDialog() - If OpenFileDialog.ShowDialog() = True Then _ProgramPath = OpenFileDialog.FileName - NotifyPropertyChanged(NameOf(ProgramPath)) - End Sub - Public ReadOnly Property AddProgram_Command As ICommand Get If m_cmdAddProgram Is Nothing Then m_cmdAddProgram = New Command(AddressOf AddProgram) @@ -481,21 +498,13 @@ Class Axis End Get End Property - Private m_Address As Double - Public ReadOnly Property sAddress As Double - Get - Return m_Address - End Get - End Property - Friend Sub SetValue(value As Double) m_Value = value NotifyPropertyChanged(NameOf(sValue)) End Sub - Public Sub New(Name As String, Address As String) + Public Sub New(Name As String) m_Name = Name - m_Address = Address End Sub End Class diff --git a/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupPanelVM.vb b/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupPanelVM.vb index a3cd2780..64c80edb 100644 --- a/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupPanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupPanelVM.vb @@ -50,6 +50,12 @@ Public Class MyMachGroupPanelVM Return MachGroupVMList.IndexOf(MachGroupVMList.FirstOrDefault(Function(x) DirectCast(x, MyMachGroupVM).bToBeProduced = False)) End Function + Friend Sub ResetAllMachGroups() + For Each Machgroup As MyMachGroupVM In MachGroupVMList + Machgroup.ResetProduce() + Next + End Sub + Public Overrides Function InitMachGroupList(Optional bUseDefaults As Boolean = False) As Boolean ' Svuoto precedente lista di MachGroup MachGroupVMList.Clear() diff --git a/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupVM.vb b/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupVM.vb index 4ef5bd54..ef2fd41b 100644 --- a/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupVM.vb +++ b/EgtBEAMWALL.Supervisor/MachGroupPanel/MyMachGroupVM.vb @@ -174,6 +174,11 @@ Public MustInherit Class MyMachGroupVM #Region "METHODS" + Friend Sub ResetProduce() + m_bCNReCalculated = False + m_bToBeProduced = False + End Sub + #End Region ' METHODS Public MustOverride Sub RefreshPartList() diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb index c33240d9..b237c8f5 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb @@ -28,6 +28,7 @@ READ = 12 WRITE = 13 DELETEALARMS = 14 + SETOP = 15 End Enum Public Enum CommandStates As Integer diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb index 59b190d6..9c008e6a 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb @@ -48,21 +48,21 @@ Class MachManaging ' eseguo ciclo principale Dim nResetVar As Integer 'CommVar(sResetVarName, nResetVar) - Dim P_Prod As Integer - Dim P_Machgroup As Integer - Dim P_Part As Integer - Dim P_State As Integer - Tpa.RWVariableManager.ReadVar("P_PROD", P_Prod) - Tpa.RWVariableManager.ReadVar("P_MACHGROUP", P_Machgroup) - Tpa.RWVariableManager.ReadVar("P_PART", P_Part) - Tpa.RWVariableManager.ReadVar("P_STATE", P_State) + Dim nP_Prod As Integer + Dim nP_Machgroup As Integer + Dim nP_Part As Integer + Dim nP_State As Integer + Tpa.RWVariableManager.ReadVar(P_PROD, nP_Prod) + Tpa.RWVariableManager.ReadVar(P_MACHGROUP, nP_Machgroup) + Tpa.RWVariableManager.ReadVar(P_PART, nP_Part) + Tpa.RWVariableManager.ReadVar(P_STATE, nP_State) ' se macchina pronta e non sta tagliando alcun pezzo If nResetVar = 0 AndAlso Tpa.opState = MachineOperatingState.Pending AndAlso - P_Prod = 0 AndAlso - P_Machgroup = 0 AndAlso - P_Part = 0 AndAlso - P_State = PartState.NULL Then + nP_Prod = 0 AndAlso + nP_Machgroup = 0 AndAlso + nP_Part = 0 AndAlso + nP_State = PartState.NULL Then ' verifico se c'e' un programma da lanciare For Each MachGroup In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList Dim MyMachGroup As MyMachGroupVM = DirectCast(MachGroup, MyMachGroupVM) @@ -77,38 +77,38 @@ Class MachManaging End If Next - ElseIf P_Prod <> 0 AndAlso - P_Machgroup <> 0 AndAlso - P_Part <> 0 Then - If P_State = PartState.START Then - DbControllers.m_PartController.UpdateStart(P_Prod, P_Machgroup, P_Part, DateTime.Now()) - Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = P_Machgroup) + ElseIf nP_Prod <> 0 AndAlso + nP_Machgroup <> 0 AndAlso + nP_Part <> 0 Then + If nP_State = PartState.START Then + DbControllers.m_PartController.UpdateStart(nP_Prod, nP_Machgroup, nP_Part, DateTime.Now()) + Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = nP_Machgroup) MachGroup.MyMachGroupM.SetState(1) MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) - Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = P_Part) + Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nP_Part) Part.nState = 1 Part.NotifyPropertyChanged(NameOf(Part.nState)) If Not MachGroup.PartVMList.Any(Function(x) x.nState = 1) Then - DbControllers.m_MachGroupController.UpdateStart(P_Prod, P_Machgroup, DateTime.Now()) + DbControllers.m_MachGroupController.UpdateStart(nP_Prod, nP_Machgroup, DateTime.Now()) MachGroup.MyMachGroupM.SetState(2) MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) End If - ElseIf P_State = PartState.END_ Then - DbControllers.m_PartController.UpdateEnd(P_Prod, P_Machgroup, P_Part, DateTime.Now()) - Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = P_Machgroup) - Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = P_Part) + ElseIf nP_State = PartState.END_ Then + DbControllers.m_PartController.UpdateEnd(nP_Prod, nP_Machgroup, nP_Part, DateTime.Now()) + Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = nP_Machgroup) + Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nP_Part) Part.nState = 2 Part.NotifyPropertyChanged(NameOf(Part.nState)) If MachGroup.PartVMList.All(Function(x) x.nState >= 2) Then - DbControllers.m_MachGroupController.UpdateEnd(P_Prod, P_Machgroup, DateTime.Now()) + DbControllers.m_MachGroupController.UpdateEnd(nP_Prod, nP_Machgroup, DateTime.Now()) MachGroup.MyMachGroupM.SetState(2) MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) End If ' azzero variabili - Tpa.RWVariableManager.WriteVar("P_PROD", 0) - Tpa.RWVariableManager.WriteVar("P_MACHGROUP", 0) - Tpa.RWVariableManager.WriteVar("P_PART", 0) - Tpa.RWVariableManager.WriteVar("P_STATE", 0) + Tpa.RWVariableManager.WriteVar(P_PROD, 0) + Tpa.RWVariableManager.WriteVar(P_MACHGROUP, 0) + Tpa.RWVariableManager.WriteVar(P_PART, 0) + Tpa.RWVariableManager.WriteVar(P_STATE, 0) End If End If @@ -147,6 +147,8 @@ Class MachManaging Tpa.RWVariableManager.WriteVar(Command.sVariable, Command.sVariable(1)) Case CommandTypes.DELETEALARMS DeleteAlarms() + Case CommandTypes.SETOP + End Select End Sub @@ -172,6 +174,10 @@ Class MachManaging m_Tpa.OnDispose() End Sub + Public Sub SetOPState() + + End Sub + Public Sub Start() Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start)) m_ResultCallbackDlg(CommandTypes.START, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "") diff --git a/EgtBEAMWALL.Supervisor/Project/ProjectVM.vb b/EgtBEAMWALL.Supervisor/Project/ProjectVM.vb index 82076b7d..363c12d4 100644 --- a/EgtBEAMWALL.Supervisor/Project/ProjectVM.vb +++ b/EgtBEAMWALL.Supervisor/Project/ProjectVM.vb @@ -27,11 +27,6 @@ Public Class ProjectVM End Set End Property - Private m_MachManagingThread As Thread - Friend Sub StartMachManagingThread() - m_MachManagingThread.Start() - End Sub - Private m_LeftPanel_Visibility As Boolean = True Public Property LeftPanel_Visibility As Visibility Get @@ -154,10 +149,6 @@ Public Class ProjectVM Sub New() ' Creo riferimento a questa classe in Map Map.SetRefProjectVM(Me) - ' creo thread gestione macchina - m_MachManagingThread = New Thread(Sub() - CommunicationThread.MachManagingThreadFunction() - End Sub) End Sub #End Region ' CONSTRUCTOR From 415ae0a39c0826501e55827a1a14bc6a5a25614e Mon Sep 17 00:00:00 2001 From: Emmanuele Sassi Date: Fri, 23 Apr 2021 13:59:18 +0200 Subject: [PATCH 5/5] Migliorie e correzioni Creazione cartela MachLog --- EgtBEAMWALL.Core/Constants/ConstMachComm.vb | 32 +++++++++ EgtBEAMWALL.Core/EgtBEAMWALL.Core.vbproj | 2 + EgtBEAMWALL.Core/MachLog.vb | 61 ++++++++++++++++ .../EgtBEAMWALL.Supervisor.vbproj | 14 ++++ .../LeftPanel/LeftPanelV.xaml | 71 +++---------------- .../MachCommandMessagePanelVM.vb | 35 +++++---- .../MachManagingThread/MachCommConst.vb | 33 +-------- EgtBEAMWALL.Supervisor/app.config | 26 +++---- EgtBEAMWALL.Supervisor/packages.config | 2 + .../BTLParam/BTLStructureVM.vb | 6 ++ .../BTLParam/PartListV.xaml | 26 +++---- .../BTLParam/RawPartListV.xaml | 2 +- .../Constants/ConstBeam.vb | 4 ++ .../LeftPanel/LeftPanelVM.vb | 7 +- .../MainWindow/MainWindowVM.vb | 2 +- .../ProdManager/ProdManagerVM.vb | 1 + .../ProjManager/ProjManagerVM.vb | 3 + 17 files changed, 194 insertions(+), 133 deletions(-) create mode 100644 EgtBEAMWALL.Core/Constants/ConstMachComm.vb create mode 100644 EgtBEAMWALL.Core/MachLog.vb diff --git a/EgtBEAMWALL.Core/Constants/ConstMachComm.vb b/EgtBEAMWALL.Core/Constants/ConstMachComm.vb new file mode 100644 index 00000000..d4f01568 --- /dev/null +++ b/EgtBEAMWALL.Core/Constants/ConstMachComm.vb @@ -0,0 +1,32 @@ +Public Module ConstMachComm + + Public Enum ResultTypes + EXECUTED + RESULT + End Enum + + Public Enum CommandTypes As Integer + ERROR_ = 0 + CONNECT = 1 + DISCONNECT = 2 + START = 3 + SOFTSTART = 4 + STOP_ = 5 + RESET = 6 + STEP_ = 7 + SETPOINT = 8 + SENDPROG = 9 + REMOVEPROG = 10 + REMOVEALLPROG = 11 + READ = 12 + WRITE = 13 + DELETEALARMS = 14 + SETOP = 15 + End Enum + + Public Enum CommandStates As Integer + ERROR_ = 0 + OK = 1 + End Enum + +End Module diff --git a/EgtBEAMWALL.Core/EgtBEAMWALL.Core.vbproj b/EgtBEAMWALL.Core/EgtBEAMWALL.Core.vbproj index 873fd74a..261e0571 100644 --- a/EgtBEAMWALL.Core/EgtBEAMWALL.Core.vbproj +++ b/EgtBEAMWALL.Core/EgtBEAMWALL.Core.vbproj @@ -72,6 +72,7 @@ + @@ -86,6 +87,7 @@ + True diff --git a/EgtBEAMWALL.Core/MachLog.vb b/EgtBEAMWALL.Core/MachLog.vb new file mode 100644 index 00000000..a34c638c --- /dev/null +++ b/EgtBEAMWALL.Core/MachLog.vb @@ -0,0 +1,61 @@ +Public Class MachLog + + Private m_CommandType As CommandTypes + Private m_CommandState As CommandStates + Private m_ResultType As ResultTypes + Private m_Description As String + Private m_AlarmOperation As Integer + Private m_AlarmType As Integer + Private m_AlarmMessage As String + Private m_AlarmCode As String + Private m_AlarmDateTime As String + Private m_newOpState As Integer + Private m_CommandExecutedCorrectly As Boolean + Private m_VarAddress As String + Private m_VarValue As String + + Public Delegate Sub ResultCallbackDlg(CommandType As CommandTypes, CommandState As CommandStates, ResultType As ResultTypes, Description As String) + Public Delegate Sub AlarmCallbackDlg(AlarmOperation As Integer, AlarmType As Integer, AlarmMessage As String, AlarmCode As String, AlarmDateTime As String) + Public Delegate Sub OpStateCallbackDlg(newOpState As Integer) + Public Delegate Sub ReadVarCallbackDlg(CommandExecutedCorrectly As Boolean, VarAddress As String, VarValue As String) + + Protected Sub New() + End Sub + + Friend Shared Function CreateResultLog(CommandType As CommandTypes, CommandState As CommandStates, ResultType As ResultTypes, Description As String) + Dim NewMachLog As New MachLog + NewMachLog.m_CommandType = CommandType + NewMachLog.m_CommandState = CommandState + NewMachLog.m_ResultType = ResultType + NewMachLog.m_Description = Description + Return NewMachLog + End Function + + Friend Shared Function CreateAlarmLog(CommandType As CommandTypes, AlarmOperation As Integer, AlarmType As Integer, AlarmMessage As String, AlarmCode As String, AlarmDateTime As String) + Dim NewMachLog As New MachLog + NewMachLog.m_CommandType = CommandType + NewMachLog.m_AlarmOperation = AlarmOperation + NewMachLog.m_AlarmType = AlarmType + NewMachLog.m_AlarmMessage = AlarmMessage + NewMachLog.m_AlarmCode = AlarmCode + NewMachLog.m_AlarmDateTime = AlarmDateTime + Return NewMachLog + End Function + + Friend Shared Function CreateOPStateLog(CommandType As CommandTypes, newOpState As Integer) + Dim NewMachLog As New MachLog + NewMachLog.m_CommandType = CommandType + NewMachLog.m_newOpState = newOpState + Return NewMachLog + End Function + + Friend Shared Function CreateAlarmLog(CommandType As CommandTypes, CommandExecutedCorrectly As Boolean, VarAddress As String, VarValue As String) + Dim NewMachLog As New MachLog + NewMachLog.m_CommandType = CommandType + NewMachLog.m_AlarmOperation = CommandExecutedCorrectly + NewMachLog.m_AlarmType = VarAddress + NewMachLog.m_AlarmMessage = VarValue + Return NewMachLog + End Function + +End Class diff --git a/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj b/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj index cca4c8f1..3ba12b76 100644 --- a/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj +++ b/EgtBEAMWALL.Supervisor/EgtBEAMWALL.Supervisor.vbproj @@ -115,10 +115,24 @@ ..\..\..\Albatros\Bin\ISOCNC.Remoting.dll + + + ..\packages\MySql.Data.6.10.9\lib\net452\MySql.Data.dll + + + ..\packages\MySql.Data.Entity.6.10.9\lib\net452\MySql.Data.Entity.EF6.dll + + + + + + + + diff --git a/EgtBEAMWALL.Supervisor/LeftPanel/LeftPanelV.xaml b/EgtBEAMWALL.Supervisor/LeftPanel/LeftPanelV.xaml index 647b5af9..e6848a08 100644 --- a/EgtBEAMWALL.Supervisor/LeftPanel/LeftPanelV.xaml +++ b/EgtBEAMWALL.Supervisor/LeftPanel/LeftPanelV.xaml @@ -11,67 +11,18 @@ - - - - - - - - - - - - - - + + + + + + + + + + + - diff --git a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb index dd295d2c..96dd782f 100644 --- a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb @@ -240,23 +240,21 @@ Class MachCommandMessagePanelVM ' avvio thread di gestione della macchina m_MachManagingThread.Start() MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.CONNECT)) - NotifyPropertyChanged(NameOf(Connect_Background)) - If _Connected Then Init() End Sub Private Sub Init() ' inizializzo tutte le variabili - RWVariableManager.InitVar("AsseX", "0.TESTA.AsseX.X", CommVar.CommVarTypes.ONETIME) - RWVariableManager.InitVar("AsseY", "0.TESTA.AsseY.Y", CommVar.CommVarTypes.ONETIME) - RWVariableManager.InitVar("AsseZ", "0.TESTA.AsseZ.Z", CommVar.CommVarTypes.ONETIME) - RWVariableManager.InitVar("AsseZ", "0.TESTA.AsseC.C", CommVar.CommVarTypes.ONETIME) - RWVariableManager.InitVar("AsseZ", "0.TESTA.AsseB.B", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar(ASSE_X, "0.TESTA.AsseX.X", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar(ASSE_Y, "0.TESTA.AsseY.Y", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar(ASSE_Z, "0.TESTA.AsseZ.Z", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar(ASSE_B, "0.TESTA.AsseC.B", CommVar.CommVarTypes.ONETIME) + RWVariableManager.InitVar(ASSE_C, "0.TESTA.AsseB.C", CommVar.CommVarTypes.ONETIME) ' inizializzo valori assi leggendoli da variabili - MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseX")) - MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseY")) - MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseZ")) - MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseC")) - MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, "AsseB")) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, ASSE_X)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, ASSE_Y)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, ASSE_Z)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, ASSE_B)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.READ, ASSE_C)) End Sub Public ReadOnly Property Disconnect_Command As ICommand @@ -389,6 +387,19 @@ Class MachCommandMessagePanelVM #Region "CALLBACKS" Friend Sub ResultCallbackDlg(CommandType As CommandTypes, CommandState As CommandStates, ResultType As ResultTypes, Params As String) + Select Case CommandType + Case CommandTypes.CONNECT + If CommandState = CommandStates.OK Then + _Connected = True + Init() + NotifyPropertyChanged(NameOf(Connect_Background)) + End If + Case CommandTypes.DISCONNECT + If CommandState = CommandStates.OK Then + _Connected = False + NotifyPropertyChanged(NameOf(Connect_Background)) + End If + End Select ' DbControllers.m_LogMachineController.Create(m_SupervisorId,DateTime.Now(),nothing,Nothing,Nothing,) End Sub Friend Sub CloseCallbackDlg(ByRef bCancel As Boolean) diff --git a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb index b237c8f5..41c36f12 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb @@ -1,4 +1,6 @@ -Module MachCommConst +Imports EgtBEAMWALL.Core.ConstMachComm + +Module MachCommConst Public Enum PVars As Integer PROD = 0 @@ -7,35 +9,6 @@ STATE = 3 End Enum - Public Enum ResultTypes - EXECUTED - RESULT - End Enum - - Public Enum CommandTypes As Integer - ERROR_ = 0 - CONNECT = 1 - DISCONNECT = 2 - START = 3 - SOFTSTART = 4 - STOP_ = 5 - RESET = 6 - STEP_ = 7 - SETPOINT = 8 - SENDPROG = 9 - REMOVEPROG = 10 - REMOVEALLPROG = 11 - READ = 12 - WRITE = 13 - DELETEALARMS = 14 - SETOP = 15 - End Enum - - Public Enum CommandStates As Integer - ERROR_ = 0 - OK = 1 - End Enum - ' stati pezzo Public Enum PartState As Integer NULL = 0 diff --git a/EgtBEAMWALL.Supervisor/app.config b/EgtBEAMWALL.Supervisor/app.config index fc848f6d..2a03b5ad 100644 --- a/EgtBEAMWALL.Supervisor/app.config +++ b/EgtBEAMWALL.Supervisor/app.config @@ -2,36 +2,30 @@ -
+
- + - - + + - + - - + + - - + + - + diff --git a/EgtBEAMWALL.Supervisor/packages.config b/EgtBEAMWALL.Supervisor/packages.config index 3424f949..ffa9838d 100644 --- a/EgtBEAMWALL.Supervisor/packages.config +++ b/EgtBEAMWALL.Supervisor/packages.config @@ -1,4 +1,6 @@  + + \ No newline at end of file diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/BTLStructureVM.vb b/EgtBEAMWALL.ViewerOptimizer/BTLParam/BTLStructureVM.vb index 8331a9c9..f6a70386 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/BTLStructureVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/BTLStructureVM.vb @@ -464,6 +464,12 @@ Public Class BTLStructureVM #End Region ' Parametri generici + Public ReadOnly Property PDN_Msg As String + Get + Return "PDN_Msg" + End Get + End Property + #End Region #Region "CONSTRUCTOR" diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartListV.xaml b/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartListV.xaml index e43a1228..998ce34b 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartListV.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/PartListV.xaml @@ -27,9 +27,11 @@ - - - + + + + + @@ -103,40 +105,40 @@ - - + --> - - + --> - - + --> - - - + --> diff --git a/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml b/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml index 068196e5..a293ea0a 100644 --- a/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml +++ b/EgtBEAMWALL.ViewerOptimizer/BTLParam/RawPartListV.xaml @@ -65,7 +65,7 @@ + IsReadOnly="True"> diff --git a/EgtBEAMWALL.ViewerOptimizer/Constants/ConstBeam.vb b/EgtBEAMWALL.ViewerOptimizer/Constants/ConstBeam.vb index 03b52970..dc2ba40f 100644 --- a/EgtBEAMWALL.ViewerOptimizer/Constants/ConstBeam.vb +++ b/EgtBEAMWALL.ViewerOptimizer/Constants/ConstBeam.vb @@ -221,6 +221,10 @@ Friend Const MGR_RPT_PANELHEIGHT As String = "PANELHEIGHT" Friend Const MGR_RPT_PART As String = "PART" + ' parametri P per comunicazione con la macchina + Friend Const MGR_RPT_PRODID As String = "PRODID" + Friend Const MGR_RPT_PATTID As String = "PATTID" + ' parametri errori integration Friend Const ITG_CUTID As String = "CUTID" Friend Const ITG_TASKID As String = "TASKID" diff --git a/EgtBEAMWALL.ViewerOptimizer/LeftPanel/LeftPanelVM.vb b/EgtBEAMWALL.ViewerOptimizer/LeftPanel/LeftPanelVM.vb index 0e01a120..d571b221 100644 --- a/EgtBEAMWALL.ViewerOptimizer/LeftPanel/LeftPanelVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/LeftPanel/LeftPanelVM.vb @@ -78,11 +78,16 @@ Public Class LeftPanelVM ' creo nuovo gruppo di lavorazione Map.refMachGroupPanelVM.AddMachGroup() Dim nCurrMachGroup As Integer = EgtGetCurrMachGroup() + Dim sCurrMachGroupName As String = "" + EgtGetMachGroupName(nCurrMachGroup, sCurrMachGroupName) ' creo copia del pezzo Dim nPartDuploId As Integer = EgtDuploNew(SelPart.nPartId) Dim sLogPath As String = Map.refMainWindowVM.MainWindowM.sTempDir & "\RawPartLog.txt" If Map.refMachinePanelVM.SelectedMachine.nType = MachineType.BEAM Then - ' scrivo dati in gruppo di lavorazione + ' scrivo dati per variabili P di comunicazione con la macchina in gruppo di lavorazione + EgtSetInfo(nCurrMachGroup, MGR_RPT_PRODID, Map.refProdManagerVM.CurrProd.nProdId) + EgtSetInfo(nCurrMachGroup, MGR_RPT_PATTID, sCurrMachGroupName) + ' scrivo dati costruzione grezzo in gruppo di lavorazione EgtSetInfo(nCurrMachGroup, MGR_RPT_BARLEN, AddRawPartWndVM.VariableList(0).dValue) EgtSetInfo(nCurrMachGroup, MGR_RPT_PART & 1, nPartDuploId & "," & AddRawPartWndVM.VariableList(1).dValue) Dim BeamMachGroup As BeamMachGroupVM = Map.refMachGroupPanelVM.GetLastMachGroup() diff --git a/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowVM.vb b/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowVM.vb index 87f65677..3667745e 100644 --- a/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/MainWindow/MainWindowVM.vb @@ -22,7 +22,7 @@ Public Class MainWindowVM End Property ' Titolo - Private m_Title As String + Private m_Title As String = "" Public ReadOnly Property Title As String Get Return m_Title diff --git a/EgtBEAMWALL.ViewerOptimizer/ProdManager/ProdManagerVM.vb b/EgtBEAMWALL.ViewerOptimizer/ProdManager/ProdManagerVM.vb index 29b48c6a..1b5a429a 100644 --- a/EgtBEAMWALL.ViewerOptimizer/ProdManager/ProdManagerVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/ProdManager/ProdManagerVM.vb @@ -196,6 +196,7 @@ Public Class ProdManagerVM ' MyMachGroupList = Map.refProjectVM.MachGroupPanelVM.MachGroupList.Select(Function(x) New Core.WallMachGroup(x.Id, x.Name, x.Machine)) 'End If DbControllers.m_ProdController.UpdateMachGroup(CurrProd.nProdId, MyMachGroupList) + DbControllers.m_ProdController.UpdateMachGroup(CurrProd.nProdId, MyMachGroupList) End Sub #End Region ' SaveCommand diff --git a/EgtBEAMWALL.ViewerOptimizer/ProjManager/ProjManagerVM.vb b/EgtBEAMWALL.ViewerOptimizer/ProjManager/ProjManagerVM.vb index 3741190f..2bbcdf3d 100644 --- a/EgtBEAMWALL.ViewerOptimizer/ProjManager/ProjManagerVM.vb +++ b/EgtBEAMWALL.ViewerOptimizer/ProjManager/ProjManagerVM.vb @@ -237,6 +237,9 @@ Public Class ProjManagerVM Dim sProjDir As String = "" InitNewProject(nProjId, sProjDir) SetCurrProj(nProjId) + Dim sProjFileName As String = sProjDir & "\" & nProjId.ToString("0000") & ".nge" + ' salvo il progetto + EgtSaveFile(sProjFileName, NGE.BIN) Else MessageBox.Show("Impossibile creare un nuovo file!!") End If