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/Comms/TPAComm.vb b/EgtBEAMWALL.Supervisor/Comms/TPAComm.vb index 85c49c0b..421a26a7 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,64 +100,91 @@ 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 - 'If _opState = ISOCNC.Remoting.MachineOperatingState.Pending Then remObject.RemoveAllProgramsFromList() + m_opState = newOpState + m_OpStateCallbackDlg(newOpState) End Sub Private Sub RemoteObject_CommandExecuted(ByVal executedCommand As Integer) 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) - _axesVal(axisIndex) = axisValue - Map.refMachCommandMessagePanelVM.AxisList(axisIndex).Value = axisValue - Map.refMachCommandMessagePanelVM.AxisList(axisIndex).NotifyPropertyChanged("Value") + m_AxisCoordinatesCallbackDlg(axisValue, axisIndex) End Sub Private Sub RemoteObject_RPCUpdate(ByVal newRPC As UInteger) @@ -133,65 +207,25 @@ 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) - 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 + ' restituisco errore ad interfaccia + m_AlarmCallbackDlg(alarmOperation, alarmType, alarmMessage, alarmCode, alarmDateTime) 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 + 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/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 1fbd1417..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 + + + + + + + + @@ -141,6 +155,7 @@ + @@ -171,6 +186,8 @@ MachinePanelV.xaml + + 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 f9323cea..96dd782f 100644 --- a/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb +++ b/EgtBEAMWALL.Supervisor/MachCommandMessagePanel/MachCommandMessagePanelVM.vb @@ -10,10 +10,15 @@ Imports System.Windows Imports ISOCNC.Remoting Imports EgtUILib Imports System.Threading +Imports System.Windows.Threading Class MachCommandMessagePanelVM Inherits VMBase + Private m_AlarmTimer As New DispatcherTimer + + Private m_MachManagingThread As Thread + Private _Connected As Boolean = False Public ReadOnly Property Connected As Boolean Get @@ -27,13 +32,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 @@ -80,92 +78,84 @@ 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 = If(m_ErrCycleCount < m_ErrCycle.Count, m_ErrCycle(m_ErrCycleCount), Nothing) + Return If(Not IsNothing(ShownErr), 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 = If(m_IsoCount < m_Iso.Count, m_Iso(m_IsoCount), Nothing) + Return If(Not IsNothing(ShownErr), 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 + 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 - 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 + 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 - Public Sub UpdateErrSystem(ByVal msg As String) - _ErrSystem = msg - NotifyPropertyChanged(NameOf(ErrSystem)) - End Sub Private m_cmdConnect As ICommand 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 @@ -177,24 +167,68 @@ 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 - } + ' 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(ASSE_X), + New Axis(ASSE_Y), + New Axis(ASSE_Z), + New Axis(ASSE_C), + New Axis(ASSE_B)}) NotifyPropertyChanged(NameOf(Connect_Background)) End Sub + 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 ReadOnly Property Connect_Command As ICommand Get If m_cmdConnect Is Nothing Then m_cmdConnect = New Command(AddressOf Connect) @@ -203,44 +237,24 @@ 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 ' avvio thread di gestione della macchina - Map.refProjectVM.StartMachManagingThread() - NotifyPropertyChanged(NameOf(Connect_Background)) - If _Connected Then Init() + m_MachManagingThread.Start() + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.CONNECT)) 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(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, 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 @@ -250,9 +264,12 @@ Class MachCommandMessagePanelVM End Get End Property - Public Sub Disconnect(ByVal param As Object) - _Connected = Not Tpa.remObject.OnClose() - NotifyPropertyChanged(NameOf(Connect_Background)) + 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 @@ -263,9 +280,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 @@ -276,7 +291,20 @@ 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 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 @@ -287,8 +315,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 @@ -299,20 +326,7 @@ Class MachCommandMessagePanelVM End Property Public Sub SetPoint(ByVal param As Object) - Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.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)) + MachManaging.m_CommandList.Add(ThreadCommand.CreateCommand(CommandTypes.SETPOINT)) End Sub Public ReadOnly Property AddProgram_Command As ICommand @@ -323,11 +337,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 @@ -338,13 +348,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 @@ -355,7 +359,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 @@ -366,7 +370,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 @@ -377,36 +381,169 @@ 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) + 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) + ' 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 + Friend Sub SetValue(value As Double) + m_Value = value + NotifyPropertyChanged(NameOf(sValue)) End Sub + + Public Sub New(Name As String) + m_Name = Name + 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/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 new file mode 100644 index 00000000..41c36f12 --- /dev/null +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachCommConst.vb @@ -0,0 +1,35 @@ +Imports EgtBEAMWALL.Core.ConstMachComm + +Module MachCommConst + + Public Enum PVars As Integer + PROD = 0 + MACHGROUP = 1 + PART = 2 + STATE = 3 + End Enum + + ' stati pezzo + Public 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) + 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 + Friend m_UpdateCallbackDlg As UpdateCallbackDlg + 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 new file mode 100644 index 00000000..9c008e6a --- /dev/null +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManaging.vb @@ -0,0 +1,239 @@ +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 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 + 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) + If MyMachGroup.bReadyForMachining Then + ' recupero Path file CN + Dim CNPath As String = MyMachGroup.CnFilePath().Replace("\\\\", "\\") + ' lo lancio + 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 + Next + 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 = 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(nP_Prod, nP_Machgroup, DateTime.Now()) + MachGroup.MyMachGroupM.SetState(2) + MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nState)) + End If + 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(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) + 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() + Case CommandTypes.READ + Tpa.RWVariableManager.RefreshVar(Command.sVariable) + Case CommandTypes.WRITE + Tpa.RWVariableManager.WriteVar(Command.sVariable, Command.sVariable(1)) + Case CommandTypes.DELETEALARMS + DeleteAlarms() + Case CommandTypes.SETOP + + 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 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, "") + 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 + + 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 deddb6ee..4aee9d1b 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/MachManagingThread.vb @@ -1,102 +1,122 @@ -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" 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 - ' 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, ReadVarCallbackDlg As ReadVarCallbackDlg) + ' inizializzo callback + m_ResultCallbackDlg = ResultCallbackDlg + m_CloseCallbackDlg = CloseCallbackDlg + m_UpdateCallbackDlg = UpdateCallbackDlg + m_AlarmCallbackDlg = AlarmCallbackDlg + m_AxisCoordinatesCallbackDlg = AxisCoordinatesCallbackDlg + m_OpStateCallbackDlg = OpStateCallbackDlg + m_ReadVarCallbackDlg = ReadVarCallbackDlg - 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 + 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 ec5f2a63..1af58288 100644 --- a/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb +++ b/EgtBEAMWALL.Supervisor/MachManagingThread/RWVariableManager.vb @@ -1,25 +1,68 @@ 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_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 - 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 - 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) @@ -27,11 +70,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) @@ -44,17 +87,80 @@ 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 - Return m_ReadingVars(Array.IndexOf(m_ReadingVars, Function(x) x.sName = Name)) + Friend Shared Function GetReadVarFromName(Name As String) As CommVar + Return m_ReadingVars(GetIndexFromName(Name)) End Function + Private Shared Function GetIndexFromAddress(Address As String) As Integer + Return Array.IndexOf(m_ReadingVars, Function(x) x.sAddress = Address) + End Function + 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 UpdateContinuousVars() + 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) + ' 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 + + 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 Public Class CommVar + Public Enum CommVarTypes As Integer + ONETIME + CONTINUOUS + End Enum + Private m_sName As String Public ReadOnly Property sName As String Get @@ -67,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 @@ -81,6 +187,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,14 +196,15 @@ 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) + Sub New(Name As String, Address As String, Type As CommVarTypes) m_sName = Name m_sAddress = Address m_nType = Type End Sub + Friend Sub ResetReading() + m_bReaded = False + End Sub + End Class 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 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 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" 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