Merge remote-tracking branch 'gitlab.steamware/feature/total_rebuild' into develop

This commit is contained in:
Samuele Locatelli
2021-04-23 14:16:56 +02:00
27 changed files with 1139 additions and 441 deletions
@@ -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
+2
View File
@@ -72,6 +72,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="BeamM.vb" />
<Compile Include="Constants\ConstMachComm.vb" />
<Compile Include="MachGroup Model\BeamMachGroupM.vb" />
<Compile Include="DataAccess\PartAddedEventArgs.vb" />
<Compile Include="DataAccess\BTLParamAddedEventArgs.vb" />
@@ -86,6 +87,7 @@
<Compile Include="BTL Model\BTLStructureM.vb" />
<Compile Include="Constants\ConstBeam.vb" />
<Compile Include="Enum.vb" />
<Compile Include="MachLog.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen>
+61
View File
@@ -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
+115 -81
View File
@@ -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)
<SecurityPermission(SecurityAction.Demand)>
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
@@ -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
@@ -115,10 +115,24 @@
<Reference Include="ISOCNC.Remoting">
<HintPath>..\..\..\Albatros\Bin\ISOCNC.Remoting.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="MySql.Data, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.6.10.9\lib\net452\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.Entity.6.10.9\lib\net452\MySql.Data.Entity.EF6.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Configuration" />
<Reference Include="System.Configuration.Install" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Drawing.Design" />
<Reference Include="System.Management" />
<Reference Include="System.Runtime.Remoting" />
<Reference Include="System.Security" />
<Reference Include="System.Transactions" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
@@ -141,6 +155,7 @@
<Compile Include="BTLParam\BTLFeatureVM.vb" />
<Compile Include="Comms\TPAComm.vb" />
<Compile Include="Constants\ConstBeam.vb" />
<Compile Include="Constants\ConstCommVar.vb" />
<Compile Include="Constants\ConstGen.vb" />
<Compile Include="Constants\ConstIni.vb" />
<Compile Include="Constants\ConstMachIni.vb" />
@@ -171,6 +186,8 @@
<DependentUpon>MachinePanelV.xaml</DependentUpon>
</Compile>
<Compile Include="MachinePanel\MachinePanelVM.vb" />
<Compile Include="MachManagingThread\MachCommConst.vb" />
<Compile Include="MachManagingThread\MachManaging.vb" />
<Compile Include="MachManagingThread\MachManagingThread.vb" />
<Compile Include="MachManagingThread\RWVariableManager.vb" />
<Compile Include="MainWindow\MainWindowM.vb" />
@@ -11,67 +11,18 @@
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<GroupBox Header="Search &amp; Filter"
Margin="3,1,3,3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Text="Parameter Type"/>
<!--<ComboBox ItemsSource="{Binding Tag.SearchParamList, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:LeftPanelV}}}"
SelectedItem="{Binding Tag.SelSearchParam, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:LeftPanelV}}}"
Grid.Column="1"/>
<TextBlock Text="Text"
Grid.Row="1"/>
<EgtWPFLib5:EgtTextBox Text="{Binding Tag.SearchText, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:LeftPanelV}}}"
Grid.Column="1"
Grid.Row="1"/>
<TextBlock Text="Section"
Grid.Row="2"/>
<ComboBox ItemsSource="{Binding Tag.SectionList, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:LeftPanelV}}}"
SelectedItem="{Binding Tag.SelSection, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:LeftPanelV}}}"
DisplayMemberPath="sSectionXMaterial"
Grid.Column="1"
Grid.Row="2"/>-->
</Grid>
<GroupBox Header="Axis">
<ItemsControl ItemsSource="{Binding AxisList}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<UniformGrid Columns="2">
<TextBlock Text="{Binding sName}"/>
<TextBlock Text="{Binding sValue}"/>
</UniformGrid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
<!--<Grid Grid.Row="1">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Right">
<Button Content="N"
Command="{Binding NewRawPart_Command}"
Visibility="{Binding MachiningPage_Visibility}"
Style="{StaticResource LeftPanel_SmallButton}"/>
<Button Content="A"
Command="{Binding AddToRawPart_Command}"
Visibility="{Binding MachiningPage_Visibility}"
Style="{StaticResource LeftPanel_SmallButton}"/>
<Button Content="C"
Command="{Binding CopyPart_Command}"
Visibility="{Binding ViewPage_Visibility}"
Style="{StaticResource LeftPanel_SmallButton}"/>
<Button Content="+"
Command="{Binding AddPart_Command}"
Visibility="{Binding ViewPage_Visibility}"
Style="{StaticResource LeftPanel_SmallButton}"/>
<Button Content="-"
Command="{Binding RemovePart_Command}"
Visibility="{Binding ViewPage_Visibility}"
Style="{StaticResource LeftPanel_SmallButton}"/>
</StackPanel>
<EgtBEAMWALL:PartListV DataContext="{Binding Tag, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:LeftPanelV}}}"
Grid.Row="1"/>
</Grid>-->
<StackPanel Grid.Row="1"
Orientation="Horizontal"
HorizontalAlignment="Right">
@@ -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
@@ -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()
@@ -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()
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
+12
View File
@@ -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"
+10 -16
View File
@@ -2,36 +2,30 @@
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
requirePermission="false"/>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6"/>
<defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />
<providers>
<provider invariantName="MySql.Data.MySqlClient"
type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="DefaultConnection"
connectionString="server=localhost;port=3306;User Id=root;password=viacremasca;Persist Security Info=True;database=EgtBwDb;SslMode=none"
providerName="MySql.Data.MySqlClient"/>
<add name="DefaultConnection" connectionString="server=localhost;port=3306;User Id=root;password=viacremasca;Persist Security Info=True;database=EgtBwDb;SslMode=none" providerName="MySql.Data.MySqlClient" />
</connectionStrings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.10.9.0" newVersion="6.10.9.0"/>
<assemblyIdentity name="MySql.Data" publicKeyToken="c5687fc88969c44d" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.10.9.0" newVersion="6.10.9.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.data>
<DbProviderFactories>
<remove invariant="MySql.Data.MySqlClient"/>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL"
type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
<remove invariant="MySql.Data.MySqlClient" />
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.10.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</DbProviderFactories>
</system.data>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup></configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /></startup></configuration>
+2
View File
@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="6.4.4" targetFramework="net452" />
<package id="MySql.Data" version="6.10.9" targetFramework="net452" />
<package id="MySql.Data.Entity" version="6.10.9" targetFramework="net452" />
</packages>
@@ -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"
@@ -27,9 +27,11 @@
<!--PDN - Nome-->
<DataGridTextColumn Binding="{Binding nPDN}"
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.PDN_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataGridTextColumn.Header>
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=DataContext.PDN_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
<!--Validità pezzo-->
<DataGridTemplateColumn Width="25">
@@ -103,40 +105,40 @@
</DataGridTextColumn.Header>
</DataGridTextColumn>
<!--TBP - In produzione-->
<DataGridTextColumn Binding="{Binding nTBP}"
<!--<DataGridTextColumn Binding="{Binding nTBP}"
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.TBP_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGridTextColumn>-->
<!--DON - Prodotti-->
<DataGridTextColumn Binding="{Binding nDON}"
<!--<DataGridTextColumn Binding="{Binding nDON}"
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.DON_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGridTextColumn>-->
<!--ROT - Ruotare-->
<DataGridTextColumn Binding="{Binding nROT}"
<!--<DataGridTextColumn Binding="{Binding nROT}"
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.ROT_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGridTextColumn>-->
<!--GRP - Gruppo-->
<DataGridTextColumn Binding="{Binding sGRP}"
<DataGridTextColumn Binding="{Binding sGROUP}"
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.GRP_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
<!--UNT - Unit Time-->
<DataGridTextColumn Binding="{Binding nUNT}"
<!--<DataGridTextColumn Binding="{Binding nUNT}"
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="{Binding Path=DataContext.UNT_Msg,RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:PartListV}}}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGridTextColumn>-->
</DataGrid.Columns>
</DataGrid>
@@ -65,7 +65,7 @@
<!--L - Lunghezza-->
<DataGridTextColumn Binding="{Binding dL}"
Width="65"
IsReadOnly="{Binding Path=DataContext.bL_IsReadOnly, RelativeSource={RelativeSource AncestorType={x:Type EgtBEAMWALL:RawPartListV}}}">
IsReadOnly="True">
<DataGridTextColumn.Header>
<TextBlock Text="L"/>
</DataGridTextColumn.Header>
@@ -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"
@@ -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()
@@ -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
@@ -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
@@ -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