1120 lines
54 KiB
VB.net
1120 lines
54 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.Collections.Specialized
|
|
Imports EgtBEAMWALL.Core.ConstMachComm
|
|
Imports ISOCNC.Remoting
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
Imports System.IO
|
|
Imports EgtBEAMWALL.Core
|
|
Imports EgtBEAMWALL.Supervisor.CommVar
|
|
|
|
Public Class MachManaging
|
|
|
|
' lock per aggiunta elemento a lista MachGroup
|
|
Private Shared Lock_CommandList As New Object
|
|
|
|
Private m_bConnected As Boolean = False
|
|
Public ReadOnly Property bConnected As Boolean
|
|
Get
|
|
Return m_bConnected
|
|
End Get
|
|
End Property
|
|
Friend Sub SetConnected(value As Boolean)
|
|
m_bConnected = value
|
|
End Sub
|
|
|
|
Private m_CN As Object = Nothing
|
|
Public ReadOnly Property CN As Object
|
|
Get
|
|
Return m_CN
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property Tpa As TPAComm
|
|
Get
|
|
Return m_CN
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property Num_Flexium As NUMFlexiumComm
|
|
Get
|
|
Return m_CN
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property Num_Axium_APServer As NUMAxiumComm
|
|
Get
|
|
Return m_CN
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property Num_Axium_PCToolkit As NUMAxiumPcToolkitComm
|
|
Get
|
|
Return m_CN
|
|
End Get
|
|
End Property
|
|
|
|
Private Shared WithEvents m_CommandList As New ObservableCollection(Of ThreadCommand)
|
|
Public Shared ReadOnly Property CommandList As ObservableCollection(Of ThreadCommand)
|
|
Get
|
|
Return m_CommandList
|
|
End Get
|
|
End Property
|
|
Friend Shared Sub AddToCommandList(value As ThreadCommand)
|
|
SyncLock Lock_CommandList
|
|
For CommandIndex = m_CommandList.Count - 1 To 0 Step -1
|
|
Dim Command As ThreadCommand = m_CommandList(CommandIndex)
|
|
If Command.ProcessingStatus = ThreadCommand.ProcessingStatuses.DONE Then
|
|
m_CommandList.Remove(Command)
|
|
End If
|
|
Next
|
|
CommandList.Add(value)
|
|
End SyncLock
|
|
End Sub
|
|
|
|
Private m_bStartPending As Boolean = False
|
|
Public ReadOnly Property StartPending As Boolean
|
|
Get
|
|
Return m_bStartPending
|
|
End Get
|
|
End Property
|
|
Friend Sub ResetStartPending()
|
|
m_bStartPending = False
|
|
End Sub
|
|
Friend Sub SetStartPending(value As Boolean)
|
|
m_bStartPending = value
|
|
End Sub
|
|
|
|
' prossima barra di cui mando i parametri di carico
|
|
Private m_NextBarId As Integer
|
|
|
|
' indice di lavorazione della macchina (pareti NUM)
|
|
Private m_nMachIndex As Integer
|
|
Friend ReadOnly Property nMachIndex As Integer
|
|
Get
|
|
Return m_nMachIndex
|
|
End Get
|
|
End Property
|
|
|
|
Sub New()
|
|
' imposto in Map
|
|
Map.SetRefMachManaging(Me)
|
|
AddHandler m_CommandList.CollectionChanged, AddressOf CommandList_CollectionChanged
|
|
' mi connetto alla macchina
|
|
Connect()
|
|
End Sub
|
|
|
|
Private Sub OnDispose()
|
|
RemoveHandler m_CommandList.CollectionChanged, AddressOf CommandList_CollectionChanged
|
|
End Sub
|
|
|
|
Friend Sub Timer_Tick()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.NUM_FLEXIUM, NCTypes.TPA, NCTypes.NUM_AXIUM_APSERVER, NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
' eseguo ciclo principale
|
|
Dim nReset_State As Integer
|
|
Dim nStart_State As Boolean
|
|
Dim nStop_State As Boolean
|
|
Dim nP_Prod As Integer
|
|
Dim nP_Machgroup As Integer
|
|
Dim nP_Part As Integer
|
|
Dim nP_State As Integer
|
|
Dim nISO_Num As Integer
|
|
Dim nISO_Sent As Integer
|
|
Dim nRunning As Integer
|
|
Dim nCurrMachIndex As Integer
|
|
Dim ResetVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = RESET_STATE)
|
|
Dim StartVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = START_STATE)
|
|
Dim StopVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = STOP_STATE)
|
|
Dim ProdVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_PROD)
|
|
Dim MachGroupVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_MACHGROUP)
|
|
Dim PartVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_PART)
|
|
Dim StateVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_STATE)
|
|
Dim ISONumVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = ISO_NUM)
|
|
Dim ISOSentVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = ISO_SENT)
|
|
Dim RunningVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = RUNNING)
|
|
Dim MachIndexVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = MACHINDEX)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
' leggo tutte le variabili
|
|
Tpa.RWVariableManager.RefreshAllVars()
|
|
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)
|
|
Tpa.RWVariableManager.ReadVar(RESET_STATE, nReset_State)
|
|
Case NCTypes.NUM_FLEXIUM
|
|
ResetVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = RESET_STATE)
|
|
StartVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = START_STATE)
|
|
StopVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = STOP_STATE)
|
|
ProdVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_PROD)
|
|
MachGroupVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_MACHGROUP)
|
|
PartVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_PART)
|
|
StateVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = P_STATE)
|
|
ISONumVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = ISO_NUM)
|
|
ISOSentVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = ISO_SENT)
|
|
RunningVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = RUNNING)
|
|
MachIndexVariable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = MACHINDEX)
|
|
Integer.TryParse(ResetVariable.sValue, nReset_State)
|
|
Boolean.TryParse(StartVariable.sValue, nStart_State)
|
|
Boolean.TryParse(StopVariable.sValue, nStop_State)
|
|
Integer.TryParse(ProdVariable.sValue, nP_Prod)
|
|
Integer.TryParse(MachGroupVariable.sValue, nP_Machgroup)
|
|
Integer.TryParse(PartVariable.sValue, nP_Part)
|
|
Integer.TryParse(StateVariable.sValue, nP_State)
|
|
Integer.TryParse(ISONumVariable.sValue, nISO_Num)
|
|
Integer.TryParse(ISOSentVariable.sValue, nISO_Sent)
|
|
Integer.TryParse(RunningVariable.sValue, nRunning)
|
|
Integer.TryParse(MachIndexVariable.sValue, nCurrMachIndex)
|
|
' se indice lavorazione positivo, lo aggiorno
|
|
If nCurrMachIndex > 0 AndAlso nReset_State = 0 Then
|
|
m_nMachIndex = nCurrMachIndex
|
|
End If
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Dim dTemp As Double = 0
|
|
Dim nTemp As Integer = 0
|
|
If Not IsNothing(ResetVariable.sValue) Then
|
|
Integer.TryParse(ResetVariable.sValue, nReset_State)
|
|
Else
|
|
nReset_State = 1
|
|
End If
|
|
If Not IsNothing(StartVariable.sValue) Then
|
|
Integer.TryParse(StartVariable.sValue, nTemp)
|
|
nStart_State = (nTemp = 1)
|
|
Else
|
|
nStart_State = -1
|
|
End If
|
|
If Not IsNothing(StopVariable.sValue) Then
|
|
Integer.TryParse(StopVariable.sValue, nTemp)
|
|
nStop_State = (nTemp = 1)
|
|
Else
|
|
nStop_State = -1
|
|
End If
|
|
If Not IsNothing(ProdVariable.sValue) Then
|
|
Integer.TryParse(ProdVariable.sValue, nP_Prod)
|
|
Else
|
|
nP_Prod = -1
|
|
End If
|
|
If Not IsNothing(MachGroupVariable.sValue) Then
|
|
Integer.TryParse(MachGroupVariable.sValue, nP_Machgroup)
|
|
Else
|
|
nP_Machgroup = -1
|
|
End If
|
|
If Not IsNothing(PartVariable.sValue) Then
|
|
Integer.TryParse(PartVariable.sValue, nP_Part)
|
|
Else
|
|
nP_Part = -1
|
|
End If
|
|
If Not IsNothing(StateVariable.sValue) Then
|
|
Integer.TryParse(StateVariable.sValue, nP_State)
|
|
Else
|
|
nP_State = -1
|
|
End If
|
|
If Not IsNothing(ISONumVariable.sValue) Then
|
|
Integer.TryParse(ISONumVariable.sValue, nISO_Num)
|
|
Else
|
|
nISO_Num = -1
|
|
End If
|
|
If Not IsNothing(ISOSentVariable.sValue) Then
|
|
Integer.TryParse(ISOSentVariable.sValue, nISO_Sent)
|
|
Else
|
|
nISO_Sent = -1
|
|
End If
|
|
If Not IsNothing(RunningVariable.sValue) Then
|
|
Integer.TryParse(RunningVariable.sValue, nRunning)
|
|
Else
|
|
nRunning = -1
|
|
End If
|
|
If Not IsNothing(MachIndexVariable.sValue) Then
|
|
Integer.TryParse(MachIndexVariable.sValue, nCurrMachIndex)
|
|
Else
|
|
nCurrMachIndex = -1
|
|
End If
|
|
' se indice lavorazione positivo, lo aggiorno
|
|
If nCurrMachIndex > 0 AndAlso nReset_State = 0 Then
|
|
m_nMachIndex = nCurrMachIndex
|
|
End If
|
|
' leggo messaggi plc
|
|
ReadPLCMessages()
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
' leggo tutte le variabili
|
|
Num_Axium_PCToolkit.RefreshAllVars()
|
|
Dim dTemp As Double = 0
|
|
Dim nTemp As Integer = 0
|
|
If Not IsNothing(ResetVariable.sValue) Then
|
|
Integer.TryParse(ResetVariable.sValue, nReset_State)
|
|
Else
|
|
nReset_State = 1
|
|
End If
|
|
If Not IsNothing(StartVariable.sValue) Then
|
|
Integer.TryParse(StartVariable.sValue, nTemp)
|
|
nStart_State = (nTemp = 1)
|
|
Else
|
|
nStart_State = -1
|
|
End If
|
|
If Not IsNothing(StopVariable.sValue) Then
|
|
Integer.TryParse(StopVariable.sValue, nTemp)
|
|
nStop_State = (nTemp = 1)
|
|
Else
|
|
nStop_State = -1
|
|
End If
|
|
If Not IsNothing(ProdVariable.sValue) Then
|
|
Integer.TryParse(ProdVariable.sValue, nP_Prod)
|
|
Else
|
|
nP_Prod = -1
|
|
End If
|
|
If Not IsNothing(MachGroupVariable.sValue) Then
|
|
Integer.TryParse(MachGroupVariable.sValue, nP_Machgroup)
|
|
Else
|
|
nP_Machgroup = -1
|
|
End If
|
|
If Not IsNothing(PartVariable.sValue) Then
|
|
Integer.TryParse(PartVariable.sValue, nP_Part)
|
|
Else
|
|
nP_Part = -1
|
|
End If
|
|
If Not IsNothing(StateVariable.sValue) Then
|
|
Integer.TryParse(StateVariable.sValue, nP_State)
|
|
Else
|
|
nP_State = -1
|
|
End If
|
|
If Not IsNothing(ISONumVariable.sValue) Then
|
|
Integer.TryParse(ISONumVariable.sValue, nISO_Num)
|
|
Else
|
|
nISO_Num = -1
|
|
End If
|
|
If Not IsNothing(ISOSentVariable.sValue) Then
|
|
Integer.TryParse(ISOSentVariable.sValue, nISO_Sent)
|
|
Else
|
|
nISO_Sent = -1
|
|
End If
|
|
If Not IsNothing(RunningVariable.sValue) Then
|
|
Integer.TryParse(RunningVariable.sValue, nRunning)
|
|
Else
|
|
nRunning = -1
|
|
End If
|
|
If Not IsNothing(MachIndexVariable.sValue) Then
|
|
Integer.TryParse(MachIndexVariable.sValue, nCurrMachIndex)
|
|
Else
|
|
nCurrMachIndex = -1
|
|
End If
|
|
' se indice lavorazione positivo, lo aggiorno
|
|
If nCurrMachIndex > 0 AndAlso nReset_State = 0 Then
|
|
m_nMachIndex = nCurrMachIndex
|
|
End If
|
|
' leggo messaggi plc
|
|
ReadPLCMessages()
|
|
Num_Axium_PCToolkit.ReadCncMode()
|
|
Num_Axium_PCToolkit.ReadPosition()
|
|
End Select
|
|
' se NUM aggiorno stato della macchina
|
|
If CurrentMachine.NCType = NCTypes.NUM_FLEXIUM Then
|
|
Dim OpState As OPStates
|
|
If nStop_State Then
|
|
OpState = OPStates.Stop
|
|
ElseIf nStart_State Then
|
|
OpState = OPStates.Start
|
|
Else
|
|
OpState = OPStates.End
|
|
End If
|
|
If OpState <> Map.refLeftPanelVM.SelOPState.Id Then
|
|
m_OpStateCallbackDlg(OpState)
|
|
End If
|
|
ElseIf CurrentMachine.NCType = NCTypes.NUM_AXIUM_APSERVER OrElse CurrentMachine.NCType = NCTypes.NUM_AXIUM_PCTOOLKIT Then
|
|
Dim OpState As OPStates
|
|
If nReset_State = 1 Then
|
|
OpState = OPStates.End
|
|
ElseIf nStop_State Then
|
|
OpState = OPStates.Stop
|
|
ElseIf nStart_State Then
|
|
OpState = OPStates.Start
|
|
Else
|
|
OpState = OPStates.End
|
|
End If
|
|
If IsNothing(Map.refLeftPanelVM.SelOPState) OrElse OpState <> Map.refLeftPanelVM.SelOPState.Id Then
|
|
m_OpStateCallbackDlg(OpState)
|
|
End If
|
|
End If
|
|
' se TPA e non ancora fatto, preparo variabili barra successiva
|
|
If CurrentMachine.NCType = NCTypes.TPA AndAlso CurrentMachine.Flow = FlowTypes.CONTINUOUS AndAlso m_NextBarId = 0 Then
|
|
SetNextBarVars()
|
|
' se macchina NUM, non sto gia' spedendo e variabile spedizione me lo permette
|
|
ElseIf (CurrentMachine.NCType = NCTypes.NUM_FLEXIUM AndAlso
|
|
Not Num_Flexium.bIsTransferActive AndAlso
|
|
nISO_Sent = 1) OrElse
|
|
(CurrentMachine.NCType = NCTypes.NUM_AXIUM_APSERVER AndAlso
|
|
Not Num_Axium_APServer.bIsTransferActive AndAlso
|
|
nISO_Sent = 1) OrElse
|
|
(CurrentMachine.NCType = NCTypes.NUM_AXIUM_PCTOOLKIT AndAlso
|
|
Not Num_Axium_PCToolkit.bIsTransferActive AndAlso
|
|
nISO_Sent = 1) Then
|
|
' verifico se c'e' un programma da lanciare
|
|
SendNextProgram()
|
|
End If
|
|
' verifico se scattato stato reset
|
|
If nReset_State <> 0 Then
|
|
' resetto tutti i programmi
|
|
If Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then Map.refProjectVM.SupervisorMachGroupPanelVM.ResetAllMachGroups()
|
|
' resetto variabili P
|
|
ProdVariable.sValue = "0"
|
|
MachGroupVariable.sValue = "0"
|
|
PartVariable.sValue = "0"
|
|
StateVariable.sValue = "0"
|
|
If CurrentMachine.NCType = NCTypes.TPA Then
|
|
RemoveAllProgram() ' rimuovo programma default per pending
|
|
End If
|
|
' azzero variabile reset
|
|
ResetVariable.sValue = "0"
|
|
' resetto prossima barra e variabili V
|
|
If CurrentMachine.NCType = NCTypes.TPA AndAlso CurrentMachine.Flow = FlowTypes.CONTINUOUS Then
|
|
m_NextBarId = 0
|
|
For Index As Integer = 1 To 6
|
|
Tpa.RWVariableManager.WriteVarByName(VPAR & Index.ToString(), 0)
|
|
Next
|
|
End If
|
|
Return
|
|
' se macchina TPA, e' in pending e non sta tagliando alcun pezzo
|
|
ElseIf CurrentMachine.NCType = NCTypes.TPA AndAlso
|
|
Tpa.opState = MachineOperatingState.Pending AndAlso
|
|
Tpa.remObject.MachineOperativeStatus = 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
|
|
SendNextProgram()
|
|
' attesa per essere sicuro che abbia scritto e riletto variabili
|
|
Threading.Thread.Sleep(300)
|
|
' verifico stati inizio e fine pezzi
|
|
ElseIf nP_Prod <> 0 AndAlso
|
|
nP_Machgroup <> 0 AndAlso
|
|
nP_Part <> 0 Then
|
|
If nP_State = PartState.START Then
|
|
Dim dtStart As DateTime = DateTime.Now()
|
|
' recupero gruppo di lavorazione del pezzo
|
|
Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = nP_Machgroup)
|
|
' se pezzo = -1 devo dare start a tutti i pezzi del MachGroup
|
|
If nP_Part = -1 Then
|
|
If Not IsNothing(MachGroup) Then
|
|
For Each Part In MachGroup.PartVMList
|
|
' scrivo data start su Db pezzo
|
|
DbControllers.m_PartController.UpdateStart(nP_Prod, nP_Machgroup, Part.nPartId, dtStart)
|
|
DbControllers.m_PartController.UpdateStatus(nP_Prod, nP_Machgroup, Part.nPartId, ItemState.WIP)
|
|
' scrivo stato start
|
|
Part.nProduction_State = ItemState.WIP
|
|
Part.dtStartTime = dtStart
|
|
Part.NotifyPropertyChanged(NameOf(Part.nProduction_State))
|
|
' scrivo evento inizio pezzo su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreatePartStateLog(dtStart, nP_Prod, nP_Machgroup, Part.nPartId, nP_State, DbControllers.SupervisorId))
|
|
Next
|
|
End If
|
|
Else
|
|
' scrivo data start su Db pezzo
|
|
DbControllers.m_PartController.UpdateStart(nP_Prod, nP_Machgroup, nP_Part, dtStart)
|
|
DbControllers.m_PartController.UpdateStatus(nP_Prod, nP_Machgroup, nP_Part, ItemState.WIP)
|
|
If Not IsNothing(MachGroup) Then
|
|
' recupero pezzo
|
|
Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nP_Part)
|
|
If Not IsNothing(Part) Then
|
|
' scrivo stato start
|
|
Part.nProduction_State = ItemState.WIP
|
|
Part.dtStartTime = dtStart
|
|
Part.NotifyPropertyChanged(NameOf(Part.nProduction_State))
|
|
End If
|
|
End If
|
|
' scrivo evento inizio pezzo su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreatePartStateLog(dtStart, nP_Prod, nP_Machgroup, nP_Part, nP_State, DbControllers.SupervisorId))
|
|
End If
|
|
' azzero variabile per far ripartire macchina
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Tpa.RWVariableManager.WriteVarByName(P_STATE, 0)
|
|
Case NCTypes.NUM_FLEXIUM, NCTypes.NUM_AXIUM_APSERVER, NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
StateVariable.sValue = "0"
|
|
End Select
|
|
' se nessun pezzo della barra diverso da quello corrente e' in start
|
|
If Not MachGroup.PartVMList.Any(Function(x) x.nPartId <> nP_Part AndAlso x.nProduction_State = 1) Then
|
|
' scrivo data start su Db barra
|
|
DbControllers.m_MachGroupController.UpdateStart(nP_Prod, nP_Machgroup, dtStart)
|
|
DbControllers.m_MachGroupController.UpdateStatus(nP_Prod, nP_Machgroup, ItemState.WIP)
|
|
' scrivo stato start
|
|
If Not IsNothing(MachGroup) Then
|
|
MachGroup.MyMachGroupM.SetProductionState(ItemState.WIP)
|
|
MachGroup.dtStartTime = dtStart
|
|
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nProduction_State))
|
|
End If
|
|
' scrivo evento inizio MachGroup su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreateMachGroupStateLog(dtStart, nP_Prod, nP_Machgroup, nP_State, DbControllers.SupervisorId))
|
|
End If
|
|
' flag di aggiornamento log macchina
|
|
Map.refMachineLogPageVM.UpdateMachineLogList(False)
|
|
' attesa per essere sicuro che abbia scritto e riletto variabili
|
|
Threading.Thread.Sleep(300)
|
|
ElseIf nP_State = PartState.END_ Then
|
|
Dim dtEnd As DateTime = DateTime.Now()
|
|
' recupero gruppo di lavorazione del pezzo
|
|
Dim MachGroup As MyMachGroupVM = Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList.FirstOrDefault(Function(x) x.Id = nP_Machgroup)
|
|
' se pezzo = -1 devo dare end a tutti i pezzi del MachGroup
|
|
If nP_Part = -1 Then
|
|
If Not IsNothing(MachGroup) Then
|
|
For Each Part In MachGroup.PartVMList
|
|
' scrivo data end su Db pezzo
|
|
DbControllers.m_PartController.UpdateEnd(nP_Prod, nP_Machgroup, Part.nPartId, dtEnd)
|
|
DbControllers.m_PartController.UpdateStatus(nP_Prod, nP_Machgroup, Part.nPartId, ItemState.Produced)
|
|
' scrivo stato end
|
|
Part.nProduction_State = ItemState.Produced
|
|
Part.dtEndTime = dtEnd
|
|
Part.NotifyPropertyChanged(NameOf(Part.nProduction_State))
|
|
' resetto stato redo
|
|
Part.bRedo = False
|
|
' se non impostata data start
|
|
If Part.dtStartTime = DateTime.MinValue Then
|
|
' scrivo data start su Db pezzo
|
|
Dim dtStart As DateTime = Part.dtEndTime - TimeSpan.FromSeconds(60)
|
|
DbControllers.m_PartController.UpdateStart(nP_Prod, nP_Machgroup, Part.nPartId, dtStart)
|
|
Part.dtStartTime = dtStart
|
|
End If
|
|
' scrivo evento fine pezzo su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreatePartStateLog(dtEnd, nP_Prod, nP_Machgroup, Part.nPartId, nP_State, DbControllers.SupervisorId))
|
|
Next
|
|
End If
|
|
Else
|
|
' scrivo data end su Db pezzo
|
|
DbControllers.m_PartController.UpdateEnd(nP_Prod, nP_Machgroup, nP_Part, dtEnd)
|
|
DbControllers.m_PartController.UpdateStatus(nP_Prod, nP_Machgroup, nP_Part, ItemState.Produced)
|
|
If Not IsNothing(MachGroup) Then
|
|
' recupero pezzo
|
|
Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nP_Part)
|
|
If Not IsNothing(Part) Then
|
|
' scrivo stato end
|
|
Part.nProduction_State = ItemState.Produced
|
|
Part.dtEndTime = dtEnd
|
|
Part.NotifyPropertyChanged(NameOf(Part.nProduction_State))
|
|
' resetto stato redo
|
|
Part.bRedo = False
|
|
End If
|
|
End If
|
|
' scrivo evento fine pezzo su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreatePartStateLog(dtEnd, nP_Prod, nP_Machgroup, nP_Part, nP_State, DbControllers.SupervisorId))
|
|
End If
|
|
|
|
' se tutti i pezzi della barra sono in end
|
|
If Not IsNothing(MachGroup) AndAlso MachGroup.PartVMList.All(Function(x) x.nProduction_State >= 2) Then
|
|
' scrivo data end su Db barra
|
|
DbControllers.m_MachGroupController.UpdateEnd(nP_Prod, nP_Machgroup, dtEnd)
|
|
DbControllers.m_MachGroupController.UpdateStatus(nP_Prod, nP_Machgroup, ItemState.Produced)
|
|
' scrivo stato end
|
|
MachGroup.MyMachGroupM.SetProductionState(ItemState.Produced)
|
|
MachGroup.dtEndTime = dtEnd
|
|
MachGroup.NotifyPropertyChanged(NameOf(MachGroup.nProduction_State))
|
|
' scrivo evento fine MachGroup su DB
|
|
DbControllers.m_LogMachineController.Create(LogEvent.CreateMachGroupStateLog(dtEnd, nP_Prod, nP_Machgroup, nP_State, DbControllers.SupervisorId))
|
|
' azzero tutte le variabilli per iniziare barra successiva
|
|
ProdVariable.sValue = "0"
|
|
MachGroupVariable.sValue = "0"
|
|
PartVariable.sValue = "0"
|
|
StateVariable.sValue = "0"
|
|
|
|
' se non impostata data start
|
|
If MachGroup.dtStartTime = DateTime.MinValue Then
|
|
Dim dtStart As DateTime = MachGroup.dtEndTime - TimeSpan.FromSeconds(60)
|
|
' provo a recuperare tempo stimato
|
|
If MachGroup.nCALC_TIME > 0 Then
|
|
Dim MinPartStart As DateTime = MachGroup.PartVMList.Min(Function(x) x.dtStartTime)
|
|
If MinPartStart > DateTime.MinValue Then
|
|
dtStart = New DateTime(Math.Min((MachGroup.dtEndTime - TimeSpan.FromSeconds(MachGroup.nCALC_TIME)).Ticks, MinPartStart.Ticks))
|
|
Else
|
|
dtStart = MachGroup.dtEndTime - TimeSpan.FromSeconds(MachGroup.nCALC_TIME)
|
|
End If
|
|
End If
|
|
' scrivo data start su Db barra
|
|
DbControllers.m_MachGroupController.UpdateStart(nP_Prod, nP_Machgroup, dtStart)
|
|
MachGroup.dtStartTime = dtStart
|
|
End If
|
|
' resetto stati di produzione
|
|
MachGroup.ResetProduce()
|
|
' se partenza pezzi uno a uno
|
|
If CurrentMachine.Flow = FlowTypes.ONEBYONE Then
|
|
' riattivo bottone produzione per tutti gli altri
|
|
MyMachGroupVM.UpdateProduceIsEnabledForAll()
|
|
End If
|
|
Else
|
|
' azzero variabile per far ripartire macchina
|
|
StateVariable.sValue = "0"
|
|
End If
|
|
' se pezzo = -1 stampo etichette di tutti i pezzi del MachGroup
|
|
If nP_Part = -1 Then
|
|
If Not IsNothing(MachGroup) Then
|
|
For Each Part In MachGroup.PartVMList
|
|
Map.refLeftPanelVM.PrintLabel(MachGroup, Part)
|
|
Next
|
|
End If
|
|
Else
|
|
' recupero pezzo
|
|
Dim Part As PartVM = MachGroup.PartVMList.FirstOrDefault(Function(x) x.nPartId = nP_Part)
|
|
If Not IsNothing(Part) Then
|
|
Map.refLeftPanelVM.PrintLabel(MachGroup, Part)
|
|
End If
|
|
End If
|
|
' flag di aggiornamento log macchina
|
|
Map.refMachineLogPageVM.UpdateMachineLogList(False)
|
|
' attesa per essere sicuro che abbia scritto e riletto variabili
|
|
Threading.Thread.Sleep(300)
|
|
End If
|
|
End If
|
|
|
|
End Select
|
|
|
|
End Sub
|
|
|
|
Private m_Lock_SendProgram As New Object
|
|
|
|
Private Function SetNextBarVars() As Boolean
|
|
' verifico se c'e' un programma da lanciare
|
|
If Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then
|
|
For Each MyMachGroup As MyMachGroupVM In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList
|
|
If Not MyMachGroup.bSentToMachine AndAlso MyMachGroup.dtStartTime = DateTime.MinValue Then
|
|
If MyMachGroup.bReadyForMachining Then
|
|
' leggo valori parametri V da file
|
|
Dim dVPars(10) As Double
|
|
Dim Lines() As String = File.ReadAllLines(MyMachGroup.CnFilePath())
|
|
Dim sVs() As String = Lines(0).Split(";"c)
|
|
For VParIndex = 1 To sVs.Length - 1
|
|
Dim VPar() As String = sVs(VParIndex).Split("="c)
|
|
VPar(1) = VPar(1).Trim
|
|
StringToDoubleAdv(VPar(1), dVPars(VParIndex - 1))
|
|
Next
|
|
' li scrivo nel CN
|
|
For Index As Integer = 1 To 10
|
|
Dim sValue As String = ""
|
|
sValue = DoubleToString(dVPars(Index - 1), 2)
|
|
Tpa.RWVariableManager.WriteVarByName(VPAR & Index.ToString(), sValue)
|
|
Next
|
|
m_NextBarId = MyMachGroup.Id
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
Return False
|
|
End Function
|
|
|
|
Private Function SendNextProgram() As Boolean
|
|
Dim bSent As Boolean = False
|
|
If (CurrentMachine.NCType = NCTypes.TPA AndAlso Not m_bStartPending AndAlso Tpa.opState = MachineOperatingState.Pending) OrElse
|
|
(CurrentMachine.NCType = NCTypes.NUM_FLEXIUM AndAlso Not Num_Flexium.bIsTransferActive) OrElse
|
|
(CurrentMachine.NCType = NCTypes.NUM_AXIUM_APSERVER AndAlso Not Num_Axium_APServer.bIsTransferActive) OrElse
|
|
(CurrentMachine.NCType = NCTypes.NUM_AXIUM_PCTOOLKIT AndAlso Not Num_Axium_PCToolkit.bIsTransferActive) Then ' Or Tpa.opState = MachineOperatingState.Start) Then
|
|
' verifico se c'e' un programma da lanciare
|
|
If Not IsNothing(Map.refProjectVM.SupervisorMachGroupPanelVM) Then
|
|
Dim bMachGroupNotReady As Boolean = False
|
|
SyncLock m_Lock_SendProgram
|
|
For Each MyMachGroup As MyMachGroupVM In Map.refProjectVM.SupervisorMachGroupPanelVM.MachGroupVMList
|
|
If Not MyMachGroup.bSentToMachine AndAlso (MyMachGroup.dtStartTime = DateTime.MinValue OrElse
|
|
(Map.refSupervisorManagerVM.CurrProd.nType = BWType.WALL AndAlso MyMachGroup.bResetWhileCutting)) Then
|
|
' verifico se ricalcolo finito
|
|
If MyMachGroup.bReadyForMachining AndAlso If(CurrentMachine.NCType = NCTypes.NUM_FLEXIUM Or CurrentMachine.NCType = NCTypes.NUM_AXIUM_APSERVER OrElse CurrentMachine.NCType = NCTypes.NUM_AXIUM_PCTOOLKIT, Not MyMachGroup.bSendingToMachine, True) Then
|
|
' lo lancio
|
|
bSent = SendProgram(MyMachGroup.CnFilePath(), MyMachGroup.Name)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
MyMachGroup.SetSentToMachine(bSent)
|
|
Case NCTypes.NUM_FLEXIUM, NCTypes.NUM_AXIUM_APSERVER, NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
MyMachGroup.SetSendingToMachine(bSent)
|
|
End Select
|
|
m_NextBarId = 0
|
|
Exit For
|
|
Else
|
|
' programma non ancora pronto, esco per attendere
|
|
bMachGroupNotReady = True
|
|
Exit For
|
|
'Return False
|
|
End If
|
|
End If
|
|
Next
|
|
End SyncLock
|
|
If bMachGroupNotReady Then Return False
|
|
End If
|
|
End If
|
|
Return bSent
|
|
End Function
|
|
|
|
Private Sub CommandList_CollectionChanged(sender As Object, e As NotifyCollectionChangedEventArgs)
|
|
If Not IsNothing(e.NewItems) Then
|
|
Dim nCommandCount As Integer = e.NewItems.Count
|
|
For CommandIndex = 0 To nCommandCount - 1
|
|
Dim Command As ThreadCommand = e.NewItems(CommandIndex)
|
|
If Command.ProcessingStatus = ThreadCommand.ProcessingStatuses.WAITING Then
|
|
Command.SetProcessingStatus(ThreadCommand.ProcessingStatuses.PROCESSING)
|
|
ExecuteCommand(DirectCast(Command, ThreadCommand))
|
|
Command.SetProcessingStatus(ThreadCommand.ProcessingStatuses.DONE)
|
|
End If
|
|
Next
|
|
End If
|
|
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.STEP_
|
|
Step_()
|
|
Case CommandTypes.SETPOINT
|
|
SetPoint()
|
|
Case CommandTypes.SENDPROG
|
|
SendProgram(Command.sVariable, Command.sVariables(1))
|
|
Case CommandTypes.REMOVEPROG
|
|
RemoveProgram(Command.nVariable, Command.sVariable, Command.sVariables(1))
|
|
Case CommandTypes.REMOVEALLPROG
|
|
RemoveAllProgram()
|
|
Case CommandTypes.READ_TPA
|
|
Tpa.RWVariableManager.RefreshVar(Command.sVariable)
|
|
Case CommandTypes.WRITE
|
|
WriteVar(Command.sVariable, Command.sVariables(1), Command.nVariable)
|
|
Case CommandTypes.DELETEALARMS
|
|
DeleteAlarms()
|
|
Case CommandTypes.SETOPMODE
|
|
SetOPState(Command.nVariable)
|
|
Case CommandTypes.READ_NUMFLEXIUM
|
|
Num_Flexium.StartReadList()
|
|
Num_Flexium.StartReadELS()
|
|
Case CommandTypes.STOPREAD_NUMFLEXIUM
|
|
Num_Flexium.CloseReadList()
|
|
Num_Flexium.CloseReadELS()
|
|
Case CommandTypes.MDI
|
|
SendMDI(Command.sVariable)
|
|
Case CommandTypes.SETCHANNEL
|
|
SetChannel(Command.nVariable)
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub Connect()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Try
|
|
m_CN = New TPAComm(Me)
|
|
m_bConnected = Tpa.remObject.OnConnect()
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
' imposto stato manuale
|
|
Dim ManualMode As OPState = Map.refLeftPanelVM.OPModeList.FirstOrDefault(Function(x) x.Id = OPModes.Manual)
|
|
Map.refLeftPanelVM.SetOPMode(ManualMode)
|
|
' creo classe di gestione variabili
|
|
Catch ex As Exception
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.EXECUTED, "Errore: impossibile connettersi!")
|
|
Return
|
|
End Try
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Try
|
|
m_CN = New NUMFlexiumComm(Me)
|
|
Num_Flexium.InitFxServer()
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
' creo classe di gestione variabili
|
|
Catch ex As Exception
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.EXECUTED, "Errore: impossibile connettersi!")
|
|
Return
|
|
End Try
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Try
|
|
m_CN = New NUMAxiumComm(Me)
|
|
Num_Axium_APServer.InitFxObjects()
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
' creo classe di gestione variabili
|
|
Catch ex As Exception
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.EXECUTED, "Errore: impossibile connettersi!")
|
|
Return
|
|
End Try
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Try
|
|
m_CN = New NUMAxiumPcToolkitComm(Me)
|
|
If Num_Axium_PCToolkit.InitConnection() Then
|
|
Num_Axium_PCToolkit.GetGeneralFunctions()
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
Else
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.EXECUTED, "Errore: impossibile connettersi!")
|
|
Return
|
|
End If
|
|
' creo classe di gestione variabili
|
|
Catch ex As Exception
|
|
m_ResultCallbackDlg(CommandTypes.CONNECT, CommandStates.ERROR_, ResultTypes.EXECUTED, "Errore: impossibile connettersi!")
|
|
Return
|
|
End Try
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub Disconnect()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
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()
|
|
Tpa.OnDispose()
|
|
Case NCTypes.NUM_FLEXIUM
|
|
m_bConnected = False
|
|
m_ResultCallbackDlg(CommandTypes.DISCONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
' chiudo classe Num_Flexium
|
|
Me.OnDispose()
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
m_bConnected = False
|
|
Num_Axium_APServer.CloseFxObjects()
|
|
m_ResultCallbackDlg(CommandTypes.DISCONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
' chiudo classe Num_Flexium
|
|
Me.OnDispose()
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
m_bConnected = False
|
|
Num_Axium_PCToolkit.CloseFxObjects()
|
|
m_ResultCallbackDlg(CommandTypes.DISCONNECT, CommandStates.OK, ResultTypes.EXECUTED, "")
|
|
' chiudo classe Num_Flexium
|
|
Me.OnDispose()
|
|
End Select
|
|
' termino thread di comunicazione
|
|
MachineCommThread.StopThread()
|
|
End Sub
|
|
|
|
Public Sub SetOPState(CNMode As NUMFlexiumComm.CNMode)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.SetMode(CNMode)
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.SetMode(CNMode)
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.SetMode(CNMode)
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub Start()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean
|
|
' imposto programma default.iso
|
|
If Tpa.opState = MachineOperatingState.End OrElse Tpa.opState = MachineOperatingState.Unspecified Then
|
|
Tpa.remObject.RemoveAllProgramsFromList()
|
|
Dim bFileOk As Boolean = False
|
|
Dim DefaultIsoFilePath As String = "C:\Albatros\system\DEFAULT.iso"
|
|
' verifico se esiste path
|
|
Try
|
|
If File.Exists(DefaultIsoFilePath) Then bFileOk = True
|
|
Catch ex As Exception
|
|
bFileOk = False
|
|
End Try
|
|
If Not bFileOk Then
|
|
Try
|
|
File.Copy(Map.refMainWindowVM.MainWindowM.sMachineMacroDir & "\" & "DEFAULT.ISO", DefaultIsoFilePath)
|
|
bFileOk = True
|
|
Catch ex As Exception
|
|
m_ResultCallbackDlg(CommandTypes.START, CommandStates.ERROR_, ResultTypes.NULL, "Error in copying DEFAULT.ISO file")
|
|
MessageBox.Show("Impossibile copiare il file DEFAULT.ISO!", "Error", MessageBoxButton.OK, MessageBoxImage.Error)
|
|
Return
|
|
End Try
|
|
End If
|
|
bOk = Tpa.remObject.AddProgramToList(DefaultIsoFilePath)
|
|
Threading.Thread.Sleep(1000)
|
|
bOk = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start))
|
|
m_ResultCallbackDlg(CommandTypes.START, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "DEFAULT.ISO send")
|
|
End If
|
|
bOk = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start))
|
|
m_bStartPending = bOk
|
|
m_ResultCallbackDlg(CommandTypes.START, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.Start()
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.Start()
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.Start()
|
|
End Select
|
|
' aggiorno stato bottoni in LeftPanel
|
|
Map.refLeftPanelVM.UpdateButtonIsEnabledState()
|
|
End Sub
|
|
|
|
Public Sub [Stop]()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.[Stop]))
|
|
m_ResultCallbackDlg(CommandTypes.STOP_, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.Stop_()
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.Stop_()
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.Stop_()
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub Reset()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.[End]))
|
|
m_ResultCallbackDlg(CommandTypes.RESET, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.Reset()
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.Reset()
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.Reset()
|
|
End Select
|
|
' aggiorno stato bottoni in LeftPanel
|
|
Map.refLeftPanelVM.UpdateButtonIsEnabledState()
|
|
End Sub
|
|
|
|
Public Sub Step_()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Step))
|
|
m_ResultCallbackDlg(CommandTypes.STEP_, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
Case NCTypes.NUM_FLEXIUM
|
|
''
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub SetPoint()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.SetPoint))
|
|
m_ResultCallbackDlg(CommandTypes.SETPOINT, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Map.refLeftPanelVM.SelOPMode = Map.refLeftPanelVM.OPModeList.Find(Function(x) x.Id = OPModes.Home)
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Map.refLeftPanelVM.SelOPMode = Map.refLeftPanelVM.OPModeList.Find(Function(x) x.Id = OPModes.Home)
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Map.refLeftPanelVM.SelOPMode = Map.refLeftPanelVM.OPModeList.Find(Function(x) x.Id = OPModes.Home)
|
|
End Select
|
|
End Sub
|
|
|
|
Public Function SendProgram(ProgramPath As String, ProgramId As String) As Boolean
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
If Tpa.opState = MachineOperatingState.Pending Then
|
|
Tpa.remObject.RemoveAllProgramsFromList()
|
|
Dim bOk As Boolean = False
|
|
ProgramPath = ProgramPath.Replace("\\", "\")
|
|
bOk = Tpa.remObject.AddProgramToList(ProgramPath)
|
|
Threading.Thread.Sleep(1000)
|
|
bOk = Tpa.remObject.SetCommand(CInt(ISOCNC.Remoting.Commands.Start_Program_Soft))
|
|
m_ResultCallbackDlg(CommandTypes.SENDPROG, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
Return bOk
|
|
End If
|
|
Return False
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Dim sFileType As String = "%" & ProgramId.ToString()
|
|
Num_Flexium.FileDownload(sFileType, ProgramPath)
|
|
Num_Flexium.StartTransfer()
|
|
Return True
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Dim sFileType As String = "%" & ProgramId.ToString()
|
|
Num_Axium_APServer.FileDownload(sFileType, ProgramPath)
|
|
Num_Axium_APServer.StartTransfer()
|
|
Return True
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Dim nFileType As Integer = 0
|
|
If Integer.TryParse(ProgramId, nFileType) AndAlso nFileType > 0 Then
|
|
Num_Axium_PCToolkit.FileDownload(nFileType * 10, ProgramPath)
|
|
End If
|
|
Return True
|
|
End Select
|
|
Return False
|
|
End Function
|
|
|
|
Public Sub RemoveProgram(ProgramIndex As Integer, ProgramPath As String, ProgramType As String)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean
|
|
Dim sError As String = ""
|
|
If ProgramIndex > 0 Then
|
|
bOk = CN.remObject.RemoveProgramFromListAtIndex(ProgramIndex)
|
|
ElseIf Not String.IsNullOrEmpty(ProgramPath) Then
|
|
bOk = CN.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)
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.FileDelete(ProgramType, ProgramPath)
|
|
Num_Flexium.StartTransfer()
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.FileDelete(ProgramType, ProgramPath)
|
|
Num_Axium_APServer.StartTransfer()
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.FileDelete(ProgramType, ProgramPath)
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub RemoveAllProgram()
|
|
Dim bOk As Boolean = CN.remObject.RemoveAllProgramsFromList()
|
|
m_ResultCallbackDlg(CommandTypes.REMOVEALLPROG, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
End Sub
|
|
|
|
Public Sub DeleteAlarms()
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Dim bOk As Boolean = CN.remObject.DeleteAlarms(CInt(AlarmType.ISO))
|
|
bOk = CN.remObject.DeleteAlarms(CInt(AlarmType.Message))
|
|
bOk = CN.remObject.DeleteAlarms(CInt(AlarmType.Cycle))
|
|
bOk = CN.remObject.DeleteAlarms(CInt(AlarmType.System))
|
|
m_ResultCallbackDlg(CommandTypes.DELETEALARMS, If(bOk, CommandStates.OK, CommandStates.ERROR_), ResultTypes.EXECUTED, "")
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub SetChannel(value As Integer)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.SetChannel(value)
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.SetChannel(value)
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.SetChannel(value)
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub SendMDI(value As String)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Num_Flexium.MDI_Execute(value)
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.MDI_Execute(value)
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.MDI_Execute(value)
|
|
End Select
|
|
End Sub
|
|
|
|
Public Sub WriteVar(Address As String, Value As String, Type As CommVar.Types)
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Tpa.RWVariableManager.WriteVarByAddress(Address, Value)
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Select Case Type
|
|
Case CommVar.Types.PLC
|
|
Num_Flexium.WritePlcVariables(Address, Value)
|
|
Case CommVar.Types.CN
|
|
Num_Flexium.WriteNCVariables(Address, Value)
|
|
End Select
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Select Case Type
|
|
Case CommVar.Types.PLC
|
|
Num_Axium_APServer.WritePlcVariables(Address, Value)
|
|
Case CommVar.Types.CN
|
|
Num_Axium_APServer.WriteNCVariables(Address, Value)
|
|
End Select
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Select Case Type
|
|
Case CommVar.Types.PLC
|
|
Num_Axium_PCToolkit.WritePlcVariables(Address, Value)
|
|
Case CommVar.Types.CN
|
|
Num_Axium_PCToolkit.WriteNCVariables(Address, Value)
|
|
End Select
|
|
End Select
|
|
End Sub
|
|
|
|
Public Shared Function InitVar(Section As String, nIndex As Integer) As CommVar
|
|
Dim NewVar As CommVar = GetPrivateProfileVariable(Section, nIndex, CurrentMachine.sMachIniFile)
|
|
If IsNothing(NewVar) Then Return Nothing
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.TPA
|
|
Return RWVariableManager.InitVar(NewVar)
|
|
Case NCTypes.NUM_FLEXIUM
|
|
Return NUMFlexiumComm.InitVar(NewVar)
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Return NUMAxiumComm.InitVar(NewVar)
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Return NUMAxiumPcToolkitComm.InitVar(NewVar)
|
|
End Select
|
|
Return Nothing
|
|
End Function
|
|
|
|
Private Shared Function GetPrivateProfileVariable(IpAppName As String, IpKeyName As String, IpFileName As String) As CommVar
|
|
Dim sVariable As String = ""
|
|
EgtUILib.GetPrivateProfileString(IpAppName, IpKeyName, "", sVariable, IpFileName)
|
|
If String.IsNullOrWhiteSpace(sVariable) Then Return Nothing
|
|
Dim sVariableValues() As String = sVariable.Split(","c)
|
|
'If Not sVariableValues.Count >= 4 Then Return Nothing
|
|
For Index As Integer = 0 To sVariableValues.Count - 1
|
|
sVariableValues(Index) = sVariableValues(Index).Trim()
|
|
Next
|
|
Dim ReadType As CommVar.ReadTypes
|
|
Select Case sVariableValues(2).ToLower()
|
|
Case "o"
|
|
ReadType = CommVar.ReadTypes.ONETIME
|
|
Case "c"
|
|
ReadType = CommVar.ReadTypes.CONTINUOUS
|
|
Case Else
|
|
ReadType = CommVar.ReadTypes.NULL
|
|
End Select
|
|
Dim Type As CommVar.Types
|
|
Select Case sVariableValues(3).ToLower()
|
|
Case "plc"
|
|
Type = CommVar.Types.PLC
|
|
Case "cn"
|
|
Type = CommVar.Types.CN
|
|
Case Else
|
|
Type = CommVar.ReadTypes.NULL
|
|
End Select
|
|
Dim Paragraph As Paragraphs = Paragraphs.NULL
|
|
Select Case IpAppName
|
|
Case S_MAINVARIABLES
|
|
Paragraph = Paragraphs.MAIN
|
|
Case S_INPUTVARIABLES
|
|
Paragraph = Paragraphs.INPUT
|
|
Case S_OUTPUTVARIABLES
|
|
Paragraph = Paragraphs.OUTPUT
|
|
End Select
|
|
Dim sDescription As String = ""
|
|
If sVariableValues.Length >= 5 Then
|
|
Dim nDescription As Integer
|
|
If Integer.TryParse(sVariableValues(4), nDescription) Then
|
|
Dim MsgParagraph As MsgParagraphs
|
|
Select Case Paragraph
|
|
Case Paragraphs.INPUT
|
|
MsgParagraph = MsgParagraphs.INPUT
|
|
Case Paragraphs.OUTPUT
|
|
MsgParagraph = MsgParagraphs.OUTPUT
|
|
Case Else
|
|
MsgParagraph = MsgParagraphs.INPUT
|
|
End Select
|
|
sDescription = MachMsg(MsgParagraph, nDescription)
|
|
Else
|
|
sDescription = sVariableValues(4)
|
|
End If
|
|
End If
|
|
Return New CommVar(sVariableValues(0), sVariableValues(1), ReadType, Type, Paragraph, sDescription)
|
|
End Function
|
|
|
|
Private Sub ReadPLCMessages()
|
|
Dim nPlc_Msg(5) As Integer
|
|
For Index As Integer = 1 To 6
|
|
Dim nIndex As Integer = Index
|
|
Dim PLCMessagesVariable As Variable = Map.refMachCommandMessagePanelVM.MainVariablesList.FirstOrDefault(Function(x) x.sName = PLC_MESSAGES & nIndex)
|
|
If IsNothing(PLCMessagesVariable) OrElse IsNothing(PLCMessagesVariable.sValue) Then Return
|
|
Dim nTemp As Integer = 0
|
|
Integer.TryParse(PLCMessagesVariable.sValue, nTemp)
|
|
Dim Bytes As Byte() = BitConverter.GetBytes(nTemp)
|
|
Dim NewBytes As Byte() = BitConverter.GetBytes(nTemp)
|
|
For nBIndex = Bytes.Count - 1 To 0 Step -1
|
|
NewBytes(Bytes.Count - 1 - nBIndex) = Bytes(nBIndex)
|
|
Next
|
|
Dim Res = BitConverter.ToInt32(NewBytes, 0)
|
|
nPlc_Msg(nIndex - 1) = Res
|
|
Next
|
|
Dim BitArray As New BitArray(nPlc_Msg)
|
|
Dim ErrorList As New List(Of Integer)
|
|
For BitIndex = 0 To BitArray.Count - 1
|
|
If BitIndex <= 169 AndAlso BitArray(BitIndex) Then
|
|
ErrorList.Add(BitIndex)
|
|
End If
|
|
Next
|
|
Select Case CurrentMachine.NCType
|
|
Case NCTypes.NUM_AXIUM_APSERVER
|
|
Num_Axium_APServer.objErrorHandler_ErrorFromActiveCnc2(ErrorList)
|
|
Case NCTypes.NUM_AXIUM_PCTOOLKIT
|
|
Num_Axium_PCToolkit.objErrorHandler_ErrorFromActiveCnc2(ErrorList)
|
|
End Select
|
|
End Sub
|
|
|
|
End Class
|