Files
OmagCUT/CurrentMachine.vb
T
Dario Sassi f0cde68314 OmagCUT :
- aggiunta gestione macchine con 2 tavole
- commentata comunicazione con Siemens (in attesa di completamento)
- aggiunta gestione estensione file da trasmettere al CN (da INI di macchina, default xpi)
- piccole migliorie a gestione buchi nei componenti parametrici.
2016-04-19 16:01:57 +00:00

657 lines
21 KiB
VB.net

Imports System.Collections.ObjectModel
Imports EgtUILib
Public Class CurrentMachine
' Riferimento alla MainWindow
Private m_MainWindow As MainWindow = Application.Current.MainWindow
' Nome macchina corrente
Private m_sMachineName As String = String.Empty
' File ini della macchina
Private m_sMachIniFile As String = String.Empty
' Estensione dei file programma pezzo (detti anche file Iso)
Private m_sIsoFileExt As String = String.Empty
' Incremento da dare all'asse C per far coincidere la linea della lama con l'asse X
Private m_dDeltaC As Double = 0
' Numero e tipo di utensili correntemente disponibili sulla macchina
Private m_MountedToolConfig As MountedToolConfigs = MountedToolConfigs.SAW
' Distanza di sicurezza
Private m_dSafeZ As Double = 0
' Flag che indicano stato tipologia utensili (attivo/non attivo)
Private m_bSaw As Boolean = False
Private m_bDrill As Boolean = False
Private m_bMill As Boolean = False
' Flag che indicano presenza tipologia lavorazioni (attivo/non attivo)
Private m_bSawing As Boolean = False
Private m_bDrilling As Boolean = False
Private m_bMilling As Boolean = False
Private m_bSawRoughing As Boolean = False
Private m_bSawFinishing As Boolean = False
' Variabili che nel caso di porta utensili indicano quanti utensili possono essere ospitati per tipo
' Variabili che contengono il nome degli utensili disponibili per tipo
Private m_sCurrSaw(0) As String
Private m_sCurrDrill(0) As String
Private m_sCurrMill(0) As String
' Variabili che contengono le lavorazioni correntemente attive (utilizzate per definire lavorazioni nel programma)
Private m_sCurrSawing As String = String.Empty
Private m_sCurrDrilling As String = String.Empty
Private m_sCurrMilling As String = String.Empty
Private m_sCurrSawRoughing As String = String.Empty
Private m_sCurrSawFinishing As String = String.Empty
Private m_sCurrSawSideFinishing As String = String.Empty
' Spessore sottopezzo
Private m_dAdditionalTable As Double = 0
' Numero portautensili presenti
Private m_ToolChangerNum As Double = 0
' Lista portautensili
Private m_ToolChanger As New List(Of ToolChangerPos)
' Numero portautensili manuali
Private m_ManualToolChangerNum As Double = 0
' Lista portautensili
Private m_ManualToolChanger As New List(Of ToolChangerPos)
' Lista dei materiali
Private m_Materials As New observablecollection(Of Material)
' Massimo id della lista materiali nel file ini
Private m_MaxIdMat As Integer = 0
' Materiale correntemente attivo (dell'ultimo grezzo impostato)
Private m_CurrMat As Material = Nothing
Friend Enum MountedToolConfigs As Integer
SAW = 0
SAWANDAUXTOOL = 1
MANUALTOOLCHANGER = 2
TOOLCHANGER = 3
End Enum
#Region "Proprietà che leggono e scrivono i valori anche da o su file ini"
Friend ReadOnly Property sMachineName As String
Get
Return m_sMachineName
End Get
End Property
Friend ReadOnly Property sMachIniFile As String
Get
Return m_sMachIniFile
End Get
End Property
Friend ReadOnly Property sIsoFileExt As String
Get
Return m_sIsoFileExt
End Get
End Property
Friend ReadOnly Property dDeltaC As Double
Get
Return m_dDeltaC
End Get
End Property
Friend ReadOnly Property MountedToolConfig As MountedToolConfigs
Get
Return m_MountedToolConfig
End Get
End Property
Friend Property dSafeZ As Double
Get
If EgtMdbGetGeneralParam(MCH_GP.SAFEZ, m_dSafeZ) Then
Return m_dSafeZ
Else
Return Nothing
End If
End Get
Set(value As Double)
If EgtMdbSetGeneralParam(MCH_GP.SAFEZ, m_dSafeZ) And
EgtMdbSave() Then
m_dSafeZ = value
End If
End Set
End Property
Friend ReadOnly Property bSaw As Boolean
Get
Return m_bSaw
End Get
End Property
Friend ReadOnly Property bDrill As Boolean
Get
Return m_bDrill
End Get
End Property
Friend ReadOnly Property bMill As Boolean
Get
Return m_bMill
End Get
End Property
Friend ReadOnly Property bSawing As Boolean
Get
Return m_bSawing
End Get
End Property
Friend ReadOnly Property bDrilling As Boolean
Get
Return m_bDrilling
End Get
End Property
Friend ReadOnly Property bMilling As Boolean
Get
Return m_bMilling
End Get
End Property
Friend ReadOnly Property bSawRoughing As Boolean
Get
Return m_bSawRoughing
End Get
End Property
Friend ReadOnly Property bSawFinishing As Boolean
Get
Return m_bSawFinishing
End Get
End Property
Friend Property sCurrSaw As String
Get
Return m_sCurrSaw(0)
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRSAW, value, sMachIniFile) Then
m_sCurrSaw(0) = value
m_MainWindow.m_CurrentProjectPageUC.ToolTxBx.Text = value
End If
End Set
End Property
Friend Property sCurrDrill As String
Get
Return m_sCurrDrill(0)
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRDRILL, value, sMachIniFile) Then
m_sCurrDrill(0) = value
End If
End Set
End Property
Friend Property sCurrMill As String
Get
Return m_sCurrMill(0)
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRMILL, value, sMachIniFile) Then
m_sCurrMill(0) = value
End If
End Set
End Property
Friend Property sCurrSawing As String
Get
Return m_sCurrSawing
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWING, value, sMachIniFile) Then
m_sCurrSawing = value
End If
End Set
End Property
Friend Property sCurrDrilling As String
Get
Return m_sCurrDrilling
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRDRILLING, value, sMachIniFile) Then
m_sCurrDrilling = value
End If
End Set
End Property
Friend Property sCurrMilling As String
Get
Return m_sCurrMilling
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRMILLING, value, sMachIniFile) Then
m_sCurrMilling = value
End If
End Set
End Property
Friend Property sCurrSawRoughing As String
Get
Return m_sCurrSawRoughing
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWROUGHING, value, sMachIniFile) Then
m_sCurrSawRoughing = value
End If
End Set
End Property
Friend Property sCurrSawFinishing As String
Get
Return m_sCurrSawFinishing
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWFINISHING, value, sMachIniFile) Then
m_sCurrSawFinishing = value
End If
End Set
End Property
Friend Property sCurrSawSideFinishing As String
Get
Return m_sCurrSawSideFinishing
End Get
Set(value As String)
If WritePrivateProfileString(S_MACH_MACH, K_CURRSAWSIDEFINISHING, value, sMachIniFile) Then
m_sCurrSawSideFinishing = value
End If
End Set
End Property
Friend Property dAdditionalTable As Double
Get
Return m_dAdditionalTable
End Get
Set(value As Double)
If WritePrivateProfileString(S_TABLE, K_ADDITIONALTABLE, DoubleToString(value, 3), sMachIniFile) Then
m_dAdditionalTable = value
End If
End Set
End Property
Friend ReadOnly Property dToolChangerNum As Double
Get
Return m_ToolChangerNum
End Get
End Property
Friend ReadOnly Property ToolChanger As List(Of ToolChangerPos)
Get
Return m_ToolChanger
End Get
End Property
Friend ReadOnly Property ToolChangerName(Index As Integer) As String
Get
If Index >= 0 And Index < m_ToolChanger.Count Then
Return m_ToolChanger(Index).sName
Else
Return String.Empty
End If
End Get
End Property
Friend WriteOnly Property ToolPos(Index As Integer) As String
Set(value As String)
If value <> m_ToolChanger(Index).sTool Then
m_ToolChanger(Index).sTool = value
WritePrivateProfileString(S_TOOLCHANGER, K_POS & Index + 1, value, sMachIniFile)
End If
End Set
End Property
Friend ReadOnly Property dManualToolChangerNum As Double
Get
Return m_ManualToolChangerNum
End Get
End Property
Friend ReadOnly Property ManualToolChanger As List(Of ToolChangerPos)
Get
Return m_ManualToolChanger
End Get
End Property
Friend ReadOnly Property ManualToolChangerName(Index As Integer) As String
Get
If Index >= 0 And Index < m_ManualToolChanger.Count Then
Return m_ManualToolChanger(Index).sName
Else
Return String.Empty
End If
End Get
End Property
Friend WriteOnly Property ManualToolPos(Index As Integer) As String
Set(value As String)
If value <> m_ManualToolChanger(Index).sTool Then
m_ManualToolChanger(Index).sTool = value
WritePrivateProfileString(S_TOOLCHANGER, K_MANUALPOS & Index + 1, value, sMachIniFile)
End If
End Set
End Property
Friend ReadOnly Property Materials As ObservableCollection(Of Material)
Get
Return m_Materials
End Get
End Property
Friend Sub AddMaterial(value As Material)
For Each Material In Materials
If Material.nId = value.nId Then
Exit Sub
End If
Next
WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & m_MaxIdMat + 1, value, sMachIniFile)
m_MaxIdMat += 1
Materials.Add(value)
End Sub
Friend Sub RemoveMaterial(value As Material)
' Se è il materiale corrente lo tolgo
If Not IsNothing(CurrMat) AndAlso CurrMat.nId = value.nId Then
CurrMat = Nothing
End If
' Rimuovo il materiale dall'elenco
Dim Index As Integer
For Index = 0 To Materials.Count - 1
If Materials(Index).nId = value.nId Then
m_Materials.Remove(Materials(Index))
Exit For
End If
Next
Dim TempMat As Material = Nothing
For I = Index To m_MaxIdMat - 1
GetPrivateProfileMaterial(S_MATERIALS, K_MATERIAL & I + 2, TempMat, sMachIniFile)
WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & I + 1, TempMat, sMachIniFile)
Next
WritePrivateProfileMaterial(S_MATERIALS, K_MATERIAL & m_MaxIdMat, Nothing, sMachIniFile)
m_MaxIdMat -= 1
' Rimuovo il materiale dall'elenco di tutte le lavorazioni
Dim MachiningName As String = String.Empty
Dim bFound As Boolean = EgtMdbGetFirstMachining(MCH_MY.SAWING, MachiningName)
While bFound
EgtMdbSetCurrMachining(MachiningName)
SearchAndRemoveMat(value.nId)
bFound = EgtMdbGetNextMachining(MCH_MY.SAWING, MachiningName)
End While
bFound = EgtMdbGetFirstMachining(MCH_MY.DRILLING, MachiningName)
While bFound
EgtMdbSetCurrMachining(MachiningName)
SearchAndRemoveMat(value.nId)
bFound = EgtMdbGetNextMachining(MCH_MY.DRILLING, MachiningName)
End While
bFound = EgtMdbGetFirstMachining(MCH_MY.MILLING, MachiningName)
While bFound
EgtMdbSetCurrMachining(MachiningName)
SearchAndRemoveMat(value.nId)
bFound = EgtMdbGetNextMachining(MCH_MY.DRILLING, MachiningName)
End While
End Sub
' Funzione che dato l'Id di un materiale lo rimuove dalla lavorazione corrente
Friend Sub SearchAndRemoveMat(valueId As Integer)
Dim SysNotes As String = String.Empty
EgtMdbGetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes)
If SysNotes <> String.Empty Then
Dim MachiningMaterials() = SysNotes.Split(";".ToCharArray)
SysNotes = String.Empty
For Each Material In MachiningMaterials
Dim Param() As String = Material.Split(",".ToCharArray)
If Param(0) <> valueId.ToString Then
SysNotes &= Material & ";"
End If
Next
If SysNotes(SysNotes.Length - 1) = ";" Then
SysNotes = SysNotes.Substring(0, SysNotes.Length - 1)
End If
EgtMdbSetCurrMachiningParam(MCH_MP.SYSNOTES, SysNotes)
End If
EgtMdbSaveCurrMachining()
End Sub
Friend Property CurrMat As Material
Get
Return m_CurrMat
End Get
Set(value As Material)
Dim CurrMatId As String = If(Not IsNothing(value), value.nId.ToString, "")
WritePrivateProfileString(S_MATERIALS, K_CURRMATERIAL, CurrMatId, sMachIniFile)
m_CurrMat = value
End Set
End Property
#End Region
Sub New()
' Leggo da file ini nome macchina corrente
GetPrivateProfileString(S_MACH, K_CURRMACH, "", m_sMachineName, m_MainWindow.GetIniFile())
' Impostazione path MachIni file
m_sMachIniFile = m_MainWindow.GetMachinesRootDir & "\" & sMachineName & "\" & sMachineName & ".ini"
' Leggo flag incremento asse C
m_dDeltaC = GetPrivateProfileDouble(S_AXES, K_DELTA_C, 0.0, sMachIniFile)
' Leggo estensione del file programma pezzo
GetPrivateProfileString(S_PARTPROGRAM, K_EXTENSION, "xpi", m_sIsoFileExt, sMachIniFile)
If m_sIsoFileExt(0) <> "." Then m_sIsoFileExt = "." & m_sIsoFileExt
' Leggo configurazione degli utensili in macchina
m_MountedToolConfig = GetPrivateProfileInt(S_TOOLS, K_MOUNTEDTOOLCONFIG, 0, sMachIniFile)
' Leggo flag presenza tipologie utensili
' lama
m_bSaw = (GetPrivateProfileInt(S_TOOLS, K_SAWBLADE, 0, sMachIniFile) > 0)
' foretto
m_bDrill = (GetPrivateProfileInt(S_TOOLS, K_DRILLBIT, 0, sMachIniFile) > 0)
' fresa
m_bMill = (GetPrivateProfileInt(S_TOOLS, K_MILL, 0, sMachIniFile) > 0)
' Leggo flag presenza tipologie lavorazioni
' lama
m_bSawing = (GetPrivateProfileInt(S_MACHININGS, K_SAWING, 0, sMachIniFile) > 0)
' foretto
m_bDrilling = (GetPrivateProfileInt(S_MACHININGS, K_DRILLING, 0, sMachIniFile) > 0)
' fresa
m_bMilling = (GetPrivateProfileInt(S_MACHININGS, K_MILLING, 0, sMachIniFile) > 0)
' sgrossatura con lama
m_bSawRoughing = (GetPrivateProfileInt(S_MACHININGS, K_SAWROUGHING, 0, sMachIniFile) > 0)
' finitura con lama
m_bSawFinishing = (GetPrivateProfileInt(S_MACHININGS, K_SAWFINISHING, 0, sMachIniFile) > 0)
' Leggo utensili correnti
' lama
GetPrivateProfileString(S_MACH_MACH, K_CURRSAW, Nothing, m_sCurrSaw(0), sMachIniFile)
' foretto
GetPrivateProfileString(S_MACH_MACH, K_CURRDRILL, Nothing, m_sCurrDrill(0), sMachIniFile)
' fresa
GetPrivateProfileString(S_MACH_MACH, K_CURRMILL, Nothing, m_sCurrMill(0), sMachIniFile)
' Leggo lavorazioni correnti
' lama
GetPrivateProfileString(S_MACH_MACH, K_CURRSAWING, Nothing, m_sCurrSawing, sMachIniFile)
' foretto
GetPrivateProfileString(S_MACH_MACH, K_CURRDRILLING, Nothing, m_sCurrDrilling, sMachIniFile)
' fresa
GetPrivateProfileString(S_MACH_MACH, K_CURRMILLING, Nothing, m_sCurrMilling, sMachIniFile)
' sgrossatura con lama
GetPrivateProfileString(S_MACH_MACH, K_CURRSAWROUGHING, Nothing, m_sCurrSawRoughing, sMachIniFile)
' finitura con lama
GetPrivateProfileString(S_MACH_MACH, K_CURRSAWFINISHING, Nothing, m_sCurrSawFinishing, sMachIniFile)
' spatolatura con lama
GetPrivateProfileString(S_MACH_MACH, K_CURRSAWSIDEFINISHING, Nothing, m_sCurrSawSideFinishing, sMachIniFile)
' Leggo numero di portautensili
m_ToolChangerNum = GetPrivateProfileInt(S_TOOLCHANGER, K_NUMBER, 0, sMachIniFile)
' Leggo da file ini nomi e utensili presenti in portautensili
For Index = 1 To m_ToolChangerNum
Dim sName As String = String.Empty
Dim sTool As String = String.Empty
GetPrivateProfileString(S_TOOLCHANGER, K_NAME & Index, Nothing, sName, sMachIniFile)
GetPrivateProfileString(S_TOOLCHANGER, K_POS & Index, Nothing, sTool, sMachIniFile)
m_ToolChanger.Add(New ToolChangerPos(Index, sName, sTool))
Next
' Leggo numero portautensili manuali
m_ManualToolChangerNum = GetPrivateProfileInt(S_TOOLCHANGER, K_MANUALNUMBER, 0, sMachIniFile)
' Leggo da file ini nomi e utensili manuali presenti
For Index = 1 To m_ManualToolChangerNum
Dim sName As String = String.Empty
Dim sTool As String = String.Empty
GetPrivateProfileString(S_TOOLCHANGER, K_MANUALNAME & Index, Nothing, sName, sMachIniFile)
GetPrivateProfileString(S_TOOLCHANGER, K_MANUALPOS & Index, Nothing, sTool, sMachIniFile)
m_ManualToolChanger.Add(New ToolChangerPos(Index, sName, sTool))
Next
' Leggo altezza sopratavola
m_dAdditionalTable = GetPrivateProfileDouble(S_TABLE, K_ADDITIONALTABLE, 0, sMachIniFile)
'Creo materiale di default e lo aggiungo alla lista
'm_Materials.Add(New Material(0, "Generico"))
' Leggo la lista dei materiali
Dim Material As Material = Nothing
Dim nIndex As Integer = 1
While (GetPrivateProfileMaterial(S_MATERIALS, K_MATERIAL & nIndex, Material, sMachIniFile))
m_Materials.Add(Material)
nIndex += 1
End While
' Salvo massimo indice a cui sono arrivato per usarlo quando devo aggiungere nuovi elementi alla lista
m_MaxIdMat = nIndex - 1
' Leggo materiale correntemente attivo
Dim CurrMatId As Integer = GetPrivateProfileInt(S_MATERIALS, K_CURRMATERIAL, 0, sMachIniFile)
For Each Material In Materials
If Material.nId = CurrMatId Then
m_CurrMat = Material
Exit For
End If
Next
End Sub
Friend Function GetPrivateProfileMaterial(
ByVal lpAppName As String,
ByVal lpKeyName As String,
ByRef Material As Material,
ByVal lpFileName As String) As Boolean
Dim sVal As String = String.Empty
GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName)
Dim sItems() As String = sVal.Split(",".ToCharArray)
If sItems.Count() = 2 Then
Material = New Material(sItems(0), sItems(1))
Return True
End If
Return False
End Function
Friend Function WritePrivateProfileMaterial(
ByVal lpAppName As String,
ByVal lpKeyName As String,
ByVal Material As Material,
ByVal lpFileName As String) As Boolean
Dim MatStr As String = Nothing
If Not IsNothing(Material) Then
MatStr = Material.nId.ToString & "," & Material.sName
End If
If WritePrivateProfileString(lpAppName, lpKeyName, MatStr, sMachIniFile) Then
Return True
End If
Return False
End Function
End Class
Class ToolChangerPos
Private m_sPosition As Integer
Private m_sName As String = String.Empty
Private m_sTool As String = String.Empty
Public ReadOnly Property sPosition As Integer
Get
Return m_sPosition
End Get
End Property
Public ReadOnly Property sName As String
Get
Return m_sName
End Get
End Property
Public Property sTool As String
Get
Return m_sTool
End Get
Set(value As String)
m_sTool = value
End Set
End Property
Sub New(sPosition As Integer, sName As String, sTool As String)
m_sPosition = sPosition
m_sName = sName
m_sTool = sTool
End Sub
End Class
Friend Class Material
Private m_nId As Integer
Private m_sName As String
Public ReadOnly Property nId As Integer
Get
Return m_nId
End Get
End Property
Public Property sName As String
Get
Return m_sName
End Get
Set(value As String)
m_sName = value
End Set
End Property
Sub New(sName As String, MaterialList As ObservableCollection(Of Material))
Dim nMaxId As Integer = 0
For Each Material In MaterialList
If Material.nId > nMaxId Then
nMaxId = Material.nId
End If
Next
m_nId = nMaxId + 1
m_sName = sName
End Sub
Sub New(nId As Integer, sName As String)
m_nId = nId
m_sName = sName
End Sub
End Class